[NEW] Portuguese translation (#452)
* [NEW] Portuguese translation * Remove servers from sidebar
This commit is contained in:
parent
9c007c11b7
commit
e06ba0139d
|
@ -1,12 +1,9 @@
|
||||||
import React, { Component } from 'react';
|
import React, { Component } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { ScrollView, Text, View, StyleSheet, FlatList, LayoutAnimation, SafeAreaView, AsyncStorage } from 'react-native';
|
import { ScrollView, Text, View, StyleSheet, FlatList, LayoutAnimation, SafeAreaView } from 'react-native';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import FastImage from 'react-native-fast-image';
|
|
||||||
import Icon from 'react-native-vector-icons/MaterialIcons';
|
import Icon from 'react-native-vector-icons/MaterialIcons';
|
||||||
|
|
||||||
import database from '../lib/realm';
|
|
||||||
import { selectServerRequest } from '../actions/server';
|
|
||||||
import { appStart } from '../actions';
|
import { appStart } from '../actions';
|
||||||
import { logout } from '../actions/login';
|
import { logout } from '../actions/login';
|
||||||
import Avatar from '../containers/Avatar';
|
import Avatar from '../containers/Avatar';
|
||||||
|
@ -44,11 +41,6 @@ const styles = StyleSheet.create({
|
||||||
borderColor: '#ddd',
|
borderColor: '#ddd',
|
||||||
marginVertical: 4
|
marginVertical: 4
|
||||||
},
|
},
|
||||||
serverImage: {
|
|
||||||
width: 24,
|
|
||||||
height: 24,
|
|
||||||
borderRadius: 4
|
|
||||||
},
|
|
||||||
header: {
|
header: {
|
||||||
paddingVertical: 16,
|
paddingVertical: 16,
|
||||||
flexDirection: 'row',
|
flexDirection: 'row',
|
||||||
|
@ -90,13 +82,11 @@ const keyExtractor = item => item.id;
|
||||||
user: {
|
user: {
|
||||||
id: state.login.user && state.login.user.id,
|
id: state.login.user && state.login.user.id,
|
||||||
language: state.login.user && state.login.user.language,
|
language: state.login.user && state.login.user.language,
|
||||||
server: state.login.user && state.login.user.server,
|
|
||||||
status: state.login.user && state.login.user.status,
|
status: state.login.user && state.login.user.status,
|
||||||
username: state.login.user && state.login.user.username
|
username: state.login.user && state.login.user.username
|
||||||
},
|
},
|
||||||
baseUrl: state.settings.Site_Url || state.server ? state.server.server : ''
|
baseUrl: state.settings.Site_Url || state.server ? state.server.server : ''
|
||||||
}), dispatch => ({
|
}), dispatch => ({
|
||||||
selectServerRequest: server => dispatch(selectServerRequest(server)),
|
|
||||||
logout: () => dispatch(logout()),
|
logout: () => dispatch(logout()),
|
||||||
appStart: () => dispatch(appStart('outside'))
|
appStart: () => dispatch(appStart('outside'))
|
||||||
}))
|
}))
|
||||||
|
@ -105,7 +95,6 @@ export default class Sidebar extends Component {
|
||||||
baseUrl: PropTypes.string,
|
baseUrl: PropTypes.string,
|
||||||
navigator: PropTypes.object,
|
navigator: PropTypes.object,
|
||||||
server: PropTypes.string.isRequired,
|
server: PropTypes.string.isRequired,
|
||||||
selectServerRequest: PropTypes.func.isRequired,
|
|
||||||
user: PropTypes.object,
|
user: PropTypes.object,
|
||||||
logout: PropTypes.func.isRequired,
|
logout: PropTypes.func.isRequired,
|
||||||
appStart: PropTypes.func
|
appStart: PropTypes.func
|
||||||
|
@ -114,15 +103,12 @@ export default class Sidebar extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
this.state = {
|
this.state = {
|
||||||
servers: [],
|
showStatus: false
|
||||||
showServers: false
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
this.setState(this.getState());
|
|
||||||
this.setStatus();
|
this.setStatus();
|
||||||
database.databases.serversDB.addListener('change', this.updateState);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillReceiveProps(nextProps) {
|
componentWillReceiveProps(nextProps) {
|
||||||
|
@ -131,14 +117,6 @@ export default class Sidebar extends Component {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillUnmount() {
|
|
||||||
database.databases.serversDB.removeListener('change', this.updateState);
|
|
||||||
}
|
|
||||||
|
|
||||||
onPressItem = (item) => {
|
|
||||||
this.props.selectServerRequest(item.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
setStatus = () => {
|
setStatus = () => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.setState({
|
this.setState({
|
||||||
|
@ -159,14 +137,6 @@ export default class Sidebar extends Component {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getState = () => ({
|
|
||||||
servers: database.databases.serversDB.objects('servers')
|
|
||||||
})
|
|
||||||
|
|
||||||
updateState = () => {
|
|
||||||
this.setState(this.getState());
|
|
||||||
}
|
|
||||||
|
|
||||||
closeDrawer = () => {
|
closeDrawer = () => {
|
||||||
this.props.navigator.toggleDrawer({
|
this.props.navigator.toggleDrawer({
|
||||||
side: 'left',
|
side: 'left',
|
||||||
|
@ -175,9 +145,9 @@ export default class Sidebar extends Component {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
toggleServers = () => {
|
toggleStatus = () => {
|
||||||
LayoutAnimation.easeInEaseOut();
|
LayoutAnimation.easeInEaseOut();
|
||||||
this.setState({ showServers: !this.state.showServers });
|
this.setState({ showStatus: !this.state.showStatus });
|
||||||
}
|
}
|
||||||
|
|
||||||
sidebarNavigate = (screen, title) => {
|
sidebarNavigate = (screen, title) => {
|
||||||
|
@ -215,7 +185,7 @@ export default class Sidebar extends Component {
|
||||||
selected: this.props.user.status === item.id,
|
selected: this.props.user.status === item.id,
|
||||||
onPress: () => {
|
onPress: () => {
|
||||||
this.closeDrawer();
|
this.closeDrawer();
|
||||||
this.toggleServers();
|
this.toggleStatus();
|
||||||
if (this.props.user.status !== item.id) {
|
if (this.props.user.status !== item.id) {
|
||||||
try {
|
try {
|
||||||
RocketChat.setUserPresenceDefaultStatus(item.id);
|
RocketChat.setUserPresenceDefaultStatus(item.id);
|
||||||
|
@ -227,41 +197,6 @@ export default class Sidebar extends Component {
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
renderServer = ({ item }) => (
|
|
||||||
this.renderItem({
|
|
||||||
text: item.id,
|
|
||||||
left: <FastImage
|
|
||||||
style={styles.serverImage}
|
|
||||||
source={{ uri: encodeURI(`${ item.id }/assets/favicon_32.png`) }}
|
|
||||||
/>,
|
|
||||||
selected: this.props.server === item.id,
|
|
||||||
onPress: async() => {
|
|
||||||
this.closeDrawer();
|
|
||||||
this.toggleServers();
|
|
||||||
if (this.props.server !== item.id) {
|
|
||||||
this.props.selectServerRequest(item.id);
|
|
||||||
const token = await AsyncStorage.getItem(`${ RocketChat.TOKEN_KEY }-${ item.id }`);
|
|
||||||
if (!token) {
|
|
||||||
this.props.appStart();
|
|
||||||
setTimeout(() => {
|
|
||||||
NavigationActions.push({
|
|
||||||
screen: 'NewServerView',
|
|
||||||
backButtonTitle: '',
|
|
||||||
passProps: {
|
|
||||||
server: item.id
|
|
||||||
},
|
|
||||||
navigatorStyle: {
|
|
||||||
navBarHidden: true
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}, 1000);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
testID: `sidebar-${ item.id }`
|
|
||||||
})
|
|
||||||
)
|
|
||||||
|
|
||||||
renderNavigation = () => (
|
renderNavigation = () => (
|
||||||
[
|
[
|
||||||
this.renderItem({
|
this.renderItem({
|
||||||
|
@ -292,44 +227,14 @@ export default class Sidebar extends Component {
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
renderServers = () => (
|
renderStatus = () => (
|
||||||
[
|
<FlatList
|
||||||
<FlatList
|
key='status-list'
|
||||||
key='status-list'
|
data={this.state.status}
|
||||||
data={this.state.status}
|
extraData={this.props.user}
|
||||||
extraData={this.props.user}
|
renderItem={this.renderStatusItem}
|
||||||
renderItem={this.renderStatusItem}
|
keyExtractor={keyExtractor}
|
||||||
keyExtractor={keyExtractor}
|
/>
|
||||||
/>,
|
|
||||||
this.renderSeparator('separator-status'),
|
|
||||||
<FlatList
|
|
||||||
key='servers-list'
|
|
||||||
data={this.state.servers}
|
|
||||||
extraData={this.props.server}
|
|
||||||
renderItem={this.renderServer}
|
|
||||||
keyExtractor={keyExtractor}
|
|
||||||
/>,
|
|
||||||
this.renderSeparator('separator-add-server'),
|
|
||||||
this.renderItem({
|
|
||||||
text: I18n.t('Add_Server'),
|
|
||||||
left: <Icon
|
|
||||||
name='add'
|
|
||||||
size={20}
|
|
||||||
/>,
|
|
||||||
onPress: () => {
|
|
||||||
this.closeDrawer();
|
|
||||||
this.toggleServers();
|
|
||||||
this.props.navigator.showModal({
|
|
||||||
screen: 'NewServerView',
|
|
||||||
title: I18n.t('Add_Server'),
|
|
||||||
passProps: {
|
|
||||||
previousServer: this.props.server
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
testID: 'sidebar-add-server'
|
|
||||||
})
|
|
||||||
]
|
|
||||||
)
|
)
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
@ -341,10 +246,10 @@ export default class Sidebar extends Component {
|
||||||
<SafeAreaView testID='sidebar' style={styles.container}>
|
<SafeAreaView testID='sidebar' style={styles.container}>
|
||||||
<ScrollView style={styles.container} {...scrollPersistTaps}>
|
<ScrollView style={styles.container} {...scrollPersistTaps}>
|
||||||
<Touch
|
<Touch
|
||||||
onPress={() => this.toggleServers()}
|
onPress={() => this.toggleStatus()}
|
||||||
underlayColor='rgba(255, 255, 255, 0.5)'
|
underlayColor='rgba(255, 255, 255, 0.5)'
|
||||||
activeOpacity={0.3}
|
activeOpacity={0.3}
|
||||||
testID='sidebar-toggle-server'
|
testID='sidebar-toggle-status'
|
||||||
>
|
>
|
||||||
<View style={styles.header}>
|
<View style={styles.header}>
|
||||||
<Avatar
|
<Avatar
|
||||||
|
@ -361,7 +266,7 @@ export default class Sidebar extends Component {
|
||||||
<Text style={styles.currentServerText} numberOfLines={1}>{server}</Text>
|
<Text style={styles.currentServerText} numberOfLines={1}>{server}</Text>
|
||||||
</View>
|
</View>
|
||||||
<Icon
|
<Icon
|
||||||
name={this.state.showServers ? 'keyboard-arrow-up' : 'keyboard-arrow-down'}
|
name={this.state.showStatus ? 'keyboard-arrow-up' : 'keyboard-arrow-down'}
|
||||||
size={30}
|
size={30}
|
||||||
style={{ paddingHorizontal: 10 }}
|
style={{ paddingHorizontal: 10 }}
|
||||||
/>
|
/>
|
||||||
|
@ -370,8 +275,8 @@ export default class Sidebar extends Component {
|
||||||
|
|
||||||
{this.renderSeparator('separator-header')}
|
{this.renderSeparator('separator-header')}
|
||||||
|
|
||||||
{!this.state.showServers ? this.renderNavigation() : null}
|
{!this.state.showStatus ? this.renderNavigation() : null}
|
||||||
{this.state.showServers ? this.renderServers() : null}
|
{this.state.showStatus ? this.renderStatus() : null}
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
<Text style={styles.version}>
|
<Text style={styles.version}>
|
||||||
{DeviceInfo.getReadableVersion()}
|
{DeviceInfo.getReadableVersion()}
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
import I18n from 'react-native-i18n';
|
import I18n from 'react-native-i18n';
|
||||||
import en from './locales/en';
|
import en from './locales/en';
|
||||||
import ru from './locales/ru';
|
import ru from './locales/ru';
|
||||||
|
import pt from './locales/pt-BR';
|
||||||
|
|
||||||
I18n.fallbacks = true;
|
I18n.fallbacks = true;
|
||||||
|
|
||||||
I18n.translations = {
|
I18n.translations = {
|
||||||
en, ru
|
en, ru, pt
|
||||||
};
|
};
|
||||||
|
|
||||||
export default I18n;
|
export default I18n;
|
||||||
|
|
|
@ -0,0 +1,345 @@
|
||||||
|
export default {
|
||||||
|
'1_online_member': '1 membro online',
|
||||||
|
'1_person_reacted': '1 pessoa reagiu',
|
||||||
|
'1_user': '1 usuário',
|
||||||
|
'error-action-not-allowed': '{{action}} não é permitido',
|
||||||
|
'error-application-not-found': 'Aplicação não encontrada',
|
||||||
|
'error-archived-duplicate-name': 'Já há um canal arquivado com o nome {{room_name}}',
|
||||||
|
'error-avatar-invalid-url': 'URL inválida de avatar: {{url}}',
|
||||||
|
'error-avatar-url-handling': 'Erro durante o manuseio configuração avatar a partir de uma URL ({{url}}) para {{username}}',
|
||||||
|
'error-cant-invite-for-direct-room': 'Não é possível convidar usuários para salas diretas',
|
||||||
|
'error-could-not-change-email': 'Não foi possível mudar e-mail',
|
||||||
|
'error-could-not-change-name': 'Não foi possível mudar o nome',
|
||||||
|
'error-could-not-change-username': 'Não foi possível alterar o nome de usuário',
|
||||||
|
'error-delete-protected-role': 'Não é possível remover um papel protegido',
|
||||||
|
'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-duplicate-channel-name': 'Já existe um canal com nome {{channel_name}}',
|
||||||
|
'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-field-unavailable': '{{field}} já está sendo usado :(',
|
||||||
|
'error-file-too-large': 'Arquivo é muito grande',
|
||||||
|
'error-importer-not-defined': 'O importador não foi definido corretamente; está faltando a classe Import.',
|
||||||
|
'error-input-is-not-a-valid-field': '{{input}} não é válido um {{field}}',
|
||||||
|
'error-invalid-actionlink': 'Link de ação inválido',
|
||||||
|
'error-invalid-arguments': 'Argumentos inválidos',
|
||||||
|
'error-invalid-asset': 'Arquivo Inválido',
|
||||||
|
'error-invalid-channel': 'Canal inválido.',
|
||||||
|
'error-invalid-channel-start-with-chars': 'Canal inválido. Comece com @ ou #',
|
||||||
|
'error-invalid-custom-field': 'Campo personalizado inválido',
|
||||||
|
'error-invalid-custom-field-name': 'Nome inválido para o campo personalizado. Use apenas letras, números, hífens e underscores.',
|
||||||
|
'error-invalid-date': 'Data fornecida inválida',
|
||||||
|
'error-invalid-description': 'Descrição inválida',
|
||||||
|
'error-invalid-domain': 'Domínio inválido',
|
||||||
|
'error-invalid-email': '{{email}} não é um e-mail válido',
|
||||||
|
'error-invalid-email-address': 'Endereço de e-mail inválido',
|
||||||
|
'error-invalid-file-height': 'Altura de arquivo inválida',
|
||||||
|
'error-invalid-file-type': 'Tipo de arquivo inválido',
|
||||||
|
'error-invalid-file-width': 'Altura de arquivo inválida',
|
||||||
|
'error-invalid-from-address': 'Você informou um e-mail DE inválido.',
|
||||||
|
'error-invalid-integration': 'Integração inválida',
|
||||||
|
'error-invalid-message': 'Mensagem inválida',
|
||||||
|
'error-invalid-method': 'Método inválido',
|
||||||
|
'error-invalid-name': 'Nome inválido',
|
||||||
|
'error-invalid-password': 'Senha inválida',
|
||||||
|
'error-invalid-redirectUri': 'redirectUri inválido',
|
||||||
|
'error-invalid-role': 'Papel inválido',
|
||||||
|
'error-invalid-room': 'Sala inválida',
|
||||||
|
'error-invalid-room-name': '{{room_name}} não é um nome de sala válido',
|
||||||
|
'error-invalid-room-type': '{{type}} não é um tipo de sala válido.',
|
||||||
|
'error-invalid-settings': 'Configurações fornecidas inválidas',
|
||||||
|
'error-invalid-subscription': 'Assinatura inválida',
|
||||||
|
'error-invalid-token': 'Token inválido',
|
||||||
|
'error-invalid-triggerWords': 'triggerWords inválidos',
|
||||||
|
'error-invalid-urls': 'URLs inválidas',
|
||||||
|
'error-invalid-user': 'Usuário inválido',
|
||||||
|
'error-invalid-username': 'Nome de usuário Inválido',
|
||||||
|
'error-invalid-webhook-response': 'O URL do webhook respondeu com um status diferente de 200',
|
||||||
|
'error-message-deleting-blocked': 'Exclusã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-missing-unsubscribe-link': 'Você deve fornecer o link para desinscrever-se: [unsubscribe].',
|
||||||
|
'error-no-tokens-for-this-user': 'Não existem tokens para este usuário',
|
||||||
|
'error-not-allowed': 'Não permitido',
|
||||||
|
'error-not-authorized': 'Não autorizado',
|
||||||
|
'error-password-policy-not-met': 'A senha não atende a política do servidor',
|
||||||
|
'error-password-policy-not-met-maxLength': 'A senha não está de acordo com a política de comprimento máximo do servidor (senha muito longa)',
|
||||||
|
'error-password-policy-not-met-minLength': 'A senha não está de acordo com a política de comprimento mínimo do servidor (senha muito curta)',
|
||||||
|
'error-password-policy-not-met-oneLowercase': 'A senha não está de acordo com a política do servidor de pelo menos um caractere minúsculo.',
|
||||||
|
'error-password-policy-not-met-oneNumber': 'A senha não está de acordo com a política do servidor, de pelo menos um caractere numérico.',
|
||||||
|
'error-password-policy-not-met-oneSpecial': 'A senha não está de acordo com a política do servidor, de pelo menos um caractere especial.',
|
||||||
|
'error-password-policy-not-met-oneUppercase': 'A senha não está de acordo com a política do servidor, de pelo menos um caractere maiúsculo.',
|
||||||
|
'error-password-policy-not-met-repeatingCharacters': 'A senha não está de acordo com a política do servidor, relativamente aos caracteres proibidos repetidos (existem vários caracteres proibidos próximos uns dos outros)',
|
||||||
|
'error-push-disabled': 'Notificações push desativadas',
|
||||||
|
'error-remove-last-owner': 'Este é o último proprietário. Por favor, defina um novo proprietário antes de remover este.',
|
||||||
|
'error-role-in-use': 'Não é possível remover o papel pois ele está em uso',
|
||||||
|
'error-role-name-required': 'Nome do papel é obrigatório',
|
||||||
|
'error-the-field-is-required': 'O campo {{field}} é obrigatório.',
|
||||||
|
'error-too-many-requests': 'Erro, muitas solicitações. Por favor, diminua a velocidade. Você deve esperar {{seconds}} segundos antes de tentar novamente.',
|
||||||
|
'error-user-has-no-roles': 'O usuário não possui permissões',
|
||||||
|
'error-user-is-not-activated': 'O usuário não está ativo',
|
||||||
|
'error-user-limit-exceeded': 'O número de usuários que você está tentando convidar para #channel_name excede o limite determindado pelo administrador',
|
||||||
|
'error-user-not-in-room': 'O usuário não está nesta sala',
|
||||||
|
'error-user-registration-disabled': 'O registro do usuário está desativado',
|
||||||
|
'error-user-registration-secret': 'O registro de usuário é permitido somente via URL secreta',
|
||||||
|
'error-you-are-last-owner': 'Você é o último proprietário da sala. Por favor defina um novo proprietário antes de sair.',
|
||||||
|
Actions: 'Ações',
|
||||||
|
activity: 'atividade',
|
||||||
|
Activity: 'Atividade',
|
||||||
|
Add_Reaction: 'Reagir',
|
||||||
|
Add_Server: 'Adicionar servidor',
|
||||||
|
Add_user: 'Adicionar usuário',
|
||||||
|
Alert: 'Alerta',
|
||||||
|
alert: 'alerta',
|
||||||
|
alerts: 'alertas',
|
||||||
|
All_users_in_the_channel_can_write_new_messages: 'Todos usuários no canal podem enviar mensagens novas',
|
||||||
|
All: 'Todos',
|
||||||
|
Allow_Reactions: 'Permitir reagir',
|
||||||
|
Alphabetical: 'Alfabético',
|
||||||
|
and_more: 'e mais',
|
||||||
|
and: 'a',
|
||||||
|
announcement: 'anúncio',
|
||||||
|
Announcement: 'Anúncio',
|
||||||
|
ARCHIVE: 'ARQUIVAR',
|
||||||
|
archive: 'arquivar',
|
||||||
|
are_typing: 'estão digitando',
|
||||||
|
Are_you_sure_question_mark: 'Você tem certeza?',
|
||||||
|
Are_you_sure_you_want_to_leave_the_room: 'Tem certeza de que deseja sair da sala {{room}}?',
|
||||||
|
Authenticating: 'Autenticando',
|
||||||
|
Avatar_changed_successfully: 'Avatar alterado com sucesso!',
|
||||||
|
Avatar_Url: 'Avatar URL',
|
||||||
|
Away: 'Ausente',
|
||||||
|
Block_user: 'Bloquear usuário',
|
||||||
|
Broadcast_channel_Description: 'Somente usuários autorizados podem escrever novas mensagens, mas os outros usuários poderão responder',
|
||||||
|
Broadcast_Channel: 'Canal de Transmissão',
|
||||||
|
Busy: 'Ocupado',
|
||||||
|
By_proceeding_you_are_agreeing: 'Ao prosseguir você está aceitando',
|
||||||
|
Cancel_editing: 'Cancelar edição',
|
||||||
|
Cancel_recording: 'Cancelar gravação',
|
||||||
|
Cancel: 'Cancelar',
|
||||||
|
changing_avatar: 'trocando avatar',
|
||||||
|
creating_channel: 'criando canal',
|
||||||
|
Channel_Name: 'Nome do Canal',
|
||||||
|
Channels: 'Canais',
|
||||||
|
Chats: 'Conversas',
|
||||||
|
Close: 'Fechar',
|
||||||
|
Close_emoji_selector: 'Fechar seletor de emojis',
|
||||||
|
Choose: 'Escolher',
|
||||||
|
Choose_from_library: 'Escolha da biblioteca',
|
||||||
|
Code: 'Código',
|
||||||
|
Colaborative: 'Colaborativo',
|
||||||
|
Connect: 'Conectar',
|
||||||
|
Connect_to_a_server: 'Conectar a um servidor',
|
||||||
|
Connected_to: 'Conectado a',
|
||||||
|
Connecting: 'Conectando',
|
||||||
|
Copied_to_clipboard: 'Copiado para a área de transferência!',
|
||||||
|
Copy_Message: 'Copiar Mensagem',
|
||||||
|
Copy_Permalink: 'Copiar Link-Permanente',
|
||||||
|
Create_account: 'Criar conta',
|
||||||
|
Create_Channel: 'Criar Canal',
|
||||||
|
Create_a_new_workspace: 'Criar nova área de trabalho',
|
||||||
|
Create: 'Criar',
|
||||||
|
Delete_Room_Warning: 'A exclusão de uma sala irá apagar todas as mensagens postadas na sala. Isso não pode ser desfeito.',
|
||||||
|
delete: 'excluir',
|
||||||
|
Delete: 'Excluir',
|
||||||
|
DELETE: 'EXCLUIR',
|
||||||
|
description: 'descrição',
|
||||||
|
Description: 'Descrição',
|
||||||
|
Disable_notifications: 'Desabilitar notificações',
|
||||||
|
Direct_Messages: 'Mensagens Diretas',
|
||||||
|
Do_you_really_want_to_key_this_room_question_mark: 'Você quer realmente {{key}} esta sala?',
|
||||||
|
edit: 'editar',
|
||||||
|
erasing_room: 'apagando sala',
|
||||||
|
Edit: 'Editar',
|
||||||
|
Email_or_password_field_is_empty: 'Email ou senha estão vazios',
|
||||||
|
Email: 'Email',
|
||||||
|
Enable_notifications: 'Habilitar notificações',
|
||||||
|
Everyone_can_access_this_channel: 'Todos podem acessar este canal',
|
||||||
|
Error_uploading: 'Erro subindo',
|
||||||
|
Favorites: 'Favoritos',
|
||||||
|
Files: 'Arquivos',
|
||||||
|
Finish_recording: 'Encerrar gravação',
|
||||||
|
For_your_security_you_must_enter_your_current_password_to_continue: 'Para sua segurança, você precisa digitar sua senha',
|
||||||
|
Forgot_my_password: 'Esqueci minha senha',
|
||||||
|
Forgot_password_If_this_email_is_registered: 'Se este e-mail estiver cadastrado, enviaremos instruções sobre como redefinir sua senha. Se você não receber um e-mail em breve, volte e tente novamente.',
|
||||||
|
Forgot_password: 'Esqueci minha senha',
|
||||||
|
Forgot_Password: 'Esqueci minha senha',
|
||||||
|
Group_by_favorites: 'Grupos favoritos',
|
||||||
|
Group_by_type: 'Grupos por tipo',
|
||||||
|
Has_joined_the_channel: 'Entrou no canal',
|
||||||
|
Has_left_the_channel: 'Saiu da conversa',
|
||||||
|
I_have_an_account: 'Eu tenho uma conta',
|
||||||
|
Invisible: 'Invisível',
|
||||||
|
Invite: 'Convidar',
|
||||||
|
is_typing: 'está digitando',
|
||||||
|
Join_the_community: 'Junte-se à comunidade',
|
||||||
|
Join: 'Entrar',
|
||||||
|
Just_invited_people_can_access_this_channel: 'Apenas as pessoas convidadas podem acessar este canal',
|
||||||
|
Language: 'Idioma',
|
||||||
|
last_message: 'última mensagem',
|
||||||
|
Leave_channel: 'Sair do canal',
|
||||||
|
leaving_room: 'saindo do canal',
|
||||||
|
leave: 'sair',
|
||||||
|
Livechat: 'Livechat',
|
||||||
|
Login: 'Entrar',
|
||||||
|
Logout: 'Sair',
|
||||||
|
Members: 'Membros',
|
||||||
|
Mentioned_Messages: 'Mensagens mencionadas',
|
||||||
|
mentioned: 'mencionado',
|
||||||
|
Mentions: 'Menções',
|
||||||
|
Message_accessibility: 'Mensagem de {{user}} às {{time}}: {{message}}',
|
||||||
|
Message_actions: 'Ações',
|
||||||
|
Message_pinned: 'Fixou uma mensagem',
|
||||||
|
Message_removed: 'Mensagem removida',
|
||||||
|
Messages: 'Mensagens',
|
||||||
|
Microphone_Permission_Message: 'Rocket Chat precisa de acesso ao seu microfone para enviar mensagens de áudio.',
|
||||||
|
Microphone_Permission: 'Acesso ao Microfone',
|
||||||
|
Mute: 'Mudo',
|
||||||
|
muted: 'mudo',
|
||||||
|
N_online_members: '{{n}} membros online',
|
||||||
|
N_people_reacted: '{{n}} pessoas reagiram',
|
||||||
|
N_users: '{{n}} usuários',
|
||||||
|
name: 'nome',
|
||||||
|
Name: 'Nome',
|
||||||
|
New_in_RocketChat_question_mark: 'Novo no Rocket.Chat?',
|
||||||
|
New_Message: 'Nova Mensagem',
|
||||||
|
New_Password: 'Nova Senha',
|
||||||
|
Next: 'Próximo',
|
||||||
|
No_files: 'Não há arquivos',
|
||||||
|
No_mentioned_messages: 'Não há menções',
|
||||||
|
No_pinned_messages: 'Não há mensagens fixadas',
|
||||||
|
No_snippeted_messages: 'Não há trechos de mensagens',
|
||||||
|
No_starred_messages: 'Não há mensagens favoritas',
|
||||||
|
No_announcement_provided: 'Sem anúncio.',
|
||||||
|
No_description_provided: 'Sem descrição.',
|
||||||
|
No_topic_provided: 'Sem tópico.',
|
||||||
|
No_Message: 'Não há mensagens',
|
||||||
|
No_Reactions: 'Sem reações',
|
||||||
|
Nothing_to_save: 'Nada para salvar!',
|
||||||
|
Notify_active_in_this_room: 'Notificar usuários ativos nesta sala',
|
||||||
|
Notify_all_in_this_room: 'Notificar todos nesta sala',
|
||||||
|
Offline: 'Offline',
|
||||||
|
Oops: 'Ops!',
|
||||||
|
Online: 'Online',
|
||||||
|
Only_authorized_users_can_write_new_messages: 'Somente usuários autorizados podem escrever novas mensagens',
|
||||||
|
Open_emoji_selector: 'Abrir seletor de emoji',
|
||||||
|
Open_Source_Communication: 'Comunicação Open Source',
|
||||||
|
Or_continue_using_social_accounts: 'Ou continue usando redes sociais',
|
||||||
|
Password: 'Senha',
|
||||||
|
Permalink_copied_to_clipboard: 'Link-permanente copiado para a área de transferência!',
|
||||||
|
Pin: 'Fixar',
|
||||||
|
Pinned_Messages: 'Mensagens Fixadas',
|
||||||
|
pinned: 'fixada',
|
||||||
|
Pinned: 'Mensagens Fixadas',
|
||||||
|
Please_enter_your_password: 'Por favor, digite sua senha',
|
||||||
|
Preferences_saved: 'Preferências salvas!',
|
||||||
|
Privacy_Policy: ' Política de Privacidade',
|
||||||
|
Private_Channel: 'Canal Privado',
|
||||||
|
Private_Groups: 'Grupo Privado',
|
||||||
|
Private: 'Privado',
|
||||||
|
Profile_saved_successfully: 'Perfil salvo com sucesso!',
|
||||||
|
Profile: 'Perfil',
|
||||||
|
Public_Channel: 'Canal Público',
|
||||||
|
Public: 'Público',
|
||||||
|
Quote: 'Citar',
|
||||||
|
Reactions_are_disabled: 'Reagir está desabilitado',
|
||||||
|
Reactions_are_enabled: 'Reagir está habilitado',
|
||||||
|
Reactions: 'Reações',
|
||||||
|
Read_Only_Channel: 'Canal Somente Leitura',
|
||||||
|
Read_Only: 'Somente Leitura',
|
||||||
|
Register: 'Registrar',
|
||||||
|
Repeat_Password: 'Repetir Senha',
|
||||||
|
Reply: 'Responder',
|
||||||
|
Resend: 'Reenviar',
|
||||||
|
Reset_password: 'Resetar senha',
|
||||||
|
RESET: 'RESETAR',
|
||||||
|
Roles: 'Papéis',
|
||||||
|
Room_actions: 'Ações',
|
||||||
|
Room_changed_announcement: 'O anúncio da sala foi alterado para: {{announcement}} por {{userBy}}',
|
||||||
|
Room_changed_description: 'A descrição da sala foi alterada para: {{description}} por {{userBy}}',
|
||||||
|
Room_changed_privacy: 'Tipo da sala mudou para: {{type}} por {{userBy}}',
|
||||||
|
Room_changed_topic: 'Tópico da sala mudou para: {{topic}} por {{userBy}}',
|
||||||
|
Room_Files: 'Arquivos',
|
||||||
|
Room_Info_Edit: 'Editar',
|
||||||
|
Room_Info: 'Informações da Sala',
|
||||||
|
Room_Members: 'Membros',
|
||||||
|
Room_name_changed: 'Nome da sala alterado para: {{name}} por {{userBy}}',
|
||||||
|
SAVE: 'SALVAR',
|
||||||
|
Save_Changes: 'Salvar Alterações',
|
||||||
|
Save: 'Salvar',
|
||||||
|
saving_preferences: 'salvando preferências',
|
||||||
|
saving_profile: 'salvando perfil',
|
||||||
|
saving_settings: 'salvando configurações',
|
||||||
|
Search_Messages: 'Buscar Mensagens',
|
||||||
|
Search: 'Buscar',
|
||||||
|
Select_Avatar: 'Selecionar Avatar',
|
||||||
|
Select_Users: 'Selecionar Usuários',
|
||||||
|
Send: 'Enviar',
|
||||||
|
Send_audio_message: 'Enviar mensagem de áudio',
|
||||||
|
Send_message: 'Enviar mensagem',
|
||||||
|
Server: 'Servidor',
|
||||||
|
Settings: 'Configurações',
|
||||||
|
Settings_succesfully_changed: 'Configurações salvas com sucesso!',
|
||||||
|
Share_Message: 'Compartilhar Mensagem',
|
||||||
|
Share: 'Compartilhar',
|
||||||
|
Sign_in_your_server: 'Entrar no seu servidor',
|
||||||
|
Sign_Up: 'Registrar',
|
||||||
|
Snippet_Messages: 'Trecho de Mensagens',
|
||||||
|
snippeted: 'trecho de mensagem',
|
||||||
|
Snippets: 'Trecho de mensagem',
|
||||||
|
Some_field_is_invalid_or_empty: 'Algum campo está inválido ou vazio',
|
||||||
|
Sorting_by: 'Ordenando por {{key}}',
|
||||||
|
Star_room: 'Favoritar sala',
|
||||||
|
Star: 'Favorito',
|
||||||
|
Starred_Messages: 'Mensagens Favoritas',
|
||||||
|
starred: 'favoritou',
|
||||||
|
Starred: 'Mensagens Favoritas',
|
||||||
|
Start_of_conversation: 'Início da conversa',
|
||||||
|
Submit: 'Enviar',
|
||||||
|
Take_a_photo: 'Tirar uma foto',
|
||||||
|
Terms_of_Service: ' Termos de Serviço ',
|
||||||
|
The_URL_is_invalid: 'A URL fornecida é inválida ou não acessível. Por favor tente novamente, mas com uma url diferente.',
|
||||||
|
There_was_an_error_while_action: 'Acontece um erro {{action}}!',
|
||||||
|
This_room_is_blocked: 'Este quarto está bloqueado',
|
||||||
|
This_room_is_read_only: 'Este quarto é apenas de leitura',
|
||||||
|
Timezone: 'Fuso horário',
|
||||||
|
topic: 'tópico',
|
||||||
|
Topic: 'Tópico',
|
||||||
|
Try_again: 'Tentar novamente',
|
||||||
|
Type_the_channel_name_here: 'Digite o nome do canal',
|
||||||
|
unarchive: 'desarquivar',
|
||||||
|
UNARCHIVE: 'DESARQUIVAR',
|
||||||
|
Unblock_user: 'Desbloquear usuário',
|
||||||
|
Unmute: 'Permitir que o usuário fale',
|
||||||
|
unmuted: 'permitiu que o usuário fale',
|
||||||
|
Unpin: 'Desafixar Mensagem',
|
||||||
|
unread_messages: 'mensagens não lidas',
|
||||||
|
Unread: 'Não lidas',
|
||||||
|
Unread_on_top: 'Não lidas no topo',
|
||||||
|
Unstar: 'Remover favorito',
|
||||||
|
Uploading: 'Subindo arquivo',
|
||||||
|
User_added_by: 'Usuário {{userAdded}} adicionado por {{userBy}}',
|
||||||
|
User_has_been_key: 'Usuário foi {{key}}!',
|
||||||
|
User_is_no_longer_role_by_: '{{user}} não pertence mais à {{role}} por {{userBy}}',
|
||||||
|
User_muted_by: 'User {{userMuted}} muted por {{userBy}}',
|
||||||
|
User_removed_by: 'Usuário {{userRemoved}} removido por {{userBy}}',
|
||||||
|
User_unmuted_by: '{{userBy}} permitiu que {{userUnmuted}} fale na sala',
|
||||||
|
User_was_set_role_by_: '{{user}} foi definido como {{role}} por {{userBy}}',
|
||||||
|
Username_is_empty: 'Usuário está vazio',
|
||||||
|
Username: 'Usuário',
|
||||||
|
Video_call: 'Chamada de vídeo',
|
||||||
|
Voice_call: 'Chamada de voz',
|
||||||
|
Welcome: 'Bem vindo',
|
||||||
|
Welcome_title_pt_1: 'Prepare-se para decolar com',
|
||||||
|
Welcome_title_pt_2: 'a melhor plataforma de chat',
|
||||||
|
Welcome_to_RocketChat: 'Bem vindo ao Rocket.Chat',
|
||||||
|
Yes_action_it: 'Sim, {{action}}!',
|
||||||
|
Yesterday: 'Ontem',
|
||||||
|
You_are_in_preview_mode: 'Está é uma prévia do canal',
|
||||||
|
You_are_offline: 'Você está offline',
|
||||||
|
You_can_search_using_RegExp_eg: 'Você pode pesquisar usando expressões regulares, por exemplo `/^text$/i`',
|
||||||
|
You_colon: 'Você: ',
|
||||||
|
you_were_mentioned: 'você foi mencionado',
|
||||||
|
You_will_not_be_able_to_recover_this_message: 'Você não será capaz de recuperar essa mensagem!',
|
||||||
|
you: 'você'
|
||||||
|
};
|
|
@ -8,6 +8,7 @@ import { setAllPreferences } from '../actions/sortPreferences';
|
||||||
import { APP } from '../actions/actionsTypes';
|
import { APP } from '../actions/actionsTypes';
|
||||||
import RocketChat from '../lib/rocketchat';
|
import RocketChat from '../lib/rocketchat';
|
||||||
import log from '../utils/log';
|
import log from '../utils/log';
|
||||||
|
import I18n from '../i18n';
|
||||||
|
|
||||||
const restore = function* restore() {
|
const restore = function* restore() {
|
||||||
try {
|
try {
|
||||||
|
@ -22,9 +23,13 @@ const restore = function* restore() {
|
||||||
if (currentServer) {
|
if (currentServer) {
|
||||||
yield put(selectServerRequest(currentServer));
|
yield put(selectServerRequest(currentServer));
|
||||||
|
|
||||||
const login = yield call([AsyncStorage, 'getItem'], `${ RocketChat.TOKEN_KEY }-${ currentServer }`);
|
const user = yield call([AsyncStorage, 'getItem'], `${ RocketChat.TOKEN_KEY }-${ currentServer }`);
|
||||||
if (login) {
|
if (user) {
|
||||||
yield put(setUser(JSON.parse(login)));
|
const userParsed = JSON.parse(user);
|
||||||
|
if (userParsed.language) {
|
||||||
|
I18n.locale = userParsed.language;
|
||||||
|
}
|
||||||
|
yield put(setUser(userParsed));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,7 @@ export default class RoomMembersView extends LoggedView {
|
||||||
this.setState({ allUsers, members });
|
this.setState({ allUsers, members });
|
||||||
this.props.navigator.setButtons({
|
this.props.navigator.setButtons({
|
||||||
rightButtons: [{
|
rightButtons: [{
|
||||||
title: this.state.allUsers ? 'Online' : 'All',
|
title: this.state.allUsers ? I18n.t('Online') : I18n.t('All'),
|
||||||
id: 'toggleOnline',
|
id: 'toggleOnline',
|
||||||
testID: 'room-members-view-toggle-status'
|
testID: 'room-members-view-toggle-status'
|
||||||
}]
|
}]
|
||||||
|
|
|
@ -38,6 +38,9 @@ export default class SettingsView extends LoggedView {
|
||||||
languages: [{
|
languages: [{
|
||||||
label: 'English',
|
label: 'English',
|
||||||
value: 'en'
|
value: 'en'
|
||||||
|
}, {
|
||||||
|
label: 'Português',
|
||||||
|
value: 'pt-BR'
|
||||||
}, {
|
}, {
|
||||||
label: 'Russian',
|
label: 'Russian',
|
||||||
value: 'ru'
|
value: 'ru'
|
||||||
|
|
Loading…
Reference in New Issue