diff --git a/app/containers/Sidebar.js b/app/containers/Sidebar.js index d079a0b5a..e471ad734 100644 --- a/app/containers/Sidebar.js +++ b/app/containers/Sidebar.js @@ -1,12 +1,9 @@ import React, { Component } from 'react'; 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 FastImage from 'react-native-fast-image'; import Icon from 'react-native-vector-icons/MaterialIcons'; -import database from '../lib/realm'; -import { selectServerRequest } from '../actions/server'; import { appStart } from '../actions'; import { logout } from '../actions/login'; import Avatar from '../containers/Avatar'; @@ -44,11 +41,6 @@ const styles = StyleSheet.create({ borderColor: '#ddd', marginVertical: 4 }, - serverImage: { - width: 24, - height: 24, - borderRadius: 4 - }, header: { paddingVertical: 16, flexDirection: 'row', @@ -90,13 +82,11 @@ const keyExtractor = item => item.id; user: { id: state.login.user && state.login.user.id, language: state.login.user && state.login.user.language, - server: state.login.user && state.login.user.server, status: state.login.user && state.login.user.status, username: state.login.user && state.login.user.username }, baseUrl: state.settings.Site_Url || state.server ? state.server.server : '' }), dispatch => ({ - selectServerRequest: server => dispatch(selectServerRequest(server)), logout: () => dispatch(logout()), appStart: () => dispatch(appStart('outside')) })) @@ -105,7 +95,6 @@ export default class Sidebar extends Component { baseUrl: PropTypes.string, navigator: PropTypes.object, server: PropTypes.string.isRequired, - selectServerRequest: PropTypes.func.isRequired, user: PropTypes.object, logout: PropTypes.func.isRequired, appStart: PropTypes.func @@ -114,15 +103,12 @@ export default class Sidebar extends Component { constructor(props) { super(props); this.state = { - servers: [], - showServers: false + showStatus: false }; } componentDidMount() { - this.setState(this.getState()); this.setStatus(); - database.databases.serversDB.addListener('change', this.updateState); } 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 = () => { setTimeout(() => { 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 = () => { this.props.navigator.toggleDrawer({ side: 'left', @@ -175,9 +145,9 @@ export default class Sidebar extends Component { }); } - toggleServers = () => { + toggleStatus = () => { LayoutAnimation.easeInEaseOut(); - this.setState({ showServers: !this.state.showServers }); + this.setState({ showStatus: !this.state.showStatus }); } sidebarNavigate = (screen, title) => { @@ -215,7 +185,7 @@ export default class Sidebar extends Component { selected: this.props.user.status === item.id, onPress: () => { this.closeDrawer(); - this.toggleServers(); + this.toggleStatus(); if (this.props.user.status !== item.id) { try { RocketChat.setUserPresenceDefaultStatus(item.id); @@ -227,41 +197,6 @@ export default class Sidebar extends Component { }) ) - renderServer = ({ item }) => ( - this.renderItem({ - text: item.id, - left: , - 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 = () => ( [ this.renderItem({ @@ -292,44 +227,14 @@ export default class Sidebar extends Component { ] ) - renderServers = () => ( - [ - , - this.renderSeparator('separator-status'), - , - this.renderSeparator('separator-add-server'), - this.renderItem({ - text: I18n.t('Add_Server'), - left: , - 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' - }) - ] + renderStatus = () => ( + ) render() { @@ -341,10 +246,10 @@ export default class Sidebar extends Component { this.toggleServers()} + onPress={() => this.toggleStatus()} underlayColor='rgba(255, 255, 255, 0.5)' activeOpacity={0.3} - testID='sidebar-toggle-server' + testID='sidebar-toggle-status' > {server} @@ -370,8 +275,8 @@ export default class Sidebar extends Component { {this.renderSeparator('separator-header')} - {!this.state.showServers ? this.renderNavigation() : null} - {this.state.showServers ? this.renderServers() : null} + {!this.state.showStatus ? this.renderNavigation() : null} + {this.state.showStatus ? this.renderStatus() : null} {DeviceInfo.getReadableVersion()} diff --git a/app/i18n/index.js b/app/i18n/index.js index 30ce0ffc5..aeaa983df 100644 --- a/app/i18n/index.js +++ b/app/i18n/index.js @@ -1,11 +1,12 @@ import I18n from 'react-native-i18n'; import en from './locales/en'; import ru from './locales/ru'; +import pt from './locales/pt-BR'; I18n.fallbacks = true; I18n.translations = { - en, ru + en, ru, pt }; export default I18n; diff --git a/app/i18n/locales/pt-BR.js b/app/i18n/locales/pt-BR.js new file mode 100644 index 000000000..f0e4ef42b --- /dev/null +++ b/app/i18n/locales/pt-BR.js @@ -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ê' +}; diff --git a/app/sagas/init.js b/app/sagas/init.js index 8ed38b4f0..ccdddb332 100644 --- a/app/sagas/init.js +++ b/app/sagas/init.js @@ -8,6 +8,7 @@ import { setAllPreferences } from '../actions/sortPreferences'; import { APP } from '../actions/actionsTypes'; import RocketChat from '../lib/rocketchat'; import log from '../utils/log'; +import I18n from '../i18n'; const restore = function* restore() { try { @@ -22,9 +23,13 @@ const restore = function* restore() { if (currentServer) { yield put(selectServerRequest(currentServer)); - const login = yield call([AsyncStorage, 'getItem'], `${ RocketChat.TOKEN_KEY }-${ currentServer }`); - if (login) { - yield put(setUser(JSON.parse(login))); + const user = yield call([AsyncStorage, 'getItem'], `${ RocketChat.TOKEN_KEY }-${ currentServer }`); + if (user) { + const userParsed = JSON.parse(user); + if (userParsed.language) { + I18n.locale = userParsed.language; + } + yield put(setUser(userParsed)); } } diff --git a/app/views/RoomMembersView/index.js b/app/views/RoomMembersView/index.js index 2b6f4e6ba..84c893fbc 100644 --- a/app/views/RoomMembersView/index.js +++ b/app/views/RoomMembersView/index.js @@ -73,7 +73,7 @@ export default class RoomMembersView extends LoggedView { this.setState({ allUsers, members }); this.props.navigator.setButtons({ rightButtons: [{ - title: this.state.allUsers ? 'Online' : 'All', + title: this.state.allUsers ? I18n.t('Online') : I18n.t('All'), id: 'toggleOnline', testID: 'room-members-view-toggle-status' }] diff --git a/app/views/SettingsView/index.js b/app/views/SettingsView/index.js index 2de1393d0..016e78952 100644 --- a/app/views/SettingsView/index.js +++ b/app/views/SettingsView/index.js @@ -38,6 +38,9 @@ export default class SettingsView extends LoggedView { languages: [{ label: 'English', value: 'en' + }, { + label: 'Português', + value: 'pt-BR' }, { label: 'Russian', value: 'ru'