Compare commits

...

80 Commits
v1 ... v1.15.2

Author SHA1 Message Date
Elias Nahum
9aa3de53a2 Version 1.15.2 and Build number 170 (#2513)
* Bump app version number to  1.15.2

* Bump app build number to 170
2019-01-18 14:27:17 -04:00
Elias Nahum
4d604c670a Bump app build number to 169 (#2510) 2019-01-18 00:42:33 -04:00
Martin Kraft
dac5be0eaa MM-13751: Fix for incorrect access to delete button. 2019-01-18 00:42:18 -04:00
Elias Nahum
2402fd1681 Bump app build number to 168 (#2505) 2019-01-18 00:41:51 -04:00
Elias Nahum
377e12b53c translations PR 20190110 (#2504) 2019-01-18 00:41:39 -04:00
Martin Kraft
1ff4c6ce83 MM-13654: Removes pin and delete longpress options from posts in arch… (#2495)
* MM-13654: Removes pin and delete longpress options from posts in archived channels.

* MM-13654: Maintains existing option order. Updates others' posts options.
2019-01-18 00:41:19 -04:00
Elias Nahum
1a8be5444c MM-13666 Detect post as emoji only if not a codeblock (#2497)
* Detect post as emoji only if not a codeblock

* Feedback review

Co-Authored-By: enahum <nahumhbl@gmail.com>

* Feedback review

Co-Authored-By: enahum <nahumhbl@gmail.com>
2019-01-18 00:41:05 -04:00
Elias Nahum
54c3ee97c4 Update fastlane (#2494) 2019-01-18 00:40:46 -04:00
Elias Nahum
9a20a45eee Fix other users status changes (#2491) 2019-01-18 00:40:27 -04:00
Elias Nahum
adab0b31ac Fix visibility of retry failed message option (#2492)
* Fix visibility of retry failed message option

* Feedback review
2019-01-18 00:40:10 -04:00
Elias Nahum
72b6270f8e translations PR 20181231 (#2485) 2019-01-18 00:39:47 -04:00
Elias Nahum
61d340d97d Bump version to 1.16.0 and Build number to 167 (#2481)
* Fix fastlane platform thumbnail

* Bump app version number to 1.16.0

* Bump app build number to 167
2019-01-18 00:39:12 -04:00
Elias Nahum
52179a557c translations PR 20181224 (#2479) 2019-01-18 00:39:03 -04:00
Elias Nahum
b8766bbbf2 Fix post menu rounded corners (#2472) 2019-01-18 00:38:50 -04:00
Elias Nahum
776a9d8fad LHS use getSortedFavoriteChannelIds instead of getFavoriteChannelIds (#2471) 2019-01-18 00:38:33 -04:00
Chris Duarte
fa10680ef3 Fixes for duplicate text on message attachments, empty space when attachment has no title (#2460) 2019-01-18 00:38:15 -04:00
Elias Nahum
341d773e8a Show an alert box when the team could not be joined (#2462) 2019-01-18 00:35:27 -04:00
Sudheer
f2fc1db00c MM-13333 Fix minor alignment issue with reply thread indicator (#2456)
* Add a pixel to margin right for profile_picture container
    to compensate status icon platform styles
2019-01-18 00:35:01 -04:00
Elias Nahum
4c606ed752 prevent double tap on Channel Info options (#2455) 2019-01-18 00:34:14 -04:00
Elias Nahum
1ab2925ac1 Remove extra divider below Edit Channel in Channel info (#2454)
* Remove extra divider below Edit Channel in Channel info

* Fix indentation
2019-01-18 00:33:57 -04:00
Elias Nahum
7e7b382207 Update date separators when timezone changes (#2443)
* Update date separators when timezone changes

* Fix typo
2019-01-18 00:33:39 -04:00
Elias Nahum
d2497cef94 Bump App Version to 1.15.1 and Build number to 166 (#2475)
* Bump app version number to 1.15.1

* Bump app build number to 166
2018-12-21 11:00:15 -03:00
Elias Nahum
39e7ffb5e1 Add the onMessage handler when sso completes (#2474)
* Add the onMessage handler when sso completes

* Enable handler only for mattermost server
2018-12-21 10:45:17 -03:00
Harrison Healey
9abb81f733 Bump app build number to 165 and increase minimum Android SDK version (#2470)
* Bump app build number to 165

* Increase Android minimum SDK version
2018-12-19 14:41:07 -03:00
Elias Nahum
7f61bba540 Bump app build number to 163 (#2459) 2018-12-13 13:29:41 -03:00
Elias Nahum
0f295d3943 translations PR 20181213 (#2458) 2018-12-13 09:39:39 -03:00
Elias Nahum
c1cc5f285d Post Menu initial position to show one option cut off (#2453) 2018-12-13 08:40:03 -03:00
Elias Nahum
170243fdd7 MM-13431 Fix load more posts (#2452)
* Load more posts of a channel by determining the amount of posts shown regardless of how many are in the store

* Feedback review

* do not combine posts when fetching them
2018-12-13 08:39:05 -03:00
Harrison Healey
785a2c0ebc MM-13421 Fix channel sidebar sometimes using old permissions (#2450) 2018-12-12 09:39:19 -03:00
Harrison Healey
f4f3ec6d92 MM-13420 Always show the Unreads section in the channel list (#2451) 2018-12-12 09:38:12 -03:00
Elias Nahum
e10d2d7171 Fix copy markdown link (#2449) 2018-12-12 09:36:28 -03:00
Elias Nahum
d19d6be716 Fix edit profile image (#2448) 2018-12-12 09:35:03 -03:00
Elias Nahum
984484b5ce translations PR 20181210 (#2447) 2018-12-12 09:33:05 -03:00
Elias Nahum
ab0e8eb8de Update react-native-image-picker dependency (#2446) 2018-12-10 17:38:52 -03:00
Elias Nahum
eee312e504 Bump app build number to 162 (#2445) 2018-12-10 17:14:23 -03:00
Saturnino Abril
8d791b1715 update redux commit to fix sorting of channels at sidebar unreads section 2018-12-10 23:03:01 +08:00
Elias Nahum
fc02199f19 MM-13419 Fix leaving private channel from another client (#2442) 2018-12-10 10:56:12 -03:00
Saturnino Abril
dd90f1ecc5 make circular badge on jewel for single-digit mention (#2422) 2018-12-10 20:44:25 +08:00
Elias Nahum
ca22a9489d MM-13365/MM-13375 Fix edit profile image (#2433)
* MM-13365/MM-13375 Fix edit profile image

* Set Max file size to 20Mb
2018-12-10 09:25:24 -03:00
Elias Nahum
143c88d0c4 Properly check if link is an image when link is shortened (#2441) 2018-12-10 09:20:09 -03:00
Elias Nahum
c0be2808fa Hide Favorite channel section when there are not favorite channels (#2439) 2018-12-10 09:18:29 -03:00
Elias Nahum
2ea9864e9c MM-13358 iOS Share extension channel list (#2429) 2018-12-10 09:16:15 -03:00
Elias Nahum
27247a4982 MM-13368 Do not truncate tall images in preview screen (#2438)
* MM-13368 Do not truncate tall images in preview screen

* Add unit test for viewport max height

* Fix typo
2018-12-10 09:03:54 -03:00
Elias Nahum
a85a3bf5d9 Sort pinned posts from newest to oldest (#2440)
* Sort pinned posts from newest to oldest

* Update mattermost-redux
2018-12-07 16:00:34 -03:00
Elias Nahum
852227684b MM-13379 Make deleted comments indented (#2437) 2018-12-07 12:28:07 -03:00
Elias Nahum
9bf14c8053 MM-13374 Fix collapse posts with long message attachments (#2436) 2018-12-07 12:27:21 -03:00
Elias Nahum
a7072ad212 MM-13367 Unexpected scrolling/blank while long post is incoming (#2435) 2018-12-07 12:26:26 -03:00
Elias Nahum
c62ce13aa1 MM-13366 Post menu doesn't hint at more options below the fold (#2434) 2018-12-07 12:25:35 -03:00
Elias Nahum
6ade1a94b8 MM-13364 Fix text too light on dark themes in TextSetting widget (#2432) 2018-12-07 12:24:37 -03:00
Elias Nahum
0cd492effb Fix team mention badge alignment on iOS (#2427) 2018-12-07 12:23:40 -03:00
Elias Nahum
b6623483a5 MM-13362 Update account settings header color when changing theme (#2431)
* MM-13362 Update account settings header color when changing theme

* Removed unneded static var
2018-12-07 12:21:24 -03:00
Elias Nahum
dff8a347a5 MM-13361 Set Open Teams icons background to white (#2430) 2018-12-07 12:19:41 -03:00
Elias Nahum
0f4dfdc37c Fix reaction list cutoff at end of list (#2424) 2018-12-07 12:15:26 -03:00
Elias Nahum
106557d0fa Android extension channel list to display all items (#2426) 2018-12-07 01:13:04 -03:00
Elias Nahum
1c9cf210c8 Fix opening documents on Android (#2425) 2018-12-06 14:24:36 -03:00
Saturnino Abril
97b6eaecb1 render text for non-existent emoji when post metadata is enabled (#2423) 2018-12-06 12:20:13 -05:00
Elias Nahum
507bb50ee1 Bump app build number to 161 (#2421) 2018-12-05 15:07:45 -03:00
Elias Nahum
80a49246f6 post menu and file attachments (#2414)
* post menu and file attachments

* Fix post list selector test

* Use new Gesture handler to avoid gesture conflicts in post menu and reaction list

* Allow reaction list to scroll the header on Android

* Feedback review

* Add some comments

* Fix eslint
2018-12-05 15:00:37 -03:00
Vasily Naumkin
218661c09c Fixed typo in i18nId (#2384)
There are should be `mobile.advanced_settings.delete_file_cache` instead of `mobile.advanced_settings.clear_downloads`.
2018-12-05 20:55:24 +08:00
Elias Nahum
f6921ca0ad translations PR 20181203 (#2418) 2018-12-04 19:13:59 -03:00
Elias Nahum
4591418278 Update mattermost-redux sidebar sorting and WS fixes 2018-11-30 11:31:54 -03:00
Chris Duarte
0be79ea91b File image attachments sometimes do not open the image preview (#2397) 2018-11-30 11:18:41 -03:00
Elias Nahum
f332dacedd More fixes to the post layout (#2408) 2018-11-30 11:18:32 -03:00
Elias Nahum
d83b129634 Bump app build number to 160 (#2396) 2018-11-29 15:53:16 -03:00
Chris Duarte
4177e16b62 Fixed issue where message attachments were empty if text came through on fallback (#2395) 2018-11-29 15:42:30 -03:00
Elias Nahum
123c8b9ad1 Fix fetching more channels to join (#2393)
* Fix fetching more channels to join

* update snapshot
2018-11-29 15:03:43 -03:00
Elias Nahum
54272796a3 translations PR 20181128 (adds Ukrainian) (#2391)
* translations PR 20181128

* Add Ukrainian to Mattermost
2018-11-28 15:07:29 -03:00
Elias Nahum
c496acbbf0 Android: Fix crash when attaching files from the downloads folder (#2390) 2018-11-28 15:07:00 -03:00
Jesús Espino
83a23d3b9f MM-13041: Not show direct channels without display name (#2388) 2018-11-28 16:47:56 +01:00
Jesús Espino
b46f336c05 Fixing no parseable (by the i18n extractor) optional chaining construction (#2387) 2018-11-28 12:37:49 -03:00
Elias Nahum
0feee89cfd Fix post menu touchables (#2385) 2018-11-28 12:35:06 -03:00
Jesús Espino
a9ebf5dcfa MM-12960: Only back to previous channel if is not archived (#2389) 2018-11-28 16:33:33 +01:00
Elias Nahum
52109fd132 Fix jewel in team sidebar for android (#2386) 2018-11-28 12:29:30 -03:00
Elias Nahum
e96624a990 Fetch team channels on extension init (#2383) 2018-11-27 19:46:27 -03:00
Elias Nahum
5e616d6910 Fix Post and network indicator Layouts (#2382)
* Fix post layout that caused text cutoff

* Fix network indicator layout on non iPhone X devices
2018-11-27 19:44:25 -03:00
Elias Nahum
349772d67f Count the posts received after combining join/leave (#2378) 2018-11-27 19:44:13 -03:00
Elias Nahum
775647b71c Add a threshold of 60px from the bottom to show new messages (#2376) 2018-11-27 19:44:01 -03:00
Elias Nahum
1c1673a63c Set refreshing default value (#2380) 2018-11-26 20:29:40 -03:00
Elias Nahum
1750273470 Fix edit post (#2379)
* Fix edit post

* Fix other references to TextInputWithLocalizedPlaceholder
2018-11-26 20:28:43 -03:00
Elias Nahum
1ef628b2f0 Fix crash when message attachment does not have images (#2377)
* Fix crash when message attachment does not have images

* optional chaining
2018-11-26 20:27:27 -03:00
118 changed files with 3335 additions and 1863 deletions

View File

@@ -1491,6 +1491,41 @@ SOFTWARE.
---
## react-native-gesture-handler
This product contains 'react-native-gesture-handler' by kmagiera
Declarative API exposing platform native touch and gesture system to React Native.
* HOMEPAGE:
* https://github.com/kmagiera/react-native-gesture-handler
* LICENSE: MIT
The MIT License (MIT)
Copyright (c) 2016 Krzysztof Magiera
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
---
## react-native-image-gallery
This product contains a modified version of 'react-native-image-gallery' by Archriss.

View File

@@ -113,8 +113,8 @@ android {
applicationId "com.mattermost.rnbeta"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 159
versionName "1.15.0"
versionCode 170
versionName "1.15.2"
multiDexEnabled = true
ndk {
abiFilters "armeabi-v7a", "x86"
@@ -216,6 +216,7 @@ dependencies {
implementation project(':rn-fetch-blob')
implementation project(':react-native-recyclerview-list')
implementation project(':react-native-webview')
implementation project(':react-native-gesture-handler')
// For animated GIF support
implementation 'com.facebook.fresco:fresco:1.10.0'

View File

@@ -1,11 +1,15 @@
package com.mattermost.rnbeta;
import com.mattermost.share.SharePackage;
import com.mattermost.share.RealPathUtil;
import android.app.Activity;
import android.support.annotation.NonNull;
import android.content.Context;
import android.os.Bundle;
import java.io.File;
import java.util.Arrays;
import java.util.List;
import com.reactnativedocumentpicker.ReactNativeDocumentPicker;
import com.oblador.keychain.KeychainPackage;
@@ -20,6 +24,7 @@ import com.gantix.JailMonkey.JailMonkeyPackage;
import io.tradle.react.LocalAuthPackage;
import com.github.godness84.RNRecyclerViewList.RNRecyclerviewListPackage;
import com.reactnativecommunity.webview.RNCWebViewPackage;
import com.swmansion.gesturehandler.react.RNGestureHandlerPackage;
import com.facebook.react.ReactPackage;
import com.facebook.soloader.SoLoader;
@@ -40,8 +45,7 @@ import com.wix.reactnativenotifications.core.AppLaunchHelper;
import com.wix.reactnativenotifications.core.AppLifecycleFacade;
import com.wix.reactnativenotifications.core.JsIOHelper;
import java.util.Arrays;
import java.util.List;
import android.util.Log;
public class MainApplication extends NavigationApplication implements INotificationsApplication, INotificationsDrawerApplication {
public NotificationsLifecycleFacade notificationsLifecycleFacade;
@@ -81,7 +85,8 @@ public class MainApplication extends NavigationApplication implements INotificat
new KeychainPackage(),
new InitializationPackage(this),
new RNRecyclerviewListPackage(),
new RNCWebViewPackage()
new RNCWebViewPackage(),
new RNGestureHandlerPackage()
);
}
@@ -94,6 +99,12 @@ public class MainApplication extends NavigationApplication implements INotificat
public void onCreate() {
super.onCreate();
instance = this;
// Delete any previous temp files created by the app
File tempFolder = new File(getApplicationContext().getCacheDir(), "mmShare");
RealPathUtil.deleteTempFiles(tempFolder);
Log.i("ReactNative", "Cleaning temp cache " + tempFolder.getAbsolutePath());
// Create an object of the custom facade impl
notificationsLifecycleFacade = NotificationsLifecycleFacade.getInstance();
// Attach it to react-native-navigation

View File

@@ -45,9 +45,7 @@ public class RealPathUtil {
return id.replaceFirst("raw:", "");
}
try {
final Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
return getDataColumn(context, contentUri, null, null);
return getPathFromSavingTempFile(context, uri);
} catch (NumberFormatException e) {
Log.e("ReactNative", "DownloadsProvider unexpected uri " + uri.toString());
return null;

View File

@@ -3,7 +3,7 @@
buildscript {
ext {
buildToolsVersion = "27.0.3"
minSdkVersion = 21
minSdkVersion = 24
compileSdkVersion = 27
targetSdkVersion = 26
supportLibVersion = "27.1.1"

View File

@@ -1,4 +1,6 @@
rootProject.name = 'Mattermost'
include ':react-native-gesture-handler'
project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android')
include ':react-native-document-picker'
project(':react-native-document-picker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-document-picker/android')
include ':react-native-keychain'

View File

@@ -20,7 +20,6 @@ import {getProfilesInChannel} from 'mattermost-redux/actions/users';
import {General, Preferences} from 'mattermost-redux/constants';
import {getCurrentChannelId} from 'mattermost-redux/selectors/entities/channels';
import {getTeamByName} from 'mattermost-redux/selectors/entities/teams';
import {getConfig} from 'mattermost-redux/selectors/entities/general';
import {
getChannelByName,
@@ -161,6 +160,7 @@ export function loadPostsIfNecessaryWithRetry(channelId) {
const state = getState();
const {posts, postsInChannel} = state.entities.posts;
const postsIds = postsInChannel[channelId];
const actions = [];
const time = Date.now();
@@ -171,7 +171,15 @@ export function loadPostsIfNecessaryWithRetry(channelId) {
received = await retryGetPostsAction(getPosts(channelId), dispatch, getState);
if (received) {
loadMorePostsVisible = received.order.length >= ViewTypes.POST_VISIBILITY_CHUNK_SIZE;
const count = received.order.length;
loadMorePostsVisible = count >= ViewTypes.POST_VISIBILITY_CHUNK_SIZE;
actions.push({
type: ViewTypes.SET_INITIAL_POST_COUNT,
data: {
channelId,
count,
},
});
}
} else {
const {lastConnectAt} = state.device.websocket;
@@ -191,19 +199,28 @@ export function loadPostsIfNecessaryWithRetry(channelId) {
received = await retryGetPostsAction(getPostsSince(channelId, since), dispatch, getState);
if (received) {
loadMorePostsVisible = postsIds.length + received.order.length >= ViewTypes.POST_VISIBILITY_CHUNK_SIZE;
const count = received.order.length;
loadMorePostsVisible = postsIds.length + count >= ViewTypes.POST_VISIBILITY_CHUNK_SIZE;
actions.push({
type: ViewTypes.SET_INITIAL_POST_COUNT,
data: {
channelId,
count: postsIds.length + count,
},
});
}
}
if (received) {
dispatch({
actions.push({
type: ViewTypes.RECEIVED_POSTS_FOR_CHANNEL_AT_TIME,
channelId,
time,
});
}
dispatch(setLoadMorePostsVisible(loadMorePostsVisible));
actions.push(setLoadMorePostsVisible(loadMorePostsVisible));
dispatch(batchActions(actions));
};
}
@@ -226,8 +243,8 @@ export function loadFilesForPostIfNecessary(postId) {
const {files} = getState().entities;
const fileIdsForPost = files.fileIdsByPostId[postId];
if (!fileIdsForPost) {
await getFilesForPost(postId)(dispatch, getState);
if (!fileIdsForPost?.length) {
await dispatch(getFilesForPost(postId));
}
};
}
@@ -280,7 +297,6 @@ export function selectPenultimateChannel(teamId) {
const {channels, myMembers} = state.entities.channels;
const {currentUserId} = state.entities.users;
const {myPreferences} = state.entities.preferences;
const viewArchivedChannels = getConfig(state).ExperimentalViewArchivedChannels === 'true';
const lastChannelForTeam = state.views.team.lastChannelForTeam[teamId];
const lastChannelId = lastChannelForTeam && lastChannelForTeam.length > 1 ? lastChannelForTeam[1] : '';
const lastChannel = channels[lastChannelId];
@@ -294,7 +310,7 @@ export function selectPenultimateChannel(teamId) {
if (
myMembers[lastChannelId] &&
lastChannel &&
(lastChannel.delete_at === 0 || viewArchivedChannels) &&
lastChannel.delete_at === 0 &&
(lastChannel.team_id === teamId || isDMVisible || isGMVisible)
) {
dispatch(setChannelLoading(true));
@@ -506,13 +522,12 @@ export function increasePostVisibility(channelId, focusedPostId) {
const currentPostVisibility = postVisibility[channelId] || 0;
if (loadingPosts[channelId]) {
return false;
return true;
}
// Check if we already have the posts that we want to show
if (!focusedPostId) {
const postsInChannel = state.entities.posts.postsInChannel[channelId] || [];
const loadedPostCount = postsInChannel.length;
const loadedPostCount = state.views.channel.postCountInChannel[channelId] || 0;
const desiredPostVisibility = currentPostVisibility + ViewTypes.POST_VISIBILITY_CHUNK_SIZE;
if (loadedPostCount >= desiredPostVisibility) {
@@ -537,9 +552,9 @@ export function increasePostVisibility(channelId, focusedPostId) {
let result;
if (focusedPostId) {
result = await getPostsBefore(channelId, focusedPostId, page, pageSize)(dispatch, getState);
result = await retryGetPostsAction(getPostsBefore(channelId, focusedPostId, page, pageSize), dispatch, getState);
} else {
result = await getPosts(channelId, page, pageSize)(dispatch, getState);
result = await retryGetPostsAction(getPosts(channelId, page, pageSize), dispatch, getState);
}
const actions = [{
@@ -548,10 +563,18 @@ export function increasePostVisibility(channelId, focusedPostId) {
channelId,
}];
const posts = result.data;
let hasMorePost = false;
if (posts) {
hasMorePost = posts.order.length >= pageSize;
if (result) {
const count = result.order.length;
hasMorePost = count >= pageSize;
actions.push({
type: ViewTypes.INCREASE_POST_COUNT,
data: {
channelId,
count,
},
});
// make sure to increment the posts visibility
// only if we got results

View File

@@ -2,7 +2,7 @@
// See LICENSE.txt for license information.
import {UserTypes} from 'mattermost-redux/action_types';
import {getStatus} from 'mattermost-redux/actions/users';
import {getStatus, getStatusesByIds, startPeriodicStatusUpdates} from 'mattermost-redux/actions/users';
import {General} from 'mattermost-redux/constants';
import {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';
@@ -23,3 +23,16 @@ export function setCurrentUserStatus(isOnline) {
});
};
}
export function initUserStatuses() {
return (dispatch, getState) => {
const {statuses} = getState().entities.users || {};
const userIds = Object.keys(statuses);
if (userIds.length) {
dispatch(getStatusesByIds(userIds));
}
dispatch(startPeriodicStatusUpdates());
};
}

View File

@@ -7,12 +7,14 @@ import thunk from 'redux-thunk';
import {UserTypes} from 'mattermost-redux/action_types';
import {General} from 'mattermost-redux/constants';
import {setCurrentUserStatus} from 'app/actions/views/user';
import {initUserStatuses, setCurrentUserStatus} from 'app/actions/views/user';
const mockStore = configureStore([thunk]);
jest.mock('mattermost-redux/actions/users', () => ({
getStatus: (...args) => ({type: 'MOCK_GET_STATUS', args}),
getStatusesByIds: (...args) => ({type: 'MOCK_GET_STATUS_BY_IDS', args}),
startPeriodicStatusUpdates: () => ({type: 'MOCK_PERIODIC_STATUS_UPDATES'}),
}));
describe('Actions.Views.User', () => {
@@ -23,6 +25,11 @@ describe('Actions.Views.User', () => {
entities: {
users: {
currentUserId: 'current-user-id',
statuses: {
'current-user-id': 'online',
'another-user-id1': 'away',
'another-user-id2': 'dnd',
},
},
},
});
@@ -50,4 +57,15 @@ describe('Actions.Views.User', () => {
await store.dispatch(setCurrentUserStatus(true));
expect(store.getActions()).toEqual([action]);
});
test('should initialize the periodic status updates and get the current user statuses', () => {
const actionStatusByIds = {
type: 'MOCK_GET_STATUS_BY_IDS',
args: [['current-user-id', 'another-user-id1', 'another-user-id2']],
};
const actionPeriodicUpdates = {type: 'MOCK_PERIODIC_STATUS_UPDATES'};
store.dispatch(initUserStatuses());
expect(store.getActions()).toEqual([actionStatusByIds, actionPeriodicUpdates]);
});
});

View File

@@ -0,0 +1,56 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Badge should match snapshot 1`] = `
<View
style={
Array [
Object {
"backgroundColor": "#444",
"borderRadius": 20,
"height": 20,
"padding": 12,
"paddingBottom": 3,
"paddingTop": 3,
"position": "absolute",
"right": 30,
"top": 2,
},
Object {
"backgroundColor": "#ffffff",
},
Object {
"opacity": 0,
},
]
}
>
<View
style={
Object {
"alignItems": "center",
"flex": 1,
"justifyContent": "center",
}
}
>
<Text
onLayout={[Function]}
style={
Array [
Object {
"color": "white",
"fontSize": 14,
},
Object {
"color": "#145dbf",
"fontSize": 10,
},
Object {},
]
}
>
1
</Text>
</View>
</View>
`;

View File

@@ -26,6 +26,12 @@ const ShareExtension = NativeModules.MattermostShare;
export default class AttachmentButton extends PureComponent {
static propTypes = {
blurTextBox: PropTypes.func.isRequired,
browseFileTypes: PropTypes.string,
canBrowseFiles: PropTypes.bool,
canBrowsePhotoLibrary: PropTypes.bool,
canBrowseVideoLibrary: PropTypes.bool,
canTakePhoto: PropTypes.bool,
canTakeVideo: PropTypes.bool,
children: PropTypes.node,
fileCount: PropTypes.number,
maxFileCount: PropTypes.number.isRequired,
@@ -39,6 +45,12 @@ export default class AttachmentButton extends PureComponent {
};
static defaultProps = {
browseFileTypes: Platform.OS === 'ios' ? 'public.item' : '*/*',
canBrowseFiles: true,
canBrowsePhotoLibrary: true,
canBrowseVideoLibrary: true,
canTakePhoto: true,
canTakeVideo: true,
maxFileCount: 5,
};
@@ -163,11 +175,12 @@ export default class AttachmentButton extends PureComponent {
};
attachFileFromFiles = async () => {
const {browseFileTypes} = this.props;
const hasPermission = await this.hasStoragePermission();
if (hasPermission) {
DocumentPicker.show({
filetype: [Platform.OS === 'ios' ? 'public.item' : '*/*'],
filetype: [browseFileTypes],
}, async (error, res) => {
if (error) {
return;
@@ -329,7 +342,16 @@ export default class AttachmentButton extends PureComponent {
};
showFileAttachmentOptions = () => {
const {fileCount, maxFileCount, onShowFileMaxWarning} = this.props;
const {
canBrowseFiles,
canBrowsePhotoLibrary,
canBrowseVideoLibrary,
canTakePhoto,
canTakeVideo,
fileCount,
maxFileCount,
onShowFileMaxWarning,
} = this.props;
if (fileCount === maxFileCount) {
onShowFileMaxWarning();
@@ -337,33 +359,43 @@ export default class AttachmentButton extends PureComponent {
}
this.props.blurTextBox();
const options = {
items: [{
const items = [];
if (canTakePhoto) {
items.push({
action: () => this.handleFileAttachmentOption(this.attachPhotoFromCamera),
text: {
id: t('mobile.file_upload.camera_photo'),
defaultMessage: 'Take Photo',
},
icon: 'camera',
}, {
});
}
if (canTakeVideo) {
items.push({
action: () => this.handleFileAttachmentOption(this.attachVideoFromCamera),
text: {
id: t('mobile.file_upload.camera_video'),
defaultMessage: 'Take Video',
},
icon: 'video-camera',
}, {
});
}
if (canBrowsePhotoLibrary) {
items.push({
action: () => this.handleFileAttachmentOption(this.attachFileFromLibrary),
text: {
id: t('mobile.file_upload.library'),
defaultMessage: 'Photo Library',
},
icon: 'photo',
}],
};
});
}
if (Platform.OS === 'android') {
options.items.push({
if (canBrowseVideoLibrary && Platform.OS === 'android') {
items.push({
action: () => this.handleFileAttachmentOption(this.attachVideoFromLibraryAndroid),
text: {
id: t('mobile.file_upload.video'),
@@ -373,21 +405,23 @@ export default class AttachmentButton extends PureComponent {
});
}
options.items.push({
action: () => this.handleFileAttachmentOption(this.attachFileFromFiles),
text: {
id: t('mobile.file_upload.browse'),
defaultMessage: 'Browse Files',
},
icon: 'file',
});
if (canBrowseFiles) {
items.push({
action: () => this.handleFileAttachmentOption(this.attachFileFromFiles),
text: {
id: t('mobile.file_upload.browse'),
defaultMessage: 'Browse Files',
},
icon: 'file',
});
}
this.props.navigator.showModal({
screen: 'OptionsModal',
title: '',
animationType: 'none',
passProps: {
items: options.items,
items,
},
navigatorStyle: {
navBarHidden: true,

View File

@@ -24,9 +24,7 @@ export default class ChannelMentionItem extends PureComponent {
completeMention = () => {
const {onPress, displayName, name, type} = this.props;
if (type === General.DM_CHANNEL) {
onPress('@' + displayName.replace(/ /g, ''));
} else if (type === General.DM_CHANNEL) {
if (type === General.DM_CHANNEL || type === General.GM_CHANNEL) {
onPress('@' + displayName.replace(/ /g, ''));
} else {
onPress(name);
@@ -45,6 +43,9 @@ export default class ChannelMentionItem extends PureComponent {
const style = getStyleFromTheme(theme);
if (type === General.DM_CHANNEL || type === General.GM_CHANNEL) {
if (!displayName) {
return null;
}
return (
<TouchableOpacity
key={channelId}

View File

@@ -15,8 +15,8 @@ import {
export default class Badge extends PureComponent {
static defaultProps = {
extraPaddingHorizontal: 10,
minHeight: 0,
minWidth: 0,
minHeight: 20,
minWidth: 20,
};
static propTypes = {
@@ -81,7 +81,7 @@ export default class Badge extends PureComponent {
} else {
width = e.nativeEvent.layout.width + this.props.extraPaddingHorizontal;
}
width = Math.max(width + 10, this.props.minWidth);
width = Math.max(this.props.count < 10 ? width : width + 10, this.props.minWidth);
const borderRadius = width / 2;
this.setNativeProps({
style: {
@@ -105,12 +105,19 @@ export default class Badge extends PureComponent {
extra.marginBottom = 1;
}
return (
<Text
style={[styles.text, this.props.countStyle, extra]}
onLayout={this.onLayout}
<View
ref='badgeContainer'
style={[styles.badge, this.props.style, {opacity: 0}]}
>
{text}
</Text>
<View style={styles.wrapper}>
<Text
style={[styles.text, this.props.countStyle, extra]}
onLayout={this.onLayout}
>
{text}
</Text>
</View>
</View>
);
};
@@ -124,14 +131,7 @@ export default class Badge extends PureComponent {
{...this.panResponder.panHandlers}
onPress={this.handlePress}
>
<View
ref='badgeContainer'
style={[styles.badge, this.props.style, {opacity: 0}]}
>
<View style={styles.wrapper}>
{this.renderText()}
</View>
</View>
{this.renderText()}
</TouchableWithoutFeedback>
);
}

View File

@@ -0,0 +1,27 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import React from 'react';
import {Text, TouchableWithoutFeedback} from 'react-native';
import {shallow} from 'enzyme';
import Badge from './badge';
describe('Badge', () => {
const baseProps = {
count: 1,
countStyle: {color: '#145dbf', fontSize: 10},
style: {backgroundColor: '#ffffff'},
onPress: jest.fn(),
};
test('should match snapshot', () => {
const wrapper = shallow(
<Badge {...baseProps}/>
);
expect(wrapper.instance().renderText()).toMatchSnapshot();
expect(wrapper.find(TouchableWithoutFeedback).exists()).toEqual(true);
expect(wrapper.find(Text).first().props().children).toContain('1');
});
});

View File

@@ -55,18 +55,18 @@ export default class EditChannelInfo extends PureComponent {
blur = () => {
if (this.nameInput) {
this.nameInput.refs.wrappedInstance.blur();
this.nameInput.blur();
}
// TODO: uncomment below once the channel URL field is added
// if (this.urlInput) {
// this.urlInput.refs.wrappedInstance.blur();
// this.urlInput.blur();
// }
if (this.purposeInput) {
this.purposeInput.refs.wrappedInstance.blur();
this.purposeInput.blur();
}
if (this.headerInput) {
this.headerInput.refs.wrappedInstance.blur();
this.headerInput.blur();
}
if (this.scroll) {
this.scroll.scrollToPosition(0, 0, true);

View File

@@ -110,16 +110,6 @@ export default class Emoji extends React.PureComponent {
const width = size;
const height = size;
let marginTop = 0;
if (textStyle) {
// hack to get the vertical alignment looking better
if (fontSize > 16) {
marginTop -= 2;
} else if (fontSize <= 16) {
marginTop += 1;
}
}
// Android can't change the size of an image after its first render, so
// force a new image to be rendered when the size changes
const key = Platform.OS === 'android' ? (height + '-' + width) : null;
@@ -128,7 +118,7 @@ export default class Emoji extends React.PureComponent {
return (
<Image
key={key}
style={{width, height, marginTop}}
style={{width, height}}
/>
);
}
@@ -136,7 +126,7 @@ export default class Emoji extends React.PureComponent {
return (
<Image
key={key}
style={{width, height, marginTop}}
style={{width, height}}
source={{uri: imageUrl}}
onError={this.onError}
/>

View File

@@ -10,11 +10,11 @@ import {Client4} from 'mattermost-redux/client';
import {isMinimumServerVersion} from 'mattermost-redux/utils/helpers';
import {EmojiIndicesByAlias, Emojis} from 'app/utils/emojis';
import {doesMatchNamedEmoji} from 'app/utils/emoji_utils';
import Emoji from './emoji';
function mapStateToProps(state, ownProps) {
const config = getConfig(state);
const emojiName = ownProps.emojiName;
const customEmojis = getCustomEmojisByName(state);
@@ -30,8 +30,8 @@ function mapStateToProps(state, ownProps) {
isCustomEmoji = true;
} else {
displayTextOnly = state.entities.emojis.nonExistentEmoji.has(emojiName) ||
(doesMatchNamedEmoji(`:${emojiName}:`) && !customEmojis.has(emojiName)) ||
getConfig(state).EnableCustomEmoji !== 'true' ||
config.EnableCustomEmoji !== 'true' ||
config.ExperimentalEnablePostMetadata === 'true' ||
getCurrentUserId(state) === '' ||
!isMinimumServerVersion(Client4.getServerVersion(), 4, 7);
}

View File

@@ -23,6 +23,7 @@ export default class FileAttachment extends PureComponent {
canDownloadFiles: PropTypes.bool.isRequired,
deviceWidth: PropTypes.number.isRequired,
file: PropTypes.object.isRequired,
id: PropTypes.string.isRequired,
index: PropTypes.number.isRequired,
onCaptureRef: PropTypes.func,
onLongPress: PropTypes.func,
@@ -102,6 +103,7 @@ export default class FileAttachment extends PureComponent {
if ((data && data.has_preview_image) || file.loading || isGif(data)) {
fileAttachmentComponent = (
<TouchableOpacity
key={`${this.props.id}${file.loading}`}
onPress={this.handlePreviewPress}
onLongPress={onLongPress}
>

View File

@@ -236,7 +236,7 @@ export default class FileAttachmentDocument extends PureComponent {
OpenFile.openDoc([{
url: `${prefix}${path}`,
fileNameOptional: file.caption,
fileName: data.name,
fileName: encodeURI(data.name.split('.').slice(0, -1).join('.')),
fileType: data.extension,
cache: false,
}], (error) => {

View File

@@ -8,7 +8,6 @@ import {
Platform,
ScrollView,
StyleSheet,
View,
} from 'react-native';
import {Client4} from 'mattermost-redux/client';
@@ -134,6 +133,7 @@ export default class FileAttachmentList extends Component {
canDownloadFiles={canDownloadFiles}
deviceWidth={deviceWidth}
file={{loading: true}}
id={id}
index={idx}
theme={this.props.theme}
/>
@@ -152,6 +152,7 @@ export default class FileAttachmentList extends Component {
canDownloadFiles={canDownloadFiles}
deviceWidth={deviceWidth}
file={f}
id={file.id}
index={idx}
navigator={navigator}
onCaptureRef={this.handleCaptureRef}
@@ -167,23 +168,18 @@ export default class FileAttachmentList extends Component {
const {fileIds, isFailed} = this.props;
return (
<View style={styles.flex}>
<ScrollView
horizontal={true}
scrollEnabled={fileIds.length > 1}
style={[styles.flex, (isFailed && styles.failed)]}
>
{this.renderItems()}
</ScrollView>
</View>
<ScrollView
horizontal={true}
scrollEnabled={fileIds.length > 1}
style={[(isFailed && styles.failed)]}
>
{this.renderItems()}
</ScrollView>
);
}
}
const styles = StyleSheet.create({
flex: {
flex: 1,
},
failed: {
opacity: 0.5,
},

View File

@@ -108,7 +108,7 @@ export default class MarkdownLink extends PureComponent {
}
};
handleCopyURL = () => {
handleLinkCopy = () => {
Clipboard.setString(this.props.href);
};

View File

@@ -66,16 +66,18 @@ export default class AttachmentFields extends PureComponent {
style={style.flex}
key={`attachment__field-${i}__${nrTables}`}
>
<View
style={style.headingContainer}
key={`attachment__field-caption-${i}__${nrTables}`}
>
<View>
<Text style={style.heading}>
{field.title}
</Text>
{Boolean(field.title) && (
<View
style={style.headingContainer}
key={`attachment__field-caption-${i}__${nrTables}`}
>
<View>
<Text style={style.heading}>
{field.title}
</Text>
</View>
</View>
</View>
)}
<View
style={style.flex}
key={`attachment__field-${i}__${nrTables}`}

View File

@@ -37,7 +37,7 @@ export default class AttachmentImage extends PureComponent {
const {imageUrl, metadata} = this.props;
this.setViewPortMaxWidth();
if (metadata?.images[imageUrl]) {
if (metadata?.images?.[imageUrl]) {
const img = metadata.images[imageUrl];
this.setImageDimensionsFromMeta(null, img);
}
@@ -96,7 +96,7 @@ export default class AttachmentImage extends PureComponent {
setImageUrl = (imageURL) => {
const {imageUrl: attachmentImageUrl, metadata} = this.props;
if (metadata?.images[attachmentImageUrl]) {
if (metadata?.images?.[attachmentImageUrl]) {
this.setImageDimensionsFromMeta(imageURL, metadata.images[attachmentImageUrl]);
return;
}

View File

@@ -2,13 +2,15 @@
// See LICENSE.txt for license information.
import React, {PureComponent} from 'react';
import {StyleSheet, View} from 'react-native';
import {ScrollView, StyleSheet, View} from 'react-native';
import PropTypes from 'prop-types';
import Markdown from 'app/components/markdown';
import ShowMoreButton from 'app/components/show_more_button';
import CustomPropTypes from 'app/constants/custom_prop_types';
const SHOW_MORE_HEIGHT = 60;
export default class AttachmentText extends PureComponent {
static propTypes = {
baseTextStyle: CustomPropTypes.Style.isRequired,
@@ -24,7 +26,7 @@ export default class AttachmentText extends PureComponent {
static getDerivedStateFromProps(nextProps, prevState) {
const {deviceHeight} = nextProps;
const maxHeight = deviceHeight * 0.4;
const maxHeight = Math.round((deviceHeight * 0.4) + SHOW_MORE_HEIGHT);
if (maxHeight !== prevState.maxHeight) {
return {
@@ -46,9 +48,9 @@ export default class AttachmentText extends PureComponent {
handleLayout = (event) => {
const {height} = event.nativeEvent.layout;
const {deviceHeight} = this.props;
const {maxHeight} = this.state;
if (height >= (deviceHeight * 0.6)) {
if (height >= maxHeight) {
this.setState({
isLongText: true,
});
@@ -79,20 +81,27 @@ export default class AttachmentText extends PureComponent {
return (
<View style={hasThumbnail && style.container}>
<View
style={[(isLongText && collapsed && {maxHeight, overflow: 'hidden'})]}
removeClippedSubviews={isLongText && collapsed}
<ScrollView
style={{maxHeight: (collapsed ? maxHeight : null), overflow: 'hidden'}}
scrollEnabled={false}
showsVerticalScrollIndicator={false}
showsHorizontalScrollIndicator={false}
>
<Markdown
baseTextStyle={baseTextStyle}
textStyles={textStyles}
blockStyles={blockStyles}
imageMetadata={metadata?.images}
value={value}
navigator={navigator}
onPermalinkPress={onPermalinkPress}
/>
</View>
<View
onLayout={this.handleLayout}
removeClippedSubviews={isLongText && collapsed}
>
<Markdown
baseTextStyle={baseTextStyle}
textStyles={textStyles}
blockStyles={blockStyles}
imageMetadata={metadata?.images}
value={value}
navigator={navigator}
onPermalinkPress={onPermalinkPress}
/>
</View>
</ScrollView>
{isLongText &&
<ShowMoreButton
onPress={this.toggleCollapseState}

View File

@@ -65,7 +65,7 @@ export default class MessageAttachment extends PureComponent {
}
return (
<View>
<React.Fragment>
<AttachmentPreText
baseTextStyle={baseTextStyle}
blockStyles={blockStyles}
@@ -75,9 +75,7 @@ export default class MessageAttachment extends PureComponent {
textStyles={textStyles}
value={attachment.pretext}
/>
<View
style={[style.container, style.border, borderStyle]}
>
<View style={[style.container, style.border, borderStyle]}>
<AttachmentAuthor
icon={attachment.author_icon}
link={attachment.author_link}
@@ -125,7 +123,7 @@ export default class MessageAttachment extends PureComponent {
theme={theme}
/>
</View>
</View>
</React.Fragment>
);
}
}

View File

@@ -4,12 +4,15 @@
import {bindActionCreators} from 'redux';
import {connect} from 'react-redux';
import {startPeriodicStatusUpdates, stopPeriodicStatusUpdates, logout} from 'mattermost-redux/actions/users';
import {stopPeriodicStatusUpdates, logout} from 'mattermost-redux/actions/users';
import {init as initWebSocket, close as closeWebSocket} from 'mattermost-redux/actions/websocket';
import {getCurrentChannelId} from 'mattermost-redux/selectors/entities/channels';
import {connection} from 'app/actions/device';
import {setCurrentUserStatus} from 'app/actions/views/user';
import {
initUserStatuses as startPeriodicStatusUpdates,
setCurrentUserStatus,
} from 'app/actions/views/user';
import {getConnection, isLandscape} from 'app/selectors/device';
import NetworkIndicator from './network_indicator';

View File

@@ -36,7 +36,6 @@ const {
IOS_TOP_LANDSCAPE,
IOS_TOP_PORTRAIT,
IOSX_TOP_PORTRAIT,
STATUS_BAR_HEIGHT,
} = ViewTypes;
export default class NetworkIndicator extends PureComponent {
@@ -70,6 +69,7 @@ export default class NetworkIndicator extends PureComponent {
const navBar = this.getNavBarHeight(props.isLandscape);
this.top = new Animated.Value(navBar - HEIGHT);
this.opacity = 0;
this.backgroundColor = new Animated.Value(0);
this.firstRun = true;
@@ -169,6 +169,7 @@ export default class NetworkIndicator extends PureComponent {
),
]).start(() => {
this.backgroundColor.setValue(0);
this.opacity = 0;
});
};
@@ -188,7 +189,7 @@ export default class NetworkIndicator extends PureComponent {
} else if (isX) {
return IOSX_TOP_PORTRAIT;
} else if (isLandscape) {
return IOS_TOP_LANDSCAPE + STATUS_BAR_HEIGHT;
return IOS_TOP_LANDSCAPE;
}
return IOS_TOP_PORTRAIT;
@@ -227,12 +228,13 @@ export default class NetworkIndicator extends PureComponent {
};
handleConnectionChange = ({hasInternet, serverReachable}) => {
const {connection} = this.props.actions;
const {connection, startPeriodicStatusUpdates} = this.props.actions;
// On first run always initialize the WebSocket
// if we have internet connection
if (hasInternet && this.firstRun) {
this.initializeWebSocket();
startPeriodicStatusUpdates();
this.firstRun = false;
return;
}
@@ -299,6 +301,8 @@ export default class NetworkIndicator extends PureComponent {
};
show = () => {
this.opacity = 1;
Animated.timing(
this.top, {
toValue: this.getNavBarHeight(),
@@ -318,7 +322,6 @@ export default class NetworkIndicator extends PureComponent {
let i18nId;
let defaultMessage;
let values;
let action;
if (isOnline) {
@@ -358,12 +361,11 @@ export default class NetworkIndicator extends PureComponent {
}
return (
<Animated.View style={[styles.container, {top: this.top, backgroundColor: background}]}>
<Animated.View style={[styles.container, {top: this.top, backgroundColor: background, opacity: this.opacity}]}>
<Animated.View style={styles.wrapper}>
<FormattedText
defaultMessage={defaultMessage}
id={i18nId}
values={values}
style={styles.message}
/>
{action}
@@ -394,12 +396,6 @@ const styles = StyleSheet.create({
fontWeight: '600',
flex: 1,
},
actionButton: {
alignItems: 'center',
borderWidth: 1,
borderColor: '#FFFFFF',
paddingRight: 0,
},
actionContainer: {
alignItems: 'flex-end',
height: 24,

View File

@@ -188,7 +188,7 @@ export default class Post extends PureComponent {
isReplyPost = () => {
const {renderReplies, post} = this.props;
return Boolean(renderReplies && post.root_id && !isPostEphemeral(post));
return Boolean(renderReplies && post.root_id && (!isPostEphemeral(post) || post.state === Posts.POST_DELETED));
};
replyBarStyle = () => {
@@ -268,7 +268,7 @@ export default class Post extends PureComponent {
const highlightFlagged = isFlagged && !skipFlaggedHeader;
const hightlightPinned = post.is_pinned && !skipPinnedHeader;
let highlighted = highlight ? style.highlight : null;
let highlighted;
if (highlight) {
highlighted = style.highlight;
} else if ((highlightFlagged || hightlightPinned) && highlightPinnedOrFlagged) {
@@ -311,7 +311,7 @@ export default class Post extends PureComponent {
return (
<TouchableHighlight
style={highlighted}
style={[style.postStyle, highlighted]}
onPress={this.handlePress}
onLongPress={this.showPostOptions}
underlayColor={changeOpacity(theme.centerChannelColor, 0.1)}
@@ -358,9 +358,11 @@ export default class Post extends PureComponent {
const getStyleSheet = makeStyleSheetFromTheme((theme) => {
return {
postStyle: {
overflow: 'hidden',
},
container: {
flexDirection: 'row',
overflow: 'hidden',
},
pendingPost: {
opacity: 0.5,
@@ -379,18 +381,20 @@ const getStyleSheet = makeStyleSheetFromTheme((theme) => {
marginLeft: 47,
marginTop: 10,
},
consecutivePostWithFlag: {
width: 11,
height: 11,
position: 'absolute',
top: -6,
left: -11,
},
profilePictureContainer: {
marginBottom: 5,
marginRight: 10,
marginLeft: 12,
marginTop: 10,
// to compensate STATUS_BUFFER in profile_picture component
...Platform.select({
android: {
marginRight: 11,
},
ios: {
marginRight: 10,
},
}),
},
replyBar: {
backgroundColor: theme.centerChannelColor,

View File

@@ -4,6 +4,7 @@
import React, {PureComponent} from 'react';
import PropTypes from 'prop-types';
import {
ScrollView,
TouchableOpacity,
View,
} from 'react-native';
@@ -79,7 +80,7 @@ export default class PostBody extends PureComponent {
};
static getDerivedStateFromProps(nextProps, prevState) {
const maxHeight = (nextProps.deviceHeight * 0.6) + SHOW_MORE_HEIGHT;
const maxHeight = Math.round((nextProps.deviceHeight * 0.6) + SHOW_MORE_HEIGHT);
if (maxHeight !== prevState.maxHeight) {
return {
maxHeight,
@@ -95,9 +96,9 @@ export default class PostBody extends PureComponent {
measurePost = (event) => {
const {height} = event.nativeEvent.layout;
const {deviceHeight, showLongPost} = this.props;
const {showLongPost} = this.props;
if (!showLongPost && height >= (deviceHeight * 1.2)) {
if (!showLongPost && height >= this.state.maxHeight) {
this.setState({
isLongPost: true,
});
@@ -164,6 +165,7 @@ export default class PostBody extends PureComponent {
backButtonTitle: '',
navigatorStyle: {
navBarHidden: true,
navBarTransparent: true,
screenBackgroundColor: 'transparent',
modalPresentationStyle: 'overCurrentContext',
},
@@ -189,19 +191,15 @@ export default class PostBody extends PureComponent {
}
return (
<View style={style.row}>
<View style={style.flex}>
<PostAddChannelMember
baseTextStyle={messageStyle}
navigator={navigator}
onPostPress={onPress}
textStyles={textStyles}
postId={postProps.add_channel_member.post_id}
userIds={postProps.add_channel_member.user_ids}
usernames={postProps.add_channel_member.usernames}
/>
</View>
</View>
<PostAddChannelMember
baseTextStyle={messageStyle}
navigator={navigator}
onPostPress={onPress}
textStyles={textStyles}
postId={postProps.add_channel_member.post_id}
userIds={postProps.add_channel_member.user_ids}
usernames={postProps.add_channel_member.usernames}
/>
);
};
@@ -313,6 +311,7 @@ export default class PostBody extends PureComponent {
postType,
replyBarStyle,
shouldRenderJumboEmoji,
showLongPost,
theme,
} = this.props;
const {isLongPost, maxHeight} = this.state;
@@ -325,68 +324,58 @@ export default class PostBody extends PureComponent {
let body;
let messageComponent;
if (hasBeenDeleted) {
messageComponent = (
<View style={style.row}>
<FormattedText
style={messageStyle}
id='post_body.deleted'
defaultMessage='(message deleted)'
/>
</View>
body = (
<FormattedText
style={messageStyle}
id='post_body.deleted'
defaultMessage='(message deleted)'
/>
);
body = (<View>{messageComponent}</View>);
} else if (isPostAddChannelMember) {
messageComponent = this.renderAddChannelMember(style, messageStyle, textStyles);
} else if (postType === Posts.POST_TYPES.COMBINED_USER_ACTIVITY) {
const {allUserIds, allUsernames, messageData} = postProps.user_activity;
messageComponent = (
<View style={style.row}>
<View style={style.flex}>
<CombinedSystemMessage
allUserIds={allUserIds}
allUsernames={allUsernames}
linkStyle={textStyles.link}
messageData={messageData}
navigator={navigator}
textStyles={textStyles}
theme={theme}
/>
</View>
</View>
<CombinedSystemMessage
allUserIds={allUserIds}
allUsernames={allUsernames}
linkStyle={textStyles.link}
messageData={messageData}
navigator={navigator}
textStyles={textStyles}
theme={theme}
/>
);
} else if (isEmojiOnly) {
messageComponent = (
<View style={style.row}>
<MarkdownEmoji
baseTextStyle={messageStyle}
isEdited={hasBeenEdited}
shouldRenderJumboEmoji={shouldRenderJumboEmoji}
value={message}
/>
</View>
<MarkdownEmoji
baseTextStyle={messageStyle}
isEdited={hasBeenEdited}
shouldRenderJumboEmoji={shouldRenderJumboEmoji}
value={message}
/>
);
} else if (message.length) {
messageComponent = (
<View style={style.row}>
<View
style={[style.flex, (isPendingOrFailedPost && style.pendingPost), (isLongPost && {maxHeight})]}
removeClippedSubviews={isLongPost}
>
<Markdown
baseTextStyle={messageStyle}
blockStyles={blockStyles}
imageMetadata={metadata?.images}
isEdited={hasBeenEdited}
isReplyPost={isReplyPost}
isSearchResult={isSearchResult}
navigator={navigator}
onHashtagPress={onHashtagPress}
onPermalinkPress={onPermalinkPress}
onPostPress={onPress}
textStyles={textStyles}
value={message}
/>
</View>
<View
style={[style.messageContainer, (isReplyPost && style.reply), (isPendingOrFailedPost && style.pendingPost)]}
onLayout={this.measurePost}
removeClippedSubviews={isLongPost}
>
<Markdown
baseTextStyle={messageStyle}
blockStyles={blockStyles}
imageMetadata={metadata?.images}
isEdited={hasBeenEdited}
isReplyPost={isReplyPost}
isSearchResult={isSearchResult}
navigator={navigator}
onHashtagPress={onHashtagPress}
onPermalinkPress={onPermalinkPress}
onPostPress={onPress}
textStyles={textStyles}
value={message}
/>
</View>
);
}
@@ -394,15 +383,20 @@ export default class PostBody extends PureComponent {
if (!hasBeenDeleted) {
body = (
<View style={style.messageBody}>
<View onLayout={this.measurePost}>
<ScrollView
style={{maxHeight: (showLongPost ? null : maxHeight), overflow: 'hidden'}}
scrollEnabled={false}
showsVerticalScrollIndicator={false}
showsHorizontalScrollIndicator={false}
>
{messageComponent}
{isLongPost &&
<ShowMoreButton
highlight={highlight}
onPress={this.openLongPost}
/>
}
</View>
</ScrollView>
{isLongPost &&
<ShowMoreButton
highlight={highlight}
onPress={this.openLongPost}
/>
}
{this.renderPostAdditionalContent(blockStyles, messageStyle, textStyles)}
{this.renderFileAttachments()}
{this.renderReactions()}
@@ -413,23 +407,19 @@ export default class PostBody extends PureComponent {
return (
<View style={style.messageContainerWithReplyBar}>
<View style={replyBarStyle}/>
<View style={[style.flex, style.row]}>
<View style={style.flex}>
{body}
</View>
{isFailed &&
<TouchableOpacity
onPress={onFailedPostPress}
style={style.retry}
>
<Icon
name='ios-information-circle-outline'
size={26}
color={theme.errorTextColor}
/>
</TouchableOpacity>
}
</View>
{body}
{isFailed &&
<TouchableOpacity
onPress={onFailedPostPress}
style={style.retry}
>
<Icon
name='ios-information-circle-outline'
size={26}
color={theme.errorTextColor}
/>
</TouchableOpacity>
}
</View>
);
}
@@ -437,20 +427,20 @@ export default class PostBody extends PureComponent {
const getStyleSheet = makeStyleSheetFromTheme((theme) => {
return {
flex: {
flex: 1,
overflow: 'hidden',
},
row: {
flexDirection: 'row',
},
messageBody: {
paddingBottom: 2,
paddingTop: 2,
flex: 1,
},
messageContainer: {
width: '100%',
},
reply: {
paddingRight: 10,
},
retry: {
justifyContent: 'center',
marginLeft: 12,
marginLeft: 10,
},
message: {
color: theme.centerChannelColor,
@@ -459,7 +449,7 @@ const getStyleSheet = makeStyleSheetFromTheme((theme) => {
},
messageContainerWithReplyBar: {
flexDirection: 'row',
flex: 1,
width: '100%',
},
pendingPost: {
opacity: 0.5,

View File

@@ -52,11 +52,17 @@ function makeMapStateToProps() {
const previewsEnabled = getBool(state, Preferences.CATEGORY_ADVANCED_SETTINGS, `${ViewTypes.FEATURE_TOGGLE_PREFIX}${ViewTypes.EMBED_PREVIEW}`) ||
getBool(state, Preferences.CATEGORY_DISPLAY_SETTINGS, Preferences.LINK_PREVIEW_DISPLAY, true);
let openGraphData = getOpenGraphMetadataForUrl(state, link);
if (!openGraphData) {
const data = getOpenGraphData(ownProps.metadata, link);
openGraphData = data?.data;
}
return {
...getDimensions(state),
googleDeveloperKey: config.GoogleDeveloperKey,
link,
openGraphData: getOpenGraphMetadataForUrl(state, link) || getOpenGraphData(ownProps.metadata, link)?.data,
openGraphData,
showLinkPreviews: previewsEnabled && config.EnableLinkPreviews === 'true',
theme: getTheme(state),
};

View File

@@ -489,7 +489,7 @@ export default class PostBodyAdditionalContent extends PureComponent {
}
const isYouTube = isYoutubeLink(link);
const isImage = this.isImage();
const isImage = this.isImage(link);
const isOpenGraph = Boolean(openGraphData);
if (((isImage && !isOpenGraph) || isYouTube) && !linkLoadError) {
@@ -506,7 +506,6 @@ export default class PostBodyAdditionalContent extends PureComponent {
const styles = StyleSheet.create({
imageContainer: {
alignItems: 'flex-start',
flex: 1,
justifyContent: 'flex-start',
marginBottom: 6,
marginTop: 10,

View File

@@ -1,5 +1,65 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`DateHeader component should match snapshot when timezone is set 1`] = `
<View
style={
Array [
Object {
"alignItems": "center",
"flexDirection": "row",
"height": 28,
"marginTop": 8,
},
undefined,
]
}
>
<View
style={
Object {
"backgroundColor": "#3d3c40",
"flex": 1,
"height": 1,
"opacity": 0.2,
}
}
/>
<View
style={
Object {
"marginHorizontal": 15,
}
}
>
<InjectIntl(FormattedDate)
day="2-digit"
month="short"
style={
Object {
"color": "#3d3c40",
"fontSize": 14,
"fontWeight": "600",
}
}
timeZone="America/New_York"
value={1970-01-18T17:19:12.392Z}
weekday="short"
year="numeric"
/>
</View>
<View
style={
Object {
"backgroundColor": "#3d3c40",
"flex": 1,
"height": 1,
"opacity": 0.2,
}
}
/>
</View>
`;
exports[`DateHeader component should match snapshot with suffix 1`] = `
<View
style={

View File

@@ -17,11 +17,12 @@ export default class DateHeader extends PureComponent {
static propTypes = {
dateLineString: PropTypes.string.isRequired,
theme: PropTypes.object.isRequired,
timeZone: PropTypes.string,
style: ViewPropTypes.style,
};
render() {
const {theme, dateLineString} = this.props;
const {theme, timeZone, dateLineString} = this.props;
const style = getStyleSheet(theme);
const indexSuffix = dateLineString.indexOf(DATE_LINE_SUFFIX);
@@ -31,6 +32,17 @@ export default class DateHeader extends PureComponent {
} else {
date = new Date(parseInt(dateLineString.substring(DATE_LINE.length), 10));
}
const dateFormatProps = {
weekday: 'short',
day: '2-digit',
month: 'short',
year: 'numeric',
value: date,
};
if (timeZone) {
dateFormatProps.timeZone = timeZone;
}
return (
<View style={[style.container, this.props.style]}>
@@ -38,11 +50,7 @@ export default class DateHeader extends PureComponent {
<View style={style.dateContainer}>
<FormattedDate
style={style.date}
value={date}
weekday='short'
day='2-digit'
month='short'
year='numeric'
{...dateFormatProps}
/>
</View>
<View style={style.line}/>

View File

@@ -13,6 +13,7 @@ import DateHeader from './date_header.js';
describe('DateHeader', () => {
const baseProps = {
theme: Preferences.THEMES.default,
timeZone: null,
};
describe('component should match snapshot', () => {
@@ -43,5 +44,20 @@ describe('DateHeader', () => {
expect(wrapper.getElement()).toMatchSnapshot();
});
it('when timezone is set', () => {
const props = {
...baseProps,
dateLineString: 'date-1531152392-index-2',
timeZone: 'America/New_York',
index: 2,
};
const wrapper = shallow(
<DateHeader {...props}/>,
{context: {intl: {formatMessage: jest.fn()}}},
);
expect(wrapper.getElement()).toMatchSnapshot();
});
});
});

View File

@@ -3,13 +3,26 @@
import {connect} from 'react-redux';
import {getCurrentUser} from 'mattermost-redux/selectors/entities/users';
import {getTheme} from 'mattermost-redux/selectors/entities/preferences';
import {getUserCurrentTimezone} from 'mattermost-redux/utils/timezone_utils';
import {isTimezoneEnabled} from 'app/utils/timezone';
import DateHeader from './date_header';
function mapStateToProps(state) {
const enableTimezone = isTimezoneEnabled(state);
const currentUser = getCurrentUser(state);
let timeZone = null;
if (enableTimezone) {
timeZone = getUserCurrentTimezone(currentUser.timezone);
}
return {
theme: getTheme(state),
timeZone,
};
}

View File

@@ -12,7 +12,14 @@ import PostListBase from './post_list_base';
const INITIAL_BATCH_TO_RENDER = 15;
const SCROLL_UP_MULTIPLIER = 3.5;
const SCROLL_POSITION_CONFIG = {
// To avoid scrolling the list when new messages arrives
// if the user is not at the bottom
minIndexForVisible: 0,
// If the user is at the bottom or 60px from the bottom
// auto scroll show the new message
autoscrollToTopThreshold: 60,
};
export default class PostList extends PostListBase {

View File

@@ -49,6 +49,7 @@ export default class PostListBase extends PureComponent {
static defaultProps = {
onLoadMoreUp: () => true,
renderFooter: () => null,
refreshing: false,
};
componentWillMount() {

View File

@@ -45,10 +45,10 @@ function mapStateToProps(state, ownProps) {
return {
channelId: ownProps.channelId || (currentChannel ? currentChannel.id : ''),
channelTeamId: currentChannel.team_id,
channelTeamId: currentChannel ? currentChannel.team_id : '',
canUploadFiles: canUploadFilesOnMobile(state),
channelIsLoading: state.views.channel.loading,
channelIsReadOnly: isCurrentChannelReadOnly(state),
channelIsReadOnly: isCurrentChannelReadOnly(state) || false,
channelIsArchived: ownProps.channelIsArchived || (currentChannel ? currentChannel.delete_at !== 0 : false),
currentUserId,
userIsOutOfOffice,

View File

@@ -49,8 +49,13 @@ export default class ProfilePicture extends PureComponent {
pictureUrl: null,
};
componentWillMount() {
const {edit, imageUri, profileImageUri, user} = this.props;
componentDidMount() {
const {actions, edit, imageUri, profileImageUri, user, status} = this.props;
this.mounted = true;
if (!status && user) {
actions.getStatusForId(user.id);
}
if (profileImageUri) {
this.setImageURL(profileImageUri);
@@ -61,14 +66,6 @@ export default class ProfilePicture extends PureComponent {
}
}
componentDidMount() {
if (!this.props.status && this.props.user) {
this.props.actions.getStatusForId(this.props.user.id);
}
this.mounted = true;
}
componentWillReceiveProps(nextProps) {
if (this.mounted) {
if (nextProps.edit && nextProps.imageUri && nextProps.imageUri !== this.props.imageUri) {

View File

@@ -7,7 +7,6 @@ import {
Image,
ScrollView,
TouchableOpacity,
View,
} from 'react-native';
import {intlShape} from 'react-intl';
import MaterialIcon from 'react-native-vector-icons/MaterialIcons';
@@ -96,6 +95,7 @@ export default class Reactions extends PureComponent {
backButtonTitle: '',
navigatorStyle: {
navBarHidden: true,
navBarTransparent: true,
screenBackgroundColor: 'transparent',
modalPresentationStyle: 'overCurrentContext',
},
@@ -168,24 +168,19 @@ export default class Reactions extends PureComponent {
}
return (
<View style={styles.container}>
<ScrollView
alwaysBounceHorizontal={false}
horizontal={true}
overScrollMode='never'
>
{reactionElements}
</ScrollView>
</View>
<ScrollView
alwaysBounceHorizontal={false}
horizontal={true}
overScrollMode='never'
>
{reactionElements}
</ScrollView>
);
}
}
const getStyleSheet = makeStyleSheetFromTheme((theme) => {
return {
container: {
flex: 1,
},
addReaction: {
tintColor: changeOpacity(theme.centerChannelColor, 0.5),
width: 23,

View File

@@ -162,8 +162,6 @@ export default class ChannelItem extends PureComponent {
style={style.badge}
countStyle={style.mention}
count={mentions}
minHeight={20}
minWidth={20}
onPress={this.onPress}
/>
);

View File

@@ -5,7 +5,7 @@ import {connect} from 'react-redux';
import {General} from 'mattermost-redux/constants';
import {
getFavoriteChannelIds,
getSortedFavoriteChannelIds,
getSortedUnreadChannelIds,
getOrderedChannelIds,
} from 'mattermost-redux/selectors/entities/channels';
@@ -39,14 +39,14 @@ function mapStateToProps(state) {
const isSystemAdmin = checkIsSystemAdmin(roles);
const sidebarPrefs = getSidebarPreferences(state);
const unreadChannelIds = getSortedUnreadChannelIds(state, null);
const favoriteChannelIds = getFavoriteChannelIds(state);
const favoriteChannelIds = getSortedFavoriteChannelIds(state);
const orderedChannelIds = filterZeroUnreads(getOrderedChannelIds(
state,
null,
sidebarPrefs.grouping,
sidebarPrefs.sorting,
sidebarPrefs.unreads_at_top === 'true',
sidebarPrefs.favorite_at_top === 'true',
true, // The mobile app should always display the Unreads section regardless of user settings (MM-13420)
sidebarPrefs.favorite_at_top === 'true' && favoriteChannelIds.length,
));
return {

View File

@@ -82,8 +82,8 @@ export default class List extends PureComponent {
}
}
getSectionConfigByType = (sectionType) => {
const {canCreatePrivateChannels} = this.props;
getSectionConfigByType = (props, sectionType) => {
const {canCreatePrivateChannels} = props;
switch (sectionType) {
case SidebarSectionTypes.UNREADS:
@@ -142,7 +142,7 @@ export default class List extends PureComponent {
return orderedChannelIds.map((s, i) => {
return {
...this.getSectionConfigByType(s.type),
...this.getSectionConfigByType(props, s.type),
data: s.items,
topSeparator: i !== 0,
bottomSeparator: s.items.length > 0,

View File

@@ -53,8 +53,6 @@ export default class SwitchTeamsButton extends React.PureComponent {
style={styles.badge}
countStyle={styles.mention}
count={mentionCount}
minHeight={20}
minWidth={20}
/>
);

View File

@@ -61,8 +61,6 @@ export default class TeamsListItem extends React.PureComponent {
style={styles.badge}
countStyle={styles.mention}
count={mentionCount}
minHeight={20}
minWidth={20}
/>
);
@@ -152,7 +150,7 @@ const getStyleSheet = makeStyleSheetFromTheme((theme) => {
padding: 3,
position: 'absolute',
left: 45,
top: -7.5,
top: -2,
},
mention: {
color: theme.mentionColor,

View File

@@ -3,13 +3,13 @@
import React, {PureComponent} from 'react';
import PropTypes from 'prop-types';
import {Animated, Platform, StyleSheet, View} from 'react-native';
import {
Animated,
PanResponder,
Platform,
StyleSheet,
View,
} from 'react-native';
PanGestureHandler,
NativeViewGestureHandler,
State as GestureState,
TapGestureHandler,
} from 'react-native-gesture-handler';
import {DeviceTypes} from 'app/constants';
@@ -19,25 +19,33 @@ export const BOTTOM_MARGIN = DeviceTypes.IS_IPHONE_X ? 24 : 0;
const TOP_IOS_MARGIN = DeviceTypes.IS_IPHONE_X ? 84 : 64;
const TOP_ANDROID_MARGIN = 44;
const TOP_MARGIN = Platform.OS === 'ios' ? TOP_IOS_MARGIN : TOP_ANDROID_MARGIN;
const CONTAINER_MARGIN = TOP_MARGIN - 10;
export default class SlideUpPanel extends PureComponent {
static propTypes = {
// Whether or not to allow the panel to snap to the initial position after it has been opened
allowStayMiddle: PropTypes.bool,
alwaysCaptureContainerMove: PropTypes.bool,
containerHeight: PropTypes.number,
children: PropTypes.oneOfType([
PropTypes.arrayOf(PropTypes.node),
PropTypes.node,
]).isRequired,
header: PropTypes.func,
headerHeight: PropTypes.number,
// The initial position of the SlideUpPanel when it's first opened. If this value is between 0 and 1,
// it is treated as a percentage of the containerHeight.
initialPosition: PropTypes.number,
// The space between the top of the panel and the top of the container when the SlideUpPanel is fully open.
marginFromTop: PropTypes.number,
onRequestClose: PropTypes.func,
};
static defaultProps = {
allowStayMiddle: true,
header: () => null,
headerHeight: 0,
initialPosition: 0.5,
marginFromTop: TOP_MARGIN,
@@ -47,189 +55,253 @@ export default class SlideUpPanel extends PureComponent {
constructor(props) {
super(props);
const {containerHeight, headerHeight, marginFromTop} = props;
this.masterRef = React.createRef();
this.panRef = React.createRef();
this.scrollRef = React.createRef();
this.scrollViewRef = React.createRef();
this.headerRef = React.createRef();
this.backdropRef = React.createRef();
const initialUsedSpace = Math.abs(props.initialPosition);
let initialPosition;
if (initialUsedSpace <= 1) {
initialPosition = ((props.containerHeight - (props.headerHeight + BOTTOM_MARGIN)) * (1 - initialUsedSpace));
initialPosition = ((containerHeight - (headerHeight + BOTTOM_MARGIN)) * (1 - initialUsedSpace));
} else {
initialPosition = ((props.containerHeight - (props.headerHeight + BOTTOM_MARGIN)) - initialUsedSpace);
initialPosition = ((containerHeight - (headerHeight + BOTTOM_MARGIN)) - initialUsedSpace);
}
this.mainPanGesture = PanResponder.create({
onMoveShouldSetPanResponderCapture: (evt, gestureState) => {
if (this.props.alwaysCaptureContainerMove) {
return gestureState.dy !== 0;
}
const isGoingDown = gestureState.y0 < gestureState.dy;
return this.isAValidMovement(gestureState.dx, gestureState.dy, isGoingDown);
},
onPanResponderMove: (evt, gestureState) => {
const isGoingDown = gestureState.dy > 0;
if (this.props.alwaysCaptureContainerMove &&
!this.isAValidMovement(gestureState.dx, gestureState.dy, isGoingDown)) {
return;
}
this.moveStart(gestureState);
},
onPanResponderRelease: (evt, gestureState) => {
this.moveFinished(gestureState);
},
});
this.secondaryPanGesture = PanResponder.create({
onMoveShouldSetPanResponder: (evt, gestureState) => {
const isGoingDown = gestureState.y0 < gestureState.dy;
return this.isAValidMovement(gestureState.dx, gestureState.dy, isGoingDown, true);
},
onPanResponderMove: (evt, gestureState) => {
this.moveStart(gestureState);
},
onPanResponderRelease: (evt, gestureState) => {
this.moveFinished(gestureState);
},
});
this.previousTop = initialPosition;
this.canDrag = true;
// These values correspond to when the panel is fully open, when it is initially opened, and when it is closed
this.snapPoints = [marginFromTop, initialPosition, containerHeight];
this.state = {
position: new Animated.Value(props.containerHeight),
initialPosition,
finalPosition: props.marginFromTop,
endPosition: 0,
lastSnap: initialPosition,
};
this.lastScrollYValue = 0;
this.lastScrollY = new Animated.Value(0);
this.onRegisterLastScroll = Animated.event(
[{
nativeEvent: {
contentOffset: {
y: this.lastScrollY,
},
},
}],
{useNativeDriver: true},
);
this.lastScrollY.addListener(({value}) => {
this.lastScrollYValue = value;
});
this.dragY = new Animated.Value(0);
this.onGestureEvent = Animated.event(
[{
nativeEvent: {
translationY: this.dragY,
},
}],
{useNativeDriver: true},
);
this.reverseLastScrollY = Animated.multiply(
new Animated.Value(-1),
this.lastScrollY
);
this.translateYOffset = new Animated.Value(containerHeight);
this.translateY = Animated.add(
this.translateYOffset,
Animated.add(this.dragY, this.reverseLastScrollY)
).interpolate({
inputRange: [marginFromTop, containerHeight],
outputRange: [marginFromTop, containerHeight],
extrapolate: 'clamp',
});
}
componentDidMount() {
this.startAnimation(this.props.containerHeight, this.state.initialPosition, false, true);
Animated.timing(this.translateYOffset, {
duration: 200,
toValue: this.snapPoints[1],
useNativeDriver: true,
}).start();
}
handleTouchEnd = () => {
if (!this.isDragging) {
this.startAnimation(this.state.endPosition, this.props.containerHeight, false, true);
}
};
isAValidMovement = (distanceX, distanceY, isGoingDown, forceCheck = false) => {
const {endPosition, finalPosition} = this.state;
if (finalPosition !== endPosition || forceCheck || (isGoingDown && this.canDrag)) {
const moveTravelledFarEnough = Math.abs(distanceY) > Math.abs(distanceX) && Math.abs(distanceY) > 2;
return moveTravelledFarEnough;
}
return false;
};
moveStart = (gestureState) => {
if (this.viewRef && this.backdrop) {
const {endPosition} = this.state;
const position = endPosition - (gestureState.y0 - gestureState.moveY);
this.isDragging = true;
this.backdrop.setNativeProps({pointerEvents: 'none'});
this.updatePosition(position);
}
};
moveFinished = (gestureState) => {
if (this.viewRef) {
const isGoingDown = gestureState.y0 < gestureState.moveY;
let position = gestureState.moveY;
if (this.previousTop !== position) {
position = this.previousTop;
}
this.startAnimation(gestureState.y0, position, isGoingDown);
}
};
setBackdropRef = (ref) => {
this.backdrop = ref;
};
setDrag = (val) => {
this.canDrag = val;
};
setViewRef = (ref) => {
this.viewRef = ref;
};
startAnimation = (initialY, positionY, isGoingDown, initial = false) => {
const {allowStayMiddle, containerHeight, onRequestClose} = this.props;
const {finalPosition, initialPosition} = this.state;
const position = new Animated.Value(initial ? initialY : positionY);
let endPosition = (!isGoingDown && !initial ? finalPosition : positionY);
position.removeAllListeners();
if (isGoingDown) {
if (positionY <= this.state.initialPosition && allowStayMiddle) {
endPosition = initialPosition;
} else {
endPosition = containerHeight;
}
}
Animated.timing(position, {
toValue: endPosition,
duration: initial ? 200 : 100,
closeWithAnimation = () => {
Animated.timing(this.translateYOffset, {
duration: 200,
toValue: this.snapPoints[2],
useNativeDriver: true,
}).start(() => {
if (this.viewRef && this.backdrop) {
this.setState({endPosition});
this.backdrop.setNativeProps({pointerEvents: 'box-only'});
this.isDragging = false;
if (endPosition === containerHeight) {
onRequestClose();
}
}
});
position.addListener((pos) => {
if (this.viewRef) {
this.updatePosition(pos.value);
}
});
}).start(() => this.props.onRequestClose());
};
updatePosition = (newPosition) => {
const {position} = this.state;
this.previousTop = newPosition;
position.setValue(newPosition);
onHeaderHandlerStateChange = ({nativeEvent}) => {
if (nativeEvent.oldState === GestureState.BEGAN) {
this.lastScrollY.setValue(0);
this.lastScrollYValue = 0;
}
this.onHandlerStateChange({nativeEvent});
};
onHandlerStateChange = ({nativeEvent}) => {
if (nativeEvent.oldState === GestureState.ACTIVE) {
const {translationY, velocityY} = nativeEvent;
const {allowStayMiddle} = this.props;
const {lastSnap} = this.state;
const isGoingDown = translationY > 0;
const translation = translationY - this.lastScrollYValue;
const endOffsetY = lastSnap + translation;
let destSnapPoint = this.snapPoints[0];
if (Math.abs(translationY) < 50 && allowStayMiddle) {
// Only drag the panel after moving 50 or more points
destSnapPoint = lastSnap;
} else if (isGoingDown && !allowStayMiddle) {
// Just close the panel if the user pans down and we can't snap to the middle
destSnapPoint = this.snapPoints[2];
} else if (isGoingDown) {
destSnapPoint = this.snapPoints.find((s) => s >= endOffsetY);
} else {
destSnapPoint = this.snapPoints.find((s) => s <= endOffsetY);
}
if (destSnapPoint) {
this.translateYOffset.extractOffset();
this.translateYOffset.setValue(translationY);
this.translateYOffset.flattenOffset();
this.dragY.setValue(0);
if (destSnapPoint === this.snapPoints[2]) {
this.closeWithAnimation();
} else {
Animated.spring(this.translateYOffset, {
velocity: velocityY,
tension: 68,
friction: 12,
toValue: destSnapPoint,
useNativeDriver: true,
}).start(() => {
this.setState({lastSnap: destSnapPoint});
// When dragging down the panel when is fully open reset the scrollView to the top
if (isGoingDown && destSnapPoint !== this.snapPoints[0]) {
this.scrollToTop();
}
});
}
} else {
Animated.spring(this.translateYOffset, {
velocity: velocityY,
tension: 68,
friction: 12,
toValue: lastSnap,
useNativeDriver: true,
}).start();
}
}
};
onSingleTap = ({nativeEvent}) => {
if (nativeEvent.state === GestureState.ACTIVE) {
this.closeWithAnimation();
}
};
scrollToTop = () => {
if (this.scrollViewRef?.current) {
this.scrollViewRef.current._component.scrollTo({ //eslint-disable-line no-underscore-dangle
x: 0,
y: 0,
animated: false,
});
}
};
render() {
const {children} = this.props;
const containerPosition = {
top: this.state.position,
const {children, header} = this.props;
const {lastSnap} = this.state;
const translateStyle = {
transform: [{translateY: this.translateY}],
};
const headerComponent = header(this.headerRef);
return (
<View style={styles.viewport}>
<TapGestureHandler
maxDurationMs={100000}
ref={this.masterRef}
maxDeltaY={lastSnap - this.snapPoints[0]}
>
<View
ref={this.setBackdropRef}
style={styles.backdrop}
pointerEvents='box-only'
onTouchEnd={this.handleTouchEnd}
{...this.secondaryPanGesture.panHandlers}
/>
<SlideUpPanelIndicator
containerPosition={containerPosition}
panHandlers={this.secondaryPanGesture.panHandlers}
/>
<Animated.View
ref={this.setViewRef}
style={[containerPosition, styles.container]}
{...this.mainPanGesture.panHandlers}
style={StyleSheet.absoluteFill}
pointerEvents='box-none'
>
<View style={{maxHeight: (this.props.containerHeight - this.props.headerHeight - CONTAINER_MARGIN)}}>
{children}
</View>
</Animated.View>
</View>
<TapGestureHandler
waitFor={this.backdropRef}
onHandlerStateChange={this.onSingleTap}
>
<Animated.View style={styles.viewport}>
<PanGestureHandler
simultaneousHandlers={[this.scrollRef, this.masterRef]}
waitFor={this.headerRef}
shouldCancelWhenOutside={false}
onGestureEvent={this.onGestureEvent}
onHandlerStateChange={this.onHandlerStateChange}
ref={this.backdropRef}
>
<Animated.View
style={styles.backdrop}
pointerEvents='box-only'
/>
</PanGestureHandler>
</Animated.View>
</TapGestureHandler>
<Animated.View style={[StyleSheet.absoluteFill, translateStyle]}>
<PanGestureHandler
simultaneousHandlers={[this.scrollRef, this.masterRef]}
waitFor={this.headerRef}
shouldCancelWhenOutside={false}
onGestureEvent={this.onGestureEvent}
onHandlerStateChange={this.onHeaderHandlerStateChange}
>
<Animated.View>
<SlideUpPanelIndicator/>
{headerComponent}
</Animated.View>
</PanGestureHandler>
<PanGestureHandler
ref={this.panRef}
simultaneousHandlers={[this.scrollRef, this.masterRef]}
waitFor={this.headerRef}
shouldCancelWhenOutside={false}
onGestureEvent={this.onGestureEvent}
onHandlerStateChange={this.onHandlerStateChange}
>
<Animated.View style={[styles.container, !headerComponent && styles.border]}>
<NativeViewGestureHandler
ref={this.scrollRef}
waitFor={this.masterRef}
simultaneousHandlers={this.panRef}
>
<Animated.ScrollView
ref={this.scrollViewRef}
bounces={false}
onScrollBeginDrag={this.onRegisterLastScroll}
scrollEventThrottle={1}
style={{marginBottom: (this.props.marginFromTop + BOTTOM_MARGIN)}}
>
{children}
</Animated.ScrollView>
</NativeViewGestureHandler>
</Animated.View>
</PanGestureHandler>
</Animated.View>
</View>
</TapGestureHandler>
);
}
}
@@ -241,6 +313,8 @@ const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: 'white',
},
border: {
...Platform.select({
android: {
borderTopRightRadius: 2,

View File

@@ -1,32 +1,21 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import React, {PureComponent} from 'react';
import PropTypes from 'prop-types';
import React from 'react';
import {Animated, Platform, StyleSheet, View} from 'react-native';
export default class SlideUpPanelIndicator extends PureComponent {
static propTypes = {
containerPosition: PropTypes.object.isRequired,
panHandlers: PropTypes.object.isRequired,
};
render() {
const {panHandlers, containerPosition} = this.props;
if (Platform.OS === 'android') {
return null;
}
return (
<Animated.View
style={[containerPosition, styles.dragIndicatorContainer]}
{...panHandlers}
>
<View style={styles.dragIndicator}/>
</Animated.View>
);
export default function slideUpPanelIndicator() {
if (Platform.OS === 'android') {
return null;
}
return (
<Animated.View
style={styles.dragIndicatorContainer}
>
<View style={styles.dragIndicator}/>
</Animated.View>
);
}
const styles = StyleSheet.create({

View File

@@ -3,13 +3,16 @@
import React, {PureComponent} from 'react';
import PropTypes from 'prop-types';
import {injectIntl, intlShape} from 'react-intl';
import {intlShape} from 'react-intl';
import {TextInput} from 'react-native';
class TextInputWithLocalizedPlaceholder extends PureComponent {
export default class TextInputWithLocalizedPlaceholder extends PureComponent {
static propTypes = {
...TextInput.propTypes,
placeholder: PropTypes.object.isRequired,
};
static contextTypes = {
intl: intlShape.isRequired,
};
@@ -22,10 +25,11 @@ class TextInputWithLocalizedPlaceholder extends PureComponent {
};
render() {
const {intl, placeholder, ...otherProps} = this.props;
const {formatMessage} = this.context.intl;
const {placeholder, ...otherProps} = this.props;
let placeholderString = '';
if (placeholder.id) {
placeholderString = intl.formatMessage(placeholder);
placeholderString = formatMessage(placeholder);
}
return (
@@ -38,5 +42,3 @@ class TextInputWithLocalizedPlaceholder extends PureComponent {
);
}
}
export default injectIntl(TextInputWithLocalizedPlaceholder, {withRef: true});

View File

@@ -185,7 +185,7 @@ const getStyleSheet = makeStyleSheetFromTheme((theme) => {
borderBottomWidth: 1,
borderTopColor: changeOpacity(theme.centerChannelColor, 0.1),
borderBottomColor: changeOpacity(theme.centerChannelColor, 0.1),
backgroundColor: '#fff',
backgroundColor: theme.centerChannelBg,
},
input: {
...input,

View File

@@ -65,6 +65,9 @@ const ViewTypes = keyMirror({
LOADING_POSTS: null,
SET_LOAD_MORE_POSTS_VISIBLE: null,
SET_INITIAL_POST_COUNT: null,
INCREASE_POST_COUNT: null,
RECEIVED_POSTS_FOR_CHANNEL_AT_TIME: null,
SET_LAST_UPGRADE_CHECK: null,

View File

@@ -53,10 +53,6 @@ function loadTranslation(locale) {
TRANSLATIONS[locale] = require('assets/i18n/pt-BR.json');
localeData = require('react-intl/locale-data/pt');
break;
case 'tr':
TRANSLATIONS.tr = require('assets/i18n/tr.json');
localeData = require('react-intl/locale-data/tr');
break;
case 'ro':
TRANSLATIONS.ro = require('assets/i18n/ro.json');
localeData = require('react-intl/locale-data/ro');
@@ -65,6 +61,14 @@ function loadTranslation(locale) {
TRANSLATIONS.ru = require('assets/i18n/ru.json');
localeData = require('react-intl/locale-data/ru');
break;
case 'tr':
TRANSLATIONS.tr = require('assets/i18n/tr.json');
localeData = require('react-intl/locale-data/tr');
break;
case 'uk':
TRANSLATIONS.tr = require('assets/i18n/uk.json');
localeData = require('react-intl/locale-data/uk');
break;
case 'zh-CN':
TRANSLATIONS[locale] = require('assets/i18n/zh-CN.json');
localeData = require('react-intl/locale-data/zh');

View File

@@ -278,6 +278,25 @@ function postVisibility(state = {}, action) {
}
}
function postCountInChannel(state = {}, action) {
switch (action.type) {
case ViewTypes.SET_INITIAL_POST_COUNT: {
const {channelId, count} = action.data;
const nextState = {...state};
nextState[channelId] = count;
return nextState;
}
case ViewTypes.INCREASE_POST_COUNT: {
const {channelId, count} = action.data;
const nextState = {...state};
nextState[channelId] += count;
return nextState;
}
default:
return state;
}
}
function loadingPosts(state = {}, action) {
switch (action.type) {
case ViewTypes.LOADING_POSTS: {
@@ -318,6 +337,7 @@ export default combineReducers({
drafts,
loading,
refreshing,
postCountInChannel,
postVisibility,
loadingPosts,
lastGetPosts,

View File

@@ -113,8 +113,6 @@ class ChannelDrawerButton extends PureComponent {
style={style.badge}
countStyle={style.mention}
count={badgeCount}
minHeight={20}
minWidth={20}
onPress={this.handlePress}
/>
);

View File

@@ -27,6 +27,7 @@ import ChannelInfoRow from './channel_info_row';
export default class ChannelInfo extends PureComponent {
static propTypes = {
actions: PropTypes.shape({
clearPinnedPosts: PropTypes.func.isRequired,
closeDMChannel: PropTypes.func.isRequired,
closeGMChannel: PropTypes.func.isRequired,
deleteChannel: PropTypes.func.isRequired,
@@ -144,10 +145,11 @@ export default class ChannelInfo extends PureComponent {
goToPinnedPosts = preventDoubleTap(() => {
const {formatMessage} = this.context.intl;
const {currentChannel, navigator, theme} = this.props;
const {actions, currentChannel, navigator, theme} = this.props;
const id = t('channel_header.pinnedPosts');
const defaultMessage = 'Pinned Posts';
actions.clearPinnedPosts(currentChannel.id);
navigator.push({
backButtonTitle: '',
screen: 'PinnedPosts',
@@ -283,13 +285,13 @@ export default class ChannelInfo extends PureComponent {
}
});
handleFavorite = () => {
handleFavorite = preventDoubleTap(() => {
const {isFavorite, actions, currentChannel} = this.props;
const {favoriteChannel, unfavoriteChannel} = actions;
const toggleFavorite = isFavorite ? unfavoriteChannel : favoriteChannel;
this.setState({isFavorite: !isFavorite});
toggleFavorite(currentChannel.id);
};
});
handleClosePermalink = () => {
const {actions} = this.props;
@@ -302,7 +304,7 @@ export default class ChannelInfo extends PureComponent {
this.showPermalinkView(postId);
};
handleMuteChannel = () => {
handleMuteChannel = preventDoubleTap(() => {
const {actions, currentChannel, currentUserId, isChannelMuted} = this.props;
const {updateChannelNotifyProps} = actions;
const opts = {
@@ -311,7 +313,7 @@ export default class ChannelInfo extends PureComponent {
this.setState({isMuted: !isChannelMuted});
updateChannelNotifyProps(currentUserId, currentChannel.id, opts);
};
});
showPermalinkView = (postId) => {
const {actions, navigator} = this.props;
@@ -466,7 +468,6 @@ export default class ChannelInfo extends PureComponent {
/>
</React.Fragment>
)}
<View style={style.separator}/>
</React.Fragment>
);
};
@@ -505,60 +506,61 @@ export default class ChannelInfo extends PureComponent {
style={style.scrollView}
>
{currentChannel.hasOwnProperty('id') &&
<ChannelInfoHeader
createAt={currentChannel.create_at}
creator={currentChannelCreatorName}
displayName={currentChannel.display_name}
header={currentChannel.header}
memberCount={currentChannelMemberCount}
navigator={navigator}
onPermalinkPress={this.handlePermalinkPress}
purpose={currentChannel.purpose}
status={status}
theme={theme}
type={currentChannel.type}
isArchived={currentChannel.delete_at !== 0}
/>
<ChannelInfoHeader
createAt={currentChannel.create_at}
creator={currentChannelCreatorName}
displayName={currentChannel.display_name}
header={currentChannel.header}
memberCount={currentChannelMemberCount}
navigator={navigator}
onPermalinkPress={this.handlePermalinkPress}
purpose={currentChannel.purpose}
status={status}
theme={theme}
type={currentChannel.type}
isArchived={currentChannel.delete_at !== 0}
/>
}
<View style={style.rowsContainer}>
{this.actionsRows(style, channelIsArchived)}
{this.renderLeaveOrDeleteChannelRow() &&
<View>
<ChannelInfoRow
action={this.handleLeave}
defaultMessage='Leave Channel'
icon='sign-out'
textId={t('navbar.leave')}
theme={theme}
/>
</View>
<React.Fragment>
<View style={style.separator}/>
<ChannelInfoRow
action={this.handleLeave}
defaultMessage='Leave Channel'
icon='sign-out'
textId={t('navbar.leave')}
theme={theme}
/>
</React.Fragment>
}
</View>
{this.renderLeaveOrDeleteChannelRow() && canDeleteChannel && !channelIsArchived &&
<View style={style.footer}>
<ChannelInfoRow
action={this.handleDelete}
defaultMessage='Archive Channel'
iconColor='#CA3B27'
icon='archive'
textId={t('mobile.routes.channelInfo.delete_channel')}
textColor='#CA3B27'
theme={theme}
/>
</View>
<View style={style.footer}>
<ChannelInfoRow
action={this.handleDelete}
defaultMessage='Archive Channel'
iconColor='#CA3B27'
icon='archive'
textId={t('mobile.routes.channelInfo.delete_channel')}
textColor='#CA3B27'
theme={theme}
/>
</View>
}
{this.renderCloseDirect() &&
<View style={style.footer}>
<ChannelInfoRow
action={this.handleClose}
defaultMessage={defaultMessage}
icon='times'
iconColor='#CA3B27'
textId={i18nId}
textColor='#CA3B27'
theme={theme}
/>
</View>
<View style={style.footer}>
<ChannelInfoRow
action={this.handleClose}
defaultMessage={defaultMessage}
icon='times'
iconColor='#CA3B27'
textId={i18nId}
textColor='#CA3B27'
theme={theme}
/>
</View>
}
</ScrollView>
</View>

View File

@@ -14,6 +14,7 @@ import {
} from 'mattermost-redux/actions/channels';
import {getCustomEmojisInText} from 'mattermost-redux/actions/emojis';
import {selectFocusedPostId} from 'mattermost-redux/actions/posts';
import {clearPinnedPosts} from 'mattermost-redux/actions/search';
import {General} from 'mattermost-redux/constants';
import {getTheme} from 'mattermost-redux/selectors/entities/preferences';
import {
@@ -90,6 +91,7 @@ function mapStateToProps(state) {
function mapDispatchToProps(dispatch) {
return {
actions: bindActionCreators({
clearPinnedPosts,
closeDMChannel,
closeGMChannel,
deleteChannel,

View File

@@ -108,7 +108,7 @@ export default class EditPost extends PureComponent {
};
focus = () => {
this.messageInput.refs.wrappedInstance.focus();
this.messageInput.focus();
};
messageRef = (ref) => {

View File

@@ -4,9 +4,10 @@
import React, {PureComponent} from 'react';
import PropTypes from 'prop-types';
import {intlShape} from 'react-intl';
import {View} from 'react-native';
import {Alert, View} from 'react-native';
import RNFetchBlob from 'rn-fetch-blob';
import {KeyboardAwareScrollView} from 'react-native-keyboard-aware-scroll-view';
import {DocumentPickerUtil} from 'react-native-document-picker';
import {Client4} from 'mattermost-redux/client';
@@ -24,7 +25,9 @@ import ProfilePicture from 'app/components/profile_picture';
import AttachmentButton from 'app/components/attachment_button';
import mattermostBucket from 'app/mattermost_bucket';
import LocalConfig from 'assets/config';
import {getFormattedFileSize} from 'mattermost-redux/utils/file_utils';
const MAX_SIZE = 20 * 1024 * 1024;
const holders = {
firstName: {
id: t('user.settings.general.firstName'),
@@ -240,6 +243,19 @@ export default class EditProfile extends PureComponent {
}
};
onShowFileSizeWarning = (filename) => {
const {formatMessage} = this.context.intl;
const fileSizeWarning = formatMessage({
id: 'file_upload.fileAbove',
defaultMessage: 'File above {max}MB cannot be uploaded: {filename}',
}, {
max: getFormattedFileSize({size: MAX_SIZE}),
filename,
});
Alert.alert(fileSizeWarning);
};
renderFirstNameSettings = () => {
const {formatMessage} = this.context.intl;
const {config, currentUser, theme} = this.props;
@@ -488,10 +504,15 @@ export default class EditProfile extends PureComponent {
<View style={style.top}>
<AttachmentButton
blurTextBox={emptyFunction}
browseFileTypes={DocumentPickerUtil.images()}
canTakeVideo={false}
canBrowseVideoLibrary={false}
maxFileSize={MAX_SIZE}
theme={theme}
navigator={navigator}
wrapper={true}
uploadFiles={this.handleUploadProfileImage}
onShowFileSizeWarning={this.onShowFileSizeWarning}
>
<ProfilePicture
userId={currentUser.id}

View File

@@ -338,10 +338,12 @@ export default class ImagePreview extends PureComponent {
renderImageComponent = (imageProps, imageDimensions) => {
if (imageDimensions) {
const {deviceHeight, deviceWidth} = this.props;
const {height, width} = imageDimensions;
const {style, ...otherProps} = imageProps;
const statusBar = DeviceTypes.IS_IPHONE_X ? 0 : 20;
const flattenStyle = StyleSheet.flatten(style);
const calculatedDimensions = calculateDimensions(height, width, flattenStyle.width, flattenStyle.height);
const calculatedDimensions = calculateDimensions(height, width, deviceWidth, deviceHeight - statusBar);
const imageStyle = {...flattenStyle, ...calculatedDimensions};
return (
@@ -376,12 +378,13 @@ export default class ImagePreview extends PureComponent {
renderVideoPreview = (file) => {
const {deviceHeight, deviceWidth, theme} = this.props;
const statusBar = DeviceTypes.IS_IPHONE_X ? 0 : 20;
return (
<VideoPreview
file={file}
onFullScreen={this.setHeaderAndFooterVisible}
deviceHeight={deviceHeight}
deviceHeight={deviceHeight - statusBar}
deviceWidth={deviceWidth}
theme={theme}
/>

View File

@@ -2,6 +2,7 @@
// See LICENSE.txt for license information.
import {Navigation} from 'react-native-navigation';
import {gestureHandlerRootHOC} from 'react-native-gesture-handler';
import Channel from 'app/screens/channel';
import Entry from 'app/screens/entry';
@@ -47,8 +48,8 @@ export function registerScreens(store, Provider) {
Navigation.registerComponent('OptionsModal', () => wrapWithContextProvider(require('app/screens/options_modal').default), store, Provider);
Navigation.registerComponent('Permalink', () => wrapWithContextProvider(require('app/screens/permalink').default), store, Provider);
Navigation.registerComponent('PinnedPosts', () => wrapWithContextProvider(require('app/screens/pinned_posts').default), store, Provider);
Navigation.registerComponent('PostOptions', () => wrapWithContextProvider(require('app/screens/post_options').default), store, Provider);
Navigation.registerComponent('ReactionList', () => wrapWithContextProvider(require('app/screens/reaction_list').default), store, Provider);
Navigation.registerComponent('PostOptions', () => gestureHandlerRootHOC(wrapWithContextProvider(require('app/screens/post_options').default)), store, Provider);
Navigation.registerComponent('ReactionList', () => gestureHandlerRootHOC(wrapWithContextProvider(require('app/screens/reaction_list').default)), store, Provider);
Navigation.registerComponent('RecentMentions', () => wrapWithContextProvider(require('app/screens/recent_mentions').default), store, Provider);
Navigation.registerComponent('Root', () => require('app/screens/root').default, store, Provider);
Navigation.registerComponent('Search', () => wrapWithContextProvider(require('app/screens/search').default), store, Provider);

View File

@@ -81,7 +81,7 @@ export default class Mfa extends PureComponent {
};
blur = () => {
this.textInput.refs.wrappedInstance.blur();
this.textInput.blur();
};
submit = preventDoubleTap(() => {

View File

@@ -46,9 +46,9 @@ exports[`MoreChannels should match snapshot 1`] = `
},
]
}
extraData={false}
extraData={true}
listType="flat"
loading={false}
loading={true}
loadingComponent={
<View
style={
@@ -71,29 +71,7 @@ exports[`MoreChannels should match snapshot 1`] = `
/>
</View>
}
noResults={
<View
style={
Object {
"alignItems": "center",
"flexDirection": "row",
"flexGrow": 1,
"justifyContent": "center",
}
}
>
<FormattedText
defaultMessage="No more channels to join"
id="more_channels.noMore"
style={
Object {
"color": "rgba(61,60,64,0.5)",
"fontSize": 26,
}
}
/>
</View>
}
noResults={null}
onLoadMore={[Function]}
onRowPress={[Function]}
renderItem={[Function]}

View File

@@ -80,7 +80,7 @@ export default class MoreChannels extends PureComponent {
}
componentDidMount() {
this.getChannels();
this.doGetChannels();
}
componentWillReceiveProps(nextProps) {
@@ -92,7 +92,7 @@ export default class MoreChannels extends PureComponent {
}
if (nextProps.channels !== this.props.channels) {
channels = nextProps.channels.slice(0, (this.page + 1) * General.CHANNELS_CHUNK_SIZE);
channels = nextProps.channels;
if (term) {
channels = this.filterChannels(nextProps.channels, term);
}
@@ -116,15 +116,10 @@ export default class MoreChannels extends PureComponent {
this.props.navigator.dismissModal({animationType: 'slide-down'});
};
filterChannels = (channels, term) => {
return channels.filter((c) => {
return (c.name.toLowerCase().includes(term) || c.display_name.toLowerCase().includes(term));
});
};
getChannels = debounce(() => {
doGetChannels = () => {
const {actions, currentTeamId} = this.props;
const {loading, term} = this.state;
if (this.next && !loading && !term) {
this.setState({loading: true}, () => {
actions.getChannels(
@@ -134,7 +129,15 @@ export default class MoreChannels extends PureComponent {
).then(this.loadedChannels);
});
}
}, 100);
};
filterChannels = (channels, term) => {
return channels.filter((c) => {
return (c.name.toLowerCase().includes(term) || c.display_name.toLowerCase().includes(term));
});
};
getChannels = debounce(this.doGetChannels, 100);
headerButtons = (createEnabled) => {
const {canCreateChannels} = this.props;

View File

@@ -41,6 +41,8 @@ function mapStateToProps(state, ownProps) {
let canAddReaction = true;
let canEdit = false;
let canEditUntil = -1;
let {canDelete} = ownProps;
let canPin = true;
if (hasNewPermissions(state)) {
canAddReaction = haveIChannelPermission(state, {
@@ -52,6 +54,8 @@ function mapStateToProps(state, ownProps) {
if (channelIsArchived) {
canAddReaction = false;
canDelete = false;
canPin = false;
} else {
canEdit = canEditPost(state, config, license, currentTeamId, currentChannelId, currentUserId, post);
if (canEdit && license.IsLicensed === 'true' &&
@@ -66,6 +70,8 @@ function mapStateToProps(state, ownProps) {
canAddReaction,
canEdit,
canEditUntil,
canDelete,
canPin,
currentTeamUrl: getCurrentTeamUrl(state),
isMyPost: currentUserId === post.user_id,
post,

View File

@@ -7,7 +7,9 @@ import {
Image,
StyleSheet,
Text,
Platform,
TouchableHighlight,
TouchableNativeFeedback,
View,
} from 'react-native';
@@ -37,16 +39,40 @@ export default class PostOption extends PureComponent {
text: PropTypes.string.isRequired,
};
handleOnPress = () => {
// Wait for the tap animation so that the user has some feedback
setTimeout(() => {
this.props.onPress();
}, 250);
};
render() {
const {destructive, icon, onPress, text} = this.props;
const {destructive, icon, text} = this.props;
const image = icons[icon];
const Touchable = Platform.select({
ios: TouchableHighlight,
android: TouchableNativeFeedback,
});
const touchableProps = Platform.select({
ios: {
underlayColor: 'rgba(0, 0, 0, 0.1)',
},
android: {
background: TouchableNativeFeedback.Ripple( //eslint-disable-line new-cap
'rgba(0, 0, 0, 0.1)',
false,
),
},
});
return (
<View style={style.container} >
<TouchableHighlight
onPress={onPress}
underlayColor='rgba(0, 0, 0, 0.05)'
style={style.flex}
<Touchable
onPress={this.handleOnPress}
{...touchableProps}
style={style.row}
>
<View style={style.row}>
<View style={style.icon}>
@@ -58,7 +84,7 @@ export default class PostOption extends PureComponent {
</Text>
</View>
</View>
</TouchableHighlight>
</Touchable>
<View style={style.footer}/>
</View>
);
@@ -70,9 +96,6 @@ const style = StyleSheet.create({
height: 51,
width: '100%',
},
flex: {
flex: 1,
},
destructive: {
color: '#D0021B',
},

View File

@@ -9,11 +9,11 @@ import MaterialIcon from 'react-native-vector-icons/MaterialIcons';
import SlideUpPanel from 'app/components/slide_up_panel';
import {BOTTOM_MARGIN} from 'app/components/slide_up_panel/slide_up_panel';
import DeviceTypes from 'app/constants/device';
import PostOption from './post_option';
const OPTION_HEIGHT = 50;
const INITIAL_OPTION_COUNT = 6;
export default class PostOptions extends PureComponent {
static propTypes = {
@@ -29,6 +29,7 @@ export default class PostOptions extends PureComponent {
additionalOption: PropTypes.object,
canAddReaction: PropTypes.bool,
canDelete: PropTypes.bool,
canPin: PropTypes.bool,
canEdit: PropTypes.bool,
canEditUntil: PropTypes.number.isRequired,
channelIsReadOnly: PropTypes.bool,
@@ -56,7 +57,7 @@ export default class PostOptions extends PureComponent {
closeWithAnimation = () => {
if (this.slideUpPanel) {
this.slideUpPanel.getWrappedInstance().handleTouchEnd();
this.slideUpPanel.getWrappedInstance().closeWithAnimation();
} else {
this.close();
}
@@ -210,13 +211,19 @@ export default class PostOptions extends PureComponent {
const actions = [
this.getEditOption(),
this.getFlagOption(),
this.getPinOption(),
this.getAddReactionOption(),
this.getCopyPermalink(),
this.getCopyText(),
this.getDeleteOption(),
];
const {canDelete, canPin} = this.props;
if (canPin) {
actions.splice(2, 0, this.getPinOption());
}
if (canDelete) {
actions.push(this.getDeleteOption());
}
return actions.filter((a) => a !== null);
};
@@ -224,13 +231,19 @@ export default class PostOptions extends PureComponent {
const actions = [
this.getFlagOption(),
this.getAddReactionOption(),
this.getPinOption(),
this.getCopyPermalink(),
this.getCopyText(),
this.getEditOption(),
this.getDeleteOption(),
];
const {canDelete, canPin} = this.props;
if (canPin) {
actions.splice(2, 0, this.getPinOption());
}
if (canDelete) {
actions.push(this.getDeleteOption());
}
return actions.filter((a) => a !== null);
};
@@ -294,15 +307,19 @@ export default class PostOptions extends PureComponent {
handleFlagPost = () => {
const {actions, post} = this.props;
actions.flagPost(post.id);
this.closeWithAnimation();
requestAnimationFrame(() => {
actions.flagPost(post.id);
});
};
handlePinPost = () => {
const {actions, post} = this.props;
actions.pinPost(post.id);
this.closeWithAnimation();
requestAnimationFrame(() => {
actions.pinPost(post.id);
});
};
handlePostDelete = () => {
@@ -361,15 +378,19 @@ export default class PostOptions extends PureComponent {
handleUnflagPost = () => {
const {actions, post} = this.props;
actions.unflagPost(post.id);
this.closeWithAnimation();
requestAnimationFrame(() => {
actions.unflagPost(post.id);
});
};
handleUnpinPost = () => {
const {actions, post} = this.props;
actions.unpinPost(post.id);
this.closeWithAnimation();
requestAnimationFrame(() => {
actions.unpinPost(post.id);
});
};
refSlideUpPanel = (r) => {
@@ -379,14 +400,13 @@ export default class PostOptions extends PureComponent {
render() {
const {deviceHeight} = this.props;
const options = this.getPostOptions();
const initialPosition = (INITIAL_OPTION_COUNT + 1) * OPTION_HEIGHT;
const marginFromTop = deviceHeight - BOTTOM_MARGIN - ((options.length + 1) * OPTION_HEIGHT);
const initialPosition = DeviceTypes.IS_IPHONE_X ? 280 : 305;
return (
<View style={style.flex}>
<View style={style.container}>
<SlideUpPanel
allowStayMiddle={false}
alwaysCaptureContainerMove={true}
ref={this.refSlideUpPanel}
marginFromTop={marginFromTop}
onRequestClose={this.close}
@@ -400,7 +420,7 @@ export default class PostOptions extends PureComponent {
}
const style = StyleSheet.create({
flex: {
container: {
flex: 1,
},
});

View File

@@ -1,92 +1,94 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`ReactionHeader should match snapshot 1`] = `
<View
style={
Object {
"backgroundColor": "#FFFFFF",
"borderTopLeftRadius": 10,
"borderTopRightRadius": 10,
"height": 36.5,
"paddingHorizontal": 0,
<Handler>
<AnimatedComponent
style={
Object {
"backgroundColor": "#FFFFFF",
"borderTopLeftRadius": 10,
"borderTopRightRadius": 10,
"height": 36.5,
"paddingHorizontal": 0,
}
}
}
>
<ScrollView
alwaysBounceHorizontal={false}
horizontal={true}
overScrollMode="never"
>
<ReactionHeaderItem
count={2}
emojiName="smile"
highlight={true}
onPress={[Function]}
theme={
Object {
"awayIndicator": "#ffbc42",
"buttonBg": "#166de0",
"buttonColor": "#ffffff",
"centerChannelBg": "#ffffff",
"centerChannelColor": "#3d3c40",
"codeTheme": "github",
"dndIndicator": "#f74343",
"errorTextColor": "#fd5960",
"linkColor": "#2389d7",
"mentionBj": "#ffffff",
"mentionColor": "#145dbf",
"mentionHighlightBg": "#ffe577",
"mentionHighlightLink": "#166de0",
"newMessageSeparator": "#ff8800",
"onlineIndicator": "#06d6a0",
"sidebarBg": "#145dbf",
"sidebarHeaderBg": "#1153ab",
"sidebarHeaderTextColor": "#ffffff",
"sidebarText": "#ffffff",
"sidebarTextActiveBorder": "#579eff",
"sidebarTextActiveColor": "#ffffff",
"sidebarTextHoverBg": "#4578bf",
"sidebarUnreadText": "#ffffff",
"type": "Mattermost",
<ScrollView
alwaysBounceHorizontal={false}
horizontal={true}
overScrollMode="never"
>
<ReactionHeaderItem
count={2}
emojiName="smile"
highlight={true}
onPress={[Function]}
theme={
Object {
"awayIndicator": "#ffbc42",
"buttonBg": "#166de0",
"buttonColor": "#ffffff",
"centerChannelBg": "#ffffff",
"centerChannelColor": "#3d3c40",
"codeTheme": "github",
"dndIndicator": "#f74343",
"errorTextColor": "#fd5960",
"linkColor": "#2389d7",
"mentionBj": "#ffffff",
"mentionColor": "#145dbf",
"mentionHighlightBg": "#ffe577",
"mentionHighlightLink": "#166de0",
"newMessageSeparator": "#ff8800",
"onlineIndicator": "#06d6a0",
"sidebarBg": "#145dbf",
"sidebarHeaderBg": "#1153ab",
"sidebarHeaderTextColor": "#ffffff",
"sidebarText": "#ffffff",
"sidebarTextActiveBorder": "#579eff",
"sidebarTextActiveColor": "#ffffff",
"sidebarTextHoverBg": "#4578bf",
"sidebarUnreadText": "#ffffff",
"type": "Mattermost",
}
}
}
/>
<ReactionHeaderItem
count={1}
emojiName="+1"
highlight={false}
onPress={[Function]}
theme={
Object {
"awayIndicator": "#ffbc42",
"buttonBg": "#166de0",
"buttonColor": "#ffffff",
"centerChannelBg": "#ffffff",
"centerChannelColor": "#3d3c40",
"codeTheme": "github",
"dndIndicator": "#f74343",
"errorTextColor": "#fd5960",
"linkColor": "#2389d7",
"mentionBj": "#ffffff",
"mentionColor": "#145dbf",
"mentionHighlightBg": "#ffe577",
"mentionHighlightLink": "#166de0",
"newMessageSeparator": "#ff8800",
"onlineIndicator": "#06d6a0",
"sidebarBg": "#145dbf",
"sidebarHeaderBg": "#1153ab",
"sidebarHeaderTextColor": "#ffffff",
"sidebarText": "#ffffff",
"sidebarTextActiveBorder": "#579eff",
"sidebarTextActiveColor": "#ffffff",
"sidebarTextHoverBg": "#4578bf",
"sidebarUnreadText": "#ffffff",
"type": "Mattermost",
/>
<ReactionHeaderItem
count={1}
emojiName="+1"
highlight={false}
onPress={[Function]}
theme={
Object {
"awayIndicator": "#ffbc42",
"buttonBg": "#166de0",
"buttonColor": "#ffffff",
"centerChannelBg": "#ffffff",
"centerChannelColor": "#3d3c40",
"codeTheme": "github",
"dndIndicator": "#f74343",
"errorTextColor": "#fd5960",
"linkColor": "#2389d7",
"mentionBj": "#ffffff",
"mentionColor": "#145dbf",
"mentionHighlightBg": "#ffe577",
"mentionHighlightLink": "#166de0",
"newMessageSeparator": "#ff8800",
"onlineIndicator": "#06d6a0",
"sidebarBg": "#145dbf",
"sidebarHeaderBg": "#1153ab",
"sidebarHeaderTextColor": "#ffffff",
"sidebarText": "#ffffff",
"sidebarTextActiveBorder": "#579eff",
"sidebarTextActiveColor": "#ffffff",
"sidebarTextHoverBg": "#4578bf",
"sidebarUnreadText": "#ffffff",
"type": "Mattermost",
}
}
}
/>
</ScrollView>
</View>
/>
</ScrollView>
</AnimatedComponent>
</Handler>
`;
exports[`ReactionHeader should match snapshot, renderContent 1`] = `

View File

@@ -9,231 +9,155 @@ exports[`ReactionList should match snapshot 1`] = `
}
>
<Connect(SlideUpPanel)
header={[Function]}
headerHeight={37.5}
initialPosition={0.55}
onRequestClose={[Function]}
>
<React.Fragment>
<View
style={
Object {
"height": 45,
"justifyContent": "center",
}
}
>
<ReactionRow
emojiName="+1"
navigator={
Object {
"setOnNavigatorEvent": [MockFunction] {
"calls": Array [
Array [
[Function],
],
],
"results": Array [
Object {
"isThrow": false,
"value": undefined,
},
],
},
}
}
teammateNameDisplay="username"
theme={
Object {
"awayIndicator": "#ffbc42",
"buttonBg": "#166de0",
"buttonColor": "#ffffff",
"centerChannelBg": "#ffffff",
"centerChannelColor": "#3d3c40",
"codeTheme": "github",
"dndIndicator": "#f74343",
"errorTextColor": "#fd5960",
"linkColor": "#2389d7",
"mentionBj": "#ffffff",
"mentionColor": "#145dbf",
"mentionHighlightBg": "#ffe577",
"mentionHighlightLink": "#166de0",
"newMessageSeparator": "#ff8800",
"onlineIndicator": "#06d6a0",
"sidebarBg": "#145dbf",
"sidebarHeaderBg": "#1153ab",
"sidebarHeaderTextColor": "#ffffff",
"sidebarText": "#ffffff",
"sidebarTextActiveBorder": "#579eff",
"sidebarTextActiveColor": "#ffffff",
"sidebarTextHoverBg": "#4578bf",
"sidebarUnreadText": "#ffffff",
"type": "Mattermost",
}
}
user={
Object {
"id": "user_id_2",
"username": "username_2",
}
}
/>
<View
style={
Object {
"borderBottomWidth": 1,
"borderColor": "rgba(61,60,64,0.2)",
"height": 37.5,
"backgroundColor": "rgba(61,60,64,0.2)",
"height": 1,
}
}
>
<ReactionHeader
onSelectReaction={[Function]}
reactions={
Array [
Object {
"count": 2,
"name": "all_emojis",
},
Object {
"count": 1,
"name": "+1",
"reactions": Array [
Object {
"emoji_name": "+1",
"user_id": "user_id_2",
},
/>
</View>
<View
style={
Object {
"height": 45,
"justifyContent": "center",
}
}
>
<ReactionRow
emojiName="smile"
navigator={
Object {
"setOnNavigatorEvent": [MockFunction] {
"calls": Array [
Array [
[Function],
],
},
Object {
"count": 1,
"name": "smile",
"reactions": Array [
Object {
"emoji_name": "smile",
"user_id": "user_id_1",
},
],
},
]
}
selected="all_emojis"
theme={
Object {
"awayIndicator": "#ffbc42",
"buttonBg": "#166de0",
"buttonColor": "#ffffff",
"centerChannelBg": "#ffffff",
"centerChannelColor": "#3d3c40",
"codeTheme": "github",
"dndIndicator": "#f74343",
"errorTextColor": "#fd5960",
"linkColor": "#2389d7",
"mentionBj": "#ffffff",
"mentionColor": "#145dbf",
"mentionHighlightBg": "#ffe577",
"mentionHighlightLink": "#166de0",
"newMessageSeparator": "#ff8800",
"onlineIndicator": "#06d6a0",
"sidebarBg": "#145dbf",
"sidebarHeaderBg": "#1153ab",
"sidebarHeaderTextColor": "#ffffff",
"sidebarText": "#ffffff",
"sidebarTextActiveBorder": "#579eff",
"sidebarTextActiveColor": "#ffffff",
"sidebarTextHoverBg": "#4578bf",
"sidebarUnreadText": "#ffffff",
"type": "Mattermost",
}
}
/>
</View>
<ScrollView
bounce={false}
onScroll={[Function]}
>
<View
style={
Object {
"height": 45,
"justifyContent": "center",
}
}
>
<ReactionRow
emojiName="+1"
navigator={
Object {
"setOnNavigatorEvent": [MockFunction] {
"calls": Array [
Array [
[Function],
],
],
"results": Array [
Object {
"isThrow": false,
"value": undefined,
},
],
],
"results": Array [
Object {
"isThrow": false,
"value": undefined,
},
}
}
teammateNameDisplay="username"
theme={
Object {
"awayIndicator": "#ffbc42",
"buttonBg": "#166de0",
"buttonColor": "#ffffff",
"centerChannelBg": "#ffffff",
"centerChannelColor": "#3d3c40",
"codeTheme": "github",
"dndIndicator": "#f74343",
"errorTextColor": "#fd5960",
"linkColor": "#2389d7",
"mentionBj": "#ffffff",
"mentionColor": "#145dbf",
"mentionHighlightBg": "#ffe577",
"mentionHighlightLink": "#166de0",
"newMessageSeparator": "#ff8800",
"onlineIndicator": "#06d6a0",
"sidebarBg": "#145dbf",
"sidebarHeaderBg": "#1153ab",
"sidebarHeaderTextColor": "#ffffff",
"sidebarText": "#ffffff",
"sidebarTextActiveBorder": "#579eff",
"sidebarTextActiveColor": "#ffffff",
"sidebarTextHoverBg": "#4578bf",
"sidebarUnreadText": "#ffffff",
"type": "Mattermost",
}
}
user={
Object {
"id": "user_id_2",
"username": "username_2",
}
}
/>
<View
style={
Object {
"backgroundColor": "rgba(61,60,64,0.2)",
"height": 1,
}
}
/>
</View>
<View
style={
Object {
"height": 45,
"justifyContent": "center",
}
],
},
}
>
<ReactionRow
emojiName="smile"
navigator={
Object {
"setOnNavigatorEvent": [MockFunction] {
"calls": Array [
Array [
[Function],
],
],
"results": Array [
Object {
"isThrow": false,
"value": undefined,
},
],
},
}
}
teammateNameDisplay="username"
theme={
Object {
"awayIndicator": "#ffbc42",
"buttonBg": "#166de0",
"buttonColor": "#ffffff",
"centerChannelBg": "#ffffff",
"centerChannelColor": "#3d3c40",
"codeTheme": "github",
"dndIndicator": "#f74343",
"errorTextColor": "#fd5960",
"linkColor": "#2389d7",
"mentionBj": "#ffffff",
"mentionColor": "#145dbf",
"mentionHighlightBg": "#ffe577",
"mentionHighlightLink": "#166de0",
"newMessageSeparator": "#ff8800",
"onlineIndicator": "#06d6a0",
"sidebarBg": "#145dbf",
"sidebarHeaderBg": "#1153ab",
"sidebarHeaderTextColor": "#ffffff",
"sidebarText": "#ffffff",
"sidebarTextActiveBorder": "#579eff",
"sidebarTextActiveColor": "#ffffff",
"sidebarTextHoverBg": "#4578bf",
"sidebarUnreadText": "#ffffff",
"type": "Mattermost",
}
}
user={
Object {
"id": "user_id_1",
"username": "username_1",
}
}
/>
<View
style={
Object {
"backgroundColor": "rgba(61,60,64,0.2)",
"height": 1,
}
}
/>
</View>
</ScrollView>
</React.Fragment>
}
teammateNameDisplay="username"
theme={
Object {
"awayIndicator": "#ffbc42",
"buttonBg": "#166de0",
"buttonColor": "#ffffff",
"centerChannelBg": "#ffffff",
"centerChannelColor": "#3d3c40",
"codeTheme": "github",
"dndIndicator": "#f74343",
"errorTextColor": "#fd5960",
"linkColor": "#2389d7",
"mentionBj": "#ffffff",
"mentionColor": "#145dbf",
"mentionHighlightBg": "#ffe577",
"mentionHighlightLink": "#166de0",
"newMessageSeparator": "#ff8800",
"onlineIndicator": "#06d6a0",
"sidebarBg": "#145dbf",
"sidebarHeaderBg": "#1153ab",
"sidebarHeaderTextColor": "#ffffff",
"sidebarText": "#ffffff",
"sidebarTextActiveBorder": "#579eff",
"sidebarTextActiveColor": "#ffffff",
"sidebarTextHoverBg": "#4578bf",
"sidebarUnreadText": "#ffffff",
"type": "Mattermost",
}
}
user={
Object {
"id": "user_id_1",
"username": "username_1",
}
}
/>
<View
style={
Object {
"backgroundColor": "rgba(61,60,64,0.2)",
"height": 1,
}
}
/>
</View>
</Connect(SlideUpPanel)>
</View>
`;

View File

@@ -4,16 +4,18 @@
import React, {PureComponent} from 'react';
import PropTypes from 'prop-types';
import {
Animated,
Platform,
ScrollView,
StyleSheet,
View,
} from 'react-native';
import {NativeViewGestureHandler} from 'react-native-gesture-handler';
import ReactionHeaderItem from './reaction_header_item';
export default class ReactionHeader extends PureComponent {
static propTypes = {
forwardedRef: PropTypes.object,
selected: PropTypes.string.isRequired,
onSelectReaction: PropTypes.func.isRequired,
reactions: PropTypes.array.isRequired,
@@ -41,15 +43,19 @@ export default class ReactionHeader extends PureComponent {
render() {
return (
<View style={styles.container}>
<ScrollView
alwaysBounceHorizontal={false}
horizontal={true}
overScrollMode='never'
>
{this.renderReactionHeaderItems()}
</ScrollView>
</View>
<NativeViewGestureHandler
ref={this.props.forwardedRef}
>
<Animated.View style={styles.container}>
<ScrollView
alwaysBounceHorizontal={false}
horizontal={true}
overScrollMode='never'
>
{this.renderReactionHeaderItems()}
</ScrollView>
</Animated.View>
</NativeViewGestureHandler>
);
}
}

View File

@@ -3,7 +3,8 @@
import React, {PureComponent} from 'react';
import PropTypes from 'prop-types';
import {ScrollView, View} from 'react-native';
import {View} from 'react-native';
import {intlShape} from 'react-intl';
import SlideUpPanel from 'app/components/slide_up_panel';
@@ -41,10 +42,8 @@ export default class ReactionList extends PureComponent {
constructor(props) {
super(props);
const {reactions, userProfiles} = props;
const reactionsByName = getReactionsByName(reactions);
this.contentOffsetY = -1;
this.state = {
allUserIds: getUniqueUserIds(reactions),
reactions,
@@ -123,25 +122,9 @@ export default class ReactionList extends PureComponent {
handleOnSelectReaction = (emoji) => {
this.setState({selected: emoji});
const slide = this.slideUpPanel?.getWrappedInstance();
if (slide) {
slide.setDrag(true);
}
if (this.scrollView) {
this.scrollView.scrollTo({x: 0, y: 0, animated: false});
}
};
handleScroll = (e) => {
const pageOffsetY = e.nativeEvent.contentOffset.y;
const canDrag = pageOffsetY <= 0;
const slide = this.slideUpPanel?.getWrappedInstance();
this.contentOffsetY = pageOffsetY;
if (slide) {
slide.setDrag(canDrag);
if (this.slideUpPanel) {
this.slideUpPanel.getWrappedInstance().scrollToTop();
}
};
@@ -149,10 +132,6 @@ export default class ReactionList extends PureComponent {
this.slideUpPanel = r;
};
refScrollView = (ref) => {
this.scrollView = ref;
};
renderReactionRows = () => {
const {
navigator,
@@ -185,15 +164,23 @@ export default class ReactionList extends PureComponent {
));
};
renderHeader = (forwardedRef) => {
const {theme} = this.props;
const {selected, sortedReactionsForHeader} = this.state;
return (
<ReactionHeader
selected={selected}
onSelectReaction={this.handleOnSelectReaction}
reactions={sortedReactionsForHeader}
theme={theme}
forwardedRef={forwardedRef}
/>
);
};
render() {
const {
theme,
} = this.props;
const {
selected,
sortedReactionsForHeader,
} = this.state;
const style = getStyleSheet(theme);
const style = getStyleSheet(this.props.theme);
return (
<View style={style.flex}>
@@ -201,25 +188,10 @@ export default class ReactionList extends PureComponent {
ref={this.refSlideUpPanel}
onRequestClose={this.close}
initialPosition={0.55}
header={this.renderHeader}
headerHeight={37.5}
>
<React.Fragment>
<View style={style.headerContainer}>
<ReactionHeader
selected={selected}
onSelectReaction={this.handleOnSelectReaction}
reactions={sortedReactionsForHeader}
theme={theme}
/>
</View>
<ScrollView
ref={this.refScrollView}
bounce={false}
onScroll={this.handleScroll}
>
{this.renderReactionRows()}
</ScrollView>
</React.Fragment>
{this.renderReactionRows()}
</SlideUpPanel>
</View>
);
@@ -233,8 +205,6 @@ const getStyleSheet = makeStyleSheetFromTheme((theme) => {
},
headerContainer: {
height: 37.5,
borderColor: changeOpacity(theme.centerChannelColor, 0.2),
borderBottomWidth: 1,
},
rowContainer: {
justifyContent: 'center',

View File

@@ -31,7 +31,6 @@ function mapStateToProps(state) {
teamsRequest: state.requests.teams.getTeams,
teams: Object.values(getJoinableTeams(state)).sort(sortTeams),
currentChannelId: getCurrentChannelId(state),
joinTeamRequest: state.requests.teams.joinTeam,
};
}

View File

@@ -51,7 +51,6 @@ export default class SelectTeam extends PureComponent {
}).isRequired,
currentChannelId: PropTypes.string,
currentUrl: PropTypes.string.isRequired,
joinTeamRequest: PropTypes.object.isRequired,
navigator: PropTypes.object,
userWithoutTeams: PropTypes.bool,
teams: PropTypes.array.isRequired,
@@ -81,11 +80,6 @@ export default class SelectTeam extends PureComponent {
if (this.props.teams !== nextProps.teams) {
this.buildData(nextProps);
}
if (this.props.joinTeamRequest.status !== RequestStatus.FAILURE &&
nextProps.joinTeamRequest.status === RequestStatus.FAILURE) {
Alert.alert('', nextProps.joinTeamRequest.error.message);
}
}
getTeams = () => {
@@ -160,8 +154,9 @@ export default class SelectTeam extends PureComponent {
markChannelAsRead(currentChannelId);
}
const success = await joinTeam(team.invite_id, team.id);
if (!success) {
const {error} = await joinTeam(team.invite_id, team.id);
if (error) {
Alert.alert(error.message);
this.setState({joining: false});
return;
}
@@ -317,7 +312,7 @@ const getStyleSheet = makeStyleSheetFromTheme((theme) => {
fontSize: 18,
},
imageContainer: {
backgroundColor: theme.centerChannelBg,
backgroundColor: '#FFF',
},
noTeam: {
color: theme.centerChannelColor,

View File

@@ -36,7 +36,6 @@ describe('SelectTeam', () => {
actions,
currentChannelId: 'someId',
currentUrl: 'test',
joinTeamRequest: {},
navigator: {
setOnNavigatorEvent: jest.fn(),
},

View File

@@ -176,7 +176,7 @@ class AdvancedSettings extends PureComponent {
<View style={style.divider}/>
<SettingsItem
defaultMessage='Delete File Cache'
i18nId='mobile.advanced_settings.clear_downloads'
i18nId='mobile.advanced_settings.delete_file_cache'
iconName='md-trash'
iconType='ion'
onPress={this.clearDownloadCache}

View File

@@ -12,7 +12,7 @@ import {
import SettingsItem from 'app/screens/settings/settings_item';
import StatusBar from 'app/components/status_bar';
import {preventDoubleTap} from 'app/utils/tap';
import {changeOpacity, makeStyleSheetFromTheme} from 'app/utils/theme';
import {changeOpacity, makeStyleSheetFromTheme, setNavigatorStyles} from 'app/utils/theme';
import ClockDisplay from 'app/screens/clock_display';
@@ -32,6 +32,15 @@ export default class DisplaySettings extends PureComponent {
showClockDisplaySettings: false,
};
constructor(props) {
super(props);
props.navigator.setOnNavigatorEvent(this.onNavigatorEvent);
}
closeClockDisplaySettings = () => {
this.setState({showClockDisplaySettings: false});
};
goToClockDisplaySettings = preventDoubleTap(() => {
const {navigator, theme} = this.props;
const {intl} = this.context;
@@ -91,8 +100,10 @@ export default class DisplaySettings extends PureComponent {
});
});
closeClockDisplaySettings = () => {
this.setState({showClockDisplaySettings: false});
onNavigatorEvent = (event) => {
if (event.id === 'willAppear') {
setNavigatorStyles(this.props.navigator, this.props.theme);
}
};
render() {

View File

@@ -15,7 +15,10 @@ describe('DisplaySettings', () => {
theme: Preferences.THEMES.default,
enableTheme: false,
enableTimezone: false,
navigator: {push: () => {}}, // eslint-disable-line no-empty-function
navigator: {
push: jest.fn(),
setOnNavigatorEvent: jest.fn(),
},
};
test('should match snapshot', () => {

View File

@@ -43,12 +43,6 @@ class Settings extends PureComponent {
this.props.navigator.setOnNavigatorEvent(this.onNavigatorEvent);
}
componentWillReceiveProps(nextProps) {
if (this.props.theme !== nextProps.theme) {
setNavigatorStyles(this.props.navigator, nextProps.theme);
}
}
errorEmailBody = () => {
const {config, currentUserId, currentTeamId, errors} = this.props;
let contents = [
@@ -180,6 +174,10 @@ class Settings extends PureComponent {
});
onNavigatorEvent = (event) => {
if (event.id === 'willAppear') {
setNavigatorStyles(this.props.navigator, this.props.theme);
}
if (event.type === 'NavBarButtonPress') {
if (event.id === 'close-settings') {
this.props.navigator.dismissModal({

View File

@@ -79,6 +79,7 @@ class SSO extends PureComponent {
error: null,
renderWebView: false,
jsCode: '',
messagingEnabled: false,
};
switch (props.ssoType) {
@@ -156,16 +157,20 @@ class SSO extends PureComponent {
onNavigationStateChange = (navState) => {
const {url} = navState;
const nextState = {};
const nextState = {
messagingEnabled: false,
};
const parsed = urlParse(url);
if (parsed.host.includes('.onelogin.com')) {
nextState.jsCode = oneLoginFormScalingJS;
} else if (parsed.pathname === this.completedUrl) {
// To avoid `window.postMessage` conflicts in any of the SSO flows
// we enable the onMessage handler only When the webView navigates to the final SSO URL.
nextState.messagingEnabled = true;
}
if (Object.keys(nextState).length) {
this.setState(nextState);
}
this.setState(nextState);
};
onLoadEnd = (event) => {
@@ -210,7 +215,7 @@ class SSO extends PureComponent {
render() {
const {theme} = this.props;
const {error, renderWebView, jsCode} = this.state;
const {error, messagingEnabled, renderWebView, jsCode} = this.state;
const style = getStyleSheet(theme);
let content;
@@ -235,14 +240,14 @@ class SSO extends PureComponent {
renderLoading={this.renderLoading}
injectedJavaScript={jsCode}
onLoadEnd={this.onLoadEnd}
onMessage={this.onMessage}
onMessage={messagingEnabled && this.onMessage}
useWebKit={true}
/>
);
}
return (
<View style={{flex: 1}}>
<View style={style.container}>
<StatusBar/>
{content}
</View>
@@ -252,6 +257,9 @@ class SSO extends PureComponent {
const getStyleSheet = makeStyleSheetFromTheme((theme) => {
return {
container: {
flex: 1,
},
errorContainer: {
alignItems: 'center',
flex: 1,

View File

@@ -11,19 +11,20 @@ import Section from 'app/screens/settings/section';
import SectionItem from 'app/screens/settings/section_item';
import FormattedText from 'app/components/formatted_text';
import {changeOpacity, makeStyleSheetFromTheme} from 'app/utils/theme';
import {changeOpacity, makeStyleSheetFromTheme, setNavigatorStyles} from 'app/utils/theme';
import Preferences from 'mattermost-redux/constants/preferences';
export default class Theme extends React.PureComponent {
static propTypes = {
teamId: PropTypes.string.isRequired,
theme: PropTypes.object.isRequired,
userId: PropTypes.string.isRequired,
actions: PropTypes.shape({
savePreferences: PropTypes.func.isRequired,
}).isRequired,
allowedThemes: PropTypes.arrayOf(PropTypes.object),
customTheme: PropTypes.object,
navigator: PropTypes.object.isRequired,
teamId: PropTypes.string.isRequired,
theme: PropTypes.object.isRequired,
userId: PropTypes.string.isRequired,
};
static contextTypes = {
@@ -43,6 +44,12 @@ export default class Theme extends React.PureComponent {
return null;
}
componentDidUpdate(prevProps) {
if (prevProps.theme !== this.props.theme) {
setNavigatorStyles(this.props.navigator, this.props.theme);
}
}
setTheme = (key) => {
const {userId, teamId, actions: {savePreferences}, allowedThemes} = this.props;
const {customTheme} = this.state;

View File

@@ -14,13 +14,16 @@ jest.mock('react-intl');
describe('Theme', () => {
const baseProps = {
teamId: 'test-team',
theme: Preferences.THEMES.default,
userId: 'test-user',
actions: {
savePreferences: jest.fn(),
},
allowedThemes,
navigator: {
setOnNavigatorEvent: jest.fn(),
},
teamId: 'test-team',
theme: Preferences.THEMES.default,
userId: 'test-user',
};
test('should match snapshot', () => {
@@ -147,4 +150,4 @@ const allowedThemes = [
codeTheme: 'monokai',
},
},
];
];

View File

@@ -58,9 +58,10 @@ export function makePreparePostIdsForPostList() {
// Push on a date header if the last post was on a different day than the current one
const postDate = new Date(post.create_at);
postDate.setHours(0, 0, 0, 0);
if (!lastDate || lastDate.toDateString() !== postDate.toDateString()) {
out.push(DATE_LINE + post.create_at);
out.push(DATE_LINE + postDate.getTime());
lastDate = postDate;
}

View File

@@ -18,13 +18,16 @@ describe('Selectors.PostList', () => {
describe('makePreparePostIdsForPostList', () => {
it('filter join/leave posts', () => {
const preparePostIdsForPostList = makePreparePostIdsForPostList();
const time = Date.now();
const today = new Date();
today.setHours(0, 0, 0, 0);
let state = {
entities: {
posts: {
posts: {
1001: {id: '1001', create_at: 0, type: ''},
1002: {id: '1002', create_at: 1, type: Posts.POST_TYPES.JOIN_CHANNEL},
1001: {id: '1001', create_at: time, type: ''},
1002: {id: '1002', create_at: time + 1, type: Posts.POST_TYPES.JOIN_CHANNEL},
},
},
preferences: {
@@ -47,7 +50,7 @@ describe('Selectors.PostList', () => {
assert.deepEqual(now, [
'1002',
'1001',
'date-0',
'date-' + today.getTime(),
]);
// Show join/leave posts
@@ -73,7 +76,7 @@ describe('Selectors.PostList', () => {
assert.deepEqual(now, [
'1002',
'1001',
'date-0',
'date-' + today.getTime(),
]);
// Hide join/leave posts
@@ -98,7 +101,7 @@ describe('Selectors.PostList', () => {
now = preparePostIdsForPostList(state, {postIds, lastViewedAt, indicateNewMessages});
assert.deepEqual(now, [
'1001',
'date-0',
'date-' + today.getTime(),
]);
// always show join/leave posts for the current user
@@ -110,7 +113,7 @@ describe('Selectors.PostList', () => {
...state.entities.posts,
posts: {
...state.entities.posts.posts,
1002: {id: '1002', create_at: 1, type: Posts.POST_TYPES.JOIN_CHANNEL, props: {username: 'user'}},
1002: {id: '1002', create_at: time + 1, type: Posts.POST_TYPES.JOIN_CHANNEL, props: {username: 'user'}},
},
},
},
@@ -121,20 +124,23 @@ describe('Selectors.PostList', () => {
assert.deepEqual(now, [
'1002',
'1001',
'date-0',
'date-' + today.getTime(),
]);
});
it('new messages indicator', () => {
const preparePostIdsForPostList = makePreparePostIdsForPostList();
const time = Date.now();
const today = new Date();
today.setHours(0, 0, 0, 0);
const state = {
entities: {
posts: {
posts: {
1000: {id: '1000', create_at: 1000, type: ''},
1005: {id: '1005', create_at: 1005, type: ''},
1010: {id: '1010', create_at: 1010, type: ''},
1000: {id: '1000', create_at: time + 1000, type: ''},
1005: {id: '1005', create_at: time + 1005, type: ''},
1010: {id: '1010', create_at: time + 1010, type: ''},
},
},
preferences: {
@@ -157,7 +163,7 @@ describe('Selectors.PostList', () => {
'1010',
'1005',
'1000',
'date-1000',
'date-' + today.getTime(),
]);
now = preparePostIdsForPostList(state, {postIds, indicateNewMessages: true});
@@ -165,67 +171,72 @@ describe('Selectors.PostList', () => {
'1010',
'1005',
'1000',
'date-1000',
'date-' + today.getTime(),
]);
now = preparePostIdsForPostList(state, {postIds, lastViewedAt: 999, indicateNewMessages: false});
now = preparePostIdsForPostList(state, {postIds, lastViewedAt: time + 999, indicateNewMessages: false});
assert.deepEqual(now, [
'1010',
'1005',
'1000',
'date-1000',
'date-' + today.getTime(),
]);
// Show new messages indicator before all posts
now = preparePostIdsForPostList(state, {postIds, lastViewedAt: 999, indicateNewMessages: true});
now = preparePostIdsForPostList(state, {postIds, lastViewedAt: time + 999, indicateNewMessages: true});
assert.deepEqual(now, [
'1010',
'1005',
'1000',
START_OF_NEW_MESSAGES,
'date-1000',
'date-' + today.getTime(),
]);
// Show indicator between posts
now = preparePostIdsForPostList(state, {postIds, lastViewedAt: 1003, indicateNewMessages: true});
now = preparePostIdsForPostList(state, {postIds, lastViewedAt: time + 1003, indicateNewMessages: true});
assert.deepEqual(now, [
'1010',
'1005',
START_OF_NEW_MESSAGES,
'1000',
'date-1000',
'date-' + today.getTime(),
]);
now = preparePostIdsForPostList(state, {postIds, lastViewedAt: 1006, indicateNewMessages: true});
now = preparePostIdsForPostList(state, {postIds, lastViewedAt: time + 1006, indicateNewMessages: true});
assert.deepEqual(now, [
'1010',
START_OF_NEW_MESSAGES,
'1005',
'1000',
'date-1000',
'date-' + today.getTime(),
]);
// Don't show indicator when all posts are read
now = preparePostIdsForPostList(state, {postIds, lastViewedAt: 1020});
now = preparePostIdsForPostList(state, {postIds, lastViewedAt: time + 1020});
assert.deepEqual(now, [
'1010',
'1005',
'1000',
'date-1000',
'date-' + today.getTime(),
]);
});
it('memoization', () => {
const preparePostIdsForPostList = makePreparePostIdsForPostList();
const time = Date.now();
const today = new Date();
const tomorrow = new Date((24 * 60 * 60 * 1000) + today.getTime());
today.setHours(0, 0, 0, 0);
tomorrow.setHours(0, 0, 0, 0);
// Posts 7 hours apart so they should appear on multiple days
const initialPosts = {
1001: {id: '1001', create_at: 1 * 60 * 60 * 1000, type: ''},
1002: {id: '1002', create_at: (1 * 60 * 60 * 1000) + 5, type: ''},
1003: {id: '1003', create_at: (1 * 60 * 60 * 1000) + 10, type: ''},
1004: {id: '1004', create_at: 25 * 60 * 60 * 1000, type: ''},
1005: {id: '1005', create_at: (25 * 60 * 60 * 1000) + 5, type: ''},
1006: {id: '1006', create_at: (25 * 60 * 60 * 1000) + 10, type: Posts.POST_TYPES.JOIN_CHANNEL},
1001: {id: '1001', create_at: time, type: ''},
1002: {id: '1002', create_at: time + 5, type: ''},
1003: {id: '1003', create_at: time + 10, type: ''},
1004: {id: '1004', create_at: tomorrow, type: ''},
1005: {id: '1005', create_at: tomorrow + 5, type: ''},
1006: {id: '1006', create_at: tomorrow + 10, type: Posts.POST_TYPES.JOIN_CHANNEL},
};
let state = {
entities: {
@@ -262,11 +273,11 @@ describe('Selectors.PostList', () => {
assert.deepEqual(now, [
'1006',
'1004',
'date-90000000',
'date-' + tomorrow.getTime(),
'1003',
START_OF_NEW_MESSAGES,
'1001',
'date-3600000',
'date-' + today.getTime(),
]);
// No changes
@@ -276,11 +287,11 @@ describe('Selectors.PostList', () => {
assert.deepEqual(now, [
'1006',
'1004',
'date-90000000',
'date-' + tomorrow.getTime(),
'1003',
START_OF_NEW_MESSAGES,
'1001',
'date-3600000',
'date-' + today.getTime(),
]);
// lastViewedAt changed slightly
@@ -292,15 +303,15 @@ describe('Selectors.PostList', () => {
assert.deepEqual(now, [
'1006',
'1004',
'date-90000000',
'date-' + tomorrow.getTime(),
'1003',
START_OF_NEW_MESSAGES,
'1001',
'date-3600000',
'date-' + today.getTime(),
]);
// lastViewedAt changed a lot
lastViewedAt += initialPosts['1003'].create_at + 1;
lastViewedAt = initialPosts['1003'].create_at + 1;
prev = now;
now = preparePostIdsForPostList(state, {postIds, lastViewedAt, indicateNewMessages: true});
@@ -309,10 +320,10 @@ describe('Selectors.PostList', () => {
'1006',
'1004',
START_OF_NEW_MESSAGES,
'date-90000000',
'date-' + tomorrow.getTime(),
'1003',
'1001',
'date-3600000',
'date-' + today.getTime(),
]);
prev = now;
@@ -322,10 +333,10 @@ describe('Selectors.PostList', () => {
'1006',
'1004',
START_OF_NEW_MESSAGES,
'date-90000000',
'date-' + tomorrow.getTime(),
'1003',
'1001',
'date-3600000',
'date-' + today.getTime(),
]);
// postIds changed, but still shallowly equal
@@ -338,10 +349,10 @@ describe('Selectors.PostList', () => {
'1006',
'1004',
START_OF_NEW_MESSAGES,
'date-90000000',
'date-' + tomorrow.getTime(),
'1003',
'1001',
'date-3600000',
'date-' + today.getTime(),
]);
// Post changed, not in postIds
@@ -366,10 +377,10 @@ describe('Selectors.PostList', () => {
'1006',
'1004',
START_OF_NEW_MESSAGES,
'date-90000000',
'date-' + tomorrow.getTime(),
'1003',
'1001',
'date-3600000',
'date-' + today.getTime(),
]);
// Post changed, in postIds
@@ -394,10 +405,10 @@ describe('Selectors.PostList', () => {
'1006',
'1004',
START_OF_NEW_MESSAGES,
'date-90000000',
'date-' + tomorrow.getTime(),
'1003',
'1001',
'date-3600000',
'date-' + today.getTime(),
]);
// Filter changed
@@ -425,10 +436,10 @@ describe('Selectors.PostList', () => {
assert.deepEqual(now, [
'1004',
START_OF_NEW_MESSAGES,
'date-90000000',
'date-' + tomorrow.getTime(),
'1003',
'1001',
'date-3600000',
'date-' + today.getTime(),
]);
prev = now;
@@ -437,10 +448,10 @@ describe('Selectors.PostList', () => {
assert.deepEqual(now, [
'1004',
START_OF_NEW_MESSAGES,
'date-90000000',
'date-' + tomorrow.getTime(),
'1003',
'1001',
'date-3600000',
'date-' + today.getTime(),
]);
});
});

View File

@@ -46,7 +46,7 @@ function isEmoticon(text) {
}
export function hasEmojisOnly(message, customEmojis) {
if (!message || message.length === 0) {
if (!message || message.length === 0 || (/^\s{4}/).test(message)) {
return {isEmojiOnly: false, shouldRenderJumboEmoji: false};
}

View File

@@ -60,6 +60,10 @@ describe('hasEmojisOnly with named emojis', () => {
name: 'Mixed valid and invalid named emojis',
message: ' :smile: invalid :heart: ',
expected: {isEmojiOnly: false, shouldRenderJumboEmoji: false},
}, {
name: 'This should render a codeblock instead',
message: ' :D',
expected: {isEmojiOnly: false, shouldRenderJumboEmoji: false},
}];
const customEmojis = new Map([['valid_custom', 0]]);

View File

@@ -34,6 +34,9 @@ export const calculateDimensions = (height, width, viewPortWidth = 0, viewPortHe
) {
imageHeight = IMAGE_MIN_DIMENSION;
imageWidth = imageHeight * heightRatio;
} else if (viewPortHeight && imageHeight > viewPortHeight) {
imageHeight = viewPortHeight;
imageWidth = imageHeight * heightRatio;
}
return {

View File

@@ -62,4 +62,9 @@ describe('Images calculateDimensions', () => {
expect(height).toEqual(45);
expect(width).toEqual(310);
});
it('Set the viewPort height defined should return the image capped to the viewport', () => {
const {height} = calculateDimensions(1334, 750, PORTRAIT_VIEWPORT, 500);
expect(height).toEqual(500);
});
});

View File

@@ -17,6 +17,7 @@
"channel_header.addMembers": "Mitglieder hinzufügen",
"channel_header.directchannel.you": "{displayname} (Sie) ",
"channel_header.manageMembers": "Mitglieder verwalten",
"channel_header.pinnedPosts": "Angeheftete Nachrichten",
"channel_header.viewMembers": "Zeige Mitglieder",
"channel_info.header": "Überschrift:",
"channel_info.purpose": "Zweck:",
@@ -69,6 +70,7 @@
"edit_post.save": "Speichern",
"error.team_not_found.title": "Team nicht gefunden",
"file_attachment.download": "Download",
"file_upload.fileAbove": "Datei über {max}MB kann nicht hochgeladen werden: {filename}",
"get_post_link_modal.title": "Kopiere Permalink",
"integrations.add": "Hinzufügen",
"intro_messages.anyMember": " Jedes Mitglied kann diesem Kanal beitreten und folgen.",
@@ -97,7 +99,14 @@
"login.invalidPassword": "Ihr Passwort ist falsch.",
"login.ldapUsername": "AD/LDAP-Benutzername",
"login.ldapUsernameLower": "AD/LDAP-Benutzername",
"login.noEmail": "Bitte geben Sie Ihre E-Mail-Adresse ein",
"login.noEmailLdapUsername": "Bitte geben Sie Ihre E-Mail-Adresse oder {ldapUsername} ein",
"login.noEmailUsername": "Bitte geben Sie Ihre E-Mail-Adresse oder Benutzernamen ein",
"login.noEmailUsernameLdapUsername": "Bitte geben Sie Ihre E-Mail-Adresse, Benutzername oder {ldapUsername} ein",
"login.noLdapUsername": "Bitte geben Sie Ihren {ldapUsername} ein",
"login.noPassword": "Bitte geben Sie Ihr Passwort ein",
"login.noUsername": "Bitte geben Sie Ihren Benutzernamen ein",
"login.noUsernameLdapUsername": "Bitte geben Sie Ihren Benutzernamen oder {ldapUsername} ein",
"login.or": "oder",
"login.password": "Passwort",
"login.signIn": "Anmelden",
@@ -115,8 +124,7 @@
"mobile.account_notifications.threads_start": "Diskussionen die ich starte",
"mobile.account_notifications.threads_start_participate": "Diskussionen die ich starte oder an denen ich teilnehme",
"mobile.account.settings.save": "Speichern",
"mobile.action_menu.select": "Select an option",
"mobile.action_menu.submitted": "Submitted",
"mobile.action_menu.select": "Wählen Sie eine Option",
"mobile.advanced_settings.clockDisplay": "Uhrzeit-Format",
"mobile.advanced_settings.delete": "Löschen",
"mobile.advanced_settings.delete_file_cache": "Datei-Cache löschen",
@@ -139,6 +147,10 @@
"mobile.announcement_banner.title": "Ankündigung",
"mobile.authentication_error.message": "Mattermost hat einen Fehler festgestellt. Bitte authentifizieren Sie sich erneut, um eine neue Sitzung zu beginnen.",
"mobile.authentication_error.title": "Authentifizierungsfehler",
"mobile.calendar.dayNames": "Montag,Dienstag,Mittwoch,Donnerstag,Freitag, Samstag,Sonntag",
"mobile.calendar.dayNamesShort": "Mo,Di,Mi,Do,Fr,Sa,So",
"mobile.calendar.monthNames": "Januar,Februar,März,April,Mai,Juni,July,August,September,Oktober,November,Dezember",
"mobile.calendar.monthNamesShort": "Jan,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez",
"mobile.channel_drawer.search": "Springe zu...",
"mobile.channel_info.alertMessageDeleteChannel": "Sind Sie sicher, dass Sie den {term} {name} archivieren möchten?",
"mobile.channel_info.alertMessageLeaveChannel": "Sind Sie sicher, dass Sie den {term} {name} verlassen möchten?",
@@ -158,6 +170,7 @@
"mobile.channel_list.members": "MITGLIEDER",
"mobile.channel_list.not_member": "KEIN MITGLIED",
"mobile.channel_list.unreads": "UNGELESENE",
"mobile.channel_members.add_members_alert": "Sie müssen mindestens ein Mitglied auswählen, um es dem Kanal hinzuzufügen.",
"mobile.channel.markAsRead": "Als gelesen markieren",
"mobile.client_upgrade": "App aktualisieren",
"mobile.client_upgrade.can_upgrade_subtitle": "Es steht eine neue Version zum Herunterladen bereit.",
@@ -168,7 +181,7 @@
"mobile.client_upgrade.download_error.title": "Aktualisierung konnte nicht installiert werden",
"mobile.client_upgrade.latest_version": "Ihre Version: {version}",
"mobile.client_upgrade.listener.dismiss_button": "Verwerfen",
"mobile.client_upgrade.listener.learn_more_button": "Learn More",
"mobile.client_upgrade.listener.learn_more_button": "Mehr erfahren",
"mobile.client_upgrade.listener.message": "Es ist ein Update verfügbar!",
"mobile.client_upgrade.listener.upgrade_button": "Upgrade",
"mobile.client_upgrade.must_upgrade_subtitle": "Bitte aktualisieren Sie die App, um fortzufahren.",
@@ -188,6 +201,7 @@
"mobile.create_channel.public": "Neuer Öffentlicher Kanal",
"mobile.create_post.read_only": "Dieser Kanal ist schreibgeschützt",
"mobile.custom_list.no_results": "Keine Ergebnisse",
"mobile.display_settings.theme": "Motiv",
"mobile.document_preview.failed_description": "Es trat ein Fehler beim Öffnen des Dokuments auf. Bitte stellen Sie sicher Sie haben einen Betrachter für {fileType} installiert und versuchen es erneut.\n",
"mobile.document_preview.failed_title": "Dokument öffnen fehlgeschlagen",
"mobile.downloader.android_complete": "Herunterladen abgeschlossen",
@@ -231,7 +245,8 @@
"mobile.failed_network_action.shortDescription": "Stellen Sie sicher, dass Sie eine aktive Verbindung haben und versuchen es erneut.",
"mobile.failed_network_action.title": "Keine Internetverbindung",
"mobile.file_upload.browse": "Dateien durchsuchen",
"mobile.file_upload.camera": "Ein Foto oder ein Video aufnehmen",
"mobile.file_upload.camera_photo": "Foto aufnehmen",
"mobile.file_upload.camera_video": "Video aufnehmen",
"mobile.file_upload.library": "Foto-Bibliothek",
"mobile.file_upload.max_warning": "Uploads sind auf maximal fünf Dateien beschränkt.",
"mobile.file_upload.video": "Videobibliothek",
@@ -247,6 +262,7 @@
"mobile.join_channel.error": "Dem Kanal {displayName} konnte nicht beigetreten werden. Bitte überprüfen Sie Ihre Verbindung und versuchen es erneut.",
"mobile.loading_channels": "Lade Kanäle...",
"mobile.loading_members": "Lade Mitglieder...",
"mobile.loading_options": "Lade Optionen...",
"mobile.loading_posts": "Lade Nachrichten...",
"mobile.login_options.choose_title": "Wählen Sie Ihre Anmeldemethode",
"mobile.long_post_title": "{channelName} - Nachricht",
@@ -256,7 +272,6 @@
"mobile.managed.secured_by": "Gesichert durch {vendor}",
"mobile.markdown.code.copy_code": "Code kopieren",
"mobile.markdown.code.plusMoreLines": "+{count, number} weitere {count, plural, one {Zeile} other {Zeilen}}",
"mobile.markdown.image.error": "Bild konnte nicht geladen werden:",
"mobile.markdown.image.too_large": "Bild überschreitet die maximale Auflösung von {maxWidth} x {maxHeight}:",
"mobile.markdown.link.copy_url": "Adresse (URL) kopieren",
"mobile.mention.copy_mention": "Erwähnung kopieren",
@@ -266,7 +281,7 @@
"mobile.more_dms.cannot_add_more": "Sie können keine weiteren Benutzer hinzufügen.",
"mobile.more_dms.start": "Start",
"mobile.more_dms.title": "Neue Konversation",
"mobile.more_dms.you": "(@{username} - Sie)",
"mobile.more_dms.you": "@{username} - Sie",
"mobile.notice_mobile_link": "mobile Apps",
"mobile.notice_platform_link": "Server",
"mobile.notice_text": "Mattermost wird durch die in {platform} und {mobile} verwendete Open-Source-Software ermöglicht.",
@@ -294,7 +309,7 @@
"mobile.notification_settings.auto_responder.message_title": "EIGENE NACHRICHT",
"mobile.notification_settings.email": "E-Mail",
"mobile.notification_settings.email_title": "E-Mail-Benachrichtigungen",
"mobile.notification_settings.email.send": "SENDE BENACHRICHTIGUNGEN",
"mobile.notification_settings.email.send": "SENDE E-MAIL-BENACHRICHTIGUNGEN",
"mobile.notification_settings.mentions_replies": "Erwähnungen und Antworten",
"mobile.notification_settings.mentions.channelWide": "Kanalweite Erwähnungen",
"mobile.notification_settings.mentions.reply_title": "Sende Antwort-Benachrichtigungen für",
@@ -310,12 +325,21 @@
"mobile.notification.in": " in ",
"mobile.offlineIndicator.connected": "Verbunden",
"mobile.offlineIndicator.connecting": "Verbinde...",
"mobile.offlineIndicator.offline": "Verbindung mit Server konnte nicht aufgebaut werden",
"mobile.offlineIndicator.offline": "Keine Internetverbindung",
"mobile.open_dm.error": "Der Direktnachrichtenkanal mit {displayName} konnte nicht geöffnet werden. Bitte überprüfen Sie Ihre Verbindung und versuchen es erneut.",
"mobile.open_gm.error": "Der Gruppennachrichtenkanal mit diesen Benutzern konnte nicht geöffnet werden. Bitte überprüfen Sie Ihre Verbindung und versuchen es erneut.",
"mobile.open_unknown_channel.error": "Konnte Kanal nicht beitreten. Bitte setzen Sie den Cache zurück und versuchen es erneut.",
"mobile.pinned_posts.empty_description": "Wichtige Elemente anheften durch gedrückt halten einer Nachricht und wählen von \"An Kanal anheften\".",
"mobile.pinned_posts.empty_title": "Keine angehefteten Nachrichten",
"mobile.post_info.add_reaction": "Reaktion hinzufügen",
"mobile.post_info.copy_post": "Nachricht kopieren",
"mobile.post_info.copy_text": "Text kopieren",
"mobile.post_info.flag": "Markieren",
"mobile.post_info.pin": "An Kanal anheften",
"mobile.post_info.unflag": "Markierung entfernen",
"mobile.post_info.unpin": "Vom Kanal abheften",
"mobile.post_pre_header.flagged": "Markiert",
"mobile.post_pre_header.pinned": "Angeheftet",
"mobile.post_pre_header.pinned_flagged": "Angeheftet und markiert",
"mobile.post_textbox.empty.message": "Sie versuchen, eine leere Nachricht zu senden.\nBitte stellen Sie sicher, dass die Nachricht Text oder eine angehängte Datei enthält.",
"mobile.post_textbox.empty.ok": "OK",
"mobile.post_textbox.empty.title": "Leere Nachricht",
@@ -338,7 +362,7 @@
"mobile.rename_channel.name_maxLength": "URL muss kürzer als {maxLength, number} Zeichen sein",
"mobile.rename_channel.name_minLength": "URL muss {minLength, number} oder mehr Zeichen enthalten",
"mobile.rename_channel.name_required": "URL ist erforderlich",
"mobile.reply_post.failed": "Message failed to send.",
"mobile.reply_post.failed": "Nachricht senden fehlgeschlagen.",
"mobile.request.invalid_response": "Ungültige Antwort vom Server erhalten.",
"mobile.reset_status.alert_cancel": "Abbrechen",
"mobile.reset_status.alert_ok": "Ok",
@@ -399,9 +423,16 @@
"mobile.share_extension.send": "Senden",
"mobile.share_extension.team": "Team",
"mobile.suggestion.members": "Mitglieder",
"mobile.terms_of_service.alert_cancel": "Abbrechen",
"mobile.terms_of_service.alert_ok": "OK",
"mobile.terms_of_service.alert_retry": "Erneut versuchen",
"mobile.terms_of_service.get_terms_error_description": "Stellen Sie sicher, dass Sie über eine Internetverbindung verfügen und probieren Sie es erneut. Falls das Problem weiterhin besteht, kontaktieren Sie ihren Systemadministrator.",
"mobile.terms_of_service.get_terms_error_title": "Konnte Nutzungsbedingungen nicht laden.",
"mobile.terms_of_service.terms_rejected": "Sie müssen die Nutzungsbedingungen akzeptieren, bevor Sie {siteName} verwenden können. Bitte kontaktieren Sie Ihren Systemadministrator für mehr Details.",
"mobile.timezone_settings.automatically": "Automatisch einstellen",
"mobile.timezone_settings.manual": "Zeitzone ändern",
"mobile.timezone_settings.select": "Zeitzone auswählen",
"mobile.user_list.deactivated": "Deaktiviert",
"mobile.user.settings.notifications.email.fifteenMinutes": "Alle 15 Minuten",
"mobile.video_playback.failed_description": "Beim Abspielen des Videos ist ein Fehler aufgetreten.\n",
"mobile.video_playback.failed_title": "Videowiedergabe fehlgeschlagen",
@@ -414,8 +445,8 @@
"modal.manual_status.auto_responder.message_dnd": "Möchten Sie ihren Status auf \"Nicht stören\" umschalten und automatische Antworten deaktivieren?",
"modal.manual_status.auto_responder.message_offline": "Möchten Sie ihren Status auf \"Offline\" umschalten und automatische Antworten deaktivieren?",
"modal.manual_status.auto_responder.message_online": "Möchten Sie ihren Status auf \"Online\" umschalten und automatische Antworten deaktivieren?",
"more_channels.noMore": "Keine weiteren Kanäle zum Betreten",
"more_channels.title": "Weitere Kanäle",
"more_direct_channels.directchannel.deactivated": "{displayname} - Deaktiviert",
"msg_typing.areTyping": "{users} und {last} tippen gerade...",
"msg_typing.isTyping": "{user} tippt...",
"navbar_dropdown.logout": "Abmelden",
@@ -433,7 +464,7 @@
"post_body.check_for_out_of_channel_mentions.message_last": "? Sie werden Zugriff auf den Nachrichtenverlauf haben.",
"post_body.check_for_out_of_channel_mentions.message.multiple": "wurden erwähnt, befinden sich aber nicht im Kanal. Möchten Sie ",
"post_body.check_for_out_of_channel_mentions.message.one": "wurde erwähnt, befinden sich aber nicht im Kanal. Möchten Sie ",
"post_body.commentedOn": "Kommentierte {name}{apostrophe} Nachricht: ",
"post_body.commentedOn": "Kommentierte auf die Nachricht von {name}: ",
"post_body.deleted": "(Nachricht gelöscht)",
"post_info.auto_responder": "AUTOMATISCHE ANTWORT",
"post_info.bot": "BOT",
@@ -441,8 +472,6 @@
"post_info.edit": "Bearbeiten",
"post_info.message.show_less": "Weniger anzeigen",
"post_info.message.show_more": "Mehr anzeigen",
"post_info.mobile.flag": "Markieren",
"post_info.mobile.unflag": "Markierung entfernen",
"post_info.system": "System",
"post_message_view.edited": "(bearbeitet)",
"posts_view.newMsg": "Neue Nachrichten",
@@ -457,10 +486,7 @@
"search_item.channelArchived": "Archiviert",
"sidebar_right_menu.logout": "Abmelden",
"sidebar_right_menu.report": "Fehler melden",
"sidebar.channels": "ÖFFENTLICHE KANÄLE",
"sidebar.direct": "DIREKTNACHRICHTEN",
"sidebar.favorite": "KANALFAVORITEN",
"sidebar.pg": "PRIVATE KANÄLE",
"sidebar.unreads": "Weitere Ungelesene",
"signup.email": "E-Mail-Adresse und Passwort",
"status_dropdown.set_away": "Abwesend",
@@ -476,8 +502,11 @@
"suggestion.mention.morechannels": "Andere Kanäle",
"suggestion.mention.nonmembers": "Nicht im Kanal",
"suggestion.mention.special": "Spezielle Erwähnungen",
"suggestion.search.direct": "Direktnachrichten",
"suggestion.search.private": "Private Kanäle",
"suggestion.search.public": "Öffentliche Kanäle",
"terms_of_service.agreeButton": "Ich stimme zu",
"terms_of_service.api_error": "Konnte die Anfrage nicht abschließen. Falls der Fehler weiterhin besteht, fragen Sie den Systemadministrator.",
"user.settings.display.clockDisplay": "Uhrzeit-Format",
"user.settings.display.militaryClock": "24-Stunden-Format (z.B.: 16:00)",
"user.settings.display.normalClock": "12-Stunden-Format (z.B.: 4:00 PM)",

View File

@@ -17,6 +17,7 @@
"channel_header.addMembers": "Agregar Miembros",
"channel_header.directchannel.you": "{displayname} (tu) ",
"channel_header.manageMembers": "Administrar Miembros",
"channel_header.pinnedPosts": "Mensajes Anclados",
"channel_header.viewMembers": "Ver Miembros",
"channel_info.header": "Encabezado:",
"channel_info.purpose": "Propósito:",
@@ -69,6 +70,7 @@
"edit_post.save": "Guardar",
"error.team_not_found.title": "Equipo no encontrado",
"file_attachment.download": "Descargar",
"file_upload.fileAbove": "No se puede cargar un archivo de más de {max}MB: {filename}",
"get_post_link_modal.title": "Copiar enlace Permanente",
"integrations.add": "Agregar",
"intro_messages.anyMember": " Cualquier miembro se puede unir y leer este canal.",
@@ -97,7 +99,14 @@
"login.invalidPassword": "La Contraseña es incorrecta.",
"login.ldapUsername": "Usuario AD/LDAP",
"login.ldapUsernameLower": "Nombre de Usuario AD/LDAP",
"login.noEmail": "Por favor, introduzca su correo electrónico",
"login.noEmailLdapUsername": "Por favor, introduzca su correo electrónico o {ldapUsername}",
"login.noEmailUsername": "Por favor, introduzca su correo electrónico o nombre de usuario",
"login.noEmailUsernameLdapUsername": "Por favor, introduzca su correo electrónico, nombre de usuario o {ldapUsername}",
"login.noLdapUsername": "Por favor, introduzca su {ldapUsername}",
"login.noPassword": "Por favor ingresa tu contraseña.",
"login.noUsername": "Por favor, introduzca su nombre de usuario",
"login.noUsernameLdapUsername": "Por favor, introduzca su nombre de usuario o {ldapUsername}",
"login.or": "o",
"login.password": "Contraseña",
"login.signIn": "Entrar",
@@ -116,7 +125,6 @@
"mobile.account_notifications.threads_start_participate": "Hilos que yo comience o participe",
"mobile.account.settings.save": "Guardar",
"mobile.action_menu.select": "Selecciona una opción",
"mobile.action_menu.submitted": "Enviado",
"mobile.advanced_settings.clockDisplay": "Visualización de la hora",
"mobile.advanced_settings.delete": "Eliminar",
"mobile.advanced_settings.delete_file_cache": "Eliminar archivos en el cache",
@@ -139,6 +147,10 @@
"mobile.announcement_banner.title": "Anuncio",
"mobile.authentication_error.message": "Mattermost a encontrado un error. Por favor vuelve a autenticar tu usuario para iniciar una nueva sesión.",
"mobile.authentication_error.title": "Error de Autenticación",
"mobile.calendar.dayNames": "Domingo,Lunes,Martes,Miércoles,Jueves,Viernes,Sábado",
"mobile.calendar.dayNamesShort": "Dom,Lun,Mar,Mié,Jue,Vie,Sab",
"mobile.calendar.monthNames": "Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre",
"mobile.calendar.monthNamesShort": "Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic",
"mobile.channel_drawer.search": "Saltar a...",
"mobile.channel_info.alertMessageDeleteChannel": "¿Seguro quieres archivar el {term} {name}?",
"mobile.channel_info.alertMessageLeaveChannel": "¿Seguro quieres abandonar el {term} {name}?",
@@ -158,6 +170,7 @@
"mobile.channel_list.members": "MIEMBROS",
"mobile.channel_list.not_member": "NO MIEMBRO DE",
"mobile.channel_list.unreads": "SIN LEER",
"mobile.channel_members.add_members_alert": "Debes seleccionar al menos un miembro a agregar al canal.",
"mobile.channel.markAsRead": "Marcar como leído",
"mobile.client_upgrade": "Actualizar App",
"mobile.client_upgrade.can_upgrade_subtitle": "Una nueva versión está disponible para su descarga.",
@@ -188,6 +201,7 @@
"mobile.create_channel.public": "Nuevo Canal Público",
"mobile.create_post.read_only": "Este canal es de sólo lectura",
"mobile.custom_list.no_results": "Sin resultados",
"mobile.display_settings.theme": "Tema",
"mobile.document_preview.failed_description": "Ocurrió un error al abrir el documento. Por favor verifica que tienes instalado un visor para archivos {fileType} e intenta de nuevo.\n",
"mobile.document_preview.failed_title": "Error Abriendo Documento",
"mobile.downloader.android_complete": "Descarga completa",
@@ -231,7 +245,8 @@
"mobile.failed_network_action.shortDescription": "Asegura de tener una conexión activa e intenta de nuevo.",
"mobile.failed_network_action.title": "Sin conexión a Internet",
"mobile.file_upload.browse": "Explorar Archivos",
"mobile.file_upload.camera": "Sacar Foto o Vídeo",
"mobile.file_upload.camera_photo": "Capturar Foto",
"mobile.file_upload.camera_video": "Capturar Vídeo",
"mobile.file_upload.library": "Librería de Fotos",
"mobile.file_upload.max_warning": "Se pueden subir un máximo de 5 archivos.",
"mobile.file_upload.video": "Librería de Videos",
@@ -247,6 +262,7 @@
"mobile.join_channel.error": "No pudimos unirnos al canal {displayName}. Por favor revisa tu conexión e intenta de nuevo.",
"mobile.loading_channels": "Cargando Canales...",
"mobile.loading_members": "Cargando Miembros...",
"mobile.loading_options": "Cargando Opciones...",
"mobile.loading_posts": "Cargando Mensajes...",
"mobile.login_options.choose_title": "Selecciona un método para iniciar sesión",
"mobile.long_post_title": "{channelName} - Mensaje",
@@ -256,7 +272,6 @@
"mobile.managed.secured_by": "Asegurado por {vendor}",
"mobile.markdown.code.copy_code": "Copiar código",
"mobile.markdown.code.plusMoreLines": "+{count, number} más {count, plural, one {línea} other {líneas}}",
"mobile.markdown.image.error": "No se pudo cargar la imagen:",
"mobile.markdown.image.too_large": "La imagen excede la dimensión máxima de {maxWidth} x {maxHeight}:",
"mobile.markdown.link.copy_url": "Copiar URL",
"mobile.mention.copy_mention": "Copiar Mención",
@@ -266,7 +281,7 @@
"mobile.more_dms.cannot_add_more": "No puedes agregar más usuarios.",
"mobile.more_dms.start": "Comenzar",
"mobile.more_dms.title": "Nueva Conversación",
"mobile.more_dms.you": "(@{username} - tú)",
"mobile.more_dms.you": "@{username} - tú",
"mobile.notice_mobile_link": "aplicaciones móviles",
"mobile.notice_platform_link": "servidor",
"mobile.notice_text": "Mattermost es hecho posible con software de código abierto utilizado en nuestra {platform} y {mobile}.",
@@ -310,16 +325,25 @@
"mobile.notification.in": " en ",
"mobile.offlineIndicator.connected": "Conectado",
"mobile.offlineIndicator.connecting": "Conectando...",
"mobile.offlineIndicator.offline": "No se puede conectar con el servidor",
"mobile.offlineIndicator.offline": "Sin conexión a Internet",
"mobile.open_dm.error": "No pudimos abrir el canal de mensajes directos con {displayName}. Por favor revisa tu conexión e intenta de nuevo.",
"mobile.open_gm.error": "No pudimos abrir el canal del grupo con esos usuarios. Por favor revisa tu conexión e intenta de nuevo.",
"mobile.open_unknown_channel.error": "No se pudo unir al canal. Por favor elimina el cache e intenta de nuevo.",
"mobile.pinned_posts.empty_description": "Ancla elementos importantes manteniendo pulsado cualquier mensaje y selecciona la opción \"Anclar al Canal\".",
"mobile.pinned_posts.empty_title": "No hay Mensajes Anclados",
"mobile.post_info.add_reaction": "Reaccionar",
"mobile.post_info.copy_post": "Copiar Mensaje",
"mobile.post_info.copy_text": "Copiar Texto",
"mobile.post_info.flag": "Marcar",
"mobile.post_info.pin": "Anclar al Canal",
"mobile.post_info.unflag": "Desmarcar",
"mobile.post_info.unpin": "Desprender del Canal",
"mobile.post_pre_header.flagged": "Marcado",
"mobile.post_pre_header.pinned": "Anclado",
"mobile.post_pre_header.pinned_flagged": "Anclado y Marcado",
"mobile.post_textbox.empty.message": "Estas intentando enviar un mensaje vacío.\nPor favor asegurate de estar enviando un mensaje con texto o con al menos un archivo adjunto.",
"mobile.post_textbox.empty.ok": "Aceptar",
"mobile.post_textbox.empty.title": "Mensaje vacío",
"mobile.post_textbox.uploadFailedDesc": "Algunos archivos adjuntos no se han subido al servidor, ¿Quieres publicar el mensaje?",
"mobile.post_textbox.uploadFailedDesc": "Algunos archivos adjuntos no se han subido al servidor. ¿Quieres publicar el mensaje?",
"mobile.post_textbox.uploadFailedTitle": "Error Adjuntando",
"mobile.post.cancel": "Cancelar",
"mobile.post.delete_question": "¿Estás seguro(a) de querer borrar este mensaje?",
@@ -399,9 +423,16 @@
"mobile.share_extension.send": "Enviar",
"mobile.share_extension.team": "Equipo",
"mobile.suggestion.members": "Miembros",
"mobile.terms_of_service.alert_cancel": "Cancelar",
"mobile.terms_of_service.alert_ok": "Aceptar",
"mobile.terms_of_service.alert_retry": "Intentar de nuevo",
"mobile.terms_of_service.get_terms_error_description": "Asegúrate de tener una conexión activa a internet e inténtalo de nuevo. Si este problema persiste, ponte en contacto con tu Administrador del Sistema.",
"mobile.terms_of_service.get_terms_error_title": "No se pueden cargar los términos de servicio.",
"mobile.terms_of_service.terms_rejected": "Debes aceptar los términos de servicio antes de acceder a {siteName}. Por favor, ponte en contacto con el Administrador del Sistema para obtener más detalles.",
"mobile.timezone_settings.automatically": "Asignar automáticamente",
"mobile.timezone_settings.manual": "Cambiar zona horaria",
"mobile.timezone_settings.select": "Seleccione la zona horaria",
"mobile.user_list.deactivated": "Desactivado",
"mobile.user.settings.notifications.email.fifteenMinutes": "Cada 15 minutos",
"mobile.video_playback.failed_description": "Ocurrió un error al reproducir el vídeo.\n",
"mobile.video_playback.failed_title": "Error de Reproducción",
@@ -414,8 +445,8 @@
"modal.manual_status.auto_responder.message_dnd": "¿Quieres cambiar to estado a \"No Molestar\" e inhabilitar las respuestas automáticas?",
"modal.manual_status.auto_responder.message_offline": "¿Quieres cambiar to estado a \"Desconectado\" e inhabilitar las respuestas automáticas?",
"modal.manual_status.auto_responder.message_online": "¿Quieres cambiar to estado a \"En línea\" e inhabilitar las respuestas automáticas?",
"more_channels.noMore": "No hay más canales para unirse",
"more_channels.title": "Más Canales",
"more_direct_channels.directchannel.deactivated": "{displayname} - Desactivado",
"msg_typing.areTyping": "{users} y {last} están escribiendo...",
"msg_typing.isTyping": "{user} está escribiendo...",
"navbar_dropdown.logout": "Cerrar sesión",
@@ -433,7 +464,7 @@
"post_body.check_for_out_of_channel_mentions.message_last": "? Tendrán acceso al historial de mensajes.",
"post_body.check_for_out_of_channel_mentions.message.multiple": "fueron mencionados pero no son parte de este canal. Quieres ",
"post_body.check_for_out_of_channel_mentions.message.one": "fue mencionado pero no es parte de este canal. Quieres ",
"post_body.commentedOn": "Comentó el mensaje de {name}{apostrophe}: ",
"post_body.commentedOn": "Comento en el mensaje de {name}: ",
"post_body.deleted": "(mensaje eliminado)",
"post_info.auto_responder": "RESPUESTA AUTOMÁTICA",
"post_info.bot": "BOT",
@@ -441,8 +472,6 @@
"post_info.edit": "Editar",
"post_info.message.show_less": "Ver Menos",
"post_info.message.show_more": "Ver Más",
"post_info.mobile.flag": "Marcar",
"post_info.mobile.unflag": "Desmarcar",
"post_info.system": "Sistema",
"post_message_view.edited": "(editado)",
"posts_view.newMsg": "Nuevos Mensajes",
@@ -457,10 +486,7 @@
"search_item.channelArchived": "Archivado",
"sidebar_right_menu.logout": "Cerrar sesión",
"sidebar_right_menu.report": "Reporta un Problema",
"sidebar.channels": "CANALES PÚBLICOS",
"sidebar.direct": "MENSAJES DIRECTOS",
"sidebar.favorite": "FAVORITOS",
"sidebar.pg": "CANALES PRIVADOS",
"sidebar.unreads": "Más sin leer",
"signup.email": "Correo electrónico y Contraseña",
"status_dropdown.set_away": "Ausente",
@@ -476,8 +502,11 @@
"suggestion.mention.morechannels": "Otros Canales",
"suggestion.mention.nonmembers": "No en el Canal",
"suggestion.mention.special": "Menciones especiales",
"suggestion.search.direct": "Mensajes Directos",
"suggestion.search.private": "Canales Privados",
"suggestion.search.public": "Canales Públicos",
"terms_of_service.agreeButton": "Acepto",
"terms_of_service.api_error": "No se puede completar la solicitud. Si el problema persiste, contacta a tu Administrador de Sistema.",
"user.settings.display.clockDisplay": "Visualización del Reloj",
"user.settings.display.militaryClock": "Reloj de 24 horas (ejemplo: 16:00)",
"user.settings.display.normalClock": "Reloj de 12 horas (ejemplo: 4:00 pm)",

View File

@@ -17,6 +17,7 @@
"channel_header.addMembers": "Ajouter des membres",
"channel_header.directchannel.you": "{displayname} (vous) ",
"channel_header.manageMembers": "Gérer les membres",
"channel_header.pinnedPosts": "Messages épinglés",
"channel_header.viewMembers": "Voir les membres",
"channel_info.header": "Entête :",
"channel_info.purpose": "Description :",
@@ -69,6 +70,7 @@
"edit_post.save": "Enregistrer",
"error.team_not_found.title": "Équipe introuvable",
"file_attachment.download": "Télécharger",
"file_upload.fileAbove": "Le fichier plus grand que {max}Mo ne peut pas être téléchargé : {filename}",
"get_post_link_modal.title": "Copier le lien permanent",
"integrations.add": "Ajouter",
"intro_messages.anyMember": " Tout membre peut rejoindre et lire ce canal.",
@@ -97,7 +99,14 @@
"login.invalidPassword": "Votre mot de passe est incorrect.",
"login.ldapUsername": "Nom dutilisateur AD/LDAP",
"login.ldapUsernameLower": "Nom dutilisateur AD/LDAP",
"login.noEmail": "Veuillez spécifier votre adresse e-mail.",
"login.noEmailLdapUsername": "Veuillez spécifier votre adresse e-mail ou {ldapUsername}",
"login.noEmailUsername": "Veuillez spécifier votre adresse e-mail ou votre nom d'utilisateur",
"login.noEmailUsernameLdapUsername": "Veuillez spécifier votre adresse e-mail, votre nom d'utilisateur ou {ldapUsername}",
"login.noLdapUsername": "Veuillez spécifier votre {ldapUsername}",
"login.noPassword": "Veuillez spécifier votre mot de passe",
"login.noUsername": "Veuillez spécifier votre nom d'utilisateur",
"login.noUsernameLdapUsername": "Veuillez spécifier votre nom d'utilisateur ou {ldapUsername}",
"login.or": "ou",
"login.password": "Mot de passe",
"login.signIn": "Connexion",
@@ -115,8 +124,7 @@
"mobile.account_notifications.threads_start": "Fils de discussion que je démarre",
"mobile.account_notifications.threads_start_participate": "Fils de discussion que je démarre ou auxquels je participe",
"mobile.account.settings.save": "Enregistrer",
"mobile.action_menu.select": "Select an option",
"mobile.action_menu.submitted": "Submitted",
"mobile.action_menu.select": "Sélectionnez une option",
"mobile.advanced_settings.clockDisplay": "Affichage de l'horloge",
"mobile.advanced_settings.delete": "Supprimer",
"mobile.advanced_settings.delete_file_cache": "Supprimer le cache de fichiers",
@@ -139,6 +147,10 @@
"mobile.announcement_banner.title": "Annonce",
"mobile.authentication_error.message": "Mattermost a rencontré un problème. Veuillez vous authentifier à nouveau pour démarrer une nouvelle session.",
"mobile.authentication_error.title": "Erreur d'authentification",
"mobile.calendar.dayNames": "Dimanche,Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi",
"mobile.calendar.dayNamesShort": "Dim,Lun,Mar,Mer,Jeu,Ven,Sam",
"mobile.calendar.monthNames": "Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Août,Septembre,Octobre,Novembre,Décembre",
"mobile.calendar.monthNamesShort": "Jan,Fév,Mar,Avr,Mai,Juin,Juil,Aou,Sep,Oct,Nov,Déc",
"mobile.channel_drawer.search": "Aller à...",
"mobile.channel_info.alertMessageDeleteChannel": "Voulez-vous vraiment archiver le {term} {name} ?",
"mobile.channel_info.alertMessageLeaveChannel": "Voulez-vous vraiment quitter le {term} {name} ?",
@@ -158,6 +170,7 @@
"mobile.channel_list.members": "MEMBRES",
"mobile.channel_list.not_member": "PAS UN MEMBRE",
"mobile.channel_list.unreads": "NON LUS",
"mobile.channel_members.add_members_alert": "Vous devez sélectionner au moins un membre à ajouter à ce canal.",
"mobile.channel.markAsRead": "Marquer comme lu",
"mobile.client_upgrade": "Mettre à jour l'application",
"mobile.client_upgrade.can_upgrade_subtitle": "Une nouvelle version est disponible au téléchargement.",
@@ -168,9 +181,9 @@
"mobile.client_upgrade.download_error.title": "Impossible d'installer la mise à jour",
"mobile.client_upgrade.latest_version": "Votre version : {version}",
"mobile.client_upgrade.listener.dismiss_button": "Rejeter",
"mobile.client_upgrade.listener.learn_more_button": "Learn More",
"mobile.client_upgrade.listener.learn_more_button": "En savoir plus",
"mobile.client_upgrade.listener.message": "Une mise jour du client est disponible !",
"mobile.client_upgrade.listener.upgrade_button": "Upgrade",
"mobile.client_upgrade.listener.upgrade_button": "Mettre à jour",
"mobile.client_upgrade.must_upgrade_subtitle": "Veuillez mettre à jour l'application pour continuer.",
"mobile.client_upgrade.must_upgrade_title": "Mise à jour requise",
"mobile.client_upgrade.no_upgrade_subtitle": "Vous avez déjà la dernière version.",
@@ -188,6 +201,7 @@
"mobile.create_channel.public": "Nouveau canal public",
"mobile.create_post.read_only": "Ce canal est en lecture seule",
"mobile.custom_list.no_results": "Aucun résultat",
"mobile.display_settings.theme": "Thème",
"mobile.document_preview.failed_description": "Une erreur s'est produite lors de l'ouverture du document. Veuillez vous assurer que vous ayez un lecteur de {fileType} installé et réessayez.\n",
"mobile.document_preview.failed_title": "L'ouverture du document a échoué",
"mobile.downloader.android_complete": "Téléchargement terminé",
@@ -228,10 +242,11 @@
"mobile.extension.title": "Partager dans Mattermost",
"mobile.failed_network_action.description": "Il semble y avoir un problème avec votre connexion Internet. Veuillez vous assurer d'avoir une connexion active et réessayez.",
"mobile.failed_network_action.retry": "Réessayer",
"mobile.failed_network_action.shortDescription": "Make sure you have an active connection and try again.",
"mobile.failed_network_action.shortDescription": "Assurez-vous d'avoir une connexion active et réessayez.",
"mobile.failed_network_action.title": "Aucune connexion Internet",
"mobile.file_upload.browse": "Parcourir les fichiers",
"mobile.file_upload.camera": "Prendre une photo ou une vidéo",
"mobile.file_upload.camera_photo": "Prendre une photo",
"mobile.file_upload.camera_video": "Enregistrer une vidéo",
"mobile.file_upload.library": "Bibliothèque de photos",
"mobile.file_upload.max_warning": "Envois limités à maximum 5 fichiers.",
"mobile.file_upload.video": "Bibliothèque vidéo",
@@ -247,6 +262,7 @@
"mobile.join_channel.error": "Impossible de joindre le canal {displayName}. Veuillez vérifier votre connexion et essayer à nouveau.",
"mobile.loading_channels": "Chargement des canaux...",
"mobile.loading_members": "Chargement des membres...",
"mobile.loading_options": "Chargement des paramètres...",
"mobile.loading_posts": "Chargement des messages...",
"mobile.login_options.choose_title": "Spécifiez votre méthode de connexion",
"mobile.long_post_title": "{channelName} - Publication",
@@ -256,7 +272,6 @@
"mobile.managed.secured_by": "Sécurisé par {vendor}",
"mobile.markdown.code.copy_code": "Copier le code",
"mobile.markdown.code.plusMoreLines": "+{count, number} other {count, plural, one {ligne} other {lignes}}",
"mobile.markdown.image.error": "Échec du chargement de l'image :",
"mobile.markdown.image.too_large": "L'image dépasse les dimensions maximales de {maxWidth} par {maxHeight} :",
"mobile.markdown.link.copy_url": "Copier l'URL",
"mobile.mention.copy_mention": "Copier la mention",
@@ -266,7 +281,7 @@
"mobile.more_dms.cannot_add_more": "Vous ne pouvez plus ajouter d'utilisateurs",
"mobile.more_dms.start": "Démarrer",
"mobile.more_dms.title": "Nouvelle conversation",
"mobile.more_dms.you": "(@{username} - vous)",
"mobile.more_dms.you": "@{username} - vous",
"mobile.notice_mobile_link": "applications mobiles",
"mobile.notice_platform_link": "serveur",
"mobile.notice_text": "Mattermost est rendu possible grâce aux logiciels open source utilisés dans notre {platform} et {mobile}.",
@@ -294,7 +309,7 @@
"mobile.notification_settings.auto_responder.message_title": "MESSAGE PERSONNALISÉ ",
"mobile.notification_settings.email": "Adresse e-mail",
"mobile.notification_settings.email_title": "Notifications par e-mail",
"mobile.notification_settings.email.send": "ENVOYER DES NOTIFICATIONS",
"mobile.notification_settings.email.send": "ENVOYER DES NOTIFICATIONS PAR E-MAIL",
"mobile.notification_settings.mentions_replies": "Mentions et réponses",
"mobile.notification_settings.mentions.channelWide": "Mentions à tout le canal",
"mobile.notification_settings.mentions.reply_title": "Envoyer des notifications de réponse pour",
@@ -310,16 +325,25 @@
"mobile.notification.in": " dans ",
"mobile.offlineIndicator.connected": "Connecté",
"mobile.offlineIndicator.connecting": "Connexion en cours...",
"mobile.offlineIndicator.offline": "Impossible de se connecter au serveur",
"mobile.offlineIndicator.offline": "Aucune connexion Internet",
"mobile.open_dm.error": "Impossible d'ouvrir un message personnel avec {displayName}. Veuillez vérifier votre connexion et essayer à nouveau.",
"mobile.open_gm.error": "Impossible d'ouvrir un message de groupe avec ces utilisateurs. Veuillez vérifier votre connexion et essayer à nouveau.",
"mobile.open_unknown_channel.error": "Impossible de rejoindre le canal. Veuillez réinitialiser le cache et réessayer.",
"mobile.pinned_posts.empty_description": "Épingle des éléments importants en maintenant appuyé sur un message, puis en sélectionnant « Épingler au canal ».",
"mobile.pinned_posts.empty_title": "Aucun message épinglé",
"mobile.post_info.add_reaction": "Ajouter une réaction",
"mobile.post_info.copy_post": "Copier le message",
"mobile.post_info.copy_text": "Copier le texte",
"mobile.post_info.flag": "Marquer avec un indicateur",
"mobile.post_info.pin": "Épingler au canal",
"mobile.post_info.unflag": "Supprimer l'indicateur",
"mobile.post_info.unpin": "Désépingler du canal",
"mobile.post_pre_header.flagged": "Marqué d'un indicateur",
"mobile.post_pre_header.pinned": "Épinglé",
"mobile.post_pre_header.pinned_flagged": "Épinglé et marqué d'un indicateur",
"mobile.post_textbox.empty.message": "Vous êtes en train d'envoyer un message vide.\nVeuillez-vous assurer d'avoir spécifié un message ou d'avoir joint au moins un fichier.",
"mobile.post_textbox.empty.ok": "OK",
"mobile.post_textbox.empty.title": "Message vide",
"mobile.post_textbox.uploadFailedDesc": "Certaines pièces jointes n'ont pas pu être envoyées sur le serveur, voulez-vous vraiment envoyer votre message ?",
"mobile.post_textbox.uploadFailedDesc": "Certains fichiers joints n'ont pas pu être envoyés au serveur. Voulez-vous vraiment envoyer votre message ?",
"mobile.post_textbox.uploadFailedTitle": "Erreur de pièces jointes",
"mobile.post.cancel": "Annuler",
"mobile.post.delete_question": "Voulez-vous vraiment supprimer ce message ?",
@@ -338,7 +362,7 @@
"mobile.rename_channel.name_maxLength": "L'URL doit être inférieure à {maxLength, number} caractères",
"mobile.rename_channel.name_minLength": "L'URL doit être composées d'au moins {minLength, number} caractères.",
"mobile.rename_channel.name_required": "URL requise",
"mobile.reply_post.failed": "Message failed to send.",
"mobile.reply_post.failed": "Le message n'a pas pu être envoyé.",
"mobile.request.invalid_response": "Réponse invalide reçue du serveur.",
"mobile.reset_status.alert_cancel": "Annuler",
"mobile.reset_status.alert_ok": "Ok",
@@ -399,9 +423,16 @@
"mobile.share_extension.send": "Envoyer",
"mobile.share_extension.team": "Équipe",
"mobile.suggestion.members": "Membres",
"mobile.terms_of_service.alert_cancel": "Annuler",
"mobile.terms_of_service.alert_ok": "OK",
"mobile.terms_of_service.alert_retry": "Réessayer",
"mobile.terms_of_service.get_terms_error_description": "Assurez-vous d'avoir une connexion internet active et réessayez. Si ce problème persiste, contactez votre administrateur système.",
"mobile.terms_of_service.get_terms_error_title": "Impossible de charger les conditions d'utilisation.",
"mobile.terms_of_service.terms_rejected": "Vous devez accepter les conditions d'utilisation avant de pouvoir accéder à {siteName}. Veuillez contacter votre administrateur système pour plus d'informations.",
"mobile.timezone_settings.automatically": "Définir automatiquement",
"mobile.timezone_settings.manual": "Changer le fuseau horaire",
"mobile.timezone_settings.select": "Sélectionner un fuseau horaire",
"mobile.user_list.deactivated": "Désactivé",
"mobile.user.settings.notifications.email.fifteenMinutes": "Toutes les 15 minutes",
"mobile.video_playback.failed_description": "Une erreur s'est produite lors de la tentative de lecture de la vidéo.\n",
"mobile.video_playback.failed_title": "La lecture de la vidéo a échoué",
@@ -414,8 +445,8 @@
"modal.manual_status.auto_responder.message_dnd": "Voulez-vous changer votre statut sur « Ne pas déranger » et désactiver les Réponses Automatiques ?",
"modal.manual_status.auto_responder.message_offline": "Voulez-vous changer votre statut sur « Hors ligne » et désactiver les Réponses Automatiques ?",
"modal.manual_status.auto_responder.message_online": "Voulez-vous changer votre statut sur « En ligne » et désactiver les Réponses Automatiques ?",
"more_channels.noMore": "Il n'y a plus d'autre canal que vous pouvez rejoindre",
"more_channels.title": "Plus de canaux",
"more_direct_channels.directchannel.deactivated": "{displayname} - Désactivé",
"msg_typing.areTyping": "{users} et {last} sont en train d'écrire...",
"msg_typing.isTyping": "{user} est en train d'écrire...",
"navbar_dropdown.logout": "Se déconnecter",
@@ -433,7 +464,7 @@
"post_body.check_for_out_of_channel_mentions.message_last": "? Ils auront alors accès à tout l'historique de messages pour ce canal.",
"post_body.check_for_out_of_channel_mentions.message.multiple": "ont été mentionnés, mais ne sont pas dans le canal. Voulez-vous ",
"post_body.check_for_out_of_channel_mentions.message.one": "a été mentionné, mais n'est pas dans le canal. Voulez-vous ",
"post_body.commentedOn": "A commenté le message de {name} : ",
"post_body.commentedOn": "a commenté le message de {name} : ",
"post_body.deleted": "(message supprimé)",
"post_info.auto_responder": "RÉPONSE AUTOMATIQUE",
"post_info.bot": "BOT",
@@ -441,8 +472,6 @@
"post_info.edit": "Éditer",
"post_info.message.show_less": "Afficher moins",
"post_info.message.show_more": "Afficher plus",
"post_info.mobile.flag": "Marquer avec un indicateur",
"post_info.mobile.unflag": "Supprimer l'indicateur",
"post_info.system": "Système",
"post_message_view.edited": "(édité)",
"posts_view.newMsg": "Nouveaux messages",
@@ -457,10 +486,7 @@
"search_item.channelArchived": "Archivé",
"sidebar_right_menu.logout": "Se déconnecter",
"sidebar_right_menu.report": "Signaler un problème",
"sidebar.channels": "CANAUX PUBLICS",
"sidebar.direct": "MESSAGES PERSONNELS",
"sidebar.favorite": "CANAUX FAVORIS",
"sidebar.pg": "CANAUX PRIVÉS",
"sidebar.unreads": "Plus de messages non lus",
"signup.email": "Adresse e-mail et mot de passe",
"status_dropdown.set_away": "Absent",
@@ -476,8 +502,11 @@
"suggestion.mention.morechannels": "Autres canaux",
"suggestion.mention.nonmembers": "Pas dans le canal",
"suggestion.mention.special": "Mentions spéciales",
"suggestion.search.direct": "Messages personnels",
"suggestion.search.private": "Canaux privés",
"suggestion.search.public": "Canaux publics",
"terms_of_service.agreeButton": "Je suis d'accord",
"terms_of_service.api_error": "Impossible de terminer la requête. Si ce problème persiste, contactez votre administrateur système.",
"user.settings.display.clockDisplay": "Affichage de l'horloge",
"user.settings.display.militaryClock": "Horloge 24 heures (ex. : 16:00)",
"user.settings.display.normalClock": "Horloge 12 heures (ex. : 4:00 PM)",

View File

@@ -17,6 +17,7 @@
"channel_header.addMembers": "Aggiungi Membri",
"channel_header.directchannel.you": "{displayname} (tu) ",
"channel_header.manageMembers": "Gestione Membri",
"channel_header.pinnedPosts": "Pubblicazioni bloccate",
"channel_header.viewMembers": "Mostra membri",
"channel_info.header": "Titolo:",
"channel_info.purpose": "Scopo:",
@@ -69,6 +70,7 @@
"edit_post.save": "Salva",
"error.team_not_found.title": "Gruppo Non Trovato",
"file_attachment.download": "Scarica",
"file_upload.fileAbove": "File sopra i {max}MB non possono essere caricati: {filename}",
"get_post_link_modal.title": "Copia permalink",
"integrations.add": "Aggiungi",
"intro_messages.anyMember": " Tutti i membri possono entrare e leggere questo canale.",
@@ -97,7 +99,14 @@
"login.invalidPassword": "La password è errata.",
"login.ldapUsername": "Nome dell'utente AD/LDAP",
"login.ldapUsernameLower": "Nome utente AD/LDAP",
"login.noEmail": "Inserisci la tua email",
"login.noEmailLdapUsername": "Inserisci la tua email o {ldapUsername}",
"login.noEmailUsername": "Inserisci la tua email o il tuo nome utente",
"login.noEmailUsernameLdapUsername": "Inserisci la tua email, nome utente o {ldapUsername}",
"login.noLdapUsername": "Inserisci il tuo {ldapUsername}",
"login.noPassword": "Inserisci la tua password",
"login.noUsername": "Inserisci il tuo nome utente",
"login.noUsernameLdapUsername": "Inserisci il tuo nome utente o {ldapUsername}",
"login.or": "oppure",
"login.password": "Password",
"login.signIn": "Accedi",
@@ -116,14 +125,13 @@
"mobile.account_notifications.threads_start_participate": "Discussioni alle quali ho partecipato",
"mobile.account.settings.save": "Salva",
"mobile.action_menu.select": "Seleziona un'opzione",
"mobile.action_menu.submitted": "Inviato",
"mobile.advanced_settings.clockDisplay": "Visualizza orologio",
"mobile.advanced_settings.delete": "Cancella",
"mobile.advanced_settings.delete_file_cache": "Cancella Cache File",
"mobile.advanced_settings.delete_file_cache_message": "\nQuesta operazione cancellerà tutti i file memorizzati in cache. Sicuro di volerli cancellare?\n",
"mobile.advanced_settings.reset_button": "Azzera",
"mobile.advanced_settings.reset_button": "Reset",
"mobile.advanced_settings.reset_message": "\nQuesta operazione cancella tutti i dati salvati in locale e riavvia l'app. L'accesso verrà eseguito automaticamente al termine del riavvio.\n",
"mobile.advanced_settings.reset_title": "Azzera Cache",
"mobile.advanced_settings.reset_title": "Reset Cache",
"mobile.advanced_settings.timezone": "Fuso orario",
"mobile.advanced_settings.title": "Impostazioni Avanzate",
"mobile.android.camera_permission_denied_description": "Per scattare foto e girare video con la videocamera, modificare i permessi nelle impostazioni.",
@@ -139,6 +147,10 @@
"mobile.announcement_banner.title": "Annuncio",
"mobile.authentication_error.message": "Mattermost ha incontrato un errore. Autenticarsi nuovamente per avviare una nuova sessione.",
"mobile.authentication_error.title": "Errore di autenticazione",
"mobile.calendar.dayNames": "Domenica,Lunedì,Martedì,Mercoledì,Giovedì,Venerdì,Sabato",
"mobile.calendar.dayNamesShort": "Dom,Lun,Mar,Mer,Gio,Ven,Sab",
"mobile.calendar.monthNames": "Gennaio,Febbraio,Marzo,Aprile,Maggio,Giugno,Luglio,Agosto,Settembre,Ottobre,Novembre,Dicembre",
"mobile.calendar.monthNamesShort": "Gen,Feb,Mar,Apr,Mag,Giu,Lug,Ago,Set,Ott,Nov,Dic",
"mobile.channel_drawer.search": "Vai a...",
"mobile.channel_info.alertMessageDeleteChannel": "Sei sicuro di voler archiviare {term} {name}?",
"mobile.channel_info.alertMessageLeaveChannel": "Sei sicuro di voler tralasciare questo {term} {name}?",
@@ -158,6 +170,7 @@
"mobile.channel_list.members": "MEMBRI",
"mobile.channel_list.not_member": "NON UN MEMBRO",
"mobile.channel_list.unreads": "NON LETTI",
"mobile.channel_members.add_members_alert": "Devi selezionare almeno un membro da aggiungere al canale.",
"mobile.channel.markAsRead": "Segna Come Letto",
"mobile.client_upgrade": "Aggiorna app",
"mobile.client_upgrade.can_upgrade_subtitle": "Una nuova versione è disponibile per il download.",
@@ -188,6 +201,7 @@
"mobile.create_channel.public": "Nuovo Canale Pubblico",
"mobile.create_post.read_only": "Questo canale è in sola lettura",
"mobile.custom_list.no_results": "Nessun risultato",
"mobile.display_settings.theme": "Tema",
"mobile.document_preview.failed_description": "Errore durante l'apertura del documento. Assicurarsi di avere installato il visualizzatore per i file di tipo {fileType} e riprovare.\n",
"mobile.document_preview.failed_title": "Apertura Documento fallita",
"mobile.downloader.android_complete": "Download completato",
@@ -231,7 +245,8 @@
"mobile.failed_network_action.shortDescription": "Controlla che ci sia una connessione attiva e riprovare.",
"mobile.failed_network_action.title": "Nessuna connessione internet",
"mobile.file_upload.browse": "Sfoglia File",
"mobile.file_upload.camera": "Scatta una Foto o registra un Video",
"mobile.file_upload.camera_photo": "Scatta foto",
"mobile.file_upload.camera_video": "Gira video",
"mobile.file_upload.library": "Galleria Fotografica",
"mobile.file_upload.max_warning": "Numero massimo di file caricabili limitato a 5.",
"mobile.file_upload.video": "Libreria video",
@@ -247,6 +262,7 @@
"mobile.join_channel.error": "Impossibile aggiungere il canale {displayName}. Controlla la connessione e riprova.",
"mobile.loading_channels": "Caricamento Canali...",
"mobile.loading_members": "Caricamento Membri...",
"mobile.loading_options": "Carimento Opzioni...",
"mobile.loading_posts": "Caricamento messaggi...",
"mobile.login_options.choose_title": "Seleziona il tuo metodo di login",
"mobile.long_post_title": "{channelName} - Pubblicazione",
@@ -256,7 +272,6 @@
"mobile.managed.secured_by": "Verificato da {vendor}",
"mobile.markdown.code.copy_code": "Copia codice",
"mobile.markdown.code.plusMoreLines": "+{count, number} oltre {count, plural, one {line} other {lines}}",
"mobile.markdown.image.error": "Caricamento immagine fallito:",
"mobile.markdown.image.too_large": "L'immagine supera la dimensione massima consentita di {maxWidth}x{maxHeight}:",
"mobile.markdown.link.copy_url": "Copia URL",
"mobile.mention.copy_mention": "Copia citazione",
@@ -266,7 +281,7 @@
"mobile.more_dms.cannot_add_more": "Non puoi aggiungere altri utenti",
"mobile.more_dms.start": "Inizio",
"mobile.more_dms.title": "Nuova Conversazione",
"mobile.more_dms.you": "(@{username} - tu)",
"mobile.more_dms.you": "@{username} - tu",
"mobile.notice_mobile_link": "apps per smartphone",
"mobile.notice_platform_link": "server",
"mobile.notice_text": "Mattermost è stato realizzato con il software open source usato sulla nostra {platform} e {mobile}.",
@@ -310,12 +325,21 @@
"mobile.notification.in": " in ",
"mobile.offlineIndicator.connected": "Connesso",
"mobile.offlineIndicator.connecting": "Connessione...",
"mobile.offlineIndicator.offline": "Impossibile connettersi al server",
"mobile.offlineIndicator.offline": "Nessuna connessione internet",
"mobile.open_dm.error": "Impossibile aprire un messaggio diretto con {displayName}. Controlla la connessione e riprova.",
"mobile.open_gm.error": "Impossibile aprire un messaggio di gruppo con questi utenti. Controlla la tua connessione e riprova.",
"mobile.open_unknown_channel.error": "Impossibile entrare nel canale. Resettare la cache e riprovare.",
"mobile.pinned_posts.empty_description": "Blocca gli oggetti importanti tenendo cliccato su un messaggio qualsiasi e selezionando \"Blocca al canale\".",
"mobile.pinned_posts.empty_title": "Nessuna pubblicazione bloccata",
"mobile.post_info.add_reaction": "Aggiungi reazione",
"mobile.post_info.copy_post": "Copia pubblicazione",
"mobile.post_info.copy_text": "Copia Testo",
"mobile.post_info.flag": "Contrassegna",
"mobile.post_info.pin": "Blocca al canale",
"mobile.post_info.unflag": "Togli contrassegno",
"mobile.post_info.unpin": "Sblocca dal canale",
"mobile.post_pre_header.flagged": "Contrassegnato",
"mobile.post_pre_header.pinned": "Bloccato",
"mobile.post_pre_header.pinned_flagged": "Bloccato e Contrassegnato",
"mobile.post_textbox.empty.message": "Stai cercando di inviare un messaggio vuoto.\nAssicurati di aver scritto del testo o di aver allegato almeno un file.",
"mobile.post_textbox.empty.ok": "OK",
"mobile.post_textbox.empty.title": "Messaggio Vuoto",
@@ -399,9 +423,16 @@
"mobile.share_extension.send": "Invia",
"mobile.share_extension.team": "Gruppo",
"mobile.suggestion.members": "Membri",
"mobile.terms_of_service.alert_cancel": "Annulla",
"mobile.terms_of_service.alert_ok": "OK",
"mobile.terms_of_service.alert_retry": "Riprova",
"mobile.terms_of_service.get_terms_error_description": "Assicurarsi di avere una connessione a internet attiva e riprovare. Se il problema persiste, contattare l'Amministratore di Sistema.",
"mobile.terms_of_service.get_terms_error_title": "Impossibile caricare i termini di servizio.",
"mobile.terms_of_service.terms_rejected": "Devi accettare i Termini di Servizio prima di poter accedere a {siteName}. Contattare l'Amministratore di Sistema per maggiori dettagli.",
"mobile.timezone_settings.automatically": "Imposta automaticamente",
"mobile.timezone_settings.manual": "Cambia fuso orario",
"mobile.timezone_settings.select": "Seleziona fuso orario",
"mobile.user_list.deactivated": "Disattivato",
"mobile.user.settings.notifications.email.fifteenMinutes": "Ogni 15 minuti",
"mobile.video_playback.failed_description": "Si è verificato un errore durante la riproduzione del video.\n",
"mobile.video_playback.failed_title": "Riproduzione video fallita",
@@ -414,8 +445,8 @@
"modal.manual_status.auto_responder.message_dnd": "Vuoi modificare il tuo stato a \"Non disturbare\" e disattivare le risposte automatiche?",
"modal.manual_status.auto_responder.message_offline": "Vuoi modificare il tuo stato a \"Non in linea\" e disattivare le risposte automatiche?",
"modal.manual_status.auto_responder.message_online": "Vuoi modificare il tuo stato a \"In linea\" e disattivare le risposte automatiche?",
"more_channels.noMore": "Nessun altro canale in cui entrare",
"more_channels.title": "Più Canali",
"more_direct_channels.directchannel.deactivated": "{displayname} - Disattivato",
"msg_typing.areTyping": "{users} e {last} stanno scrivendo...",
"msg_typing.isTyping": "{user} sta scrivendo...",
"navbar_dropdown.logout": "Esci",
@@ -433,7 +464,7 @@
"post_body.check_for_out_of_channel_mentions.message_last": "? Avranno accesso a tutta la cronologia dei messaggi.",
"post_body.check_for_out_of_channel_mentions.message.multiple": "sono stati citati ma non sono nel canale. Vuoi ",
"post_body.check_for_out_of_channel_mentions.message.one": "è stato citato ma non è nel canale. Vuoi ",
"post_body.commentedOn": "Commento di {name} al messaggio: ",
"post_body.commentedOn": "Ha commentato il messaggio di {name}: ",
"post_body.deleted": "(messaggio cancellato)",
"post_info.auto_responder": "RISPOSTE AUTOMATICHE",
"post_info.bot": "BOT",
@@ -441,8 +472,6 @@
"post_info.edit": "Modifica",
"post_info.message.show_less": "Mostra di meno",
"post_info.message.show_more": "Mostra di più",
"post_info.mobile.flag": "Contrassegna",
"post_info.mobile.unflag": "Togli contrassegno",
"post_info.system": "Sistema",
"post_message_view.edited": "(modificato)",
"posts_view.newMsg": "Nuovo Messaggio",
@@ -457,10 +486,7 @@
"search_item.channelArchived": "Archiviato",
"sidebar_right_menu.logout": "Esci",
"sidebar_right_menu.report": "Segnala un problema",
"sidebar.channels": "CANALI PUBBLICI",
"sidebar.direct": "MESSAGGI DIRETTI",
"sidebar.favorite": "CANALI PREFERITI",
"sidebar.pg": "CANALI PRIVATI",
"sidebar.unreads": "Più non letti",
"signup.email": "Email e Password",
"status_dropdown.set_away": "Assente",
@@ -476,8 +502,11 @@
"suggestion.mention.morechannels": "Altri canali",
"suggestion.mention.nonmembers": "Non nel canale",
"suggestion.mention.special": "Citazioni speciali",
"suggestion.search.direct": "Messaggio Privato",
"suggestion.search.private": "Canali privati",
"suggestion.search.public": "Canali Pubblici",
"terms_of_service.agreeButton": "Accetto",
"terms_of_service.api_error": "Impossibile completare la richiesta. Se il problema persiste contattare l'Amministrazione di Sistema.",
"user.settings.display.clockDisplay": "Visualizza orologio",
"user.settings.display.militaryClock": "Orologio 24 ore (esempio: 16:00)",
"user.settings.display.normalClock": "Orologio 12 ore (esempio 4:00 PM)",

View File

@@ -17,6 +17,7 @@
"channel_header.addMembers": "メンバーを追加する",
"channel_header.directchannel.you": "{displayname} (あなた) ",
"channel_header.manageMembers": "メンバーを管理する",
"channel_header.pinnedPosts": "ピン留めされた投稿",
"channel_header.viewMembers": "メンバーを見る",
"channel_info.header": "ヘッダー:",
"channel_info.purpose": "目的",
@@ -69,6 +70,7 @@
"edit_post.save": "保存する",
"error.team_not_found.title": "チームが見つかりません",
"file_attachment.download": "ダウンロードする",
"file_upload.fileAbove": "{max}MBを越えるファイルはアップロードできません: {filename}",
"get_post_link_modal.title": "パーマリンクをコピーする",
"integrations.add": "追加する",
"intro_messages.anyMember": " このチャンネルには誰でも参加して投稿を閲覧することができます。",
@@ -97,7 +99,14 @@
"login.invalidPassword": "パスワードが正しくありません。",
"login.ldapUsername": "AD/LDAPユーザー名",
"login.ldapUsernameLower": "AD/LDAPユーザー名",
"login.noEmail": "電子メールアドレスを入力してください",
"login.noEmailLdapUsername": "電子メールアドレスまたは{ldapUsername}を入力してください",
"login.noEmailUsername": "電子メールアドレスまたはユーザー名を入力してください",
"login.noEmailUsernameLdapUsername": "電子メールアドレスまたはユーザー名、{ldapUsername}を入力してください",
"login.noLdapUsername": "{ldapUsername}を入力してください",
"login.noPassword": "パスワードを入力してください",
"login.noUsername": "ユーザー名を入力してください",
"login.noUsernameLdapUsername": "ユーザー名または{ldapUsername}を入力してください",
"login.or": "または",
"login.password": "パスワード",
"login.signIn": "サインイン",
@@ -116,7 +125,6 @@
"mobile.account_notifications.threads_start_participate": "開始もしくは参加したスレッド",
"mobile.account.settings.save": "保存する",
"mobile.action_menu.select": "オプションを選択してください",
"mobile.action_menu.submitted": "選択済み",
"mobile.advanced_settings.clockDisplay": "時刻表示",
"mobile.advanced_settings.delete": "削除",
"mobile.advanced_settings.delete_file_cache": "ファイルキャッシュを削除する",
@@ -139,6 +147,10 @@
"mobile.announcement_banner.title": "アナウンス",
"mobile.authentication_error.message": "Mattermostでエラーが発生しました。新しいセッションを開始するため再度認証してください。",
"mobile.authentication_error.title": "認証エラー",
"mobile.calendar.dayNames": "日曜日、月曜日、火曜日、水曜日、木曜日、金曜日、土曜日",
"mobile.calendar.dayNamesShort": "日、月、火、水、木、金、土",
"mobile.calendar.monthNames": "1月、2月、3月、4月、5月、6月、7月、8月、9月、10月、11月、12月",
"mobile.calendar.monthNamesShort": "1月、2月、3月、4月、5月、6月、7月、8月、9月、10月、11月、12月",
"mobile.channel_drawer.search": "移動する...",
"mobile.channel_info.alertMessageDeleteChannel": "{term} {name} を本当にアーカイブしますか?",
"mobile.channel_info.alertMessageLeaveChannel": "{term} {name} から本当に脱退しますか?",
@@ -158,6 +170,7 @@
"mobile.channel_list.members": "メンバー",
"mobile.channel_list.not_member": "非メンバー",
"mobile.channel_list.unreads": "未読",
"mobile.channel_members.add_members_alert": "チャンネルに追加するメンバーを少なくとも一人選択してください。",
"mobile.channel.markAsRead": "既読にする",
"mobile.client_upgrade": "アプリを更新する",
"mobile.client_upgrade.can_upgrade_subtitle": "新しいバージョンが利用できます",
@@ -188,6 +201,7 @@
"mobile.create_channel.public": "新しい公開チャンネル",
"mobile.create_post.read_only": "このチャンネルは読み取り専用です",
"mobile.custom_list.no_results": "該当するものはありません",
"mobile.display_settings.theme": "テーマ",
"mobile.document_preview.failed_description": "文書を開く際にエラーが発生しました。{fileType}ビューワーがインストールされていることを確認し、再度実行してください。\n",
"mobile.document_preview.failed_title": "文書を開けませんでした",
"mobile.downloader.android_complete": "ダウンロードが完了しました",
@@ -231,7 +245,8 @@
"mobile.failed_network_action.shortDescription": "接続が有効であることを確認し、再度実行してください。",
"mobile.failed_network_action.title": "インターネット未接続",
"mobile.file_upload.browse": "参照",
"mobile.file_upload.camera": "写真もしくはビデオを撮る",
"mobile.file_upload.camera_photo": "写真を撮る",
"mobile.file_upload.camera_video": "動画を撮る",
"mobile.file_upload.library": "フォトライブラリー",
"mobile.file_upload.max_warning": "最大5ファイルまでアップロードできます。",
"mobile.file_upload.video": "ビデオライブラリー",
@@ -247,6 +262,7 @@
"mobile.join_channel.error": "チャンネル {displayName} に参加できませんでした。接続を確認し、もう一度試してみてください。",
"mobile.loading_channels": "チャンネルをロード中...",
"mobile.loading_members": "メンバーをロード中...",
"mobile.loading_options": "オプション読み込み中...",
"mobile.loading_posts": "メッセージをロード中...",
"mobile.login_options.choose_title": "ログイン方法を選択してください",
"mobile.long_post_title": "{channelName} - 投稿",
@@ -256,7 +272,6 @@
"mobile.managed.secured_by": "{vendor}により保護されました",
"mobile.markdown.code.copy_code": "コードのコピー",
"mobile.markdown.code.plusMoreLines": "あと {count, number} {count, plural, one {line} other {lines}} あります",
"mobile.markdown.image.error": "読み込みに失敗した画像:",
"mobile.markdown.image.too_large": "画像が {maxWidth} x {maxHeight} の上限を超えています:",
"mobile.markdown.link.copy_url": "URL のコピー",
"mobile.mention.copy_mention": "あなたについての投稿のコピー",
@@ -266,7 +281,7 @@
"mobile.more_dms.cannot_add_more": "これ以上ユーザーを追加できません",
"mobile.more_dms.start": "先頭",
"mobile.more_dms.title": "新しい会話",
"mobile.more_dms.you": "(@{username} - あなた)",
"mobile.more_dms.you": "@{username} - あなた",
"mobile.notice_mobile_link": "モバイルアプリ",
"mobile.notice_platform_link": "サーバー",
"mobile.notice_text": "Mattermostはオープンソースとして {platform} と {mobile} で開発されています。",
@@ -310,16 +325,25 @@
"mobile.notification.in": " in ",
"mobile.offlineIndicator.connected": "接続しました",
"mobile.offlineIndicator.connecting": "接続中",
"mobile.offlineIndicator.offline": "サーバーに接続できません",
"mobile.offlineIndicator.offline": "インターネット未接続",
"mobile.open_dm.error": "{displayName} とのダイレクトメッセージを開くことができませんでした。接続を確認し、もう一度試してみてください。",
"mobile.open_gm.error": "そのユーザーとのダイレクトメッセージを開くことができませんでした。接続を確認し、もう一度試してみてください。",
"mobile.open_unknown_channel.error": "チャンネルに参加できませんでした。キャッシュをリセットし、再度実行してください。",
"mobile.pinned_posts.empty_description": "メッセージを押し続けると出現するメニューで \"チャンネルにピン留め\" するを選択することで重要な項目をピン留めできます。",
"mobile.pinned_posts.empty_title": "ピン留めされた投稿がありません",
"mobile.post_info.add_reaction": "リアクションを追加する",
"mobile.post_info.copy_post": "投稿のコピー",
"mobile.post_info.copy_text": "テキストをコピーする",
"mobile.post_info.flag": "フラグ",
"mobile.post_info.pin": "チャンネルにピン留めする",
"mobile.post_info.unflag": "フラグを消す",
"mobile.post_info.unpin": "チャンネルへのピン留めをやめる",
"mobile.post_pre_header.flagged": "フラグ済み",
"mobile.post_pre_header.pinned": "ピン留め済み",
"mobile.post_pre_header.pinned_flagged": "ピン留めとフラグ済み",
"mobile.post_textbox.empty.message": "空のメッセージを送信しようとしています。\n何かメッセージか少なくとも一つの添付ファイルがあることを確認してください。",
"mobile.post_textbox.empty.ok": "OK",
"mobile.post_textbox.empty.title": "空のメッセージ",
"mobile.post_textbox.uploadFailedDesc": "サーバーへの添付ファイルのアップロードが失敗しました。メッセージを投稿したいかを確認してください。",
"mobile.post_textbox.uploadFailedDesc": "サーバーへの添付ファイルのアップロードが失敗しました。メッセージを投稿しますか?",
"mobile.post_textbox.uploadFailedTitle": "添付エラー",
"mobile.post.cancel": "キャンセル",
"mobile.post.delete_question": "この投稿を本当に削除しますか?",
@@ -399,9 +423,16 @@
"mobile.share_extension.send": "送信する",
"mobile.share_extension.team": "チーム",
"mobile.suggestion.members": "メンバー",
"mobile.terms_of_service.alert_cancel": "キャンセル",
"mobile.terms_of_service.alert_ok": "OK",
"mobile.terms_of_service.alert_retry": "再実行",
"mobile.terms_of_service.get_terms_error_description": "有効なインターネット接続があるか確認し、再度実行してください。この問題が続くようならば、システム管理者に連絡してください。",
"mobile.terms_of_service.get_terms_error_title": "利用規約を読み込めませんでした。",
"mobile.terms_of_service.terms_rejected": "{siteName} にアクセスする前に利用規約に同意する必要があります。詳しくはシステム管理者に問い合わせてください。",
"mobile.timezone_settings.automatically": "自動検出",
"mobile.timezone_settings.manual": "タイムゾーンを変更",
"mobile.timezone_settings.select": "タイムゾーンを選択",
"mobile.user_list.deactivated": "無効にする",
"mobile.user.settings.notifications.email.fifteenMinutes": "15 分毎",
"mobile.video_playback.failed_description": "動画を再生する際にエラーが発生しました。\n",
"mobile.video_playback.failed_title": "動画の再生に失敗しました",
@@ -414,8 +445,8 @@
"modal.manual_status.auto_responder.message_dnd": "あなたのステータスを \"取り込み中\" に変更し、自動返信を無効化してもよろしいですか?",
"modal.manual_status.auto_responder.message_offline": "あなたのステータスを \"オフライン\" に変更し、自動返信を無効化してもよろしいですか?",
"modal.manual_status.auto_responder.message_online": "あなたのステータスを \"オンライン\" に変更し、自動返信を無効化してもよろしいですか?",
"more_channels.noMore": "参加できるチャンネルがありません",
"more_channels.title": "他のチャンネル",
"more_direct_channels.directchannel.deactivated": "{displayname} - 無効",
"msg_typing.areTyping": "{users}と{last}が入力しています…",
"msg_typing.isTyping": "{user}が入力しています…",
"navbar_dropdown.logout": "ログアウト",
@@ -433,7 +464,7 @@
"post_body.check_for_out_of_channel_mentions.message_last": "? 彼らは全ての会話履歴にアクセスできます。",
"post_body.check_for_out_of_channel_mentions.message.multiple": "についての投稿が行われましたが、彼らはチャンネルにいません。 ",
"post_body.check_for_out_of_channel_mentions.message.one": "についての投稿が行われましたが、彼はチャンネルにいません。 ",
"post_body.commentedOn": "{name}{apostrophe}のメッセージコメントしました: ",
"post_body.commentedOn": "{name}のメッセージへのコメント: ",
"post_body.deleted": "(メッセージは削除されています)",
"post_info.auto_responder": "自動返信",
"post_info.bot": "BOT",
@@ -441,8 +472,6 @@
"post_info.edit": "編集する",
"post_info.message.show_less": "表示を少なくする",
"post_info.message.show_more": "さらに表示",
"post_info.mobile.flag": "フラグ",
"post_info.mobile.unflag": "フラグを消す",
"post_info.system": "システム",
"post_message_view.edited": "(編集済)",
"posts_view.newMsg": "新しいメッセージ",
@@ -457,10 +486,7 @@
"search_item.channelArchived": "アーカイブ",
"sidebar_right_menu.logout": "ログアウト",
"sidebar_right_menu.report": "問題を報告する",
"sidebar.channels": "公開チャンネル",
"sidebar.direct": "ダイレクトメッセージ",
"sidebar.favorite": "お気に入りチャンネル",
"sidebar.pg": "非公開チャンネル",
"sidebar.unreads": "未読",
"signup.email": "電子メールアドレスとパスワード",
"status_dropdown.set_away": "離席中",
@@ -476,8 +502,11 @@
"suggestion.mention.morechannels": "他のチャンネル",
"suggestion.mention.nonmembers": "チャンネルにいません",
"suggestion.mention.special": "特殊な誰かについての投稿",
"suggestion.search.direct": "ダイレクトメッセージ",
"suggestion.search.private": "非公開チャンネル",
"suggestion.search.public": "公開チャンネル",
"terms_of_service.agreeButton": "同意する",
"terms_of_service.api_error": "リクエストを完了できませんでした。問題が続くようならば、システム管理者に連絡してください。",
"user.settings.display.clockDisplay": "時計表示",
"user.settings.display.militaryClock": "時計の24時間表示(例: 16:00)",
"user.settings.display.normalClock": "時計の12時間表示(例: 4:00 PM)",

View File

@@ -2,21 +2,22 @@
"about.date": "빌드 일자:",
"about.enterpriseEditione1": "엔터프라이즈 에디션",
"about.enterpriseEditionLearn": "엔터프라이즈 에디션에 대한 자세한 정보 ",
"about.enterpriseEditionSt": "방화벽 안에 구축 가능한 현대적인 커뮤니케이션 플랫폼",
"about.enterpriseEditionSt": "보안 네트워크에 구축하는 현대적인 커뮤니케이션 플랫폼",
"about.hash": "빌드 해쉬:",
"about.hashee": "EE 빌드 해쉬:",
"about.teamEditionLearn": "Mattermost 커뮤니티에 참여 ",
"about.teamEditionSt": "모든 팀 커뮤니케이션 활동을 한 곳에 모아 빠르게 찾고 공유할 수 있습니다.",
"about.teamEditionSt": "모든 팀 커뮤니케이션을 한 곳에 모아 빠르게 찾고, 공유하세요.",
"about.teamEditiont0": "팀 에디션",
"about.teamEditiont1": "엔터프라이즈 에디션",
"about.title": "Mattermost에 대하여",
"announcment_banner.dont_show_again": "Don't show again",
"api.channel.add_member.added": "{username}님이 {addedUsername}님을 채널에 초대했습니다.",
"archivedChannelMessage": "You are viewing an **archived channel**. New messages cannot be posted.",
"center_panel.archived.closeChannel": "Close Channel",
"archivedChannelMessage": "**보존 처리 된 채널**을 보고계십니다. 새 메시지를 게시 할 수 없습니다.",
"center_panel.archived.closeChannel": "채널 닫기",
"channel_header.addMembers": "멤버 추가",
"channel_header.directchannel.you": "{displayname} (you) ",
"channel_header.manageMembers": "회원 관리",
"channel_header.pinnedPosts": "포스트 고정",
"channel_header.viewMembers": "회원 보기",
"channel_info.header": "헤더:",
"channel_info.purpose": "설명:",
@@ -33,35 +34,35 @@
"channel_modal.purpose": "설명",
"channel_modal.purposeEx": "예시: \"버그 수정과 품질 개선을 위한 채널입니다.\"",
"channel_notifications.muteChannel.settings": "채널 알림 끄기",
"combined_system_message.added_to_channel.many_expanded": "{users} and {lastUser} were **added to the channel** by {actor}.",
"combined_system_message.added_to_channel.one": "{firstUser} **added to the channel** by {actor}.",
"combined_system_message.added_to_channel.one_you": "You were **added to the channel** by {actor}.",
"combined_system_message.added_to_channel.two": "{firstUser} and {secondUser} **added to the channel** by {actor}.",
"combined_system_message.added_to_team.many_expanded": "{users} and {lastUser} were **added to the team** by {actor}.",
"combined_system_message.added_to_team.one": "{firstUser} **added to the team** by {actor}.",
"combined_system_message.added_to_team.one_you": "You were **added to the team** by {actor}.",
"combined_system_message.added_to_team.two": "{firstUser} and {secondUser} **added to the team** by {actor}.",
"combined_system_message.joined_channel.many_expanded": "{users} and {lastUser} **joined the channel**.",
"combined_system_message.joined_channel.one": "{firstUser} **joined the channel**.",
"combined_system_message.joined_channel.two": "{firstUser} and {secondUser} **joined the channel**.",
"combined_system_message.joined_team.many_expanded": "{users} and {lastUser} **joined the team**.",
"combined_system_message.joined_team.one": "{firstUser} **joined the team**.",
"combined_system_message.joined_team.two": "{firstUser} and {secondUser} **joined the team**.",
"combined_system_message.left_channel.many_expanded": "{users} and {lastUser} **left the channel**.",
"combined_system_message.left_channel.one": "{firstUser} **left the channel**.",
"combined_system_message.left_channel.two": "{firstUser} and {secondUser} **left the channel**.",
"combined_system_message.left_team.many_expanded": "{users} and {lastUser} **left the team**.",
"combined_system_message.left_team.one": "{firstUser} **left the team**.",
"combined_system_message.left_team.two": "{firstUser} and {secondUser} **left the team**.",
"combined_system_message.removed_from_channel.many_expanded": "{users} and {lastUser} were **removed from the channel**.",
"combined_system_message.removed_from_channel.one": "{firstUser} was **removed from the channel**.",
"combined_system_message.removed_from_channel.one_you": "You were **removed from the channel**.",
"combined_system_message.removed_from_channel.two": "{firstUser} and {secondUser} were **removed from the channel**.",
"combined_system_message.removed_from_team.many_expanded": "{users} and {lastUser} were **removed from the team**.",
"combined_system_message.removed_from_team.one": "{firstUser} was **removed from the team**.",
"combined_system_message.removed_from_team.one_you": "You were **removed from the team**.",
"combined_system_message.removed_from_team.two": "{firstUser} and {secondUser} were **removed from the team**.",
"combined_system_message.you": "You",
"combined_system_message.added_to_channel.many_expanded": "{users}님과 {lastUser}님이 {actor}님에 의해 **채널에 추가되었습니다**.",
"combined_system_message.added_to_channel.one": "{firstUser}님이 {actor}님에 의해 **채널에 추가되었습니다**.",
"combined_system_message.added_to_channel.one_you": "{actor}님에 의해 당신은 **채널에 추가되었습니다**.",
"combined_system_message.added_to_channel.two": "{firstUser}님과 {secondUser}님이 {actor}님에 의해 **채널에 추가되었습니다**.",
"combined_system_message.added_to_team.many_expanded": "{users}님과 {lastUser}님이 {actor}님에 의해 **팀에 추가되었습니다**.",
"combined_system_message.added_to_team.one": "{firstUser}님이 {actor}님에 의해 **팀에 추가되었습니다**.",
"combined_system_message.added_to_team.one_you": "{actor}님에 의해 당신은 **팀에 추가되었습니다**.",
"combined_system_message.added_to_team.two": "{firstUser}님과 {secondUser}님이 {actor}님에 의해 **팀에 추가되었습니다**.",
"combined_system_message.joined_channel.many_expanded": "{users}님과 {lastUser}님이 **채널에 들어왔습니다**.",
"combined_system_message.joined_channel.one": "{firstUser}님이 **채널에 들어왔습니다**.",
"combined_system_message.joined_channel.two": "{firstUser}님과 {secondUser}님이 **채널에 들어왔습니다**.",
"combined_system_message.joined_team.many_expanded": "{users}님과 {lastUser}님이 **팀에 들어왔습니다**.",
"combined_system_message.joined_team.one": "{firstUser}님이 **팀에 들어왔습니다**.",
"combined_system_message.joined_team.two": "{firstUser}님과 {secondUser}님이 **팀에 들어왔습니다**.",
"combined_system_message.left_channel.many_expanded": "{users}님과 {lastUser}님이 **채널에서 나갔습니다**.",
"combined_system_message.left_channel.one": "{firstUser}님이 **채널에서 나갔습니다**.",
"combined_system_message.left_channel.two": "{firstUser}님과 {secondUser}님이 **채널에서 나갔습니다**.",
"combined_system_message.left_team.many_expanded": "{users}님과 {lastUser}님이 **팀에서 나갔습니다**.",
"combined_system_message.left_team.one": "{firstUser}님이 **팀에서 나갔습니다**.",
"combined_system_message.left_team.two": "{firstUser}님과 {secondUser}님이 **팀에서 나갔습니다**.",
"combined_system_message.removed_from_channel.many_expanded": "{users}님과 {lastUser}님이 **채널에서 제외되었습니다**.",
"combined_system_message.removed_from_channel.one": "{firstUser}님이 **채널에서 제외되었습니다**.",
"combined_system_message.removed_from_channel.one_you": "당신은 **채널에서 제외되었습니다.**.",
"combined_system_message.removed_from_channel.two": "{firstUser}님과 {secondUser}님이 **채널에서 제외되었습니다**.",
"combined_system_message.removed_from_team.many_expanded": "{users}님과 {lastUser}님이 **팀에서 제외되었습니다**.",
"combined_system_message.removed_from_team.one": "{firstUser}님이 **팀에서 제외되었습니다**.",
"combined_system_message.removed_from_team.one_you": "당신은 **팀에서 제외되었습니다**.",
"combined_system_message.removed_from_team.two": "{firstUser}님과 {secondUser}님이 **팀에서 제외되었습니다**.",
"combined_system_message.you": "당신",
"create_comment.addComment": "답글 달기...",
"create_post.deactivated": "You are viewing an archived channel with a deactivated user.",
"create_post.write": "메시지를 입력하세요...",
@@ -69,6 +70,7 @@
"edit_post.save": "저장",
"error.team_not_found.title": "Team Not Found",
"file_attachment.download": "다운로드",
"file_upload.fileAbove": "File above {max}MB cannot be uploaded: {filename}",
"get_post_link_modal.title": "바로가기 링크 복사",
"integrations.add": "추가",
"intro_messages.anyMember": " 모든 회원이 채널에 가입하고 글을 읽을 수 있습니다.",
@@ -79,16 +81,16 @@
"intro_messages.group_message": "This is the start of your direct message history with this teammate. Direct messages and files shared here are not shown to people outside this area.",
"intro_messages.noCreator": "{name} {type}입니다. 만들어진 날짜: {date}.",
"intro_messages.onlyInvited": " 초대받은 회원만 이 비공개 그룹을 볼 수 있습니다.",
"last_users_message.added_to_channel.type": "were **added to the channel** by {actor}.",
"last_users_message.added_to_team.type": "were **added to the team** by {actor}.",
"last_users_message.first": "{firstUser} and ",
"last_users_message.joined_channel.type": "**joined the channel**.",
"last_users_message.joined_team.type": "**joined the team**.",
"last_users_message.left_channel.type": "**left the channel**.",
"last_users_message.left_team.type": "**left the team**.",
"last_users_message.others": "{numOthers} others ",
"last_users_message.removed_from_channel.type": "were **removed from the channel**.",
"last_users_message.removed_from_team.type": "were **removed from the team**.",
"last_users_message.added_to_channel.type": "{actor}님이 **채널에 추가했습니다**.",
"last_users_message.added_to_team.type": "{actor}님이 **팀에 추가했습니다**.",
"last_users_message.first": "{firstUser} 님과",
"last_users_message.joined_channel.type": "**채널에 들어왔습니다**.",
"last_users_message.joined_team.type": "**팀에 들어왔습니다**.",
"last_users_message.left_channel.type": "**채널에서 나갔습니다**.",
"last_users_message.left_team.type": "**팀에서 나갔습니다**.",
"last_users_message.others": "{numOthers} 명이 ",
"last_users_message.removed_from_channel.type": "**채널에서 삭제되었습니다**.",
"last_users_message.removed_from_team.type": "**팀에서 삭제되었습니다**.",
"login_mfa.enterToken": "To complete the sign in process, please enter a token from your smartphone's authenticator",
"login_mfa.token": "MFA 토큰",
"login_mfa.tokenReq": "MFA 토큰을 입력하세요.",
@@ -97,7 +99,14 @@
"login.invalidPassword": "패스워드가 일치하지 않습니다.",
"login.ldapUsername": "AD/LDAP 사용자명",
"login.ldapUsernameLower": "AD/LDAP 사용자명",
"login.noEmail": "이메일을 입력하세요.",
"login.noEmailLdapUsername": "이메일 또는 {ldapUsername}을 입력하세요.",
"login.noEmailUsername": "이메일 또는 사용자명을 입력하세요.",
"login.noEmailUsernameLdapUsername": "이메일, 사용자명 또는 {ldapUsername}을 입력하세요.",
"login.noLdapUsername": "{ldapUsername}을 입력하세요.",
"login.noPassword": "패스워드를 입력하세요.",
"login.noUsername": "사용자명을 입력하세요.",
"login.noUsernameLdapUsername": "사용자명 또는 {ldapUsername}을 입력하세요.",
"login.or": "또는",
"login.password": "패스워드",
"login.signIn": "로그인",
@@ -116,7 +125,6 @@
"mobile.account_notifications.threads_start_participate": "Threads that I start or participate in",
"mobile.account.settings.save": "저장",
"mobile.action_menu.select": "Select an option",
"mobile.action_menu.submitted": "Submitted",
"mobile.advanced_settings.clockDisplay": "시간 표시",
"mobile.advanced_settings.delete": "삭제",
"mobile.advanced_settings.delete_file_cache": "파일 캐시 삭제",
@@ -139,6 +147,10 @@
"mobile.announcement_banner.title": "Announcement",
"mobile.authentication_error.message": "Mattermost has encountered an error. Please re-authenticate to start a new session.",
"mobile.authentication_error.title": "Authentication Error",
"mobile.calendar.dayNames": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday",
"mobile.calendar.dayNamesShort": "Sun,Mon,Tue,Wed,Thu,Fri,Sat",
"mobile.calendar.monthNames": "January,February,March,April,May,June,July,August,September,October,November,December",
"mobile.calendar.monthNamesShort": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",
"mobile.channel_drawer.search": "Jump to...",
"mobile.channel_info.alertMessageDeleteChannel": "{term} {name}을 (를) 종료 하시겠습니까?",
"mobile.channel_info.alertMessageLeaveChannel": "{term} {name}에서 나가시겠습니까?",
@@ -158,6 +170,7 @@
"mobile.channel_list.members": "MEMBERS",
"mobile.channel_list.not_member": "NOT A MEMBER",
"mobile.channel_list.unreads": "읽지 않음",
"mobile.channel_members.add_members_alert": "You must select at least one member to add to the channel.",
"mobile.channel.markAsRead": "읽음으로 표시",
"mobile.client_upgrade": "Update App",
"mobile.client_upgrade.can_upgrade_subtitle": "A new version is available for download.",
@@ -188,6 +201,7 @@
"mobile.create_channel.public": "새 공개 채널",
"mobile.create_post.read_only": "이 채널은 읽기 전용입니다.",
"mobile.custom_list.no_results": "결과가 없습니다.",
"mobile.display_settings.theme": "테마",
"mobile.document_preview.failed_description": "An error occurred while opening the document. Please make sure you have a {fileType} viewer installed and try again.\n",
"mobile.document_preview.failed_title": "Open Document failed",
"mobile.downloader.android_complete": "Download complete",
@@ -231,7 +245,8 @@
"mobile.failed_network_action.shortDescription": "Make sure you have an active connection and try again.",
"mobile.failed_network_action.title": "인터넷 연결 안 됨",
"mobile.file_upload.browse": "Browse Files",
"mobile.file_upload.camera": "Take Photo or Video",
"mobile.file_upload.camera_photo": "Take Photo",
"mobile.file_upload.camera_video": "Take Video",
"mobile.file_upload.library": "Photo Library",
"mobile.file_upload.max_warning": "Uploads limited to 5 files maximum.",
"mobile.file_upload.video": "Video Library",
@@ -247,6 +262,7 @@
"mobile.join_channel.error": "We couldn't join the channel {displayName}. Please check your connection and try again.",
"mobile.loading_channels": "Loading Channels...",
"mobile.loading_members": "Loading Members...",
"mobile.loading_options": "Loading Options...",
"mobile.loading_posts": "메시지 불러오는 중...",
"mobile.login_options.choose_title": "Choose your login method",
"mobile.long_post_title": "{channelName} - Post",
@@ -256,7 +272,6 @@
"mobile.managed.secured_by": "Secured by {vendor}",
"mobile.markdown.code.copy_code": "Copy Code",
"mobile.markdown.code.plusMoreLines": "+{count, number} more {count, plural, one {line} other {lines}}",
"mobile.markdown.image.error": "Image failed to load:",
"mobile.markdown.image.too_large": "Image exceeds max dimensions of {maxWidth} by {maxHeight}:",
"mobile.markdown.link.copy_url": "Copy URL",
"mobile.mention.copy_mention": "Copy Mention",
@@ -266,7 +281,7 @@
"mobile.more_dms.cannot_add_more": "You cannot add more users",
"mobile.more_dms.start": "Start",
"mobile.more_dms.title": "New Conversation",
"mobile.more_dms.you": "(@{username} - you)",
"mobile.more_dms.you": "@{username} - you",
"mobile.notice_mobile_link": "mobile apps",
"mobile.notice_platform_link": "server",
"mobile.notice_text": "Mattermost is made possible by the open source software used in our {platform} and {mobile}.",
@@ -289,7 +304,7 @@
"mobile.notification_settings.auto_responder_short": "Automatic Replies",
"mobile.notification_settings.auto_responder.default_message": "Hello, I am out of office and unable to respond to messages.",
"mobile.notification_settings.auto_responder.enabled": "Enabled",
"mobile.notification_settings.auto_responder.footer_message": "Set a custom message that will be automatically sent in response to Direct Messages. Mentions in Public and Private Channels will not trigger the automated reply. Enabling Automatic Replies sets your status to Out of Office and disables email and push notifications.",
"mobile.notification_settings.auto_responder.footer_message": "개인 메시지에 대한 응답을 자동으로 전송되는 사용자 지정 메시지를 설정합니다. 공개, 비공개 채널의 멘션은 자동 응답 기능이 실행되지 않습니다. 자동 응답을 사용하면 상태가 부재중으로 설정되고 이메일 알림, 푸쉬 알림은 해제됩니다.",
"mobile.notification_settings.auto_responder.message_placeholder": "메시지",
"mobile.notification_settings.auto_responder.message_title": "CUSTOM MESSAGE",
"mobile.notification_settings.email": "이메일",
@@ -304,22 +319,31 @@
"mobile.notification_settings.mobile_title": "모바일 푸시 알림",
"mobile.notification_settings.modal_cancel": "CANCEL",
"mobile.notification_settings.modal_save": "SAVE",
"mobile.notification_settings.ooo_auto_responder": "Automatic Direct Message Replies",
"mobile.notification_settings.ooo_auto_responder": "개인 메시지 자동 응답",
"mobile.notification_settings.save_failed_description": "The notification settings failed to save due to a connection issue, please try again.",
"mobile.notification_settings.save_failed_title": "Connection issue",
"mobile.notification.in": " in ",
"mobile.offlineIndicator.connected": "연결 되었습니다.",
"mobile.offlineIndicator.connecting": "연결 중...",
"mobile.offlineIndicator.offline": "서버에 연결할 수 없습니다.",
"mobile.offlineIndicator.offline": "인터넷 연결 안 됨",
"mobile.open_dm.error": "We couldn't open a direct message with {displayName}. Please check your connection and try again.",
"mobile.open_gm.error": "We couldn't open a group message with those users. Please check your connection and try again.",
"mobile.open_unknown_channel.error": "Unable to join the channel. Please reset the cache and try again.",
"mobile.pinned_posts.empty_description": "Pin important items by holding down on any message and selecting \"Pin to Channel\".",
"mobile.pinned_posts.empty_title": "포스트 고정",
"mobile.post_info.add_reaction": "Add Reaction",
"mobile.post_info.copy_post": "Copy Post",
"mobile.post_info.copy_text": "Copy Text",
"mobile.post_info.flag": "중요 지정",
"mobile.post_info.pin": "공지하기",
"mobile.post_info.unflag": "중요 메시지 해제",
"mobile.post_info.unpin": "공지 해제하기",
"mobile.post_pre_header.flagged": "Flagged",
"mobile.post_pre_header.pinned": "공지사항",
"mobile.post_pre_header.pinned_flagged": "Pinned and Flagged",
"mobile.post_textbox.empty.message": "You are trying to send an empty message.\nPlease make sure you have a message or at least one attached file.",
"mobile.post_textbox.empty.ok": "확인",
"mobile.post_textbox.empty.title": "Empty Message",
"mobile.post_textbox.uploadFailedDesc": "Some attachments failed to upload to the server, Are you sure you want to post the message?",
"mobile.post_textbox.uploadFailedDesc": "Some attachments failed to upload to the server. Are you sure you want to post the message?",
"mobile.post_textbox.uploadFailedTitle": "Attachment failure",
"mobile.post.cancel": "취소",
"mobile.post.delete_question": "정말 게시물을 삭제하시겠습니까?",
@@ -399,9 +423,16 @@
"mobile.share_extension.send": "보내기",
"mobile.share_extension.team": "서비스 약관",
"mobile.suggestion.members": "멤버",
"mobile.timezone_settings.automatically": "Set automatically",
"mobile.timezone_settings.manual": "Change timezone",
"mobile.terms_of_service.alert_cancel": "취소",
"mobile.terms_of_service.alert_ok": "확인",
"mobile.terms_of_service.alert_retry": "다시 시도",
"mobile.terms_of_service.get_terms_error_description": "Make sure you have an active internet connection and try again. If this issue persists, contact your System Administrator.",
"mobile.terms_of_service.get_terms_error_title": "Unable to load terms of service.",
"mobile.terms_of_service.terms_rejected": "You must agree to the terms of service before accessing {siteName}. Please contact your System Administrator for more details.",
"mobile.timezone_settings.automatically": "자동으로 설정",
"mobile.timezone_settings.manual": "타임존 변경",
"mobile.timezone_settings.select": "Select Timezone",
"mobile.user_list.deactivated": "비활성화",
"mobile.user.settings.notifications.email.fifteenMinutes": "Every 15 minutes",
"mobile.video_playback.failed_description": "An error occurred while trying to play the video.\n",
"mobile.video_playback.failed_title": "Video playback failed",
@@ -414,8 +445,8 @@
"modal.manual_status.auto_responder.message_dnd": "Would you like to switch your status to \"Do Not Disturb\" and disable Automatic Replies?",
"modal.manual_status.auto_responder.message_offline": "Would you like to switch your status to \"Offline\" and disable Automatic Replies?",
"modal.manual_status.auto_responder.message_online": "Would you like to switch your status to \"Online\" and disable Automatic Replies?",
"more_channels.noMore": "가입할 수 있는 채널이 없습니다",
"more_channels.title": "채널 더보기",
"more_direct_channels.directchannel.deactivated": "{displayname} - Deactivated",
"msg_typing.areTyping": "{users}, {last}(이)가 입력중입니다...",
"msg_typing.isTyping": "{user}(이)가 입력중입니다...",
"navbar_dropdown.logout": "로그아웃",
@@ -433,7 +464,7 @@
"post_body.check_for_out_of_channel_mentions.message_last": "? They will have access to all message history.",
"post_body.check_for_out_of_channel_mentions.message.multiple": "were mentioned but they are not in the channel. Would you like to ",
"post_body.check_for_out_of_channel_mentions.message.one": "was mentioned but is not in the channel. Would you like to ",
"post_body.commentedOn": "Commented on {name}{apostrophe} message: ",
"post_body.commentedOn": "Commented on {name}'s message: ",
"post_body.deleted": "(삭제된 메시지)",
"post_info.auto_responder": "AUTOMATIC REPLY",
"post_info.bot": "BOT",
@@ -441,8 +472,6 @@
"post_info.edit": "편집",
"post_info.message.show_less": "Show Less",
"post_info.message.show_more": "Show More",
"post_info.mobile.flag": "중요 지정",
"post_info.mobile.unflag": "중요 해제",
"post_info.system": "시스템",
"post_message_view.edited": "(edited)",
"posts_view.newMsg": "새로운 메시지",
@@ -457,11 +486,8 @@
"search_item.channelArchived": "Archived",
"sidebar_right_menu.logout": "로그아웃",
"sidebar_right_menu.report": "문제 보고",
"sidebar.channels": "공개 채널",
"sidebar.direct": "개인 메시지",
"sidebar.favorite": "즐겨찾는 채널",
"sidebar.pg": "비공개 채널",
"sidebar.unreads": "More unreads",
"sidebar.unreads": "읽지 않은 글 더보기",
"signup.email": "이메일과 패스워드",
"status_dropdown.set_away": "다른 용무 중",
"status_dropdown.set_dnd": "방해 금지",
@@ -476,8 +502,11 @@
"suggestion.mention.morechannels": "Other Channels",
"suggestion.mention.nonmembers": "Not in Channel",
"suggestion.mention.special": "Special Mentions",
"suggestion.search.direct": "개인 메시지",
"suggestion.search.private": "비공개 채널",
"suggestion.search.public": "공개 채널",
"terms_of_service.agreeButton": "I Agree",
"terms_of_service.api_error": "Unable to complete the request. If this issue persists, contact your System Administrator.",
"user.settings.display.clockDisplay": "시간 표시",
"user.settings.display.militaryClock": "24시간으로 보이기 (예: 16:00)",
"user.settings.display.normalClock": "12시간으로 보이기 (예: 4:00 PM)",
@@ -489,8 +518,8 @@
"user.settings.general.emailHelp2": "이메일 기능이 시스템 관리자에 의해 비활성화 되었습니다. 활성화 되기 전까진 알림 메일이 발송되지 않습니다.",
"user.settings.general.emailLdapCantUpdate": "Login occurs through LDAP. Email cannot be updated. Email address used for notifications is {email}.",
"user.settings.general.emailOffice365CantUpdate": "Login occurs through GitLab. Email cannot be updated. Email address used for notifications is {email}.",
"user.settings.general.emailSamlCantUpdate": "Login occurs through SAML. Email cannot be updated. Email address used for notifications is {email}.",
"user.settings.general.field_handled_externally": "This field is handled through your login provider. If you want to change it, you need to do so through your login provider.",
"user.settings.general.emailSamlCantUpdate": "SAML을 통해 로그인 하였기에 이메일을 업데이트 할 수 없습니다. 알림에 사용되는 이메일 주소는 {email} 입니다.",
"user.settings.general.field_handled_externally": "이 필드는 로그인 제공자를 통해 처리됩니다. 변경하려는 경우 로그인 제공자를 통해 변경해야 합니다.",
"user.settings.general.firstName": "이름",
"user.settings.general.lastName": "성",
"user.settings.general.nickname": "별명",

View File

@@ -17,6 +17,7 @@
"channel_header.addMembers": "Leden toevoegen",
"channel_header.directchannel.you": "{displayname} (jij) ",
"channel_header.manageMembers": "Leden beheren",
"channel_header.pinnedPosts": "Pinned Posts",
"channel_header.viewMembers": "Bekijk Leden",
"channel_info.header": "Kop:",
"channel_info.purpose": "Doel:",
@@ -69,6 +70,7 @@
"edit_post.save": "Opslaan",
"error.team_not_found.title": "Team Not Found",
"file_attachment.download": "Downloaden",
"file_upload.fileAbove": "Het bestand groter dan {max} MB kan niet worden geüploaded: {filename}",
"get_post_link_modal.title": "Kopieer permanente link",
"integrations.add": "Toevoegen",
"intro_messages.anyMember": "Ieder lid kan dit kanaal lezen en volgen.",
@@ -97,7 +99,14 @@
"login.invalidPassword": "Uw wachtwoord is niet juist.",
"login.ldapUsername": "AD/LDAP Gebruikersnaam",
"login.ldapUsernameLower": "AD/LDAP gebruikersnaam",
"login.noEmail": "Geen uw e-mail adres in",
"login.noEmailLdapUsername": "Geef uw e-mail adres of {ldapUsername} in",
"login.noEmailUsername": "Geeft uw e-mail adres of gebruikersnaam in",
"login.noEmailUsernameLdapUsername": "Geeft uw e-mail adres, gebruikersnaam of {ldapUsername} in",
"login.noLdapUsername": "Geef uw {ldapUsername} in",
"login.noPassword": "Geef uw wachtwoord in",
"login.noUsername": "Geef uw gebruikersnaam in",
"login.noUsernameLdapUsername": "Geef uw gebruikersnaam of {ldapUsername} in",
"login.or": "of",
"login.password": "Wachtwoord",
"login.signIn": "Log in",
@@ -116,7 +125,6 @@
"mobile.account_notifications.threads_start_participate": "Threads that I start or participate in",
"mobile.account.settings.save": "Opslaan",
"mobile.action_menu.select": "Select an option",
"mobile.action_menu.submitted": "Submitted",
"mobile.advanced_settings.clockDisplay": "Klok weergave",
"mobile.advanced_settings.delete": "Verwijderen",
"mobile.advanced_settings.delete_file_cache": "Delete File Cache",
@@ -139,6 +147,10 @@
"mobile.announcement_banner.title": "Announcement",
"mobile.authentication_error.message": "Mattermost has encountered an error. Please re-authenticate to start a new session.",
"mobile.authentication_error.title": "Authentication Error",
"mobile.calendar.dayNames": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday",
"mobile.calendar.dayNamesShort": "Sun,Mon,Tue,Wed,Thu,Fri,Sat",
"mobile.calendar.monthNames": "January,February,March,April,May,June,July,August,September,October,November,December",
"mobile.calendar.monthNamesShort": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",
"mobile.channel_drawer.search": "Jump to...",
"mobile.channel_info.alertMessageDeleteChannel": "Weet u zeker dat u deze {term} wilt verwijderen?",
"mobile.channel_info.alertMessageLeaveChannel": "Weet u zeker dat u deze {term} wilt verwijderen?",
@@ -158,6 +170,7 @@
"mobile.channel_list.members": "MEMBERS",
"mobile.channel_list.not_member": "NOT A MEMBER",
"mobile.channel_list.unreads": "UNREADS",
"mobile.channel_members.add_members_alert": "You must select at least one member to add to the channel.",
"mobile.channel.markAsRead": "Mark As Read",
"mobile.client_upgrade": "Update App",
"mobile.client_upgrade.can_upgrade_subtitle": "A new version is available for download.",
@@ -188,6 +201,7 @@
"mobile.create_channel.public": "Publieke kanalen",
"mobile.create_post.read_only": "This channel is read-only",
"mobile.custom_list.no_results": "No Results",
"mobile.display_settings.theme": "Thema",
"mobile.document_preview.failed_description": "An error occurred while opening the document. Please make sure you have a {fileType} viewer installed and try again.\n",
"mobile.document_preview.failed_title": "Open Document failed",
"mobile.downloader.android_complete": "Download complete",
@@ -231,7 +245,8 @@
"mobile.failed_network_action.shortDescription": "Make sure you have an active connection and try again.",
"mobile.failed_network_action.title": "No internet connection",
"mobile.file_upload.browse": "Browse Files",
"mobile.file_upload.camera": "Take Photo or Video",
"mobile.file_upload.camera_photo": "Take Photo",
"mobile.file_upload.camera_video": "Take Video",
"mobile.file_upload.library": "Photo Library",
"mobile.file_upload.max_warning": "Uploads limited to 5 files maximum.",
"mobile.file_upload.video": "Video bibliotheek",
@@ -247,6 +262,7 @@
"mobile.join_channel.error": "We couldn't join the channel {displayName}. Please check your connection and try again.",
"mobile.loading_channels": "Loading Channels...",
"mobile.loading_members": "Loading Members...",
"mobile.loading_options": "Loading Options...",
"mobile.loading_posts": "Laad meer berichten",
"mobile.login_options.choose_title": "Choose your login method",
"mobile.long_post_title": "{channelName} - Post",
@@ -256,7 +272,6 @@
"mobile.managed.secured_by": "Secured by {vendor}",
"mobile.markdown.code.copy_code": "Copy Code",
"mobile.markdown.code.plusMoreLines": "{count} {count, plural, =0 {0 members} een {member} andere {members}}",
"mobile.markdown.image.error": "Image failed to load:",
"mobile.markdown.image.too_large": "Image exceeds max dimensions of {maxWidth} by {maxHeight}:",
"mobile.markdown.link.copy_url": "Copy URL",
"mobile.mention.copy_mention": "Copy Mention",
@@ -266,7 +281,7 @@
"mobile.more_dms.cannot_add_more": "You cannot add more users",
"mobile.more_dms.start": "Start",
"mobile.more_dms.title": "New Conversation",
"mobile.more_dms.you": "(@{username} - you)",
"mobile.more_dms.you": "@{username} - you",
"mobile.notice_mobile_link": "mobile apps",
"mobile.notice_platform_link": "server",
"mobile.notice_text": "Mattermost is made possible by the open source software used in our {platform} and {mobile}.",
@@ -310,16 +325,25 @@
"mobile.notification.in": " in ",
"mobile.offlineIndicator.connected": "Connected",
"mobile.offlineIndicator.connecting": "Verbindingen",
"mobile.offlineIndicator.offline": "Cannot connect to the server",
"mobile.offlineIndicator.offline": "No internet connection",
"mobile.open_dm.error": "We couldn't open a direct message with {displayName}. Please check your connection and try again.",
"mobile.open_gm.error": "We couldn't open a group message with those users. Please check your connection and try again.",
"mobile.open_unknown_channel.error": "Unable to join the channel. Please reset the cache and try again.",
"mobile.pinned_posts.empty_description": "Pin important items by holding down on any message and selecting \"Pin to Channel\".",
"mobile.pinned_posts.empty_title": "No Pinned Posts",
"mobile.post_info.add_reaction": "Add Reaction",
"mobile.post_info.copy_post": "Copy Post",
"mobile.post_info.copy_text": "Copy Text",
"mobile.post_info.flag": "Markeer",
"mobile.post_info.pin": "Pin to Channel",
"mobile.post_info.unflag": "Demarkeer",
"mobile.post_info.unpin": "Unpin from Channel",
"mobile.post_pre_header.flagged": "Flagged",
"mobile.post_pre_header.pinned": "Pinned",
"mobile.post_pre_header.pinned_flagged": "Pinned and Flagged",
"mobile.post_textbox.empty.message": "You are trying to send an empty message.\nPlease make sure you have a message or at least one attached file.",
"mobile.post_textbox.empty.ok": "OK",
"mobile.post_textbox.empty.title": "Empty Message",
"mobile.post_textbox.uploadFailedDesc": "Some attachments failed to upload to the server, Are you sure you want to post the message?",
"mobile.post_textbox.uploadFailedDesc": "Some attachments failed to upload to the server. Are you sure you want to post the message?",
"mobile.post_textbox.uploadFailedTitle": "Attachment failure",
"mobile.post.cancel": "Annuleren",
"mobile.post.delete_question": "Weet u zeker dat u deze {term} wilt verwijderen?",
@@ -399,9 +423,16 @@
"mobile.share_extension.send": "Verzenden",
"mobile.share_extension.team": "Termen",
"mobile.suggestion.members": " Leden",
"mobile.terms_of_service.alert_cancel": "Annuleren",
"mobile.terms_of_service.alert_ok": "OK",
"mobile.terms_of_service.alert_retry": "Try Again",
"mobile.terms_of_service.get_terms_error_description": "Make sure you have an active internet connection and try again. If this issue persists, contact your System Administrator.",
"mobile.terms_of_service.get_terms_error_title": "Unable to load terms of service.",
"mobile.terms_of_service.terms_rejected": "You must agree to the terms of service before accessing {siteName}. Please contact your System Administrator for more details.",
"mobile.timezone_settings.automatically": "Set automatically",
"mobile.timezone_settings.manual": "Change timezone",
"mobile.timezone_settings.select": "Select Timezone",
"mobile.user_list.deactivated": "Deactivated",
"mobile.user.settings.notifications.email.fifteenMinutes": "Every 15 minutes",
"mobile.video_playback.failed_description": "An error occurred while trying to play the video.\n",
"mobile.video_playback.failed_title": "Video playback failed",
@@ -414,8 +445,8 @@
"modal.manual_status.auto_responder.message_dnd": "Would you like to switch your status to \"Do Not Disturb\" and disable Automatic Replies?",
"modal.manual_status.auto_responder.message_offline": "Would you like to switch your status to \"Offline\" and disable Automatic Replies?",
"modal.manual_status.auto_responder.message_online": "Would you like to switch your status to \"Online\" and disable Automatic Replies?",
"more_channels.noMore": "Geen kanalen beschikbaar waar aan deelgenomen kan worden.",
"more_channels.title": "Meer kanalen",
"more_direct_channels.directchannel.deactivated": "{displayname} - Deactivated",
"msg_typing.areTyping": "{users} en {last} zijn aan het typen...",
"msg_typing.isTyping": "{user} typt...",
"navbar_dropdown.logout": "Afmelden",
@@ -433,7 +464,7 @@
"post_body.check_for_out_of_channel_mentions.message_last": "? They will have access to all message history.",
"post_body.check_for_out_of_channel_mentions.message.multiple": "were mentioned but they are not in the channel. Would you like to ",
"post_body.check_for_out_of_channel_mentions.message.one": "was mentioned but is not in the channel. Would you like to ",
"post_body.commentedOn": "Reageerde op bericht van {name}{apostrophe}:",
"post_body.commentedOn": "Commented on {name}'s message: ",
"post_body.deleted": "(bericht verwijderd)",
"post_info.auto_responder": "AUTOMATIC REPLY",
"post_info.bot": "BOT",
@@ -441,8 +472,6 @@
"post_info.edit": "Bewerken",
"post_info.message.show_less": "Show Less",
"post_info.message.show_more": "Show More",
"post_info.mobile.flag": "Markeer",
"post_info.mobile.unflag": "Demarkeer ",
"post_info.system": "System",
"post_message_view.edited": "(edited)",
"posts_view.newMsg": "Nieuwe berichten",
@@ -457,10 +486,7 @@
"search_item.channelArchived": "Archived",
"sidebar_right_menu.logout": "Afmelden",
"sidebar_right_menu.report": "Een probleem melden",
"sidebar.channels": "PUBLIC CHANNELS",
"sidebar.direct": "DIRECT MESSAGES",
"sidebar.favorite": "FAVORITE CHANNELS",
"sidebar.pg": "PRIVATE CHANNELS",
"sidebar.unreads": "More unreads",
"signup.email": "E-mail en Wachtwoord",
"status_dropdown.set_away": "Away",
@@ -476,8 +502,11 @@
"suggestion.mention.morechannels": "Andere Kanalen",
"suggestion.mention.nonmembers": "Niet in kanaal",
"suggestion.mention.special": "Speciale Vermeldingen",
"suggestion.search.direct": "Privé bericht",
"suggestion.search.private": "Verlaat kanaal",
"suggestion.search.public": "Publieke kanalen",
"terms_of_service.agreeButton": "I Agree",
"terms_of_service.api_error": "Unable to complete the request. If this issue persists, contact your System Administrator.",
"user.settings.display.clockDisplay": "Klok weergave",
"user.settings.display.militaryClock": "24 uren klok (bijvoorbeeld: 16:00)",
"user.settings.display.normalClock": "12 uren klok (bijvoorbeeld: 4:00 PM)",

View File

@@ -1,13 +1,13 @@
{
"about.date": "Data kompilacji:",
"about.date": "Data Kompilacji:",
"about.enterpriseEditione1": "Wersja Enterprise",
"about.enterpriseEditionLearn": "Dowiedz się więcej na temat wydania Enteprise na stronie",
"about.enterpriseEditionSt": "Współczesna komunikacja dla przedsiębiorstw zza Twojego firewalla.",
"about.hash": "Wartość skrótu kompilacji",
"about.hashee": "Build Hash wersji enterprise:",
"about.hash": "Wartość Skrótu Kompilacji:",
"about.hashee": "Build Hash Wersji Enterprise:",
"about.teamEditionLearn": "Dołącz do społeczności Mattermost na stronie ",
"about.teamEditionSt": "Cała komunikacja Twojego zespołu w jednym miejscu, z natychmiastowym przeszukiwaniem i dostępna z każdego miejsca.",
"about.teamEditiont0": "Wydanie zespołowe",
"about.teamEditiont0": "Wydanie Zespołowe",
"about.teamEditiont1": "Wydanie Enterprise",
"about.title": "O Mattermost",
"announcment_banner.dont_show_again": "Don't show again",
@@ -15,9 +15,10 @@
"archivedChannelMessage": "You are viewing an **archived channel**. New messages cannot be posted.",
"center_panel.archived.closeChannel": "Close Channel",
"channel_header.addMembers": "Dodaj użytkowników",
"channel_header.directchannel.you": "{displayname} (you) ",
"channel_header.directchannel.you": "{displayname} (Ty) ",
"channel_header.manageMembers": "Zarządzaj użytkownikami",
"channel_header.viewMembers": "Wyświetl użytkowników",
"channel_header.pinnedPosts": "Przypięte posty",
"channel_header.viewMembers": "Wyświetl Użytkowników",
"channel_info.header": "Nagłówek:",
"channel_info.purpose": "Cel:",
"channel_loader.someone": "Ktoś",
@@ -32,7 +33,7 @@
"channel_modal.optional": "(opcjonalne)",
"channel_modal.purpose": "Cel",
"channel_modal.purposeEx": "Np. \"Kanał do zgłaszania bugów i usprawnień\"",
"channel_notifications.muteChannel.settings": "kanał",
"channel_notifications.muteChannel.settings": "Wycisz kanał",
"combined_system_message.added_to_channel.many_expanded": "{users} and {lastUser} were **added to the channel** by {actor}.",
"combined_system_message.added_to_channel.one": "{firstUser} **added to the channel** by {actor}.",
"combined_system_message.added_to_channel.one_you": "You were **added to the channel** by {actor}.",
@@ -67,8 +68,9 @@
"create_post.write": "Napisz wiadomość...",
"edit_post.editPost": "Edytuj post...",
"edit_post.save": "Zapisz",
"error.team_not_found.title": "Team Not Found",
"error.team_not_found.title": "Zespół Nie Znaleziony",
"file_attachment.download": "Pobierz",
"file_upload.fileAbove": "Plik powyżej {max} MB nie może zostać wysłany: {filename}",
"get_post_link_modal.title": "Kopiuj link bezpośredni ",
"integrations.add": "Dodaj",
"intro_messages.anyMember": " Każdy użytkownik może dołączyć i przeczytać ten kanał.",
@@ -97,77 +99,88 @@
"login.invalidPassword": "Hasło jest nieprawidłowe.",
"login.ldapUsername": "Nazwa użytkownika AD/LDAP",
"login.ldapUsernameLower": "Nazwa użytkownika AD/LDAP",
"login.noEmail": "Podaj adres e-mail",
"login.noEmailLdapUsername": "Proszę, wpisz swój adres e-mail lub {ldapUsername}",
"login.noEmailUsername": "Proszę, wpisz adres e-mail lub nazwę użytkownika",
"login.noEmailUsernameLdapUsername": "Proszę, wpisz adres e-mail, nazwa użytkownika lub {ldapUsername}",
"login.noLdapUsername": "Proszę wprowadzić {ldapUsername}",
"login.noPassword": "Proszę wprowadzić hasło.",
"login.noUsername": "Proszę wprowadź nazwę użytkownika",
"login.noUsernameLdapUsername": "Proszę, wpisz login lub {ldapUsername}",
"login.or": "lub",
"login.password": "Hasło",
"login.signIn": "Zaloguj się",
"login.username": "Nazwa użytkownika",
"login.userNotFound": "Nie mogliśmy znaleźć konta pasującego do danych logowania.",
"mobile.about.appVersion": "Wersja aplikacji: {version} (Build {number})",
"mobile.about.appVersion": "Wersja Aplikacji: {version} (Build {number})",
"mobile.about.copyright": "Copyright 2015-{currentYear} Mattermost, Inc. Wszelkie prawa zastrzeżone.",
"mobile.about.database": "Baza danych: {type}",
"mobile.about.licensed": "Licensed to: {company}",
"mobile.about.powered_by": "{site} is powered by Mattermost",
"mobile.about.serverVersion": "Wersja serwera: {version} (Build {number})",
"mobile.about.serverVersionNoBuild": "Wersja serwera: {version}",
"mobile.about.serverVersion": "Wersja Serwera: {version} (Build {number})",
"mobile.about.serverVersionNoBuild": "Wersja Serwera: {version}",
"mobile.account_notifications.reply.header": "WYSYŁAJ POWIADOMIENIA DLA",
"mobile.account_notifications.threads_mentions": "Wzmianki w wątkach",
"mobile.account_notifications.threads_start": "Wątki, które rozpocząłem",
"mobile.account_notifications.threads_start_participate": "Wątki, które rozpocząłem lub w których uczestniczę",
"mobile.account.settings.save": "Zapisz",
"mobile.action_menu.select": "Select an option",
"mobile.action_menu.submitted": "Submitted",
"mobile.advanced_settings.clockDisplay": "Wyświetlanie czasu",
"mobile.advanced_settings.delete": "Usuń",
"mobile.advanced_settings.delete_file_cache": "Delete File Cache",
"mobile.advanced_settings.delete_file_cache_message": "\nThis will delete all the files stored in the cache. Are you sure you want to delete them?\n",
"mobile.advanced_settings.reset_button": "Reset",
"mobile.advanced_settings.reset_button": "Resetuj",
"mobile.advanced_settings.reset_message": "\nThis will reset all offline data and restart the app. You will be automatically logged back in once the app restarts.\n",
"mobile.advanced_settings.reset_title": "Reset Cache",
"mobile.advanced_settings.timezone": "Timezone",
"mobile.advanced_settings.title": "Zaawansowane ustawienia",
"mobile.android.camera_permission_denied_description": "To take photos and videos with your camera, please change your permission settings.",
"mobile.advanced_settings.timezone": "Strefa Czasowa",
"mobile.advanced_settings.title": "Zaawansowane Ustawienia",
"mobile.android.camera_permission_denied_description": "Aby zapisać obrazy i filmy do biblioteki, proszę zmień swoje ustawienia uprawnień.",
"mobile.android.camera_permission_denied_title": "Camera access is required",
"mobile.android.permission_denied_dismiss": "Dismiss",
"mobile.android.permission_denied_dismiss": "Odrzuć",
"mobile.android.permission_denied_retry": "Set permission",
"mobile.android.photos_permission_denied_description": "To upload images from your library, please change your permission settings.",
"mobile.android.photos_permission_denied_description": "Aby zapisać obrazy i filmy do biblioteki, proszę zmień swoje ustawienia uprawnień.",
"mobile.android.photos_permission_denied_title": "Photo library access is required",
"mobile.android.storage_permission_denied_description": "To upload images from your Android device, please change your permission settings.",
"mobile.android.storage_permission_denied_description": "Aby zapisać obrazy i filmy do biblioteki, proszę zmień swoje ustawienia uprawnień.",
"mobile.android.storage_permission_denied_title": "File Storage access is required",
"mobile.android.videos_permission_denied_description": "To upload videos from your library, please change your permission settings.",
"mobile.android.videos_permission_denied_description": "Aby zapisać obrazy i filmy do biblioteki, proszę zmień swoje ustawienia uprawnień.",
"mobile.android.videos_permission_denied_title": "Video library access is required",
"mobile.announcement_banner.title": "Announcement",
"mobile.authentication_error.message": "Mattermost has encountered an error. Please re-authenticate to start a new session.",
"mobile.authentication_error.title": "Authentication Error",
"mobile.authentication_error.title": "Błąd Autoryzacji",
"mobile.calendar.dayNames": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday",
"mobile.calendar.dayNamesShort": "Sun,Mon,Tue,Wed,Thu,Fri,Sat",
"mobile.calendar.monthNames": "Styczeń,Luty,Marzec,Kwiecień,Maj,Czerwiec,Lipiec,Sierpień,Wrzesień,Październik,Listopad,Grudzień",
"mobile.calendar.monthNamesShort": "Sty,Lut,Mar,Kwi,Lip,Sie,Wrz,Paź,Lis,Gru",
"mobile.channel_drawer.search": "Jump to...",
"mobile.channel_info.alertMessageDeleteChannel": "Jesteś pewien, że chcesz opuścić {term} {name}?",
"mobile.channel_info.alertMessageLeaveChannel": "Jesteś pewien, że chcesz opuścić {term} {name}?",
"mobile.channel_info.alertNo": "Nie",
"mobile.channel_info.alertTitleDeleteChannel": "Archive {term}",
"mobile.channel_info.alertTitleDeleteChannel": "Archiwizuj {term}",
"mobile.channel_info.alertTitleLeaveChannel": "{term} - Opuść",
"mobile.channel_info.alertYes": "Tak",
"mobile.channel_info.delete_failed": "Nie można dołączyć do kanału {displayName}. Sprawdź swoje połączenie i spróbuj ponownie.",
"mobile.channel_info.edit": "Edit Channel",
"mobile.channel_info.edit": "Edytuj Kanał",
"mobile.channel_info.privateChannel": "Prywatny kanał",
"mobile.channel_info.publicChannel": "Kanał publiczny",
"mobile.channel_list.alertNo": "Nie",
"mobile.channel_list.alertYes": "Tak",
"mobile.channel_list.channels": "CHANNELS",
"mobile.channel_list.closeDM": "Zamknij wiadomość bezpośrednią",
"mobile.channel_list.closeGM": "Zamknij wiadomość grupową",
"mobile.channel_list.members": "MEMBERS",
"mobile.channel_list.channels": "KANAŁY",
"mobile.channel_list.closeDM": "Zamknij Wiadomość Bezpośrednią",
"mobile.channel_list.closeGM": "Zamknij Wiadomość Grupową",
"mobile.channel_list.members": "CZŁONKOWIE",
"mobile.channel_list.not_member": "NIE JEST UŻYTKOWNIKIEM",
"mobile.channel_list.unreads": "NIEPRZECZYTANE",
"mobile.channel.markAsRead": "Mark As Read",
"mobile.client_upgrade": "Update App",
"mobile.client_upgrade.can_upgrade_subtitle": "A new version is available for download.",
"mobile.client_upgrade.can_upgrade_title": "Update Available",
"mobile.client_upgrade.close": "Update Later",
"mobile.client_upgrade.current_version": "Wersja serwera: {version}",
"mobile.client_upgrade.download_error.message": "An error occurred downloading the new version.",
"mobile.client_upgrade.download_error.title": "Unable to Install Update",
"mobile.client_upgrade.latest_version": "Wersja serwera: {version}",
"mobile.client_upgrade.listener.dismiss_button": "Dismiss",
"mobile.channel_members.add_members_alert": "Musisz wybrać co najmniej jednego użytkownika, który ma zostać usunięty z kanału.",
"mobile.channel.markAsRead": "Oznacz Jako Przeczytane",
"mobile.client_upgrade": "Zaktualizuj Aplikacje",
"mobile.client_upgrade.can_upgrade_subtitle": "Nowa wersja jest dostępna do pobrania.",
"mobile.client_upgrade.can_upgrade_title": "Dostępna Aktualizacja",
"mobile.client_upgrade.close": "Zaktualizuj Później",
"mobile.client_upgrade.current_version": "Wersja Serwera: {version}",
"mobile.client_upgrade.download_error.message": "Wystąpił błąd podczas pobierania nowej wersji.",
"mobile.client_upgrade.download_error.title": "Nie można Zainstalować Aktualizacji",
"mobile.client_upgrade.latest_version": "Wersja Serwera: {version}",
"mobile.client_upgrade.listener.dismiss_button": "Odrzuć",
"mobile.client_upgrade.listener.learn_more_button": "Learn More",
"mobile.client_upgrade.listener.message": "A client upgrade is available!",
"mobile.client_upgrade.listener.upgrade_button": "Upgrade",
@@ -188,6 +201,7 @@
"mobile.create_channel.public": "Nowy kanał publiczny",
"mobile.create_post.read_only": "This channel is read-only",
"mobile.custom_list.no_results": "Brak wyników",
"mobile.display_settings.theme": "Motyw",
"mobile.document_preview.failed_description": "An error occurred while opening the document. Please make sure you have a {fileType} viewer installed and try again.\n",
"mobile.document_preview.failed_title": "Open Document failed",
"mobile.downloader.android_complete": "Download complete",
@@ -201,13 +215,13 @@
"mobile.downloader.downloading": "Downloading...",
"mobile.downloader.failed_description": "An error occurred while downloading the file. Please check your internet connection and try again.\n",
"mobile.downloader.failed_title": "Download failed",
"mobile.downloader.image_saved": "Image Saved",
"mobile.downloader.image_saved": "Obraz Zapisany",
"mobile.downloader.video_saved": "Video Saved",
"mobile.drawer.teamsTitle": "Zespoły",
"mobile.edit_channel": "Zapisz",
"mobile.edit_post.title": "Edycja Wiadomości",
"mobile.emoji_picker.activity": "AKTYWNOŚCI",
"mobile.emoji_picker.custom": "CUSTOM",
"mobile.emoji_picker.custom": "NIESTANDARDOWE",
"mobile.emoji_picker.flags": "FLAGS",
"mobile.emoji_picker.foods": "JEDZENIE",
"mobile.emoji_picker.nature": "NATURE",
@@ -227,100 +241,110 @@
"mobile.extension.posting": "Testowanie...",
"mobile.extension.title": "Share in Mattermost",
"mobile.failed_network_action.description": "There seems to be a problem with your internet connection. Make sure you have an active connection and try again.",
"mobile.failed_network_action.retry": "Spróbuj ponownie",
"mobile.failed_network_action.retry": "Spróbuj Ponownie",
"mobile.failed_network_action.shortDescription": "Make sure you have an active connection and try again.",
"mobile.failed_network_action.title": "Brak połączenia z internetem",
"mobile.file_upload.browse": "Browse Files",
"mobile.file_upload.camera": "Zrób Zdjęcie lub nagraj Film",
"mobile.file_upload.browse": "Przeglądaj Pliki",
"mobile.file_upload.camera_photo": "Zrób Zdjęcie",
"mobile.file_upload.camera_video": "Zapisz Wideo",
"mobile.file_upload.library": "Biblioteka Zdjęć",
"mobile.file_upload.max_warning": "Uploads limited to 5 files maximum.",
"mobile.file_upload.video": "Biblioteka wideo",
"mobile.flagged_posts.empty_description": "Oznaczanie wiadomości stanowi sposób ich zapisywania \"na później\". Twoje flagi są poufne i nie są widoczne dla innych użytkowników.",
"mobile.flagged_posts.empty_title": "Oznaczone posty",
"mobile.help.title": "Pomoc",
"mobile.image_preview.save": "Zapisz obraz",
"mobile.image_preview.save_video": "Save Video",
"mobile.intro_messages.default_message": "To jest pierwszy kanał który zobaczą członkowie zespołu po zarejestrowaniu się - używaj go do publikowania informacji, o których wszyscy muszą wiedzieć.",
"mobile.image_preview.save": "Zapisz Obraz",
"mobile.image_preview.save_video": "Zapisz Wideo",
"mobile.intro_messages.default_message": "To jest pierwszy kanał, który zobaczą członkowie zespołu po zarejestrowaniu się - używaj go do publikowania informacji, o których wszyscy muszą wiedzieć.",
"mobile.intro_messages.default_welcome": "Witaj w {name}!",
"mobile.intro_messages.DM": "To początek historii wiadomości z użytkownikiem {teammate}. Bezpośrednie wiadomości i wysłane w nich pliki nie są widoczne dla osób spoza tego obszaru.",
"mobile.ios.photos_permission_denied_description": "To save images and videos to your library, please change your permission settings.",
"mobile.ios.photos_permission_denied_description": "Aby zapisać obrazy i filmy do biblioteki, proszę zmień swoje ustawienia uprawnień.",
"mobile.join_channel.error": "Nie można dołączyć do kanału {displayName}. Sprawdź swoje połączenie i spróbuj ponownie.",
"mobile.loading_channels": "Wczytuję kanały...",
"mobile.loading_members": "Wczytuję członków...",
"mobile.loading_posts": "Wczytuję wiadomości...",
"mobile.loading_channels": "Wczytuję Kanały...",
"mobile.loading_members": "Wczytuję Członków...",
"mobile.loading_options": "Wczytuję Opcje...",
"mobile.loading_posts": "Wczytuję Wiadomości...",
"mobile.login_options.choose_title": "Wybierz metodę logowania",
"mobile.long_post_title": "{channelName} - Post",
"mobile.managed.blocked_by": "Blocked by {vendor}",
"mobile.long_post_title": "{channelName} - Wiadomość",
"mobile.managed.blocked_by": "Zablokowany przez {vendor}",
"mobile.managed.exit": "Edycja",
"mobile.managed.jailbreak": "Jailbroken devices are not trusted by {vendor}, please exit the app.",
"mobile.managed.secured_by": "Secured by {vendor}",
"mobile.markdown.code.copy_code": "Copy Code",
"mobile.markdown.code.plusMoreLines": " oraz {count, number} inny/ch {count, plural, one {file} other {files}}",
"mobile.markdown.image.error": "Image failed to load:",
"mobile.managed.secured_by": "Zabezpieczony przez {vendor}",
"mobile.markdown.code.copy_code": "Skopiuj Kod",
"mobile.markdown.code.plusMoreLines": "+{count, number} więcej {count, plural, one {line} other {lines}}",
"mobile.markdown.image.too_large": "Image exceeds max dimensions of {maxWidth} by {maxHeight}:",
"mobile.markdown.link.copy_url": "Copy URL",
"mobile.markdown.link.copy_url": "Kopiuj URL",
"mobile.mention.copy_mention": "Copy Mention",
"mobile.message_length.message": "Your current message is too long. Current character count: {max}/{count}",
"mobile.message_length.title": "Message Length",
"mobile.more_dms.add_more": "You can add {remaining, number} more users",
"mobile.more_dms.cannot_add_more": "You cannot add more users",
"mobile.message_length.message": "Twoja aktualna wiadomość jest za długa. Aktualna liczba znaków: {max}/{count}",
"mobile.message_length.title": "Długość Wiadomości",
"mobile.more_dms.add_more": "Możesz dodać {remaining, number} użytkowników więcej",
"mobile.more_dms.cannot_add_more": "Nie możesz dodać więcej użytkowników",
"mobile.more_dms.start": "Start",
"mobile.more_dms.title": "New Conversation",
"mobile.more_dms.you": "(@{username} - you)",
"mobile.notice_mobile_link": "mobile apps",
"mobile.notice_platform_link": "server",
"mobile.more_dms.title": "Nowa Rozmowa",
"mobile.more_dms.you": "@{username} - ty",
"mobile.notice_mobile_link": "aplikacje mobilne",
"mobile.notice_platform_link": "serwer",
"mobile.notice_text": "Mattermost is made possible by the open source software used in our {platform} and {mobile}.",
"mobile.notification_settings_mentions.keywords": "Słowa kluczowe:",
"mobile.notification_settings_mentions.keywordsDescription": "Other words that trigger a mention",
"mobile.notification_settings_mentions.keywordsDescription": "Inne słowa, które uruchamiają wzmianki",
"mobile.notification_settings_mentions.keywordsHelp": "Keywords are non-case sensitive and should be separated by a comma.",
"mobile.notification_settings_mentions.wordsTrigger": "WORDS THAT TRIGGER MENTIONS",
"mobile.notification_settings_mobile.default_sound": "Default ({sound})",
"mobile.notification_settings_mentions.wordsTrigger": "SŁOWA, KTÓRE URUCHAMIAJĄ WZMIANKI",
"mobile.notification_settings_mobile.default_sound": "Domyślny ({sound})",
"mobile.notification_settings_mobile.light": "Light",
"mobile.notification_settings_mobile.no_sound": "Brak",
"mobile.notification_settings_mobile.push_activity": "SEND NOTIFICATIONS",
"mobile.notification_settings_mobile.push_activity": "WYŚLIJ POWIADOMIENIA",
"mobile.notification_settings_mobile.push_activity_android": "Wyślij powiadomienia o odpowiedzi do",
"mobile.notification_settings_mobile.push_status": "WYSYŁAJ POWIADOMIENIA GDY",
"mobile.notification_settings_mobile.push_status": "WYSYŁAJ POWIADOMIENIA PUSH GDY",
"mobile.notification_settings_mobile.push_status_android": "Wysyłaj powiadomienia push gdy",
"mobile.notification_settings_mobile.sound": "Sound",
"mobile.notification_settings_mobile.sound": "Dźwięk",
"mobile.notification_settings_mobile.sounds_title": "Dźwięk powiadomień",
"mobile.notification_settings_mobile.test": "Send me a test notification",
"mobile.notification_settings_mobile.test_push": "This is a test push notification",
"mobile.notification_settings_mobile.test": "Wyślij mi testowe powiadomienie",
"mobile.notification_settings_mobile.test_push": "To jest powiadomienie testowe push",
"mobile.notification_settings_mobile.vibrate": "Wibracje",
"mobile.notification_settings.auto_responder_short": "Automatic Replies",
"mobile.notification_settings.auto_responder.default_message": "Hello, I am out of office and unable to respond to messages.",
"mobile.notification_settings.auto_responder.enabled": "Enabled",
"mobile.notification_settings.auto_responder.footer_message": "Set a custom message that will be automatically sent in response to Direct Messages. Mentions in Public and Private Channels will not trigger the automated reply. Enabling Automatic Replies sets your status to Out of Office and disables email and push notifications.",
"mobile.notification_settings.auto_responder_short": "Automatyczne Odpowiedzi",
"mobile.notification_settings.auto_responder.default_message": "Witaj, jestem niedostępny i nie mogę obecnie odpowiadać na wiadomości.",
"mobile.notification_settings.auto_responder.enabled": "Włączony",
"mobile.notification_settings.auto_responder.footer_message": "Ustaw niestandardową wiadomość, która zostanie automatycznie wysłana w odpowiedzi na Wiadomości Bezpośrednie. Wzmianki na Kanałach Publicznych i Prywatnych nie uruchamiają automatycznej odpowiedzi. Włączenie Automatycznych Odpowiedzi ustawia twój status na Nieobecny i wyłącza powiadomienia email i push.",
"mobile.notification_settings.auto_responder.message_placeholder": "Wiadomość",
"mobile.notification_settings.auto_responder.message_title": "CUSTOM MESSAGE",
"mobile.notification_settings.email": "E-mail",
"mobile.notification_settings.email_title": "Powiadomienie e-mail",
"mobile.notification_settings.email.send": "SEND EMAIL NOTIFICATIONS",
"mobile.notification_settings.mentions_replies": "Mentions and Replies",
"mobile.notification_settings.mentions.channelWide": "Channel-wide mentions",
"mobile.notification_settings.auto_responder.message_title": "WIADOMOŚĆ NIESTANDARDOWA",
"mobile.notification_settings.email": "Email",
"mobile.notification_settings.email_title": "Powiadomienia Email",
"mobile.notification_settings.email.send": "WYŚLIJ POWIADOMIENIA EMAIL",
"mobile.notification_settings.mentions_replies": "Wzmianki i Odpowiedzi",
"mobile.notification_settings.mentions.channelWide": "Wzmianki na kanale",
"mobile.notification_settings.mentions.reply_title": "Wyślij powiadomienia o odpowiedzi do",
"mobile.notification_settings.mentions.sensitiveName": "Your case sensitive first name",
"mobile.notification_settings.mentions.sensitiveUsername": "Your non-case sensitive username",
"mobile.notification_settings.mentions.sensitiveName": "Twoje imię z rozróżnianiem wielkich i małych liter",
"mobile.notification_settings.mentions.sensitiveUsername": "Twoja nazwa użytkownika bez rozróżniania wielkości liter",
"mobile.notification_settings.mobile": "Mobile",
"mobile.notification_settings.mobile_title": "Powiadomienia mobilne push",
"mobile.notification_settings.modal_cancel": "CANCEL",
"mobile.notification_settings.modal_save": "SAVE",
"mobile.notification_settings.ooo_auto_responder": "Automatic Direct Message Replies",
"mobile.notification_settings.save_failed_description": "Ustawienia powiadomień nie zostały zapisane z powodu problemu z połączeniem, spróubuj ponownie.",
"mobile.notification_settings.save_failed_title": "Connection issue",
"mobile.notification_settings.modal_cancel": "ANULUJ",
"mobile.notification_settings.modal_save": "ZAPISZ",
"mobile.notification_settings.ooo_auto_responder": "Automatyczne Odpowiedzi na Wiadomości Bezpośrednie",
"mobile.notification_settings.save_failed_description": "Ustawienia powiadomień nie zostały zapisane z powodu problemu z połączeniem, spróbuj ponownie.",
"mobile.notification_settings.save_failed_title": "Problem z połączeniem",
"mobile.notification.in": " w ",
"mobile.offlineIndicator.connected": "Połączono",
"mobile.offlineIndicator.connecting": "Łączenie...",
"mobile.offlineIndicator.offline": "Cannot connect to the server",
"mobile.offlineIndicator.offline": "Brak połączenia z internetem",
"mobile.open_dm.error": "Nie można dołączyć do kanału {displayName}. Sprawdź swoje połączenie i spróbuj ponownie.",
"mobile.open_gm.error": "Nie możemy otworzyć wiadomości grupowej z tymi użytkownikami. Sprawdź połączenie i spróbuj ponownie.",
"mobile.open_unknown_channel.error": "Unable to join the channel. Please reset the cache and try again.",
"mobile.post_info.add_reaction": "Add Reaction",
"mobile.post_info.copy_post": "Copy Post",
"mobile.pinned_posts.empty_description": "Pin important items by holding down on any message and selecting \"Pin to Channel\".",
"mobile.pinned_posts.empty_title": "Przypięte posty",
"mobile.post_info.add_reaction": "Dodaj Reakcję",
"mobile.post_info.copy_text": "Kopiuj Tekst",
"mobile.post_info.flag": "Oflaguj",
"mobile.post_info.pin": "Przypnij do kanału",
"mobile.post_info.unflag": "Usuń flagę",
"mobile.post_info.unpin": "Odepnij od kanału",
"mobile.post_pre_header.flagged": "Flagged",
"mobile.post_pre_header.pinned": "Przypięty",
"mobile.post_pre_header.pinned_flagged": "Pinned and Flagged",
"mobile.post_textbox.empty.message": "You are trying to send an empty message.\nPlease make sure you have a message or at least one attached file.",
"mobile.post_textbox.empty.ok": "OK",
"mobile.post_textbox.empty.title": "Empty Message",
"mobile.post_textbox.uploadFailedDesc": "Some attachments failed to upload to the server, Are you sure you want to post the message?",
"mobile.post_textbox.uploadFailedTitle": "Attachment failure",
"mobile.post_textbox.empty.title": "Pusta Wiadomość",
"mobile.post_textbox.uploadFailedDesc": "Niektórych załączników nie udało się przesłać na serwer. Czy na pewno chcesz opublikować wiadomość?",
"mobile.post_textbox.uploadFailedTitle": "Błąd załącznika",
"mobile.post.cancel": "Anuluj",
"mobile.post.delete_question": "Czy na pewno chcesz usunąć ten post?",
"mobile.post.delete_title": "Usuń wiadomość",
@@ -328,14 +352,14 @@
"mobile.post.failed_retry": "Spróbuj ponownie",
"mobile.post.failed_title": "Nie można wysłać wiadomości",
"mobile.post.retry": "Odśwież",
"mobile.posts_view.moreMsg": "More New Messages Above",
"mobile.recent_mentions.empty_description": "Messages containing your username and other words that trigger mentions will appear here.",
"mobile.recent_mentions.empty_title": "Ostatnie wzmianki",
"mobile.rename_channel.display_name_maxLength": "Channel name must be less than {maxLength, number} characters",
"mobile.posts_view.moreMsg": "Więcej Nowych Wiadomości Powyżej",
"mobile.recent_mentions.empty_description": "W tym miejscu pojawią się wiadomości zawierające Twoją nazwę użytkownika i inne słowa, które będą wyzwalać wzmianki.",
"mobile.recent_mentions.empty_title": "Brak Ostatnich Wzmianek",
"mobile.rename_channel.display_name_maxLength": "Nazwa kanału musi posiadać mniej niż {maxLength, number} znaków",
"mobile.rename_channel.display_name_minLength": "Channel name must be {minLength, number} or more characters",
"mobile.rename_channel.display_name_required": "Channel name is required",
"mobile.rename_channel.name_lowercase": "Musi składać się z alfanumerycznych znaków z małej litery",
"mobile.rename_channel.name_maxLength": "URL must be less than {maxLength, number} characters",
"mobile.rename_channel.name_maxLength": "Nazwa kanału musi posiadać mniej niż {maxLength, number} znaków",
"mobile.rename_channel.name_minLength": "URL must be {minLength, number} or more characters",
"mobile.rename_channel.name_required": "URL is required",
"mobile.reply_post.failed": "Message failed to send.",
@@ -349,25 +373,25 @@
"mobile.routes.channel_members.action_message_confirm": "Czy na pewno chcesz usunąć wybranych użytkowników z kanału?",
"mobile.routes.channelInfo": "Informacje",
"mobile.routes.channelInfo.createdBy": "Utworzono przez {creator}, dnia ",
"mobile.routes.channelInfo.delete_channel": "Archive Channel",
"mobile.routes.channelInfo.delete_channel": "Archiwizuj kanał",
"mobile.routes.channelInfo.favorite": "Ulubiony",
"mobile.routes.code": "{language} Code",
"mobile.routes.code.noLanguage": "Code",
"mobile.routes.edit_profile": "Edit Profile",
"mobile.routes.code": "{language} Kod",
"mobile.routes.code.noLanguage": "Kod",
"mobile.routes.edit_profile": "Edytuj Profil",
"mobile.routes.login": "Logowanie",
"mobile.routes.loginOptions": "Wybór logowania",
"mobile.routes.mfa": "Uwierzytelnianie wieloskładnikowe",
"mobile.routes.selectChannel": "Usuń kanał",
"mobile.routes.selectTeam": "Wybierz zespół",
"mobile.routes.loginOptions": "Wybór Logowania",
"mobile.routes.mfa": "Uwierzytelnianie Wieloskładnikowe",
"mobile.routes.selectChannel": "Wybierz Kanał",
"mobile.routes.selectTeam": "Wybierz Zespół",
"mobile.routes.settings": "Ustawienia",
"mobile.routes.sso": "Single SignOn",
"mobile.routes.table": "Table",
"mobile.routes.table": "Tabela",
"mobile.routes.tableImage": "Obraz",
"mobile.routes.thread": "{channelName} Thread",
"mobile.routes.thread_dm": "Direct Message Thread",
"mobile.routes.user_profile": "Profil",
"mobile.routes.user_profile.local_time": "LOCAL TIME",
"mobile.routes.user_profile.send_message": "Wyślij wiadomość",
"mobile.routes.user_profile.local_time": "CZAS LOKALNY",
"mobile.routes.user_profile.send_message": "Wyślij Wiadomość",
"mobile.search.after_modifier_description": "to find posts after a specific date",
"mobile.search.before_modifier_description": "to find posts before a specific date",
"mobile.search.from_modifier_description": "to find posts from specific users",
@@ -385,11 +409,11 @@
"mobile.server_upgrade.title": "Wymagane uaktualnienie serwera",
"mobile.server_url.invalid_format": "Adres musi zaczynać się od http:// lub https://",
"mobile.session_expired": "Sesja wygasła: zaloguj się, aby kontynuować otrzymywanie powiadomień.",
"mobile.set_status.away": "Zaraz wracam",
"mobile.set_status.away": "Nieobecny",
"mobile.set_status.dnd": "Nie przeszkadzać",
"mobile.set_status.offline": "Offline",
"mobile.set_status.online": "Online",
"mobile.settings.modal.check_for_upgrade": "Check for Updates",
"mobile.set_status.online": "Dostępny",
"mobile.settings.modal.check_for_upgrade": "Sprawdź Aktualizacje",
"mobile.share_extension.cancel": "Anuluj",
"mobile.share_extension.channel": "Kanał",
"mobile.share_extension.error_close": "Zamknij",
@@ -397,11 +421,18 @@
"mobile.share_extension.error_title": "Extension Error",
"mobile.share_extension.post_error": "An error has occurred while posting the message. Please try again.",
"mobile.share_extension.send": "Wyślij",
"mobile.share_extension.team": "Zespoły",
"mobile.share_extension.team": "Zespół",
"mobile.suggestion.members": "Użytkownicy",
"mobile.timezone_settings.automatically": "Set automatically",
"mobile.timezone_settings.manual": "Change timezone",
"mobile.terms_of_service.alert_cancel": "Anuluj",
"mobile.terms_of_service.alert_ok": "OK",
"mobile.terms_of_service.alert_retry": "Spróbuj Ponownie",
"mobile.terms_of_service.get_terms_error_description": "Make sure you have an active internet connection and try again. If this issue persists, contact your System Administrator.",
"mobile.terms_of_service.get_terms_error_title": "Unable to load terms of service.",
"mobile.terms_of_service.terms_rejected": "You must agree to the terms of service before accessing {siteName}. Please contact your System Administrator for more details.",
"mobile.timezone_settings.automatically": "Ustaw automatycznie",
"mobile.timezone_settings.manual": "Zmień strefę czasową",
"mobile.timezone_settings.select": "Select Timezone",
"mobile.user_list.deactivated": "Dezaktywuj",
"mobile.user.settings.notifications.email.fifteenMinutes": "Every 15 minutes",
"mobile.video_playback.failed_description": "An error occurred while trying to play the video.\n",
"mobile.video_playback.failed_title": "Video playback failed",
@@ -410,12 +441,12 @@
"mobile.youtube_playback_error.description": "An error occurred while trying to play the YouTube video.\nDetails: {details}",
"mobile.youtube_playback_error.title": "YouTube playback error",
"modal.manual_status.auto_responder.message_": "Would you like to switch your status to \"{status}\" and disable Automatic Replies?",
"modal.manual_status.auto_responder.message_away": "Would you like to switch your status to \"Away\" and disable Automatic Replies?",
"modal.manual_status.auto_responder.message_away": "Czy chcesz zmienić swój status na \"Zaraz Wracam\" i wyłączyć automatyczne odpowiedzi?",
"modal.manual_status.auto_responder.message_dnd": "Would you like to switch your status to \"Do Not Disturb\" and disable Automatic Replies?",
"modal.manual_status.auto_responder.message_offline": "Would you like to switch your status to \"Offline\" and disable Automatic Replies?",
"modal.manual_status.auto_responder.message_online": "Would you like to switch your status to \"Online\" and disable Automatic Replies?",
"more_channels.title": "Więcej kanałów",
"more_direct_channels.directchannel.deactivated": "{displayname} - Deactivated",
"more_channels.noMore": "Brak kanałów",
"more_channels.title": "Więcej Kanałów",
"msg_typing.areTyping": "{users} i {last} piszą...",
"msg_typing.isTyping": "{user} pisze...",
"navbar_dropdown.logout": "Wyloguj",
@@ -433,41 +464,36 @@
"post_body.check_for_out_of_channel_mentions.message_last": "? They will have access to all message history.",
"post_body.check_for_out_of_channel_mentions.message.multiple": "were mentioned but they are not in the channel. Would you like to ",
"post_body.check_for_out_of_channel_mentions.message.one": "was mentioned but is not in the channel. Would you like to ",
"post_body.commentedOn": "Skomentował wiadomość {name}: ",
"post_body.commentedOn": "Commented on {name}'s message: ",
"post_body.deleted": "(wiadomość usunięta)",
"post_info.auto_responder": "AUTOMATIC REPLY",
"post_info.auto_responder": "AUTOMATYCZNA ODPOWIEDŹ",
"post_info.bot": "BOT",
"post_info.del": "Usuń",
"post_info.edit": "Edytuj",
"post_info.message.show_less": "Show Less",
"post_info.message.show_more": "Show More",
"post_info.mobile.flag": "Oflaguj",
"post_info.mobile.unflag": "Usuń flagę",
"post_info.message.show_less": "Pokaż Mniej",
"post_info.message.show_more": "Pokaż Więcej",
"post_info.system": "System",
"post_message_view.edited": "(edytowany)",
"posts_view.newMsg": "Nowe wiadomości",
"posts_view.newMsg": "Nowe Wiadomości",
"quick_switch_modal.teams": "Warunki",
"rename_channel.handleHolder": "alfanumeryczne znaki z małej litery",
"rename_channel.url": "Adres URL:",
"rhs_thread.rootPostDeletedMessage.body": "Part of this thread has been deleted due to a data retention policy. You can no longer reply to this thread.",
"search_bar.search": "Szukaj",
"search_header.results": "Wyniki wyszukiwania",
"search_header.title2": "Ostatnie wzmianki",
"search_header.title2": "Ostatnie Wzmianki",
"search_header.title3": "Oznaczone posty",
"search_item.channelArchived": "Archived",
"sidebar_right_menu.logout": "Wyloguj",
"sidebar_right_menu.report": "Zgłoś problem",
"sidebar.channels": "PUBLIC CHANNELS",
"sidebar.direct": "DIRECT MESSAGES",
"sidebar.favorite": "FAVORITE CHANNELS",
"sidebar.pg": "PRIVATE CHANNELS",
"sidebar.unreads": "More unreads",
"sidebar_right_menu.report": "Zgłoś Problem",
"sidebar.direct": "WIADOMOŚCI BEZPOŚREDNIE",
"sidebar.unreads": "Więcej nieprzeczytanych",
"signup.email": "E-mail i hasło",
"status_dropdown.set_away": "Zaraz wracam",
"status_dropdown.set_dnd": "Nie przeszkadzać",
"status_dropdown.set_offline": "Offline",
"status_dropdown.set_online": "Online",
"status_dropdown.set_ooo": "Out of Office",
"status_dropdown.set_online": "Dostępny",
"status_dropdown.set_ooo": "Poza Biurem",
"suggestion.mention.all": "OSTRZEŻENIE: wspomina wszystkich na kanale",
"suggestion.mention.channel": "Powiadamia wszystkich na kanale",
"suggestion.mention.channels": "Moje kanały",
@@ -476,8 +502,11 @@
"suggestion.mention.morechannels": "Inne kanały",
"suggestion.mention.nonmembers": "Nie na kanale",
"suggestion.mention.special": "Specjalne wzmianki",
"suggestion.search.direct": "Wiadomości bezpośrednie",
"suggestion.search.private": "Kanały prywatne",
"suggestion.search.public": "Kanały publiczne",
"terms_of_service.agreeButton": "Zgadzam się",
"terms_of_service.api_error": "Nie można ukończyć żądania. Jeśli ten problem będzie się powtarzał, skontaktuj się z Administratorem Systemu.",
"user.settings.display.clockDisplay": "Wyświetlanie czasu",
"user.settings.display.militaryClock": "24-godzinny (przykład: 16:00)",
"user.settings.display.normalClock": "12-godzinny (przykład: 4:00 pm)",

View File

@@ -17,6 +17,7 @@
"channel_header.addMembers": "Adicionar Membros",
"channel_header.directchannel.you": "{displayname} (você) ",
"channel_header.manageMembers": "Gerenciar Membros",
"channel_header.pinnedPosts": "Posts Fixados",
"channel_header.viewMembers": "Ver Membros",
"channel_info.header": "Cabeçalho:",
"channel_info.purpose": "Propósito:",
@@ -69,6 +70,7 @@
"edit_post.save": "Salvar",
"error.team_not_found.title": "Equipe Não Encontrado",
"file_attachment.download": "Download",
"file_upload.fileAbove": "Arquivo acima {max}MB não pode ser enviado: {filename}",
"get_post_link_modal.title": "Copiar Permalink",
"integrations.add": "Adicionar",
"intro_messages.anyMember": " Qualquer membro pode participar e ler este canal.",
@@ -97,7 +99,14 @@
"login.invalidPassword": "Sua senha está incorreta.",
"login.ldapUsername": "Usuário AD/LDAP",
"login.ldapUsernameLower": "Usuário AD/LDAP",
"login.noEmail": "Por favor digite seu email",
"login.noEmailLdapUsername": "Por favor digite seu email ou {ldapUsername}",
"login.noEmailUsername": "Por favor digite seu email ou usuário",
"login.noEmailUsernameLdapUsername": "Por favor digite seu email, usuário ou {ldapUsername}",
"login.noLdapUsername": "Por favor digite seu {ldapUsername}",
"login.noPassword": "Por favor digite a sua senha",
"login.noUsername": "Por favor digite seu usuário",
"login.noUsernameLdapUsername": "Por favor digite seu usuário ou {ldapUsername}",
"login.or": "ou",
"login.password": "Senha",
"login.signIn": "Login",
@@ -115,8 +124,7 @@
"mobile.account_notifications.threads_start": "Tópicos que eu iniciei",
"mobile.account_notifications.threads_start_participate": "Tópicos que eu iniciei ou participo",
"mobile.account.settings.save": "Salvar",
"mobile.action_menu.select": "Select an option",
"mobile.action_menu.submitted": "Submitted",
"mobile.action_menu.select": "Selecione uma opção",
"mobile.advanced_settings.clockDisplay": "Exibição do relógio",
"mobile.advanced_settings.delete": "Excluir",
"mobile.advanced_settings.delete_file_cache": "Apagar Cache de Arquivos.",
@@ -139,6 +147,10 @@
"mobile.announcement_banner.title": "Anúncio",
"mobile.authentication_error.message": "Mattermost encontrou um erro. Por favor autentique novamente para iniciar uma nova sessão.",
"mobile.authentication_error.title": "Error de Autenticação",
"mobile.calendar.dayNames": "Domingo,Segunda,Terça,Quarta,Quinta,Sexta,Sábado",
"mobile.calendar.dayNamesShort": "Dom,Seg,Ter,Qua,Qui,Sex,Sab",
"mobile.calendar.monthNames": "Janeiro,Fevereiro,Março,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro",
"mobile.calendar.monthNamesShort": "Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez",
"mobile.channel_drawer.search": "Pular para...",
"mobile.channel_info.alertMessageDeleteChannel": "Você tem certeza que quer arquivar o {term} {name}?",
"mobile.channel_info.alertMessageLeaveChannel": "Você tem certeza que quer deixar o {term} {name}?",
@@ -158,6 +170,7 @@
"mobile.channel_list.members": "MEMBROS",
"mobile.channel_list.not_member": "NÃO É UM MEMBRO",
"mobile.channel_list.unreads": "NÃO LIDOS",
"mobile.channel_members.add_members_alert": "Você deve selecionar pelo menos um membro para adicionar ao canal.",
"mobile.channel.markAsRead": "Marcar Como Lido",
"mobile.client_upgrade": "Atualizar App",
"mobile.client_upgrade.can_upgrade_subtitle": "Uma nova versão está disponível para download.",
@@ -168,9 +181,9 @@
"mobile.client_upgrade.download_error.title": "Não é possível instalar a atualização",
"mobile.client_upgrade.latest_version": "Sua Versão: {version}",
"mobile.client_upgrade.listener.dismiss_button": "Ignorar",
"mobile.client_upgrade.listener.learn_more_button": "Learn More",
"mobile.client_upgrade.listener.learn_more_button": "Saiba Mais",
"mobile.client_upgrade.listener.message": "Uma atualização do cliente disponível!",
"mobile.client_upgrade.listener.upgrade_button": "Upgrade",
"mobile.client_upgrade.listener.upgrade_button": "Atualizar",
"mobile.client_upgrade.must_upgrade_subtitle": "Por favor atualize o app para continuar.",
"mobile.client_upgrade.must_upgrade_title": "Atualização Requerida",
"mobile.client_upgrade.no_upgrade_subtitle": "Você já possui a última versão.",
@@ -188,6 +201,7 @@
"mobile.create_channel.public": "Novo Canal Público",
"mobile.create_post.read_only": "Este canal é de apenas leitura",
"mobile.custom_list.no_results": "Nenhum Resultado",
"mobile.display_settings.theme": "Tema",
"mobile.document_preview.failed_description": "Um erro aconteceu durante a abertura do documento. Por favor verifique que você tem o visualizador para {fileType} instalado e tente novamente.\n",
"mobile.document_preview.failed_title": "Falha ao Abrir o Documento",
"mobile.downloader.android_complete": "Download concluído",
@@ -231,7 +245,8 @@
"mobile.failed_network_action.shortDescription": "Certifique-se de ter uma conexão ativa e tente novamente.",
"mobile.failed_network_action.title": "Sem conexão com a internet",
"mobile.file_upload.browse": "Navegar pelos Arquivos",
"mobile.file_upload.camera": "Tirar Foto ou Vídeo",
"mobile.file_upload.camera_photo": "Tirar Foto",
"mobile.file_upload.camera_video": "Criar Vídeo",
"mobile.file_upload.library": "Biblioteca de Fotos",
"mobile.file_upload.max_warning": "Upload limitado ao máximo de 5 arquivos.",
"mobile.file_upload.video": "Galeria de Videos",
@@ -247,6 +262,7 @@
"mobile.join_channel.error": "Não foi possível entrar no canal {displayName}. Por favor verifique a sua conexão e tente novamente.",
"mobile.loading_channels": "Carregando Canais...",
"mobile.loading_members": "Carregando Membros...",
"mobile.loading_options": "Carregando Opções...",
"mobile.loading_posts": "Carregando Mensagens...",
"mobile.login_options.choose_title": "Escolha seu método de login",
"mobile.long_post_title": "{channelName} - Post",
@@ -256,7 +272,6 @@
"mobile.managed.secured_by": "Garantido por {vendor}",
"mobile.markdown.code.copy_code": "Copiar Código",
"mobile.markdown.code.plusMoreLines": "+{count, number} mais {count, plural, one {linha} other {linhas}}",
"mobile.markdown.image.error": "Imagem de falha de carregamento:",
"mobile.markdown.image.too_large": "A imagem excede as dimensões máximas de {maxWidth} por {maxHeight}:",
"mobile.markdown.link.copy_url": "Copiar URL",
"mobile.mention.copy_mention": "Copiar Menção",
@@ -266,7 +281,7 @@
"mobile.more_dms.cannot_add_more": "Você não pode adicionar mais usuários",
"mobile.more_dms.start": "Início",
"mobile.more_dms.title": "Nova Conversa",
"mobile.more_dms.you": "(@{username} - você)",
"mobile.more_dms.you": "@{username} - você",
"mobile.notice_mobile_link": "aplicativos móveis",
"mobile.notice_platform_link": "servidor",
"mobile.notice_text": "Mattermost é possível graças ao software open source na nossa {platform} e {mobile}.",
@@ -294,7 +309,7 @@
"mobile.notification_settings.auto_responder.message_title": "MENSAGEM PERSONALIZADA",
"mobile.notification_settings.email": "E-mail",
"mobile.notification_settings.email_title": "Notificações por email",
"mobile.notification_settings.email.send": "ENVIAR NOTIFICAÇÕES",
"mobile.notification_settings.email.send": "ENVIAR NOTIFICAÇÕES POR EMAIL",
"mobile.notification_settings.mentions_replies": "Menções e Respostas",
"mobile.notification_settings.mentions.channelWide": "Menções de todo canal",
"mobile.notification_settings.mentions.reply_title": "Enviar notificações de resposta para",
@@ -310,16 +325,25 @@
"mobile.notification.in": " em ",
"mobile.offlineIndicator.connected": "Conectado",
"mobile.offlineIndicator.connecting": "Conectando...",
"mobile.offlineIndicator.offline": "Não foi possível conectar ao servidor",
"mobile.offlineIndicator.offline": "Sem conexão com a internet",
"mobile.open_dm.error": "Não foi possível entrar nas mensagens diretas com {displayName}. Por favor verifique a sua conexão e tente novamente.",
"mobile.open_gm.error": "Não foi possível abrir uma mensagem em grupo com esses usuários. Por favor verifique sua conexão e tente novamente.",
"mobile.open_unknown_channel.error": "Não é possível entrar no canal. Por favor, limpe o cache e tente novamente.",
"mobile.pinned_posts.empty_description": "Fixe itens importantes mantendo pressionado em qualquer mensagem e selecione \"Fixar no Canal\".",
"mobile.pinned_posts.empty_title": "Publicações Fixadas",
"mobile.post_info.add_reaction": "Adicionar Reação",
"mobile.post_info.copy_post": "Copiar Post",
"mobile.post_info.copy_text": "Copiar Texto",
"mobile.post_info.flag": "Marcar",
"mobile.post_info.pin": "Fixar no Canal",
"mobile.post_info.unflag": "Desmarcar",
"mobile.post_info.unpin": "Desafixar do Canal",
"mobile.post_pre_header.flagged": "Marcado",
"mobile.post_pre_header.pinned": "Fixado",
"mobile.post_pre_header.pinned_flagged": "Fixado e Marcado",
"mobile.post_textbox.empty.message": "Você está tentando enviar uma mensagem vazia.\nCertifique-se de ter uma mensagem ou pelo menos um arquivo em anexo.",
"mobile.post_textbox.empty.ok": "OK",
"mobile.post_textbox.empty.title": "Mensagem Vazia",
"mobile.post_textbox.uploadFailedDesc": "Alguns anexos não foram enviados para o servidor. Tem certeza de que deseja postar a mensagem?",
"mobile.post_textbox.uploadFailedDesc": "Alguns anexos não foram enviados para o servidor. Tem certeza de que deseja publicar a mensagem?",
"mobile.post_textbox.uploadFailedTitle": "Falha no anexo",
"mobile.post.cancel": "Cancelar",
"mobile.post.delete_question": "Tem certeza de que deseja excluir este post?",
@@ -338,7 +362,7 @@
"mobile.rename_channel.name_maxLength": "URL deve ter menos de {maxLength, number} caracteres",
"mobile.rename_channel.name_minLength": "URL deve ter {minLength, number} caracteres ou mais",
"mobile.rename_channel.name_required": "URL é obrigatória",
"mobile.reply_post.failed": "Message failed to send.",
"mobile.reply_post.failed": "Falha ao enviar a mensagem.",
"mobile.request.invalid_response": "Recebido uma resposta inválida do servidor.",
"mobile.reset_status.alert_cancel": "Cancelar",
"mobile.reset_status.alert_ok": "Ok",
@@ -399,9 +423,16 @@
"mobile.share_extension.send": "Enviar",
"mobile.share_extension.team": "Equipes",
"mobile.suggestion.members": "Membros",
"mobile.terms_of_service.alert_cancel": "Cancelar",
"mobile.terms_of_service.alert_ok": "OK",
"mobile.terms_of_service.alert_retry": "Tente Novamente",
"mobile.terms_of_service.get_terms_error_description": "Tenha certeza que você tem uma conexão com a internet ativa e tente novamente. Se este problema persistir, contate o Administrador do Sistema.",
"mobile.terms_of_service.get_terms_error_title": "Não foi possível carregar os termos de serviço.",
"mobile.terms_of_service.terms_rejected": "Você deve concordar com os termos de serviço antes de acessar {siteName}. Por favor entre em contato com o Administrador de Sistema para mais detalhes.",
"mobile.timezone_settings.automatically": "Definir automaticamente",
"mobile.timezone_settings.manual": "Mudar fuso horário",
"mobile.timezone_settings.select": "Selecionar Fuso horário",
"mobile.user_list.deactivated": "Desativado",
"mobile.user.settings.notifications.email.fifteenMinutes": "A cada 15 minutos",
"mobile.video_playback.failed_description": "Ocorreu um erro ao tentar reproduzir o video.\n",
"mobile.video_playback.failed_title": "Erro ao realizar o playback do video",
@@ -414,8 +445,8 @@
"modal.manual_status.auto_responder.message_dnd": "Você gostaria de trocar o seu status para \"Não Perturbe\" e desativar as Respostas Automáticas?",
"modal.manual_status.auto_responder.message_offline": "Você gostaria de trocar o seu status para \"Desconectado\" e desativar as Respostas Automáticas?",
"modal.manual_status.auto_responder.message_online": "Você gostaria de trocar o seu status para \"Conectado\" e desativar as Respostas Automáticas?",
"more_channels.noMore": "Não há mais canais para participar",
"more_channels.title": "Mais Canais",
"more_direct_channels.directchannel.deactivated": "{displayname} - Desativado",
"msg_typing.areTyping": "{users} e {last} estão digitando...",
"msg_typing.isTyping": "{user} está digitando...",
"navbar_dropdown.logout": "Logout",
@@ -433,7 +464,7 @@
"post_body.check_for_out_of_channel_mentions.message_last": "? Terão acesso a todo o histórico de mensagens.",
"post_body.check_for_out_of_channel_mentions.message.multiple": "foram mencionados mas eles não estão no canal. Você gostaria de ",
"post_body.check_for_out_of_channel_mentions.message.one": "foi mencionado mas não está no canal. Você gostaria de ",
"post_body.commentedOn": "Comentário da mensagem de {name}: ",
"post_body.commentedOn": "Comentou a mensagem de {name}: ",
"post_body.deleted": "(mensagem deletada)",
"post_info.auto_responder": "RESPOSTA AUTOMÁTICA",
"post_info.bot": "BOT",
@@ -441,8 +472,6 @@
"post_info.edit": "Editar",
"post_info.message.show_less": "Mostrar Menos",
"post_info.message.show_more": "Mostrar Mais",
"post_info.mobile.flag": "Marcar",
"post_info.mobile.unflag": "Desmarcar",
"post_info.system": "Sistema",
"post_message_view.edited": "(editado)",
"posts_view.newMsg": "Novas Mensagens",
@@ -457,10 +486,7 @@
"search_item.channelArchived": "Arquivado",
"sidebar_right_menu.logout": "Logout",
"sidebar_right_menu.report": "Relatar um Problema",
"sidebar.channels": "CANAIS PÚBLICOS",
"sidebar.direct": "MENSAGENS DIRETAS",
"sidebar.favorite": "CANAIS FAVORITOS",
"sidebar.pg": "CANAIS PRIVADOS",
"sidebar.unreads": "Mais não lidos",
"signup.email": "Email e Senha",
"status_dropdown.set_away": "Ausente",
@@ -476,8 +502,11 @@
"suggestion.mention.morechannels": "Outros Canais",
"suggestion.mention.nonmembers": "Não no Canal",
"suggestion.mention.special": "Menções Especiais",
"suggestion.search.direct": "Mensagens Diretas",
"suggestion.search.private": "Canais Privados",
"suggestion.search.public": "Canais Públicos",
"terms_of_service.agreeButton": "Eu Concordo",
"terms_of_service.api_error": "Não é possível concluir o pedido. Se esse problema persistir, entre em contato com o Administrador do Sistema.",
"user.settings.display.clockDisplay": "Exibição do Relógio",
"user.settings.display.militaryClock": "Relógio de 24 horas (exemplo: 16:00)",
"user.settings.display.normalClock": "Relógio de 12 horas (exemplo: 4:00 PM)",

View File

@@ -17,6 +17,7 @@
"channel_header.addMembers": "Adăugați membri",
"channel_header.directchannel.you": "{displayname} (tine) ",
"channel_header.manageMembers": "Gestioneaza membri",
"channel_header.pinnedPosts": "Posturi salvate",
"channel_header.viewMembers": "Vezi membrii",
"channel_info.header": "Antet:",
"channel_info.purpose": "Scop:",
@@ -25,13 +26,13 @@
"channel_modal.cancel": "Anulare",
"channel_modal.descriptionHelp": "Descrieți cum trebuie folosit acest canal.",
"channel_modal.header": "Antet",
"channel_modal.headerEx": "De exemplu: &quot;[Link Title] (http://example.com)&quot;",
"channel_modal.headerEx": "De exemplu: \"[Adresa Titlu] (http://example.com)\"",
"channel_modal.headerHelp": "Setați textul care va apărea în antetul canalului de lângă numele canalului. De exemplu, includeți linkurile frecvent utilizate prin tastarea [Link Title] (http://example.com).",
"channel_modal.name": "Nume",
"channel_modal.nameEx": "De exemplu: &quot;Bugs&quot;, &quot;Marketing&quot;, &quot;客户 支持&quot;",
"channel_modal.nameEx": "De exemplu: \"Bugs\", \"Marketing\", \"客户 支持\"",
"channel_modal.optional": "(opțional)",
"channel_modal.purpose": "Scop",
"channel_modal.purposeEx": "De exemplu: &quot;Un canal pentru a trimite bug-uri și îmbunătățiri&quot;",
"channel_modal.purposeEx": "De exemplu: \"Un canal pentru a trimite bug-uri și îmbunătățiri\"",
"channel_notifications.muteChannel.settings": "Dezactivați canalul",
"combined_system_message.added_to_channel.many_expanded": "{users} și {lastUser} au fost ** adăugați la canalul ** de către {actor}.",
"combined_system_message.added_to_channel.one": "{firstUser} ** a fost adăugat la canalul ** de către {actor}.",
@@ -69,6 +70,7 @@
"edit_post.save": "Salvați",
"error.team_not_found.title": "Echipa nu a fost găsită",
"file_attachment.download": "Descarca",
"file_upload.fileAbove": "Fișier de mai sus {max} MB nu poate fi încărcat: {filename}",
"get_post_link_modal.title": "Copiați Permalink",
"integrations.add": "Adaugă",
"intro_messages.anyMember": " Orice membru poate să se alăture și să citească în acest canal.",
@@ -97,7 +99,14 @@
"login.invalidPassword": "Parola curentă este incorectă.",
"login.ldapUsername": "Utilizator AD/LDAP",
"login.ldapUsernameLower": "Nume utilizator AD/LDAP",
"login.noEmail": "Introdu adresa ta de email",
"login.noEmailLdapUsername": "Introduceți adresa dvs. de e-mail sau {ldapUsername}",
"login.noEmailUsername": "Introduceți adresa dvs. de email sau numele de utilizator",
"login.noEmailUsernameLdapUsername": "Introduceți adresa dvs. de email, numele de utilizator sau {ldapUsername}",
"login.noLdapUsername": "Introduceți {ldapUsername}",
"login.noPassword": "Va rugam sa introduceți parola",
"login.noUsername": "Introduceți numele dvs. de utilizator",
"login.noUsernameLdapUsername": "Introduceți numele de utilizator sau {ldapUsername}",
"login.or": "sau",
"login.password": "Parola",
"login.signIn": "Autentificare",
@@ -115,8 +124,7 @@
"mobile.account_notifications.threads_start": "Subiecte pe care le încep",
"mobile.account_notifications.threads_start_participate": "Threads la care încep sau particip",
"mobile.account.settings.save": "Salvați",
"mobile.action_menu.select": "Select an option",
"mobile.action_menu.submitted": "Submitted",
"mobile.action_menu.select": "Selecteaza o optiune",
"mobile.advanced_settings.clockDisplay": "Afișaj ceas",
"mobile.advanced_settings.delete": "Șterge",
"mobile.advanced_settings.delete_file_cache": "Ștergeți memoria cache fișiere",
@@ -139,6 +147,10 @@
"mobile.announcement_banner.title": "Anunţ",
"mobile.authentication_error.message": "Mattermost a întâmpinat o eroare. Re-autentificați pentru a începe o nouă sesiune.",
"mobile.authentication_error.title": "Eroare de autentificare",
"mobile.calendar.dayNames": "Duminică,Luni,Marți,Miercuri,Joi,Vineri,Sâmbătă",
"mobile.calendar.dayNamesShort": "Dum,Lu,Ma,Mie,Jo,Vi,Sam",
"mobile.calendar.monthNames": "Ianuarie,Februarie,Martie,Aprilie,Mai,Iunie,Iulie,August,Septembrie,Octombrie,Noiembrie,Decembrie",
"mobile.calendar.monthNamesShort": "Ian,Feb,Mar,Apr,Mai,Iun,Iul,Aug,Sep,Oct,Noi,Dec",
"mobile.channel_drawer.search": "Sari la...",
"mobile.channel_info.alertMessageDeleteChannel": "Sigur doriți să arhivați {term} {name}?",
"mobile.channel_info.alertMessageLeaveChannel": "Sigur doriți să lăsați {term} {name}?",
@@ -158,6 +170,7 @@
"mobile.channel_list.members": "Membri",
"mobile.channel_list.not_member": "NU E UN MEMBRU",
"mobile.channel_list.unreads": "NECITIE",
"mobile.channel_members.add_members_alert": "Trebuie să selectați cel puțin un membru pentru a adăuga la canal.",
"mobile.channel.markAsRead": "Marchează ca citit",
"mobile.client_upgrade": "Actualizați aplicația",
"mobile.client_upgrade.can_upgrade_subtitle": "O versiune nouă este disponibilă pentru descărcare.",
@@ -168,9 +181,9 @@
"mobile.client_upgrade.download_error.title": "Imposibil de instalat actualizarea",
"mobile.client_upgrade.latest_version": "Versiunea ta: {version}",
"mobile.client_upgrade.listener.dismiss_button": "Elimină",
"mobile.client_upgrade.listener.learn_more_button": "Learn More",
"mobile.client_upgrade.listener.learn_more_button": "Aflați Mai Multe",
"mobile.client_upgrade.listener.message": "Este disponibil un upgrade de client!",
"mobile.client_upgrade.listener.upgrade_button": "Upgrade",
"mobile.client_upgrade.listener.upgrade_button": "Actualizare",
"mobile.client_upgrade.must_upgrade_subtitle": "Actualizați aplicația pentru a continua.",
"mobile.client_upgrade.must_upgrade_title": "Actualizare necesara",
"mobile.client_upgrade.no_upgrade_subtitle": "Aveți deja cea mai recentă versiune.",
@@ -188,6 +201,7 @@
"mobile.create_channel.public": "Noul canal public",
"mobile.create_post.read_only": "Acest canal este numai pentru citire",
"mobile.custom_list.no_results": "Nici un Rezultat",
"mobile.display_settings.theme": "Temă",
"mobile.document_preview.failed_description": "A apărut o eroare la deschiderea documentului. Asigurați-vă că aveți instalat un {fileType} vizualizor și încercați din nou.\n",
"mobile.document_preview.failed_title": "Documentul deschis a eșuat",
"mobile.downloader.android_complete": "Comment",
@@ -231,7 +245,8 @@
"mobile.failed_network_action.shortDescription": "Asigurați-vă că aveți o conexiune activă și încercați din nou.",
"mobile.failed_network_action.title": "Fără conexiune la internet",
"mobile.file_upload.browse": "Cauta fisiere",
"mobile.file_upload.camera": "Faceți fotografii sau video",
"mobile.file_upload.camera_photo": "Ia-Foto",
"mobile.file_upload.camera_video": "Adauga video",
"mobile.file_upload.library": "Biblioteca foto",
"mobile.file_upload.max_warning": "Încărcările sunt limitate la maxim 5 fișiere.",
"mobile.file_upload.video": "Biblioteca video",
@@ -247,6 +262,7 @@
"mobile.join_channel.error": "Nu am putut să ne alăturăm canalului {displayName}. Verificați conexiunea dvs. și încercați din nou.",
"mobile.loading_channels": "Se încarcă canalele ...",
"mobile.loading_members": "Încărcarea membrilor ...",
"mobile.loading_options": "Încărcare Opțiuni...",
"mobile.loading_posts": "Se încarcă mesajele ...",
"mobile.login_options.choose_title": "Alegeți metoda dvs. de conectare",
"mobile.long_post_title": "{channelName} - Postați",
@@ -256,7 +272,6 @@
"mobile.managed.secured_by": "Securizat de {vendor}",
"mobile.markdown.code.copy_code": "Copiați codul",
"mobile.markdown.code.plusMoreLines": "+ {count, number} mai mult {count, plural, one {line} alte {lines}}",
"mobile.markdown.image.error": "Imaginea nu sa încărcat:",
"mobile.markdown.image.too_large": "Imaginea depășește dimensiunile maxime ale {maxWidth} de {maxHeight}:",
"mobile.markdown.link.copy_url": "Copiază URL- ul",
"mobile.mention.copy_mention": "Copiați mențiunea",
@@ -266,7 +281,7 @@
"mobile.more_dms.cannot_add_more": "Nu puteți adăuga mai mulți utilizatori",
"mobile.more_dms.start": "Start",
"mobile.more_dms.title": "Conversație nouă",
"mobile.more_dms.you": "(@ {username} - tu)",
"mobile.more_dms.you": "@{username} - tu",
"mobile.notice_mobile_link": "aplicații pentru mobil",
"mobile.notice_platform_link": "server",
"mobile.notice_text": "Cel mai important lucru este posibil prin software-ul open source folosit în {platform} și {mobile}.",
@@ -294,7 +309,7 @@
"mobile.notification_settings.auto_responder.message_title": "Mesaj personalizat",
"mobile.notification_settings.email": "Email",
"mobile.notification_settings.email_title": "Notificări email",
"mobile.notification_settings.email.send": "TRIMITE NOTIFICARI",
"mobile.notification_settings.email.send": "TRIMITE NOTIFICĂRI PRIN E-MAIL",
"mobile.notification_settings.mentions_replies": "Mențiuni și răspunsuri",
"mobile.notification_settings.mentions.channelWide": "Acces la canal",
"mobile.notification_settings.mentions.reply_title": "Trimiteți notificări de răspuns pentru",
@@ -310,12 +325,21 @@
"mobile.notification.in": " în ",
"mobile.offlineIndicator.connected": "Conectat",
"mobile.offlineIndicator.connecting": "În curs de conectare...",
"mobile.offlineIndicator.offline": "Nu se poate conecta la server",
"mobile.offlineIndicator.offline": "Fără conexiune la internet",
"mobile.open_dm.error": "Nu am putut deschide un mesaj direct cu {displayName}. Verificați conexiunea dvs. și încercați din nou.",
"mobile.open_gm.error": "Nu am putut deschide un mesaj de grup cu acei utilizatori. Verificați conexiunea dvs. și încercați din nou.",
"mobile.open_unknown_channel.error": "Imposibil de aderat la canal. Resetați memoria cache și încercați din nou.",
"mobile.pinned_posts.empty_description": "Puneți elemente importante ținând apăsat pe orice mesaj și selectând \"Conectați la Canal\".",
"mobile.pinned_posts.empty_title": "Nu există mesaje fixate",
"mobile.post_info.add_reaction": "Adăugați reacția",
"mobile.post_info.copy_post": "Copiați mesajul",
"mobile.post_info.copy_text": "Copiază textul",
"mobile.post_info.flag": "Steag",
"mobile.post_info.pin": "Conectați la Canal",
"mobile.post_info.unflag": "Anulați semnalarea",
"mobile.post_info.unpin": "Eliberați-vă din canal",
"mobile.post_pre_header.flagged": "Marcat",
"mobile.post_pre_header.pinned": "Fixat",
"mobile.post_pre_header.pinned_flagged": "Fixat și marcat",
"mobile.post_textbox.empty.message": "Încercați să trimiteți un mesaj gol.\nAsigurați-vă că aveți un mesaj sau cel puțin un fișier atașat.",
"mobile.post_textbox.empty.ok": "OK",
"mobile.post_textbox.empty.title": "Mesaj gol",
@@ -338,11 +362,11 @@
"mobile.rename_channel.name_maxLength": "Adresa URL trebuie să fie mai mică de {maxLength, number} characters",
"mobile.rename_channel.name_minLength": "Adresa URL trebuie să fie {minLength, number} sau mai multe caractere",
"mobile.rename_channel.name_required": "URL-ul este necesar",
"mobile.reply_post.failed": "Message failed to send.",
"mobile.reply_post.failed": "Mesajul nu a putut fi trimis.",
"mobile.request.invalid_response": "A primit răspuns rău de la server.",
"mobile.reset_status.alert_cancel": "Anulare",
"mobile.reset_status.alert_ok": "OK",
"mobile.reset_status.title_ooo": "Dezactivați &quot;Out of Office&quot;?",
"mobile.reset_status.title_ooo": "Dezactivați \"Afară din birou\"?",
"mobile.retry_message": "Mesajele refăcute au eșuat. Trageți în sus pentru a încerca din nou.",
"mobile.routes.channel_members.action": "Eliminați membrii",
"mobile.routes.channel_members.action_message": "Trebuie să selectați cel puțin un membru pentru a fi eliminat din canal.",
@@ -399,9 +423,16 @@
"mobile.share_extension.send": "Trimite",
"mobile.share_extension.team": "Echipa",
"mobile.suggestion.members": "Membri",
"mobile.terms_of_service.alert_cancel": "Anulează",
"mobile.terms_of_service.alert_ok": "BINE",
"mobile.terms_of_service.alert_retry": "Încearcă din nou",
"mobile.terms_of_service.get_terms_error_description": "Asigurați-vă că aveți o conexiune activă la internet și încercați din nou. Dacă această problemă persistă, contactați administratorul de sistem.",
"mobile.terms_of_service.get_terms_error_title": "Imposibil de încărcat termenii și condițiile.",
"mobile.terms_of_service.terms_rejected": "Trebuie să acceptați termenii și condițiile înainte de a accesa {siteName}. Contactați administratorul de sistem pentru mai multe detalii.",
"mobile.timezone_settings.automatically": "Setați automat",
"mobile.timezone_settings.manual": "Schimbați fusul orar",
"mobile.timezone_settings.select": "Selectați Fusul orar",
"mobile.user_list.deactivated": "Dezactivat",
"mobile.user.settings.notifications.email.fifteenMinutes": "La fiecare 15 minute",
"mobile.video_playback.failed_description": "A apărut o eroare în timp ce încercați să redați videoclipul.\n",
"mobile.video_playback.failed_title": "Redarea video a eșuat",
@@ -409,13 +440,13 @@
"mobile.video.save_error_title": "Salvați eroarea video",
"mobile.youtube_playback_error.description": "A apărut o eroare în timp ce încerca pentru a rula video de pe YouTube.\nDetalii: {details}",
"mobile.youtube_playback_error.title": "YouTube eroare de redare",
"modal.manual_status.auto_responder.message_": "Doriți să treceți statutul dvs. la &quot;{status}&quot; și să dezactivați răspunsurile automate?",
"modal.manual_status.auto_responder.message_away": "Doriți să vă schimbați statutul în &quot;Away&quot; și să dezactivați răspunsurile automate?",
"modal.manual_status.auto_responder.message_dnd": "Doriți să vă schimbați statutul în &quot;Nu deranjați&quot; și să dezactivați răspunsurile automate?",
"modal.manual_status.auto_responder.message_offline": "Doriți să vă schimbați statutul în &quot;Offline&quot; și să dezactivați răspunsurile automate?",
"modal.manual_status.auto_responder.message_online": "Doriți să vă schimbați statusul la &quot;Online&quot; și să dezactivați răspunsurile automate?",
"modal.manual_status.auto_responder.message_": "Doriți să treceți statutul dvs. la \"{status}\" și să dezactivați răspunsurile automate?",
"modal.manual_status.auto_responder.message_away": "Doriți să vă schimbați statutul în \"Plecat\" și să dezactivați răspunsurile automate?",
"modal.manual_status.auto_responder.message_dnd": "Doriți să vă schimbați statutul în \"Nu deranjați\" și să dezactivați răspunsurile automate?",
"modal.manual_status.auto_responder.message_offline": "Doriți să vă schimbați statutul în \"Offline\" și să dezactivați răspunsurile automate?",
"modal.manual_status.auto_responder.message_online": "Doriți să vă schimbați statusul la \"Online\" și să dezactivați răspunsurile automate?",
"more_channels.noMore": "Nu mai există canale care să se alăture",
"more_channels.title": "Mai multe canale",
"more_direct_channels.directchannel.deactivated": "{displayname} - dezactivat",
"msg_typing.areTyping": "{users} și {last} introduc ...",
"msg_typing.isTyping": "{user} introduce textul ...",
"navbar_dropdown.logout": "Deconectare",
@@ -433,7 +464,7 @@
"post_body.check_for_out_of_channel_mentions.message_last": "? Ei vor avea acces la toate istoricul mesajelor.",
"post_body.check_for_out_of_channel_mentions.message.multiple": "au fost menționate, dar nu sunt în canal. Aţi dori să ",
"post_body.check_for_out_of_channel_mentions.message.one": "a fost menționat, dar nu este în canal. Aţi dori să ",
"post_body.commentedOn": "A comentat mesajul {name}{apostrophe}: ",
"post_body.commentedOn": "A comentat mesajul {name}: ",
"post_body.deleted": "(mesaj sters)",
"post_info.auto_responder": "RASPUNS AUTOMAT",
"post_info.bot": "BOT",
@@ -441,11 +472,9 @@
"post_info.edit": "Editeaza",
"post_info.message.show_less": "Afișați mai puține",
"post_info.message.show_more": "Detalii",
"post_info.mobile.flag": "Steag de suporter",
"post_info.mobile.unflag": "Anulați semnalarea",
"post_info.system": "Sistem",
"post_message_view.edited": "(editat)",
"posts_view.newMsg": "Mesaje noi% 1: number of unread messages% 2: total number of messages",
"posts_view.newMsg": "Mesaje noi",
"quick_switch_modal.teams": "Echipe",
"rename_channel.handleHolder": "caractere alfanumerice minuscule",
"rename_channel.url": "URL",
@@ -457,10 +486,7 @@
"search_item.channelArchived": "Arhivat",
"sidebar_right_menu.logout": "Deconectare",
"sidebar_right_menu.report": "Raportează o problemă",
"sidebar.channels": "CANALE PUBLICE",
"sidebar.direct": "MESAJE DIRECTE",
"sidebar.favorite": "CABLURI FAVORITE",
"sidebar.pg": "CANALE PRIVATE",
"sidebar.unreads": "Mai multe necitite",
"signup.email": "Email și parolă",
"status_dropdown.set_away": "Plecat",
@@ -476,8 +502,11 @@
"suggestion.mention.morechannels": "Alte canale",
"suggestion.mention.nonmembers": "~[canal]",
"suggestion.mention.special": "MENȚIUNI SPECIALE",
"suggestion.search.direct": "Mesaje Directe",
"suggestion.search.private": "Canale private",
"suggestion.search.public": "Canale publice",
"terms_of_service.agreeButton": "Sunt De Acord",
"terms_of_service.api_error": "Imposibil de completat cererea. Dacă această problemă persistă, contactați administratorul de sistem.",
"user.settings.display.clockDisplay": "Afișajul ceasului",
"user.settings.display.militaryClock": "Ceas 24 de ore (exemplu: 16:00)",
"user.settings.display.normalClock": "Ceas de 12 ore (exemplu: 4:00 PM)",

View File

@@ -10,13 +10,14 @@
"about.teamEditiont0": "Team Edition",
"about.teamEditiont1": "Enterprise Edition",
"about.title": "О Mattermost",
"announcment_banner.dont_show_again": "Don't show again",
"announcment_banner.dont_show_again": "Больше не показывать",
"api.channel.add_member.added": "{addedUsername} добавлен в канал участником {username}",
"archivedChannelMessage": "You are viewing an **archived channel**. New messages cannot be posted.",
"center_panel.archived.closeChannel": "Close Channel",
"archivedChannelMessage": "Вы просматриваете **архивированный канал**. Создание новых сообщений запрещено.",
"center_panel.archived.closeChannel": "Закрыть канал",
"channel_header.addMembers": "Добавить участников",
"channel_header.directchannel.you": "{displayname} (you) ",
"channel_header.manageMembers": "Управление участниками",
"channel_header.pinnedPosts": "Прикреплённые сообщения",
"channel_header.viewMembers": "Просмотреть список участников",
"channel_info.header": "Заголовок:",
"channel_info.purpose": "Назначение:",
@@ -32,34 +33,34 @@
"channel_modal.optional": "(необязательно)",
"channel_modal.purpose": "Назначение",
"channel_modal.purposeEx": "Например: \"Канал для ошибок и пожеланий\"",
"channel_notifications.muteChannel.settings": "канал",
"combined_system_message.added_to_channel.many_expanded": "{users} and {lastUser} were **added to the channel** by {actor}.",
"combined_system_message.added_to_channel.one": "{firstUser} **приглашается на канал** пользователем {actor}.",
"channel_notifications.muteChannel.settings": "Отключить уведомления",
"combined_system_message.added_to_channel.many_expanded": "{users} и {lastUser} были **добавлены на канал** пользователем {actor}.",
"combined_system_message.added_to_channel.one": "{firstUser} **приглашается на канал**. Кем: {actor}.",
"combined_system_message.added_to_channel.one_you": "Вы были **добавлены на канал** пользователем {actor}.",
"combined_system_message.added_to_channel.two": "{firstUser} и {secondUser} **добавлены в команду пользователем** {actor}.",
"combined_system_message.added_to_team.many_expanded": "{users} and {lastUser} were **added to the team** by {actor}.",
"combined_system_message.added_to_team.one": "{firstUser} **добавлены в команду** пользователем {actor}.",
"combined_system_message.added_to_channel.two": "{firstUser} и {secondUser} **приглашены в команду пользователем** {actor}.",
"combined_system_message.added_to_team.many_expanded": "{users} и {lastUser} были **добавлены в команду** пользователем {actor}.",
"combined_system_message.added_to_team.one": "{firstUser} **приглашается в команду** пользователем {actor}.",
"combined_system_message.added_to_team.one_you": "Вы были **добавлены в команду** пользователем {actor}.",
"combined_system_message.added_to_team.two": "{firstUser} и {secondUser} **добавлены в команду** пользователем {actor}.",
"combined_system_message.joined_channel.many_expanded": "{users} и {lastUser} **присоединились к каналу**.",
"combined_system_message.joined_channel.one": "{firstUser} **присоединяется к каналу**.",
"combined_system_message.joined_channel.one": "{firstUser} - **выполнен вход на канал**.",
"combined_system_message.joined_channel.two": "{firstUser} и {secondUser} **присоединились к каналу**.",
"combined_system_message.joined_team.many_expanded": "{users} и {lastUser} **присоединились к команде**.",
"combined_system_message.joined_team.one": "{firstUser} **присоединяется к команде**.",
"combined_system_message.joined_team.two": "{firstUser} и {secondUser} **присоединились к команде**.",
"combined_system_message.left_channel.many_expanded": "{users} и {lastUser} **покинули канал**.",
"combined_system_message.left_channel.one": "{firstUser} **покидает канал**.",
"combined_system_message.left_channel.one": "{firstUser} **покинул канал**.",
"combined_system_message.left_channel.two": "{firstUser} и {secondUser} **покинули канал**.",
"combined_system_message.left_team.many_expanded": "{users} и {lastUser} **покинули команду**.",
"combined_system_message.left_team.one": "{firstUser} **прикидает команду**.",
"combined_system_message.left_team.two": "{firstUser} и {secondUser} **покинули команду**.",
"combined_system_message.removed_from_channel.many_expanded": "{users} и {lastUser} **удалены с канала**.",
"combined_system_message.removed_from_channel.one": "{firstUser} was **removed from the channel**.",
"combined_system_message.removed_from_channel.one_you": "You were **removed from the channel**.",
"combined_system_message.removed_from_channel.one": "{firstUser} был **удалён с канала**.",
"combined_system_message.removed_from_channel.one_you": "Вы были **удалены с канала**.",
"combined_system_message.removed_from_channel.two": "{firstUser} и {secondUser} были **удалены с канала**.",
"combined_system_message.removed_from_team.many_expanded": "{users} и {lastUser} **удалены из команды**.",
"combined_system_message.removed_from_team.one": "{firstUser} was **removed from the team**.",
"combined_system_message.removed_from_team.one_you": "You were **removed from the team**.",
"combined_system_message.removed_from_team.one": "{firstUser} был **удалён из команды**.",
"combined_system_message.removed_from_team.one_you": "Вы были **удалены с канала**.",
"combined_system_message.removed_from_team.two": "{firstUser} и {secondUser} **удалены из команды**.",
"combined_system_message.you": "Вы",
"create_comment.addComment": "Добавить комментарий...",
@@ -67,8 +68,9 @@
"create_post.write": "Ваше сообщение...",
"edit_post.editPost": "Редактировать сообщение...",
"edit_post.save": "Сохранить",
"error.team_not_found.title": "Team Not Found",
"error.team_not_found.title": "Команда не найдена",
"file_attachment.download": "Скачать",
"file_upload.fileAbove": "Нельзя загрузить файл больше {max}МБ: {filename}",
"get_post_link_modal.title": "Скопировать постоянную ссылку",
"integrations.add": "Добавить",
"intro_messages.anyMember": " Любой участник может зайти и читать этот канал.",
@@ -79,16 +81,16 @@
"intro_messages.group_message": "Начало истории групповых сообщений с участниками. Размещённые здесь сообщения и файлы не видны за пределами этой области.",
"intro_messages.noCreator": "{name} - {type}, созданный {date}",
"intro_messages.onlyInvited": " Только приглашенные пользователи могут видеть этот приватный канал.",
"last_users_message.added_to_channel.type": " **добавлены в команду** пользователем {actor}.",
"last_users_message.added_to_channel.type": " **добавлены на канал**. Кем: {actor}.",
"last_users_message.added_to_team.type": "были **добавлены в команду** пользователем {actor}.",
"last_users_message.first": "{firstUser} and ",
"last_users_message.joined_channel.type": "**присоединяется к каналу**",
"last_users_message.joined_team.type": " присоединился(-лась) к команде.",
"last_users_message.left_channel.type": "**left the channel**.",
"last_users_message.left_team.type": "**left the team**.",
"last_users_message.others": "{numOthers} других",
"last_users_message.removed_from_channel.type": "were **removed from the channel**.",
"last_users_message.removed_from_team.type": "were **removed from the team**.",
"last_users_message.first": "{firstUser} и ",
"last_users_message.joined_channel.type": " - **выполнен вход на канал**",
"last_users_message.joined_team.type": "присоединяется к команде.",
"last_users_message.left_channel.type": "**покинул канал**.",
"last_users_message.left_team.type": "**покинул команду**.",
"last_users_message.others": "{numOthers} других ",
"last_users_message.removed_from_channel.type": "были **удалены с канала**.",
"last_users_message.removed_from_team.type": "были **удалены из команды**.",
"login_mfa.enterToken": "Для завершения процесса регистрации, введите токен из аутентификатора на вашем смартфоне",
"login_mfa.token": "Токен MFA",
"login_mfa.tokenReq": "Пожалуйста, введите токен MFA",
@@ -97,8 +99,15 @@
"login.invalidPassword": "Неверный пароль.",
"login.ldapUsername": "Имя пользователя AD/LDAP",
"login.ldapUsernameLower": "AD/LDAP имя пользователя",
"login.noEmail": "Пожалуйста, укажите свой email",
"login.noEmailLdapUsername": "Пожалуйста, укажите свой email или {ldapUsername}",
"login.noEmailUsername": "Пожалуйста, укажите свой email или имя пользователя",
"login.noEmailUsernameLdapUsername": "Пожалуйста, укажите либо свой email, либо ваше имя пользователя, либо {ldapUsername}",
"login.noLdapUsername": "Пожалуйста, введите ваш {ldapUsername}",
"login.noPassword": "Пожалуйста, введите ваш пароль",
"login.or": "or",
"login.noUsername": "Пожалуйста, укажите своё имя пользователя",
"login.noUsernameLdapUsername": "Пожалуйста, укажите своё имя пользователя или {ldapUsername}",
"login.or": "или",
"login.password": "Пароль",
"login.signIn": "Войти",
"login.username": "Имя пользователя",
@@ -106,221 +115,236 @@
"mobile.about.appVersion": "Версия приложения: {version} (Сборка {number})",
"mobile.about.copyright": "Copyright 2015-{currentYear} Mattermost, Inc. Все права защищены",
"mobile.about.database": "Тип базы данных: {type}",
"mobile.about.licensed": "Licensed to: {company}",
"mobile.about.powered_by": "{site} is powered by Mattermost",
"mobile.about.licensed": "Лицензировано для: {company}",
"mobile.about.powered_by": "{site} работает на Mattermost",
"mobile.about.serverVersion": "Версия сервера: {version} (Сборка {number})",
"mobile.about.serverVersionNoBuild": "Версия сервера: {version}",
"mobile.account_notifications.reply.header": "SEND REPLY NOTIFICATIONS FOR",
"mobile.account_notifications.threads_mentions": "Упоминания в тредах",
"mobile.account_notifications.threads_start": "Ветки начатые мной",
"mobile.account_notifications.threads_start_participate": "Threads that I start or participate in",
"mobile.account_notifications.reply.header": "ОТПРАВЛЯТЬ УВЕДОМЛЕНИЯ ОТ ОТВЕТАХ",
"mobile.account_notifications.threads_mentions": "Если меня упомянули",
"mobile.account_notifications.threads_start": "Если я начал эту ветку",
"mobile.account_notifications.threads_start_participate": "Если я начал эту ветку или участвовал в ней",
"mobile.account.settings.save": "Сохранить",
"mobile.action_menu.select": "Select an option",
"mobile.action_menu.submitted": "Submitted",
"mobile.action_menu.select": "Выберите опцию",
"mobile.advanced_settings.clockDisplay": "Отображение времени",
"mobile.advanced_settings.delete": "Удалить",
"mobile.advanced_settings.delete_file_cache": "Удалить кеш файлов",
"mobile.advanced_settings.delete_file_cache_message": "\nThis will delete all the files stored in the cache. Are you sure you want to delete them?\n",
"mobile.advanced_settings.reset_button": "Reset",
"mobile.advanced_settings.delete_file_cache": "Удалить файловый кэш",
"mobile.advanced_settings.delete_file_cache_message": "\nЭто удалит все файлы, хранящиеся в кэше. Вы уверены, что хотите удалить их?\n",
"mobile.advanced_settings.reset_button": "Сбросить",
"mobile.advanced_settings.reset_message": "\nДанное действие приведёт к очистке локальных данных и перезапуску приложения.\n",
"mobile.advanced_settings.reset_title": "Сбросить кэш",
"mobile.advanced_settings.timezone": "Timezone",
"mobile.advanced_settings.timezone": "Часовой пояс",
"mobile.advanced_settings.title": "Дополнительные параметры",
"mobile.android.camera_permission_denied_description": "To take photos and videos with your camera, please change your permission settings.",
"mobile.android.camera_permission_denied_title": "Camera access is required",
"mobile.android.permission_denied_dismiss": "Dismiss",
"mobile.android.permission_denied_retry": "Set permission",
"mobile.android.photos_permission_denied_description": "To upload images from your library, please change your permission settings.",
"mobile.android.photos_permission_denied_title": "Photo library access is required",
"mobile.android.storage_permission_denied_description": "To upload images from your Android device, please change your permission settings.",
"mobile.android.storage_permission_denied_title": "File Storage access is required",
"mobile.android.videos_permission_denied_description": "To upload videos from your library, please change your permission settings.",
"mobile.android.videos_permission_denied_title": "Video library access is required",
"mobile.announcement_banner.title": "Announcement",
"mobile.authentication_error.message": "Mattermost has encountered an error. Please re-authenticate to start a new session.",
"mobile.authentication_error.title": "Authentication Error",
"mobile.channel_drawer.search": "Jump to...",
"mobile.android.camera_permission_denied_description": "Чтобы делать фото и видео, вам нужно разрешить доступ к камере.",
"mobile.android.camera_permission_denied_title": "Требуется доступ к камере",
"mobile.android.permission_denied_dismiss": "Отказать",
"mobile.android.permission_denied_retry": "Изменить разрешение",
"mobile.android.photos_permission_denied_description": "Чтобы загружать изображения из библиотеки, вам нужно изменить настройки разрешений.",
"mobile.android.photos_permission_denied_title": "Требуется доступ к фотографиям",
"mobile.android.storage_permission_denied_description": "Чтобы загружать изображения с устройства Android, вам нужно изменить настройки разрешений.",
"mobile.android.storage_permission_denied_title": "Требуется доступ к файлам",
"mobile.android.videos_permission_denied_description": "Чтобы загружать видео из библиотеки, вам нужно изменить настройки разрешений.",
"mobile.android.videos_permission_denied_title": "Требуется доступ к видео",
"mobile.announcement_banner.title": "Объявление",
"mobile.authentication_error.message": "Неожиданная ошибка приложения. Пожалуйста, авторизуйтесь еще раз.",
"mobile.authentication_error.title": "Ошибка авторизации",
"mobile.calendar.dayNames": "Воскресенье,Понедельник,Вторник,Среда,Четверг,Пятница,Суббота",
"mobile.calendar.dayNamesShort": "Вс,Пн,Вт,Ср,Чт,Пт,Сб",
"mobile.calendar.monthNames": "Январь,Февраль,Март,Апрель,Май,Июнь,Июль,Август,Сентябрь,Октябрь,Ноябрь,Декабрь",
"mobile.calendar.monthNamesShort": "Янв,Феб,Мар,Апр,Май,Июн,Июл,Авг,Сен,Окт,Ноя,Дек",
"mobile.channel_drawer.search": "Перейти к...",
"mobile.channel_info.alertMessageDeleteChannel": "Вы действительно хотите покинуть {term} {name}?",
"mobile.channel_info.alertMessageLeaveChannel": "Вы действительно хотите покинуть {term} {name}?",
"mobile.channel_info.alertNo": "Нет",
"mobile.channel_info.alertTitleDeleteChannel": "Archive {term}",
"mobile.channel_info.alertTitleDeleteChannel": "Архивировать {term}",
"mobile.channel_info.alertTitleLeaveChannel": "Покинуть {term}",
"mobile.channel_info.alertYes": "Да",
"mobile.channel_info.delete_failed": "Мы не можем подключиться к каналу {displayName}. Пожалуйста, проверьте подключение и попробуйте заново.",
"mobile.channel_info.edit": "Edit Channel",
"mobile.channel_info.edit": "Изменить канал",
"mobile.channel_info.privateChannel": "Приватный канал",
"mobile.channel_info.publicChannel": "Публичные каналы",
"mobile.channel_list.alertNo": "Нет",
"mobile.channel_list.alertYes": "Да",
"mobile.channel_list.channels": "CHANNELS",
"mobile.channel_list.closeDM": "Close Direct Message",
"mobile.channel_list.closeGM": "Close Group Message",
"mobile.channel_list.members": "MEMBERS",
"mobile.channel_list.channels": "КАНАЛЫ",
"mobile.channel_list.closeDM": "Закрыть личные сообщения",
"mobile.channel_list.closeGM": "Закрыть сообщения группы",
"mobile.channel_list.members": "УЧАСТНИКИ",
"mobile.channel_list.not_member": "НЕ УЧАСТНИК",
"mobile.channel_list.unreads": "НЕПРОЧИТАННЫЕ",
"mobile.channel.markAsRead": "Mark As Read",
"mobile.client_upgrade": "Update App",
"mobile.client_upgrade.can_upgrade_subtitle": "A new version is available for download.",
"mobile.client_upgrade.can_upgrade_title": "Update Available",
"mobile.client_upgrade.close": "Update Later",
"mobile.client_upgrade.current_version": "Версия сервера: {version}",
"mobile.client_upgrade.download_error.message": "An error occurred downloading the new version.",
"mobile.client_upgrade.download_error.title": "Unable to Install Update",
"mobile.client_upgrade.latest_version": "Версия сервера: {version}",
"mobile.client_upgrade.listener.dismiss_button": "Dismiss",
"mobile.client_upgrade.listener.learn_more_button": "Learn More",
"mobile.client_upgrade.listener.message": "A client upgrade is available!",
"mobile.client_upgrade.listener.upgrade_button": "Upgrade",
"mobile.client_upgrade.must_upgrade_subtitle": "Please update the app to continue.",
"mobile.client_upgrade.must_upgrade_title": "Update Required",
"mobile.client_upgrade.no_upgrade_subtitle": "You already have the latest version.",
"mobile.client_upgrade.no_upgrade_title": "Your App Is Up to Date",
"mobile.channel_members.add_members_alert": "Вы должны выбрать хотя бы одного пользователя для добавления на канал.",
"mobile.channel.markAsRead": "Отметить как прочитанное",
"mobile.client_upgrade": "Обновить приложение",
"mobile.client_upgrade.can_upgrade_subtitle": "Новая версия доступна для загрузки.",
"mobile.client_upgrade.can_upgrade_title": "Доступно обновление",
"mobile.client_upgrade.close": "Обновить позже",
"mobile.client_upgrade.current_version": "Последняя версия: {version}",
"mobile.client_upgrade.download_error.message": "Ошибка при загрузке новой версии.",
"mobile.client_upgrade.download_error.title": "Не могу установить обновление",
"mobile.client_upgrade.latest_version": "Ваша версия: {version}",
"mobile.client_upgrade.listener.dismiss_button": "Отмена",
"mobile.client_upgrade.listener.learn_more_button": "Узнать больше",
"mobile.client_upgrade.listener.message": "Доступна новая версия приложения!",
"mobile.client_upgrade.listener.upgrade_button": "Обновить",
"mobile.client_upgrade.must_upgrade_subtitle": "Пожалуйста, обновите приложение для продолжения работы.",
"mobile.client_upgrade.must_upgrade_title": "Требуется обновление",
"mobile.client_upgrade.no_upgrade_subtitle": "Обновление не требуется, ваша версия актуальна.",
"mobile.client_upgrade.no_upgrade_title": "Актуальная версия приложения",
"mobile.client_upgrade.upgrade": "Обновить",
"mobile.commands.error_title": "Error Executing Command",
"mobile.commands.error_title": "Ошибка при выполнении команды",
"mobile.components.error_list.dismiss_all": "Отменить все",
"mobile.components.select_server_view.connect": "Подключено",
"mobile.components.select_server_view.connect": "Подключиться",
"mobile.components.select_server_view.connecting": "Подключение...",
"mobile.components.select_server_view.enterServerUrl": "Введите адрес сервера",
"mobile.components.select_server_view.proceed": "Продолжить",
"mobile.components.select_server_view.siteUrlPlaceholder": "https://mattermost.example.com",
"mobile.create_channel": "Создать",
"mobile.create_channel.private": "Новый приватный канал",
"mobile.create_channel.public": "Новый публичный канал",
"mobile.create_post.read_only": "This channel is read-only",
"mobile.create_channel.private": "Приватный канал",
"mobile.create_channel.public": "Публичный канал",
"mobile.create_post.read_only": "Этот канал только для чтения",
"mobile.custom_list.no_results": "Нет результатов",
"mobile.document_preview.failed_description": "An error occurred while opening the document. Please make sure you have a {fileType} viewer installed and try again.\n",
"mobile.document_preview.failed_title": "Open Document failed",
"mobile.downloader.android_complete": "Download complete",
"mobile.downloader.android_failed": "Download failed",
"mobile.downloader.android_permission": "We need access to the downloads folder to save files.",
"mobile.downloader.android_started": "Download started",
"mobile.downloader.android_success": "download successful",
"mobile.downloader.complete": "Download complete",
"mobile.downloader.disabled_description": "File downloads are disabled on this server. Please contact your System Admin for more details.\n",
"mobile.downloader.disabled_title": "Download disabled",
"mobile.downloader.downloading": "Downloading...",
"mobile.downloader.failed_description": "An error occurred while downloading the file. Please check your internet connection and try again.\n",
"mobile.downloader.failed_title": "Download failed",
"mobile.downloader.image_saved": "Image Saved",
"mobile.downloader.video_saved": "Video Saved",
"mobile.display_settings.theme": "Тема оформления",
"mobile.document_preview.failed_description": "Ошибка при открытии документа. Пожалуйста убедитесь, что у вас есть приложение для просмотра {fileType} и попробуйте снова.\n",
"mobile.document_preview.failed_title": "Ошибка открытия документа",
"mobile.downloader.android_complete": "Загрузка завершена",
"mobile.downloader.android_failed": "Ошибка загрузки",
"mobile.downloader.android_permission": "Требуется доступ к директории загрузок для сохранения файлов.",
"mobile.downloader.android_started": "Загрузка началась",
"mobile.downloader.android_success": "Загрузка успешно завершена",
"mobile.downloader.complete": "Загрузка завершена",
"mobile.downloader.disabled_description": "Этот сервер не разрешает скачивать файлы. Пожалуйста, обратитесь к системному администратору за подробностями.\n",
"mobile.downloader.disabled_title": "Загрузки отключены",
"mobile.downloader.downloading": "Загрузка...",
"mobile.downloader.failed_description": "Ошибка загрузки файла. Пожалуйста, проверьте своё интернет соединение и попробуйте снова.\n",
"mobile.downloader.failed_title": "Ошибка загрузки",
"mobile.downloader.image_saved": "Изображение сохранено",
"mobile.downloader.video_saved": "Видео сохранено",
"mobile.drawer.teamsTitle": "Команды",
"mobile.edit_channel": "Сохранить",
"mobile.edit_post.title": "Редактирование сообщения",
"mobile.emoji_picker.activity": "ACTIVITY",
"mobile.emoji_picker.custom": "CUSTOM",
"mobile.emoji_picker.activity": "АКТИВНОСТЬ",
"mobile.emoji_picker.custom": "ПОЛЬЗОВАТЕЛЬСКИЕ",
"mobile.emoji_picker.flags": "ФЛАГИ",
"mobile.emoji_picker.foods": "ЕДА",
"mobile.emoji_picker.nature": "ПРИРОДА",
"mobile.emoji_picker.objects": "ОБЪЕКТЫ",
"mobile.emoji_picker.people": "ЛЮДИ",
"mobile.emoji_picker.places": "МЕСТА",
"mobile.emoji_picker.recent": "RECENTLY USED",
"mobile.emoji_picker.recent": "НЕДАВНИЕ",
"mobile.emoji_picker.symbols": "СИМВОЛЫ",
"mobile.error_handler.button": "Перезапустить",
"mobile.error_handler.description": "\nНажмите на кнопку Перезапустить, чтобы открыть приложение заново. После запуска, вы можете сообщить о проблеме через меню настроек.\n",
"mobile.error_handler.title": "Произошла непредвиденная ошибка",
"mobile.extension.authentication_required": "Authentication required: Please first login using the app.",
"mobile.extension.file_error": "There was an error reading the file to be shared.\nPlease try again.",
"mobile.extension.file_limit": "Sharing is limited to a maximum of 5 files.",
"mobile.extension.max_file_size": "File attachments shared in Mattermost must be less than {size}.",
"mobile.extension.permission": "Mattermost needs access to the device storage to share files.",
"mobile.extension.posting": роверка...",
"mobile.extension.title": "Share in Mattermost",
"mobile.failed_network_action.description": "There seems to be a problem with your internet connection. Make sure you have an active connection and try again.",
"mobile.failed_network_action.retry": "Попробовать ещё раз",
"mobile.failed_network_action.shortDescription": "Make sure you have an active connection and try again.",
"mobile.extension.authentication_required": "Требуется авторизация! Пожалуйста, войдите в систему через приложение.",
"mobile.extension.file_error": "Ошибка чтения файла.\nПожалуйста, попробуйте еще раз.",
"mobile.extension.file_limit": "Можно делиться не более чем 5 файлами за раз.",
"mobile.extension.max_file_size": "Файлы для передачи должны быть не больше чем {size}.",
"mobile.extension.permission": "Для того, чтобы делиться файлами, вам нужно предоставить разрешение приложению.",
"mobile.extension.posting": убликация...",
"mobile.extension.title": "Поделиться в Mattermost",
"mobile.failed_network_action.description": "Возникла проблема с интернет соединением. Проверьте ваше подключение и повторите попытку.",
"mobile.failed_network_action.retry": "Попробовать ещё",
"mobile.failed_network_action.shortDescription": "Проверьте ваше подключение и попробуйте снова.",
"mobile.failed_network_action.title": "Нет соединения с интернетом",
"mobile.file_upload.browse": "Browse Files",
"mobile.file_upload.camera": "Сделать фото или видео",
"mobile.file_upload.browse": "Выбрать файлы",
"mobile.file_upload.camera_photo": "Сделать фото",
"mobile.file_upload.camera_video": "Снять видео",
"mobile.file_upload.library": "Библиотека изображений",
"mobile.file_upload.max_warning": "Uploads limited to 5 files maximum.",
"mobile.file_upload.max_warning": "Вы можете загрузить не более 5 файлов за раз.",
"mobile.file_upload.video": "Библиотека видео",
"mobile.flagged_posts.empty_description": "Флаги - один из способов, пометки сообщений для последующей деятельности. Ваши флаги не могут быть просмотрены другими пользователями.",
"mobile.flagged_posts.empty_title": "Отмеченные сообщения",
"mobile.help.title": "Помощь",
"mobile.image_preview.save": "Сохранить изображение",
"mobile.image_preview.save_video": "Save Video",
"mobile.image_preview.save_video": "Сохранить видео",
"mobile.intro_messages.default_message": "Это первый канал, который видит новый участник группы - используйте его для отправки сообщений, которые должны увидеть все.",
"mobile.intro_messages.default_welcome": "Добро пожаловать в {name}!",
"mobile.intro_messages.DM": "Начало истории личных сообщений с {teammate}. Личные сообщения и файлы доступны здесь и не видны за пределами этой области.",
"mobile.ios.photos_permission_denied_description": "To save images and videos to your library, please change your permission settings.",
"mobile.ios.photos_permission_denied_description": "Чтобы сохранять фото и видео в библиотеку, вам нужно изменить настройки разрешений.",
"mobile.join_channel.error": "Мы не можем подключиться к каналу {displayName}. Пожалуйста, проверьте подключение и попробуйте заново.",
"mobile.loading_channels": "Загрузка списка каналов...",
"mobile.loading_members": "Загрузка списка участников...",
"mobile.loading_options": "Загрузка опций...",
"mobile.loading_posts": "Загрузка сообщений...",
"mobile.login_options.choose_title": "Выберите метод входа",
"mobile.long_post_title": "{channelName} - Post",
"mobile.long_post_title": "{channelName} - Сообщение",
"mobile.managed.blocked_by": "Заблокирован {vendor}",
"mobile.managed.exit": "Выход",
"mobile.managed.jailbreak": "Устройства с джейлбрейком не являются доверенными {vendor}, выйдите из приложения.",
"mobile.managed.secured_by": "Защищено {vendor}",
"mobile.markdown.code.copy_code": "Copy Code",
"mobile.markdown.code.plusMoreLines": "+{count, number} more {count, plural, one {line} other {lines}}",
"mobile.markdown.image.error": "Image failed to load:",
"mobile.markdown.image.too_large": "Image exceeds max dimensions of {maxWidth} by {maxHeight}:",
"mobile.markdown.link.copy_url": "Copy URL",
"mobile.mention.copy_mention": "Copy Mention",
"mobile.message_length.message": "Your current message is too long. Current character count: {max}/{count}",
"mobile.message_length.title": "Message Length",
"mobile.more_dms.add_more": "You can add {remaining, number} more users",
"mobile.more_dms.cannot_add_more": "You cannot add more users",
"mobile.markdown.code.copy_code": "Скопировать код",
"mobile.markdown.code.plusMoreLines": "+{count, number} еще {count, plural, one {line} других {lines}}",
"mobile.markdown.image.too_large": "Изображение превышает максимальное разрешение {maxWidth} на {maxHeight}:",
"mobile.markdown.link.copy_url": "Скопировать URL",
"mobile.mention.copy_mention": "Скопировать упоминание",
"mobile.message_length.message": "Слишком длинное сообщение. Текущее количество знаков: {max}/{count}",
"mobile.message_length.title": "Длина сообщения",
"mobile.more_dms.add_more": "Осталось пользователей для добавления: {remaining, number}",
"mobile.more_dms.cannot_add_more": "Вы не можете добавить больше пользователей",
"mobile.more_dms.start": "Начать",
"mobile.more_dms.title": "New Conversation",
"mobile.more_dms.you": "(@{username} - you)",
"mobile.notice_mobile_link": "мобильные приложения",
"mobile.notice_platform_link": "server",
"mobile.notice_text": "Mattermost is made possible by the open source software used in our {platform} and {mobile}.",
"mobile.more_dms.title": "Новая беседа",
"mobile.more_dms.you": "@{username} - вы",
"mobile.notice_mobile_link": "мобильных приложениях",
"mobile.notice_platform_link": "сервере",
"mobile.notice_text": "Mattermost стал возможен благодаря использованию программ с открытым исходным кодом в нашем {platform} и {mobile}.",
"mobile.notification_settings_mentions.keywords": "Ключевые слова",
"mobile.notification_settings_mentions.keywordsDescription": "Other words that trigger a mention",
"mobile.notification_settings_mentions.keywordsHelp": "Keywords are non-case sensitive and should be separated by a comma.",
"mobile.notification_settings_mentions.wordsTrigger": "WORDS THAT TRIGGER MENTIONS",
"mobile.notification_settings_mobile.default_sound": "Default ({sound})",
"mobile.notification_settings_mobile.light": "Light",
"mobile.notification_settings_mentions.keywordsDescription": "Специальные слова, генерирующие уведомления",
"mobile.notification_settings_mentions.keywordsHelp": "Ключевые слова регистронезависимы и разделяются запятыми.",
"mobile.notification_settings_mentions.wordsTrigger": "СЛОВА, ГЕНЕРИРУЮЩИЕ УВЕДОМЛЕНИЯ",
"mobile.notification_settings_mobile.default_sound": "По умолчанию ({sound})",
"mobile.notification_settings_mobile.light": "Свет",
"mobile.notification_settings_mobile.no_sound": "Нет",
"mobile.notification_settings_mobile.push_activity": "SEND NOTIFICATIONS",
"mobile.notification_settings_mobile.push_activity_android": "Отправлять уведомления для",
"mobile.notification_settings_mobile.push_status": "TRIGGER PUSH NOTIFICATIONS WHEN",
"mobile.notification_settings_mobile.push_status_android": "Отправить уведомление когда",
"mobile.notification_settings_mobile.sound": "Sound",
"mobile.notification_settings_mobile.push_activity": "ОТПРАВЛЯТЬ УВЕДОМЛЕНИЯ",
"mobile.notification_settings_mobile.push_activity_android": "Отправлять уведомления",
"mobile.notification_settings_mobile.push_status": "ОТПРАВЛЯТЬ PUSH УВЕДОМЛЕНИЯ КОГДА",
"mobile.notification_settings_mobile.push_status_android": "Отправлять push уведомления когда",
"mobile.notification_settings_mobile.sound": "Звук",
"mobile.notification_settings_mobile.sounds_title": "Звук уведомления",
"mobile.notification_settings_mobile.test": "Send me a test notification",
"mobile.notification_settings_mobile.test_push": "This is a test push notification",
"mobile.notification_settings_mobile.vibrate": "Vibrate",
"mobile.notification_settings.auto_responder_short": "Automatic Replies",
"mobile.notification_settings.auto_responder.default_message": "Hello, I am out of office and unable to respond to messages.",
"mobile.notification_settings.auto_responder.enabled": "Enabled",
"mobile.notification_settings.auto_responder.footer_message": "Set a custom message that will be automatically sent in response to Direct Messages. Mentions in Public and Private Channels will not trigger the automated reply. Enabling Automatic Replies sets your status to Out of Office and disables email and push notifications.",
"mobile.notification_settings_mobile.test": "Отправить себе тестовое уведомление",
"mobile.notification_settings_mobile.test_push": "Это тестовое push уведомление",
"mobile.notification_settings_mobile.vibrate": "Вибрация",
"mobile.notification_settings.auto_responder_short": "Автоматические ответы",
"mobile.notification_settings.auto_responder.default_message": "Привет, я сейчас не на работе и не могу ответить.",
"mobile.notification_settings.auto_responder.enabled": "Включено",
"mobile.notification_settings.auto_responder.footer_message": "Установите специальное сообщение, которое будет автоматически отправлено в ответ на личные сообщения. Упоминания в публичных и частных каналах не будут отправлять автоматический ответ. Включение автоматических ответов устанавливает статус «Не на работе» и отключает отправку push и email и уведомлений.",
"mobile.notification_settings.auto_responder.message_placeholder": "Сообщение",
"mobile.notification_settings.auto_responder.message_title": "CUSTOM MESSAGE",
"mobile.notification_settings.email": "Эл. почта",
"mobile.notification_settings.email_title": "Уведомления по электронной почте",
"mobile.notification_settings.email.send": "SEND EMAIL NOTIFICATIONS",
"mobile.notification_settings.mentions_replies": "Mentions and Replies",
"mobile.notification_settings.mentions.channelWide": "Channel-wide mentions",
"mobile.notification_settings.auto_responder.message_title": "ПОЛЬЗОВАТЕЛЬСКОЕ СООБЩЕНИЕ",
"mobile.notification_settings.email": "Email",
"mobile.notification_settings.email_title": "Уведомления на email",
"mobile.notification_settings.email.send": "ОТПРАВКА УВЕДОМЛЕНИЙ НА EMAIL",
"mobile.notification_settings.mentions_replies": "Упоминания и ответы",
"mobile.notification_settings.mentions.channelWide": "Общесистемные упоминания",
"mobile.notification_settings.mentions.reply_title": "Отправлять уведомления об ответе",
"mobile.notification_settings.mentions.sensitiveName": "Your case sensitive first name",
"mobile.notification_settings.mentions.sensitiveUsername": "Your non-case sensitive username",
"mobile.notification_settings.mobile": "Mobile",
"mobile.notification_settings.mobile_title": "Мобильные уведомленя",
"mobile.notification_settings.modal_cancel": "CANCEL",
"mobile.notification_settings.modal_save": "SAVE",
"mobile.notification_settings.mentions.sensitiveName": "Ваше регистрозависимое имя",
"mobile.notification_settings.mentions.sensitiveUsername": "Ваше регистронезависимое имя",
"mobile.notification_settings.mobile": "Мобильный",
"mobile.notification_settings.mobile_title": "Мобильные уведомления",
"mobile.notification_settings.modal_cancel": "ОТМЕНА",
"mobile.notification_settings.modal_save": "СОХРАНИТЬ",
"mobile.notification_settings.ooo_auto_responder": "Автоматический ответ на личные сообщения",
"mobile.notification_settings.save_failed_description": "The notification settings failed to save due to a connection issue, please try again.",
"mobile.notification_settings.save_failed_title": "Connection issue",
"mobile.notification_settings.save_failed_description": "Ошибка сохранения настроек уведомлений из-за проблем со связью. Пожалуйста, попробуйте еще раз.",
"mobile.notification_settings.save_failed_title": "Ошибка подключения",
"mobile.notification.in": " в ",
"mobile.offlineIndicator.connected": "Подключено",
"mobile.offlineIndicator.connecting": "Подключение...",
"mobile.offlineIndicator.offline": "Cannot connect to the server",
"mobile.offlineIndicator.offline": "Нет соединения с интернетом",
"mobile.open_dm.error": "Мы не можем подключиться к каналу {displayName}. Пожалуйста, проверьте подключение и попробуйте заново.",
"mobile.open_gm.error": "Не удалось подключиться к группе с этими пользователями. Пожалуйста, проверьте подключение и попробуйте заново.",
"mobile.open_unknown_channel.error": "Unable to join the channel. Please reset the cache and try again.",
"mobile.open_unknown_channel.error": "Не могу присоединиться к каналу. Пожалуйста, сбросьте кэш и попробуйте снова.",
"mobile.pinned_posts.empty_description": "Сохраняйте важные вещи, удерживая палец на сообщении и выбрав \"Прикрепить сообщение\".",
"mobile.pinned_posts.empty_title": "Нет прикреплённых сообщений",
"mobile.post_info.add_reaction": "Добавить реакцию",
"mobile.post_info.copy_post": "Копировать сообщение",
"mobile.post_textbox.empty.message": "You are trying to send an empty message.\nPlease make sure you have a message or at least one attached file.",
"mobile.post_textbox.empty.ok": "OK",
"mobile.post_textbox.empty.title": "Empty Message",
"mobile.post_textbox.uploadFailedDesc": "Some attachments failed to upload to the server, Are you sure you want to post the message?",
"mobile.post_textbox.uploadFailedTitle": "Attachment failure",
"mobile.post_info.copy_text": "Копировать текст",
"mobile.post_info.flag": "Отметить",
"mobile.post_info.pin": "Прикрепить сообщение",
"mobile.post_info.unflag": "Снять отметку",
"mobile.post_info.unpin": "Открепить сообщение",
"mobile.post_pre_header.flagged": "Отмеченные",
"mobile.post_pre_header.pinned": "Прикреплённые",
"mobile.post_pre_header.pinned_flagged": "Прикреплённые и отмеченные",
"mobile.post_textbox.empty.message": "Вы пытаетесь отправить пустое сообщение.\nПожалуйста, убедитесь, что вы что-то написали или приложили хотя-бы один файл.",
"mobile.post_textbox.empty.ok": "Ок",
"mobile.post_textbox.empty.title": "Пустое сообщение",
"mobile.post_textbox.uploadFailedDesc": "Некоторые вложения не были загружены на сервер. Вы уверены, что хотите отправить сообщение?",
"mobile.post_textbox.uploadFailedTitle": "Ошибка загрузки",
"mobile.post.cancel": "Отмена",
"mobile.post.delete_question": "Вы действительно хотите удалить запись?",
"mobile.post.delete_title": "Удалить пост",
@@ -328,60 +352,60 @@
"mobile.post.failed_retry": "Попробовать ещё раз",
"mobile.post.failed_title": "Не удалось отправить сообщение",
"mobile.post.retry": "Обновить",
"mobile.posts_view.moreMsg": "More New Messages Above",
"mobile.recent_mentions.empty_description": "Messages containing your username and other words that trigger mentions will appear here.",
"mobile.posts_view.moreMsg": "Загрузить еще сообщения",
"mobile.recent_mentions.empty_description": "Здесь будут сообщения, которые содержат ваше имя или другие слова, отмеченные для уведомлений.",
"mobile.recent_mentions.empty_title": "Недавние упоминания",
"mobile.rename_channel.display_name_maxLength": "Channel name must be less than {maxLength, number} characters",
"mobile.rename_channel.display_name_minLength": "Channel name must be {minLength, number} or more characters",
"mobile.rename_channel.display_name_required": "Channel name is required",
"mobile.rename_channel.name_lowercase": "Должны быть буквы или цифры в нижнем регистре",
"mobile.rename_channel.name_maxLength": "URL must be less than {maxLength, number} characters",
"mobile.rename_channel.name_minLength": "URL must be {minLength, number} or more characters",
"mobile.rename_channel.name_required": "URL is required",
"mobile.rename_channel.display_name_maxLength": "Название канала не должно превышать {maxLength, number} символов",
"mobile.rename_channel.display_name_minLength": "Название канала должно быть не меньше, чем {minLength, number} символов",
"mobile.rename_channel.display_name_required": "Вы должны указать название канала",
"mobile.rename_channel.name_lowercase": "URL должен состоять из цифр и/или букв в нижнем регистре",
"mobile.rename_channel.name_maxLength": "URL должен быть короче {maxLength, number} символов",
"mobile.rename_channel.name_minLength": "URL должен быть не меньше чем {minLength, number} символов",
"mobile.rename_channel.name_required": "Укажите URL",
"mobile.reply_post.failed": "Message failed to send.",
"mobile.request.invalid_response": "Получен неверный ответ от сервера",
"mobile.reset_status.alert_cancel": "Отмена",
"mobile.reset_status.alert_ok": "Ok",
"mobile.reset_status.title_ooo": "Disable \"Out Of Office\"?",
"mobile.reset_status.alert_ok": "Ок",
"mobile.reset_status.title_ooo": "Выключить \"Не на работе\"?",
"mobile.retry_message": "Refreshing messages failed. Pull up to try again.",
"mobile.routes.channel_members.action": "Удалить участников",
"mobile.routes.channel_members.action_message": "Вы должны выбрать хотя бы одного участника для удаления с канала.",
"mobile.routes.channel_members.action_message_confirm": "Вы уверены, что хотите удалить выбранных участников с канала?",
"mobile.routes.channelInfo": "Информация",
"mobile.routes.channelInfo.createdBy": "Создан {creator} в ",
"mobile.routes.channelInfo.delete_channel": "Archive Channel",
"mobile.routes.channelInfo.delete_channel": "Архивировать канал",
"mobile.routes.channelInfo.favorite": "Избранные",
"mobile.routes.code": "{language} код",
"mobile.routes.code.noLanguage": "Код",
"mobile.routes.edit_profile": "Edit Profile",
"mobile.routes.edit_profile": "Изменить профиль",
"mobile.routes.login": "Вход",
"mobile.routes.loginOptions": "Login Chooser",
"mobile.routes.loginOptions": "Способ авторизации",
"mobile.routes.mfa": "Многофакторная аутентификация",
"mobile.routes.selectChannel": "Удалить канал",
"mobile.routes.selectChannel": "Выбрать канал",
"mobile.routes.selectTeam": "Выберите команду",
"mobile.routes.settings": "Параметры",
"mobile.routes.sso": "Single Sign-On",
"mobile.routes.table": "Table",
"mobile.routes.sso": "Единая точка входа",
"mobile.routes.table": "Таблица",
"mobile.routes.tableImage": "Изображение",
"mobile.routes.thread": "{channelName} Детали",
"mobile.routes.thread_dm": "Direct Message Thread",
"mobile.routes.thread": "{channelName}",
"mobile.routes.thread_dm": "Ветка личных сообщений",
"mobile.routes.user_profile": "Профиль",
"mobile.routes.user_profile.local_time": "LOCAL TIME",
"mobile.routes.user_profile.local_time": "МЕСТНОЕ ВРЕМЯ",
"mobile.routes.user_profile.send_message": "Отправить сообщение",
"mobile.search.after_modifier_description": "to find posts after a specific date",
"mobile.search.before_modifier_description": "to find posts before a specific date",
"mobile.search.from_modifier_description": "to find posts from specific users",
"mobile.search.after_modifier_description": "поиск сообщения после указанной даты",
"mobile.search.before_modifier_description": "поиск сообщений до указанной даты",
"mobile.search.from_modifier_description": "поиск сообщений определённых пользователей",
"mobile.search.from_modifier_title": "имя пользователя",
"mobile.search.in_modifier_description": "to find posts in specific channels",
"mobile.search.in_modifier_title": "channel-name",
"mobile.search.jump": "Jump to recent messages",
"mobile.search.in_modifier_description": "поиск сообщений в определённом канале",
"mobile.search.in_modifier_title": "имя канала",
"mobile.search.jump": "Перейти к недавним сообщениям",
"mobile.search.no_results": "Ничего не найдено",
"mobile.search.on_modifier_description": "to find posts on a specific date",
"mobile.search.recent_title": "Recent Searches",
"mobile.search.on_modifier_description": "поиск сообщений за нужную дату",
"mobile.search.recent_title": "Недавние запросы",
"mobile.select_team.join_open": "Другие команды, к которым вы можете присоединиться.",
"mobile.select_team.no_teams": "Нет доступных команд, к которым вы можете присоединиться.",
"mobile.server_upgrade.button": "OK",
"mobile.server_upgrade.description": "\nДля продолжения работы требуется обновление сервера Mattermost. Пожалуйста, обратитесь к администратору за подробностями.\n",
"mobile.server_upgrade.button": "Ок\"",
"mobile.server_upgrade.description": "\nДля продолжения работы требуется обновление сервера Mattermost. Пожалуйста, обратитесь к системному администратору за подробностями.\n",
"mobile.server_upgrade.title": "Требуется обновление сервера",
"mobile.server_url.invalid_format": "Адрес должен начинаться с http:// или https://",
"mobile.session_expired": "Сессия истекла: войдите, чтобы продолжить получение уведомлений.",
@@ -393,29 +417,36 @@
"mobile.share_extension.cancel": "Отмена",
"mobile.share_extension.channel": "Канал",
"mobile.share_extension.error_close": "Закрыть",
"mobile.share_extension.error_message": "An error has occurred while using the share extension.",
"mobile.share_extension.error_title": "Extension Error",
"mobile.share_extension.post_error": "An error has occurred while posting the message. Please try again.",
"mobile.share_extension.error_message": "Ошибка при попытке поделиться файлом.",
"mobile.share_extension.error_title": "Ошибка расширения",
"mobile.share_extension.post_error": "Ошибка при отправке сообщения. Пожалуйста, попробуйте снова.",
"mobile.share_extension.send": "Отправить",
"mobile.share_extension.team": "Команды",
"mobile.share_extension.team": "Команда",
"mobile.suggestion.members": "Участники",
"mobile.timezone_settings.automatically": "Set automatically",
"mobile.timezone_settings.manual": "Change timezone",
"mobile.timezone_settings.select": "Select Timezone",
"mobile.user.settings.notifications.email.fifteenMinutes": "Every 15 minutes",
"mobile.video_playback.failed_description": "An error occurred while trying to play the video.\n",
"mobile.video_playback.failed_title": "Video playback failed",
"mobile.video.save_error_message": "To save the video file you need to download it first.",
"mobile.video.save_error_title": "Save Video Error",
"mobile.youtube_playback_error.description": "An error occurred while trying to play the YouTube video.\nDetails: {details}",
"mobile.youtube_playback_error.title": "YouTube playback error",
"modal.manual_status.auto_responder.message_": "Would you like to switch your status to \"{status}\" and disable Automatic Replies?",
"modal.manual_status.auto_responder.message_away": "Would you like to switch your status to \"Away\" and disable Automatic Replies?",
"modal.manual_status.auto_responder.message_dnd": "Would you like to switch your status to \"Do Not Disturb\" and disable Automatic Replies?",
"modal.manual_status.auto_responder.message_offline": "Would you like to switch your status to \"Offline\" and disable Automatic Replies?",
"modal.manual_status.auto_responder.message_online": "Would you like to switch your status to \"Online\" and disable Automatic Replies?",
"more_channels.title": "Больше каналов",
"more_direct_channels.directchannel.deactivated": "{displayname} - Deactivated",
"mobile.terms_of_service.alert_cancel": "Отмена",
"mobile.terms_of_service.alert_ok": "Ок",
"mobile.terms_of_service.alert_retry": "Попробуйте снова",
"mobile.terms_of_service.get_terms_error_description": "Проверьте соединение с интернетом и попробуйте снова. Если ошибка не исчезнет, то обратитесь к своему системному администратору.",
"mobile.terms_of_service.get_terms_error_title": "Не могу загрузить положения об обслуживании.",
"mobile.terms_of_service.terms_rejected": "Вы должны принять положения об обслуживании перед входом на {siteName}. Пожалуйста, обратитесь к своему системному администратору за подробностями.",
"mobile.timezone_settings.automatically": "Выбрать автоматически",
"mobile.timezone_settings.manual": "Сменить часовой пояс",
"mobile.timezone_settings.select": "Выберите часовой пояс",
"mobile.user_list.deactivated": "Отключены",
"mobile.user.settings.notifications.email.fifteenMinutes": "Каждые 15 минут",
"mobile.video_playback.failed_description": "Возникла ошибка проигрывания видео.\n",
"mobile.video_playback.failed_title": "Ошибка проигрывания видео",
"mobile.video.save_error_message": "Для сохранения видео, вам нужно сначала его скачать.",
"mobile.video.save_error_title": "Ошибка сохранения видео",
"mobile.youtube_playback_error.description": "Возникла ошибка проигрывания видео YouTube.\nПодробности: {details}",
"mobile.youtube_playback_error.title": "Ошибка видео YouTube",
"modal.manual_status.auto_responder.message_": "Вы хотите установить статус \"{status}\" и отключить автоматические ответы?",
"modal.manual_status.auto_responder.message_away": "Вы хотите установить статус \"Отошёл\" и отключить автоматические ответы?",
"modal.manual_status.auto_responder.message_dnd": "Вы хотите установить статус \"Не беспокоить\" и отключить автоматические ответы?",
"modal.manual_status.auto_responder.message_offline": "Вы хотите установить статус \"Не в сети\" и отключить автоматические ответы?",
"modal.manual_status.auto_responder.message_online": "Вы хотите установить статус \"В сети\" и отключить автоматические ответы?",
"more_channels.noMore": "Доступных каналов не найдено",
"more_channels.title": "Выберите канал",
"msg_typing.areTyping": "{users} и {last} печатают...",
"msg_typing.isTyping": "{user} печатает...",
"navbar_dropdown.logout": "Выйти",
@@ -424,43 +455,38 @@
"password_send.checkInbox": "Проверьте свои входящие.",
"password_send.description": "Для сброса пароля введите email адрес, использованный при регистрации",
"password_send.error": "Пожалуйста, введите корректный email.",
"password_send.link": "If the account exists, a password reset email will be sent to:",
"password_send.link": "Если акаунт с таким email существует, ты вы получите письмо со ссылкой для сброса пароля на:",
"password_send.reset": "Сбросить пароль",
"permalink.error.access": "Постоянная ссылка принадлежит к удалённому сообщению или каналу, к которому у вас нет доступа.",
"post_body.check_for_out_of_channel_mentions.link.and": " and ",
"post_body.check_for_out_of_channel_mentions.link.private": "add them to this private channel",
"post_body.check_for_out_of_channel_mentions.link.public": "добавлен(а) в канал",
"post_body.check_for_out_of_channel_mentions.message_last": "? They will have access to all message history.",
"post_body.check_for_out_of_channel_mentions.message.multiple": "were mentioned but they are not in the channel. Would you like to ",
"post_body.check_for_out_of_channel_mentions.message.one": "was mentioned but is not in the channel. Would you like to ",
"post_body.commentedOn": "Прокомментировал {name}{apostrophe} сообщение: ",
"post_body.check_for_out_of_channel_mentions.link.and": " и ",
"post_body.check_for_out_of_channel_mentions.link.private": "добавить пользователей в приватный канал",
"post_body.check_for_out_of_channel_mentions.link.public": "добавить на канал",
"post_body.check_for_out_of_channel_mentions.message_last": "? Они увидят всю предыдущую историю сообщений.",
"post_body.check_for_out_of_channel_mentions.message.multiple": "были упомянуты, но они не на канале. Не хотите ли вы ",
"post_body.check_for_out_of_channel_mentions.message.one": "упомянули, но пользователь не на канале. Не хотите ли вы ",
"post_body.commentedOn": "Commented on {name}'s message: ",
"post_body.deleted": "(сообщение удалено)",
"post_info.auto_responder": "Автоматический Ответ",
"post_info.bot": "BOT",
"post_info.bot": "Бот",
"post_info.del": "Удалить",
"post_info.edit": "Редактировать",
"post_info.message.show_less": "Show Less",
"post_info.message.show_more": "Show More",
"post_info.mobile.flag": "Отметить",
"post_info.mobile.unflag": "Не помечено",
"post_info.message.show_less": "Показать меньше",
"post_info.message.show_more": "Показать больше",
"post_info.system": "Система",
"post_message_view.edited": "(отредактировано)",
"posts_view.newMsg": "Новые сообщения",
"quick_switch_modal.teams": "Команды",
"rename_channel.handleHolder": "буквы или цифры в нижнем регистре",
"rename_channel.url": "URL",
"rhs_thread.rootPostDeletedMessage.body": "Part of this thread has been deleted due to a data retention policy. You can no longer reply to this thread.",
"rhs_thread.rootPostDeletedMessage.body": "Часть этой ветки была удалена из-за политики хранения данных. Вы больше не можете писать в этой теме.",
"search_bar.search": "Поиск",
"search_header.results": "Результаты поиска",
"search_header.title2": "Недавние упоминания",
"search_header.title3": "Отмеченные сообщения",
"search_item.channelArchived": "Archived",
"search_item.channelArchived": "Архив",
"sidebar_right_menu.logout": "Выйти",
"sidebar_right_menu.report": "Сообщить о проблеме",
"sidebar.channels": "ПУБЛИЧНЫЕ КАНАЛЫ",
"sidebar.direct": "ЛИЧНЫЕ СООБЩЕНИЯ",
"sidebar.favorite": "ИЗБРАННЫЕ КАНАЛЫ",
"sidebar.pg": "ПРИВАТНЫЕ КАНАЛЫ",
"sidebar.unreads": "Новые сообщения",
"signup.email": "Email и Пароль",
"status_dropdown.set_away": "Отошёл",
@@ -475,9 +501,12 @@
"suggestion.mention.members": "Участники канала",
"suggestion.mention.morechannels": "Другие каналы",
"suggestion.mention.nonmembers": "Не в канале",
"suggestion.mention.special": "Специальные функции",
"suggestion.mention.special": "Особые упоминания",
"suggestion.search.direct": "Личные сообщения",
"suggestion.search.private": "Приватные каналы",
"suggestion.search.public": "Общедоступные каналы",
"terms_of_service.agreeButton": "Я согласен",
"terms_of_service.api_error": "Не могу выполнить запрос. Если ошибка не исчезнет, обратитесь к своему системному администратору.",
"user.settings.display.clockDisplay": "Отображение времени",
"user.settings.display.militaryClock": "24-часовой формат (пример: 16:00)",
"user.settings.display.normalClock": "12-часовой формат (пример: 4:00 PM)",
@@ -490,7 +519,7 @@
"user.settings.general.emailLdapCantUpdate": "Вход осуществлен через AD/LDAP. Email не может быть обновлен. Используемый для оповещений Email: {email}.",
"user.settings.general.emailOffice365CantUpdate": "При входе через Office 365 адрес электронной почты не может быть обновлен. Адрес, используемый для уведомлений: {email}.",
"user.settings.general.emailSamlCantUpdate": "Вход осуществлен через SAML. Email не может быть обновлен. Используемый для оповещений Email: {email}.",
"user.settings.general.field_handled_externally": "This field is handled through your login provider. If you want to change it, you need to do so through your login provider.",
"user.settings.general.field_handled_externally": "Это поле управляется вашим провайдером авторизации. Если вы хотите его изменить, то нужно делать это через него.",
"user.settings.general.firstName": "Имя",
"user.settings.general.lastName": "Фамилия",
"user.settings.general.nickname": "Псеводним",
@@ -500,7 +529,7 @@
"user.settings.modal.notifications": "Уведомления",
"user.settings.notifications.allActivity": "При любой активности",
"user.settings.notifications.comments": "Уведомление об ответе",
"user.settings.notifications.email.disabled": "Email notifications are not enabled",
"user.settings.notifications.email.disabled": "Email уведомления отключены",
"user.settings.notifications.email.everyHour": "Каждый час",
"user.settings.notifications.email.immediately": "Немедленно",
"user.settings.notifications.email.never": "Никогда",
@@ -509,8 +538,8 @@
"user.settings.notifications.never": "Никогда",
"user.settings.notifications.onlyMentions": "Только при упоминаниях и личных сообщениях",
"user.settings.push_notification.away": "Отсутствует или не в сети",
"user.settings.push_notification.disabled": "Push notifications are not enabled",
"user.settings.push_notification.disabled_long": "Push notifications have not been enabled by your System Administrator.",
"user.settings.push_notification.disabled": "Push уведомления отключены",
"user.settings.push_notification.disabled_long": "Ваш системный администратор не включил Push уведомления.",
"user.settings.push_notification.offline": "Не в сети",
"user.settings.push_notification.online": "В сети, нет на месте или не в сети",
"web.root.signup_info": "Все способы общения команды собраны в одном месте, с возможностью мгновенного поиска и доступом отовсюду"

View File

@@ -17,6 +17,7 @@
"channel_header.addMembers": "Üye Ekle",
"channel_header.directchannel.you": "{displayname} (siz) ",
"channel_header.manageMembers": "Üye Yönetimi",
"channel_header.pinnedPosts": "Sabitlenmiş İletiler",
"channel_header.viewMembers": "Üyeleri Görüntüle",
"channel_info.header": "Başlık:",
"channel_info.purpose": "Amaç:",
@@ -69,6 +70,7 @@
"edit_post.save": "Kaydet",
"error.team_not_found.title": "Takım Bulunamadı",
"file_attachment.download": "İndir",
"file_upload.fileAbove": "{max} MB boyutundan büyük dosyalar yüklenemez: {filename}",
"get_post_link_modal.title": "Kalıcı Bağlantıyı Kopyala",
"integrations.add": "Ekle",
"intro_messages.anyMember": " Tüm üyeler bu kanala üye olup iletileri okuyabilir.",
@@ -97,7 +99,14 @@
"login.invalidPassword": "Parolanız yanlış.",
"login.ldapUsername": "AD/LDAP Kullanıcı Adı",
"login.ldapUsernameLower": "AD/LDAP kullanıcı adı",
"login.noEmail": "E-posta adresinizi yazın",
"login.noEmailLdapUsername": "Lütfen e-posta adresinizi ya da {ldapUsername} yazın",
"login.noEmailUsername": "Lütfen e-posta adresinizi ya da kullanıcı adınızı yazın",
"login.noEmailUsernameLdapUsername": "Lütfen e-posta adresinizi, kullanıcı adınızı ya da {ldapUsername} yazın",
"login.noLdapUsername": "Lütfen {ldapUsername} yazın",
"login.noPassword": "Lütfen parolanızı yazın",
"login.noUsername": "Lütfen kullanıcı adınızı yazın",
"login.noUsernameLdapUsername": "Lütfen kullanıcı adınızı ya da {ldapUsername} yazın",
"login.or": "ya da",
"login.password": "Parola",
"login.signIn": "Oturum Açın",
@@ -116,7 +125,6 @@
"mobile.account_notifications.threads_start_participate": "Başlattığım ya da katıldığım konular",
"mobile.account.settings.save": "Kaydet",
"mobile.action_menu.select": "Bir seçenek seçin",
"mobile.action_menu.submitted": "Gönderildi",
"mobile.advanced_settings.clockDisplay": "Saat görünümü",
"mobile.advanced_settings.delete": "Sil",
"mobile.advanced_settings.delete_file_cache": "Dosya Ön Belleğini Sil",
@@ -139,6 +147,10 @@
"mobile.announcement_banner.title": "Duyuru",
"mobile.authentication_error.message": "Mattermost üzerinde bir sorun çıktı. Lütfen yeni bir oturum başlatmak için kimliğinizi yeniden doğrulayın.",
"mobile.authentication_error.title": "Kimlik Doğrulama Sorunu",
"mobile.calendar.dayNames": "Pazar,Pazartesi,Salı,Çarşamba,Perşembe,Cuma,Cumartesi",
"mobile.calendar.dayNamesShort": "Paz.Pzt,Sal,Çar,Per,Cum,Cmt",
"mobile.calendar.monthNames": "Ocak,Şubat,Mart,Nisan,Mayıs,Haziran,Temmuz,Ağustos,Eylül,Ekim,Kasım,Aralık",
"mobile.calendar.monthNamesShort": "Oca,Şub,Mar,Nis,May,Haz,Tem,Ağu,Eyl,Eki,Kas,Ara",
"mobile.channel_drawer.search": "Şuraya geç...",
"mobile.channel_info.alertMessageDeleteChannel": "{term} {name} kanalını arşivlemek istediğinize emin misiniz?",
"mobile.channel_info.alertMessageLeaveChannel": "{term} {name} kanalından ayrılmak istediğinize emin misiniz?",
@@ -158,6 +170,7 @@
"mobile.channel_list.members": "ÜYELER",
"mobile.channel_list.not_member": "ÜYE DEĞİL",
"mobile.channel_list.unreads": "OKUNMAMIŞLAR",
"mobile.channel_members.add_members_alert": "Kanala eklenecek en az bir üye seçmelisiniz.",
"mobile.channel.markAsRead": "Okunmuş Olarak İşaretle",
"mobile.client_upgrade": "Uygulamayı Güncelle",
"mobile.client_upgrade.can_upgrade_subtitle": "Yeni bir sürüm yayınlanmış.",
@@ -188,6 +201,7 @@
"mobile.create_channel.public": "Yeni Herkese Açık Kanal",
"mobile.create_post.read_only": "Bu kanal salt okunur",
"mobile.custom_list.no_results": "Herhangi bir sonuç bulunamadı",
"mobile.display_settings.theme": "Tema",
"mobile.document_preview.failed_description": "Belge açılırken bir sorun çıktı. Lütfen {fileType} türündeki dosyalar için bir görüntüleyicinin kurulmuş olduğundan emin olun ve yeniden deneyin.\n",
"mobile.document_preview.failed_title": "Belge Açılamadı",
"mobile.downloader.android_complete": "İndirildi",
@@ -231,7 +245,8 @@
"mobile.failed_network_action.shortDescription": "Bağlantınızın çalıştığından emin olup yeniden deneyin.",
"mobile.failed_network_action.title": "İnternet bağlantısı yok",
"mobile.file_upload.browse": "Dosyalara Gözat",
"mobile.file_upload.camera": "Fotoğraf ya da Görüntü Çek",
"mobile.file_upload.camera_photo": "Fotoğraf Çek",
"mobile.file_upload.camera_video": "Görüntü Kaydet",
"mobile.file_upload.library": "Fotoğraf Kitaplığı",
"mobile.file_upload.max_warning": "En fazla 5 dosya yüklenebilir.",
"mobile.file_upload.video": "Görüntü Kitaplığı",
@@ -247,6 +262,7 @@
"mobile.join_channel.error": "{displayName} kanalına katınılamadı. Lütfen bağlantınızı denetleyip yeniden deneyin.",
"mobile.loading_channels": "Kanallar Yükleniyor...",
"mobile.loading_members": "Üyeler Yükleniyor...",
"mobile.loading_options": "Ayarlar Yükleniyor...",
"mobile.loading_posts": "İletiler yükleniyor...",
"mobile.login_options.choose_title": "Oturum açma yönteminizi seçin",
"mobile.long_post_title": "{channelName} - İleti",
@@ -256,7 +272,6 @@
"mobile.managed.secured_by": "{vendor} tarafından korunuyor",
"mobile.markdown.code.copy_code": "Kodu Kopyala",
"mobile.markdown.code.plusMoreLines": "+ {count, number} diğer {count, plural, one {line} other {lines}}",
"mobile.markdown.image.error": "Görsel yüklenemedi:",
"mobile.markdown.image.too_large": "Görsel {maxWidth} x {maxHeight} boyutundan büyük:",
"mobile.markdown.link.copy_url": "Adresi Kopyala",
"mobile.mention.copy_mention": "Anmayı Kopyala",
@@ -310,12 +325,21 @@
"mobile.notification.in": " içinde ",
"mobile.offlineIndicator.connected": "Bağlandı",
"mobile.offlineIndicator.connecting": "Bağlanıyor...",
"mobile.offlineIndicator.offline": "Sunucuya bağlanılamadı",
"mobile.offlineIndicator.offline": "İnternet bağlantısı yok",
"mobile.open_dm.error": "{displayName} kanalına doğrudan ileti açılamadı. Lütfen bağlantınızı denetleyip yeniden deneyin.",
"mobile.open_gm.error": "Bu kullanıcılar ile bir grup iletisi açılamadı. Lütfen bağlantınızı denetleyip yeniden deneyin.",
"mobile.open_unknown_channel.error": "Kanala katılınamadı. Lütfen ön belleği sıfırlayıp yeniden deneyin.",
"mobile.pinned_posts.empty_description": "Önemli iletileri üzerinde basılı tutarken \"Kanala Sabitle\" seçeneği ile sabitleyebilirsiniz.",
"mobile.pinned_posts.empty_title": "Herhangi bir ileti sabitlenmemiş",
"mobile.post_info.add_reaction": "Tepki Ekle",
"mobile.post_info.copy_post": "İletiyi Kopyala",
"mobile.post_info.copy_text": "Metni Kopyala",
"mobile.post_info.flag": "İşaretle",
"mobile.post_info.pin": "Kanala Sabitle",
"mobile.post_info.unflag": "İşareti Kaldır",
"mobile.post_info.unpin": "Kanal Sabitlemesini Kaldır",
"mobile.post_pre_header.flagged": "İşaretlenmiş",
"mobile.post_pre_header.pinned": "Sabitlenmiş",
"mobile.post_pre_header.pinned_flagged": "Sabitlenmiş ve İşaretlenmiş",
"mobile.post_textbox.empty.message": "Boş bir ileti göndermeye çalışıyorsunuz.\nLütfen bir ileti yazdığınızdan ya da bir dosya eklediğinizden emin olun.",
"mobile.post_textbox.empty.ok": "Tamam",
"mobile.post_textbox.empty.title": "Boş İleti",
@@ -399,9 +423,16 @@
"mobile.share_extension.send": "Gönder",
"mobile.share_extension.team": "Takım",
"mobile.suggestion.members": "Üyeler",
"mobile.terms_of_service.alert_cancel": "İptal",
"mobile.terms_of_service.alert_ok": "Tamam",
"mobile.terms_of_service.alert_retry": "Yeniden Dene",
"mobile.terms_of_service.get_terms_error_description": "İnternet bağlantınızın çalıştığından emin olun ve yeniden deneyin. Sorun sürerse Sistem Yöneticiniz ile görüşün.",
"mobile.terms_of_service.get_terms_error_title": "Hizmet koşulları yüklenemedi.",
"mobile.terms_of_service.terms_rejected": "{siteName} kullanmaya başlamak için hizmet koşullarını onaylamanız gerekir. Ayrıntılı bilgi almak için lütfen Sistem Yöneticiniz ile görüşün.",
"mobile.timezone_settings.automatically": "Otomatik olarak ayarlansın",
"mobile.timezone_settings.manual": "Saat dilimini değiştir",
"mobile.timezone_settings.select": "Saat Dilimini Seçin",
"mobile.user_list.deactivated": "Devre Dışı",
"mobile.user.settings.notifications.email.fifteenMinutes": "15 dakikada bir",
"mobile.video_playback.failed_description": "Görüntü oynatılmaya çalışılırken bir sorun çıktı.\n",
"mobile.video_playback.failed_title": "Görüntü oynatılamadı",
@@ -414,8 +445,8 @@
"modal.manual_status.auto_responder.message_dnd": "Durumunuzu \"Rahatsız Etmeyin\" olarak değiştirmek ve Otomatik Yanıtları devre dışı bırakmak istediğinize emin misiniz?",
"modal.manual_status.auto_responder.message_offline": "Durumunuzu \"Çevrimdışı\" olarak değiştirmek ve Otomatik Yanıtları devre dışı bırakmak istediğinize emin misiniz?",
"modal.manual_status.auto_responder.message_online": "Durumunuzu \"Çevrimiçi\" olarak değiştirmek ve Otomatik Yanıtları devre dışı bırakmak istediğinize emin misiniz?",
"more_channels.noMore": "Katılabileceğiniz başka bir kanal yok",
"more_channels.title": "Diğer Kanallar",
"more_direct_channels.directchannel.deactivated": "{displayname} - Devre dışı bırakıldı",
"msg_typing.areTyping": "{users} ve {last} yazıyor...",
"msg_typing.isTyping": "{user} yazıyor...",
"navbar_dropdown.logout": "Oturumu Kapat",
@@ -433,7 +464,7 @@
"post_body.check_for_out_of_channel_mentions.message_last": "? Tüm ileti geçmişini görebilirler.",
"post_body.check_for_out_of_channel_mentions.message.multiple": "anılmış ancak kanalda değiller. Onları ",
"post_body.check_for_out_of_channel_mentions.message.one": "anılmış ancak kanalda değil. Onu ",
"post_body.commentedOn": "{name}{apostrophe} iletisine yorum yapıldı: ",
"post_body.commentedOn": "{name} iletisine yorum yapıldı: ",
"post_body.deleted": "(ileti silindi)",
"post_info.auto_responder": "OTOMATİK YANIT",
"post_info.bot": "BOT",
@@ -441,8 +472,6 @@
"post_info.edit": "Düzenle",
"post_info.message.show_less": "Daha Az Görüntüle",
"post_info.message.show_more": "Daha Çok Görüntüle",
"post_info.mobile.flag": "İşaretle",
"post_info.mobile.unflag": "İşareti Kaldır",
"post_info.system": "Sistem",
"post_message_view.edited": "(düzenlendi)",
"posts_view.newMsg": "Yeni İletiler",
@@ -457,10 +486,7 @@
"search_item.channelArchived": "Arşivlenmiş",
"sidebar_right_menu.logout": "Oturumu Kapat",
"sidebar_right_menu.report": "Sorun Bildir",
"sidebar.channels": "HERKESE AÇIK KANALLAR",
"sidebar.direct": "DOĞRUDAN İLETİLER",
"sidebar.favorite": "BEĞENDİĞİM KANALLAR",
"sidebar.pg": "ÖZEL KANALLAR",
"sidebar.unreads": "Diğer okunmamışlar",
"signup.email": "E-posta ve Parola",
"status_dropdown.set_away": "Uzakta",
@@ -476,8 +502,11 @@
"suggestion.mention.morechannels": "Diğer Kanallar",
"suggestion.mention.nonmembers": "Kanalda Değil",
"suggestion.mention.special": "Özel Anmalar",
"suggestion.search.direct": "Doğrudan İletiler",
"suggestion.search.private": "Özel Kanallar",
"suggestion.search.public": "Herkese Açık Kanallar",
"terms_of_service.agreeButton": "Onaylıyorum",
"terms_of_service.api_error": "İstek yerine getirilemedi. Sorun sürerse Sistem Yöneticiniz ile görüşün.",
"user.settings.display.clockDisplay": "Saat Görünümü",
"user.settings.display.militaryClock": "24 saat (16:00 gibi)",
"user.settings.display.normalClock": "12 saat (4:00 PM gibi)",

546
assets/base/i18n/uk.json Normal file
View File

@@ -0,0 +1,546 @@
{
"about.date": "Дата створення:",
"about.enterpriseEditione1": "Enterprise Edition",
"about.enterpriseEditionLearn": "Детальніше про редакцію Enterprise читайте на",
"about.enterpriseEditionSt": "Сучасне спілкування в вашій локальній мережі.",
"about.hash": "Хеш збірки:",
"about.hashee": "Хеш збірки EE:",
"about.teamEditionLearn": "Приєднуйтесь до спільноти Mattermost на",
"about.teamEditionSt": "Всі спілкування вашої команди в одному місці, з миттєвим пошуком та доступом звідусюди.",
"about.teamEditiont0": "Team Edition",
"about.teamEditiont1": "Enterprise Edition",
"about.title": "Про Mattermost",
"announcment_banner.dont_show_again": "Не показувати знову",
"api.channel.add_member.added": "{addedUsername} додано до каналу за {username}.",
"archivedChannelMessage": "Ви переглядаєте **архівований канал**. Нові повідомлення не можуть бути опубліковані.",
"center_panel.archived.closeChannel": "Закрити канал",
"channel_header.addMembers": "Додати учасників",
"channel_header.directchannel.you": "{displayname} (ви)",
"channel_header.manageMembers": "Управління учасниками",
"channel_header.pinnedPosts": "Прикріплені повідомлення",
"channel_header.viewMembers": "Переглянути список учасників",
"channel_info.header": "Заголовок:",
"channel_info.purpose": "Призначення:",
"channel_loader.someone": "Хтось",
"channel_members_modal.remove": "Видалити",
"channel_modal.cancel": "Відміна",
"channel_modal.descriptionHelp": "Опишіть, як слід використовувати цей канал.",
"channel_modal.header": "Заголовок",
"channel_modal.headerEx": "Наприклад: \"[Тема посилання](http://example.com)\"",
"channel_modal.headerHelp": "Задайте текст, який з'явиться в заголовку каналу поруч з назвою. Наприклад, ви можете включити часто використовувані посилання, зазначивши [Текст посилання] (http://example.com).",
"channel_modal.name": "Ім'я",
"channel_modal.nameEx": "Наприклад: \"Bugs\", \"Marketing\", \"客户支持\"",
"channel_modal.optional": "(не обов'язково)",
"channel_modal.purpose": "Призначення",
"channel_modal.purposeEx": "Наприклад: \"Канал для помилок і побажань\"",
"channel_notifications.muteChannel.settings": "Вимкнути канал",
"combined_system_message.added_to_channel.many_expanded": "{users} і {finalUser} були **додані до каналу** {actor}.",
"combined_system_message.added_to_channel.one": "{firstUser} **запрошується на канал** користувачем {actor}. ",
"combined_system_message.added_to_channel.one_you": "Ви були **додані на канал** користувачем {actor}.",
"combined_system_message.added_to_channel.two": "{FirstUser} і {secondUser} **запрошені в команду користувачем** {actor}.",
"combined_system_message.added_to_team.many_expanded": "{users} і {finalUser} були **додані до команди** {actor}. ",
"combined_system_message.added_to_team.one": "{firstUser} **запрошується в команду** користувачем {actor}.",
"combined_system_message.added_to_team.one_you": "Ви були **додані в команду** користувачем {actor}.",
"combined_system_message.added_to_team.two": "{firstUser} і {secondUser} **додані в команду** користувачем {actor}.",
"combined_system_message.joined_channel.many_expanded": "{users} і {lastUser} **приєдналися до каналу**.",
"combined_system_message.joined_channel.one": "{firstUser} **приєднується до каналу**.",
"combined_system_message.joined_channel.two": "{firstUser} і {secondUser} **приєдналися до каналу**.",
"combined_system_message.joined_team.many_expanded": "{users} і {lastUser} **приєдналися до команди**.",
"combined_system_message.joined_team.one": "{FirstUser} **приєднується до команди**.",
"combined_system_message.joined_team.two": "{FirstUser} і {secondUser} **приєдналися до команди**.",
"combined_system_message.left_channel.many_expanded": "{users} і {lastUser} **залишив канал**.",
"combined_system_message.left_channel.one": "{FirstUser} **залишає канал**. ",
"combined_system_message.left_channel.two": "{firstUser} і {secondUser} **залишив канал**. ",
"combined_system_message.left_team.many_expanded": "{users} і {lastUser} **залишили команду**.",
"combined_system_message.left_team.one": "{firstUser} **залишає команду**. ",
"combined_system_message.left_team.two": "{firstUser} та {secondUser} **залишили команду**.",
"combined_system_message.removed_from_channel.many_expanded": "{users} та {lastUser} **видалені з каналу**.",
"combined_system_message.removed_from_channel.one": "{firstUser} **було видалено з каналу**.",
"combined_system_message.removed_from_channel.one_you": "Ви були **видалені з каналу**.",
"combined_system_message.removed_from_channel.two": "{firstUser} та {secondUser} були **видалені з каналу**.",
"combined_system_message.removed_from_team.many_expanded": "{users} і {lastUser} **видалені з команди**.",
"combined_system_message.removed_from_team.one": "{firstUser} був **видалений з команди**.",
"combined_system_message.removed_from_team.one_you": "Ви були **вилучені з команди**.",
"combined_system_message.removed_from_team.two": "{firstUser} і {secondUser} **видалені з команди**.",
"combined_system_message.you": "Ви",
"create_comment.addComment": "Додати коментар...",
"create_post.deactivated": "Ви переглядаєте архівований канал з деактивованим користувачем.",
"create_post.write": "Ваше повідомлення...",
"edit_post.editPost": "Редагувати повідомлення...",
"edit_post.save": "Зберегти",
"error.team_not_found.title": "Команда не знайдена",
"file_attachment.download": "Завантажити",
"file_upload.fileAbove": "Не можна завантажити файл більше {max} МВ: {filename}",
"get_post_link_modal.title": "Скопіювати постійне посилання",
"integrations.add": "Додати",
"intro_messages.anyMember": "Будь-який учасник може зайти і читати цей канал.",
"intro_messages.beginning": "Початок {name}",
"intro_messages.channel": "Канал",
"intro_messages.creator": "{name} {type}, створений {creator} {date}.",
"intro_messages.group": "Приватний канал ",
"intro_messages.group_message": "Початок історії групових повідомлень з учасниками. Розміщені тут повідомлення і файли не видно за межами цієї області.",
"intro_messages.noCreator": "{name} - {type}, створене {date}",
"intro_messages.onlyInvited": "Тільки запрошені користувачі можуть бачити цей приватний канал.",
"last_users_message.added_to_channel.type": "Ви були **додані до каналу** користувачем {actor}.",
"last_users_message.added_to_team.type": "Ви були **додані в команду** користувачем {actor}.",
"last_users_message.first": "{firstUser} і",
"last_users_message.joined_channel.type": "**приєднується до каналу**",
"last_users_message.joined_team.type": "**приєднався до команди**.",
"last_users_message.left_channel.type": "**залишив канал**.",
"last_users_message.left_team.type": "**залишив команду**.",
"last_users_message.others": "{numOthers} інших",
"last_users_message.removed_from_channel.type": "Ви були **видалені з каналу**.",
"last_users_message.removed_from_team.type": "Ви були **вилучені з команди**.",
"login_mfa.enterToken": "Для завершення процесу реєстрації, введіть токен з аутентифікатора на вашому смартфоні",
"login_mfa.token": "Токен MFA",
"login_mfa.tokenReq": "Будь-ласка, введіть токен MFA",
"login.email": "Електронна пошта ",
"login.forgot": "Я забув свій пароль",
"login.invalidPassword": "Не вірний пароль.",
"login.ldapUsername": "Ім'я користувача AD/LDAP",
"login.ldapUsernameLower": "AD/LDAP ім'я користувача ",
"login.noEmail": "Будь-ласка, введіть свою електронну адресу ",
"login.noEmailLdapUsername": "Будь-ласка, введіть свою електронну адресу або {ldapUsername}",
"login.noEmailUsername": "Будь-ласка, введіть свою електронну адресу або ваше ім'я користувача",
"login.noEmailUsernameLdapUsername": "Будь-ласка, введіть свою електронну адресу, або ваше ім'я користувача, або {ldapUsername}",
"login.noLdapUsername": "Будь-ласка, введіть ваш {ldapUsername}",
"login.noPassword": "Будь-ласка, введіть свій поточний пароль.",
"login.noUsername": "Будь-ласка, введіть ваше ім'я користувача",
"login.noUsernameLdapUsername": "Введіть ваше ім'я користувача або {ldapUsername}",
"login.or": "або",
"login.password": "Пароль",
"login.signIn": "Увійти",
"login.username": "Ім'я користувача",
"login.userNotFound": "Ми не виявили акаунт за вашими даними для входу.",
"mobile.about.appVersion": "Версія програми: {version} (Збірка {number})",
"mobile.about.copyright": "Copyright 2015 - {currentYear} Mattermost, Inc. Всі права захищені",
"mobile.about.database": "Тип бази даних: {type}",
"mobile.about.licensed": "Ліцензія на: {company}",
"mobile.about.powered_by": "{site} працює від Mattermost",
"mobile.about.serverVersion": "Версія сервера: {version} (Збірка {number})",
"mobile.about.serverVersionNoBuild": "Версія сервера: {version}",
"mobile.account_notifications.reply.header": "НАДІСЛАТИ ЗАПИТАННЯ ДЛЯ",
"mobile.account_notifications.threads_mentions": "Згадки в тредах",
"mobile.account_notifications.threads_start": "Гілки розпочаті мною",
"mobile.account_notifications.threads_start_participate": "Якщо я почав цю гілку або приймав участь в ній",
"mobile.account.settings.save": "Зберегти ",
"mobile.action_menu.select": "Виберіть параметр",
"mobile.advanced_settings.clockDisplay": "Дисплей годинника",
"mobile.advanced_settings.delete": "Видалити ",
"mobile.advanced_settings.delete_file_cache": "Видалити кеш файлів",
"mobile.advanced_settings.delete_file_cache_message": "\nЦе дозволить видалити всі файли, збережені в кеш-пам'яті. Ви впевнені, що хочете видалити їх?\n",
"mobile.advanced_settings.reset_button": "Скинути",
"mobile.advanced_settings.reset_message": "\nДана дія приведе до очищення локальних даних і перезапуску програми.\n",
"mobile.advanced_settings.reset_title": "Скинути кеш",
"mobile.advanced_settings.timezone": "Часовий пояс",
"mobile.advanced_settings.title": "Додаткові параметри ",
"mobile.android.camera_permission_denied_description": "Щоб зробити фотографії та відеозаписи з вашою камерою, будь-ласка, змініть налаштування вашого дозволу.",
"mobile.android.camera_permission_denied_title": "Потрібен доступ до камери ",
"mobile.android.permission_denied_dismiss": "Відхилити",
"mobile.android.permission_denied_retry": "Встановити дозвіл",
"mobile.android.photos_permission_denied_description": "Щоб завантажити зображення з вашої бібліотеки, будь-ласка, змініть налаштування вашого дозволу.",
"mobile.android.photos_permission_denied_title": "Потрібен доступ до фото-бібліотеки",
"mobile.android.storage_permission_denied_description": "Щоб завантажити зображення з вашого пристрою Android, змініть налаштування дозволів.",
"mobile.android.storage_permission_denied_title": "Доступ до файлу зберігається обов'язково",
"mobile.android.videos_permission_denied_description": "Щоб завантажити відео з вашої бібліотеки, будь-ласка, змініть налаштування вашого дозволу.",
"mobile.android.videos_permission_denied_title": "Необхідно отримати доступ до відео-бібліотеки",
"mobile.announcement_banner.title": "Оголошення",
"mobile.authentication_error.message": "Mattermost зіткнувся з помилкою. Будь-ласка, повторно перевірте автентичність, щоб розпочати новий сеанс.",
"mobile.authentication_error.title": "Помилка авторизації",
"mobile.calendar.dayNames": "Неділя, понеділок, вівторок, середа, четвер, п'ятниця, субота",
"mobile.calendar.dayNamesShort": "Вс, Пн, Вт, Ср, Чт, Пт, Сб",
"mobile.calendar.monthNames": "Січень, лютий, березень, квітень, травень, червень, липень, серпень, вересень, жовтень, листопад, грудень",
"mobile.calendar.monthNamesShort": "Січень, лютий, березень, квітень, травень, червень, липень, серпень, середа, жовтень, листопад, грудень",
"mobile.channel_drawer.search": "Перейти до ...",
"mobile.channel_info.alertMessageDeleteChannel": "Ви впевнені, що хочете архівувати {term} {name}?",
"mobile.channel_info.alertMessageLeaveChannel": "Ви дійсно бажаєте залишити {term} {name}?",
"mobile.channel_info.alertNo": "Ні",
"mobile.channel_info.alertTitleDeleteChannel": "Архів {термін}",
"mobile.channel_info.alertTitleLeaveChannel": "Залишити {термін}",
"mobile.channel_info.alertYes": "Так ",
"mobile.channel_info.delete_failed": "Не вдалося архівувати канал {displayName}. Перевірте ваше з'єднання та повторіть спробу.",
"mobile.channel_info.edit": "Редагувати канал",
"mobile.channel_info.privateChannel": "Приватний канал",
"mobile.channel_info.publicChannel": "Публічний канал",
"mobile.channel_list.alertNo": "Ні ",
"mobile.channel_list.alertYes": "Так ",
"mobile.channel_list.channels": "КАНАЛИ",
"mobile.channel_list.closeDM": "Закрити пряме повідомлення",
"mobile.channel_list.closeGM": "Закрити групове повідомлення",
"mobile.channel_list.members": "ДЕПУТАТИ",
"mobile.channel_list.not_member": "НЕ УЧАСНИК ",
"mobile.channel_list.unreads": "НЕ ПРОЧИТАНІ ",
"mobile.channel_members.add_members_alert": "Ви повинні вибрати хоча б одного учасника для видалення з каналу. ",
"mobile.channel.markAsRead": "Позначити як прочитане",
"mobile.client_upgrade": "Оновити додаток",
"mobile.client_upgrade.can_upgrade_subtitle": "Нова версія доступна для завантаження.",
"mobile.client_upgrade.can_upgrade_title": "Доступне оновлення",
"mobile.client_upgrade.close": "Оновити пізніше",
"mobile.client_upgrade.current_version": "Остання версія: {версія}",
"mobile.client_upgrade.download_error.message": "Виникла помилка завантаження нової версії.",
"mobile.client_upgrade.download_error.title": "Не вдається встановити оновлення",
"mobile.client_upgrade.latest_version": "Ваша версія: {версія}",
"mobile.client_upgrade.listener.dismiss_button": "Відхилити",
"mobile.client_upgrade.listener.learn_more_button": "Вчи більше",
"mobile.client_upgrade.listener.message": "Оновлення клієнта доступне!",
"mobile.client_upgrade.listener.upgrade_button": "Оновити",
"mobile.client_upgrade.must_upgrade_subtitle": "Будь-ласка, оновіть додаток, щоб продовжити.",
"mobile.client_upgrade.must_upgrade_title": "Необхідне оновлення",
"mobile.client_upgrade.no_upgrade_subtitle": "У вас вже є найновіша версія.",
"mobile.client_upgrade.no_upgrade_title": "Ваш додаток до цього часу",
"mobile.client_upgrade.upgrade": "Оновити ",
"mobile.commands.error_title": "Помилка виконання команди",
"mobile.components.error_list.dismiss_all": "Відхилити все",
"mobile.components.select_server_view.connect": "Підключіться",
"mobile.components.select_server_view.connecting": "Підключення...",
"mobile.components.select_server_view.enterServerUrl": "Введіть адресу сервера",
"mobile.components.select_server_view.proceed": "Продовжити",
"mobile.components.select_server_view.siteUrlPlaceholder": "https://mattermost.example.com",
"mobile.create_channel": "Створити",
"mobile.create_channel.private": "Новий приватний канал",
"mobile.create_channel.public": "Новий публічний канал",
"mobile.create_post.read_only": "Цей канал доступний лише для читання",
"mobile.custom_list.no_results": "Немає результатів",
"mobile.display_settings.theme": "Тема",
"mobile.document_preview.failed_description": "Під час відкриття документа сталася помилка. Будь-ласка, переконайтеся, що ви встановили програму перегляду {fileType} та повторіть спробу.\n",
"mobile.document_preview.failed_title": "Відкрити документ не вдалося",
"mobile.downloader.android_complete": "Завантаження завершено",
"mobile.downloader.android_failed": "Помилка завантаження",
"mobile.downloader.android_permission": "Для збереження файлів нам потрібен доступ до папки завантажень.",
"mobile.downloader.android_started": "Завантаження розпочато",
"mobile.downloader.android_success": "завантаження успішне",
"mobile.downloader.complete": "Завантаження завершено",
"mobile.downloader.disabled_description": "Завантаження файлів вимкнено на цьому сервері. Щоб отримати докладнішу інформацію, зв'яжіться зі своїм системним адміністратором.\n",
"mobile.downloader.disabled_title": "Завантаження відключене",
"mobile.downloader.downloading": "Завантаження...",
"mobile.downloader.failed_description": "Під час завантаження файлу сталася помилка. Перевірте підключення до Інтернету та повторіть спробу.\n",
"mobile.downloader.failed_title": "Помилка завантаження",
"mobile.downloader.image_saved": "Зображення збережено",
"mobile.downloader.video_saved": "Збережено відео",
"mobile.drawer.teamsTitle": "Команди ",
"mobile.edit_channel": "Зберегти ",
"mobile.edit_post.title": "Редагування повідомлення",
"mobile.emoji_picker.activity": "АКТИВНІСТЬ ",
"mobile.emoji_picker.custom": "ПОСЛУГИ",
"mobile.emoji_picker.flags": "ФЛАГИ",
"mobile.emoji_picker.foods": "ЇЖА",
"mobile.emoji_picker.nature": "ПРИРОДА",
"mobile.emoji_picker.objects": "ОБ'ЄКТИ",
"mobile.emoji_picker.people": "ЛЮДИ",
"mobile.emoji_picker.places": "МІСЦЯ",
"mobile.emoji_picker.recent": "НЕЩОДАВНІ ",
"mobile.emoji_picker.symbols": "СИМВОЛИ",
"mobile.error_handler.button": "Перезапустити",
"mobile.error_handler.description": "\nНатисніть на кнопку \"Запустити знову\", щоб відкрити програму заново. Після запуску, ви можете повідомити про проблему через меню налаштувань.\n",
"mobile.error_handler.title": "Сталася неочікувана помилка",
"mobile.extension.authentication_required": "Необхідна аутентифікація: спершу ввійдіть, використовуючи додаток.",
"mobile.extension.file_error": "Сталася помилка при читанні файлу, якому слід надати доступ.\nБудь-ласка спробуйте ще раз.",
"mobile.extension.file_limit": "Обмін обмежується максимум 5 файлами.",
"mobile.extension.max_file_size": "Додатки до файлів, якими поділилися в Mattermost повинні бути менше {size}.",
"mobile.extension.permission": "Mattermost потрібен доступ до сховища пристрою для обміну файлами.",
"mobile.extension.posting": "Перевірка...",
"mobile.extension.title": "Поділіться в Mattermost",
"mobile.failed_network_action.description": "Здається, у вас виникла проблема з підключенням до Інтернету. Переконайтеся, що у вас активне з'єднання, і повторіть спробу.",
"mobile.failed_network_action.retry": "Спробуй ще раз",
"mobile.failed_network_action.shortDescription": "Переконайтеся, що у вас активне з'єднання, і повторіть спробу.",
"mobile.failed_network_action.title": "Немає підключення до Інтернету",
"mobile.file_upload.browse": "Перегляньте файли",
"mobile.file_upload.camera_photo": "Сфотографувати",
"mobile.file_upload.camera_video": "Візьміть відео",
"mobile.file_upload.library": "Бібліотека фотозображень ",
"mobile.file_upload.max_warning": "Максимальна кількість завантажень - до 5 файлів.",
"mobile.file_upload.video": "Відео бібліотека",
"mobile.flagged_posts.empty_description": "Прапори - це спосіб позначення повідомлень для подальшого спостереження. Ваші прапори є особистими, і їх не можуть бачити інші користувачі.",
"mobile.flagged_posts.empty_title": "Немає позначених повідомлень",
"mobile.help.title": "Допомога",
"mobile.image_preview.save": "Зберегти зображення",
"mobile.image_preview.save_video": "Зберегти відео",
"mobile.intro_messages.default_message": "Це перший канал, який бачить новий учасник групи - використовуйте його для направлення повідомлень, які повинні побачити всі.",
"mobile.intro_messages.default_welcome": "Ласкаво просимо до {name}!",
"mobile.intro_messages.DM": "Початок історії особистих повідомлень з {teammate}. Особисті повідомлення і файли доступні тут і не видно за межами цієї області.",
"mobile.ios.photos_permission_denied_description": "Щоб зберегти зображення та відео в бібліотеці, змініть налаштування вашого дозволу.",
"mobile.join_channel.error": "Ми не можемо підключитися до каналу {displayName}. Будь-ласка, перевірте підключення та спробуйте знову.",
"mobile.loading_channels": "Завантаження списку каналів...",
"mobile.loading_members": "Завантаження списку учасників...",
"mobile.loading_options": "Параметри завантаження...",
"mobile.loading_posts": "Завантаження повідомлень...",
"mobile.login_options.choose_title": "Виберіть спосіб входу",
"mobile.long_post_title": "{channelName} - повідомлення",
"mobile.managed.blocked_by": "Заблоковано {vendor}",
"mobile.managed.exit": "Вхід",
"mobile.managed.jailbreak": "Пристрої з Jailbroken не є довіреними {vendor}, вийдіть з програми.",
"mobile.managed.secured_by": "Захищено {vendor}",
"mobile.markdown.code.copy_code": "Копія коду",
"mobile.markdown.code.plusMoreLines": "+{count, number} more {count, plural, one {line} other {lines}}",
"mobile.markdown.image.too_large": "Зображення перевищує макс. розміри {maxWidth} до {maxHeight}:",
"mobile.markdown.link.copy_url": "Копіювати URL",
"mobile.mention.copy_mention": "Копіювати згадування",
"mobile.message_length.message": "Ваше поточне повідомлення задовге. Поточний символ: {max}/{count}",
"mobile.message_length.title": "Довжина повідомлення",
"mobile.more_dms.add_more": "Ви можете додати {залишилося, число} більше користувачів",
"mobile.more_dms.cannot_add_more": "Ви не можете додати більше користувачів",
"mobile.more_dms.start": "Почати",
"mobile.more_dms.title": "Нова розмова",
"mobile.more_dms.you": "@{username} - ви",
"mobile.notice_mobile_link": "мобільні додатки",
"mobile.notice_platform_link": "сервер",
"mobile.notice_text": "Mattermost це стало можливим за допомогою програмного забезпечення з відкритим вихідним кодом, яке використовується на наших {платформах} та {mobile}.",
"mobile.notification_settings_mentions.keywords": "Ключові слова:",
"mobile.notification_settings_mentions.keywordsDescription": "Інші слова, які викликають згадування",
"mobile.notification_settings_mentions.keywordsHelp": "Ключові слова є чутливими до регістру і повинні бути розділені комою.",
"mobile.notification_settings_mentions.wordsTrigger": "СЛОВА, ГЕНЕРУЮТЬ ПОВІДОМЛЕННЯ",
"mobile.notification_settings_mobile.default_sound": "За замовчуванням ({звук})",
"mobile.notification_settings_mobile.light": "Інформації ",
"mobile.notification_settings_mobile.no_sound": "Ні ",
"mobile.notification_settings_mobile.push_activity": "СКАСУВАТИ ПОВІДОМЛЕННЯ",
"mobile.notification_settings_mobile.push_activity_android": "Надіслати сповіщення",
"mobile.notification_settings_mobile.push_status": "ВІДПРАВЛЯТИ PUSH ПОВІДОМЛЕННЯ КОЛИ",
"mobile.notification_settings_mobile.push_status_android": "Тригер push сповіщень, коли",
"mobile.notification_settings_mobile.sound": "Звук",
"mobile.notification_settings_mobile.sounds_title": "Звуковий сигнал сповіщення",
"mobile.notification_settings_mobile.test": "Надішліть тестове повідомлення",
"mobile.notification_settings_mobile.test_push": "Це сповіщення про тестування",
"mobile.notification_settings_mobile.vibrate": "Вібрація ",
"mobile.notification_settings.auto_responder_short": "Автоматичні відповіді",
"mobile.notification_settings.auto_responder.default_message": "Привіт, я не на робочому місці і не можу відповісти на повідомлення.",
"mobile.notification_settings.auto_responder.enabled": "Увімкнути ",
"mobile.notification_settings.auto_responder.footer_message": "Встановіть спеціальне повідомлення, яке автоматично надсилатиметься у відповідь на прямі повідомлення. Зауваження в загальнодоступних та приватних каналах не будуть викликати автоматичну відповідь. Увімкнення автоматичних відповідей встановлює статус Out of Office і вимикає сповіщення.",
"mobile.notification_settings.auto_responder.message_placeholder": "Повідомлення",
"mobile.notification_settings.auto_responder.message_title": "НАДІЙНЕ ПОВІДОМЛЕННЯ",
"mobile.notification_settings.email": "Електронна пошта ",
"mobile.notification_settings.email_title": "Повідомлення електронною поштою ",
"mobile.notification_settings.email.send": "НАДІСЛАТИ ЕЛЕКТРОННИЙ ЗВІТУ",
"mobile.notification_settings.mentions_replies": "Згадки та відповіді",
"mobile.notification_settings.mentions.channelWide": "Загальні канали згадуються",
"mobile.notification_settings.mentions.reply_title": "Включити повідомлення про відповіді",
"mobile.notification_settings.mentions.sensitiveName": "Ваше ім'я справжнє ",
"mobile.notification_settings.mentions.sensitiveUsername": "Ваше ім'я користувача, що не має справжнього регістру",
"mobile.notification_settings.mobile": "Мобільний",
"mobile.notification_settings.mobile_title": "Надіслати sms повідомлення",
"mobile.notification_settings.modal_cancel": "СКАСУВАТИ",
"mobile.notification_settings.modal_save": "ЗБЕРЕГТИ",
"mobile.notification_settings.ooo_auto_responder": "Автоматичні відповіді на прямі повідомлення",
"mobile.notification_settings.save_failed_description": "Не вдалося зберегти налаштування сповіщень через проблему підключення. Будь-ласка, повторіть спробу.",
"mobile.notification_settings.save_failed_title": "Питання з'єднання",
"mobile.notification.in": "в",
"mobile.offlineIndicator.connected": "Підключений",
"mobile.offlineIndicator.connecting": "Підключення...",
"mobile.offlineIndicator.offline": "Немає підключення до Інтернету ",
"mobile.open_dm.error": "Ми не можемо підключитися до каналу {displayName}. Будь-ласка, перевірте підключення та спробуйте знову.",
"mobile.open_gm.error": "Помилка з'єднання із групи з цими користувачами. Будь-ласка, перевірте підключення та спробуйте заново.",
"mobile.open_unknown_channel.error": "Не вдається приєднатися до каналу. Скиньте кеш і спробуйте ще раз.",
"mobile.pinned_posts.empty_description": "Закріпіть важливі елементи, утримуючи на будь-якому повідомленні та вибравши \"Прикріпити до каналу\".",
"mobile.pinned_posts.empty_title": "Немає закріплених повідомлень",
"mobile.post_info.add_reaction": "Додати реакцію",
"mobile.post_info.copy_text": "Копіювати текст",
"mobile.post_info.flag": "Відзначити ",
"mobile.post_info.pin": "Закріпити на канал ",
"mobile.post_info.unflag": "Не позначено ",
"mobile.post_info.unpin": "Від'єднати від каналу ",
"mobile.post_pre_header.flagged": "Позначено",
"mobile.post_pre_header.pinned": "Прикріплено",
"mobile.post_pre_header.pinned_flagged": "Прикріплений і позначений",
"mobile.post_textbox.empty.message": "Ви намагаєтеся надіслати порожнє повідомлення.\nБудь-ласка, переконайтеся, що у вас є повідомлення або щонайменше один прикріплений файл.",
"mobile.post_textbox.empty.ok": "OK",
"mobile.post_textbox.empty.title": "Порожнє повідомлення",
"mobile.post_textbox.uploadFailedDesc": "Деякі вкладення не змогли завантажити на сервер. Ви впевнені, що хочете опублікувати це повідомлення? ",
"mobile.post_textbox.uploadFailedTitle": "Вкладення несправності",
"mobile.post.cancel": "Відміна ",
"mobile.post.delete_question": "Ви впевнені, що хочете видалити це повідомлення?",
"mobile.post.delete_title": "Видалити публікацію",
"mobile.post.failed_delete": "Видалити повідомлення",
"mobile.post.failed_retry": "Спробуй ще раз ",
"mobile.post.failed_title": "Не вдалося відправити повідомлення",
"mobile.post.retry": "Оновити",
"mobile.posts_view.moreMsg": "Більше нових повідомлень ",
"mobile.recent_mentions.empty_description": "Тут відображатимуться повідомлення, що містять ваше ім'я користувача та інші слова, які викликають згадування.",
"mobile.recent_mentions.empty_title": "Немає останніх згадок",
"mobile.rename_channel.display_name_maxLength": "Назва каналу має бути меншою за символи {maxLength, number}",
"mobile.rename_channel.display_name_minLength": "Назва каналу має містити {minLength, number} або більше символів",
"mobile.rename_channel.display_name_required": "Потрібна назва каналу ",
"mobile.rename_channel.name_lowercase": "URL-адреса - буквено-цифрові символи в нижньому регістрі",
"mobile.rename_channel.name_maxLength": "URL-адреса має містити менше символів {maxLength, number}",
"mobile.rename_channel.name_minLength": "URL-адреса має містити {minLength, number} або більше символів",
"mobile.rename_channel.name_required": "URL обов'язковий",
"mobile.reply_post.failed": "Не вдалося надіслати повідомлення.",
"mobile.request.invalid_response": "Отримано недійсну відповідь від сервера.",
"mobile.reset_status.alert_cancel": "Відміна",
"mobile.reset_status.alert_ok": "Ок",
"mobile.reset_status.title_ooo": "Вимкнути \"Out Of Office\"?",
"mobile.retry_message": "Не вдалося оновити повідомлення. Потягніть, щоб повторити спробу.",
"mobile.routes.channel_members.action": "Видалити учасника ",
"mobile.routes.channel_members.action_message": "Ви повинні вибрати хоча б одного учасника для видалення з каналу.",
"mobile.routes.channel_members.action_message_confirm": "Ви впевнені, що хочете видалити вибраних учасників із каналу?",
"mobile.routes.channelInfo": "Інформація",
"mobile.routes.channelInfo.createdBy": "Створено {creator} в",
"mobile.routes.channelInfo.delete_channel": "Архів каналів ",
"mobile.routes.channelInfo.favorite": "Вибрані",
"mobile.routes.code": "{language} код",
"mobile.routes.code.noLanguage": "Код",
"mobile.routes.edit_profile": "Редагувати профіль",
"mobile.routes.login": "Вхід",
"mobile.routes.loginOptions": "Вибір входу",
"mobile.routes.mfa": "Багатофакторна аутентифікація",
"mobile.routes.selectChannel": "Виберіть канал",
"mobile.routes.selectTeam": "Виберіть команду",
"mobile.routes.settings": "Налаштування",
"mobile.routes.sso": "Одиночна система входу",
"mobile.routes.table": "Таблиця",
"mobile.routes.tableImage": "Зображення ",
"mobile.routes.thread": "{channelName} Деталі",
"mobile.routes.thread_dm": "Прямий потік повідомлень",
"mobile.routes.user_profile": "Профіль ",
"mobile.routes.user_profile.local_time": "МІСЦЕВИЙ ЧАС",
"mobile.routes.user_profile.send_message": "Відправлення повідомлень ",
"mobile.search.after_modifier_description": "щоб знайти повідомлення після певної дати",
"mobile.search.before_modifier_description": "щоб знайти повідомлення до певної дати",
"mobile.search.from_modifier_description": "щоб знайти повідомлення від конкретних користувачів",
"mobile.search.from_modifier_title": "Ім'я користувача",
"mobile.search.in_modifier_description": "знайти повідомлення в певних каналах",
"mobile.search.in_modifier_title": "назва каналу",
"mobile.search.jump": "Перейти до останніх повідомлень ",
"mobile.search.no_results": "Нічого не знайдено",
"mobile.search.on_modifier_description": "щоб знайти повідомлення на певну дату",
"mobile.search.recent_title": "Останні пошуки",
"mobile.select_team.join_open": "Інші команди, до яких ви можете приєднатися.",
"mobile.select_team.no_teams": "Немає доступних команд, до яких ви можете приєднатися.",
"mobile.server_upgrade.button": "OK",
"mobile.server_upgrade.description": "\nДля продовження роботи потрібно оновлення сервера Mattermost. Будь-ласка, зверніться до адміністратора за подробицями.\n",
"mobile.server_upgrade.title": "Потрібно оновлення сервера",
"mobile.server_url.invalid_format": "Адреса повинен починатися з http:// або https://",
"mobile.session_expired": "Сесія закінчилася. Увійдіть, щоб продовжувати отримувати сповіщення.",
"mobile.set_status.away": "Не на місці",
"mobile.set_status.dnd": "Не турбувати ",
"mobile.set_status.offline": "Offline",
"mobile.set_status.online": "Online",
"mobile.settings.modal.check_for_upgrade": "Перевірити наявність оновлень",
"mobile.share_extension.cancel": "Відміна ",
"mobile.share_extension.channel": "Канал ",
"mobile.share_extension.error_close": "Закрити ",
"mobile.share_extension.error_message": "Під час використання розширення спільного використання сталася помилка.",
"mobile.share_extension.error_title": "Помилка розширення",
"mobile.share_extension.post_error": "Помилка при направленні повідомлення. Будь-ласка, спробуйте знову.",
"mobile.share_extension.send": "Відправити",
"mobile.share_extension.team": "Команди ",
"mobile.suggestion.members": "Учасники",
"mobile.terms_of_service.alert_cancel": "Відміна ",
"mobile.terms_of_service.alert_ok": "OK ",
"mobile.terms_of_service.alert_retry": "Спробуй ще раз ",
"mobile.terms_of_service.get_terms_error_description": "Переконайтеся, що у вас є активне з'єднання з Інтернетом та повторіть спробу. Якщо ця проблема не зникне, зверніться до свого системного адміністратора.",
"mobile.terms_of_service.get_terms_error_title": "Не вдається завантажити умови надання послуги.",
"mobile.terms_of_service.terms_rejected": "Ви повинні погодитись із умовами надання послуг, перш ніж звертатися до {siteName}. Щоб отримати докладнішу інформацію, зверніться до свого системного адміністратора. ",
"mobile.timezone_settings.automatically": "Встановити автоматично",
"mobile.timezone_settings.manual": "Змінити часовий пояс",
"mobile.timezone_settings.select": "Виберіть часовий пояс",
"mobile.user_list.deactivated": "Деактивувати ",
"mobile.user.settings.notifications.email.fifteenMinutes": "Кожні 15 хвилин",
"mobile.video_playback.failed_description": "Під час спроби відтворити відео сталася помилка.\n",
"mobile.video_playback.failed_title": "Відтворення відео не вдалося",
"mobile.video.save_error_message": "Щоб зберегти відеофайл, потрібно спочатку завантажити його.",
"mobile.video.save_error_title": "Зберегти відео помилку",
"mobile.youtube_playback_error.description": "Під час спроби відтворити відео YouTube сталася помилка.\nПодробиці: {detail}",
"mobile.youtube_playback_error.title": "Помилка відтворення YouTube",
"modal.manual_status.auto_responder.message_": "Ви хочете змінити свій статус на \"{status}\" і вимкнути автоматичні відповіді?",
"modal.manual_status.auto_responder.message_away": "Ви хочете змінити свій статус на \"Далеко\" і вимкнути автоматичні відповіді?",
"modal.manual_status.auto_responder.message_dnd": "Ви хочете змінити свій статус на \"Не турбувати\" та вимкнути автоматичні відповіді?",
"modal.manual_status.auto_responder.message_offline": "Ви хочете змінити свій статус на \"Offline\" і вимкнути автоматичні відповіді?",
"modal.manual_status.auto_responder.message_online": "Хочете переключити свій статус на \"Online\" і вимкнути автоматичні відповіді?",
"more_channels.noMore": "Більше немає каналів для входу",
"more_channels.title": "Більше каналів",
"msg_typing.areTyping": "{users} і {last} друкують...",
"msg_typing.isTyping": "{користувач} друкує...",
"navbar_dropdown.logout": "Вийти ",
"navbar.leave": "Залишити канал",
"password_form.title": "Скидання пароля",
"password_send.checkInbox": "Перевірте вашу поштову скриньку.",
"password_send.description": "Щоб скинути свій пароль, введіть адресу електронної пошти, яку ви використовували для реєстрації",
"password_send.error": "Будь-ласка, введіть коректну адресу електронної пошти. ",
"password_send.link": "Якщо обліковий запис існує, електронний лист для зміни пароля буде надіслано на адресу:",
"password_send.reset": "Скинути пароль ",
"permalink.error.access": "Постійне посилання належить до видаленого повідомлення або до каналу, на який ви не маєте доступу.",
"post_body.check_for_out_of_channel_mentions.link.and": "і",
"post_body.check_for_out_of_channel_mentions.link.private": "додайте їх до цього приватного каналу",
"post_body.check_for_out_of_channel_mentions.link.public": "додати їх до каналу",
"post_body.check_for_out_of_channel_mentions.message_last": "? Вони матимуть доступ до всієї історії повідомлень.",
"post_body.check_for_out_of_channel_mentions.message.multiple": "були згадані, але вони не перебувають у каналі. Чи хотіли б Ви",
"post_body.check_for_out_of_channel_mentions.message.one": "було згадано, але не в каналі. Чи хотіли б Ви",
"post_body.commentedOn": "Прокоментував {name} повідомлення:",
"post_body.deleted": "(повідомлення видалено)",
"post_info.auto_responder": "АВТОМАТИЧНА ВІДПОВІДЬ",
"post_info.bot": "BOT",
"post_info.del": "Видалити ",
"post_info.edit": "Редагувати",
"post_info.message.show_less": "Показати менше",
"post_info.message.show_more": "Показати більше",
"post_info.system": "Система",
"post_message_view.edited": "(змінено)",
"posts_view.newMsg": "Нові повідомлення",
"quick_switch_modal.teams": "Команди ",
"rename_channel.handleHolder": "URL-адреса - буквено-цифрові символи в нижньому регістрі",
"rename_channel.url": "URL",
"rhs_thread.rootPostDeletedMessage.body": "Частина цього потоку видалена через політику збереження даних. Ви більше не можете відповісти на цей потік.",
"search_bar.search": "Пошук ",
"search_header.results": "Результати пошуку ",
"search_header.title2": "Недавні згадки ",
"search_header.title3": "Зазначені повідомлення ",
"search_item.channelArchived": "Архівувати ",
"sidebar_right_menu.logout": "Вийти ",
"sidebar_right_menu.report": "Повідомити про проблему ",
"sidebar.direct": "ОСОБИСТІ ПОВІДОМЛЕННЯ",
"sidebar.unreads": "НОВІ ПОВІДОМЛЕННЯ ",
"signup.email": "Email і пароль ",
"status_dropdown.set_away": "Не на місці ",
"status_dropdown.set_dnd": "Не турбувати ",
"status_dropdown.set_offline": "Offline ",
"status_dropdown.set_online": "Online ",
"status_dropdown.set_ooo": "Не на робочому місці",
"suggestion.mention.all": "УВАГА: це призведе до повідомлення всіх в цьому каналі",
"suggestion.mention.channel": "Повідомляє всіх у каналі",
"suggestion.mention.channels": "Мої канали",
"suggestion.mention.here": "Повідомляє всіх у каналі та в Інтернеті",
"suggestion.mention.members": "Учасники каналу ",
"suggestion.mention.morechannels": "Інші канали",
"suggestion.mention.nonmembers": "Не в каналі",
"suggestion.mention.special": "Особливі згадки",
"suggestion.search.direct": "Особисті повідомлення",
"suggestion.search.private": "Приватні канали",
"suggestion.search.public": "Публічні канали ",
"terms_of_service.agreeButton": "Я згоден",
"terms_of_service.api_error": "Не вдається завантажити умови надання послуг. Якщо ця проблема не зникне, зверніться до свого системного адміністратора.",
"user.settings.display.clockDisplay": "Дисплей годинника ",
"user.settings.display.militaryClock": "24-годинний формат (приклад: 16:00)",
"user.settings.display.normalClock": "12-годинний формат (приклад: 4:00 PM)",
"user.settings.display.preferTime": "Виберіть бажаний формат часу.",
"user.settings.general.email": "Електронна пошта ",
"user.settings.general.emailGitlabCantUpdate": "Вхід здійснюється через GitLab. Електронна пошта не може бути оновлена. Електронна адреса, яку використовують для сповіщень, є {email}.",
"user.settings.general.emailGoogleCantUpdate": "Вхід здійснюється через Google. Електронна пошта не може бути оновлена. Електронна адреса, яку використовують для сповіщень, є {email}.",
"user.settings.general.emailHelp1": "Електронна пошта використовується для входу, сповіщень та скидання пароля. Електронна пошта вимагає підтвердження, якщо вона змінена",
"user.settings.general.emailHelp2": "Ваш системний адміністратор відключив електронну пошту. Ніякі повідомлення електронною поштою не надсилатимуться, доки їх не буде ввімкнено.",
"user.settings.general.emailLdapCantUpdate": "Вхід відбувається через AD/LDAP. Електронна пошта не може бути оновлена. Електронна адреса, яку використовують для сповіщень, є {email}.",
"user.settings.general.emailOffice365CantUpdate": "Вхід здійснюється через Office 365. Електронна пошта не може бути оновлена. Електронна адреса, яку використовують для сповіщень, є {email}.",
"user.settings.general.emailSamlCantUpdate": "Вхід здійснюється через GitLab. Електронна пошта не може бути оновлена. Електронна адреса, яку використовують для сповіщень, є {email}. ",
"user.settings.general.field_handled_externally": "Це поле обробляється вашим провайдером входу. Якщо ви хочете це змінити,то потрібно це зробити через свого постачальника послуг входу.",
"user.settings.general.firstName": "Ім'я ",
"user.settings.general.lastName": "Прізвище ",
"user.settings.general.nickname": "Псевдонім",
"user.settings.general.position": "Посада",
"user.settings.general.username": "Ім'я користувача ",
"user.settings.modal.display": "Вид",
"user.settings.modal.notifications": "Сповіщення ",
"user.settings.notifications.allActivity": "При будь-якій активності ",
"user.settings.notifications.comments": "Відповідь сповіщення",
"user.settings.notifications.email.disabled": "Email повідомлення відключені",
"user.settings.notifications.email.everyHour": "Щогодини",
"user.settings.notifications.email.immediately": "Негайно",
"user.settings.notifications.email.never": "Ніколи ",
"user.settings.notifications.email.send": "Надіслати повідомлення електронною поштою",
"user.settings.notifications.emailInfo": "Поштові повідомлення при згадках і особистих повідомленнях починають відправлятися якщо ви не в мережі або відійшли з {siteName} більше ніж на 5 хвилин.",
"user.settings.notifications.never": "Ніколи ",
"user.settings.notifications.onlyMentions": "Тільки для згадування та прямих повідомлень",
"user.settings.push_notification.away": "Не на місці або не в мережі",
"user.settings.push_notification.disabled": "Email повідомлення відключені ",
"user.settings.push_notification.disabled_long": "Системний адміністратор не активував сповіщення електронною поштою. ",
"user.settings.push_notification.offline": "Не в мережі",
"user.settings.push_notification.online": "У мережі, немає на місці або не в мережі",
"web.root.signup_info": "Всі спілкування вашої команди в одному місці, з миттєвим пошуком та доступом звідусюди. "
}

View File

@@ -17,6 +17,7 @@
"channel_header.addMembers": "添加成员",
"channel_header.directchannel.you": "{displayname} (您) ",
"channel_header.manageMembers": "成员管理",
"channel_header.pinnedPosts": "置顶消息",
"channel_header.viewMembers": "查看成员",
"channel_info.header": "标题:",
"channel_info.purpose": "用途:",
@@ -69,6 +70,7 @@
"edit_post.save": "保存",
"error.team_not_found.title": "未找到团队",
"file_attachment.download": "下载",
"file_upload.fileAbove": "文件超过{max}MB不能被上传{filename}",
"get_post_link_modal.title": "复制永久链接",
"integrations.add": "添加",
"intro_messages.anyMember": " 任何成员可以加入和查看这个频道。",
@@ -97,7 +99,14 @@
"login.invalidPassword": "您的密码是错误的。",
"login.ldapUsername": "AD/LDAP 用户名",
"login.ldapUsernameLower": "AD/LDAP 用户名",
"login.noEmail": "请输入您的电子邮件",
"login.noEmailLdapUsername": "请输入您的电子邮件或 {ldapUsername}",
"login.noEmailUsername": "请输入您的电子邮件或用户名",
"login.noEmailUsernameLdapUsername": "请输入您的电子邮件,用户名或 {ldapUsername}",
"login.noLdapUsername": "请输入您的 {ldapUsername}",
"login.noPassword": "请输入您的密码",
"login.noUsername": "请输入您的用户名",
"login.noUsernameLdapUsername": "请输入您的用户名或 {ldapUsername}",
"login.or": "或",
"login.password": "密码",
"login.signIn": "登录",
@@ -116,7 +125,6 @@
"mobile.account_notifications.threads_start_participate": "我创建的或参与的串",
"mobile.account.settings.save": "保存",
"mobile.action_menu.select": "选择选项",
"mobile.action_menu.submitted": "已提交",
"mobile.advanced_settings.clockDisplay": "时钟显示",
"mobile.advanced_settings.delete": "删除",
"mobile.advanced_settings.delete_file_cache": "删除文件缓存",
@@ -139,6 +147,10 @@
"mobile.announcement_banner.title": "公告",
"mobile.authentication_error.message": "Mattermost 遇到了错误。请重新认证开始新的会话。",
"mobile.authentication_error.title": "认证错误",
"mobile.calendar.dayNames": "周日,周一,周二,周三,周四,周五,周六",
"mobile.calendar.dayNamesShort": "周日,周一,周二,周三,周四,周五,周六",
"mobile.calendar.monthNames": "一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月",
"mobile.calendar.monthNamesShort": "一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月",
"mobile.channel_drawer.search": "转条到...",
"mobile.channel_info.alertMessageDeleteChannel": "您确定要归档 {term} {name}",
"mobile.channel_info.alertMessageLeaveChannel": "您确定要离开{term} {name}",
@@ -158,6 +170,7 @@
"mobile.channel_list.members": "成员",
"mobile.channel_list.not_member": "非成员",
"mobile.channel_list.unreads": "未读数",
"mobile.channel_members.add_members_alert": "您必须至少选择一个成员添加到频道。",
"mobile.channel.markAsRead": "标为已读",
"mobile.client_upgrade": "更新应用",
"mobile.client_upgrade.can_upgrade_subtitle": "有新版本可下载。",
@@ -188,6 +201,7 @@
"mobile.create_channel.public": "新公共频道",
"mobile.create_post.read_only": "此频道为只读",
"mobile.custom_list.no_results": "无结果",
"mobile.display_settings.theme": "主题",
"mobile.document_preview.failed_description": "打开文档时遇到错误。请确定您已安装 {fileType} 查看器后再重试。\n",
"mobile.document_preview.failed_title": "打开文档失败",
"mobile.downloader.android_complete": "下载完成",
@@ -231,7 +245,8 @@
"mobile.failed_network_action.shortDescription": "请确定您有可用的连接后重试。",
"mobile.failed_network_action.title": "无网络连接",
"mobile.file_upload.browse": "浏览文件",
"mobile.file_upload.camera": "拍照或视频",
"mobile.file_upload.camera_photo": "拍照",
"mobile.file_upload.camera_video": "录像",
"mobile.file_upload.library": "照片库",
"mobile.file_upload.max_warning": "最多上传 5 个文件。",
"mobile.file_upload.video": "视频库",
@@ -247,6 +262,7 @@
"mobile.join_channel.error": "我们无法加入频道 {displayName}。请检查您的网络连接再尝试。",
"mobile.loading_channels": "正在加载频道...",
"mobile.loading_members": "正在加载成员...",
"mobile.loading_options": "加载选项中...",
"mobile.loading_posts": "正在加载消息...",
"mobile.login_options.choose_title": "选择您的登入方式",
"mobile.long_post_title": "{channelName} - 消息",
@@ -256,7 +272,6 @@
"mobile.managed.secured_by": "被 {vendor} 安全保护",
"mobile.markdown.code.copy_code": "复制代码",
"mobile.markdown.code.plusMoreLines": "+{count, number} 行",
"mobile.markdown.image.error": "图片加载失败:",
"mobile.markdown.image.too_large": "图片超过最大尺寸 {maxWidth}x{maxHeight}",
"mobile.markdown.link.copy_url": "复制网址",
"mobile.mention.copy_mention": "复制提及",
@@ -266,7 +281,7 @@
"mobile.more_dms.cannot_add_more": "您不能再添加更多用户",
"mobile.more_dms.start": "开始",
"mobile.more_dms.title": "新建对话",
"mobile.more_dms.you": "(@{username} - 您)",
"mobile.more_dms.you": "@{username} - 您",
"mobile.notice_mobile_link": "移动应用",
"mobile.notice_platform_link": "服务器",
"mobile.notice_text": "Mattermost 通过开源软件实现了我们的 {platform} 以及 {mobile}。",
@@ -310,12 +325,21 @@
"mobile.notification.in": " 在 ",
"mobile.offlineIndicator.connected": "已连接",
"mobile.offlineIndicator.connecting": "正在连接...",
"mobile.offlineIndicator.offline": "无法连接到服务器",
"mobile.offlineIndicator.offline": "无网络连接",
"mobile.open_dm.error": "我们无法打开私信 {displayName}。请检查您的网络连接再尝试。",
"mobile.open_gm.error": "我们无法打开和这些用户的团体消息。请检查您的网络连接再尝试。",
"mobile.open_unknown_channel.error": "无法加入频道。请重置缓存后重试。",
"mobile.pinned_posts.empty_description": "按住任何消息并选择 \"置顶到频道\" 以置顶重要的项目。",
"mobile.pinned_posts.empty_title": "无置顶消息",
"mobile.post_info.add_reaction": "添加互动",
"mobile.post_info.copy_post": "复制消息",
"mobile.post_info.copy_text": "复制文字",
"mobile.post_info.flag": "标记",
"mobile.post_info.pin": "置顶到频道",
"mobile.post_info.unflag": "取消标记",
"mobile.post_info.unpin": "从频道取消置顶",
"mobile.post_pre_header.flagged": "已标记",
"mobile.post_pre_header.pinned": "已置顶",
"mobile.post_pre_header.pinned_flagged": "已被置顶及标记",
"mobile.post_textbox.empty.message": "您正在尝试发送空白消息。\n请确认有消息或至少附加一个附件。",
"mobile.post_textbox.empty.ok": "确定",
"mobile.post_textbox.empty.title": "空消息",
@@ -399,9 +423,16 @@
"mobile.share_extension.send": "发送",
"mobile.share_extension.team": "团队",
"mobile.suggestion.members": "成员",
"mobile.terms_of_service.alert_cancel": "取消",
"mobile.terms_of_service.alert_ok": "确定",
"mobile.terms_of_service.alert_retry": "重试",
"mobile.terms_of_service.get_terms_error_description": "请确定您有可用的网络连接后重试。如果此问题持续,请联系您的系统管理员。",
"mobile.terms_of_service.get_terms_error_title": "无法加载服务条款。",
"mobile.terms_of_service.terms_rejected": "在访问{siteName}前您必须同意服务条款。请联系您的系统管理员了解详情。",
"mobile.timezone_settings.automatically": "自动设定",
"mobile.timezone_settings.manual": "更改时区",
"mobile.timezone_settings.select": "选择时区",
"mobile.user_list.deactivated": "已停用",
"mobile.user.settings.notifications.email.fifteenMinutes": "每 15 分钟",
"mobile.video_playback.failed_description": "尝试播放视频时发送错误。\n",
"mobile.video_playback.failed_title": "视频播放失败",
@@ -414,8 +445,8 @@
"modal.manual_status.auto_responder.message_dnd": "你想切换您的状态到 \"请勿打扰\" 并停用自动回复吗?",
"modal.manual_status.auto_responder.message_offline": "你想切换您的状态到 \"离线\" 并停用自动回复吗?",
"modal.manual_status.auto_responder.message_online": "你想切换您的状态到 \"在线\" 并停用自动回复吗?",
"more_channels.noMore": "没有更多可加入的频道",
"more_channels.title": "更多频道",
"more_direct_channels.directchannel.deactivated": "{displayname} - 已停用",
"msg_typing.areTyping": "{users}和{last}正在输入...",
"msg_typing.isTyping": "{user}正在输入...",
"navbar_dropdown.logout": "注销",
@@ -433,7 +464,7 @@
"post_body.check_for_out_of_channel_mentions.message_last": "? 他们将可以查看所有消息历史。",
"post_body.check_for_out_of_channel_mentions.message.multiple": "被提及但他们不在频道。您是否要",
"post_body.check_for_out_of_channel_mentions.message.one": "被提及但不在频道。您是否要",
"post_body.commentedOn": "{name}{apostrophe} 的信息评论:",
"post_body.commentedOn": "{name}的消息评论",
"post_body.deleted": "(消息被删除)",
"post_info.auto_responder": "自动回复",
"post_info.bot": "机器人",
@@ -441,8 +472,6 @@
"post_info.edit": "编辑",
"post_info.message.show_less": "显示更少",
"post_info.message.show_more": "显示更多",
"post_info.mobile.flag": "标记",
"post_info.mobile.unflag": "取消标记",
"post_info.system": "系统",
"post_message_view.edited": "(已编辑)",
"posts_view.newMsg": "新消息",
@@ -457,10 +486,7 @@
"search_item.channelArchived": "已归档",
"sidebar_right_menu.logout": "注销",
"sidebar_right_menu.report": "报告问题",
"sidebar.channels": "公开频道",
"sidebar.direct": "私信",
"sidebar.favorite": "我的最爱频道",
"sidebar.pg": "私有频道",
"sidebar.unreads": "更多未读",
"signup.email": "电子邮箱和密码",
"status_dropdown.set_away": "离开",
@@ -476,8 +502,11 @@
"suggestion.mention.morechannels": "其他频道",
"suggestion.mention.nonmembers": "不在频道中",
"suggestion.mention.special": "特别提及",
"suggestion.search.direct": "私信",
"suggestion.search.private": "私有频道",
"suggestion.search.public": "公共频道",
"terms_of_service.agreeButton": "我同意",
"terms_of_service.api_error": "无法完成请求。如果此问题持续,请联系您的系统管理员。",
"user.settings.display.clockDisplay": "时钟显示",
"user.settings.display.militaryClock": "24小时格式例如16:00",
"user.settings.display.normalClock": "12小时格式例如4:00 PM",

View File

@@ -17,6 +17,7 @@
"channel_header.addMembers": "新增成員",
"channel_header.directchannel.you": "{displayname} (你) ",
"channel_header.manageMembers": "成員管理",
"channel_header.pinnedPosts": "釘選的訊息",
"channel_header.viewMembers": "檢視成員",
"channel_info.header": "標題:",
"channel_info.purpose": "用途",
@@ -69,6 +70,7 @@
"edit_post.save": "儲存",
"error.team_not_found.title": "找不到團隊",
"file_attachment.download": "下載",
"file_upload.fileAbove": "無法上傳超過{max}MB 的檔案:{filename}",
"get_post_link_modal.title": "複製永久連結",
"integrations.add": "新增",
"intro_messages.anyMember": " 任何成員可以加入並閱讀此頻道。",
@@ -97,7 +99,14 @@
"login.invalidPassword": "密碼不正確。",
"login.ldapUsername": "AD/LDAP 使用者名稱",
"login.ldapUsernameLower": "AD/LDAP 使用者名稱",
"login.noEmail": "請輸入電子郵件地址",
"login.noEmailLdapUsername": "請輸入電子郵件地址或{ldapUsername}",
"login.noEmailUsername": "請輸入電子郵件地址或使用者名稱",
"login.noEmailUsernameLdapUsername": "請輸入電子郵件地址、使用者名稱或 {ldapUsername}",
"login.noLdapUsername": "請輸入 {ldapUsername}",
"login.noPassword": "請輸入密碼",
"login.noUsername": "請輸入使用者名稱",
"login.noUsernameLdapUsername": "請輸入使用者名稱或 {ldapUsername}",
"login.or": "或",
"login.password": "密碼",
"login.signIn": "登入",
@@ -115,8 +124,7 @@
"mobile.account_notifications.threads_start": "我開啟的討論串",
"mobile.account_notifications.threads_start_participate": "我開啟或參與的討論串",
"mobile.account.settings.save": "儲存",
"mobile.action_menu.select": "Select an option",
"mobile.action_menu.submitted": "Submitted",
"mobile.action_menu.select": "選擇選項",
"mobile.advanced_settings.clockDisplay": "顯示時間",
"mobile.advanced_settings.delete": "刪除",
"mobile.advanced_settings.delete_file_cache": "刪除檔案快取",
@@ -139,6 +147,10 @@
"mobile.announcement_banner.title": "公佈事項",
"mobile.authentication_error.message": "Mattermost 發生錯誤。請重新認證以開始新的工作階段。",
"mobile.authentication_error.title": "認證錯誤",
"mobile.calendar.dayNames": "週日,週一,週二,週三,週四,週五,週六",
"mobile.calendar.dayNamesShort": "週日,週一,週二,週三,週四,週五,週六",
"mobile.calendar.monthNames": "一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月",
"mobile.calendar.monthNamesShort": "一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月",
"mobile.channel_drawer.search": "跳至...",
"mobile.channel_info.alertMessageDeleteChannel": "確定要封存{term} {name} 嘛?",
"mobile.channel_info.alertMessageLeaveChannel": "確定要離開{term} {name} 嘛?",
@@ -158,6 +170,7 @@
"mobile.channel_list.members": "成員",
"mobile.channel_list.not_member": "非成員",
"mobile.channel_list.unreads": "未讀",
"mobile.channel_members.add_members_alert": "必須選取至少一位成員以加入頻道。",
"mobile.channel.markAsRead": "標記為已讀",
"mobile.client_upgrade": "更新應用程式",
"mobile.client_upgrade.can_upgrade_subtitle": "有新版本可以下載。",
@@ -168,9 +181,9 @@
"mobile.client_upgrade.download_error.title": "無法安裝更新",
"mobile.client_upgrade.latest_version": "現有版本:{version}",
"mobile.client_upgrade.listener.dismiss_button": "解除",
"mobile.client_upgrade.listener.learn_more_button": "Learn More",
"mobile.client_upgrade.listener.learn_more_button": "了解更多",
"mobile.client_upgrade.listener.message": "有新的客戶端更新",
"mobile.client_upgrade.listener.upgrade_button": "Upgrade",
"mobile.client_upgrade.listener.upgrade_button": "升級",
"mobile.client_upgrade.must_upgrade_subtitle": "請更新應用程式以繼續。",
"mobile.client_upgrade.must_upgrade_title": "需要更新",
"mobile.client_upgrade.no_upgrade_subtitle": "已經安裝了最新版。",
@@ -188,6 +201,7 @@
"mobile.create_channel.public": "新的公開頻道",
"mobile.create_post.read_only": "此頻道唯讀",
"mobile.custom_list.no_results": "找不到相符的結果",
"mobile.display_settings.theme": "主題",
"mobile.document_preview.failed_description": "開啟文件時發生錯誤。請確定有安裝 {fileType} 觀看程式並再次嘗試。",
"mobile.document_preview.failed_title": "開啟文件失敗",
"mobile.downloader.android_complete": "下載完成",
@@ -231,7 +245,8 @@
"mobile.failed_network_action.shortDescription": "請確認有網路連線並重新嘗試。",
"mobile.failed_network_action.title": "沒有網際網路連線",
"mobile.file_upload.browse": "瀏覽檔案",
"mobile.file_upload.camera": "照相或錄影",
"mobile.file_upload.camera_photo": "照相",
"mobile.file_upload.camera_video": "錄影",
"mobile.file_upload.library": "相簿",
"mobile.file_upload.max_warning": "上傳最多 5 個檔案。",
"mobile.file_upload.video": "媒體櫃",
@@ -247,6 +262,7 @@
"mobile.join_channel.error": "無法加入頻道 {displayName}。請檢查連線並再試一次。 ",
"mobile.loading_channels": "正在載入頻道...",
"mobile.loading_members": "正在載入成員...",
"mobile.loading_options": "讀取選項...",
"mobile.loading_posts": "正在載入訊息...",
"mobile.login_options.choose_title": "選擇登入方式",
"mobile.long_post_title": "{channelName} - 訊息",
@@ -256,7 +272,6 @@
"mobile.managed.secured_by": "受到 {vendor} 保護",
"mobile.markdown.code.copy_code": "複製代碼",
"mobile.markdown.code.plusMoreLines": "以及其他 {count, number} 個檔案",
"mobile.markdown.image.error": "無法載入圖片:",
"mobile.markdown.image.too_large": "圖片超過最大尺寸 {maxWidth}x{maxHeight}",
"mobile.markdown.link.copy_url": "複製 URL",
"mobile.mention.copy_mention": "複製提及",
@@ -310,12 +325,21 @@
"mobile.notification.in": " 在 ",
"mobile.offlineIndicator.connected": "已連線",
"mobile.offlineIndicator.connecting": "連線中",
"mobile.offlineIndicator.offline": "無法連接至伺服器",
"mobile.offlineIndicator.offline": "沒有網際網路連線",
"mobile.open_dm.error": "無法開啟與{displayName}的直接傳訊。請檢查連線並再試一次。 ",
"mobile.open_gm.error": "無法開啟與這些使用者的直接傳訊。請檢查連線並再試一次。 ",
"mobile.open_unknown_channel.error": "無法加入頻道。請重置快取並重新嘗試。",
"mobile.pinned_posts.empty_description": "長按任何訊息並選擇\"釘選至頻道\"以釘選重要訊息。",
"mobile.pinned_posts.empty_title": "釘選的訊息",
"mobile.post_info.add_reaction": "新增反應",
"mobile.post_info.copy_post": "複製訊息",
"mobile.post_info.copy_text": "複製文字",
"mobile.post_info.flag": "標記",
"mobile.post_info.pin": "釘選至頻道",
"mobile.post_info.unflag": "取消標記",
"mobile.post_info.unpin": "解除釘選",
"mobile.post_pre_header.flagged": "已被標記",
"mobile.post_pre_header.pinned": "已釘選",
"mobile.post_pre_header.pinned_flagged": "被釘選及標記",
"mobile.post_textbox.empty.message": "正在嘗試發送空白訊息。\n請確定有訊息或是至少有附加 1 個檔案。",
"mobile.post_textbox.empty.ok": "確定",
"mobile.post_textbox.empty.title": "空白訊息",
@@ -338,7 +362,7 @@
"mobile.rename_channel.name_maxLength": "URL 必須少於 {maxLength, number} 字",
"mobile.rename_channel.name_minLength": "URL必須至少為 {minLength, number} 個字",
"mobile.rename_channel.name_required": "需要 URL",
"mobile.reply_post.failed": "Message failed to send.",
"mobile.reply_post.failed": "發送訊息失敗。",
"mobile.request.invalid_response": "從伺服器傳來無效的回應。",
"mobile.reset_status.alert_cancel": "取消",
"mobile.reset_status.alert_ok": "確定",
@@ -399,9 +423,16 @@
"mobile.share_extension.send": "送出",
"mobile.share_extension.team": "團隊",
"mobile.suggestion.members": "成員",
"mobile.terms_of_service.alert_cancel": "取消",
"mobile.terms_of_service.alert_ok": "確定",
"mobile.terms_of_service.alert_retry": "重試",
"mobile.terms_of_service.get_terms_error_description": "請確定有運作中的網際網路連線並重新嘗試。如果此問題依然持續,請聯絡系統管理員。",
"mobile.terms_of_service.get_terms_error_title": "無法讀取使用條款。",
"mobile.terms_of_service.terms_rejected": "在使用 {siteName} 前必須同意服務條款。詳情請聯絡系統管理員",
"mobile.timezone_settings.automatically": "自動設定",
"mobile.timezone_settings.manual": "更改時區",
"mobile.timezone_settings.select": "選擇時區",
"mobile.user_list.deactivated": "停用",
"mobile.user.settings.notifications.email.fifteenMinutes": "每 15 分鐘",
"mobile.video_playback.failed_description": "嘗試播放影片時發生錯誤。",
"mobile.video_playback.failed_title": "無法播放影片",
@@ -414,8 +445,8 @@
"modal.manual_status.auto_responder.message_dnd": "是否將狀態改為\"請勿打擾\"並停用自動回復?",
"modal.manual_status.auto_responder.message_offline": "是否將狀態改為\"離線\"並停用自動回復?",
"modal.manual_status.auto_responder.message_online": "是否將狀態改為\"線上\"並停用自動回復?",
"more_channels.noMore": "沒有可參加的頻道",
"more_channels.title": "更多頻道",
"more_direct_channels.directchannel.deactivated": "{displayname} - 已停用",
"msg_typing.areTyping": "{users}跟{last}正在打字...",
"msg_typing.isTyping": "{user}正在打字...",
"navbar_dropdown.logout": "登出",
@@ -433,7 +464,7 @@
"post_body.check_for_out_of_channel_mentions.message_last": "?他們將可以瀏覽所有的訊息紀錄。",
"post_body.check_for_out_of_channel_mentions.message.multiple": "被提及但是不在此頻道。請問是否要",
"post_body.check_for_out_of_channel_mentions.message.one": "被提及但是不在此頻道。請問是否要",
"post_body.commentedOn": " {name}{apostrophe} 訊息的註解",
"post_body.commentedOn": " 已在{name}的訊息上註記",
"post_body.deleted": "(訊息已刪除)",
"post_info.auto_responder": "自動回覆",
"post_info.bot": "機器人",
@@ -441,8 +472,6 @@
"post_info.edit": "編輯",
"post_info.message.show_less": "顯示較少內容",
"post_info.message.show_more": "顯示更多",
"post_info.mobile.flag": "標記",
"post_info.mobile.unflag": "取消標記",
"post_info.system": "系統",
"post_message_view.edited": "(被編輯過)",
"posts_view.newMsg": "新訊息",
@@ -457,10 +486,7 @@
"search_item.channelArchived": "已封存",
"sidebar_right_menu.logout": "登出",
"sidebar_right_menu.report": "回報錯誤",
"sidebar.channels": "公開頻道",
"sidebar.direct": "直接傳訊",
"sidebar.favorite": "我的最愛",
"sidebar.pg": "私人頻道",
"sidebar.unreads": "更多未讀訊息",
"signup.email": "電子郵件跟密碼",
"status_dropdown.set_away": "離開",
@@ -476,8 +502,11 @@
"suggestion.mention.morechannels": "其他頻道",
"suggestion.mention.nonmembers": "不在頻道中",
"suggestion.mention.special": "特別提及",
"suggestion.search.direct": "直接傳訊",
"suggestion.search.private": "私人頻道",
"suggestion.search.public": "公開頻道",
"terms_of_service.agreeButton": "同意",
"terms_of_service.api_error": "無法完成請求。如果此問題持續發生,請聯絡系統管理員。",
"user.settings.display.clockDisplay": "顯示時間",
"user.settings.display.militaryClock": "24 小時制(如16:00)",
"user.settings.display.normalClock": "12 小時制(如4:00 PM)",

Some files were not shown because too many files have changed in this diff Show More