Merge 4.21.0 into master (#3467)

This commit is contained in:
Diego Mello 2021-10-28 14:48:53 -03:00 committed by GitHub
parent 4db5db7fa0
commit 5cd4d82477
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
196 changed files with 26479 additions and 15019 deletions

View File

@ -23,3 +23,4 @@ SECURITY.md
npm-debug.log npm-debug.log
yarn-error.log yarn-error.log
app/i18n/locales/

File diff suppressed because it is too large Load Diff

View File

@ -144,7 +144,7 @@ android {
minSdkVersion rootProject.ext.minSdkVersion minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion
versionCode VERSIONCODE as Integer versionCode VERSIONCODE as Integer
versionName "4.20.0" versionName "4.21.0"
vectorDrawables.useSupportLibrary = true vectorDrawables.useSupportLibrary = true
if (!isFoss) { if (!isFoss) {
manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String] manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String]
@ -260,7 +260,6 @@ android {
dependencies { dependencies {
addUnimodulesDependencies() addUnimodulesDependencies()
implementation project(':watermelondb')
implementation project(':@react-native-community_viewpager') implementation project(':@react-native-community_viewpager')
playImplementation project(':reactnativenotifications') playImplementation project(':reactnativenotifications')
playImplementation project(':@react-native-firebase_app') playImplementation project(':@react-native-firebase_app')
@ -293,6 +292,8 @@ dependencies {
implementation "com.github.bumptech.glide:glide:4.9.0" implementation "com.github.bumptech.glide:glide:4.9.0"
annotationProcessor "com.github.bumptech.glide:compiler:4.9.0" annotationProcessor "com.github.bumptech.glide:compiler:4.9.0"
implementation "com.tencent:mmkv-static:1.2.1" implementation "com.tencent:mmkv-static:1.2.1"
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation "com.squareup.okhttp3:okhttp-urlconnection:4.9.0"
} }
// Run this once to be able to run the application with BUCK // Run this once to be able to run the application with BUCK

View File

@ -3,7 +3,6 @@
package="chat.rocket.reactnative"> package="chat.rocket.reactnative">
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application <application

View File

@ -9,8 +9,9 @@ import com.facebook.react.ReactApplication;
import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage; import com.facebook.react.ReactPackage;
import com.facebook.soloader.SoLoader; import com.facebook.soloader.SoLoader;
import com.nozbe.watermelondb.WatermelonDBPackage;
import com.reactnativecommunity.viewpager.RNCViewPagerPackage; import com.reactnativecommunity.viewpager.RNCViewPagerPackage;
import com.facebook.react.bridge.JSIModulePackage;
import com.swmansion.reanimated.ReanimatedJSIModulePackage;
import org.unimodules.adapters.react.ModuleRegistryAdapter; import org.unimodules.adapters.react.ModuleRegistryAdapter;
import org.unimodules.adapters.react.ReactModuleRegistryProvider; import org.unimodules.adapters.react.ReactModuleRegistryProvider;
@ -35,7 +36,6 @@ public class MainApplication extends Application implements ReactApplication {
protected List<ReactPackage> getPackages() { protected List<ReactPackage> getPackages() {
@SuppressWarnings("UnnecessaryLocalVariable") @SuppressWarnings("UnnecessaryLocalVariable")
List<ReactPackage> packages = new PackageList(this).getPackages(); List<ReactPackage> packages = new PackageList(this).getPackages();
packages.add(new WatermelonDBPackage());
packages.add(new RNCViewPagerPackage()); packages.add(new RNCViewPagerPackage());
packages.add(new SSLPinningPackage()); packages.add(new SSLPinningPackage());
List<ReactPackage> unimodules = Arrays.<ReactPackage>asList( List<ReactPackage> unimodules = Arrays.<ReactPackage>asList(
@ -52,6 +52,11 @@ public class MainApplication extends Application implements ReactApplication {
return "index"; return "index";
} }
@Override
protected JSIModulePackage getJSIModulePackage() {
return new ReanimatedJSIModulePackage(); // <- add
}
@Override @Override
protected @Nullable String getBundleAssetName() { protected @Nullable String getBundleAssetName() {
return "app.bundle"; return "app.bundle";

View File

@ -14,7 +14,6 @@ public class BasePackageList {
new expo.modules.imageloader.ImageLoaderPackage(), new expo.modules.imageloader.ImageLoaderPackage(),
new expo.modules.keepawake.KeepAwakePackage(), new expo.modules.keepawake.KeepAwakePackage(),
new expo.modules.localauthentication.LocalAuthenticationPackage(), new expo.modules.localauthentication.LocalAuthenticationPackage(),
new expo.modules.permissions.PermissionsPackage(),
new expo.modules.videothumbnails.VideoThumbnailsPackage(), new expo.modules.videothumbnails.VideoThumbnailsPackage(),
new expo.modules.webbrowser.WebBrowserPackage() new expo.modules.webbrowser.WebBrowserPackage()
); );

View File

@ -10,8 +10,8 @@ buildscript {
ext { ext {
buildToolsVersion = "29.0.3" buildToolsVersion = "29.0.3"
minSdkVersion = 23 minSdkVersion = 23
compileSdkVersion = 29 compileSdkVersion = 30
targetSdkVersion = 29 targetSdkVersion = 30
ndkVersion = "20.1.5948944" ndkVersion = "20.1.5948944"
glideVersion = "4.11.0" glideVersion = "4.11.0"
kotlin_version = "1.3.50" kotlin_version = "1.3.50"
@ -68,10 +68,10 @@ subprojects { subproject ->
afterEvaluate { afterEvaluate {
if ((subproject.plugins.hasPlugin('android') || subproject.plugins.hasPlugin('android-library'))) { if ((subproject.plugins.hasPlugin('android') || subproject.plugins.hasPlugin('android-library'))) {
android { android {
compileSdkVersion 29 compileSdkVersion 30
buildToolsVersion "29.0.3" buildToolsVersion "29.0.3"
defaultConfig { defaultConfig {
targetSdkVersion 29 targetSdkVersion 30
} }
variantFilter { variant -> variantFilter { variant ->
def names = variant.flavors*.name def names = variant.flavors*.name

View File

@ -2,8 +2,6 @@ apply from: '../node_modules/react-native-unimodules/gradle.groovy'
includeUnimodulesProjects() includeUnimodulesProjects()
rootProject.name = 'RocketChatRN' rootProject.name = 'RocketChatRN'
include ':watermelondb'
project(':watermelondb').projectDir = new File(rootProject.projectDir, '../node_modules/@nozbe/watermelondb/native/android')
include ':reactnativenotifications' include ':reactnativenotifications'
project(':reactnativenotifications').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-notifications/android/app') project(':reactnativenotifications').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-notifications/android/app')
include ':@react-native-community_viewpager' include ':@react-native-community_viewpager'

View File

@ -18,8 +18,6 @@ export const ROOMS = createRequestTypes('ROOMS', [
'SET_SEARCH', 'SET_SEARCH',
'CLOSE_SERVER_DROPDOWN', 'CLOSE_SERVER_DROPDOWN',
'TOGGLE_SERVER_DROPDOWN', 'TOGGLE_SERVER_DROPDOWN',
'CLOSE_SORT_DROPDOWN',
'TOGGLE_SORT_DROPDOWN',
'OPEN_SEARCH_HEADER', 'OPEN_SEARCH_HEADER',
'CLOSE_SEARCH_HEADER' 'CLOSE_SEARCH_HEADER'
]); ]);

View File

@ -45,18 +45,6 @@ export function toggleServerDropdown() {
}; };
} }
export function closeSortDropdown() {
return {
type: types.ROOMS.CLOSE_SORT_DROPDOWN
};
}
export function toggleSortDropdown() {
return {
type: types.ROOMS.TOGGLE_SORT_DROPDOWN
};
}
export function openSearchHeader() { export function openSearchHeader() {
return { return {
type: types.ROOMS.OPEN_SEARCH_HEADER type: types.ROOMS.OPEN_SEARCH_HEADER

View File

@ -0,0 +1,2 @@
export const DISPLAY_MODE_CONDENSED = 'condensed';
export const DISPLAY_MODE_EXPANDED = 'expanded';

View File

@ -3,7 +3,7 @@ import { Keyboard, Text } from 'react-native';
import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { useSafeAreaInsets } from 'react-native-safe-area-context';
import { State, TapGestureHandler } from 'react-native-gesture-handler'; import { State, TapGestureHandler } from 'react-native-gesture-handler';
import ScrollBottomSheet from 'react-native-scroll-bottom-sheet'; import ScrollBottomSheet from 'react-native-scroll-bottom-sheet';
import Animated, { Easing, Extrapolate, Value, interpolate } from 'react-native-reanimated'; import Animated, { Easing, Extrapolate, Value, interpolateNode } from 'react-native-reanimated';
import * as Haptics from 'expo-haptics'; import * as Haptics from 'expo-haptics';
import { useBackHandler } from '@react-native-community/hooks'; import { useBackHandler } from '@react-native-community/hooks';
@ -132,11 +132,12 @@ const ActionSheet = React.memo(
const renderItem = ({ item }: any) => <Item item={item} hide={hide} theme={theme} />; const renderItem = ({ item }: any) => <Item item={item} hide={hide} theme={theme} />;
const animatedPosition = React.useRef(new Value(0)); const animatedPosition = React.useRef(new Value(0));
const opacity = interpolate(animatedPosition.current, { // TODO: Similar to https://github.com/wcandillon/react-native-redash/issues/307#issuecomment-827442320
const opacity = interpolateNode(animatedPosition.current, {
inputRange: [0, 1], inputRange: [0, 1],
outputRange: [0, themes[theme].backdropOpacity], outputRange: [0, themes[theme].backdropOpacity],
extrapolate: Extrapolate.CLAMP extrapolate: Extrapolate.CLAMP
}); }) as any;
return ( return (
<> <>

View File

@ -85,7 +85,7 @@ const Avatar = React.memo(
} }
return ( return (
<View style={[avatarStyle, style]}> <View style={[avatarStyle, style]} testID='avatar'>
{image} {image}
{children} {children}
</View> </View>

View File

@ -1,5 +1,5 @@
import React from 'react'; import React from 'react';
import { ScrollView, StyleSheet, View } from 'react-native'; import { ScrollView, ScrollViewProps, StyleSheet, View } from 'react-native';
import { themes } from '../constants/colors'; import { themes } from '../constants/colors';
import sharedStyles from '../views/Styles'; import sharedStyles from '../views/Styles';
@ -10,10 +10,10 @@ import AppVersion from './AppVersion';
import { isTablet } from '../utils/deviceInfo'; import { isTablet } from '../utils/deviceInfo';
import SafeAreaView from './SafeAreaView'; import SafeAreaView from './SafeAreaView';
interface IFormContainer { interface IFormContainer extends ScrollViewProps {
theme: string; theme: string;
testID: string; testID: string;
children: JSX.Element; children: React.ReactNode;
} }
const styles = StyleSheet.create({ const styles = StyleSheet.create({
@ -22,11 +22,11 @@ const styles = StyleSheet.create({
} }
}); });
export const FormContainerInner = ({ children }: { children: JSX.Element }) => ( export const FormContainerInner = ({ children }: { children: React.ReactNode }): JSX.Element => (
<View style={[sharedStyles.container, isTablet && sharedStyles.tabletScreenContent]}>{children}</View> <View style={[sharedStyles.container, isTablet && sharedStyles.tabletScreenContent]}>{children}</View>
); );
const FormContainer = ({ children, theme, testID, ...props }: IFormContainer) => ( const FormContainer = ({ children, theme, testID, ...props }: IFormContainer): JSX.Element => (
// @ts-ignore // @ts-ignore
<KeyboardView <KeyboardView
style={{ backgroundColor: themes[theme].backgroundColor }} style={{ backgroundColor: themes[theme].backgroundColor }}

View File

@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import { StyleSheet, Text, View } from 'react-native'; import { StyleProp, StyleSheet, Text, TextInputProps, TextStyle, View, ViewStyle } from 'react-native';
import { BorderlessButton } from 'react-native-gesture-handler'; import Touchable from 'react-native-platform-touchable';
import sharedStyles from '../views/Styles'; import sharedStyles from '../views/Styles';
import TextInput from '../presentation/TextInput'; import TextInput from '../presentation/TextInput';
@ -50,23 +50,21 @@ const styles = StyleSheet.create({
} }
}); });
interface IRCTextInputProps { interface IRCTextInputProps extends TextInputProps {
label: string; label?: string;
error: { error?: {
error: any; error: any;
reason: any; reason: any;
}; };
loading: boolean; loading?: boolean;
secureTextEntry: boolean; containerStyle?: StyleProp<ViewStyle>;
containerStyle: any; inputStyle?: TextStyle;
inputStyle: object; inputRef?: React.Ref<unknown>;
inputRef: any; testID?: string;
testID: string; iconLeft?: string;
iconLeft: string; iconRight?: string;
iconRight: string; left?: JSX.Element;
placeholder: string; onIconRightPress?(): void;
left: JSX.Element;
onIconRightPress(): void;
theme: string; theme: string;
} }
@ -95,9 +93,9 @@ export default class RCTextInput extends React.PureComponent<IRCTextInputProps,
get iconRight() { get iconRight() {
const { iconRight, onIconRightPress, theme } = this.props; const { iconRight, onIconRightPress, theme } = this.props;
return ( return (
<BorderlessButton onPress={onIconRightPress} style={[styles.iconContainer, styles.iconRight]}> <Touchable onPress={onIconRightPress} style={[styles.iconContainer, styles.iconRight]}>
<CustomIcon name={iconRight} style={{ color: themes[theme].bodyText }} size={20} /> <CustomIcon name={iconRight} style={{ color: themes[theme].bodyText }} size={20} />
</BorderlessButton> </Touchable>
); );
} }
@ -105,14 +103,14 @@ export default class RCTextInput extends React.PureComponent<IRCTextInputProps,
const { showPassword } = this.state; const { showPassword } = this.state;
const { testID, theme } = this.props; const { testID, theme } = this.props;
return ( return (
<BorderlessButton onPress={this.tooglePassword} style={[styles.iconContainer, styles.iconRight]}> <Touchable onPress={this.tooglePassword} style={[styles.iconContainer, styles.iconRight]}>
<CustomIcon <CustomIcon
name={showPassword ? 'unread-on-top' : 'unread-on-top-disabled'} name={showPassword ? 'unread-on-top' : 'unread-on-top-disabled'}
testID={testID ? `${testID}-icon-right` : null} testID={testID ? `${testID}-icon-right` : null}
style={{ color: themes[theme].auxiliaryText }} style={{ color: themes[theme].auxiliaryText }}
size={20} size={20}
/> />
</BorderlessButton> </Touchable>
); );
} }
@ -148,17 +146,10 @@ export default class RCTextInput extends React.PureComponent<IRCTextInputProps,
return ( return (
<View style={[styles.inputContainer, containerStyle]}> <View style={[styles.inputContainer, containerStyle]}>
{label ? ( {label ? (
<Text <Text style={[styles.label, { color: themes[theme].titleText }, error?.error && { color: dangerColor }]}>{label}</Text>
contentDescription={null}
// @ts-ignore
accessibilityLabel={null}
style={[styles.label, { color: themes[theme].titleText }, error.error && { color: dangerColor }]}>
{label}
</Text>
) : null} ) : null}
<View style={styles.wrap}> <View style={styles.wrap}>
<TextInput <TextInput
/* @ts-ignore*/
style={[ style={[
styles.input, styles.input,
iconLeft && styles.inputIconLeft, iconLeft && styles.inputIconLeft,
@ -168,14 +159,13 @@ export default class RCTextInput extends React.PureComponent<IRCTextInputProps,
borderColor: themes[theme].separatorColor, borderColor: themes[theme].separatorColor,
color: themes[theme].titleText color: themes[theme].titleText
}, },
error.error && { error?.error && {
color: dangerColor, color: dangerColor,
borderColor: dangerColor borderColor: dangerColor
}, },
inputStyle inputStyle
]} ]}
ref={inputRef} ref={inputRef}
/* @ts-ignore*/
autoCorrect={false} autoCorrect={false}
autoCapitalize='none' autoCapitalize='none'
underlineColorAndroid='transparent' underlineColorAndroid='transparent'
@ -183,8 +173,6 @@ export default class RCTextInput extends React.PureComponent<IRCTextInputProps,
testID={testID} testID={testID}
accessibilityLabel={placeholder} accessibilityLabel={placeholder}
placeholder={placeholder} placeholder={placeholder}
/* @ts-ignore*/
contentDescription={placeholder}
theme={theme} theme={theme}
{...inputProps} {...inputProps}
/> />

View File

@ -1,6 +1,7 @@
import React from 'react'; import React from 'react';
import { Text } from 'react-native'; import { Text } from 'react-native';
import { useTheme } from '../../theme';
import { themes } from '../../constants/colors'; import { themes } from '../../constants/colors';
import styles from './styles'; import styles from './styles';
import { events, logEvent } from '../../utils/log'; import { events, logEvent } from '../../utils/log';
@ -9,20 +10,20 @@ interface IAtMention {
mention: string; mention: string;
username: string; username: string;
navToRoomInfo: Function; navToRoomInfo: Function;
style: any; style?: any;
useRealName: boolean; useRealName: boolean;
theme: string;
mentions: any; mentions: any;
} }
const AtMention = React.memo(({ mention, mentions, username, navToRoomInfo, style = [], useRealName, theme }: IAtMention) => { const AtMention = React.memo(({ mention, mentions, username, navToRoomInfo, style = [], useRealName }: IAtMention) => {
const { theme } = useTheme();
if (mention === 'all' || mention === 'here') { if (mention === 'all' || mention === 'here') {
return ( return (
<Text <Text
style={[ style={[
styles.mention, styles.mention,
{ {
color: themes[theme].mentionGroupColor color: themes[theme!].mentionGroupColor
}, },
...style ...style
]}> ]}>
@ -34,11 +35,11 @@ const AtMention = React.memo(({ mention, mentions, username, navToRoomInfo, styl
let mentionStyle = {}; let mentionStyle = {};
if (mention === username) { if (mention === username) {
mentionStyle = { mentionStyle = {
color: themes[theme].mentionMeColor color: themes[theme!].mentionMeColor
}; };
} else { } else {
mentionStyle = { mentionStyle = {
color: themes[theme].mentionOtherColor color: themes[theme!].mentionOtherColor
}; };
} }
@ -61,7 +62,7 @@ const AtMention = React.memo(({ mention, mentions, username, navToRoomInfo, styl
); );
} }
return <Text style={[styles.text, { color: themes[theme].bodyText }, ...style]}>{`@${mention}`}</Text>; return <Text style={[styles.text, { color: themes[theme!].bodyText }, ...style]}>{`@${mention}`}</Text>;
}); });
export default AtMention; export default AtMention;

View File

@ -1,23 +1,26 @@
import React from 'react'; import React from 'react';
import { Text } from 'react-native'; import { Text, TextStyle } from 'react-native';
import { themes } from '../../constants/colors'; import { themes } from '../../constants/colors';
import { useTheme } from '../../theme';
import styles from './styles'; import styles from './styles';
interface IHashtag { interface IHashtag {
hashtag: string; hashtag: string;
navToRoomInfo: Function; navToRoomInfo: Function;
style: []; style?: TextStyle[];
theme: string;
channels: { channels: {
[index: number]: string | number;
name: string; name: string;
_id: number; _id: number;
}[]; }[];
} }
const Hashtag = React.memo(({ hashtag, channels, navToRoomInfo, style = [], theme }: IHashtag) => { const Hashtag = React.memo(({ hashtag, channels, navToRoomInfo, style = [] }: IHashtag) => {
const { theme } = useTheme();
const handlePress = () => { const handlePress = () => {
const index = channels.findIndex(channel => channel.name === hashtag); const index = channels?.findIndex(channel => channel.name === hashtag);
const navParam = { const navParam = {
t: 'c', t: 'c',
rid: channels[index]._id rid: channels[index]._id
@ -31,7 +34,7 @@ const Hashtag = React.memo(({ hashtag, channels, navToRoomInfo, style = [], them
style={[ style={[
styles.mention, styles.mention,
{ {
color: themes[theme].mentionOtherColor color: themes[theme!].mentionOtherColor
}, },
...style ...style
]} ]}
@ -40,7 +43,7 @@ const Hashtag = React.memo(({ hashtag, channels, navToRoomInfo, style = [], them
</Text> </Text>
); );
} }
return <Text style={[styles.text, { color: themes[theme].bodyText }, ...style]}>{`#${hashtag}`}</Text>; return <Text style={[styles.text, { color: themes[theme!].bodyText }, ...style]}>{`#${hashtag}`}</Text>;
}); });
export default Hashtag; export default Hashtag;

View File

@ -3,6 +3,7 @@ import { Image, Text } from 'react-native';
import { Node, Parser } from 'commonmark'; import { Node, Parser } from 'commonmark';
import Renderer from 'commonmark-react-renderer'; import Renderer from 'commonmark-react-renderer';
import removeMarkdown from 'remove-markdown'; import removeMarkdown from 'remove-markdown';
import { MarkdownAST } from '@rocket.chat/message-parser';
import shortnameToUnicode from '../../utils/shortnameToUnicode'; import shortnameToUnicode from '../../utils/shortnameToUnicode';
import I18n from '../../i18n'; import I18n from '../../i18n';
@ -20,9 +21,20 @@ import MarkdownTableCell from './TableCell';
import mergeTextNodes from './mergeTextNodes'; import mergeTextNodes from './mergeTextNodes';
import styles from './styles'; import styles from './styles';
import { isValidURL } from '../../utils/url'; import { isValidURL } from '../../utils/url';
import NewMarkdown from './new';
interface IUser {
_id: string;
username: string;
name: string;
}
type UserMention = Pick<IUser, '_id' | 'username' | 'name'>;
interface IMarkdownProps { interface IMarkdownProps {
msg: string; msg: string;
md: MarkdownAST;
mentions: UserMention[];
getCustomEmoji: Function; getCustomEmoji: Function;
baseUrl: string; baseUrl: string;
username: string; username: string;
@ -35,7 +47,7 @@ interface IMarkdownProps {
name: string; name: string;
_id: number; _id: number;
}[]; }[];
mentions: object[]; enableMessageParser: boolean;
navToRoomInfo: Function; navToRoomInfo: Function;
preview: boolean; preview: boolean;
theme: string; theme: string;
@ -97,8 +109,10 @@ class Markdown extends PureComponent<IMarkdownProps, any> {
constructor(props: IMarkdownProps) { constructor(props: IMarkdownProps) {
super(props); super(props);
if (!this.isNewMarkdown) {
this.renderer = this.createRenderer(); this.renderer = this.createRenderer();
} }
}
createRenderer = () => createRenderer = () =>
new Renderer({ new Renderer({
@ -139,6 +153,11 @@ class Markdown extends PureComponent<IMarkdownProps, any> {
renderParagraphsInLists: true renderParagraphsInLists: true
}); });
get isNewMarkdown(): boolean {
const { md, enableMessageParser } = this.props;
return enableMessageParser && !!md;
}
editedMessage = (ast: any) => { editedMessage = (ast: any) => {
const { isEdited } = this.props; const { isEdited } = this.props;
if (isEdited) { if (isEdited) {
@ -227,12 +246,12 @@ class Markdown extends PureComponent<IMarkdownProps, any> {
}; };
renderHashtag = ({ hashtag }: { hashtag: string }) => { renderHashtag = ({ hashtag }: { hashtag: string }) => {
const { channels, navToRoomInfo, style, theme } = this.props; const { channels, navToRoomInfo, style } = this.props;
return <MarkdownHashtag hashtag={hashtag} channels={channels} navToRoomInfo={navToRoomInfo} theme={theme} style={style} />; return <MarkdownHashtag hashtag={hashtag} channels={channels} navToRoomInfo={navToRoomInfo} style={style} />;
}; };
renderAtMention = ({ mentionName }: { mentionName: string }) => { renderAtMention = ({ mentionName }: { mentionName: string }) => {
const { username, mentions, navToRoomInfo, useRealName, style, theme } = this.props; const { username, mentions, navToRoomInfo, useRealName, style } = this.props;
return ( return (
<MarkdownAtMention <MarkdownAtMention
mentions={mentions} mentions={mentions}
@ -240,7 +259,6 @@ class Markdown extends PureComponent<IMarkdownProps, any> {
useRealName={useRealName} useRealName={useRealName}
username={username} username={username}
navToRoomInfo={navToRoomInfo} navToRoomInfo={navToRoomInfo}
theme={theme}
style={style} style={style}
/> />
); );
@ -329,12 +347,44 @@ class Markdown extends PureComponent<IMarkdownProps, any> {
}; };
render() { render() {
const { msg, numberOfLines, preview = false, theme, style = [], testID } = this.props; const {
msg,
md,
numberOfLines,
preview = false,
theme,
style = [],
testID,
mentions,
channels,
navToRoomInfo,
useRealName,
username,
getCustomEmoji,
baseUrl,
onLinkPress
} = this.props;
if (!msg) { if (!msg) {
return null; return null;
} }
if (this.isNewMarkdown && !preview) {
return (
<NewMarkdown
username={username}
baseUrl={baseUrl}
getCustomEmoji={getCustomEmoji}
useRealName={useRealName}
tokens={md}
mentions={mentions}
channels={channels}
navToRoomInfo={navToRoomInfo}
onLinkPress={onLinkPress}
/>
);
}
let m = formatText(msg); let m = formatText(msg);
// Ex: '[ ](https://open.rocket.chat/group/test?msg=abcdef) Test' // Ex: '[ ](https://open.rocket.chat/group/test?msg=abcdef) Test'

View File

@ -0,0 +1,25 @@
import React from 'react';
import { StyleSheet, View } from 'react-native';
import { BigEmoji as BigEmojiProps } from '@rocket.chat/message-parser';
import Emoji from './Emoji';
interface IBigEmojiProps {
value: BigEmojiProps['value'];
}
const styles = StyleSheet.create({
container: {
flexDirection: 'row'
}
});
const BigEmoji = ({ value }: IBigEmojiProps): JSX.Element => (
<View style={styles.container}>
{value.map(block => (
<Emoji value={block.value} isBigEmoji />
))}
</View>
);
export default BigEmoji;

View File

@ -0,0 +1,40 @@
import React from 'react';
import { StyleSheet, Text } from 'react-native';
import { Bold as BoldProps } from '@rocket.chat/message-parser';
import sharedStyles from '../../../views/Styles';
import Strike from './Strike';
import Italic from './Italic';
import Plain from './Plain';
import Link from './Link';
interface IBoldProps {
value: BoldProps['value'];
}
const styles = StyleSheet.create({
text: {
...sharedStyles.textBold
}
});
const Bold = ({ value }: IBoldProps): JSX.Element => (
<Text style={styles.text}>
{value.map(block => {
switch (block.type) {
case 'LINK':
return <Link value={block.value} />;
case 'PLAIN_TEXT':
return <Plain value={block.value} />;
case 'STRIKE':
return <Strike value={block.value} />;
case 'ITALIC':
return <Italic value={block.value} />;
default:
return null;
}
})}
</Text>
);
export default Bold;

View File

@ -0,0 +1,39 @@
import React from 'react';
import { Text } from 'react-native';
import { Code as CodeProps } from '@rocket.chat/message-parser';
import styles from '../styles';
import { themes } from '../../../constants/colors';
import { useTheme } from '../../../theme';
import CodeLine from './CodeLine';
interface ICodeProps {
value: CodeProps['value'];
}
const Code = ({ value }: ICodeProps): JSX.Element => {
const { theme } = useTheme();
return (
<Text
style={[
styles.codeBlock,
{
color: themes[theme!].bodyText,
backgroundColor: themes[theme!].bannerBackground,
borderColor: themes[theme!].borderColor
}
]}>
{value.map(block => {
switch (block.type) {
case 'CODE_LINE':
return <CodeLine value={block.value} />;
default:
return null;
}
})}
</Text>
);
};
export default Code;

View File

@ -0,0 +1,17 @@
import React from 'react';
import { Text } from 'react-native';
import { CodeLine as CodeLineProps } from '@rocket.chat/message-parser';
interface ICodeLineProps {
value: CodeLineProps['value'];
}
const CodeLine = ({ value }: ICodeLineProps): JSX.Element | null => {
if (value.type !== 'PLAIN_TEXT') {
return null;
}
return <Text>{value.value}</Text>;
};
export default CodeLine;

View File

@ -0,0 +1,29 @@
import React, { useContext } from 'react';
import { Text } from 'react-native';
import { Emoji as EmojiProps } from '@rocket.chat/message-parser';
import shortnameToUnicode from '../../../utils/shortnameToUnicode';
import { themes } from '../../../constants/colors';
import { useTheme } from '../../../theme';
import styles from '../styles';
import CustomEmoji from '../../EmojiPicker/CustomEmoji';
import MarkdownContext from './MarkdownContext';
interface IEmojiProps {
value: EmojiProps['value'];
isBigEmoji?: boolean;
}
const Emoji = ({ value, isBigEmoji }: IEmojiProps): JSX.Element => {
const { theme } = useTheme();
const { baseUrl, getCustomEmoji } = useContext(MarkdownContext);
const emojiUnicode = shortnameToUnicode(`:${value.value}:`);
const emoji = getCustomEmoji?.(value.value);
if (emoji) {
return <CustomEmoji baseUrl={baseUrl} style={[isBigEmoji ? styles.customEmojiBig : styles.customEmoji]} emoji={emoji} />;
}
return <Text style={[{ color: themes[theme!].bodyText }, isBigEmoji ? styles.textBig : styles.text]}>{emojiUnicode}</Text>;
};
export default Emoji;

View File

@ -0,0 +1,32 @@
import React from 'react';
import { Text } from 'react-native';
import { Heading as HeadingProps } from '@rocket.chat/message-parser';
import { themes } from '../../../constants/colors';
import styles from '../styles';
import { useTheme } from '../../../theme';
interface IHeadingProps {
value: HeadingProps['value'];
level: HeadingProps['level'];
}
const Heading = ({ value, level }: IHeadingProps): JSX.Element => {
const { theme } = useTheme();
const textStyle = styles[`heading${level}`];
return (
<Text style={[textStyle, { color: themes[theme!].bodyText }]}>
{value.map(block => {
switch (block.type) {
case 'PLAIN_TEXT':
return block.value;
default:
return null;
}
})}
</Text>
);
};
export default Heading;

View File

@ -0,0 +1,41 @@
import React from 'react';
import { Image as ImageProps } from '@rocket.chat/message-parser';
import { createImageProgress } from 'react-native-image-progress';
import * as Progress from 'react-native-progress';
import FastImage from '@rocket.chat/react-native-fast-image';
import { useTheme } from '../../../theme';
import { themes } from '../../../constants/colors';
import styles from '../../message/styles';
interface IImageProps {
value: ImageProps['value'];
}
type TMessageImage = {
img: string;
theme: string;
};
const ImageProgress = createImageProgress(FastImage);
const MessageImage = ({ img, theme }: TMessageImage) => (
<ImageProgress
style={[styles.inlineImage, { borderColor: themes[theme].borderColor }]}
source={{ uri: encodeURI(img) }}
resizeMode={FastImage.resizeMode.cover}
indicator={Progress.Pie}
indicatorProps={{
color: themes[theme].actionTintColor
}}
/>
);
const Image = ({ value }: IImageProps): JSX.Element => {
const { theme } = useTheme();
const { src } = value;
return <MessageImage img={src.value} theme={theme!} />;
};
export default Image;

View File

@ -0,0 +1,64 @@
import React, { useContext } from 'react';
import { Text } from 'react-native';
import { Paragraph as ParagraphProps } from '@rocket.chat/message-parser';
import Hashtag from '../Hashtag';
import AtMention from '../AtMention';
import styles from '../styles';
import Link from './Link';
import Plain from './Plain';
import Bold from './Bold';
import Strike from './Strike';
import Italic from './Italic';
import Emoji from './Emoji';
import InlineCode from './InlineCode';
import Image from './Image';
import MarkdownContext from './MarkdownContext';
interface IParagraphProps {
value: ParagraphProps['value'];
}
const Inline = ({ value }: IParagraphProps): JSX.Element => {
const { useRealName, username, navToRoomInfo, mentions, channels } = useContext(MarkdownContext);
return (
<Text style={styles.inline}>
{value.map(block => {
switch (block.type) {
case 'IMAGE':
return <Image value={block.value} />;
case 'PLAIN_TEXT':
return <Plain value={block.value} />;
case 'BOLD':
return <Bold value={block.value} />;
case 'STRIKE':
return <Strike value={block.value} />;
case 'ITALIC':
return <Italic value={block.value} />;
case 'LINK':
return <Link value={block.value} />;
case 'MENTION_USER':
return (
<AtMention
mention={block.value.value}
useRealName={useRealName}
username={username}
navToRoomInfo={navToRoomInfo}
mentions={mentions}
/>
);
case 'EMOJI':
return <Emoji value={block.value} />;
case 'MENTION_CHANNEL':
return <Hashtag hashtag={block.value.value} navToRoomInfo={navToRoomInfo} channels={channels} />;
case 'INLINE_CODE':
return <InlineCode value={block.value} />;
default:
return null;
}
})}
</Text>
);
};
export default Inline;

View File

@ -0,0 +1,38 @@
import React from 'react';
import { Text } from 'react-native';
import { InlineCode as InlineCodeProps } from '@rocket.chat/message-parser';
import styles from '../styles';
import { themes } from '../../../constants/colors';
import { useTheme } from '../../../theme';
interface IInlineCodeProps {
value: InlineCodeProps['value'];
}
const InlineCode = ({ value }: IInlineCodeProps): JSX.Element => {
const { theme } = useTheme();
return (
<Text
style={[
styles.codeInline,
{
color: themes[theme!].bodyText,
backgroundColor: themes[theme!].bannerBackground,
borderColor: themes[theme!].borderColor
}
]}>
{(block => {
switch (block.type) {
case 'PLAIN_TEXT':
return <Text>{block.value}</Text>;
default:
return null;
}
})(value)}
</Text>
);
};
export default InlineCode;

View File

@ -0,0 +1,39 @@
import React from 'react';
import { StyleSheet, Text } from 'react-native';
import { Italic as ItalicProps } from '@rocket.chat/message-parser';
import Strike from './Strike';
import Bold from './Bold';
import Plain from './Plain';
import Link from './Link';
interface IItalicProps {
value: ItalicProps['value'];
}
const styles = StyleSheet.create({
text: {
fontStyle: 'italic'
}
});
const Italic = ({ value }: IItalicProps): JSX.Element => (
<Text style={styles.text}>
{value.map(block => {
switch (block.type) {
case 'LINK':
return <Link value={block.value} />;
case 'PLAIN_TEXT':
return <Plain value={block.value} />;
case 'STRIKE':
return <Strike value={block.value} />;
case 'BOLD':
return <Bold value={block.value} />;
default:
return null;
}
})}
</Text>
);
export default Italic;

View File

@ -0,0 +1,60 @@
import React, { useContext } from 'react';
import { Text, Clipboard } from 'react-native';
import { Link as LinkProps } from '@rocket.chat/message-parser';
import styles from '../styles';
import I18n from '../../../i18n';
import { LISTENER } from '../../Toast';
import { useTheme } from '../../../theme';
import openLink from '../../../utils/openLink';
import EventEmitter from '../../../utils/events';
import { themes } from '../../../constants/colors';
import Strike from './Strike';
import Italic from './Italic';
import Bold from './Bold';
import MarkdownContext from './MarkdownContext';
interface ILinkProps {
value: LinkProps['value'];
}
const Link = ({ value }: ILinkProps): JSX.Element => {
const { theme } = useTheme();
const { onLinkPress } = useContext(MarkdownContext);
const { src, label } = value;
const handlePress = () => {
if (!src.value) {
return;
}
if (onLinkPress) {
return onLinkPress(src.value);
}
openLink(src.value, theme);
};
const onLongPress = () => {
Clipboard.setString(src.value);
EventEmitter.emit(LISTENER, { message: I18n.t('Copied_to_clipboard') });
};
return (
<Text onPress={handlePress} onLongPress={onLongPress} style={[styles.link, { color: themes[theme!].actionTintColor }]}>
{(block => {
switch (block.type) {
case 'PLAIN_TEXT':
return block.value;
case 'STRIKE':
return <Strike value={block.value} />;
case 'ITALIC':
return <Italic value={block.value} />;
case 'BOLD':
return <Bold value={block.value} />;
default:
return null;
}
})(label)}
</Text>
);
};
export default Link;

View File

@ -0,0 +1,29 @@
import React from 'react';
import { UserMention } from '../../message/interfaces';
interface IMarkdownContext {
mentions: UserMention[];
channels: {
name: string;
_id: number;
}[];
useRealName: boolean;
username: string;
baseUrl: string;
navToRoomInfo: Function;
getCustomEmoji?: Function;
onLinkPress?: Function;
}
const defaultState = {
mentions: [],
channels: [],
useRealName: false,
username: '',
baseUrl: '',
navToRoomInfo: () => {}
};
const MarkdownContext = React.createContext<IMarkdownContext>(defaultState);
export default MarkdownContext;

View File

@ -0,0 +1,28 @@
import React from 'react';
import { View, Text } from 'react-native';
import { OrderedList as OrderedListProps } from '@rocket.chat/message-parser';
import Inline from './Inline';
import styles from '../styles';
import { themes } from '../../../constants/colors';
import { useTheme } from '../../../theme';
interface IOrderedListProps {
value: OrderedListProps['value'];
}
const OrderedList = ({ value }: IOrderedListProps): JSX.Element => {
const { theme } = useTheme();
return (
<View>
{value.map((item, index) => (
<View style={styles.row}>
<Text style={[styles.text, { color: themes[theme!].bodyText }]}>{index + 1}. </Text>
<Inline value={item.value} />
</View>
))}
</View>
);
};
export default OrderedList;

View File

@ -0,0 +1,23 @@
import React from 'react';
import { Text } from 'react-native';
import { Paragraph as ParagraphProps } from '@rocket.chat/message-parser';
import Inline from './Inline';
import styles from '../styles';
import { useTheme } from '../../../theme';
import { themes } from '../../../constants/colors';
interface IParagraphProps {
value: ParagraphProps['value'];
}
const Paragraph = ({ value }: IParagraphProps): JSX.Element => {
const { theme } = useTheme();
return (
<Text style={[styles.text, { color: themes[theme!].bodyText }]}>
<Inline value={value} />
</Text>
);
};
export default Paragraph;

View File

@ -0,0 +1,22 @@
import React from 'react';
import { Text } from 'react-native';
import { Plain as PlainProps } from '@rocket.chat/message-parser';
import styles from '../styles';
import { useTheme } from '../../../theme';
import { themes } from '../../../constants/colors';
interface IPlainProps {
value: PlainProps['value'];
}
const Plain = ({ value }: IPlainProps): JSX.Element => {
const { theme } = useTheme();
return (
<Text accessibilityLabel={value} style={[styles.plainText, { color: themes[theme!].bodyText }]}>
{value}
</Text>
);
};
export default Plain;

View File

@ -0,0 +1,28 @@
import React from 'react';
import { View } from 'react-native';
import { Quote as QuoteProps } from '@rocket.chat/message-parser';
import { themes } from '../../../constants/colors';
import { useTheme } from '../../../theme';
import styles from '../styles';
import Paragraph from './Paragraph';
interface IQuoteProps {
value: QuoteProps['value'];
}
const Quote = ({ value }: IQuoteProps): JSX.Element => {
const { theme } = useTheme();
return (
<View style={styles.container}>
<View style={[styles.quote, { backgroundColor: themes[theme!].borderColor }]} />
<View style={styles.childContainer}>
{value.map(item => (
<Paragraph value={item.value} />
))}
</View>
</View>
);
};
export default Quote;

View File

@ -0,0 +1,39 @@
import React from 'react';
import { StyleSheet, Text } from 'react-native';
import { Strike as StrikeProps } from '@rocket.chat/message-parser';
import Bold from './Bold';
import Italic from './Italic';
import Plain from './Plain';
import Link from './Link';
interface IStrikeProps {
value: StrikeProps['value'];
}
const styles = StyleSheet.create({
text: {
textDecorationLine: 'line-through'
}
});
const Strike = ({ value }: IStrikeProps): JSX.Element => (
<Text style={styles.text}>
{value.map(block => {
switch (block.type) {
case 'LINK':
return <Link value={block.value} />;
case 'PLAIN_TEXT':
return <Plain value={block.value} />;
case 'BOLD':
return <Bold value={block.value} />;
case 'ITALIC':
return <Italic value={block.value} />;
default:
return null;
}
})}
</Text>
);
export default Strike;

View File

@ -0,0 +1,28 @@
import React from 'react';
import { Text, View } from 'react-native';
import { Tasks as TasksProps } from '@rocket.chat/message-parser';
import Inline from './Inline';
import styles from '../styles';
import { themes } from '../../../constants/colors';
import { useTheme } from '../../../theme';
interface ITasksProps {
value: TasksProps['value'];
}
const TaskList = ({ value = [] }: ITasksProps): JSX.Element => {
const { theme } = useTheme();
return (
<View>
{value.map(item => (
<View style={styles.row}>
<Text style={[styles.text, { color: themes[theme!].bodyText }]}>{item.status ? '- [x] ' : '- [ ] '}</Text>
<Inline value={item.value} />
</View>
))}
</View>
);
};
export default TaskList;

View File

@ -0,0 +1,28 @@
import React from 'react';
import { UnorderedList as UnorderedListProps } from '@rocket.chat/message-parser';
import { View, Text } from 'react-native';
import Inline from './Inline';
import styles from '../styles';
import { themes } from '../../../constants/colors';
import { useTheme } from '../../../theme';
interface IUnorderedListProps {
value: UnorderedListProps['value'];
}
const UnorderedList = ({ value }: IUnorderedListProps): JSX.Element => {
const { theme } = useTheme();
return (
<View>
{value.map(item => (
<View style={styles.row}>
<Text style={[styles.text, { color: themes[theme!].bodyText }]}>- </Text>
<Inline value={item.value} />
</View>
))}
</View>
);
};
export default UnorderedList;

View File

@ -0,0 +1,77 @@
import React from 'react';
import { MarkdownAST } from '@rocket.chat/message-parser';
import Quote from './Quote';
import Paragraph from './Paragraph';
import Heading from './Heading';
import Code from './Code';
import BigEmoji from './BigEmoji';
import OrderedList from './OrderedList';
import UnorderedList from './UnorderedList';
import { UserMention } from '../../message/interfaces';
import TaskList from './TaskList';
import MarkdownContext from './MarkdownContext';
interface IBodyProps {
tokens: MarkdownAST;
mentions: UserMention[];
channels: {
name: string;
_id: number;
}[];
getCustomEmoji?: Function;
onLinkPress?: Function;
navToRoomInfo: Function;
useRealName: boolean;
username: string;
baseUrl: string;
}
const Body = ({
tokens,
mentions,
channels,
useRealName,
username,
navToRoomInfo,
getCustomEmoji,
baseUrl,
onLinkPress
}: IBodyProps): JSX.Element => (
<MarkdownContext.Provider
value={{
mentions,
channels,
useRealName,
username,
navToRoomInfo,
getCustomEmoji,
baseUrl,
onLinkPress
}}>
{tokens.map(block => {
switch (block.type) {
case 'BIG_EMOJI':
return <BigEmoji value={block.value} />;
case 'UNORDERED_LIST':
return <UnorderedList value={block.value} />;
case 'ORDERED_LIST':
return <OrderedList value={block.value} />;
case 'TASKS':
return <TaskList value={block.value} />;
case 'QUOTE':
return <Quote value={block.value} />;
case 'PARAGRAPH':
return <Paragraph value={block.value} />;
case 'CODE':
return <Code value={block.value} />;
case 'HEADING':
return <Heading value={block.value} level={block.level} />;
default:
return null;
}
})}
</MarkdownContext.Provider>
);
export default Body;

View File

@ -30,6 +30,10 @@ export default StyleSheet.create<any>({
del: { del: {
textDecorationLine: 'line-through' textDecorationLine: 'line-through'
}, },
plainText: {
fontSize: 16,
flexShrink: 1
},
text: { text: {
fontSize: 16, fontSize: 16,
...sharedStyles.textRegular ...sharedStyles.textRegular
@ -70,12 +74,16 @@ export default StyleSheet.create<any>({
resizeMode: 'contain' resizeMode: 'contain'
}, },
codeInline: { codeInline: {
fontSize: 16,
...sharedStyles.textRegular, ...sharedStyles.textRegular,
...codeFontFamily, ...codeFontFamily,
borderWidth: 1, borderWidth: 1,
borderRadius: 4 borderRadius: 4,
paddingLeft: 2,
paddingTop: 2
}, },
codeBlock: { codeBlock: {
fontSize: 16,
...sharedStyles.textRegular, ...sharedStyles.textRegular,
...codeFontFamily, ...codeFontFamily,
borderWidth: 1, borderWidth: 1,
@ -153,5 +161,8 @@ export default StyleSheet.create<any>({
}, },
alignRight: { alignRight: {
textAlign: 'right' textAlign: 'right'
},
inline: {
flexShrink: 1
} }
}); });

View File

@ -51,8 +51,10 @@ const Content = React.memo(
// @ts-ignore // @ts-ignore
<Markdown <Markdown
msg={props.msg} msg={props.msg}
md={props.md}
baseUrl={baseUrl} baseUrl={baseUrl}
getCustomEmoji={props.getCustomEmoji} getCustomEmoji={props.getCustomEmoji}
enableMessageParser={user.enableMessageParserEarlyAdoption}
username={user.username} username={user.username}
isEdited={props.isEdited} isEdited={props.isEdited}
numberOfLines={isPreview ? 1 : 0} numberOfLines={isPreview ? 1 : 0}
@ -103,6 +105,9 @@ const Content = React.memo(
if (prevProps.isIgnored !== nextProps.isIgnored) { if (prevProps.isIgnored !== nextProps.isIgnored) {
return false; return false;
} }
if (!dequal(prevProps.md, nextProps.md)) {
return false;
}
if (!dequal(prevProps.mentions, nextProps.mentions)) { if (!dequal(prevProps.mentions, nextProps.mentions)) {
return false; return false;
} }

View File

@ -357,7 +357,8 @@ class MessageContainer extends React.Component<IMessageContainerProps, any> {
unread, unread,
blocks, blocks,
autoTranslate: autoTranslateMessage, autoTranslate: autoTranslateMessage,
replies replies,
md
} = item; } = item;
let message = msg; let message = msg;
@ -391,6 +392,7 @@ class MessageContainer extends React.Component<IMessageContainerProps, any> {
<Message <Message
id={id} id={id}
msg={message} msg={message}
md={md}
rid={rid} rid={rid}
author={u} author={u}
ts={ts} ts={ts}

View File

@ -1,3 +1,5 @@
import { MarkdownAST } from '@rocket.chat/message-parser';
export interface IMessageAttachments { export interface IMessageAttachments {
attachments: any; attachments: any;
timeFormat: string; timeFormat: string;
@ -48,12 +50,21 @@ export interface IMessageCallButton {
callJitsi: Function; callJitsi: Function;
} }
export interface IUser {
_id: string;
username: string;
name: string;
}
export type UserMention = Pick<IUser, '_id' | 'username' | 'name'>;
export interface IMessageContent { export interface IMessageContent {
isTemp: boolean; isTemp: boolean;
isInfo: boolean; isInfo: boolean;
tmid: string; tmid: string;
isThreadRoom: boolean; isThreadRoom: boolean;
msg: string; msg: string;
md: MarkdownAST;
theme: string; theme: string;
isEdited: boolean; isEdited: boolean;
isEncrypted: boolean; isEncrypted: boolean;
@ -62,7 +73,7 @@ export interface IMessageContent {
name: string; name: string;
_id: number; _id: number;
}[]; }[];
mentions: object[]; mentions: UserMention[];
navToRoomInfo: Function; navToRoomInfo: Function;
useRealName: boolean; useRealName: boolean;
isIgnored: boolean; isIgnored: boolean;

View File

@ -106,7 +106,6 @@ export default StyleSheet.create<any>({
}, },
image: { image: {
width: '100%', width: '100%',
// maxWidth: 400,
minHeight: isTablet ? 300 : 200, minHeight: isTablet ? 300 : 200,
borderRadius: 4, borderRadius: 4,
borderWidth: 1, borderWidth: 1,

View File

@ -51,7 +51,9 @@ class QueueListView extends React.Component {
server: PropTypes.string, server: PropTypes.string,
useRealName: PropTypes.bool, useRealName: PropTypes.bool,
navigation: PropTypes.object, navigation: PropTypes.object,
theme: PropTypes.string theme: PropTypes.string,
showAvatar: PropTypes.bool,
displayMode: PropTypes.string
}; };
shouldComponentUpdate(nextProps) { shouldComponentUpdate(nextProps) {
@ -95,7 +97,9 @@ class QueueListView extends React.Component {
useRealName, useRealName,
theme, theme,
isMasterDetail, isMasterDetail,
width width,
showAvatar,
displayMode
} = this.props; } = this.props;
const id = this.getUidDirectMessage(item); const id = this.getUidDirectMessage(item);
@ -117,6 +121,8 @@ class QueueListView extends React.Component {
getRoomAvatar={this.getRoomAvatar} getRoomAvatar={this.getRoomAvatar}
visitor={item.v} visitor={item.v}
swipeEnabled={false} swipeEnabled={false}
showAvatar={showAvatar}
displayMode={displayMode}
/> />
); );
}; };
@ -151,6 +157,8 @@ const mapStateToProps = state => ({
isMasterDetail: state.app.isMasterDetail, isMasterDetail: state.app.isMasterDetail,
server: state.server.server, server: state.server.server,
useRealName: state.settings.UI_Use_Real_Name, useRealName: state.settings.UI_Use_Real_Name,
queued: getInquiryQueueSelector(state) queued: getInquiryQueueSelector(state),
showAvatar: state.sortPreferences.showAvatar,
displayMode: state.sortPreferences.displayMode
}); });
export default connect(mapStateToProps)(withDimensions(withTheme(QueueListView))); export default connect(mapStateToProps)(withDimensions(withTheme(QueueListView)));

1
app/i18n/locales/af.json Normal file
View File

@ -0,0 +1 @@
{ }

View File

@ -14,7 +14,7 @@
"error-delete-protected-role": "لا يمكن حذف دور محمي", "error-delete-protected-role": "لا يمكن حذف دور محمي",
"error-department-not-found": "القسم غير موجود", "error-department-not-found": "القسم غير موجود",
"error-direct-message-file-upload-not-allowed": "مشاركة الملفات غير مسموح في الرسالة المباشرة", "error-direct-message-file-upload-not-allowed": "مشاركة الملفات غير مسموح في الرسالة المباشرة",
"error-duplicate-channel-name": "القناة {{channel_name}} موجودة مسبقاً", "error-duplicate-channel-name": "القناة {{room_name}} موجودة مسبقاً",
"error-email-domain-blacklisted": "عنوان اﻹيميل محظور", "error-email-domain-blacklisted": "عنوان اﻹيميل محظور",
"error-email-send-failed": "خطأ في إرسال البريد اﻹلكتروني: {{message}}", "error-email-send-failed": "خطأ في إرسال البريد اﻹلكتروني: {{message}}",
"error-save-image": "خطأ عند حفظ الصورة", "error-save-image": "خطأ عند حفظ الصورة",
@ -78,8 +78,8 @@
"error-user-registration-disabled": "التسجيل معطل", "error-user-registration-disabled": "التسجيل معطل",
"error-user-registration-secret": "التسجيل مسموح به عبر عنوان الويب السري فقط", "error-user-registration-secret": "التسجيل مسموح به عبر عنوان الويب السري فقط",
"error-you-are-last-owner": "أنت المالك الأخير. يرجى تعيين مالك جديد قبل مغادرة الغرفة", "error-you-are-last-owner": "أنت المالك الأخير. يرجى تعيين مالك جديد قبل مغادرة الغرفة",
"error-status-not-allowed": "تم تعطيل الحلة غير المرئية",
"Actions": "الإجراءات", "Actions": "الإجراءات",
"activity": "نشاط",
"Activity": "النشاط", "Activity": "النشاط",
"Add_Reaction": "إضافة تفاعل", "Add_Reaction": "إضافة تفاعل",
"Add_Server": "إضافة خادم", "Add_Server": "إضافة خادم",
@ -90,6 +90,7 @@
"alert": "إنذار", "alert": "إنذار",
"alerts": "الإنذارات", "alerts": "الإنذارات",
"All_users_in_the_channel_can_write_new_messages": "يمكن لجميع المستخدمين في القناة كتابة رسائل جديدة", "All_users_in_the_channel_can_write_new_messages": "يمكن لجميع المستخدمين في القناة كتابة رسائل جديدة",
"All_users_in_the_team_can_write_new_messages": "يمكن لجميع المستخدمين في الفريق كتابة رسائل جديدة",
"A_meaningful_name_for_the_discussion_room": "اسم معبر لغرفة النقاش", "A_meaningful_name_for_the_discussion_room": "اسم معبر لغرفة النقاش",
"All": "الكل", "All": "الكل",
"All_Messages": "كل الرسائل", "All_Messages": "كل الرسائل",
@ -180,9 +181,12 @@
"delete": "حذف", "delete": "حذف",
"Delete": "حذف", "Delete": "حذف",
"DELETE": "حذف", "DELETE": "حذف",
"move": "حرك",
"deleting_room": "حذف الغرفة", "deleting_room": "حذف الغرفة",
"description": "وصف", "description": "وصف",
"Description": "وصف", "Description": "وصف",
"Desktop_Options": "خيارات سطح المكتب",
"Desktop_Notifications": "إخطارات سطح المكتب",
"Desktop_Alert_info": "هذه الإشعارات ترسل لسطح المكتب", "Desktop_Alert_info": "هذه الإشعارات ترسل لسطح المكتب",
"Directory": "مجلد", "Directory": "مجلد",
"Direct_Messages": "رسالة مباشرة", "Direct_Messages": "رسالة مباشرة",
@ -222,9 +226,9 @@
"Encryption_error_title": "كلمة المرور المشفرة خاطئة", "Encryption_error_title": "كلمة المرور المشفرة خاطئة",
"Encryption_error_desc": "تعذر قراءة مفتاح التشفير أثناء الاستيراد", "Encryption_error_desc": "تعذر قراءة مفتاح التشفير أثناء الاستيراد",
"Everyone_can_access_this_channel": "يمكن للجميع الوصول إلى هذه القناة", "Everyone_can_access_this_channel": "يمكن للجميع الوصول إلى هذه القناة",
"Everyone_can_access_this_team": "يمكن للجميع الوصول إلى هذا الفريق",
"Error_uploading": "خطأ في الرفع", "Error_uploading": "خطأ في الرفع",
"Expiration_Days": "انتهاء (أيام)", "Expiration_Days": "انتهاء (أيام)",
"Favorite": "مفضل",
"Favorites": "مفضلات", "Favorites": "مفضلات",
"Files": "ملفات", "Files": "ملفات",
"File_description": "وصف الملف", "File_description": "وصف الملف",
@ -241,9 +245,6 @@
"Forward_to_user": "إعادة توجيه لمستخدم", "Forward_to_user": "إعادة توجيه لمستخدم",
"Full_table": "انقر لرؤية الجدول كاملاً", "Full_table": "انقر لرؤية الجدول كاملاً",
"Generate_New_Link": "إنشاء رابط جديد", "Generate_New_Link": "إنشاء رابط جديد",
"Group_by_favorites": "جمع حسب المفضلة",
"Group_by_type": "جمع حسب النوع",
"Hide": "إخفاء",
"Has_joined_the_channel": "انضم إلى القناة", "Has_joined_the_channel": "انضم إلى القناة",
"Has_joined_the_conversation": "انضم إلى المحادثة", "Has_joined_the_conversation": "انضم إلى المحادثة",
"Has_left_the_channel": "غادر القناة", "Has_left_the_channel": "غادر القناة",
@ -266,6 +267,7 @@
"I_Saved_My_E2E_Password": "قمت بحفظ كلمة المرور الطرفية", "I_Saved_My_E2E_Password": "قمت بحفظ كلمة المرور الطرفية",
"IP": " عنوان بروتوكول الإنترنت (الآيبي)", "IP": " عنوان بروتوكول الإنترنت (الآيبي)",
"In_app": "في التطبيق", "In_app": "في التطبيق",
"In_App_And_Desktop": "تطبيق داخلي وسطح المكتب",
"In_App_and_Desktop_Alert_info": "يعرض شعاراً أعلى الشاشة عندما يكون التطبيق مفتوحًا، ويعرض إشعاراً على سطح المكتب", "In_App_and_Desktop_Alert_info": "يعرض شعاراً أعلى الشاشة عندما يكون التطبيق مفتوحًا، ويعرض إشعاراً على سطح المكتب",
"Invisible": "غير مرئي", "Invisible": "غير مرئي",
"Invite": "دعوة", "Invite": "دعوة",
@ -277,9 +279,12 @@
"Invite_Link": "رابط الدعوة", "Invite_Link": "رابط الدعوة",
"Invite_users": "دعوة المستخدمين", "Invite_users": "دعوة المستخدمين",
"Join": "انضم", "Join": "انضم",
"Join_Code": "رمز الانضمام",
"Insert_Join_Code": "ضع رمز الانضمام",
"Join_our_open_workspace": "انضم لمساحة عملنا المفتوحة", "Join_our_open_workspace": "انضم لمساحة عملنا المفتوحة",
"Join_your_workspace": "انضم لمساحة عملك", "Join_your_workspace": "انضم لمساحة عملك",
"Just_invited_people_can_access_this_channel": "يمكن للأشخاص المدعوين فقط الوصول إلى هذه القناة", "Just_invited_people_can_access_this_channel": "يمكن للأشخاص المدعوين فقط الوصول إلى هذه القناة",
"Just_invited_people_can_access_this_team": "فقط الأشخاص المدعوين يمكنهم الوصول إلى هذا الفريق",
"Language": "اللغة", "Language": "اللغة",
"last_message": "الرسالة الأخيرة", "last_message": "الرسالة الأخيرة",
"Leave_channel": "مغادرة القناة", "Leave_channel": "مغادرة القناة",
@ -321,7 +326,7 @@
"My_servers": "الخوادم", "My_servers": "الخوادم",
"N_people_reacted": "{{n}} تفاعل الناس", "N_people_reacted": "{{n}} تفاعل الناس",
"N_users": "{{n}} مستخدمين", "N_users": "{{n}} مستخدمين",
"name": "اسم", "N_channels": "{{n}} القنوات",
"Name": "اسم", "Name": "اسم",
"Navigation_history": "تاريخ التصفح", "Navigation_history": "تاريخ التصفح",
"Never": "أبداً", "Never": "أبداً",
@ -398,7 +403,6 @@
"Reactions_are_disabled": "التفاعل معطل", "Reactions_are_disabled": "التفاعل معطل",
"Reactions_are_enabled": "التفاعل مفعل", "Reactions_are_enabled": "التفاعل مفعل",
"Reactions": "التفاعلات", "Reactions": "التفاعلات",
"Read": "قراءة",
"Read_External_Permission_Message": "يحتاج Rocket.chat للوصول إلى الصور والملفات الموجودة على الجهاز", "Read_External_Permission_Message": "يحتاج Rocket.chat للوصول إلى الصور والملفات الموجودة على الجهاز",
"Read_External_Permission": "صلاحية قراءة الوسائط", "Read_External_Permission": "صلاحية قراءة الوسائط",
"Read_Only_Channel": "قناة للقراءة فقط", "Read_Only_Channel": "قناة للقراءة فقط",
@ -428,9 +432,11 @@
"Review_app_unable_store": "لم يتمكن من فتح {{store}}", "Review_app_unable_store": "لم يتمكن من فتح {{store}}",
"Review_this_app": "تقييم هذا التطبيق", "Review_this_app": "تقييم هذا التطبيق",
"Remove": "حذف", "Remove": "حذف",
"remove": "حذف",
"Roles": "أدوار", "Roles": "أدوار",
"Room_actions": "إجراءات الغرفة", "Room_actions": "إجراءات الغرفة",
"Room_changed_announcement": "تم تغيير إعلان الغرفة إلى: {{announcement}} من قبل {{userBy}}", "Room_changed_announcement": "تم تغيير إعلان الغرفة إلى: {{announcement}} من قبل {{userBy}}",
"Room_changed_avatar": " {{userBy}}تم تغيير الصورة الرمزية للغرفة",
"Room_changed_description": "تم تغيير وصف الغرفة إلى: {{description}} من قبل {{userBy}}", "Room_changed_description": "تم تغيير وصف الغرفة إلى: {{description}} من قبل {{userBy}}",
"Room_changed_privacy": "تم تغيير نوع الغرفة إلى: {{type}} من قبل {{userBy}}", "Room_changed_privacy": "تم تغيير نوع الغرفة إلى: {{type}} من قبل {{userBy}}",
"Room_changed_topic": "تم تغيير موضوع الغرفة إلى: {{topic}} من قبل {{userBy}}", "Room_changed_topic": "تم تغيير موضوع الغرفة إلى: {{topic}} من قبل {{userBy}}",
@ -457,6 +463,7 @@
"Search_global_users": "بحث عام عن المستخدمين", "Search_global_users": "بحث عام عن المستخدمين",
"Search_global_users_description": "إذا قمت بالتفعيل، فسيمكنك البحث عن أي مستخدم في شركات أو خوادم أخرى", "Search_global_users_description": "إذا قمت بالتفعيل، فسيمكنك البحث عن أي مستخدم في شركات أو خوادم أخرى",
"Seconds": "{{second}} ثواني", "Seconds": "{{second}} ثواني",
"Security_and_privacy": "الأمن والخصوصية",
"Select_Avatar": "حدد الصورة الرمزية", "Select_Avatar": "حدد الصورة الرمزية",
"Select_Server": "حدد خادم", "Select_Server": "حدد خادم",
"Select_Users": "حدد مستخدمين", "Select_Users": "حدد مستخدمين",
@ -490,7 +497,6 @@
"Sign_in_your_server": "تسجيل الدخول إلى الخادم الخاص بك", "Sign_in_your_server": "تسجيل الدخول إلى الخادم الخاص بك",
"Sign_Up": "تسجيل جديد", "Sign_Up": "تسجيل جديد",
"Some_field_is_invalid_or_empty": "بعض الحقول غير صالحة أو فارغة", "Some_field_is_invalid_or_empty": "بعض الحقول غير صالحة أو فارغة",
"Sorting_by": "فرز حسب {{key}}",
"Sound": "الصوت", "Sound": "الصوت",
"Star_room": "تمييز الغرفة", "Star_room": "تمييز الغرفة",
"Star": "تمييز", "Star": "تمييز",
@ -529,7 +535,6 @@
"unarchive": "إلغاء الأرشفة", "unarchive": "إلغاء الأرشفة",
"UNARCHIVE": "إلغاء الأرشفة", "UNARCHIVE": "إلغاء الأرشفة",
"Unblock_user": "إلغاء حظر عن مستخدم", "Unblock_user": "إلغاء حظر عن مستخدم",
"Unfavorite": "إزالة من المفضلة",
"Unfollowed_thread": "موضوع غير متابع", "Unfollowed_thread": "موضوع غير متابع",
"Unmute": "إلغاء كتم", "Unmute": "إلغاء كتم",
"unmuted": "إلغاء كتم", "unmuted": "إلغاء كتم",

1
app/i18n/locales/az.json Normal file
View File

@ -0,0 +1 @@
{ }

View File

@ -0,0 +1 @@
{ }

View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/bg.json Normal file
View File

@ -0,0 +1 @@
{ }

View File

@ -0,0 +1 @@
{ }

View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/bs.json Normal file
View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/ca.json Normal file
View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/cs.json Normal file
View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/cy.json Normal file
View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/da.json Normal file
View File

@ -0,0 +1 @@
{ }

View File

@ -0,0 +1 @@
{ }

View File

@ -81,7 +81,6 @@
"error-you-are-last-owner": "Du bist der letzte Besitzer. Bitte setze einen neuen Besitzer, bevor du den Raum verlässt.", "error-you-are-last-owner": "Du bist der letzte Besitzer. Bitte setze einen neuen Besitzer, bevor du den Raum verlässt.",
"error-status-not-allowed": "Unsichtbar-Status ist deaktiviert", "error-status-not-allowed": "Unsichtbar-Status ist deaktiviert",
"Actions": "Aktionen", "Actions": "Aktionen",
"activity": "Aktivität",
"Activity": "Aktivität", "Activity": "Aktivität",
"Add_Reaction": "Reaktion hinzufügen", "Add_Reaction": "Reaktion hinzufügen",
"Add_Server": "Server hinzufügen", "Add_Server": "Server hinzufügen",
@ -232,7 +231,6 @@
"Everyone_can_access_this_team": "Jeder kann auf dieses Team zugreifen", "Everyone_can_access_this_team": "Jeder kann auf dieses Team zugreifen",
"Error_uploading": "Fehler beim Hochladen", "Error_uploading": "Fehler beim Hochladen",
"Expiration_Days": "läuft ab (Tage)", "Expiration_Days": "läuft ab (Tage)",
"Favorite": "Favorisieren",
"Favorites": "Favoriten", "Favorites": "Favoriten",
"Files": "Dateien", "Files": "Dateien",
"File_description": "Dateibeschreibung", "File_description": "Dateibeschreibung",
@ -249,9 +247,6 @@
"Forward_to_user": "Weiterleiten an Benutzer", "Forward_to_user": "Weiterleiten an Benutzer",
"Full_table": "Klicken um die ganze Tabelle anzuzeigen", "Full_table": "Klicken um die ganze Tabelle anzuzeigen",
"Generate_New_Link": "Neuen Link erstellen", "Generate_New_Link": "Neuen Link erstellen",
"Group_by_favorites": "Nach Favoriten gruppieren",
"Group_by_type": "Gruppieren nach Typ",
"Hide": "Ausblenden",
"Has_joined_the_channel": "Ist dem Kanal beigetreten", "Has_joined_the_channel": "Ist dem Kanal beigetreten",
"Has_joined_the_conversation": "Hat sich dem Gespräch angeschlossen", "Has_joined_the_conversation": "Hat sich dem Gespräch angeschlossen",
"Has_left_the_channel": "Hat den Kanal verlassen", "Has_left_the_channel": "Hat den Kanal verlassen",
@ -334,7 +329,6 @@
"N_people_reacted": "{{n}} Leute haben reagiert", "N_people_reacted": "{{n}} Leute haben reagiert",
"N_users": "{{n}} Benutzer", "N_users": "{{n}} Benutzer",
"N_channels": "{{n}} Kanäle", "N_channels": "{{n}} Kanäle",
"name": "Name",
"Name": "Name", "Name": "Name",
"Navigation_history": "Navigations-Verlauf", "Navigation_history": "Navigations-Verlauf",
"Never": "Niemals", "Never": "Niemals",
@ -412,7 +406,6 @@
"Reactions_are_disabled": "Reaktionen sind deaktiviert", "Reactions_are_disabled": "Reaktionen sind deaktiviert",
"Reactions_are_enabled": "Reaktionen sind aktiviert", "Reactions_are_enabled": "Reaktionen sind aktiviert",
"Reactions": "Reaktionen", "Reactions": "Reaktionen",
"Read": "Gelesen",
"Read_External_Permission_Message": "Rocket.Chat benötigt Zugriff auf deine Fotos, Medien und Dateien auf deinem Gerät", "Read_External_Permission_Message": "Rocket.Chat benötigt Zugriff auf deine Fotos, Medien und Dateien auf deinem Gerät",
"Read_External_Permission": "Lese-Zugriff auf Medien", "Read_External_Permission": "Lese-Zugriff auf Medien",
"Read_Only_Channel": "Nur-Lese-Kanal", "Read_Only_Channel": "Nur-Lese-Kanal",
@ -507,7 +500,6 @@
"Sign_in_your_server": "Melde dich bei deinem Server an", "Sign_in_your_server": "Melde dich bei deinem Server an",
"Sign_Up": "Anmelden", "Sign_Up": "Anmelden",
"Some_field_is_invalid_or_empty": "Ein Feld ist ungültig oder leer", "Some_field_is_invalid_or_empty": "Ein Feld ist ungültig oder leer",
"Sorting_by": "Sortierung nach {{key}}",
"Sound": "Ton", "Sound": "Ton",
"Star_room": "Favorisierter Raum", "Star_room": "Favorisierter Raum",
"Star": "Favoriten", "Star": "Favoriten",
@ -546,7 +538,6 @@
"unarchive": "wiederherstellen", "unarchive": "wiederherstellen",
"UNARCHIVE": "WIEDERHERSTELLEN", "UNARCHIVE": "WIEDERHERSTELLEN",
"Unblock_user": "Benutzer entsperren", "Unblock_user": "Benutzer entsperren",
"Unfavorite": "Nicht mehr favorisieren",
"Unfollowed_thread": "Thread nicht mehr folgen", "Unfollowed_thread": "Thread nicht mehr folgen",
"Unmute": "Stummschaltung aufheben", "Unmute": "Stummschaltung aufheben",
"unmuted": "Stummschaltung aufgehoben", "unmuted": "Stummschaltung aufgehoben",

1
app/i18n/locales/el.json Normal file
View File

@ -0,0 +1 @@
{ }

View File

@ -81,7 +81,6 @@
"error-you-are-last-owner": "You are the last owner. Please set new owner before leaving the room.", "error-you-are-last-owner": "You are the last owner. Please set new owner before leaving the room.",
"error-status-not-allowed": "Invisible status is disabled", "error-status-not-allowed": "Invisible status is disabled",
"Actions": "Actions", "Actions": "Actions",
"activity": "activity",
"Activity": "Activity", "Activity": "Activity",
"Add_Reaction": "Add Reaction", "Add_Reaction": "Add Reaction",
"Add_Server": "Add Server", "Add_Server": "Add Server",
@ -232,7 +231,6 @@
"Everyone_can_access_this_team": "Everyone can access this team", "Everyone_can_access_this_team": "Everyone can access this team",
"Error_uploading": "Error uploading", "Error_uploading": "Error uploading",
"Expiration_Days": "Expiration (Days)", "Expiration_Days": "Expiration (Days)",
"Favorite": "Favorite",
"Favorites": "Favorites", "Favorites": "Favorites",
"Files": "Files", "Files": "Files",
"File_description": "File description", "File_description": "File description",
@ -249,9 +247,6 @@
"Forward_to_user": "Forward to user", "Forward_to_user": "Forward to user",
"Full_table": "Click to see full table", "Full_table": "Click to see full table",
"Generate_New_Link": "Generate New Link", "Generate_New_Link": "Generate New Link",
"Group_by_favorites": "Group favorites",
"Group_by_type": "Group by type",
"Hide": "Hide",
"Has_joined_the_channel": "has joined the channel", "Has_joined_the_channel": "has joined the channel",
"Has_joined_the_conversation": "has joined the conversation", "Has_joined_the_conversation": "has joined the conversation",
"Has_left_the_channel": "has left the channel", "Has_left_the_channel": "has left the channel",
@ -334,7 +329,6 @@
"N_people_reacted": "{{n}} people reacted", "N_people_reacted": "{{n}} people reacted",
"N_users": "{{n}} users", "N_users": "{{n}} users",
"N_channels": "{{n}} channels", "N_channels": "{{n}} channels",
"name": "name",
"Name": "Name", "Name": "Name",
"Navigation_history": "Navigation history", "Navigation_history": "Navigation history",
"Never": "Never", "Never": "Never",
@ -412,7 +406,6 @@
"Reactions_are_disabled": "Reactions are disabled", "Reactions_are_disabled": "Reactions are disabled",
"Reactions_are_enabled": "Reactions are enabled", "Reactions_are_enabled": "Reactions are enabled",
"Reactions": "Reactions", "Reactions": "Reactions",
"Read": "Read",
"Read_External_Permission_Message": "Rocket.Chat needs to access photos, media, and files on your device", "Read_External_Permission_Message": "Rocket.Chat needs to access photos, media, and files on your device",
"Read_External_Permission": "Read Media Permission", "Read_External_Permission": "Read Media Permission",
"Read_Only_Channel": "Read Only Channel", "Read_Only_Channel": "Read Only Channel",
@ -507,7 +500,6 @@
"Sign_in_your_server": "Sign in your server", "Sign_in_your_server": "Sign in your server",
"Sign_Up": "Sign Up", "Sign_Up": "Sign Up",
"Some_field_is_invalid_or_empty": "Some field is invalid or empty", "Some_field_is_invalid_or_empty": "Some field is invalid or empty",
"Sorting_by": "Sorting by {{key}}",
"Sound": "Sound", "Sound": "Sound",
"Star_room": "Star room", "Star_room": "Star room",
"Star": "Star", "Star": "Star",
@ -546,7 +538,6 @@
"unarchive": "unarchive", "unarchive": "unarchive",
"UNARCHIVE": "UNARCHIVE", "UNARCHIVE": "UNARCHIVE",
"Unblock_user": "Unblock user", "Unblock_user": "Unblock user",
"Unfavorite": "Unfavorite",
"Unfollowed_thread": "Unfollowed thread", "Unfollowed_thread": "Unfollowed thread",
"Unmute": "Unmute", "Unmute": "Unmute",
"unmuted": "unmuted", "unmuted": "unmuted",
@ -772,6 +763,13 @@
"Converting_Team_To_Channel": "Converting Team to Channel", "Converting_Team_To_Channel": "Converting Team to Channel",
"Select_Team_Channels_To_Delete": "Select the Teams Channels you would like to delete, the ones you do not select will be moved to the Workspace. \n\nNotice that public Channels will be public and visible to everyone.", "Select_Team_Channels_To_Delete": "Select the Teams Channels you would like to delete, the ones you do not select will be moved to the Workspace. \n\nNotice that public Channels will be public and visible to everyone.",
"You_are_converting_the_team": "You are converting this Team to a Channel", "You_are_converting_the_team": "You are converting this Team to a Channel",
"Display": "Display",
"Avatars": "Avatars",
"Sort_by": "Sort by",
"Group_by": "Group by",
"Types": "Types",
"Expanded": "Expanded",
"Condensed": "Condensed",
"creating_discussion": "creating discussion", "creating_discussion": "creating discussion",
"Canned_Responses": "Canned Responses", "Canned_Responses": "Canned Responses",
"No_match_found": "No match found.", "No_match_found": "No match found.",
@ -781,5 +779,8 @@
"Shortcut": "Shortcut", "Shortcut": "Shortcut",
"Content": "Content", "Content": "Content",
"Sharing": "Sharing", "Sharing": "Sharing",
"No_canned_responses": "No canned responses" "No_canned_responses": "No canned responses",
"Send_email_confirmation": "Send email confirmation",
"sending_email_confirmation": "sending email confirmation",
"Enable_Message_Parser": "Enable Message Parser"
} }

1
app/i18n/locales/eo.json Normal file
View File

@ -0,0 +1 @@
{ }

View File

@ -76,7 +76,6 @@
"error-user-registration-secret": "El registro de usuarios sólo está permitido por URL secretas", "error-user-registration-secret": "El registro de usuarios sólo está permitido por URL secretas",
"error-you-are-last-owner": "Eres el único propietario existente. Debes establecer un nuevo propietario antes de abandonar la sala.", "error-you-are-last-owner": "Eres el único propietario existente. Debes establecer un nuevo propietario antes de abandonar la sala.",
"Actions": "Acciones", "Actions": "Acciones",
"activity": "actividad",
"Activity": "Actividad", "Activity": "Actividad",
"Add_Reaction": "Añadir reacción", "Add_Reaction": "Añadir reacción",
"Add_Server": "Añadir servidor", "Add_Server": "Añadir servidor",
@ -176,7 +175,6 @@
"Enable_notifications": "Permitir notificaciones", "Enable_notifications": "Permitir notificaciones",
"Everyone_can_access_this_channel": "Todos los usuarios pueden acceder a este canal", "Everyone_can_access_this_channel": "Todos los usuarios pueden acceder a este canal",
"Error_uploading": "Error en la subida", "Error_uploading": "Error en la subida",
"Favorite": "Favorito",
"Favorites": "Favoritos", "Favorites": "Favoritos",
"Files": "Archivos", "Files": "Archivos",
"File_description": "Descripción del archivo", "File_description": "Descripción del archivo",
@ -188,9 +186,6 @@
"Forgot_password": "¿Ha olvidado su contraseña?", "Forgot_password": "¿Ha olvidado su contraseña?",
"Forgot_Password": "Olvidé la contraseña", "Forgot_Password": "Olvidé la contraseña",
"Full_table": "Click para ver la tabla completa", "Full_table": "Click para ver la tabla completa",
"Group_by_favorites": "Agrupar por favoritos",
"Group_by_type": "Agrupar por tipo",
"Hide": "Ocultar",
"Has_joined_the_channel": "se ha unido al canal", "Has_joined_the_channel": "se ha unido al canal",
"Has_joined_the_conversation": "se ha unido a la conversación", "Has_joined_the_conversation": "se ha unido a la conversación",
"Has_left_the_channel": "ha dejado el canal", "Has_left_the_channel": "ha dejado el canal",
@ -237,7 +232,6 @@
"My_servers": "Mis servidores", "My_servers": "Mis servidores",
"N_people_reacted": "Han reaccionado {{n}} personas", "N_people_reacted": "Han reaccionado {{n}} personas",
"N_users": "{{n}} usuarios", "N_users": "{{n}} usuarios",
"name": "nombre",
"Name": "Nombre", "Name": "Nombre",
"New_Message": "Nuevo mensaje", "New_Message": "Nuevo mensaje",
"New_Password": "Nueva contraseña", "New_Password": "Nueva contraseña",
@ -292,7 +286,6 @@
"Reactions_are_disabled": "Las reacciones están desactivadas", "Reactions_are_disabled": "Las reacciones están desactivadas",
"Reactions_are_enabled": "Las reacciones están activadas", "Reactions_are_enabled": "Las reacciones están activadas",
"Reactions": "Reacciones", "Reactions": "Reacciones",
"Read": "Leer",
"Read_Only_Channel": "Canal de sólo lectura", "Read_Only_Channel": "Canal de sólo lectura",
"Read_Only": "Sólo lectura ", "Read_Only": "Sólo lectura ",
"Read_Receipt": "Comprobante de lectura", "Read_Receipt": "Comprobante de lectura",
@ -356,7 +349,6 @@
"Sign_in_your_server": "Accede a tu servidor", "Sign_in_your_server": "Accede a tu servidor",
"Sign_Up": "Registrarse", "Sign_Up": "Registrarse",
"Some_field_is_invalid_or_empty": "Algún campo no es correcto o está vacío", "Some_field_is_invalid_or_empty": "Algún campo no es correcto o está vacío",
"Sorting_by": "Ordenado por {{key}}",
"Sound": "Sonido", "Sound": "Sonido",
"Star_room": "Destacar sala", "Star_room": "Destacar sala",
"Star": "Destacar", "Star": "Destacar",
@ -390,7 +382,6 @@
"unarchive": "desarchivar", "unarchive": "desarchivar",
"UNARCHIVE": "DESARCHIVAR", "UNARCHIVE": "DESARCHIVAR",
"Unblock_user": "Desbloquear usuario", "Unblock_user": "Desbloquear usuario",
"Unfavorite": "Quitar favorito",
"Unfollowed_thread": "Dejar de seguir el hilo", "Unfollowed_thread": "Dejar de seguir el hilo",
"Unmute": "Desmutear", "Unmute": "Desmutear",
"unmuted": "Desmuteado", "unmuted": "Desmuteado",

1
app/i18n/locales/et.json Normal file
View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/eu.json Normal file
View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/fa.json Normal file
View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/fi.json Normal file
View File

@ -0,0 +1 @@
{ }

View File

@ -81,7 +81,6 @@
"error-you-are-last-owner": "Vous êtes le dernier propriétaire. Veuillez définir un nouveau propriétaire avant de quitter le salon.", "error-you-are-last-owner": "Vous êtes le dernier propriétaire. Veuillez définir un nouveau propriétaire avant de quitter le salon.",
"error-status-not-allowed": "Le statut invisible est désactivé", "error-status-not-allowed": "Le statut invisible est désactivé",
"Actions": "Actions", "Actions": "Actions",
"activity": "activité",
"Activity": "Activité", "Activity": "Activité",
"Add_Reaction": "Ajouter une réaction", "Add_Reaction": "Ajouter une réaction",
"Add_Server": "Ajouter un serveur", "Add_Server": "Ajouter un serveur",
@ -232,7 +231,6 @@
"Everyone_can_access_this_team": "Tout le monde peut accéder à cette équipe", "Everyone_can_access_this_team": "Tout le monde peut accéder à cette équipe",
"Error_uploading": "Erreur lors de l'envoi", "Error_uploading": "Erreur lors de l'envoi",
"Expiration_Days": "Expiration (Jours)", "Expiration_Days": "Expiration (Jours)",
"Favorite": "Favori",
"Favorites": "Favoris", "Favorites": "Favoris",
"Files": "Fichiers", "Files": "Fichiers",
"File_description": "Description du fichier", "File_description": "Description du fichier",
@ -249,9 +247,6 @@
"Forward_to_user": "Transmettre à l'utilisateur", "Forward_to_user": "Transmettre à l'utilisateur",
"Full_table": "Cliquez pour voir le tableau complet", "Full_table": "Cliquez pour voir le tableau complet",
"Generate_New_Link": "Générer un nouveau lien", "Generate_New_Link": "Générer un nouveau lien",
"Group_by_favorites": "Grouper par favoris",
"Group_by_type": "Grouper par type",
"Hide": "Cacher",
"Has_joined_the_channel": "a rejoint le canal", "Has_joined_the_channel": "a rejoint le canal",
"Has_joined_the_conversation": "a rejoint la conversation", "Has_joined_the_conversation": "a rejoint la conversation",
"Has_left_the_channel": "a quitté le canal", "Has_left_the_channel": "a quitté le canal",
@ -334,7 +329,6 @@
"N_people_reacted": "{{n}} personnes ont réagi", "N_people_reacted": "{{n}} personnes ont réagi",
"N_users": "{{n}} utilisateurs", "N_users": "{{n}} utilisateurs",
"N_channels": "{{n}} canaux", "N_channels": "{{n}} canaux",
"name": "nom",
"Name": "Nom", "Name": "Nom",
"Navigation_history": "Historique de navigation", "Navigation_history": "Historique de navigation",
"Never": "Jamais", "Never": "Jamais",
@ -412,7 +406,6 @@
"Reactions_are_disabled": "Les réactions sont désactivées", "Reactions_are_disabled": "Les réactions sont désactivées",
"Reactions_are_enabled": "Les réactions sont activées", "Reactions_are_enabled": "Les réactions sont activées",
"Reactions": "Réactions", "Reactions": "Réactions",
"Read": "Lecture",
"Read_External_Permission_Message": "Rocket.Chat doit accéder aux photos, aux médias et aux fichiers sur votre appareil", "Read_External_Permission_Message": "Rocket.Chat doit accéder aux photos, aux médias et aux fichiers sur votre appareil",
"Read_External_Permission": "Permission de lecture des fichiers", "Read_External_Permission": "Permission de lecture des fichiers",
"Read_Only_Channel": "Canal en lecture seule", "Read_Only_Channel": "Canal en lecture seule",
@ -507,7 +500,6 @@
"Sign_in_your_server": "Connectez-vous à votre serveur", "Sign_in_your_server": "Connectez-vous à votre serveur",
"Sign_Up": "S'inscrire", "Sign_Up": "S'inscrire",
"Some_field_is_invalid_or_empty": "Certains champs sont invalides ou vides", "Some_field_is_invalid_or_empty": "Certains champs sont invalides ou vides",
"Sorting_by": "Tri par {{key}}",
"Sound": "Son", "Sound": "Son",
"Star_room": "Canal favoris", "Star_room": "Canal favoris",
"Star": "Mettre en favoris", "Star": "Mettre en favoris",
@ -546,7 +538,6 @@
"unarchive": "désarchiver", "unarchive": "désarchiver",
"UNARCHIVE": "DÉSARCHIVER", "UNARCHIVE": "DÉSARCHIVER",
"Unblock_user": "Débloquer l'utilisateur", "Unblock_user": "Débloquer l'utilisateur",
"Unfavorite": "Supprimer des favoris",
"Unfollowed_thread": "Ne plus suivre ce fil", "Unfollowed_thread": "Ne plus suivre ce fil",
"Unmute": "Rendre la parole", "Unmute": "Rendre la parole",
"unmuted": "rendu la parole", "unmuted": "rendu la parole",
@ -772,5 +763,24 @@
"Converting_Team_To_Channel": "Conversion de léquipe en canal", "Converting_Team_To_Channel": "Conversion de léquipe en canal",
"Select_Team_Channels_To_Delete": "Sélectionnez les canaux de l'équipe que vous souhaitez supprimer, ceux que vous ne sélectionnez pas, seront déplacés vers l'espace de travail. \n\n\nNotez que les canaux publics seront publics et visibles par tous.", "Select_Team_Channels_To_Delete": "Sélectionnez les canaux de l'équipe que vous souhaitez supprimer, ceux que vous ne sélectionnez pas, seront déplacés vers l'espace de travail. \n\n\nNotez que les canaux publics seront publics et visibles par tous.",
"You_are_converting_the_team": "Vous convertissez cette équipe en canal", "You_are_converting_the_team": "Vous convertissez cette équipe en canal",
"creating_discussion": "créer une discussion" "Display": "Affichage",
"Avatars": "Avatars",
"Sort_by": "Trier par",
"Group_by": "Grouper par",
"Types": "Types",
"Expanded": "Etendu",
"Condensed": "Condensé",
"creating_discussion": "créer une discussion",
"Canned_Responses": "Modèles de réponse",
"No_match_found": "Pas de résultat trouvé.",
"Check_canned_responses": "Vérifiez les réponses standardisées.",
"Searching": "Recherche",
"Use": "Utiliser",
"Shortcut": "Raccourci",
"Content": "Contenu",
"Sharing": "Partager",
"No_canned_responses": "Pas de réponses standardisées",
"Send_email_confirmation": "Envoyer un e-mail de confirmation",
"sending_email_confirmation": "envoi d'e-mail de confirmation",
"Enable_Message_Parser": "Activer le parseur de messages"
} }

1
app/i18n/locales/gl.json Normal file
View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/he.json Normal file
View File

@ -0,0 +1 @@
{ }

View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/hr.json Normal file
View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/hu.json Normal file
View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/id.json Normal file
View File

@ -0,0 +1 @@
{ }

View File

@ -14,7 +14,7 @@
"error-delete-protected-role": "Impossibile eliminare un ruolo protetto", "error-delete-protected-role": "Impossibile eliminare un ruolo protetto",
"error-department-not-found": "Reparto non trovato", "error-department-not-found": "Reparto non trovato",
"error-direct-message-file-upload-not-allowed": "La condivisione di file non è autorizzata nei messaggi diretti", "error-direct-message-file-upload-not-allowed": "La condivisione di file non è autorizzata nei messaggi diretti",
"error-duplicate-channel-name": "Esiste già un canale con nome {{channel_name}}", "error-duplicate-channel-name": "Esiste già un canale con nome {{room_name}}",
"error-email-domain-blacklisted": "Il dominio e-mail è nella lista nera", "error-email-domain-blacklisted": "Il dominio e-mail è nella lista nera",
"error-email-send-failed": "Errore nel tentativo di invio e-mail: {{message}}", "error-email-send-failed": "Errore nel tentativo di invio e-mail: {{message}}",
"error-save-image": "Errore nel salvataggio dell'immagine", "error-save-image": "Errore nel salvataggio dell'immagine",
@ -79,7 +79,6 @@
"error-user-registration-secret": "Registrazione utente permessa solo via URL segreto", "error-user-registration-secret": "Registrazione utente permessa solo via URL segreto",
"error-you-are-last-owner": "Sei l'ultimo proprietario rimasto. Imposta un nuovo proprietario prima di lasciare la stanza.", "error-you-are-last-owner": "Sei l'ultimo proprietario rimasto. Imposta un nuovo proprietario prima di lasciare la stanza.",
"Actions": "Azioni", "Actions": "Azioni",
"activity": "attività",
"Activity": "Attività", "Activity": "Attività",
"Add_Reaction": "Aggiungi reazione", "Add_Reaction": "Aggiungi reazione",
"Add_Server": "Aggiungi server", "Add_Server": "Aggiungi server",
@ -227,7 +226,6 @@
"Everyone_can_access_this_channel": "Tutti hanno accesso a questo canale", "Everyone_can_access_this_channel": "Tutti hanno accesso a questo canale",
"Error_uploading": "Errore nel caricamento di", "Error_uploading": "Errore nel caricamento di",
"Expiration_Days": "Scadenza (giorni)", "Expiration_Days": "Scadenza (giorni)",
"Favorite": "Preferito",
"Favorites": "Preferiti", "Favorites": "Preferiti",
"Files": "File", "Files": "File",
"File_description": "Descrizione file", "File_description": "Descrizione file",
@ -244,9 +242,6 @@
"Forward_to_user": "Inoltra ad udente", "Forward_to_user": "Inoltra ad udente",
"Full_table": "Clicca per la tabella completa", "Full_table": "Clicca per la tabella completa",
"Generate_New_Link": "Genera nuovo link", "Generate_New_Link": "Genera nuovo link",
"Group_by_favorites": "Raggruppa per preferiti",
"Group_by_type": "Raggruppa per tipo",
"Hide": "Nascondi",
"Has_joined_the_channel": "si è unito al canale", "Has_joined_the_channel": "si è unito al canale",
"Has_joined_the_conversation": "si è unito alla conversazione", "Has_joined_the_conversation": "si è unito alla conversazione",
"Has_left_the_channel": "ha lasciato il canale", "Has_left_the_channel": "ha lasciato il canale",
@ -326,7 +321,6 @@
"My_servers": "I miei server", "My_servers": "I miei server",
"N_people_reacted": "{{n}} persone hanno reagito", "N_people_reacted": "{{n}} persone hanno reagito",
"N_users": "{{n}} utenti", "N_users": "{{n}} utenti",
"name": "nome",
"Name": "Nome", "Name": "Nome",
"Navigation_history": "Cronologia di navigazione", "Navigation_history": "Cronologia di navigazione",
"Never": "Mai", "Never": "Mai",
@ -404,7 +398,6 @@
"Reactions_are_disabled": "Le reazioni sono disabilitate", "Reactions_are_disabled": "Le reazioni sono disabilitate",
"Reactions_are_enabled": "Le reazioni sono abilitate", "Reactions_are_enabled": "Le reazioni sono abilitate",
"Reactions": "Reazioni", "Reactions": "Reazioni",
"Read": "Letto",
"Read_External_Permission_Message": "Rocket.Chat deve accedere alle foto, media, e documenti sul tuo dispositivo", "Read_External_Permission_Message": "Rocket.Chat deve accedere alle foto, media, e documenti sul tuo dispositivo",
"Read_External_Permission": "Permesso di Lettura della Memoria", "Read_External_Permission": "Permesso di Lettura della Memoria",
"Read_Only_Channel": "Canale in sola lettura", "Read_Only_Channel": "Canale in sola lettura",
@ -498,7 +491,6 @@
"Sign_in_your_server": "Accedi al tuo server", "Sign_in_your_server": "Accedi al tuo server",
"Sign_Up": "Registrati", "Sign_Up": "Registrati",
"Some_field_is_invalid_or_empty": "Un campo non è valido o è vuoto", "Some_field_is_invalid_or_empty": "Un campo non è valido o è vuoto",
"Sorting_by": "Ordina per {{key}}",
"Sound": "Suono", "Sound": "Suono",
"Star_room": "Aggiungi stanza ai preferiti", "Star_room": "Aggiungi stanza ai preferiti",
"Star": "Aggiungi ai preferiti", "Star": "Aggiungi ai preferiti",
@ -537,7 +529,6 @@
"unarchive": "rimuovi dall'archivio", "unarchive": "rimuovi dall'archivio",
"UNARCHIVE": "RIMUOVI DALL'ARCHIVIO", "UNARCHIVE": "RIMUOVI DALL'ARCHIVIO",
"Unblock_user": "Sblocca utente", "Unblock_user": "Sblocca utente",
"Unfavorite": "Rimuovi preferito",
"Unfollowed_thread": "Non segui più il thread", "Unfollowed_thread": "Non segui più il thread",
"Unmute": "Attiva notifiche", "Unmute": "Attiva notifiche",
"unmuted": "notifiche attivate", "unmuted": "notifiche attivate",

View File

@ -13,7 +13,7 @@
"error-delete-protected-role": "保護されたロールは削除できません。", "error-delete-protected-role": "保護されたロールは削除できません。",
"error-department-not-found": "ロールが存在しません。", "error-department-not-found": "ロールが存在しません。",
"error-direct-message-file-upload-not-allowed": "ダイレクトメッセージでのファイルのアップロードは許可されていません。", "error-direct-message-file-upload-not-allowed": "ダイレクトメッセージでのファイルのアップロードは許可されていません。",
"error-duplicate-channel-name": "{{channel_name}}と同名のチャンネルが存在します。", "error-duplicate-channel-name": "{{room_name}}と同名のチャンネルが存在します。",
"error-email-domain-blacklisted": "このドメインのメールアドレスはブラックリストに登録されています。", "error-email-domain-blacklisted": "このドメインのメールアドレスはブラックリストに登録されています。",
"error-email-send-failed": "次のメールアドレスの送信に失敗しました: {{message}}", "error-email-send-failed": "次のメールアドレスの送信に失敗しました: {{message}}",
"error-save-image": "画像の保存に失敗しました。", "error-save-image": "画像の保存に失敗しました。",
@ -77,7 +77,6 @@
"error-user-registration-secret": "ユーザーの登録は登録用URLからのみ許可されています", "error-user-registration-secret": "ユーザーの登録は登録用URLからのみ許可されています",
"error-you-are-last-owner": "あなたは最後のオーナーです。ルームを退出する前に別のオーナーを設定してください。", "error-you-are-last-owner": "あなたは最後のオーナーです。ルームを退出する前に別のオーナーを設定してください。",
"Actions": "アクション", "Actions": "アクション",
"activity": "アクティビティ",
"Activity": "アクティビティ順", "Activity": "アクティビティ順",
"Add_Reaction": "リアクションを追加", "Add_Reaction": "リアクションを追加",
"Add_Server": "サーバーを追加", "Add_Server": "サーバーを追加",
@ -183,7 +182,6 @@
"Everyone_can_access_this_channel": "全員このチャンネルにアクセスできます", "Everyone_can_access_this_channel": "全員このチャンネルにアクセスできます",
"Error_uploading": "アップロードエラー", "Error_uploading": "アップロードエラー",
"Expiration_Days": "期限切れ (日)", "Expiration_Days": "期限切れ (日)",
"Favorite": "お気に入り",
"Favorites": "お気に入り", "Favorites": "お気に入り",
"Files": "ファイル", "Files": "ファイル",
"File_description": "ファイルの説明", "File_description": "ファイルの説明",
@ -196,9 +194,6 @@
"Forgot_Password": "パスワードを忘れた", "Forgot_Password": "パスワードを忘れた",
"Full_table": "クリックしてテーブル全体を見る", "Full_table": "クリックしてテーブル全体を見る",
"Generate_New_Link": "新しいリンクを生成", "Generate_New_Link": "新しいリンクを生成",
"Group_by_favorites": "お気に入りをグループ化",
"Group_by_type": "タイプ別にグループ化",
"Hide": "隠す",
"Has_joined_the_channel": "はチャンネルに参加しました", "Has_joined_the_channel": "はチャンネルに参加しました",
"Has_joined_the_conversation": "は会話に参加しました", "Has_joined_the_conversation": "は会話に参加しました",
"Has_left_the_channel": "はチャンネルを退出しました", "Has_left_the_channel": "はチャンネルを退出しました",
@ -251,7 +246,6 @@
"My_servers": "自分のサーバー", "My_servers": "自分のサーバー",
"N_people_reacted": "{{n}}人がリアクションしました", "N_people_reacted": "{{n}}人がリアクションしました",
"N_users": "{{n}}人", "N_users": "{{n}}人",
"name": "アルファベット",
"Name": "名前", "Name": "名前",
"Never": "ずっと受け取らない", "Never": "ずっと受け取らない",
"New_Message": "メッセージ", "New_Message": "メッセージ",
@ -308,7 +302,6 @@
"Reactions_are_disabled": "リアクションは無効化されています", "Reactions_are_disabled": "リアクションは無効化されています",
"Reactions_are_enabled": "リアクションは有効化されています", "Reactions_are_enabled": "リアクションは有効化されています",
"Reactions": "リアクション", "Reactions": "リアクション",
"Read": "読む",
"Read_Only_Channel": "読み取り専用チャンネル", "Read_Only_Channel": "読み取り専用チャンネル",
"Read_Only": "読み取り専用", "Read_Only": "読み取り専用",
"Read_Receipt": "レシートを見る", "Read_Receipt": "レシートを見る",
@ -382,7 +375,6 @@
"Sign_in_your_server": "サーバーに接続", "Sign_in_your_server": "サーバーに接続",
"Sign_Up": "登録", "Sign_Up": "登録",
"Some_field_is_invalid_or_empty": "不正、または空の入力欄があります。", "Some_field_is_invalid_or_empty": "不正、または空の入力欄があります。",
"Sorting_by": "{{key}}順",
"Sound": "音", "Sound": "音",
"Star_room": "お気に入りルーム", "Star_room": "お気に入りルーム",
"Star": "お気に入り", "Star": "お気に入り",
@ -416,7 +408,6 @@
"unarchive": "アーカイブ解除", "unarchive": "アーカイブ解除",
"UNARCHIVE": "アーカイブ解除", "UNARCHIVE": "アーカイブ解除",
"Unblock_user": "ブロックを解除", "Unblock_user": "ブロックを解除",
"Unfavorite": "お気に入り解除",
"Unfollowed_thread": "スレッド更新時に通知しない", "Unfollowed_thread": "スレッド更新時に通知しない",
"Unmute": "ミュート解除", "Unmute": "ミュート解除",
"unmuted": "ミュート解除しました", "unmuted": "ミュート解除しました",

View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/kg.json Normal file
View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/km.json Normal file
View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/ko.json Normal file
View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/ku.json Normal file
View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/ln.json Normal file
View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/lo.json Normal file
View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/lt.json Normal file
View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/lv.json Normal file
View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/mn.json Normal file
View File

@ -0,0 +1 @@
{ }

View File

@ -0,0 +1 @@
{ }

View File

@ -81,7 +81,6 @@
"error-you-are-last-owner": "Je bent de laatste eigenaar. Stel een nieuwe eigenaar in voordat je de kamer verlaat.", "error-you-are-last-owner": "Je bent de laatste eigenaar. Stel een nieuwe eigenaar in voordat je de kamer verlaat.",
"error-status-not-allowed": "Onzichtbare status is uitgeschakeld", "error-status-not-allowed": "Onzichtbare status is uitgeschakeld",
"Actions": "Acties", "Actions": "Acties",
"activity": "activiteit",
"Activity": "Activiteit", "Activity": "Activiteit",
"Add_Reaction": "Reactie toevoegen", "Add_Reaction": "Reactie toevoegen",
"Add_Server": "Server toevoegen", "Add_Server": "Server toevoegen",
@ -232,7 +231,6 @@
"Everyone_can_access_this_team": "Iedereen heeft toegang tot dit team", "Everyone_can_access_this_team": "Iedereen heeft toegang tot dit team",
"Error_uploading": "Fout bij uploaden", "Error_uploading": "Fout bij uploaden",
"Expiration_Days": "Vervaldatum (Dagen)", "Expiration_Days": "Vervaldatum (Dagen)",
"Favorite": "Favoriet",
"Favorites": "Favorieten", "Favorites": "Favorieten",
"Files": "Bestanden", "Files": "Bestanden",
"File_description": "Bestandsbeschrijving", "File_description": "Bestandsbeschrijving",
@ -249,9 +247,6 @@
"Forward_to_user": "Doorsturen naar gebruiker", "Forward_to_user": "Doorsturen naar gebruiker",
"Full_table": "Klik om de volledige tabel te zien", "Full_table": "Klik om de volledige tabel te zien",
"Generate_New_Link": "Nieuwe link genereren", "Generate_New_Link": "Nieuwe link genereren",
"Group_by_favorites": "Groepeer favorieten",
"Group_by_type": "Groeperen op type",
"Hide": "Verberg",
"Has_joined_the_channel": "is bij het kanaal gekomen", "Has_joined_the_channel": "is bij het kanaal gekomen",
"Has_joined_the_conversation": "heeft zich bij het gesprek aangesloten", "Has_joined_the_conversation": "heeft zich bij het gesprek aangesloten",
"Has_left_the_channel": "heeft het kanaal verlaten", "Has_left_the_channel": "heeft het kanaal verlaten",
@ -334,7 +329,6 @@
"N_people_reacted": "{{n}} mensen hebben gereageerd", "N_people_reacted": "{{n}} mensen hebben gereageerd",
"N_users": "{{n}} gebruikers", "N_users": "{{n}} gebruikers",
"N_channels": "{{n}} kanalen", "N_channels": "{{n}} kanalen",
"name": "naam",
"Name": "Naam", "Name": "Naam",
"Navigation_history": "Navigatie geschiedenis", "Navigation_history": "Navigatie geschiedenis",
"Never": "Nooit", "Never": "Nooit",
@ -412,7 +406,6 @@
"Reactions_are_disabled": "Reacties zijn uitgeschakeld", "Reactions_are_disabled": "Reacties zijn uitgeschakeld",
"Reactions_are_enabled": "Reacties zijn ingeschakeld", "Reactions_are_enabled": "Reacties zijn ingeschakeld",
"Reactions": "Reacties", "Reactions": "Reacties",
"Read": "Lezen",
"Read_External_Permission_Message": "Rocket.Chat heeft toegang nodig tot foto's, media en bestanden op je apparaat", "Read_External_Permission_Message": "Rocket.Chat heeft toegang nodig tot foto's, media en bestanden op je apparaat",
"Read_External_Permission": "Lees toestemming voor media", "Read_External_Permission": "Lees toestemming voor media",
"Read_Only_Channel": "Alleen-lezen kanaal", "Read_Only_Channel": "Alleen-lezen kanaal",
@ -507,7 +500,6 @@
"Sign_in_your_server": "Log in op je server", "Sign_in_your_server": "Log in op je server",
"Sign_Up": "Registreren", "Sign_Up": "Registreren",
"Some_field_is_invalid_or_empty": "Sommige velden zijn ongeldig of leeg", "Some_field_is_invalid_or_empty": "Sommige velden zijn ongeldig of leeg",
"Sorting_by": "Sorteren op {{key}}",
"Sound": "Geluid", "Sound": "Geluid",
"Star_room": "Favoriete kanalen", "Star_room": "Favoriete kanalen",
"Star": "Ster", "Star": "Ster",
@ -546,7 +538,6 @@
"unarchive": "dearchiveren", "unarchive": "dearchiveren",
"UNARCHIVE": "DEARCHIVEREN", "UNARCHIVE": "DEARCHIVEREN",
"Unblock_user": "Deblokkeer gebruiker", "Unblock_user": "Deblokkeer gebruiker",
"Unfavorite": "Uit favorieten halen",
"Unfollowed_thread": "Draad ontvolgd", "Unfollowed_thread": "Draad ontvolgd",
"Unmute": "Dempen opheffen", "Unmute": "Dempen opheffen",
"unmuted": "ongedempt", "unmuted": "ongedempt",
@ -772,5 +763,24 @@
"Converting_Team_To_Channel": "Team converteren naar kanaal", "Converting_Team_To_Channel": "Team converteren naar kanaal",
"Select_Team_Channels_To_Delete": "Selecteer de teamkanalen die je wilt verwijderen, de kanalen die u niet selecteert, worden naar de werkruimte verplaatst.\n\nMerk op dat openbare kanalen openbaar en voor iedereen zichtbaar zullen zijn.", "Select_Team_Channels_To_Delete": "Selecteer de teamkanalen die je wilt verwijderen, de kanalen die u niet selecteert, worden naar de werkruimte verplaatst.\n\nMerk op dat openbare kanalen openbaar en voor iedereen zichtbaar zullen zijn.",
"You_are_converting_the_team": "Je converteert dit team naar een kanaal", "You_are_converting_the_team": "Je converteert dit team naar een kanaal",
"creating_discussion": "discussie aanmaken" "Display": "Weergave",
"Avatars": "Avatars",
"Sort_by": "Sorteer op",
"Group_by": "Groeperen op",
"Types": "Soorten",
"Expanded": "Uitgebreid",
"Condensed": "Gecondenseerd",
"creating_discussion": "discussie aanmaken",
"Canned_Responses": "Standaardantwoorden",
"No_match_found": "Geen overeenkomst gevonden.",
"Check_canned_responses": "Controleer op standaardantwoorden.",
"Searching": "Zoeken",
"Use": "Gebruiken",
"Shortcut": "Snelkoppeling",
"Content": "Inhoud",
"Sharing": "Delen",
"No_canned_responses": "Geen standaardantwoorden",
"Send_email_confirmation": "Stuur e-mailbevestiging",
"sending_email_confirmation": "e-mailbevestiging aan het verzenden",
"Enable_Message_Parser": "Berichtparser inschakelen"
} }

1
app/i18n/locales/no.json Normal file
View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/pl.json Normal file
View File

@ -0,0 +1 @@
{ }

View File

@ -13,7 +13,7 @@
"error-delete-protected-role": "Não é possível remover um papel protegido", "error-delete-protected-role": "Não é possível remover um papel protegido",
"error-department-not-found": "Departamento não encontrado", "error-department-not-found": "Departamento não encontrado",
"error-direct-message-file-upload-not-allowed": "Compartilhamento de arquivos não está permitido em mensagens diretas", "error-direct-message-file-upload-not-allowed": "Compartilhamento de arquivos não está permitido em mensagens diretas",
"error-duplicate-channel-name": "Já existe um canal com nome {{channel_name}}", "error-duplicate-channel-name": "Já existe um canal com nome {{room_name}}",
"error-email-domain-blacklisted": "O domínio de e-mail está na lista negra", "error-email-domain-blacklisted": "O domínio de e-mail está na lista negra",
"error-email-send-failed": "Erro ao tentar enviar e-mail: {{message}}", "error-email-send-failed": "Erro ao tentar enviar e-mail: {{message}}",
"error-save-image": "Erro ao salvar imagem", "error-save-image": "Erro ao salvar imagem",
@ -59,6 +59,7 @@
"error-message-editing-blocked": "Edição de mensagens está bloqueada", "error-message-editing-blocked": "Edição de mensagens está bloqueada",
"error-message-size-exceeded": "O tamanho da mensagem excede Message_MaxAllowedSize", "error-message-size-exceeded": "O tamanho da mensagem excede Message_MaxAllowedSize",
"error-missing-unsubscribe-link": "Você deve fornecer o link para desinscrever-se: [unsubscribe].", "error-missing-unsubscribe-link": "Você deve fornecer o link para desinscrever-se: [unsubscribe].",
"error-no-owner-channel": "Você não é dono do canal",
"error-no-tokens-for-this-user": "Não existem tokens para este usuário", "error-no-tokens-for-this-user": "Não existem tokens para este usuário",
"error-not-allowed": "Não permitido", "error-not-allowed": "Não permitido",
"error-not-authorized": "Não autorizado", "error-not-authorized": "Não autorizado",
@ -77,7 +78,6 @@
"error-you-are-last-owner": "Você é o último proprietário da sala. Por favor defina um novo proprietário antes de sair.", "error-you-are-last-owner": "Você é o último proprietário da sala. Por favor defina um novo proprietário antes de sair.",
"error-status-not-allowed": "O status invisível está desativado", "error-status-not-allowed": "O status invisível está desativado",
"Actions": "Ações", "Actions": "Ações",
"activity": "atividade",
"Activity": "Atividade", "Activity": "Atividade",
"Add_Reaction": "Reagir", "Add_Reaction": "Reagir",
"Add_Server": "Adicionar servidor", "Add_Server": "Adicionar servidor",
@ -87,6 +87,7 @@
"alert": "alerta", "alert": "alerta",
"alerts": "alertas", "alerts": "alertas",
"All_users_in_the_channel_can_write_new_messages": "Todos usuários no canal podem enviar mensagens novas", "All_users_in_the_channel_can_write_new_messages": "Todos usuários no canal podem enviar mensagens novas",
"All_users_in_the_team_can_write_new_messages": "Todos usuários no canal podem enviar mensagens novas",
"A_meaningful_name_for_the_discussion_room": "Um nome significativo para o canal de discussão", "A_meaningful_name_for_the_discussion_room": "Um nome significativo para o canal de discussão",
"All": "Todos", "All": "Todos",
"Allow_Reactions": "Permitir reagir", "Allow_Reactions": "Permitir reagir",
@ -172,6 +173,7 @@
"delete": "excluir", "delete": "excluir",
"Delete": "Excluir", "Delete": "Excluir",
"DELETE": "EXCLUIR", "DELETE": "EXCLUIR",
"move": "mover",
"deleting_room": "excluindo sala", "deleting_room": "excluindo sala",
"description": "descrição", "description": "descrição",
"Description": "Descrição", "Description": "Descrição",
@ -217,9 +219,9 @@
"Encryption_error_title": "Sua senha de criptografia parece errada", "Encryption_error_title": "Sua senha de criptografia parece errada",
"Encryption_error_desc": "Não foi possível decodificar sua chave de criptografia para ser importada.", "Encryption_error_desc": "Não foi possível decodificar sua chave de criptografia para ser importada.",
"Everyone_can_access_this_channel": "Todos podem acessar este canal", "Everyone_can_access_this_channel": "Todos podem acessar este canal",
"Everyone_can_access_this_team": "Todos podem acessar este canal",
"Error_uploading": "Erro subindo", "Error_uploading": "Erro subindo",
"Expiration_Days": "Expira em (dias)", "Expiration_Days": "Expira em (dias)",
"Favorite": "Adicionar aos Favoritos",
"Favorites": "Favoritos", "Favorites": "Favoritos",
"Files": "Arquivos", "Files": "Arquivos",
"File_description": "Descrição do arquivo", "File_description": "Descrição do arquivo",
@ -236,9 +238,6 @@
"Forward_to_user": "Encaminhar para usuário", "Forward_to_user": "Encaminhar para usuário",
"Full_table": "Clique para ver a tabela completa", "Full_table": "Clique para ver a tabela completa",
"Generate_New_Link": "Gerar novo convite", "Generate_New_Link": "Gerar novo convite",
"Group_by_favorites": "Agrupar favoritos",
"Group_by_type": "Agrupar por tipo",
"Hide": "Ocultar",
"Has_joined_the_channel": "entrou no canal", "Has_joined_the_channel": "entrou no canal",
"Has_joined_the_conversation": "entrou na conversa", "Has_joined_the_conversation": "entrou na conversa",
"Has_left_the_channel": "saiu da conversa", "Has_left_the_channel": "saiu da conversa",
@ -273,6 +272,7 @@
"Join_our_open_workspace": "Entra na nossa workspace pública", "Join_our_open_workspace": "Entra na nossa workspace pública",
"Join_your_workspace": "Entre na sua workspace", "Join_your_workspace": "Entre na sua workspace",
"Just_invited_people_can_access_this_channel": "Apenas as pessoas convidadas podem acessar este canal", "Just_invited_people_can_access_this_channel": "Apenas as pessoas convidadas podem acessar este canal",
"Just_invited_people_can_access_this_team": "Apenas as pessoas convidadas podem acessar este time",
"Language": "Idioma", "Language": "Idioma",
"last_message": "última mensagem", "last_message": "última mensagem",
"Leave_channel": "Sair do canal", "Leave_channel": "Sair do canal",
@ -307,7 +307,7 @@
"muted": "mudo", "muted": "mudo",
"N_people_reacted": "{{n}} pessoas reagiram", "N_people_reacted": "{{n}} pessoas reagiram",
"N_users": "{{n}} usuários", "N_users": "{{n}} usuários",
"name": "nome", "N_channels": "{{n}} canais",
"Name": "Nome", "Name": "Nome",
"Navigation_history": "Histórico de navegação", "Navigation_history": "Histórico de navegação",
"Never": "Nunca", "Never": "Nunca",
@ -411,6 +411,7 @@
"Review_app_unable_store": "Não foi possível abrir {{store}}", "Review_app_unable_store": "Não foi possível abrir {{store}}",
"Review_this_app": "Avaliar esse app", "Review_this_app": "Avaliar esse app",
"Remove": "Remover", "Remove": "Remover",
"remove": "remover",
"Roles": "Papéis", "Roles": "Papéis",
"Room_actions": "Ações", "Room_actions": "Ações",
"Room_changed_announcement": "O anúncio da sala foi alterado para: {{announcement}} por {{userBy}}", "Room_changed_announcement": "O anúncio da sala foi alterado para: {{announcement}} por {{userBy}}",
@ -466,7 +467,6 @@
"Sign_in_your_server": "Entrar no seu servidor", "Sign_in_your_server": "Entrar no seu servidor",
"Sign_Up": "Registrar", "Sign_Up": "Registrar",
"Some_field_is_invalid_or_empty": "Algum campo está inválido ou vazio", "Some_field_is_invalid_or_empty": "Algum campo está inválido ou vazio",
"Sorting_by": "Ordenando por {{key}}",
"Sound": "Som da notificação", "Sound": "Som da notificação",
"Star_room": "Favoritar sala", "Star_room": "Favoritar sala",
"Star": "Favorito", "Star": "Favorito",
@ -487,8 +487,8 @@
"The_user_wont_be_able_to_type_in_roomName": "O usuário não poderá digitar em {{roomName}}", "The_user_wont_be_able_to_type_in_roomName": "O usuário não poderá digitar em {{roomName}}",
"The_user_will_be_able_to_type_in_roomName": "O usuário poderá digitar em {{roomName}}", "The_user_will_be_able_to_type_in_roomName": "O usuário poderá digitar em {{roomName}}",
"There_was_an_error_while_action": "Aconteceu um erro {{action}}!", "There_was_an_error_while_action": "Aconteceu um erro {{action}}!",
"This_room_is_blocked": "Este quarto está bloqueado", "This_room_is_blocked": "Esta sala está bloqueada",
"This_room_is_read_only": "Este quarto é apenas de leitura", "This_room_is_read_only": "Esta sala é somente leitura",
"Thread": "Tópico", "Thread": "Tópico",
"Threads": "Tópicos", "Threads": "Tópicos",
"Timezone": "Fuso horário", "Timezone": "Fuso horário",
@ -502,7 +502,6 @@
"unarchive": "desarquivar", "unarchive": "desarquivar",
"UNARCHIVE": "DESARQUIVAR", "UNARCHIVE": "DESARQUIVAR",
"Unblock_user": "Desbloquear usuário", "Unblock_user": "Desbloquear usuário",
"Unfavorite": "Remover dos Favoritos",
"Unfollowed_thread": "Parou de seguir tópico", "Unfollowed_thread": "Parou de seguir tópico",
"Unmute": "Permitir que o usuário fale", "Unmute": "Permitir que o usuário fale",
"unmuted": "permitiu que o usuário fale", "unmuted": "permitiu que o usuário fale",
@ -639,6 +638,9 @@
"No_threads_following": "Você não está seguindo tópicos", "No_threads_following": "Você não está seguindo tópicos",
"No_threads_unread": "Não há tópicos não lidos", "No_threads_unread": "Não há tópicos não lidos",
"Messagebox_Send_to_channel": "Mostrar no canal", "Messagebox_Send_to_channel": "Mostrar no canal",
"Leader": "Líder",
"Moderator": "Moderador",
"Owner": "Proprietário",
"Remove_from_room": "Remover do canal", "Remove_from_room": "Remover do canal",
"Ignore": "Ignorar", "Ignore": "Ignorar",
"Unignore": "Deixar de ignorar", "Unignore": "Deixar de ignorar",
@ -663,9 +665,46 @@
"No_team_channels_found": "Nenhum canal encontrado", "No_team_channels_found": "Nenhum canal encontrado",
"Team_not_found": "Time não encontrado", "Team_not_found": "Time não encontrado",
"Private_Team": "Equipe Privada", "Private_Team": "Equipe Privada",
"Add_Channel_to_Team": "Adicionar Canal ao Time",
"Left_The_Team_Successfully": "Saiu do time com sucesso", "Left_The_Team_Successfully": "Saiu do time com sucesso",
"Create_New": "Criar",
"Add_Existing": "Adicionar",
"Add_Existing_Channel": "Adicionar Canal Existente", "Add_Existing_Channel": "Adicionar Canal Existente",
"Remove_from_Team": "Remover do time",
"Auto-join": "Entrada Automática",
"Remove_Team_Room_Warning": "Você deseja remover este canal do time? O canal será movido de volta para o espaço de trabalho",
"Confirmation": "Confirmação",
"invalid-room": "Sala inválida", "invalid-room": "Sala inválida",
"You_are_leaving_the_team": "Você está deixando o time '{{team}}'",
"Leave_Team": "Sair do Time",
"Select_Team": "Selecionar Time",
"Select_Team_Channels": "Selecione os canais do time que você gostaria de deixar.",
"Cannot_leave": "Não pode sair",
"Cannot_remove": "Não é possível remover",
"Cannot_delete": "Não é possível apagar",
"Last_owner_team_room": "Você é o último dono deste canal. Uma vez que você deixe o time, o canal será mantido dentro da equipe, mas você estará administrando-o de fora.",
"last-owner-can-not-be-removed": "O último dono não pode ser removido",
"Remove_User_Teams": "Selecione os canais dos quais você deseja que o usuário seja removido.",
"Delete_Team": "Excluir Time",
"Select_channels_to_delete": "Isto não pode ser desfeito. Assim que você apagar um time, todo o conteúdo e configuração do chat serão apagados.\n\nSelecione os canais que você gostaria de excluir. Os que você decidir manter estarão disponíveis no seu espaço de trabalho. Note que os canais públicos continuarão a ser públicos e visíveis para todos.",
"You_are_deleting_the_team": "Você está apagando este time.",
"Removing_user_from_this_team": "Você está removendo {{user}} deste time",
"Remove_User_Team_Channels": "Selecione os canais dos quais você deseja que o usuário seja removido.",
"Remove_Member": "Remover Membro",
"leaving_team": "saindo do time",
"removing_team": "removendo do time",
"moving_channel_to_team": "movendo canal do time",
"deleting_team": "apagando time",
"member-does-not-exist": "Membro não existe",
"Convert": "Converter",
"Convert_to_Team": "Converter para Time",
"Convert_to_Team_Warning": "Você está convertendo este Canal para um Time. Todos os Membros serão mantidos.",
"Move_to_Team": "Mover para Time",
"Move_Channel_Paragraph": "Mover um canal dentro de um time significa que este canal será adicionado no contexto da equipe, no entanto, todos os membros do canal, que não são membros do respectivo time, ainda terão acesso a este canal, mas não serão adicionados como membros da equipe \n\nA gestão de todos os canais continuará a ser feita pelos proprietários deste canal.\n\nOs membros da equipe e até mesmo os proprietários da equipe, se não forem membros deste canal, não podem ter acesso ao conteúdo do canal.\n\nPor favor, note que o dono do time poderá remover membros do canal.",
"Move_to_Team_Warning": "Depois de ler as instruções anteriores sobre este comportamento, você ainda deseja mover este canal para o time selecionado?",
"Load_More": "Carregar mais",
"Load_Newer": "Carregar mais novas",
"Load_Older": "Carregar mais antigas",
"room-name-already-exists": "Nome da sala já existe", "room-name-already-exists": "Nome da sala já existe",
"error-team-creation": "Erro na criação do time", "error-team-creation": "Erro na criação do time",
"unauthorized": "Não autorizado", "unauthorized": "Não autorizado",
@ -673,6 +712,17 @@
"Deleted_The_Team_Successfully": "Time deletado com sucesso", "Deleted_The_Team_Successfully": "Time deletado com sucesso",
"Deleted_The_Room_Successfully": "Sala deletada com sucesso", "Deleted_The_Room_Successfully": "Sala deletada com sucesso",
"Convert_to_Channel": "Converter para um Canal", "Convert_to_Channel": "Converter para um Canal",
"Converting_Team_To_Channel": "Convertendo Time para Canal",
"Select_Team_Channels_To_Delete": "Selecione os Canais do Time que você gostaria de excluir. Aqueles que você não selecionar serão movidos para o Espaço de Trabalho.\n\nNote que os Canais públicos serão públicos e visíveis para todos.",
"You_are_converting_the_team": "Você está convertendo este Time para um Canal",
"Display": "Display",
"Avatars": "Avatars",
"Sort_by": "Ordenar por",
"Group_by": "Agrupar por",
"Types": "Tipos",
"Expanded": "Estendido",
"Condensed": "Condensado",
"creating_discussion": "criando discussão",
"Canned_Responses": "Respostas Predefinidas", "Canned_Responses": "Respostas Predefinidas",
"No_match_found": "Nenhum resultado encontrado", "No_match_found": "Nenhum resultado encontrado",
"Check_canned_responses": "Verifique nas respostas predefinidas", "Check_canned_responses": "Verifique nas respostas predefinidas",
@ -680,5 +730,8 @@
"Use": "Use", "Use": "Use",
"Shortcut": "Atalho", "Shortcut": "Atalho",
"Content": "Conteúdo", "Content": "Conteúdo",
"No_canned_responses": "Não há respostas predefinidas" "Sharing": "Compartilhando",
"No_canned_responses": "Não há respostas predefinidas",
"Send_email_confirmation": "Enviar email de confirmação",
"sending_email_confirmation": "enviando email de confirmação"
} }

View File

@ -81,7 +81,6 @@
"error-you-are-last-owner": "Você é o último proprietário. Por favor, defina novo proprietário antes de sair da sala.", "error-you-are-last-owner": "Você é o último proprietário. Por favor, defina novo proprietário antes de sair da sala.",
"error-status-not-allowed": "O estado invisível está desactivado", "error-status-not-allowed": "O estado invisível está desactivado",
"Actions": "Acções", "Actions": "Acções",
"activity": "actividade",
"Activity": "Actividade", "Activity": "Actividade",
"Add_Reaction": "Adicionar Reacção", "Add_Reaction": "Adicionar Reacção",
"Add_Server": "Adicionar Servidor", "Add_Server": "Adicionar Servidor",
@ -232,7 +231,6 @@
"Everyone_can_access_this_team": "Todos podem aceder a esta equipa", "Everyone_can_access_this_team": "Todos podem aceder a esta equipa",
"Error_uploading": "Erro ao fazer o envio", "Error_uploading": "Erro ao fazer o envio",
"Expiration_Days": "Validade (Dias)", "Expiration_Days": "Validade (Dias)",
"Favorite": "Favorito",
"Favorites": "Favoritos", "Favorites": "Favoritos",
"Files": "Ficheiros", "Files": "Ficheiros",
"File_description": "Descrição do ficheiro", "File_description": "Descrição do ficheiro",
@ -249,9 +247,6 @@
"Forward_to_user": "Reencaminhar para o utilizador", "Forward_to_user": "Reencaminhar para o utilizador",
"Full_table": "Clique para ver a tabela completa", "Full_table": "Clique para ver a tabela completa",
"Generate_New_Link": "Gerar Novo Link", "Generate_New_Link": "Gerar Novo Link",
"Group_by_favorites": "Agrupar por favoritos",
"Group_by_type": "Agrupar por tipo",
"Hide": "Esconder",
"Has_joined_the_channel": "entrou no canal", "Has_joined_the_channel": "entrou no canal",
"Has_joined_the_conversation": "entrou na conversa", "Has_joined_the_conversation": "entrou na conversa",
"Has_left_the_channel": "saiu do canal", "Has_left_the_channel": "saiu do canal",
@ -333,7 +328,6 @@
"N_people_reacted": "{{n}} pessoas reagiram", "N_people_reacted": "{{n}} pessoas reagiram",
"N_users": "{{n}} utilizadores", "N_users": "{{n}} utilizadores",
"N_channels": "{{n}} canais", "N_channels": "{{n}} canais",
"name": "nome",
"Name": "Nome", "Name": "Nome",
"Navigation_history": "Histórico de navegação", "Navigation_history": "Histórico de navegação",
"Never": "Nunca", "Never": "Nunca",
@ -411,7 +405,6 @@
"Reactions_are_disabled": "Reacções desactivadas", "Reactions_are_disabled": "Reacções desactivadas",
"Reactions_are_enabled": "Reacções activadas", "Reactions_are_enabled": "Reacções activadas",
"Reactions": "Reacções", "Reactions": "Reacções",
"Read": "Ler",
"Read_External_Permission_Message": "Rocket.Chat precisa acessar fotos, média e arquivos em seu dispositivo", "Read_External_Permission_Message": "Rocket.Chat precisa acessar fotos, média e arquivos em seu dispositivo",
"Read_External_Permission": "Permissão de leitura da média", "Read_External_Permission": "Permissão de leitura da média",
"Read_Only_Channel": "Canal só de leitura", "Read_Only_Channel": "Canal só de leitura",
@ -458,7 +451,6 @@
"Sign_in_your_server": "Entre no seu servidor", "Sign_in_your_server": "Entre no seu servidor",
"Sign_Up": "Inscreva-se", "Sign_Up": "Inscreva-se",
"Some_field_is_invalid_or_empty": "Algum campo é inválido ou está vazio", "Some_field_is_invalid_or_empty": "Algum campo é inválido ou está vazio",
"Sorting_by": "Ordenar por {{key}}",
"Star_room": "Marcar como favorito", "Star_room": "Marcar como favorito",
"Star": "Dar estrela", "Star": "Dar estrela",
"Starred_Messages": "Mensagens com estrela", "Starred_Messages": "Mensagens com estrela",

1
app/i18n/locales/ro.json Normal file
View File

@ -0,0 +1 @@
{ }

View File

@ -81,8 +81,7 @@
"error-you-are-last-owner": "Вы последний владелец. Пожалуйста, назначьте нового владельца, прежде чем покинуть чат.", "error-you-are-last-owner": "Вы последний владелец. Пожалуйста, назначьте нового владельца, прежде чем покинуть чат.",
"error-status-not-allowed": "Статус Невидимый отключён", "error-status-not-allowed": "Статус Невидимый отключён",
"Actions": "Действия", "Actions": "Действия",
"activity": "активности", "Activity": "Активность",
"Activity": "По активности",
"Add_Reaction": "Добавить реакцию", "Add_Reaction": "Добавить реакцию",
"Add_Server": "Добавить сервер", "Add_Server": "Добавить сервер",
"Add_users": "Добавить пользователей", "Add_users": "Добавить пользователей",
@ -232,8 +231,7 @@
"Everyone_can_access_this_team": "Каждый может получить доступ к этой Команде", "Everyone_can_access_this_team": "Каждый может получить доступ к этой Команде",
"Error_uploading": "Ошибка загрузки", "Error_uploading": "Ошибка загрузки",
"Expiration_Days": "Срок действия (Дни)", "Expiration_Days": "Срок действия (Дни)",
"Favorite": "Избранное", "Favorites": "Избранное",
"Favorites": "Избранные",
"Files": "Файлы", "Files": "Файлы",
"File_description": "Описание файла", "File_description": "Описание файла",
"File_name": "Имя файла", "File_name": "Имя файла",
@ -249,9 +247,6 @@
"Forward_to_user": "Перенаправить пользователю", "Forward_to_user": "Перенаправить пользователю",
"Full_table": "Нажмите, чтобы увидеть полную таблицу", "Full_table": "Нажмите, чтобы увидеть полную таблицу",
"Generate_New_Link": "Сгенерировать Новую Ссылку", "Generate_New_Link": "Сгенерировать Новую Ссылку",
"Group_by_favorites": "По избранным",
"Group_by_type": "По типу",
"Hide": "Скрыть",
"Has_joined_the_channel": "присоединился к каналу", "Has_joined_the_channel": "присоединился к каналу",
"Has_joined_the_conversation": "присоединился к беседе", "Has_joined_the_conversation": "присоединился к беседе",
"Has_left_the_channel": "покинул канал", "Has_left_the_channel": "покинул канал",
@ -334,7 +329,6 @@
"N_people_reacted": "отреагировало {{n}} человек", "N_people_reacted": "отреагировало {{n}} человек",
"N_users": "{{n}} пользователи", "N_users": "{{n}} пользователи",
"N_channels": "{{n}} каналов", "N_channels": "{{n}} каналов",
"name": "имя",
"Name": "Имя", "Name": "Имя",
"Navigation_history": "История навигации", "Navigation_history": "История навигации",
"Never": "Никогда", "Never": "Никогда",
@ -412,7 +406,6 @@
"Reactions_are_disabled": "Реакции отключены", "Reactions_are_disabled": "Реакции отключены",
"Reactions_are_enabled": "Реакции активированы", "Reactions_are_enabled": "Реакции активированы",
"Reactions": "Реакции", "Reactions": "Реакции",
"Read": "Читать",
"Read_External_Permission_Message": "Rocket.Chat необходим доступ к фотографиям, медиа и другим файлам на вашем устройстве", "Read_External_Permission_Message": "Rocket.Chat необходим доступ к фотографиям, медиа и другим файлам на вашем устройстве",
"Read_External_Permission": "Разрешение на Чтение Медиа", "Read_External_Permission": "Разрешение на Чтение Медиа",
"Read_Only_Channel": "Канал только для чтения", "Read_Only_Channel": "Канал только для чтения",
@ -507,7 +500,6 @@
"Sign_in_your_server": "Войдите на ваш сервер", "Sign_in_your_server": "Войдите на ваш сервер",
"Sign_Up": "Регистрация", "Sign_Up": "Регистрация",
"Some_field_is_invalid_or_empty": "Некоторые поля недопустимы или пусты", "Some_field_is_invalid_or_empty": "Некоторые поля недопустимы или пусты",
"Sorting_by": "Сортировка по {{key}}",
"Sound": "Звук", "Sound": "Звук",
"Star_room": "В избранное", "Star_room": "В избранное",
"Star": "Отметить", "Star": "Отметить",
@ -546,7 +538,6 @@
"unarchive": "разархивировать", "unarchive": "разархивировать",
"UNARCHIVE": "РАЗАРХИВИРОВАТЬ", "UNARCHIVE": "РАЗАРХИВИРОВАТЬ",
"Unblock_user": "Разблокировать пользователя", "Unblock_user": "Разблокировать пользователя",
"Unfavorite": "Удалить из избранного",
"Unfollowed_thread": "Не следить", "Unfollowed_thread": "Не следить",
"Unmute": "Отменить заглушивание", "Unmute": "Отменить заглушивание",
"unmuted": "Заглушивание отменено", "unmuted": "Заглушивание отменено",
@ -772,5 +763,24 @@
"Converting_Team_To_Channel": "Преобразование Команды в канал", "Converting_Team_To_Channel": "Преобразование Команды в канал",
"Select_Team_Channels_To_Delete": "Выберите каналы Команды, которые вы хотите удалить, те, которые вы не выбрали, будут перемещены в рабочую область \n\nОбратите внимание, что публичные каналы будут открытыми и видимыми для всех.", "Select_Team_Channels_To_Delete": "Выберите каналы Команды, которые вы хотите удалить, те, которые вы не выбрали, будут перемещены в рабочую область \n\nОбратите внимание, что публичные каналы будут открытыми и видимыми для всех.",
"You_are_converting_the_team": "Вы преобразуете эту Команду в канал", "You_are_converting_the_team": "Вы преобразуете эту Команду в канал",
"creating_discussion": "создание обсуждения" "Display": "Внешний вид",
"Avatars": "Аватары",
"Sort_by": "Сортировка по",
"Group_by": "Группировка",
"Types": "Типы",
"Expanded": "Расширенный",
"Condensed": "Упрощенный",
"creating_discussion": "создание обсуждения",
"Canned_Responses": "Заготовленные ответы",
"No_match_found": "Совпадений не найдено.",
"Check_canned_responses": "Проверить заготовленные ответы",
"Searching": "Поиск",
"Use": "Использовать",
"Shortcut": "Ярлык",
"Content": "Содержимое",
"Sharing": "Поделиться",
"No_canned_responses": "Нет заготовленных ответов",
"Send_email_confirmation": "Отправить электронное письмо с подтверждением",
"sending_email_confirmation": "отправка подтверждения по электронной почте",
"Enable_Message_Parser": "Включить парсер сообщений"
} }

1
app/i18n/locales/si.json Normal file
View File

@ -0,0 +1 @@
{ }

View File

@ -0,0 +1 @@
{ }

View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/sq.json Normal file
View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/sr.json Normal file
View File

@ -0,0 +1 @@
{ }

1
app/i18n/locales/sv.json Normal file
View File

@ -0,0 +1 @@
{ }

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