From 6f4d817b141c76fb0d32031cb48b3eeaf47131a0 Mon Sep 17 00:00:00 2001 From: Artur Date: Mon, 6 Oct 2014 23:07:03 -0300 Subject: [PATCH 01/33] Update pt-br.ini General revision of the pt-br translation, correcting.... --- rainloop/v/0.0.0/langs/pt-br.ini | 323 ++++++++++++++++--------------- 1 file changed, 164 insertions(+), 159 deletions(-) diff --git a/rainloop/v/0.0.0/langs/pt-br.ini b/rainloop/v/0.0.0/langs/pt-br.ini index d41c10c63..71494e82b 100644 --- a/rainloop/v/0.0.0/langs/pt-br.ini +++ b/rainloop/v/0.0.0/langs/pt-br.ini @@ -1,14 +1,14 @@ [LOGIN] -LABEL_EMAIL = "Email" +LABEL_EMAIL = "E-mail" LABEL_LOGIN = "Usuário" LABEL_PASSWORD = "Senha" LABEL_SIGN_ME = "Lembre-me" LABEL_VERIFICATION_CODE = "Código de verificação" LABEL_DONT_ASK_VERIFICATION_CODE = "Não perguntar o código por 2 semanas" -BUTTON_SIGN_IN = "Entre" -TITLE_SIGN_IN_GOOGLE = "Entre com a conta do Google" -TITLE_SIGN_IN_FACEBOOK = "Entre com a conta do Facebook" -TITLE_SIGN_IN_TWITTER = "Entre com a conta do Twitter" +BUTTON_SIGN_IN = "Entrar" +TITLE_SIGN_IN_GOOGLE = "Entrar com a conta do Google" +TITLE_SIGN_IN_FACEBOOK = "Entrar com a conta do Facebook" +TITLE_SIGN_IN_TWITTER = "Entrar com a conta do Twitter" [TOP_TOOLBAR] BUTTON_ADD_ACCOUNT = "Adicionar Conta" @@ -23,12 +23,12 @@ LABEL_ADV_FROM = "De" LABEL_ADV_TO = "Para" LABEL_ADV_SUBJECT = "Assunto" LABEL_ADV_TEXT = "Texto" -LABEL_ADV_HAS_ATTACHMENT = "Tem anexo" -LABEL_ADV_HAS_ATTACHMENTS = "Tem anexos" -LABEL_ADV_FLAGGED = "Sinalizado" -LABEL_ADV_UNSEEN = "Não visto" +LABEL_ADV_HAS_ATTACHMENT = "Com anexo" +LABEL_ADV_HAS_ATTACHMENTS = "Com anexos" +LABEL_ADV_FLAGGED = "Sinalizada" +LABEL_ADV_UNSEEN = "Não Lida" LABEL_ADV_DATE = "Data" -LABEL_ADV_DATE_ALL = "Todos" +LABEL_ADV_DATE_ALL = "Qualquer" LABEL_ADV_DATE_3_DAYS = "Até 3 dias atrás" LABEL_ADV_DATE_7_DAYS = "Até 1 semana atrás" LABEL_ADV_DATE_MONTH = "Até 1 mês atrás" @@ -43,18 +43,18 @@ LOADING = "Carregando..." GALLERY_PREV = "Anterior (Seta p/ Esquerda)" GALLERY_NEXT = "Posterior (Seta p/ Direita)" GALLERY_COUNTER = "%curr% de %total%" -IMAGE_ERROR = "Imagem não pode ser carregado." -AJAX_ERROR = "Conteúdo não pode ser carregado." +IMAGE_ERROR = "A imagem não pôde ser carregada." +AJAX_ERROR = "O conteúdo não pôde ser carregado." [FOLDER_LIST] BUTTON_COMPOSE = "Compor" BUTTON_CONTACTS = "Contatos" INBOX_NAME = "Caixa de Entrada" -SENT_NAME = "Enviar" +SENT_NAME = "Enviadas" DRAFTS_NAME = "Rascunhos" SPAM_NAME = "Lixo Eletrônico" TRASH_NAME = "Lixeira" -ARCHIVE_NAME = "Arquivo" +ARCHIVE_NAME = "Arquivadas" [QUOTA] TITLE = "Uso da Cota" @@ -63,58 +63,58 @@ TITLE = "Uso da Cota" BUTTON_RELOAD = "Atualizar Lista de Mensagens" BUTTON_MOVE_TO = "Mover Para" BUTTON_DELETE = "Excluir" -BUTTON_ARCHIVE = "Arquivo" +BUTTON_ARCHIVE = "Arquivar" BUTTON_SPAM = "Lixo Eletrônico" BUTTON_NOT_SPAM = "Não é Lixo Eletrônico" -BUTTON_EMPTY_FOLDER = "Limpar Pasta" +BUTTON_EMPTY_FOLDER = "Esvaziar Pasta" BUTTON_MULTY_FORWARD = "Encaminhar mensagens" BUTTON_DELETE_WITHOUT_MOVE = "Excluir penmanentemente" BUTTON_MORE = "Mais" -MENU_SET_SEEN = "Marcar como lido" -MENU_SET_ALL_SEEN = "Marcar tudo como lido" +MENU_SET_SEEN = "Marcar como lida" +MENU_SET_ALL_SEEN = "Marcar todas como lidas" MENU_UNSET_SEEN = "Marcar como não lida" MENU_SET_FLAG = "Sinalizar" MENU_UNSET_FLAG = "Remover sinalizador" MENU_SELECT_ALL = "Tudo" MENU_SELECT_NONE = "Nenhum" MENU_SELECT_INVERT = "Inverter" -MENU_SELECT_UNSEEN = "Não lido" -MENU_SELECT_SEEN = "Ler" -MENU_SELECT_FLAGGED = "Marcado" -MENU_SELECT_UNFLAGGED = "Desmarcado" +MENU_SELECT_UNSEEN = "Não lidas" +MENU_SELECT_SEEN = "Lidas" +MENU_SELECT_FLAGGED = "Sinalizadas" +MENU_SELECT_UNFLAGGED = "Não Sinalizadas" EMPTY_LIST = "Lista vazia." EMPTY_SEARCH_LIST = "Nenhuma mensagem corresponde a sua pesquisa." SEARCH_RESULT_FOR = "Resultados de pesquisa para \"%SEARCH%\"" LIST_LOADING = "Carregando" EMPTY_SUBJECT_TEXT = "(Sem assunto)" PUT_MESSAGE_HERE = "Coloque a mensagem aqui para vê-la na lista" -TODAY_AT = "Hoje em %TIME%" -YESTERDAY_AT = "Ontem em %TIME%" +TODAY_AT = "Hoje as %TIME%" +YESTERDAY_AT = "Ontem as %TIME%" SEARCH_PLACEHOLDER = "Pesquisar" NEW_MESSAGE_NOTIFICATION = "Você tem %COUNT% novas mensagens!" -QUOTA_SIZE = "Utilização %SIZE% (%PROC%%) de sua %LIMIT%" +QUOTA_SIZE = "Utilizando %SIZE% (%PROC%%) de %LIMIT%" [MESSAGE] BUTTON_EDIT = "Editar" BUTTON_BACK = "Voltar" BUTTON_CLOSE = "Fechar" BUTTON_DELETE = "Excluir" -BUTTON_ARCHIVE = "Arquivo" +BUTTON_ARCHIVE = "Arquivar" BUTTON_SPAM = "Lixo Eletrônico" BUTTON_NOT_SPAM = "Não é Lixo Eletrônico" BUTTON_MOVE_TO = "Mover para" BUTTON_MORE = "Mais" BUTTON_REPLY = "Responder" BUTTON_REPLY_ALL = "Responder a todos" -BUTTON_FORWARD = "Enviar" -BUTTON_FORWARD_AS_ATTACHMENT = "Enviar como anexo" +BUTTON_FORWARD = "Encaminhar" +BUTTON_FORWARD_AS_ATTACHMENT = "Encaminhar como anexo" BUTTON_EDIT_AS_NEW = "Editar como novo" BUTTON_SHOW_IMAGES = "Exibir Imagens" BUTTON_NOTIFY_READ_RECEIPT = "O emissor pediu para ser notificado quando você lesse essa mensagem." BUTTON_IN_NEW_WINDOW = "Ver em janela separada" -MENU_HEADERS = "Mostrar título das mensagens" +MENU_HEADERS = "Mostrar cabeçalho das mensagens" MENU_VIEW_ORIGINAL = "Mostrar original" -MENU_DOWNLOAD_ORIGINAL = "Baixar como .eml arquivo" +MENU_DOWNLOAD_ORIGINAL = "Baixar como arquivo .eml" MENU_FILTER_SIMILAR = "Filtrar mensagens como esta" MENU_PRINT = "Imprimir" EMPTY_SUBJECT_TEXT = "(Sem assunto)" @@ -125,47 +125,47 @@ LABEL_FROM_SHORT = "de" LABEL_TO = "Para" LABEL_TO_SHORT = "para" LABEL_CC = "CC" -LABEL_BCC = "BCC" +LABEL_BCC = "CCO" PRINT_LABEL_FROM = "De" PRINT_LABEL_TO = "Para" PRINT_LABEL_CC = "CC" -PRINT_LABEL_BCC = "BCC" +PRINT_LABEL_BCC = "CCO" PRINT_LABEL_DATE = "Data" PRINT_LABEL_SUBJECT = "Assunto" PRINT_LABEL_ATTACHMENTS = "Anexos" MESSAGE_LOADING = "Carregando" -MESSAGE_VIEW_DESC = "Selecione a lista de mensagens para visuzalizá-la aqui." +MESSAGE_VIEW_DESC = "Selecione uma mensagem para visuzalizá-la aqui." PGP_PASSWORD_INPUT_PLACEHOLDER = "Senha" PGP_SIGNED_MESSAGE_DESC = "Mensagem assinada com OpenPGP (clique para verificar)" PGP_ENCRYPTED_MESSAGE_DESC = "Mensagem criptografada com OpenPGP (clique para descriptografar)" [READ_RECEIPT] -SUBJECT = "Aviso de recepção (informado) - %SUBJECT%" -BODY = "Este é um comprovante de retorno para o e-mail que você enviou para %READ-RECEIPT%. +SUBJECT = "Aviso de recepção (Visualizada) - %SUBJECT%" +BODY = "Comprovante de retorno para o e-mail que você enviou para %READ-RECEIPT%. -Note: This Return Receipt only acknowledges that the message was displayed on the recipient's computer. -There is no guarantee that the recipient has read or understood the message contents." +Nota: Este comprovante de retorno apenas reconhece que a mensagem foi exibida no computador do destinatário. +Não há garantia de que o destinatário tenha lido ou compreendido o conteúdo da mensagem." [SUGGESTIONS] SEARCHING_DESC = "Procurando..." [CONTACTS] LEGEND_CONTACTS = "Contatos" -SEARCH_INPUT_PLACEHOLDER = "Procurar" -BUTTON_ADD_CONTACT = "Adicionar Contatos" +SEARCH_INPUT_PLACEHOLDER = "Pesquisar" +BUTTON_ADD_CONTACT = "Adicionar Contato" BUTTON_CREATE_CONTACT = "Criar" BUTTON_UPDATE_CONTACT = "Atualizar" BUTTON_IMPORT = "Importar (csv, vcf, vCard)" BUTTON_EXPORT_VCARD = "Exportar (vcf, vCard)" BUTTON_EXPORT_CSV = "Exportar (csv)" -ERROR_IMPORT_FILE = "Erro ao importat (formato do arquivo inválido)" +ERROR_IMPORT_FILE = "Erro ao importar (formato de arquivo inválido)" LIST_LOADING = "Carregando" EMPTY_LIST = "Nenhum contato aqui" EMPTY_SEARCH = "Nenhum contato encontrado" CLEAR_SEARCH = "Limpar pesquisa" -CONTACT_VIEW_DESC = "Selecione o contato na lista para visualizá-lo." -LABEL_DISPLAY_NAME = "Nome público" -LABEL_EMAIL = "Email" +CONTACT_VIEW_DESC = "Selecione um contato na lista para visualizá-lo." +LABEL_DISPLAY_NAME = "Nome de Exibição" +LABEL_EMAIL = "E-mail" LABEL_PHONE = "Telefone" LABEL_WEB = "Web" LABEL_BIRTHDAY = "Aniversário" @@ -173,11 +173,11 @@ LABEL_TAGS = "Tags" LINK_ADD_EMAIL = "Adicionar um endereço e-mail" LINK_ADD_PHONE = "Adicionar um telefone" LINK_BIRTHDAY = "Aniversário" -PLACEHOLDER_ENTER_DISPLAY_NAME = "Digite um nome público" -PLACEHOLDER_ENTER_LAST_NAME = "Digite seu último nome" -PLACEHOLDER_ENTER_FIRST_NAME = "Digite seu primeiro nome" -PLACEHOLDER_ENTER_NICK_NAME = "Digite seu apelido" -LABEL_READ_ONLY = "Ler somente" +PLACEHOLDER_ENTER_DISPLAY_NAME = "Digite o nome de exibição" +PLACEHOLDER_ENTER_LAST_NAME = "Digite o sobrenome" +PLACEHOLDER_ENTER_FIRST_NAME = "Digite o primeiro nome" +PLACEHOLDER_ENTER_NICK_NAME = "Digite o apelido" +LABEL_READ_ONLY = "Somente Ler" LABEL_SHARE = "Compartilhar" ADD_MENU_LABEL = "Adicionar" ADD_MENU_NICKNAME = "Apelido" @@ -189,25 +189,25 @@ ADD_MENU_ADDRESS = "Endereço" ADD_MENU_BIRTHDAY = "Aniversário" ADD_MENU_TAGS = "Tags" BUTTON_SHARE_NONE = "Ninguém" -BUTTON_SHARE_ALL = "Todo mundo" +BUTTON_SHARE_ALL = "Todos" BUTTON_SYNC = "Sincronização (CardDAV)" [COMPOSE] TITLE_FROM = "De" TITLE_TO = "Para" TITLE_CC = "CC" -TITLE_BCC = "BCC" -TITLE_REPLY_TO = "Reenviar para" +TITLE_BCC = "CCO" +TITLE_REPLY_TO = "Responder para" TITLE_SUBJECT = "Assunto" -LINK_SHOW_INPUTS = "Mostrar todos os campos" +LINK_SHOW_INPUTS = "Exibir todos os campos" BUTTON_SEND = "Enviar" BUTTON_SAVE = "Salvar" BUTTON_DELETE = "Excluir" BUTTON_CANCEL = "Cancelar" -SAVED_TIME = "Salvo em %TIME%" -SAVED_ERROR_ON_SEND = "Sua mensagem foi enviada, mas não salva a pasta de itens enviados." +SAVED_TIME = "Salvo as %TIME%" +SAVED_ERROR_ON_SEND = "Sua mensagem foi enviada mas não foi salva na pasta de itens enviados." ATTACH_FILES = "Anexar arquivos" -ATTACH_DROP_FILES_DESC = "Coloque os arquivos aqui" +ATTACH_DROP_FILES_DESC = "Arraste os arquivos aqui" ATTACH_ITEM_CANCEL = "Cancelar" DROPBOX = "Dropbox" GOOGLE_DRIVE = "Google Drive" @@ -216,37 +216,37 @@ FORWARD_MESSAGE_TOP_TITLE = "-------- Mensagem Encaminhada -------" FORWARD_MESSAGE_TOP_FROM = "De" FORWARD_MESSAGE_TOP_TO = "Para" FORWARD_MESSAGE_TOP_CC = "CC" -FORWARD_MESSAGE_TOP_SENT = "Enviar" +FORWARD_MESSAGE_TOP_SENT = "Recebida" FORWARD_MESSAGE_TOP_SUBJECT = "Assunto" EMPTY_TO_ERROR_DESC = "Por favor, especifique pelo menos um destinatário" -ATTACHMENTS_UPLOAD_ERROR_DESC = "Not all attachments have been uploaded yet" -BUTTON_REQUEST_READ_RECEIPT = "Pedir um recibo de leitura" +ATTACHMENTS_UPLOAD_ERROR_DESC = "Alguns anexos ainda não foram completamente enviados" +BUTTON_REQUEST_READ_RECEIPT = "Pedir recibo de leitura" [POPUPS_ASK] BUTTON_YES = "Sim" BUTTON_NO = "Não" DESC_WANT_CLOSE_THIS_WINDOW = "Você tem certeza que deseja fechar esta janela?" -DESC_WANT_DELETE_MESSAGES = "Tem certeza de que deseja excluir essa(s) mensagem(s)?" +DESC_WANT_DELETE_MESSAGES = "Você tem certeza de que deseja excluir essa(s) mensagem(s)?" [POPUPS_LANGUAGES] -TITLE_LANGUAGES = "Escolha a linguagem" +TITLE_LANGUAGES = "Escolha o idioma" [POPUPS_ADD_ACCOUNT] -TITLE_ADD_ACCOUNT = "Adicionar conta?" +TITLE_ADD_ACCOUNT = "Nova conta" BUTTON_ADD_ACCOUNT = "Adicionar" [POPUPS_IDENTITIES] -TITLE_ADD_IDENTITY = "Adicionar identidade?" +TITLE_ADD_IDENTITY = "Adicionar identidade" TITLE_UPDATE_IDENTITY = "Atualizar identidade?" BUTTON_ADD_IDENTITY = "Adicionar" BUTTON_UPDATE_IDENTITY = "Atualizar" LABEL_EMAIL = "E-mail" LABEL_NAME = "Nome" -LABEL_REPLY_TO = "Reenviar para" -LABEL_BCC = "Bcc" +LABEL_REPLY_TO = "Responder para" +LABEL_BCC = "Cco" [POPUPS_CREATE_FOLDER] -TITLE_CREATE_FOLDER = "Criar pasta?" +TITLE_CREATE_FOLDER = "Nova pasta" SELECT_NO_PARENT = "" LABEL_NAME = "Nome da pasta" LABEL_PARENT = "Pasta principal" @@ -261,8 +261,8 @@ BUTTON_CLEAR = "Limpar" BUTTON_CANCEL = "Cancelar" BUTTON_CLOSE = "Fechar" DANGER_DESC_WARNING = "Atenção!" -DANGER_DESC_HTML_1 = "Esta ação irá resultar na remoção de todos os e-mails da %FOLDER% pasta completamente." -DANGER_DESC_HTML_2 = "Uma vez iniciado, o processo não pode ser interrompido ou cancelado." +DANGER_DESC_HTML_1 = "Esta ação irá resultar na remoção de todos os e-mails da pasta %FOLDER%." +DANGER_DESC_HTML_2 = "Uma vez iniciado, o processo não poderá ser interrompido ou cancelado." TITLE_CLEARING_PROCESS = "Excluindo a pasta..." [POPUPS_IMPORT_OPEN_PGP_KEY] @@ -297,47 +297,45 @@ LABEL_CODE = "Código" BUTTON_TEST = "Testar" [POPUPS_SYSTEM_FOLDERS] -TITLE_SYSTEM_FOLDERS = "Selecione as pastas do sistema" -SELECT_CHOOSE_ONE = "Escolha um" +TITLE_SYSTEM_FOLDERS = "Selecionar pastas do sistema" +SELECT_CHOOSE_ONE = "Selecione uma" SELECT_UNUSE_NAME = "Não usar" -LABEL_SENT = "Enviar" +LABEL_SENT = "Enviadas" LABEL_DRAFTS = "Rascunhos" LABEL_SPAM = "Lixo Eletrônico" LABEL_TRASH = "Lixeira" -LABEL_ARCHIVE = "Arquivo" +LABEL_ARCHIVE = "Arquivadas" BUTTON_CANCEL = "Cancelar" BUTTON_CLOSE = "Fechar" -NOTIFICATION_SENT = "Você não selecionou a pasta de sistema que serão colocadas as mensagens após o envio. +NOTIFICATION_SENT = "Você não selecionou a pasta \"Enviadas\" do sistema que será colocada as mensagens após o envio. Se você não quiser salvar a mensagem enviada, por favor selecione a opção\"Não usar\"." -NOTIFICATION_DRAFTS = "Você não selecionou a pasta de sistema que serão colocadas as mensagens salvas ao autor. -Se você não quiser salvar a mensagem enviada, por favor selecione a opção\"Não usar\"." +NOTIFICATION_DRAFTS = "Você não selecionou a pasta \"Rascunhos\" do sistema que será colocada as mensagens salvas durante a composição." -NOTIFICATION_SPAM = "Você não selecionou a pasta de sistema que será guardado o lixo eletrônico. -Se você não quiser salvar a mensagem enviada, por favor selecione a opção\"Não usar\"." +NOTIFICATION_SPAM = "Você não selecionou a pasta \"Lixo Eletrônico\" do sistema que será colocada as mensagens spams. +Se você deseja remover a mensagem permanentemente, por favor selecione a opção\"Não usar\"." -NOTIFICATION_TRASH = "Você não selecionou a pasta de sistema que serão colocadas as mensagens excluídas. -Se você não quiser salvar a mensagem enviada, por favor selecione a opção\"Não usar\"." +NOTIFICATION_TRASH = "Você não selecionou a pasta do sistema que serão colocadas as mensagens excluídas. +Se você deseja remover a mensagem permanentemente, por favor selecione a opção\"Não usar\"." -NOTIFICATION_ARCHIVE = "Você não selecionou a pasta de sistema que serão colocadas as mensagens arquivadas. -Se você não quiser salvar a mensagem enviada, por favor selecione a opção\"Não usar\"." +NOTIFICATION_ARCHIVE = "Você não selecionou a pasta \"Arquivadas\" do sistema que serão colocadas as mensagens arquivadas." [TITLES] LOADING = "Carregando" -LOGIN = "Usuário" +LOGIN = "Login" MAILBOX = "Caixa de Correio" SETTINGS = "Configurações" -COMPOSE = "Autor" +COMPOSE = "Compor" [UPLOAD] ERROR_FILE_IS_TOO_BIG = "O arquivo é muito grande" -ERROR_FILE_PARTIALLY_UPLOADED = "O arquivo estava parcialmente carregado devido a um erro desconhecido" +ERROR_FILE_PARTIALLY_UPLOADED = "O arquivo foi apenas parcialmente enviado devido a um erro desconhecido" ERROR_NO_FILE_UPLOADED = "Arquivo não enviado" ERROR_MISSING_TEMP_FOLDER = "O arquivo temporário está faltando" -ERROR_ON_SAVING_FILE = "Fazer upload de arquivo desconhecido" +ERROR_ON_SAVING_FILE = "Ocorreu um erro de envio de arquivo desconhecido" ERROR_FILE_TYPE = "Tipo de arquivo inválido" -ERROR_UNKNOWN = "Ocorreu um erro de upload de arquivo desconhecido" +ERROR_UNKNOWN = "Ocorreu um erro de envio de arquivo desconhecido" [EDITOR] TEXT_SWITCHER_PLAINT_TEXT = "Texto simples" @@ -352,6 +350,7 @@ LABEL_FOLDERS_NAME = "Pastas" LABEL_ACCOUNTS_NAME = "Contas" LABEL_IDENTITY_NAME = "Identidade" LABEL_IDENTITIES_NAME = "Identidades" +LABEL_FILTERS_NAME = "Filtros" LABEL_SECURITY_NAME = "Segurança" LABEL_SOCIAL_NAME = "Social" LABEL_THEMES_NAME = "Temas" @@ -359,12 +358,18 @@ LABEL_CHANGE_PASSWORD_NAME = "Senha" LABEL_OPEN_PGP_NAME = "OpenPGP" BUTTON_BACK = "Voltar" +[SETTINGS_FILTERS] +LEGEND_FILTERS = "Filtros" +BUTTON_ADD_FILTER = "Adicionar Filtro" +BUTTON_DELETE_FILTER = "Excluir Filtro" +BUTTON_ADD_CONDITION = "Adicionar Condição" + [SETTINGS_IDENTITY] LEGEND_IDENTITY = "Identidade" LABEL_DISPLAY_NAME = "Nome" -LABEL_REPLY_TO = "Reenviar para" +LABEL_REPLY_TO = "Responder para" LABEL_SIGNATURE = "Assinatura" -LABEL_ADD_SIGNATURE_TO_ALL = "Adicionar a sua assinatura a todas as mensagens de saída" +LABEL_ADD_SIGNATURE_TO_ALL = "Adicionar sua assinatura em todas as mensagens de saída" [SETTINGS_SECURITY] LEGEND_TWO_FACTOR_AUTH = "Verificação de duas etapas (Google Authenticator)" @@ -381,33 +386,33 @@ BUTTON_HIDE_SECRET = "Esconder segredo" TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configurado" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Não configurado" TWO_FACTOR_SECRET_DESC = "Importe este código no seu cliente Google Authenticator (ou outro cliente TOTP) usando o QR code abaixo ou informando o código manualmente." -TWO_FACTOR_BACKUP_CODES_DESC = "Se você não receber códigos via Google Authenticator, você pode usar esses códigos de backup para acessar sua conta. Depois de você usar um código de backup, ele se torna inativo." +TWO_FACTOR_BACKUP_CODES_DESC = "Se você não puder receber os códigos via Google Authenticator, você pode usar esses códigos de backup para acessar sua conta. Depois de você usar um código de backup, ele se expira." [SETTINGS_GENERAL] LEGEND_GENERAL = "Geral" -LABEL_LANGUAGE = "Linguagem" +LABEL_LANGUAGE = "Idioma" LABEL_EDITOR = "Editor de texto padrão" LABEL_EDITOR_HTML_AS_DEFAULT = "Html" -LABEL_EDITOR_PLAIN_AS_DEFAULT = "Simples" +LABEL_EDITOR_PLAIN_AS_DEFAULT = "Texto Simples" LABEL_ANIMATION = "Animação de interface" LABEL_ANIMATION_FULL = "Completa" LABEL_ANIMATION_NORMAL = "Normal" LABEL_ANIMATION_NONE = "Nenhuma" -LABEL_VIEW_OPTIONS = "Ver opções" -LABEL_USE_PREVIEW_PANE = "Use o painel de pré-visualização" +LABEL_VIEW_OPTIONS = "Opções de Visualização" +LABEL_USE_PREVIEW_PANE = "Usar painel de pré-visualização" LABEL_USE_CHECKBOXES_IN_LIST = "Exibir caixas de seleção na lista" -LABEL_USE_THREADS = "Use tópicos" -LABEL_REPLY_SAME_FOLDER = "Colocar respostas na pasta de mensagens respondidas para" +LABEL_USE_THREADS = "Usar tópicos" +LABEL_REPLY_SAME_FOLDER = "Colocar resposta na mesma pasta da mensagem respondida" LABEL_SHOW_IMAGES = "Sempre exibir imagens no corpo da mensagem" LABEL_SHOW_ANIMATION = "Mostrar animação" -LABEL_MESSAGE_PER_PAGE = "Página de mensagens" +LABEL_MESSAGE_PER_PAGE = "Mensagens por Página" LABEL_CHROME_NOTIFICATION = "Notificações" -LABEL_CHROME_NOTIFICATION_DESC = "Mostrar as novas mensagens de notificação" +LABEL_CHROME_NOTIFICATION_DESC = "Mostrar notificação popup para novas mensagens" LABEL_CHROME_NOTIFICATION_DESC_DENIED = "(Bloqueado pelo navegador)" [SETTINGS_CONTACTS] LEGEND_CONTACTS = "Contatos" -LABEL_CONTACTS_AUTOSAVE = "Adicionar automaticamente destinatários a sua lista de endereços" +LABEL_CONTACTS_AUTOSAVE = "Adicionar automaticamente os destinatários na lista de endereços" LEGEND_CONTACTS_SYNC = "Sincronização remota (CardDAV)" LABEL_CONTACTS_SYNC_ENABLE = "Habilitar sincronização remota" LABEL_CONTACTS_SYNC_SERVER = "Servidor" @@ -422,56 +427,56 @@ LABEL_CUSTOM_TYPE = "Tipo" LABEL_CUSTOM_TYPE_LIGHT = "Claro" LABEL_CUSTOM_TYPE_DARK = "Escuro" LABEL_CUSTOM_BACKGROUND_IMAGE = "Plano de fundo" -BUTTON_UPLOAD_BACKGROUND_IMAGE = "Upload imagem de plano de fundo (JPG, PNG)" +BUTTON_UPLOAD_BACKGROUND_IMAGE = "Enviar imagem de plano de fundo(JPG, PNG)" ERROR_FILE_IS_TOO_BIG = "Arquivo muito grande" ERROR_FILE_TYPE_ERROR = "Tipo de arquivo inválido (somente JPG e PNG)" -ERROR_UNKNOWN = "Ocorreu um erro de upload de arquivo desconhecido" +ERROR_UNKNOWN = "Ocorreu um erro de envio de arquivo desconhecido" [SETTINGS_SOCIAL] LEGEND_GOOGLE = "Google" BUTTON_GOOGLE_CONNECT = "Conectar ao Google" BUTTON_GOOGLE_DISCONNECT = "Desconectar do Google" -MAIN_GOOGLE_DESC = "Depois de ativar com o login do Google, você pode entrar nessa conta usando o botão Google na tela de login." +MAIN_GOOGLE_DESC = "Depois de ativar com o login do Google, você poderá entrar nessa conta utilizando o botão Google na tela de login." LEGEND_FACEBOOK = "Facebook" BUTTON_FACEBOOK_CONNECT = "Conectar ao Facebook" BUTTON_FACEBOOK_DISCONNECT = "Desconectar do Facebook" -MAIN_FACEBOOK_DESC = "Depois de ativar com o login do Facebook, você pode entrar nessa conta usando o botão Facebook na tela de login." +MAIN_FACEBOOK_DESC = "Depois de ativar com o login do Facebook, você poderá entrar nessa conta utilizando o botão Facebook na tela de login." LEGEND_TWITTER = "Twitter" BUTTON_TWITTER_CONNECT = "Conectar ao Twitter" BUTTON_TWITTER_DISCONNECT = "Desconectar do Twitter" -MAIN_TWITTER_DESC = "Depois de ativar com o login do Twitter, você pode entrar nessa conta usando o botão Twitter na tela de login" +MAIN_TWITTER_DESC = "Depois de ativar com o login do Twitter, você poderá entrar nessa conta utilizando o botão Twitter na tela de login" [SETTINGS_FOLDERS] LEGEND_FOLDERS = "Lista de pastas" BUTTON_CREATE = "Criar pasta" BUTTON_SYSTEM = "Selecione as pastas do sistema" BUTTON_DELETE = "Excluir" -BUTTON_SUBSCRIBE = "Assinar" -BUTTON_UNSUBSCRIBE = "Anular" +BUTTON_SUBSCRIBE = "Acompanhar" +BUTTON_UNSUBSCRIBE = "Não acompanhar" LOADING_PROCESS = "Atualizar lista de pastas" -CREATING_PROCESS = "Criar a pasta" -DELETING_PROCESS = "Excluir a pasta" -RENAMING_PROCESS = "Renomear a pasta" +CREATING_PROCESS = "Criando a pasta" +DELETING_PROCESS = "Excluindo a pasta" +RENAMING_PROCESS = "Renomeando a pasta" DELETING_ASK = "Você tem certeza?" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Lista de contas" -BUTTON_ADD_ACCOUNT = "Adicionar contas" +BUTTON_ADD_ACCOUNT = "Adicionar conta" BUTTON_DELETE = "Excluir" -LOADING_PROCESS = "Atualizar a lista de contas" +LOADING_PROCESS = "Atualizando a lista de contas" DELETING_ASK = "Você tem certeza?" [SETTINGS_IDENTITIES] LEGEND_IDENTITY = "Identidade" LEGEND_IDENTITIES = "Identidades adicionais" -LABEL_DEFAULT = "Default" +LABEL_DEFAULT = "Padrão" LABEL_DISPLAY_NAME = "Nome" -LABEL_REPLY_TO = "Reenviar para" +LABEL_REPLY_TO = "Responder para" LABEL_SIGNATURE = "Assinatura" -LABEL_ADD_SIGNATURE_TO_ALL = "Adicione a sua assinatura a todas as mensagens de saída" +LABEL_ADD_SIGNATURE_TO_ALL = "Adicionar sua assinatura em todas as mensagens de saída" BUTTON_ADD_IDENTITY = "Adicionar identidade" -BUTTON_DELETE = "Deletar" -LOADING_PROCESS = "Atualizando lista identidade" +BUTTON_DELETE = "Excluir" +LOADING_PROCESS = "Atualizando a lista de identidades" DELETING_ASK = "Você tem certeza?" [SETTINGS_CHANGE_PASSWORD] @@ -479,8 +484,8 @@ LEGEND_CHANGE_PASSWORD = "Mudar a Senha" LABEL_CURRENT_PASSWORD = "Senha atual" LABEL_NEW_PASSWORD = "Nova senha" LABEL_REPEAT_PASSWORD = "Repita a nova senha" -BUTTON_UPDATE_PASSWORD = "Defina a nova senha" -ERROR_PASSWORD_MISMATCH = "Passwords do not match, please try again" +BUTTON_UPDATE_PASSWORD = "Definir nova senha" +ERROR_PASSWORD_MISMATCH = "As senhas não conferem, por favor tente novamente" [SETTINGS_OPEN_PGP] LEGEND_OPEN_PGP = "OpenPGP" @@ -494,28 +499,28 @@ DELETING_ASK = "Você tem certeza?" LEGEND_SHORTCUTS_HELP = "Ajuda com os atalhos de teclado" TAB_MAILBOX = "Caixa de correio" TAB_MESSAGE_LIST = "Lista de mensagens" -TAB_MESSAGE_VIEW = "Ver mensagem" -TAB_COMPOSE = "Compor" +TAB_MESSAGE_VIEW = "Visualização de mensagem" +TAB_COMPOSE = "Composição" LABEL_OPEN_USER_DROPDOWN = "Abrir menu de usuário" LABEL_REPLY = "Responder" LABEL_REPLY_ALL = "Responder todos" LABEL_FORWARD = "Encaminhar" -LABEL_FORWARD_MULTIPLY = "Encaminhar (múltiplos)" +LABEL_FORWARD_MULTIPLY = "Encaminhar como anexo" LABEL_HELP = "Ajuda" LABEL_CHECK_ALL = "Selecionar todas as mensagens" -LABEL_ARCHIVE = "Arquivo" -LABEL_DELETE = "Deletar" +LABEL_ARCHIVE = "Arquivar" +LABEL_DELETE = "Excluir" LABEL_MOVE = "Mover" -LABEL_READ = "Marcar mensagens selecionadas como lida" -LABEL_UNREAD = "Marcar mensagens selecionadas como não lida" +LABEL_READ = "Marcar mensagens selecionadas como lidas" +LABEL_UNREAD = "Marcar mensagens selecionadas como não lidas" LABEL_IMPORTANT = "Sinalizar mensagens selecionadas" -LABEL_SEARCH = "Procurar" +LABEL_SEARCH = "Pesquisar" LABEL_CANCEL_SEARCH = "Cancelar pesquisa" LABEL_FULLSCREEN_ENTER = "Tela-cheia (Com pré-visualização)" LABEL_VIEW_MESSAGE_ENTER = "Ver mensagem (Sem pré-visualização)" LABEL_SWITCH_TO_MESSAGE = "Mudar o foco para mensagem selecionada" -LABEL_SWITCH_TO_FOLDER_LIST = "Switch focus to folder list" +LABEL_SWITCH_TO_FOLDER_LIST = "Mudar o foco para a lista de pastas" LABEL_FULLSCREEN_TOGGLE = "Alternar modo tela-cheia" LABEL_BLOCKQUOTES_TOGGLE = "Alternar blocos de citações de mensagem" @@ -539,18 +544,18 @@ UNVERIFIRED_SIGNATURE = "Assinatura não verificada" DECRYPTION_ERROR = "Erro de decripitação de OpenPGP" GOOD_SIGNATURE = "Boa assinatura de %USER%" PGP_ERROR = "Erro OpenPGP: %ERROR%" -SPECIFY_FROM_EMAIL = "Por favor, especifique endereço de email remetente" +SPECIFY_FROM_EMAIL = "Por favor, especifique endereço de e-mail remetente" SPECIFY_AT_LEAST_ONE_RECIPIENT = "Especifique pelo menos um destinatário" [NOTIFICATIONS] INVALID_TOKEN = "Senha inválida" AUTH_ERROR = "Falha na autenticação" ACCESS_ERROR = "Erro ao acessar" -CONNECTION_ERROR = "Você não pode conectar-se ao servidor" -CAPTCHA_ERROR = "Incorreta CAPTCHA." -SOCIAL_FACEBOOK_LOGIN_ACCESS_DISABLE = "Esta ID social não é atribuído para qualquer conta de e-mail ainda. Entrar usando credenciais de e-mail e adicione ativar esse recurso em configurações de conta." -SOCIAL_TWITTER_LOGIN_ACCESS_DISABLE = "Esta ID social não é atribuído para qualquer conta de e-mail ainda. Entrar usando credenciais de e-mail e adicione ativar esse recurso em configurações de conta." -SOCIAL_GOOGLE_LOGIN_ACCESS_DISABLE = "Esta ID social não é atribuído para qualquer conta de e-mail ainda. Entrar usando credenciais de e-mail e adicione ativar esse recurso em configurações de conta." +CONNECTION_ERROR = "Não foi possível conectar-se ao servidor" +CAPTCHA_ERROR = "Verificação CAPTCHA incorreta." +SOCIAL_FACEBOOK_LOGIN_ACCESS_DISABLE = "Esta ID social não é atribuído para qualquer conta de e-mail ainda. Entre usando suas credenciais de e-mail e ative o recursso de logar pelo Facebook em configurações de conta." +SOCIAL_TWITTER_LOGIN_ACCESS_DISABLE = "Esta ID social não é atribuído para qualquer conta de e-mail ainda. Entre usando suas credenciais de e-mail e ative o recursso de logar pelo Twitter em configurações de conta." +SOCIAL_GOOGLE_LOGIN_ACCESS_DISABLE = "Esta ID social não é atribuído para qualquer conta de e-mail ainda. Entre usando suas credenciais de e-mail e ative o recursso de logar pelo Google em configurações de conta." DOMAIN_NOT_ALLOWED = "Este domínio não é permitido" ACCOUNT_NOT_ALLOWED = "Conta não permitida" ACCOUNT_TWO_FACTOR_AUTH_REQUIRED = "Verificação de duas etapas requerida" @@ -559,51 +564,51 @@ COULD_NOT_SAVE_NEW_PASSWORD = "Não foi possível salvar a nova senha" CURRENT_PASSWORD_INCORRECT = "Senha atual incorreta" NEW_PASSWORD_SHORT = "A senha é muito curta" NEW_PASSWORD_WEAK = "A senha é muito fácil" -NEW_PASSWORD_FORBIDDENT = "Password contains forbidden characters" -CONTACTS_SYNC_ERROR = "A senha contém caracteres proibidos" -CANT_GET_MESSAGE_LIST = "Não é possível obter a lista de mensagens" -CANT_GET_MESSAGE = "Não é possível obter a mensagem" -CANT_DELETE_MESSAGE = "Não é possível excluir a mensagem" -CANT_MOVE_MESSAGE = "Não é possível mover a mensagem" -CANT_SAVE_MESSAGE = "Não é possível salvar a mensagem" -CANT_SEND_MESSAGE = "Não é possível enviar a mensagem" -INVALID_RECIPIENTS = "Destinatário invpalido" -CANT_CREATE_FOLDER = "Não é possível criar esta pasta" -CANT_RENAME_FOLDER = "Não é possível renomear esta pasta" -CANT_DELETE_FOLDER = "Não é possível exluir esta pasta" +NEW_PASSWORD_FORBIDDENT = "A senha contém caracteres não permitidos" +CONTACTS_SYNC_ERROR = "Erro na sincronização dos contatos" +CANT_GET_MESSAGE_LIST = "Não foi possível obter a lista de mensagens" +CANT_GET_MESSAGE = "Não foi possível obter a mensagem" +CANT_DELETE_MESSAGE = "Não foi possível excluir a mensagem" +CANT_MOVE_MESSAGE = "Não foi possível mover a mensagem" +CANT_SAVE_MESSAGE = "Não foi possível salvar a mensagem" +CANT_SEND_MESSAGE = "Não foi possível enviar a mensagem" +INVALID_RECIPIENTS = "Destinatário inválido" +CANT_CREATE_FOLDER = "Não foi possível criar a pasta" +CANT_RENAME_FOLDER = "Não foi possível renomear a pasta" +CANT_DELETE_FOLDER = "Não foi possível exluir a pasta" CANT_DELETE_NON_EMPTY_FOLDER = "Não é possível excluir diretório não vazio" -CANT_SUBSCRIBE_FOLDER = "Não é possível assinar esta pasta" -CANT_UNSUBSCRIBE_FOLDER = "Não é possível cancelar esta pasta" -CANT_SAVE_SETTINGS = "Não é possível salvar as configurações" -CANT_SAVE_PLUGIN_SETTINGS = "Não é possível salvar as configurações" +CANT_SUBSCRIBE_FOLDER = "Não foi possível inscrever esta pasta" +CANT_UNSUBSCRIBE_FOLDER = "Não foi possível desisncrever esta pasta" +CANT_SAVE_SETTINGS = "Não foi possível salvar as configurações" +CANT_SAVE_PLUGIN_SETTINGS = "Não foi possível salvar as configurações" DOMAIN_ALREADY_EXISTS = "O domínio já existe" -CANT_INSTALL_PACKAGE = "Erro ao instalar pacote" -CANT_DELETE_PACKAGE = "Erro ao remover pacote" -INVALID_PLUGIN_PACKAGE = "Pacote de plugins inválidos" +CANT_INSTALL_PACKAGE = "Erro ao instalar pacote de plugin" +CANT_DELETE_PACKAGE = "Erro ao remover pacote de plugin" +INVALID_PLUGIN_PACKAGE = "Pacote de plugins inválido" UNSUPPORTED_PLUGIN_PACKAGE = "Pacote de plugins insuportados" LICENSING_SERVER_IS_UNAVAILABLE = "A assinatura do servidor está indisponível" LICENSING_DOMAIN_EXPIRED = "A assinatura para este domínio expirou." LICENSING_DOMAIN_BANNED = "A assinatura para este domínio é proibida." DEMO_SEND_MESSAGE_ERROR = "Por motivos de segurança, esta conta demo não tem permissão para enviar mensagens para endereços de e-mail externo!" ACCOUNT_ALREADY_EXISTS = "Esta conta já existe" -MAIL_SERVER_ERROR = "Ocorreu um erro ao acessar o servidor de email" -INVALID_INPUT_ARGUMENT = "Invalid input argument" +MAIL_SERVER_ERROR = "Ocorreu um erro ao acessar o servidor de e-mail" +INVALID_INPUT_ARGUMENT = "Argumento de entrada inválido" UNKNOWN_ERROR = "Erro desconhecido" [STATIC] BACK_LINK = "Recarregar" -DOMAIN_LIST_DESC = "A ista de domínios de webmail tem permissão para acessar." -PHP_EXSTENSIONS_ERROR_DESC = "Extensão necessária PHP não estão disponíveis na sua configuração do PHP!" -PHP_VERSION_ERROR_DESC = "Sua versão PHP (%VERSION%) é menor do que o domínio exigido 5.3.0!" +DOMAIN_LIST_DESC = "A lista de domínios de webmail tem permissão para acessar." +PHP_EXSTENSIONS_ERROR_DESC = "Extensões necessárias PHP não estão disponíveis na sua configuração do PHP!" +PHP_VERSION_ERROR_DESC = "Sua versão PHP (%VERSION%) é menor do que o mínimo exigido 5.3.0!" NO_SCRIPT_TITLE = "JavaScript é necessário para esta aplicação." NO_SCRIPT_DESC = "O JavaScript não está disponível em seu navegador. -Por favor ativar o suporte a JavaScript nas configurações do seu navegador e tente novamente." +Por favor ative o suporte a JavaScript nas configurações do seu navegador e tente novamente." NO_COOKIE_TITLE = "É necessário suporte a cookies para esta aplicação." -NO_COOKIE_DESC = "O Cookies não está disponível em seu navegador. -Por favor ativar o suporte a Cookie nas configurações do seu navegador e tente novamente." +NO_COOKIE_DESC = "Os Cookies não estão disponíveis em seu navegador. +Por favor ative o suporte a Cookies nas configurações do seu navegador e tente novamente." BAD_BROWSER_TITLE = "Seu navegador está desatualizado." BAD_BROWSER_DESC = "Para usar todos os recursos do aplicativo, -baixar e instalar um desses navegadores:" +baixe e instale um desses navegadores:" From 0ea982671b527a4930ece1a74e2c58ad29e202d5 Mon Sep 17 00:00:00 2001 From: RainLoop Team Date: Mon, 13 Apr 2015 22:45:09 +0400 Subject: [PATCH 02/33] PreRelease 1.8.3 --- dev/App/Abstract.js | 2 +- dev/App/User.js | 2 +- dev/Common/Audio.js | 148 ++++++--- dev/Common/Enums.js | 20 ++ dev/Common/Globals.js | 3 +- dev/Common/HtmlEditor.js | 28 +- dev/Common/Selector.js | 4 +- dev/Common/Utils.js | 42 +-- dev/External/Opentip.js | 14 +- dev/External/ko.js | 27 +- dev/Model/Attachment.js | 309 +++++++++++++----- dev/Model/ComposeAttachment.js | 12 +- dev/Model/Email.js | 2 +- dev/Model/Message.js | 46 +-- dev/Model/MessageFull.js | 35 -- dev/Promises/User/Ajax.js | 8 + dev/Settings/Admin/Licensing.js | 4 +- dev/Stores/User/Account.js | 2 +- dev/Stores/User/Folder.js | 2 +- dev/Stores/User/Message.js | 2 +- dev/Stores/User/Notification.js | 4 +- dev/Stores/User/Pgp.js | 4 +- dev/Styles/Animations.less | 17 + dev/Styles/Attachmnets.less | 17 +- dev/Styles/Login.less | 1 + dev/Styles/MessageList.less | 2 +- dev/Styles/Ui.less | 2 +- dev/Styles/_End.less | 27 ++ dev/View/Admin/Login.js | 21 ++ dev/View/Popup/Activate.js | 2 +- dev/View/Popup/Compose.js | 2 +- dev/View/User/Login.js | 47 ++- dev/View/User/MailBox/MessageList.js | 2 +- dev/View/User/MailBox/MessageView.js | 61 +++- package.json | 2 +- .../MailSo/Mail/AttachmentCollection.php | 63 +--- .../0.0.0/app/libraries/RainLoop/Actions.php | 34 +- .../app/templates/Views/Admin/AdminLogin.html | 16 +- .../0.0.0/app/templates/Views/User/Login.html | 19 +- .../templates/Views/User/MailMessageView.html | 27 +- 40 files changed, 712 insertions(+), 370 deletions(-) diff --git a/dev/App/Abstract.js b/dev/App/Abstract.js index 401cdac1f..06f43d7e8 100644 --- a/dev/App/Abstract.js +++ b/dev/App/Abstract.js @@ -73,7 +73,7 @@ }, 50)); - // TODO + // DEBUG // Events.sub({ // 'window.resize': function () { // window.console.log('window.resize'); diff --git a/dev/App/User.js b/dev/App/User.js index a67032d2c..d9bb971b4 100644 --- a/dev/App/User.js +++ b/dev/App/User.js @@ -211,7 +211,7 @@ /** * @param {Function} fResultFunc - * @returns {boolean} + * @return {boolean} */ AppUser.prototype.contactsSync = function (fResultFunc) { diff --git a/dev/Common/Audio.js b/dev/Common/Audio.js index d4e3046d0..8e437fc88 100644 --- a/dev/Common/Audio.js +++ b/dev/Common/Audio.js @@ -20,58 +20,90 @@ { var self = this; - this.obj = this.createNewObject(); - this.objForNotification = this.createNewObject(); +// this.userMedia = window.navigator.getUserMedia || window.navigator.webkitGetUserMedia || +// window.navigator.mozGetUserMedia || window.navigator.msGetUserMedia; +// +// this.audioContext = window.AudioContext || window.webkitAudioContext; +// if (!this.audioContext || !window.Float32Array) +// { +// this.audioContext = null; +// this.userMedia = null; +// } - this.supported = !Globals.bMobileDevice && !Globals.bSafari && - this.obj && '' !== this.obj.canPlayType('audio/mpeg'); + this.player = this.createNewObject(); - if (this.obj && this.supported) + this.supported = !Globals.bMobileDevice && !Globals.bSafari && !!this.player && !!this.player.play; + if (this.supported && this.player.canPlayType) { - this.objForNotification.src = Links.sound('new-mail.mp3'); + this.supportedMp3 = '' !== this.player.canPlayType('audio/mpeg;').replace(/no/, ''); + this.supportedWav = '' !== this.player.canPlayType('audio/wav; codecs="1"').replace(/no/, ''); + this.supportedOgg = '' !== this.player.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/, ''); + this.supportedNotification = this.supported && this.supportedMp3; + } - $(this.obj).on('ended error', function () { + if (!this.player || (!this.supportedMp3 && !this.supportedOgg && !this.supportedWav)) + { + this.supported = false; + this.supportedMp3 = false; + this.supportedOgg = false; + this.supportedWav = false; + this.supportedNotification = false; + } + + if (this.supported) + { + $(this.player).on('ended error', function () { self.stop(); }); Events.sub('audio.api.stop', function () { self.stop(); }); - - Events.sub('audio.api.play', function (sUrl, sName) { - self.playMp3(sUrl, sName); - }); } } - Audio.prototype.obj = null; - Audio.prototype.objForNotification = null; + Audio.prototype.player = null; + Audio.prototype.notificator = null; + Audio.prototype.supported = false; + Audio.prototype.supportedMp3 = false; + Audio.prototype.supportedOgg = false; + Audio.prototype.supportedWav = false; + Audio.prototype.supportedNotification = false; + +// Audio.prototype.record = function () +// { +// this.getUserMedia({audio:true}, function () { +// window.console.log(arguments); +// }, function(oError) { +// window.console.log(arguments); +// }); +// }; Audio.prototype.createNewObject = function () { - var obj = window.Audio ? new window.Audio() : null; - if (obj && obj.canPlayType) + var player = window.Audio ? new window.Audio() : null; + if (player && player.canPlayType && player.pause && player.play) { - obj.preload = 'none'; - obj.loop = false; - obj.autoplay = false; - obj.muted = false; + player.preload = 'none'; + player.loop = false; + player.autoplay = false; + player.muted = false; } - return obj; + return player; }; Audio.prototype.paused = function () { - return this.supported ? !!this.obj.paused : true; + return this.supported ? !!this.player.paused : true; }; Audio.prototype.stop = function () { - if (this.supported && this.obj.pause) + if (this.supported && this.player.pause) { - this.obj.pause(); + this.player.pause(); } Events.pub('audio.stop'); @@ -79,33 +111,73 @@ Audio.prototype.pause = Audio.prototype.stop; + Audio.prototype.clearName = function (sName, sExt) + { + sExt = sExt || ''; + sName = Utils.isUnd(sName) ? '' : Utils.trim(sName); + if (sExt && '.' + sExt === sName.toLowerCase().substr((sExt.length + 1) * -1)) + { + sName = Utils.trim(sName.substr(0, sName.length - 4)); + } + + if ('' === sName) + { + sName = 'audio'; + } + + return sName; + }; + Audio.prototype.playMp3 = function (sUrl, sName) { - if (this.supported && this.obj.play) + if (this.supported && this.supportedMp3) { - this.obj.src = sUrl; - this.obj.play(); + this.player.src = sUrl; + this.player.play(); - sName = Utils.isUnd(sName) ? '' : Utils.trim(sName); - if ('.mp3' === sName.toLowerCase().substr(-4)) - { - sName = Utils.trim(sName.substr(0, sName.length - 4)); - } + Events.pub('audio.start', [this.clearName(sName, 'mp3'), 'mp3']); + } + }; - if ('' === sName) - { - sName = 'audio'; - } + Audio.prototype.playOgg = function (sUrl, sName) + { + if (this.supported && this.supportedOgg) + { + this.player.src = sUrl; + this.player.play(); - Events.pub('audio.start', [sName]); + sName = this.clearName(sName, 'oga'); + sName = this.clearName(sName, 'ogg'); + + Events.pub('audio.start', [sName, 'ogg']); + } + }; + + Audio.prototype.playWav = function (sUrl, sName) + { + if (this.supported && this.supportedWav) + { + this.player.src = sUrl; + this.player.play(); + + Events.pub('audio.start', [this.clearName(sName, 'wav'), 'wav']); } }; Audio.prototype.playNotification = function () { - if (this.supported && this.objForNotification.play) + if (this.supported && this.supportedMp3) { - this.objForNotification.play(); + if (!this.notificator) + { + this.notificator = this.createNewObject(); + this.notificator.src = Links.sound('new-mail.mp3'); + } + + if (this.notificator && this.notificator.play) + { + this.notificator.play(); + } } }; diff --git a/dev/Common/Enums.js b/dev/Common/Enums.js index 2a18a0d0d..36c56ad5e 100644 --- a/dev/Common/Enums.js +++ b/dev/Common/Enums.js @@ -5,6 +5,26 @@ var Enums = {}; + /** + * @enum {string} + */ + Enums.FileType = { + 'Unknown': 'unknown', + 'Text': 'text', + 'Html': 'html', + 'Code': 'code', + 'Eml': 'eml', + 'WordText': 'word-text', + 'Pdf': 'pdf', + 'Image': 'image', + 'Audio': 'audio', + 'Video': 'video', + 'Sheet': 'sheet', + 'Presentation': 'presentation', + 'Certificate': 'certificate', + 'Archive': 'archive' + }; + /** * @enum {string} */ diff --git a/dev/Common/Globals.js b/dev/Common/Globals.js index b408c073a..3a4bfb5c1 100644 --- a/dev/Common/Globals.js +++ b/dev/Common/Globals.js @@ -18,6 +18,7 @@ Globals.$win = $(window); Globals.$doc = $(window.document); Globals.$html = $('html'); + Globals.$body = $('body'); Globals.$div = $('
'); Globals.$win.__sizes = [0, 0]; @@ -268,7 +269,7 @@ }); Globals.keyScopeReal.subscribe(function (sValue) { -// window.console.log('keyScope=' + sValue); // TODO +// window.console.log('keyScope=' + sValue); // DEBUG key.setScope(sValue); }); diff --git a/dev/Common/HtmlEditor.js b/dev/Common/HtmlEditor.js index 27812bd7b..8e9f25c69 100644 --- a/dev/Common/HtmlEditor.js +++ b/dev/Common/HtmlEditor.js @@ -31,6 +31,9 @@ this.resize = _.throttle(_.bind(this.resize, this), 100); + this.__inited = false; + this.__initedData = null; + this.init(); } @@ -190,7 +193,7 @@ HtmlEditor.prototype.setHtml = function (sHtml, bFocus) { - if (this.editor) + if (this.editor && this.__inited) { this.modeToggle(true); @@ -203,11 +206,15 @@ this.focus(); } } + else + { + this.__initedData = [true, sHtml, bFocus]; + } }; HtmlEditor.prototype.setPlain = function (sPlain, bFocus) { - if (this.editor) + if (this.editor && this.__inited) { this.modeToggle(false); if ('plain' === this.editor.mode && this.editor.plugins.plain && this.editor.__plain) @@ -226,6 +233,10 @@ this.focus(); } } + else + { + this.__initedData = [false, sPlain, bFocus]; + } }; HtmlEditor.prototype.init = function () @@ -322,7 +333,20 @@ self.fOnReady(); self.__resizable = true; + self.__inited = true; self.resize(); + + if (self.__initedData) + { + if (self.__initedData[0]) + { + self.setHtml(self.__initedData[1], self.__initedData[2]); + } + else + { + self.setPlain(self.__initedData[1], self.__initedData[2]); + } + } }); } } diff --git a/dev/Common/Selector.js b/dev/Common/Selector.js index 05ebf76bf..0918e42b1 100644 --- a/dev/Common/Selector.js +++ b/dev/Common/Selector.js @@ -435,7 +435,7 @@ }; /** - * @returns {boolean} + * @return {boolean} */ Selector.prototype.autoSelect = function () { @@ -452,7 +452,7 @@ /** * @param {Object} oItem - * @returns {string} + * @return {string} */ Selector.prototype.getItemUid = function (oItem) { diff --git a/dev/Common/Utils.js b/dev/Common/Utils.js index dfa183e55..daf84d133 100644 --- a/dev/Common/Utils.js +++ b/dev/Common/Utils.js @@ -144,7 +144,7 @@ /** * @param {string} sMailToUrl * @param {Function} PopupComposeVoreModel - * @returns {boolean} + * @return {boolean} */ Utils.mailToHelper = function (sMailToUrl, PopupComposeVoreModel) { @@ -598,7 +598,7 @@ * @param {string} sTheme * @return {string} */ - Utils.convertThemeName = function (sTheme) + Utils.convertThemeName = _.memoize(function (sTheme) { if ('@custom' === sTheme.substr(-7)) { @@ -606,7 +606,7 @@ } return Utils.trim(sTheme.replace(/[^a-zA-Z0-9]+/g, ' ').replace(/([A-Z])/g, ' $1').replace(/[\s]+/g, ' ')); - }; + }); /** * @param {string} sName @@ -822,40 +822,6 @@ sText = '', - splitPlainText = function (sText) - { - var - iLen = 100, - sPrefix = '', - sSubText = '', - sResult = sText, - iSpacePos = 0, - iNewLinePos = 0 - ; - - while (sResult.length > iLen) - { - sSubText = sResult.substring(0, iLen); - iSpacePos = sSubText.lastIndexOf(' '); - iNewLinePos = sSubText.lastIndexOf('\n'); - - if (-1 !== iNewLinePos) - { - iSpacePos = iNewLinePos; - } - - if (-1 === iSpacePos) - { - iSpacePos = iLen; - } - - sPrefix += sSubText.substring(0, iSpacePos) + '\n'; - sResult = sResult.substring(iSpacePos + 1); - } - - return sPrefix + sResult; - }, - convertBlockquote = function (sText) { sText = Utils.trim(sText); sText = '> ' + sText.replace(/\n/gm, '\n> '); @@ -929,7 +895,7 @@ .replace(/&/gi, '&') ; - sText = splitPlainText(Utils.trim(sText)); + sText = Utils.splitPlainText(Utils.trim(sText)); iPos = 0; iLimit = 800; diff --git a/dev/External/Opentip.js b/dev/External/Opentip.js index cf7ad5d3f..fb6123067 100644 --- a/dev/External/Opentip.js +++ b/dev/External/Opentip.js @@ -9,10 +9,21 @@ ; Opentip.styles.rainloop = { + 'extends': 'standard', + 'fixed': true, 'target': true, + 'delay': 0.2, + 'hideDelay': 0, + + 'hideEffect': 'fade', + 'hideEffectDuration': 0.2, + + 'showEffect': 'fade', + 'showEffectDuration': 0.2, + 'showOn': 'mouseover click', 'removeElementsOnHide': true, @@ -26,8 +37,7 @@ Opentip.styles.rainloopTip = { 'extends': 'rainloop', - 'stemLength': 3, - 'stemBase': 5, + 'delay': 0.4, 'group': 'rainloopTips' }; diff --git a/dev/External/ko.js b/dev/External/ko.js index c0844364d..b2e1e4712 100644 --- a/dev/External/ko.js +++ b/dev/External/ko.js @@ -33,7 +33,7 @@ } }, fUpdateKoValue = function () { - if (oEditor) + if (oEditor && oEditor.__inited) { fValue(oEditor.getDataWithHtmlMark()); } @@ -49,6 +49,7 @@ fValue.__updateEditorValue = fUpdateEditorValue; fValue.subscribe(fUpdateEditorValue); + fUpdateEditorValue(); } } }; @@ -61,6 +62,7 @@ sValue = '', Translator = null, $oEl = $(oElement), + fValue = fValueAccessor(), bMobile = 'on' === ($oEl.data('tooltip-mobile') || 'off'), Globals = require('Common/Globals') ; @@ -68,7 +70,7 @@ if (!Globals.bMobileDevice || bMobile) { bi18n = 'on' === ($oEl.data('tooltip-i18n') || 'on'); - sValue = ko.unwrap(fValueAccessor()); + sValue = !ko.isObservable(fValue) && _.isFunction(fValue) ? fValue() : ko.unwrap(fValue); oElement.__opentip = new Opentip(oElement, { 'style': 'rainloopTip', @@ -78,12 +80,21 @@ Globals.dropdownVisibility.subscribe(function (bV) { if (bV) { - oElement.__opentip.deactivate(); - } else { - oElement.__opentip.activate(); + oElement.__opentip.hide(); } }); + if ('' === sValue) + { + oElement.__opentip.hide(); + oElement.__opentip.deactivate(); + oElement.__opentip.setContent(''); + } + else + { + oElement.__opentip.activate(); + } + if (bi18n) { Translator = require('Common/Translator'); @@ -113,6 +124,7 @@ bi18n = true, sValue = '', $oEl = $(oElement), + fValue = fValueAccessor(), bMobile = 'on' === ($oEl.data('tooltip-mobile') || 'off'), Globals = require('Common/Globals') ; @@ -120,7 +132,7 @@ if ((!Globals.bMobileDevice || bMobile) && oElement.__opentip) { bi18n = 'on' === ($oEl.data('tooltip-i18n') || 'on'); - sValue = ko.unwrap(fValueAccessor()); + sValue = !ko.isObservable(fValue) && _.isFunction(fValue) ? fValue() : ko.unwrap(fValue); if (sValue) { @@ -165,7 +177,8 @@ var $oEl = $(oElement), - sValue = ko.unwrap(fValueAccessor()), + fValue = fValueAccessor(), + sValue = !ko.isObservable(fValue) && _.isFunction(fValue) ? fValue() : ko.unwrap(fValue), oOpenTips = oElement.__opentip ; diff --git a/dev/Model/Attachment.js b/dev/Model/Attachment.js index 3b126565d..d4dc6911e 100644 --- a/dev/Model/Attachment.js +++ b/dev/Model/Attachment.js @@ -8,6 +8,7 @@ _ = require('_'), ko = require('ko'), + Enums = require('Common/Enums'), Globals = require('Common/Globals'), Utils = require('Common/Utils'), Links = require('Common/Links'), @@ -27,6 +28,8 @@ this.mimeType = ''; this.fileName = ''; + this.fileNameExt = ''; + this.fileType = Enums.FileType.Unknown; this.estimatedSize = 0; this.friendlySize = ''; this.isInline = false; @@ -57,6 +60,8 @@ AttachmentModel.prototype.mimeType = ''; AttachmentModel.prototype.fileName = ''; + AttachmentModel.prototype.fileType = ''; + AttachmentModel.prototype.fileNameExt = ''; AttachmentModel.prototype.estimatedSize = 0; AttachmentModel.prototype.friendlySize = ''; AttachmentModel.prototype.isInline = false; @@ -97,6 +102,9 @@ this.friendlySize = Utils.friendlySize(this.estimatedSize); this.cidWithOutTags = this.cid.replace(/^<+/, '').replace(/>+$/, ''); + this.fileNameExt = Utils.getFileExtension(this.fileName); + this.fileType = AttachmentModel.staticFileType(this.fileNameExt, this.mimeType); + bResult = true; } @@ -108,9 +116,7 @@ */ AttachmentModel.prototype.isImage = function () { - return -1 < Utils.inArray(this.mimeType.toLowerCase(), - ['image/png', 'image/jpg', 'image/jpeg', 'image/gif'] - ); + return Enums.FileType.Image === this.fileType; }; /** @@ -118,7 +124,26 @@ */ AttachmentModel.prototype.isMp3 = function () { - return Audio.supported && '.mp3' === this.fileName.toLowerCase().substr(-4); + return Enums.FileType.Audio === this.fileType && + 'mp3' === this.fileNameExt; + }; + + /** + * @return {boolean} + */ + AttachmentModel.prototype.isOgg = function () + { + return Enums.FileType.Audio === this.fileType && + ('oga' === this.fileNameExt || 'ogg' === this.fileNameExt); + }; + + /** + * @return {boolean} + */ + AttachmentModel.prototype.isWav = function () + { + return Enums.FileType.Audio === this.fileType && + 'wav' === this.fileNameExt; }; /** @@ -134,8 +159,12 @@ */ AttachmentModel.prototype.isText = function () { - return -1 < Utils.inArray(this.mimeType, ['application/pgp-signature', 'message/delivery-status', 'message/rfc822']) || - ('text/' === this.mimeType.substr(0, 5) && -1 === Utils.inArray(this.mimeType, ['text/html'])); + return Enums.FileType.Text === this.fileType || + Enums.FileType.Eml === this.fileType || + Enums.FileType.Certificate === this.fileType || + Enums.FileType.Html === this.fileType || + Enums.FileType.Code === this.fileType + ; }; /** @@ -143,7 +172,7 @@ */ AttachmentModel.prototype.isPdf = function () { - return Globals.bAllowPdfPreview && 'application/pdf' === this.mimeType; + return Enums.FileType.Pdf === this.fileType; }; /** @@ -152,7 +181,7 @@ AttachmentModel.prototype.isFramed = function () { return this.framed && (Globals.__APP__ && Globals.__APP__.googlePreviewSupported()) && - !this.isPdf() && !this.isText() && !this.isImage(); + !(this.isPdf() && Globals.bAllowPdfPreview) && !this.isText() && !this.isImage(); }; /** @@ -160,7 +189,7 @@ */ AttachmentModel.prototype.hasPreview = function () { - return this.isImage() || this.isPdf() || this.isText() || this.isFramed(); + return this.isImage() || (this.isPdf() && Globals.bAllowPdfPreview) || this.isText() || this.isFramed(); }; /** @@ -168,7 +197,10 @@ */ AttachmentModel.prototype.hasPreplay = function () { - return this.isMp3(); + return (Audio.supportedMp3 && this.isMp3()) || + (Audio.supportedOgg && this.isOgg()) || + (Audio.supportedWav && this.isWav()) + ; }; /** @@ -229,7 +261,7 @@ switch (true) { case this.isImage(): - case this.isPdf(): + case this.isPdf() && Globals.bAllowPdfPreview: sResult = this.linkPreview(); break; case this.isText(): @@ -274,76 +306,85 @@ }; /** + * @param {string} sExt * @param {string} sMimeType - * @returns {string} + * @return {string} */ - AttachmentModel.staticIconClassHelper = function (sMimeType) + AttachmentModel.staticFileType = _.memoize(function (sExt, sMimeType) { + sExt = Utils.trim(sExt).toLowerCase(); sMimeType = Utils.trim(sMimeType).toLowerCase(); var - sText = '', - sClass = 'icon-file', - aParts = sMimeType.split('/') + sResult = Enums.FileType.Unknown, + aMimeTypeParts = sMimeType.split('/') ; - if (aParts && aParts[1]) + switch (true) { - if ('image' === aParts[0]) - { - sClass = 'icon-file-image'; - } - else if ('text' === aParts[0]) - { - sClass = 'icon-file-text'; - } - else if ('audio' === aParts[0]) - { - sClass = 'icon-file-music'; - } - else if ('video' === aParts[0]) - { - sClass = 'icon-file-movie'; - } - else if (-1 < Utils.inArray(aParts[1], - ['zip', '7z', 'tar', 'rar', 'gzip', 'bzip', 'bzip2', 'x-zip', 'x-7z', 'x-rar', 'x-tar', 'x-gzip', 'x-bzip', 'x-bzip2', 'x-zip-compressed', 'x-7z-compressed', 'x-rar-compressed'])) - { - sClass = 'icon-file-zip'; - } - else if (-1 < Utils.inArray(aParts[1], - ['pdf', 'x-pdf'])) - { - sText = 'pdf'; - sClass = 'icon-none'; - } - // else if (-1 < Utils.inArray(aParts[1], [ - // 'exe', 'x-exe', 'x-winexe', 'bat' - // ])) - // { - // sClass = 'icon-console'; - // } - else if (-1 < Utils.inArray(sMimeType, [ - 'application/pgp-signature', 'application/pkcs7-signature' - ])) - { - sClass = 'icon-file-certificate'; - } - else if (-1 < Utils.inArray(sMimeType, [ + case 'image' === aMimeTypeParts[0] || -1 < Utils.inArray(sExt, [ + 'png', 'jpg', 'jpeg', 'gif', 'bmp' + ]): + sResult = Enums.FileType.Image; + break; + case 'audio' === aMimeTypeParts[0] || -1 < Utils.inArray(sExt, [ + 'mp3', 'ogg', 'oga', 'wav' + ]): + sResult = Enums.FileType.Audio; + break; + case 'video' === aMimeTypeParts[0] || -1 < Utils.inArray(sExt, [ + 'mkv', 'avi' + ]): + sResult = Enums.FileType.Video; + break; + case -1 < Utils.inArray(sExt, [ + 'php', 'js', 'css' + ]): + sResult = Enums.FileType.Code; + break; + case 'eml' === sExt || -1 < Utils.inArray(sMimeType, [ 'message/delivery-status', 'message/rfc822' - ])) - { - sClass = 'icon-file-text'; - } - else if (-1 < Utils.inArray(aParts[1], [ + ]): + sResult = Enums.FileType.Eml; + break; + case ('text' === aMimeTypeParts[0] && 'html' !== aMimeTypeParts[1]) || -1 < Utils.inArray(sExt, [ + 'txt', 'log' + ]): + sResult = Enums.FileType.Text; + break; + case ('text/html' === sMimeType) || -1 < Utils.inArray(sExt, [ + 'html' + ]): + sResult = Enums.FileType.Html; + break; + case -1 < Utils.inArray(aMimeTypeParts[1], [ + 'zip', '7z', 'tar', 'rar', 'gzip', 'bzip', 'bzip2', 'x-zip', 'x-7z', 'x-rar', 'x-tar', 'x-gzip', 'x-bzip', 'x-bzip2', 'x-zip-compressed', 'x-7z-compressed', 'x-rar-compressed' + ]) || -1 < Utils.inArray(sExt, [ + 'zip', '7z', 'tar', 'rar', 'gzip', 'bzip', 'bzip2' + ]): + sResult = Enums.FileType.Archive; + break; + case -1 < Utils.inArray(aMimeTypeParts[1], ['pdf', 'x-pdf']) || -1 < Utils.inArray(sExt, [ + 'pdf' + ]): + sResult = Enums.FileType.Pdf; + break; + case -1 < Utils.inArray(sMimeType, [ + 'application/pgp-signature', 'application/pkcs7-signature', 'application/pgp-keys' + ]) || -1 < Utils.inArray(sExt, [ + 'asc', 'pem', 'ppk' + ]): + sResult = Enums.FileType.Certificate; + break; + case -1 < Utils.inArray(aMimeTypeParts[1], [ 'rtf', 'msword', 'vnd.msword', 'vnd.openxmlformats-officedocument.wordprocessingml.document', 'vnd.openxmlformats-officedocument.wordprocessingml.template', 'vnd.ms-word.document.macroEnabled.12', 'vnd.ms-word.template.macroEnabled.12' - ])) - { - sClass = 'icon-file-text'; - } - else if (-1 < Utils.inArray(aParts[1], [ + ]): + sResult = Enums.FileType.WordText; + break; + case -1 < Utils.inArray(aMimeTypeParts[1], [ 'excel', 'ms-excel', 'vnd.ms-excel', 'vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'vnd.openxmlformats-officedocument.spreadsheetml.template', @@ -351,11 +392,10 @@ 'vnd.ms-excel.template.macroEnabled.12', 'vnd.ms-excel.addin.macroEnabled.12', 'vnd.ms-excel.sheet.binary.macroEnabled.12' - ])) - { - sClass = 'icon-file-excel'; - } - else if (-1 < Utils.inArray(aParts[1], [ + ]): + sResult = Enums.FileType.Sheet; + break; + case -1 < Utils.inArray(aMimeTypeParts[1], [ 'powerpoint', 'ms-powerpoint', 'vnd.ms-powerpoint', 'vnd.openxmlformats-officedocument.presentationml.presentation', 'vnd.openxmlformats-officedocument.presentationml.template', @@ -364,29 +404,140 @@ 'vnd.ms-powerpoint.presentation.macroEnabled.12', 'vnd.ms-powerpoint.template.macroEnabled.12', 'vnd.ms-powerpoint.slideshow.macroEnabled.12' - ])) - { + ]): + sResult = Enums.FileType.Presentation; + break; + } + + return sResult; + }); + + /** + * @param {string} sFileType + * @return {string} + */ + AttachmentModel.staticIconClass = _.memoize(function (sFileType) + { + var + sText = '', + sClass = 'icon-file' + ; + + switch (sFileType) + { + case Enums.FileType.Text: + case Enums.FileType.Eml: + case Enums.FileType.WordText: + sClass = 'icon-file-text'; + break; + case Enums.FileType.Html: + case Enums.FileType.Code: + sClass = 'icon-file-code'; + break; + case Enums.FileType.Image: + sClass = 'icon-file-image'; + break; + case Enums.FileType.Audio: + sClass = 'icon-file-music'; + break; + case Enums.FileType.Video: + sClass = 'icon-file-movie'; + break; + case Enums.FileType.Archive: + sClass = 'icon-file-zip'; + break; + case Enums.FileType.Certificate: + sClass = 'icon-file-certificate'; + break; + case Enums.FileType.Sheet: + sClass = 'icon-file-excel'; + break; + case Enums.FileType.Presentation: sClass = 'icon-file-chart-graph'; - } + break; + case Enums.FileType.Pdf: + sText = 'pdf'; + sClass = 'icon-none'; + break; } return [sClass, sText]; + }); + + /** + * @param {string} sFileType + * @return {string} + */ + AttachmentModel.staticCombinedIconClass = function (aData) + { + var + sClass = '', + aTypes = [] + ; + + if (Utils.isNonEmptyArray(aData)) + { + sClass = 'icon-attachment'; + + aTypes = _.uniq(_.compact(_.map(aData, function (aItem) { + return aItem ? AttachmentModel.staticFileType( + Utils.getFileExtension(aItem[0]), aItem[1]) : ''; + }))); + + if (aTypes && 1 === aTypes.length && aTypes[0]) + { + switch (aTypes[0]) + { + case Enums.FileType.Text: + case Enums.FileType.WordText: + sClass = 'icon-file-text'; + break; + case Enums.FileType.Html: + case Enums.FileType.Code: + sClass = 'icon-file-code'; + break; + case Enums.FileType.Image: + sClass = 'icon-file-image'; + break; + case Enums.FileType.Audio: + sClass = 'icon-file-music'; + break; + case Enums.FileType.Video: + sClass = 'icon-file-movie'; + break; + case Enums.FileType.Archive: + sClass = 'icon-file-zip'; + break; + case Enums.FileType.Certificate: + sClass = 'icon-file-certificate'; + break; + case Enums.FileType.Sheet: + sClass = 'icon-file-excel'; + break; + case Enums.FileType.Presentation: + sClass = 'icon-file-chart-graph'; + break; + } + } + } + + return sClass; }; /** - * @returns {string} + * @return {string} */ AttachmentModel.prototype.iconClass = function () { - return AttachmentModel.staticIconClassHelper(this.mimeType)[0]; + return AttachmentModel.staticIconClass(this.fileType)[0]; }; /** - * @returns {string} + * @return {string} */ AttachmentModel.prototype.iconText = function () { - return AttachmentModel.staticIconClassHelper(this.mimeType)[1]; + return AttachmentModel.staticIconClass(this.fileType)[1]; }; module.exports = AttachmentModel; diff --git a/dev/Model/ComposeAttachment.js b/dev/Model/ComposeAttachment.js index d9a470135..48d42e9d0 100644 --- a/dev/Model/ComposeAttachment.js +++ b/dev/Model/ComposeAttachment.js @@ -70,7 +70,11 @@ return Utils.mimeContentType(this.fileName()); }, this); - this.regDisposables([this.friendlySize]); + this.fileExt = ko.computed(function () { + return Utils.getFileExtension(this.fileName()); + }, this); + + this.regDisposables([this.progressText, this.progressStyle, this.title, this.friendlySize, this.mimeType, this.fileExt]); } _.extend(ComposeAttachmentModel.prototype, AbstractModel.prototype); @@ -108,7 +112,8 @@ */ ComposeAttachmentModel.prototype.iconClass = function () { - return AttachmentModel.staticIconClassHelper(this.mimeType())[0]; + return AttachmentModel.staticIconClass( + AttachmentModel.staticFileType(this.fileExt(), this.mimeType()))[0]; }; /** @@ -116,7 +121,8 @@ */ ComposeAttachmentModel.prototype.iconText = function () { - return AttachmentModel.staticIconClassHelper(this.mimeType())[1]; + return AttachmentModel.staticIconClass( + AttachmentModel.staticFileType(this.fileExt(), this.mimeType()))[1]; }; module.exports = ComposeAttachmentModel; diff --git a/dev/Model/Email.js b/dev/Model/Email.js index 63440bc2e..173ed2a80 100644 --- a/dev/Model/Email.js +++ b/dev/Model/Email.js @@ -66,7 +66,7 @@ }; /** - * @returns {boolean} + * @return {boolean} */ EmailModel.prototype.validate = function () { diff --git a/dev/Model/Message.js b/dev/Model/Message.js index c9f89d51e..399e51912 100644 --- a/dev/Model/Message.js +++ b/dev/Model/Message.js @@ -74,30 +74,11 @@ this.selected = ko.observable(false); this.checked = ko.observable(false); this.hasAttachments = ko.observable(false); - this.attachmentsMainType = ko.observable(''); + this.attachmentsSpecData = ko.observableArray([]); this.attachmentIconClass = ko.computed(function () { - var sClass = ''; - if (this.hasAttachments()) - { - sClass = 'icon-attachment'; - switch (this.attachmentsMainType()) - { - case 'image': - sClass = 'icon-image'; - break; - case 'archive': - sClass = 'icon-file-zip'; - break; - case 'doc': - sClass = 'icon-file-text'; - break; - case 'certificate': - sClass = 'icon-file-certificate'; - break; - } - } - return sClass; + return AttachmentModel.staticCombinedIconClass( + this.hasAttachments() ? this.attachmentsSpecData() : []); }, this); this.body = null; @@ -193,7 +174,7 @@ this.selected(false); this.checked(false); this.hasAttachments(false); - this.attachmentsMainType(''); + this.attachmentsSpecData([]); this.body = null; this.isHtml(false); @@ -287,7 +268,8 @@ this.dateTimeStampInUTC(Utils.pInt(oJsonMessage.DateTimeStampInUTC)); this.hasAttachments(!!oJsonMessage.HasAttachments); - this.attachmentsMainType(oJsonMessage.AttachmentsMainType); + this.attachmentsSpecData(Utils.isArray(oJsonMessage.AttachmentsSpecData) ? + oJsonMessage.AttachmentsSpecData : []); this.fromEmailString(MessageHelper.emailArrayToString(this.from, true)); this.fromClearEmailString(MessageHelper.emailArrayToStringClear(this.from)); @@ -337,7 +319,8 @@ } this.hasAttachments(!!oJsonMessage.HasAttachments); - this.attachmentsMainType(oJsonMessage.AttachmentsMainType); + this.attachmentsSpecData(Utils.isArray(oJsonMessage.AttachmentsSpecData) ? + oJsonMessage.AttachmentsSpecData : []); this.foundedCIDs = Utils.isArray(oJsonMessage.FoundedCIDs) ? oJsonMessage.FoundedCIDs : []; this.attachments(this.initAttachmentsFromJson(oJsonMessage.Attachments)); @@ -524,15 +507,6 @@ if (this.hasAttachments()) { aResult.push('withAttachments'); - switch (this.attachmentsMainType()) - { - case 'image': - aResult.push('imageOnlyAttachments'); - break; - case 'archive': - aResult.push('archiveOnlyAttachments'); - break; - } } if (this.newForAnimation()) { @@ -797,7 +771,7 @@ }; /** - * @returns {string} + * @return {string} */ MessageModel.prototype.generateUid = function () { @@ -850,7 +824,7 @@ this.selected(oMessage.selected()); this.checked(oMessage.checked()); this.hasAttachments(oMessage.hasAttachments()); - this.attachmentsMainType(oMessage.attachmentsMainType()); + this.attachmentsSpecData(oMessage.attachmentsSpecData()); this.body = null; diff --git a/dev/Model/MessageFull.js b/dev/Model/MessageFull.js index 92bfa5623..88c185ea6 100644 --- a/dev/Model/MessageFull.js +++ b/dev/Model/MessageFull.js @@ -29,8 +29,6 @@ MessageFullModel.prototype.requestHash = ''; MessageFullModel.prototype.proxy = false; MessageFullModel.prototype.hasAttachments = false; - MessageFullModel.prototype.attachmentsMainType = ''; - MessageFullModel.prototype.attachmentsClass = ''; MessageFullModel.prototype.clear = function () { @@ -43,37 +41,6 @@ this.proxy = false; this.hasAttachments = false; - this.attachmentsMainType = ''; - this.attachmentsClass = ''; - }; - - /** - * @return {string} - */ - MessageFullModel.prototype.getAttachmentsClass = function () - { - var sClass = ''; - if (this.hasAttachments) - { - sClass = 'icon-attachment'; - switch (this.attachmentsMainType) - { - case 'image': - sClass = 'icon-image'; - break; - case 'archive': - sClass = 'icon-file-zip'; - break; - case 'doc': - sClass = 'icon-file-text'; - break; - case 'certificate': - sClass = 'icon-file-certificate'; - break; - } - } - - return sClass; }; /** @@ -98,8 +65,6 @@ this.proxy = !!oJson.ExternalProxy; this.hasAttachments = !!oJson.HasAttachments; - this.attachmentsMainType = Utils.pString(oJson.AttachmentsMainType); - this.attachmentsClass = this.getAttachmentsClass(); bResult = true; } diff --git a/dev/Promises/User/Ajax.js b/dev/Promises/User/Ajax.js index 4051aa901..6dec2b76f 100644 --- a/dev/Promises/User/Ajax.js +++ b/dev/Promises/User/Ajax.js @@ -112,6 +112,14 @@ }); }; + UserAjaxUserPromises.prototype.attachmentsActions = function (sAction, aHashes, fTrigger) + { + return this.postRequest('AttachmentsActions', fTrigger, { + 'Action': sAction, + 'Hashes': aHashes + }); + }; + UserAjaxUserPromises.prototype.welcomeClose = function () { return this.postRequest('WelcomeClose'); diff --git a/dev/Settings/Admin/Licensing.js b/dev/Settings/Admin/Licensing.js index f8cf74c71..15bd709f5 100644 --- a/dev/Settings/Admin/Licensing.js +++ b/dev/Settings/Admin/Licensing.js @@ -57,7 +57,7 @@ }; /** - * @returns {boolean} + * @return {boolean} */ LicensingAdminSettings.prototype.licenseIsUnlim = function () { @@ -65,7 +65,7 @@ }; /** - * @returns {string} + * @return {string} */ LicensingAdminSettings.prototype.licenseExpiredMomentValue = function () { diff --git a/dev/Stores/User/Account.js b/dev/Stores/User/Account.js index a03007817..daf93bee0 100644 --- a/dev/Stores/User/Account.js +++ b/dev/Stores/User/Account.js @@ -59,7 +59,7 @@ }; /** - * @returns {boolean} + * @return {boolean} */ AccountUserStore.prototype.isRootAccount = function () { diff --git a/dev/Stores/User/Folder.js b/dev/Stores/User/Folder.js index dfa5c6b66..8b04773fe 100644 --- a/dev/Stores/User/Folder.js +++ b/dev/Stores/User/Folder.js @@ -182,7 +182,7 @@ /** * @param {boolean=} bBoot = false - * @returns {Array} + * @return {Array} */ FolderUserStore.prototype.getNextFolderNames = function (bBoot) { diff --git a/dev/Stores/User/Message.js b/dev/Stores/User/Message.js index 2a93eaa24..b8d5691c4 100644 --- a/dev/Stores/User/Message.js +++ b/dev/Stores/User/Message.js @@ -714,7 +714,7 @@ /** * @param {Array} aList - * @returns {string} + * @return {string} */ MessageUserStore.prototype.calculateMessageListHash = function (aList) { diff --git a/dev/Stores/User/Notification.js b/dev/Stores/User/Notification.js index b35c59ebd..e17e10821 100644 --- a/dev/Stores/User/Notification.js +++ b/dev/Stores/User/Notification.js @@ -142,7 +142,7 @@ NotificationUserStore.prototype.initNotificationPlayer = function () { - if (Audio && Audio.supported) + if (Audio && Audio.supportedNotification) { this.soundNotificationIsSupported(true); } @@ -155,7 +155,7 @@ NotificationUserStore.prototype.playSoundNotification = function (bSkipSetting) { - if (Audio && Audio.supported && (bSkipSetting ? true : this.enableSoundNotification())) + if (Audio && Audio.supportedNotification && (bSkipSetting ? true : this.enableSoundNotification())) { Audio.playNotification(); } diff --git a/dev/Stores/User/Pgp.js b/dev/Stores/User/Pgp.js index 979ab8976..a6e62e6e0 100644 --- a/dev/Stores/User/Pgp.js +++ b/dev/Stores/User/Pgp.js @@ -72,7 +72,7 @@ /** * @param {string} sEmail * @param {string=} sPassword - * @returns {?} + * @return {?} */ PgpUserStore.prototype.findPrivateKeyByEmail = function (sEmail, sPassword) { @@ -109,7 +109,7 @@ /** * @param {string=} sPassword - * @returns {?} + * @return {?} */ PgpUserStore.prototype.findSelfPrivateKey = function (sPassword) { diff --git a/dev/Styles/Animations.less b/dev/Styles/Animations.less index 968d2fa0a..fb9940869 100644 --- a/dev/Styles/Animations.less +++ b/dev/Styles/Animations.less @@ -21,6 +21,15 @@ 0% {background-position: 0 0;} 100% {background-position: 60px 0;} } +@keyframes login-form-shake { + 0% {transform: translateX(0);} + 12.5% {transform: translateX(-6px) rotateY(-5deg)} + 37.5% {transform: translateX(5px) rotateY(4deg)} + 62.5% {transform: translateX(-3px) rotateY(-2deg)} + 87.5% {transform: translateX(2px) rotateY(1deg)} + 100% {transform: translateX(0)} +} + html.csstransitions.rl-started-trigger.no-mobile .b-login-content .loginFormWrapper { /*transform: scale(1.1);*/ transform: translateY(-20px); @@ -56,6 +65,14 @@ html.csstransitions.rl-started-trigger.no-mobile .b-login-content .loginFormWrap } } + &.cssanimations.csstransitions.no-mobile .b-login-content .errorAnimated { + animation: login-form-shake 400ms ease-in-out; + } + + &.cssanimations.csstransitions.no-mobile .b-login-content .afterLoginHide { + opacity: 0; + } + /* &.csstransitions.no-mobile #rl-content { .transition(opacity 0.3s ease-out); }*/ diff --git a/dev/Styles/Attachmnets.less b/dev/Styles/Attachmnets.less index 9c9bf6d49..282a5cc05 100644 --- a/dev/Styles/Attachmnets.less +++ b/dev/Styles/Attachmnets.less @@ -16,7 +16,7 @@ box-shadow: 0 1px 5px rgba(0, 0, 0, 0.2); box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.04), 0 1px 5px rgba(0, 0, 0, 0.1); - border-radius: 2px; + border-radius: 3px; &.waiting { opacity: 0.6; @@ -120,6 +120,15 @@ color: #aaa; } + .attachmentIcon { + &.icon-none { + display: none; + } + &.icon-file-certificate { + margin-left: 15px; + } + } + .attachmentIconText { display: inline-block; font-size: 28px; @@ -131,15 +140,13 @@ font-style: normal; } - .attachmentIcon.icon-none { - display: none; - } - +/* .attachmentIconParent.hasPreview.isImage { .iconMain { display: none; } } +*/ .attachmentIconParent.hasPreview:hover { .iconPreview { diff --git a/dev/Styles/Login.less b/dev/Styles/Login.less index 0fc1d0095..2a913bb65 100644 --- a/dev/Styles/Login.less +++ b/dev/Styles/Login.less @@ -9,6 +9,7 @@ display: inline-block; vertical-align: middle; text-align: center; + perspective: 500px; .descWrapper { diff --git a/dev/Styles/MessageList.less b/dev/Styles/MessageList.less index 6d51ce18e..4c7dba60a 100644 --- a/dev/Styles/MessageList.less +++ b/dev/Styles/MessageList.less @@ -322,7 +322,7 @@ html.rl-no-preview-pane { &.e-single-line .attachmentParent { float: left; - margin: 0 5px 0 0; + margin: 0 8px 0 0; } .senderParent { diff --git a/dev/Styles/Ui.less b/dev/Styles/Ui.less index 94e44bad7..dbfa7b86b 100644 --- a/dev/Styles/Ui.less +++ b/dev/Styles/Ui.less @@ -230,4 +230,4 @@ html.cssanimations { .command.command-disabled.hide-on-disabled-command { display:none; -} \ No newline at end of file +} diff --git a/dev/Styles/_End.less b/dev/Styles/_End.less index b6838cf11..5fcebedea 100644 --- a/dev/Styles/_End.less +++ b/dev/Styles/_End.less @@ -33,6 +33,7 @@ } .opentip-container { + z-index: 2001 !important; .ot-content { font-size: 13px; @@ -41,4 +42,30 @@ &.style-rainloopErrorTip .ot-content { color: red; } + + &.ot-show-effect-none, &.ot-hide-effect-none { + transition: none !important; + } + + &.ot-show-effect-fade { + + transition: none; + + &.ot-hidden { + opacity: 0; + } + + &.ot-going-to-show { + opacity: 0; + transition: opacity 0.2s ease-in-out; + } + &.ot-showing { + opacity: 1; + transition: opacity 0.2s ease-in-out; + } + &.ot-visible { + opacity: 1; + transition: none; + } + } } diff --git a/dev/View/Admin/Login.js b/dev/View/Admin/Login.js index bad88f134..e6a64c8ec 100644 --- a/dev/View/Admin/Login.js +++ b/dev/View/Admin/Login.js @@ -34,8 +34,17 @@ this.loginError = ko.observable(false); this.passwordError = ko.observable(false); + this.loginErrorAnimation = ko.observable(false).extend({'falseTimeout': 500}); + this.passwordErrorAnimation = ko.observable(false).extend({'falseTimeout': 500}); + this.loginFocus = ko.observable(false); + this.formHidden = ko.observable(false); + + this.formError = ko.computed(function () { + return this.loginErrorAnimation() || this.passwordErrorAnimation(); + }, this); + this.login.subscribe(function () { this.loginError(false); }, this); @@ -44,6 +53,14 @@ this.passwordError(false); }, this); + this.loginError.subscribe(function (bV) { + this.loginErrorAnimation(!!bV); + }, this); + + this.passwordError.subscribe(function (bV) { + this.passwordErrorAnimation(!!bV); + }, this); + this.submitRequest = ko.observable(false); this.submitError = ko.observable(''); @@ -51,6 +68,9 @@ Utils.triggerAutocompleteInputChange(); + this.loginError(false); + this.passwordError(false); + this.loginError('' === Utils.trim(this.login())); this.passwordError('' === Utils.trim(this.password())); @@ -67,6 +87,7 @@ { if (oData.Result) { + this.formHidden(true); require('App/Admin').loginAndLogoutReload(true); } else if (oData.ErrorCode) diff --git a/dev/View/Popup/Activate.js b/dev/View/Popup/Activate.js index 2ea41f2d3..b48f3073a 100644 --- a/dev/View/Popup/Activate.js +++ b/dev/View/Popup/Activate.js @@ -137,7 +137,7 @@ }; /** - * @returns {boolean} + * @return {boolean} */ ActivatePopupView.prototype.validateSubscriptionKey = function () { diff --git a/dev/View/Popup/Compose.js b/dev/View/Popup/Compose.js index 9640a981e..42b8bf4ab 100644 --- a/dev/View/Popup/Compose.js +++ b/dev/View/Popup/Compose.js @@ -995,7 +995,7 @@ * * @param {Array} aList * @param {boolean} bFriendly - * @returns {string} + * @return {string} */ ComposePopupView.prototype.emailArrayToStringLineHelper = function (aList, bFriendly) { diff --git a/dev/View/User/Login.js b/dev/View/User/Login.js index 406c1492d..f2ea8c45b 100644 --- a/dev/View/User/Login.js +++ b/dev/View/User/Login.js @@ -42,6 +42,7 @@ this.additionalCode = ko.observable(''); this.additionalCode.error = ko.observable(false); + this.additionalCode.errorAnimation = ko.observable(false).extend({'falseTimeout': 500}); this.additionalCode.focused = ko.observable(false); this.additionalCode.visibility = ko.observable(false); this.additionalCodeSignMe = ko.observable(false); @@ -56,6 +57,16 @@ this.emailError = ko.observable(false); this.passwordError = ko.observable(false); + this.emailErrorAnimation = ko.observable(false).extend({'falseTimeout': 500}); + this.passwordErrorAnimation = ko.observable(false).extend({'falseTimeout': 500}); + + this.formHidden = ko.observable(false); + + this.formError = ko.computed(function () { + return this.emailErrorAnimation() || this.passwordErrorAnimation() || + (this.additionalCode.visibility() && this.additionalCode.errorAnimation()); + }, this); + this.emailFocus = ko.observable(false); this.passwordFocus = ko.observable(false); this.submitFocus = ko.observable(false); @@ -78,6 +89,18 @@ this.additionalCode.error(false); }, this); + this.emailError.subscribe(function (bV) { + this.emailErrorAnimation(!!bV); + }, this); + + this.passwordError.subscribe(function (bV) { + this.passwordErrorAnimation(!!bV); + }, this); + + this.additionalCode.error.subscribe(function (bV) { + this.additionalCode.errorAnimation(!!bV); + }, this); + this.submitRequest = ko.observable(false); this.submitError = ko.observable(''); this.submitErrorAddidional = ko.observable(''); @@ -115,16 +138,34 @@ Utils.triggerAutocompleteInputChange(); + this.emailError(false); + this.passwordError(false); + this.emailError('' === Utils.trim(this.email())); this.passwordError('' === Utils.trim(this.password())); if (this.additionalCode.visibility()) { + this.additionalCode.error(false); this.additionalCode.error('' === Utils.trim(this.additionalCode())); } - if (this.emailError() || this.passwordError() || this.additionalCode.error()) + if (this.emailError() || this.passwordError() || + (this.additionalCode.visibility() && this.additionalCode.error())) { + switch (true) + { + case this.emailError(): + this.emailFocus(true); + break; + case this.passwordError(): + this.passwordFocus(true); + break; + case this.additionalCode.visibility() && this.additionalCode.error(): + this.additionalCode.focused(true); + break; + } + return false; } @@ -172,10 +213,12 @@ } else if (oData.Admin) { + this.formHidden(true); require('App/User').redirectToAdminPanel(); } else { + this.formHidden(true); require('App/User').loginAndLogoutReload(false); } } @@ -339,6 +382,8 @@ if (0 === iErrorCode) { self.submitRequest(true); + self.formHidden(true); + require('App/User').loginAndLogoutReload(false); } else diff --git a/dev/View/User/MailBox/MessageList.js b/dev/View/User/MailBox/MessageList.js index 977895412..cd254167f 100644 --- a/dev/View/User/MailBox/MessageList.js +++ b/dev/View/User/MailBox/MessageList.js @@ -374,7 +374,7 @@ }; /** - * @returns {string} + * @return {string} */ MessageListMailBoxUserView.prototype.printableMessageCountForDeletion = function () { diff --git a/dev/View/User/MailBox/MessageView.js b/dev/View/User/MailBox/MessageView.js index ce4b99dc7..92315b3c1 100644 --- a/dev/View/User/MailBox/MessageView.js +++ b/dev/View/User/MailBox/MessageView.js @@ -82,6 +82,10 @@ this.allowAttachmnetControls = ko.observable(false); this.showAttachmnetControls = ko.observable(false); + this.downloadAsZipLoading = ko.observable(false); + this.saveToOwnCloudLoading = ko.observable(false); + this.saveToDropboxLoading = ko.observable(false); + this.showAttachmnetControls.subscribe(function (bV) { if (this.message()) { @@ -115,12 +119,6 @@ this.moreDropdownTrigger = ko.observable(false); this.messageDomFocused = ko.observable(false).extend({'rateLimit': 0}); - // TODO -// ko.computed(function () { -// window.console.log('focus:' + AppStore.focusedState() + ', dom:' + -// this.messageDomFocused() + ', key:' + Globals.keyScope() + ' ~ ' + Globals.keyScopeReal()); -// }, this).extend({'throttle': 1}); - this.messageVisibility = ko.computed(function () { return !this.messageLoadingThrottle() && !!this.message(); }, this); @@ -759,9 +757,20 @@ } var oAttachment = ko.dataFor(this); - if (oAttachment && oAttachment.isMp3() && Audio.supported) + if (oAttachment && Audio.supported) { - Audio.playMp3(oAttachment.linkDownload(), oAttachment.fileName); + switch (true) + { + case Audio.supportedMp3 && oAttachment.isMp3(): + Audio.playMp3(oAttachment.linkDownload(), oAttachment.fileName); + break; + case Audio.supportedOgg && oAttachment.isOgg(): + Audio.playOgg(oAttachment.linkDownload(), oAttachment.fileName); + break; + case Audio.supportedWav && oAttachment.isWav(): + Audio.playWav(oAttachment.linkDownload(), oAttachment.fileName); + break; + } } }) .on('click', '.thread-list .more-threads', function (e) { @@ -1107,6 +1116,40 @@ } }; + MessageViewMailBoxUserView.prototype.getAttachmentsHashes = function () + { + return _.compact(_.map(this.message() ? this.message().attachments() : [], function (oItem) { + return oItem && oItem.checked() ? oItem.download : ''; + })); + }; + + MessageViewMailBoxUserView.prototype.downloadAsZip = function () + { + var aHashes = this.getAttachmentsHashes(); + if (0 < aHashes.length) + { + Promises.attachmentsActions('Zip', aHashes, this.downloadAsZipLoading); + } + }; + + MessageViewMailBoxUserView.prototype.saveToOwnCloud = function () + { + var aHashes = this.getAttachmentsHashes(); + if (0 < aHashes.length) + { + Promises.attachmentsActions('OwnCloud', aHashes, this.saveToOwnCloudLoading); + } + }; + + MessageViewMailBoxUserView.prototype.saveToDropbox = function () + { + var aHashes = this.getAttachmentsHashes(); + if (0 < aHashes.length) + { + Promises.attachmentsActions('Dropbox', aHashes, this.saveToDropboxLoading); + } + }; + /** * @param {MessageModel} oMessage */ @@ -1119,7 +1162,7 @@ }; /** - * @returns {string} + * @return {string} */ MessageViewMailBoxUserView.prototype.printableCheckedMessageCount = function () { diff --git a/package.json b/package.json index 405ddf101..dd25eb718 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "RainLoop", "title": "RainLoop Webmail", "version": "1.8.3", - "release": "298", + "release": "301", "description": "Simple, modern & fast web-based email client", "homepage": "http://rainloop.net", "main": "gulpfile.js", diff --git a/rainloop/v/0.0.0/app/libraries/MailSo/Mail/AttachmentCollection.php b/rainloop/v/0.0.0/app/libraries/MailSo/Mail/AttachmentCollection.php index 0a603170a..5cc64b576 100644 --- a/rainloop/v/0.0.0/app/libraries/MailSo/Mail/AttachmentCollection.php +++ b/rainloop/v/0.0.0/app/libraries/MailSo/Mail/AttachmentCollection.php @@ -58,62 +58,17 @@ class AttachmentCollection extends \MailSo\Base\Collection } /** - * @return int + * @return array */ - public function ImageCount() + public function SpecData() { - $aList = $this->FilterList(function ($oAttachment) { - return $oAttachment && $oAttachment->IsImage(); + return $this->MapList(function ($oAttachment) { + if ($oAttachment) + { + return array($oAttachment->FileName(true), $oAttachment->MimeType()); + } + + return null; }); - - return \is_array($aList) ? \count($aList) : 0; - } - - /** - * @return int - */ - public function ArchiveCount() - { - $aList = $this->FilterList(function ($oAttachment) { - return $oAttachment && $oAttachment->IsArchive(); - }); - - return \is_array($aList) ? \count($aList) : 0; - } - - /** - * @return int - */ - public function PdfCount() - { - $aList = $this->FilterList(function ($oAttachment) { - return $oAttachment && $oAttachment->IsPdf(); - }); - - return \is_array($aList) ? \count($aList) : 0; - } - - /** - * @return int - */ - public function DocCount() - { - $aList = $this->FilterList(function ($oAttachment) { - return $oAttachment && $oAttachment->IsDoc(); - }); - - return \is_array($aList) ? \count($aList) : 0; - } - - /** - * @return int - */ - public function CertificateCount() - { - $aList = $this->FilterList(function ($oAttachment) { - return $oAttachment && $oAttachment->IsPgpSignature(); - }); - - return \is_array($aList) ? \count($aList) : 0; } } diff --git a/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php b/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php index 9e5b785db..713062acf 100644 --- a/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php +++ b/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php @@ -2630,6 +2630,17 @@ class Actions return $this->FalseResponse(__FUNCTION__); } + /** + * @return array + * + * @throws \MailSo\Base\Exceptions\Exception + */ + public function DoAttachmentsActions() + { + \sleep(1); + return $this->TrueResponse(__FUNCTION__); + } + /** * @return array * @@ -9079,28 +9090,7 @@ class Actions $iAttachmentsCount = $oAttachments ? $oAttachments->Count() : 0; $mResult['HasAttachments'] = 0 < $iAttachmentsCount; - $mResult['AttachmentsMainType'] = ''; - if (0 < $iAttachmentsCount) - { - switch (true) - { - case $iAttachmentsCount === $oAttachments->ImageCount(): - $mResult['AttachmentsMainType'] = 'image'; - break; - case $iAttachmentsCount === $oAttachments->ArchiveCount(): - $mResult['AttachmentsMainType'] = 'archive'; - break; - case $iAttachmentsCount === $oAttachments->PdfCount(): - $mResult['AttachmentsMainType'] = 'pdf'; - break; - case $iAttachmentsCount === $oAttachments->DocCount(): - $mResult['AttachmentsMainType'] = 'doc'; - break; - case $iAttachmentsCount === $oAttachments->CertificateCount(): - $mResult['AttachmentsMainType'] = 'certificate'; - break; - } - } + $mResult['AttachmentsSpecData'] = $mResult['HasAttachments'] ? $oAttachments->SpecData() : array(); $sSubject = $mResult['Subject']; $mResult['Hash'] = \md5($mResult['Folder'].$mResult['Uid']); diff --git a/rainloop/v/0.0.0/app/templates/Views/Admin/AdminLogin.html b/rainloop/v/0.0.0/app/templates/Views/Admin/AdminLogin.html index 1d4b36e3b..1dc30c7c2 100644 --- a/rainloop/v/0.0.0/app/templates/Views/Admin/AdminLogin.html +++ b/rainloop/v/0.0.0/app/templates/Views/Admin/AdminLogin.html @@ -1,14 +1,16 @@
diff --git a/rainloop/v/0.0.0/app/templates/Views/User/SettingsGeneral.html b/rainloop/v/0.0.0/app/templates/Views/User/SettingsGeneral.html index 6af2aefee..0bae61a34 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/SettingsGeneral.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/SettingsGeneral.html @@ -12,7 +12,7 @@ - +   
-    - +   +
From 19f06c11d276c746245abb34908349b0079d6987 Mon Sep 17 00:00:00 2001 From: RainLoop Team Date: Sun, 26 Apr 2015 02:01:56 +0400 Subject: [PATCH 25/33] Added new language strings --- build/langs.php | 2 +- dev/App/User.js | 13 +- dev/Model/Folder.js | 9 +- dev/Remote/User/Ajax.js | 13 + dev/Settings/User/Folders.js | 35 + dev/Stores/User/Folder.js | 12 +- dev/Styles/SettingsFolders.less | 6 +- .../0.0.0/app/libraries/RainLoop/Actions.php | 90 +- .../templates/Views/User/MailMessageView.html | 12 +- .../Views/User/SettingsFolderItem.html | 12 +- .../templates/Views/User/SettingsFolders.html | 76 +- rainloop/v/0.0.0/langs/bg.ini | 8 +- rainloop/v/0.0.0/langs/cs.ini | 8 +- rainloop/v/0.0.0/langs/de.ini | 6 + rainloop/v/0.0.0/langs/en-gb.ini | 8 +- rainloop/v/0.0.0/langs/en.ini | 8 +- rainloop/v/0.0.0/langs/es.ini | 8 +- rainloop/v/0.0.0/langs/fr.ini | 8 +- rainloop/v/0.0.0/langs/hu.ini | 8 +- rainloop/v/0.0.0/langs/is.ini | 8 +- rainloop/v/0.0.0/langs/it.ini | 8 +- rainloop/v/0.0.0/langs/ja-jp.ini | 8 +- rainloop/v/0.0.0/langs/ko-kr.ini | 8 +- rainloop/v/0.0.0/langs/lt.ini | 6 + rainloop/v/0.0.0/langs/lv.ini | 8 +- rainloop/v/0.0.0/langs/nl.ini | 1154 +++++++++-------- rainloop/v/0.0.0/langs/no.ini | 8 +- rainloop/v/0.0.0/langs/pl.ini | 6 + rainloop/v/0.0.0/langs/pt-br.ini | 6 + rainloop/v/0.0.0/langs/pt-pt.ini | 6 + rainloop/v/0.0.0/langs/ro.ini | 8 +- rainloop/v/0.0.0/langs/ru.ini | 8 +- rainloop/v/0.0.0/langs/sk.ini | 8 +- rainloop/v/0.0.0/langs/sv.ini | 8 +- rainloop/v/0.0.0/langs/tr.ini | 8 +- rainloop/v/0.0.0/langs/ua.ini | 8 +- rainloop/v/0.0.0/langs/zh-cn.ini | 8 +- rainloop/v/0.0.0/langs/zh-tw.ini | 8 +- .../v/0.0.0/static/css/fonts/rainloop.eot | Bin 19444 -> 19656 bytes .../v/0.0.0/static/css/fonts/rainloop.svg | 1 + .../v/0.0.0/static/css/fonts/rainloop.ttf | Bin 19276 -> 19488 bytes .../v/0.0.0/static/css/fonts/rainloop.woff | Bin 13492 -> 13704 bytes vendors/fontastic/fonts/rainloop.eot | Bin 19444 -> 19656 bytes vendors/fontastic/fonts/rainloop.svg | 1 + vendors/fontastic/fonts/rainloop.ttf | Bin 19276 -> 19488 bytes vendors/fontastic/fonts/rainloop.woff | Bin 13492 -> 13704 bytes vendors/fontastic/icons-reference.html | 8 + vendors/fontastic/styles.css | 3 + 48 files changed, 996 insertions(+), 649 deletions(-) diff --git a/build/langs.php b/build/langs.php index 9d6248989..339c8bc88 100644 --- a/build/langs.php +++ b/build/langs.php @@ -48,7 +48,7 @@ function saveLangStructure($sLangFile, $aLang) } } - \file_put_contents(LANGS_PATH.'/'.$sLangFile, implode("\n", $aResultLines)); + \file_put_contents(LANGS_PATH.'/'.$sLangFile, implode("\n", $aResultLines)."\n"); } $sNL = "\n"; diff --git a/dev/App/User.js b/dev/App/User.js index 59fc7b98f..238016086 100644 --- a/dev/App/User.js +++ b/dev/App/User.js @@ -97,6 +97,12 @@ Events.pub('interval.20m'); }, 60000 * 15); + window.setTimeout(function () { + window.setInterval(function () { + Events.pub('interval.2m-after5m'); + }, 60000 * 2); + }, 60000 * 5); + window.setTimeout(function () { window.setInterval(function () { Events.pub('interval.5m-after5m'); @@ -763,7 +769,7 @@ var self = this, iUtc = Momentor.momentNowUnix(), - aFolders = FolderStore.getNextFolderNames(bBoot) + aFolders = FolderStore.getNextFolderNames() ; if (Utils.isNonEmptyArray(aFolders)) @@ -833,7 +839,8 @@ }); if (bBoot) - { _.delay(function () { + { + _.delay(function () { self.folderInformationMultiply(true); }, 2000); } @@ -1361,7 +1368,7 @@ } }); - Events.sub('interval.5m-after5m', function () { + Events.sub('interval.2m-after5m', function () { self.folderInformationMultiply(); }); diff --git a/dev/Model/Folder.js b/dev/Model/Folder.js index 668fec202..68a71214e 100644 --- a/dev/Model/Folder.js +++ b/dev/Model/Folder.js @@ -43,6 +43,7 @@ this.edited = ko.observable(false); this.collapsed = ko.observable(true); this.subScribed = ko.observable(true); + this.checkable = ko.observable(false); this.subFolders = ko.observableArray([]); this.deleteAccess = ko.observable(false); this.actionBlink = ko.observable(false).extend({'falseTimeout': 1000}); @@ -105,6 +106,7 @@ }, this); this.hidden = ko.computed(function () { + var bSystem = this.isSystemFolder(), bSubFolders = this.hasSubScribedSubfolders() @@ -182,6 +184,8 @@ return !this.isSystemFolder() && this.selectable && sInboxFolderName !== this.fullNameRaw; }, this); + this.canBeChecked = this.canBeSubScribed; + // this.visible.subscribe(function () { // Utils.timeOutAction('folder-list-folder-visibility-change', function () { // Globals.$win.trigger('folder-list-folder-visibility-change'); @@ -281,7 +285,8 @@ }); this.hasUnreadMessages = ko.computed(function () { - return 0 < this.messageCountUnread(); + return 0 < this.messageCountUnread() && + (this.isSystemFolder() || this.checkable()); }, this); this.hasSubScribedUnreadMessagesSubfolders = ko.computed(function () { @@ -352,6 +357,8 @@ this.existen = !!oJsonFolder.IsExists; this.subScribed(!!oJsonFolder.IsSubscribed); + this.checkable(!!oJsonFolder.Checkable); + this.type(sInboxFolderName === this.fullNameRaw ? Enums.FolderType.Inbox : Enums.FolderType.User); bResult = true; diff --git a/dev/Remote/User/Ajax.js b/dev/Remote/User/Ajax.js index 9aa3408f0..e5ae6c606 100644 --- a/dev/Remote/User/Ajax.js +++ b/dev/Remote/User/Ajax.js @@ -708,6 +708,19 @@ }); }; + /** + * @param {?Function} fCallback + * @param {string} sFolderFullNameRaw + * @param {boolean} bCheckable + */ + RemoteUserAjax.prototype.folderSetCheckable = function (fCallback, sFolderFullNameRaw, bCheckable) + { + this.defaultRequest(fCallback, 'FolderCheckable', { + 'Folder': sFolderFullNameRaw, + 'Checkable': bCheckable ? '1' : '0' + }); + }; + /** * @param {?Function} fCallback * @param {string} sFolder diff --git a/dev/Settings/User/Folders.js b/dev/Settings/User/Folders.js index c5812c9ed..7886eb87a 100644 --- a/dev/Settings/User/Folders.js +++ b/dev/Settings/User/Folders.js @@ -28,6 +28,8 @@ { this.folderList = FolderStore.folderList; + this.folderListHelp = ko.observable('').extend({'throttle': 100}); + this.loading = ko.computed(function () { var @@ -95,6 +97,25 @@ FolderStore.folderList.error(''); }; + FoldersUserSettings.prototype.onBuild = function (oDom) + { + var self = this; + oDom + .on('mouseover', '.delete-folder-parent', function () { + self.folderListHelp(Translator.i18n('SETTINGS_FOLDERS/HELP_DELETE_FOLDER')); + }) + .on('mouseover', '.subscribe-folder-parent', function () { + self.folderListHelp(Translator.i18n('SETTINGS_FOLDERS/HELP_SHOW_HIDE_FOLDER')); + }) + .on('mouseover', '.check-folder-parent', function () { + self.folderListHelp(Translator.i18n('SETTINGS_FOLDERS/HELP_SHOW_HIDE_FOLDER_COUNT')); + }) + .on('mouseout', '.subscribe-folder-parent, .check-folder-parent, .delete-folder-parent', function () { + self.folderListHelp(''); + }) + ; + }; + FoldersUserSettings.prototype.createFolder = function () { require('Knoin/Knoin').showScreenPopup(require('View/Popup/FolderCreate')); @@ -160,6 +181,20 @@ oFolder.subScribed(false); }; + FoldersUserSettings.prototype.checkableTrueFolder = function (oFolder) + { + Remote.folderSetCheckable(Utils.emptyFunction, oFolder.fullNameRaw, true); + + oFolder.checkable(true); + }; + + FoldersUserSettings.prototype.checkableFalseFolder = function (oFolder) + { + Remote.folderSetCheckable(Utils.emptyFunction, oFolder.fullNameRaw, false); + + oFolder.checkable(false); + }; + module.exports = FoldersUserSettings; }()); \ No newline at end of file diff --git a/dev/Stores/User/Folder.js b/dev/Stores/User/Folder.js index 8b04773fe..68b87d794 100644 --- a/dev/Stores/User/Folder.js +++ b/dev/Stores/User/Folder.js @@ -181,13 +181,10 @@ }; /** - * @param {boolean=} bBoot = false * @return {Array} */ - FolderUserStore.prototype.getNextFolderNames = function (bBoot) + FolderUserStore.prototype.getNextFolderNames = function () { - bBoot = Utils.isUnd(bBoot) ? false : !!bBoot; - var aResult = [], iLimit = 5, @@ -200,7 +197,8 @@ if (oFolder && sInboxFolderName !== oFolder.fullNameRaw && oFolder.selectable && oFolder.existen && iTimeout > oFolder.interval && - (!bBoot || oFolder.subScribed())) + (oFolder.isSystemFolder() || (oFolder.subScribed() && oFolder.checkable())) + ) { aTimeouts.push([oFolder.interval, oFolder.fullNameRaw]); } @@ -236,7 +234,9 @@ return iLimit <= aResult.length; }); - return _.uniq(aResult); + aResult = _.uniq(aResult); + + return aResult; }; module.exports = new FolderUserStore(); diff --git a/dev/Styles/SettingsFolders.less b/dev/Styles/SettingsFolders.less index 734f0e026..8f18ef151 100644 --- a/dev/Styles/SettingsFolders.less +++ b/dev/Styles/SettingsFolders.less @@ -86,7 +86,7 @@ } } - .delete-folder, .subscribe-folder, .unsubscribe-folder { + .delete-folder, .subscribe-folder, .unsubscribe-folder, .check-folder, .uncheck-folder { cursor: pointer; opacity: 0.6; } @@ -94,6 +94,10 @@ .unsubscribe-folder { opacity: 0.2; } + + .uncheck-folder { + opacity: 0.1; + } } .folder-padding.deep-1 { diff --git a/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php b/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php index bd3962b36..c86096688 100644 --- a/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php +++ b/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php @@ -5480,12 +5480,12 @@ class Actions { $this->initMailClientConnection(); - $sFolderNameInUtf = $this->GetActionParam('Folder', ''); + $sFolderFullNameRaw = $this->GetActionParam('Folder', ''); $bSubscribe = '1' === (string) $this->GetActionParam('Subscribe', '0'); try { - $this->MailClient()->FolderSubscribe($sFolderNameInUtf, !!$bSubscribe); + $this->MailClient()->FolderSubscribe($sFolderFullNameRaw, !!$bSubscribe); } catch (\Exception $oException) { @@ -5502,6 +5502,51 @@ class Actions return $this->TrueResponse(__FUNCTION__); } + /** + * @return array + */ + public function DoFolderCheckable() + { + $oAccount = $this->getAccountFromToken(); + + $sFolderFullNameRaw = $this->GetActionParam('Folder', ''); + $bCheckable = '1' === (string) $this->GetActionParam('Checkable', '0'); + + $oSettingsLocal = $this->SettingsProvider(true)->Load($oAccount); + + $sCheckableFolder = $oSettingsLocal->GetConf('CheckableFolder', '[]'); + $aCheckableFolder = @\json_decode($sCheckableFolder); + + if (!\is_array($aCheckableFolder)) + { + $aCheckableFolder = array(); + } + + if ($bCheckable) + { + $aCheckableFolder[] = $sFolderFullNameRaw; + } + else + { + $aCheckableFolderNew = array(); + foreach ($aCheckableFolder as $sFolder) + { + if ($sFolder !== $sFolderFullNameRaw) + { + $aCheckableFolderNew[] = $sFolder; + } + } + $aCheckableFolder = $aCheckableFolderNew; + } + + $aCheckableFolder = \array_unique($aCheckableFolder); + + $oSettingsLocal->SetConf('CheckableFolder', @\json_encode($aCheckableFolder)); + + return $this->DefaultResponse(__FUNCTION__, + $this->SettingsProvider(true)->Save($oAccount, $oSettingsLocal)); + } + /** * @return array * @@ -9306,17 +9351,49 @@ class Actions if (\is_object($mResponse)) { $bHook = true; + $self = $this; $sClassName = \get_class($mResponse); $bHasSimpleJsonFunc = \method_exists($mResponse, 'ToSimpleJSON'); $bThumb = $this->GetCapa(false, \RainLoop\Enumerations\Capa::ATTACHMENT_THUMBNAILS); + $oAccountCache = null; + $fGetAccount = function () use ($self, &$oAccountCache) { + if (null === $oAccountCache) + { + $oAccount = $self->getAccountFromToken(false); + $oAccountCache = $oAccount; + } + + return $oAccountCache; + }; + + $aCheckableFoldersCache = null; + $fGetCheckableFolder = function () use ($self, &$aCheckableFoldersCache) { + if (null === $aCheckableFoldersCache) + { + $oAccount = $self->getAccountFromToken(false); + + $oSettingsLocal = $self->SettingsProvider(true)->Load($oAccount); + $sCheckable = $oSettingsLocal->GetConf('CheckableFolder', '[]'); + $aCheckable = @\json_decode($sCheckable); + if (!\is_array($aCheckable)) + { + $aCheckable = array(); + } + + $aCheckableFoldersCache = $aCheckable; + } + + return $aCheckableFoldersCache; + }; + if ($bHasSimpleJsonFunc) { $mResult = \array_merge($this->objectData($mResponse, $sParent, $aParameters), $mResponse->ToSimpleJSON(true)); } else if ('MailSo\Mail\Message' === $sClassName) { - $oAccount = $this->getAccountFromToken(false); + $oAccount = call_user_func($fGetAccount); $mResult = \array_merge($this->objectData($mResponse, $sParent, $aParameters), array( 'Folder' => $mResponse->Folder(), @@ -9591,6 +9668,12 @@ class Actions ); } + $aCheckableFolder = \call_user_func($fGetCheckableFolder); + if (!\is_array($aCheckableFolder)) + { + $aCheckableFolder = array(); + } + $mResult = \array_merge($this->objectData($mResponse, $sParent, $aParameters), array( 'Name' => $mResponse->Name(), 'FullName' => $mResponse->FullName(), @@ -9602,6 +9685,7 @@ class Actions 'IsExists' => $mResponse->IsExists(), 'IsSelectable' => $mResponse->IsSelectable(), 'Flags' => $mResponse->FlagsLowerCase(), + 'Checkable' => \in_array($mResponse->FullNameRaw(), $aCheckableFolder), 'Extended' => $aExtended, 'SubFolders' => $this->responseObject($mResponse->SubFolders(), $sParent, $aParameters) )); diff --git a/rainloop/v/0.0.0/app/templates/Views/User/MailMessageView.html b/rainloop/v/0.0.0/app/templates/Views/User/MailMessageView.html index c7079590f..b44732da8 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/MailMessageView.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/MailMessageView.html @@ -377,7 +377,9 @@    - Download as zip + + + @@ -387,7 +389,9 @@    - Save to ownCloud + + + @@ -397,7 +401,9 @@    - Save to Dropbox + + + diff --git a/rainloop/v/0.0.0/app/templates/Views/User/SettingsFolderItem.html b/rainloop/v/0.0.0/app/templates/Views/User/SettingsFolderItem.html index a82905374..a32889f01 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/SettingsFolderItem.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/SettingsFolderItem.html @@ -12,12 +12,12 @@ - + - + @@ -25,5 +25,13 @@ + + + + + + + + \ No newline at end of file diff --git a/rainloop/v/0.0.0/app/templates/Views/User/SettingsFolders.html b/rainloop/v/0.0.0/app/templates/Views/User/SettingsFolders.html index 5f0ca4ef5..e83c412aa 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/SettingsFolders.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/SettingsFolders.html @@ -1,37 +1,45 @@ -
-
-
- -     - +
+
+
+
+ +     + +
+
+ + +    + + +    + + +    + + +
+ +
+ +
+
+ + +
+ + + + + + + + +
+
+
+
+
- - -    - - -    - - -    - - -
- -
- -
-
- - -
- - - - - - - -
\ No newline at end of file diff --git a/rainloop/v/0.0.0/langs/bg.ini b/rainloop/v/0.0.0/langs/bg.ini index 36f55bc0e..722515d0b 100644 --- a/rainloop/v/0.0.0/langs/bg.ini +++ b/rainloop/v/0.0.0/langs/bg.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Изберете съобщение, за да го вид PGP_PASSWORD_INPUT_PLACEHOLDER = "Парола" PGP_SIGNED_MESSAGE_DESC = "OpenPGP signed message (click to verify)" PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP encrypted message (click to decrypt)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Обратна разписка (displayed) - %SUBJECT%" @@ -552,6 +555,9 @@ RENAMING_PROCESS = "Renaming a folder" DELETING_ASK = "Are you sure?" TO_MANY_FOLDERS_DESC_1 = "You have too many folders!" TO_MANY_FOLDERS_DESC_2 = "We have shown only a part of them, to avoid performance problems." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Списък с акаунти" @@ -710,4 +716,4 @@ NO_COOKIE_DESC = "Поддръжката на Бисквитки не е нал Моля, разрешете поддръжката на Бисквитки в настройките на вашия браузър и опитайте отново." BAD_BROWSER_TITLE = "Вашият браузър е остарял." BAD_BROWSER_DESC = "За да използвате всички функции на приложението, -изтеглете и инсталирайте един от тези браузъри:" \ No newline at end of file +изтеглете и инсталирайте един от тези браузъри:" diff --git a/rainloop/v/0.0.0/langs/cs.ini b/rainloop/v/0.0.0/langs/cs.ini index aeadb23c7..76b3bf98c 100644 --- a/rainloop/v/0.0.0/langs/cs.ini +++ b/rainloop/v/0.0.0/langs/cs.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Vyberte zprávu ze seznamu pro její zobrazení zde." PGP_PASSWORD_INPUT_PLACEHOLDER = "Heslo" PGP_SIGNED_MESSAGE_DESC = "Zpráva podepsaná OpenPGP (klikněte pro ověření)" PGP_ENCRYPTED_MESSAGE_DESC = "Zpráva šifrovaná OpenPGP (klikněte pro dešifraci)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Potvrzení o zobrazení zprávy - %SUBJECT%" @@ -551,6 +554,9 @@ RENAMING_PROCESS = "Přejmenovávam složku" DELETING_ASK = "Opravdu to chcete?" TO_MANY_FOLDERS_DESC_1 = "Máte moc složek!" TO_MANY_FOLDERS_DESC_2 = "Můžeme zobrazit jen část z nich, abychom zabránili problémům s výkonem." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Seznam účtů" @@ -709,4 +715,4 @@ NO_COOKIE_DESC = "Váš internetový prohlížeč nepodporuje Cookies. Prosím povolte podporu Cookies v nastavení vašeho internetového prohlížeče a zkuste to znovu." BAD_BROWSER_TITLE = "Používáte zastaralý internetový prohlížeč." BAD_BROWSER_DESC = "Abyste mohli využívat všchny funkcie této aplikace, -použijte některý z následujících internetových prohlížečů:" \ No newline at end of file +použijte některý z následujících internetových prohlížečů:" diff --git a/rainloop/v/0.0.0/langs/de.ini b/rainloop/v/0.0.0/langs/de.ini index 7aecc67c0..70d513d07 100644 --- a/rainloop/v/0.0.0/langs/de.ini +++ b/rainloop/v/0.0.0/langs/de.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Wählen Sie eine Nachricht aus der Liste aus, um sie anzuze PGP_PASSWORD_INPUT_PLACEHOLDER = "Passwort" PGP_SIGNED_MESSAGE_DESC = "OpenPGP-signierte Nachricht (klicken, um zu überprüfen)" PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP-verschlüsselte Nachricht (klicken, um zu entschlüsseln)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Empfangsbestätigung (angezeigt) - %SUBJECT%" @@ -552,6 +555,9 @@ RENAMING_PROCESS = "Ordner wird umbenannt" DELETING_ASK = "Sind Sie sicher?" TO_MANY_FOLDERS_DESC_1 = "Sie haben zu viele Ordner!" TO_MANY_FOLDERS_DESC_2 = "Aus Leistungsgründen zeigen wir nur einen Teil davon an." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Konten" diff --git a/rainloop/v/0.0.0/langs/en-gb.ini b/rainloop/v/0.0.0/langs/en-gb.ini index 0d4fb47b0..13a7691e2 100644 --- a/rainloop/v/0.0.0/langs/en-gb.ini +++ b/rainloop/v/0.0.0/langs/en-gb.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Select message in list to view it here." PGP_PASSWORD_INPUT_PLACEHOLDER = "Password" PGP_SIGNED_MESSAGE_DESC = "OpenPGP signed message (click to verify)" PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP encrypted message (click to decrypt)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Return Receipt (displayed) - %SUBJECT%" @@ -552,6 +555,9 @@ RENAMING_PROCESS = "Renaming a folder" DELETING_ASK = "Are you sure?" TO_MANY_FOLDERS_DESC_1 = "You have too many folders!" TO_MANY_FOLDERS_DESC_2 = "We have shown only a part of them, to avoid performance problems." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Accounts" @@ -710,4 +716,4 @@ NO_COOKIE_DESC = "Cookies support is not available in your browser. Please enable Cookie support in your browser settings and retry." BAD_BROWSER_TITLE = "Your browser is outdated." BAD_BROWSER_DESC = "To use all the features of the application, -download and install one of these browsers:" \ No newline at end of file +download and install one of these browsers:" diff --git a/rainloop/v/0.0.0/langs/en.ini b/rainloop/v/0.0.0/langs/en.ini index 0d4fb47b0..13a7691e2 100644 --- a/rainloop/v/0.0.0/langs/en.ini +++ b/rainloop/v/0.0.0/langs/en.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Select message in list to view it here." PGP_PASSWORD_INPUT_PLACEHOLDER = "Password" PGP_SIGNED_MESSAGE_DESC = "OpenPGP signed message (click to verify)" PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP encrypted message (click to decrypt)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Return Receipt (displayed) - %SUBJECT%" @@ -552,6 +555,9 @@ RENAMING_PROCESS = "Renaming a folder" DELETING_ASK = "Are you sure?" TO_MANY_FOLDERS_DESC_1 = "You have too many folders!" TO_MANY_FOLDERS_DESC_2 = "We have shown only a part of them, to avoid performance problems." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Accounts" @@ -710,4 +716,4 @@ NO_COOKIE_DESC = "Cookies support is not available in your browser. Please enable Cookie support in your browser settings and retry." BAD_BROWSER_TITLE = "Your browser is outdated." BAD_BROWSER_DESC = "To use all the features of the application, -download and install one of these browsers:" \ No newline at end of file +download and install one of these browsers:" diff --git a/rainloop/v/0.0.0/langs/es.ini b/rainloop/v/0.0.0/langs/es.ini index ab7b06ed4..dfaef38c1 100644 --- a/rainloop/v/0.0.0/langs/es.ini +++ b/rainloop/v/0.0.0/langs/es.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Seleccione un mensaje en la lista para verlo aquí." PGP_PASSWORD_INPUT_PLACEHOLDER = "Contraseña" PGP_SIGNED_MESSAGE_DESC = "Mensaje firmado mediante OpenPGP (click para verificar)" PGP_ENCRYPTED_MESSAGE_DESC = "Mensaje cifrado mediante OpenPGP (click para desencriptar)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Acuse de recibo (se visualiza) - %SUBJECT%" @@ -552,6 +555,9 @@ RENAMING_PROCESS = "Renombrando carpeta" DELETING_ASK = "¿Está usted seguro?" TO_MANY_FOLDERS_DESC_1 = "You have too many folders!" TO_MANY_FOLDERS_DESC_2 = "We have shown only a part of them, to avoid performance problems." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Lista de cuentas" @@ -710,4 +716,4 @@ NO_COOKIE_DESC = "El soporte de Cookies no esta disponible en su navegador. Por favor habilite los Cookie en la configuración de su navegador e inténtelo de nuevo." BAD_BROWSER_TITLE = "Su navegador no está actualizado." BAD_BROWSER_DESC = "Para usar todas las características de esta aplicación, -descargue e instale uno de estos navegadores:" \ No newline at end of file +descargue e instale uno de estos navegadores:" diff --git a/rainloop/v/0.0.0/langs/fr.ini b/rainloop/v/0.0.0/langs/fr.ini index 4a97dc03d..8ff9d6123 100644 --- a/rainloop/v/0.0.0/langs/fr.ini +++ b/rainloop/v/0.0.0/langs/fr.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Sélectionner un message dans la liste pour l'afficher ici. PGP_PASSWORD_INPUT_PLACEHOLDER = "Mot de passe" PGP_SIGNED_MESSAGE_DESC = "Message signé par OpenPGP (cliquer pour vérifier)" PGP_ENCRYPTED_MESSAGE_DESC = "Message chiffré par OpenPGP (cliquer pour déchiffrer)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Accusé de réception (affiché) - %SUBJECT%" @@ -552,6 +555,9 @@ RENAMING_PROCESS = "Renommer un dossier" DELETING_ASK = "Êtes-vous sûr ?" TO_MANY_FOLDERS_DESC_1 = "Vous avez trop de dossiers !" TO_MANY_FOLDERS_DESC_2 = "Seulement une partie d'entre eux ont été affichés afin de limiter les problèmes de performance." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Liste des comptes" @@ -710,4 +716,4 @@ NO_COOKIE_DESC = "Le support des cookies n'est pas disponible dans votre navigat S'il vous plaît activer le support des cookies dans les paramètres de votre navigateur et réessayez." BAD_BROWSER_TITLE = "Votre navigateur n'est pas à jour." BAD_BROWSER_DESC = "Pour utiliser toutes les fonctionnalités de l'application, -télécharger et installer l'un de ces navigateurs :" \ No newline at end of file +télécharger et installer l'un de ces navigateurs :" diff --git a/rainloop/v/0.0.0/langs/hu.ini b/rainloop/v/0.0.0/langs/hu.ini index f9c5df372..0782a5404 100644 --- a/rainloop/v/0.0.0/langs/hu.ini +++ b/rainloop/v/0.0.0/langs/hu.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Select message in list to view it here." PGP_PASSWORD_INPUT_PLACEHOLDER = "Jelszó" PGP_SIGNED_MESSAGE_DESC = "OpenPGP signed message (click to verify)" PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP encrypted message (click to decrypt)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Return Receipt (displayed) - %SUBJECT%" @@ -552,6 +555,9 @@ RENAMING_PROCESS = "Renaming a folder" DELETING_ASK = "Biztosak vagyunk benne?" TO_MANY_FOLDERS_DESC_1 = "You have too many folders!" TO_MANY_FOLDERS_DESC_2 = "We have shown only a part of them, to avoid performance problems." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Fiók lista" @@ -710,4 +716,4 @@ NO_COOKIE_DESC = "Cookies support is not available in your browser. Please enable Cookie support in your browser settings and retry." BAD_BROWSER_TITLE = "A böngésző elavult." BAD_BROWSER_DESC = "To use all the features of the application, -download and install one of these browsers:" \ No newline at end of file +download and install one of these browsers:" diff --git a/rainloop/v/0.0.0/langs/is.ini b/rainloop/v/0.0.0/langs/is.ini index e3563ed4d..b427e163d 100644 --- a/rainloop/v/0.0.0/langs/is.ini +++ b/rainloop/v/0.0.0/langs/is.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Veldu bréf úr listanum til að skoða hér." PGP_PASSWORD_INPUT_PLACEHOLDER = "Password" PGP_SIGNED_MESSAGE_DESC = "OpenPGP signed message (click to verify)" PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP encrypted message (click to decrypt)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Return Receipt (displayed) - %SUBJECT%" @@ -552,6 +555,9 @@ RENAMING_PROCESS = "Endurnefna möppu" DELETING_ASK = "Ertu viss?" TO_MANY_FOLDERS_DESC_1 = "You have too many folders!" TO_MANY_FOLDERS_DESC_2 = "We have shown only a part of them, to avoid performance problems." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Aðgangslisti" @@ -710,4 +716,4 @@ NO_COOKIE_DESC = "Köku stuðningur er ekki til staðar í vafranum þínum. Vinsamlegast gerðu JavaScript virkt í vafranum þínum og reyndu aftur." BAD_BROWSER_TITLE = "Vafrinn þinn er úreltur." BAD_BROWSER_DESC = "Til að geta notað alla valmöguleika í þessu forriti, -niðurhalaðu og settu upp einn af þessum vöfrum:" \ No newline at end of file +niðurhalaðu og settu upp einn af þessum vöfrum:" diff --git a/rainloop/v/0.0.0/langs/it.ini b/rainloop/v/0.0.0/langs/it.ini index 0c84b5aa5..fed36010d 100644 --- a/rainloop/v/0.0.0/langs/it.ini +++ b/rainloop/v/0.0.0/langs/it.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Seleziona un messaggio dalla lista per visualizzarlo qui" PGP_PASSWORD_INPUT_PLACEHOLDER = "Password" PGP_SIGNED_MESSAGE_DESC = "Messaggio firmato con OpenPGP (clicca qui per verificarlo)" PGP_ENCRYPTED_MESSAGE_DESC = "Messaggio cifrato con OpenPGP (clicca qui per decifrarlo)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Avviso di lettura - %SUBJECT%" @@ -552,6 +555,9 @@ RENAMING_PROCESS = "Rinomina cartella..." DELETING_ASK = "Sei sicuro?" TO_MANY_FOLDERS_DESC_1 = "Ci sono troppe cartelle!" TO_MANY_FOLDERS_DESC_2 = "Vengono visualizzate solo una parte per evitare problemi di performance." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Lista degli account" @@ -710,4 +716,4 @@ NO_COOKIE_DESC = "Il supporto ai Cookie è disabilitato. Abilitare il supporto ai Cookie e riprovare." BAD_BROWSER_TITLE = "Il tuo browser è troppo vecchio" BAD_BROWSER_DESC = "Per usare tutte le funzionalità dell'applicazione, -scarica ed installa uno dei seguenti browser:" \ No newline at end of file +scarica ed installa uno dei seguenti browser:" diff --git a/rainloop/v/0.0.0/langs/ja-jp.ini b/rainloop/v/0.0.0/langs/ja-jp.ini index 6a0969fd1..cf78e315f 100644 --- a/rainloop/v/0.0.0/langs/ja-jp.ini +++ b/rainloop/v/0.0.0/langs/ja-jp.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "選択したメールがここに表示されます。" PGP_PASSWORD_INPUT_PLACEHOLDER = "Password" PGP_SIGNED_MESSAGE_DESC = "OpenPGP signed message (click to verify)" PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP encrypted message (click to decrypt)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "開封確認メッセージ - %SUBJECT%" @@ -552,6 +555,9 @@ RENAMING_PROCESS = "Renaming a folder" DELETING_ASK = "Are you sure?" TO_MANY_FOLDERS_DESC_1 = "You have too many folders!" TO_MANY_FOLDERS_DESC_2 = "We have shown only a part of them, to avoid performance problems." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Account List" @@ -710,4 +716,4 @@ NO_COOKIE_DESC = "Cookies support is not available in your browser. Please enable Cookie support in your browser settings and retry." BAD_BROWSER_TITLE = "Your browser is outdated." BAD_BROWSER_DESC = "To use all the features of the application, -download and install one of these browsers:" \ No newline at end of file +download and install one of these browsers:" diff --git a/rainloop/v/0.0.0/langs/ko-kr.ini b/rainloop/v/0.0.0/langs/ko-kr.ini index 3ca2a59ec..451615767 100644 --- a/rainloop/v/0.0.0/langs/ko-kr.ini +++ b/rainloop/v/0.0.0/langs/ko-kr.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "목록에서 선택한 메시지가 여기에 표시됩니 PGP_PASSWORD_INPUT_PLACEHOLDER = "Password" PGP_SIGNED_MESSAGE_DESC = "OpenPGP signed message (click to verify)" PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP encrypted message (click to decrypt)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Return Receipt (displayed) - %SUBJECT%" @@ -549,6 +552,9 @@ RENAMING_PROCESS = "폴더명을 변경하고 있습니다." DELETING_ASK = "정말로 삭제하시겠습니까?" TO_MANY_FOLDERS_DESC_1 = "You have too many folders!" TO_MANY_FOLDERS_DESC_2 = "We have shown only a part of them, to avoid performance problems." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "계정 목록" @@ -704,4 +710,4 @@ NO_SCRIPT_DESC = "사용 중인 브라우저가 자바스크립트를 지원하 NO_COOKIE_TITLE = "이 어플리케이션을 사용하려면 쿠키 사용이 지원되야 합니다." NO_COOKIE_DESC = "사용 중인 브라우저가 쿠키를 지원하지 않습니다. 브라우저 설정을 확인하여 쿠키 사용을 활성화하고 다시 시도해주세요." BAD_BROWSER_TITLE = "사용 중인 브라우저가 구버전입니다." -BAD_BROWSER_DESC = "이 어플리케이션을 정상적으로 사용하시려면 아래의 브라우저들 중 하나를 설치해주세요:" \ No newline at end of file +BAD_BROWSER_DESC = "이 어플리케이션을 정상적으로 사용하시려면 아래의 브라우저들 중 하나를 설치해주세요:" diff --git a/rainloop/v/0.0.0/langs/lt.ini b/rainloop/v/0.0.0/langs/lt.ini index d24a39820..ebdc9c617 100644 --- a/rainloop/v/0.0.0/langs/lt.ini +++ b/rainloop/v/0.0.0/langs/lt.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Pasirinkite žinutę sąraše, kad matytumėte jos turinį PGP_PASSWORD_INPUT_PLACEHOLDER = "Slaptažodis" PGP_SIGNED_MESSAGE_DESC = "OpenPGP pasirašytas pranešimas (spustelkite patikrinimui)" PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP šifruotas pranešimas (spustelkite iššifravimui)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Pristatymo patvirtinimas (laiškas parodytas) - %SUBJECT%" @@ -552,6 +555,9 @@ RENAMING_PROCESS = "Pervardinamas katalogas" DELETING_ASK = "Ar Jūs įsitikinę?" TO_MANY_FOLDERS_DESC_1 = "Pas jus per daug katalogų!" TO_MANY_FOLDERS_DESC_2 = "Mes rodome ne visus juos, kad išvengti našumo problemų." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Paskyrų sąrašas" diff --git a/rainloop/v/0.0.0/langs/lv.ini b/rainloop/v/0.0.0/langs/lv.ini index dec960ac4..9576571b8 100644 --- a/rainloop/v/0.0.0/langs/lv.ini +++ b/rainloop/v/0.0.0/langs/lv.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Izvēlaties ziņojumu no saraksta lai to apskatītu." PGP_PASSWORD_INPUT_PLACEHOLDER = "Password" PGP_SIGNED_MESSAGE_DESC = "OpenPGP signed message (click to verify)" PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP encrypted message (click to decrypt)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Return Receipt (displayed) - %SUBJECT%" @@ -552,6 +555,9 @@ RENAMING_PROCESS = "Pārsaukt mapi" DELETING_ASK = "Tiešām?" TO_MANY_FOLDERS_DESC_1 = "You have too many folders!" TO_MANY_FOLDERS_DESC_2 = "We have shown only a part of them, to avoid performance problems." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Kontu saraksts" @@ -710,4 +716,4 @@ NO_COOKIE_DESC = "Cookies atbalsts nav pieejams šai pārlūkprogrammai. Lūdzu ieslēdziet Cookies atbalstu." BAD_BROWSER_TITLE = "Jūsu pārlūkprogramma ir novecojusi." BAD_BROWSER_DESC = "Lai izmantotu pilnas šis aplikācijas iespējas, -lejupielādējat un uzinstalējas kādu no šīm pārlukprogrammām:" \ No newline at end of file +lejupielādējat un uzinstalējas kādu no šīm pārlukprogrammām:" diff --git a/rainloop/v/0.0.0/langs/nl.ini b/rainloop/v/0.0.0/langs/nl.ini index c667b12e1..13a7691e2 100644 --- a/rainloop/v/0.0.0/langs/nl.ini +++ b/rainloop/v/0.0.0/langs/nl.ini @@ -1,713 +1,719 @@ [LOGIN] -LABEL_EMAIL = "E-mail" -LABEL_LOGIN = "Inlognaam" -LABEL_PASSWORD = "Wachtwoord" -LABEL_SIGN_ME = "Aangemeld blijven" -LABEL_VERIFICATION_CODE = "Verificatie Code" -LABEL_DONT_ASK_VERIFICATION_CODE = "Vraag 2 weken niet naar code" -BUTTON_SIGN_IN = "Aanmelden" -TITLE_SIGN_IN_GOOGLE = "Aanmelden met Google" -TITLE_SIGN_IN_FACEBOOK = "Aanmelden met Facebook" -TITLE_SIGN_IN_TWITTER = "Aanmelden met Twitter" -LABEL_FORGOT_PASSWORD = "Wachtwoord vergeten" -LABEL_REGISTRATION = "Registratie" +LABEL_EMAIL = "Email" +LABEL_LOGIN = "Login" +LABEL_PASSWORD = "Password" +LABEL_SIGN_ME = "Remember Me" +LABEL_VERIFICATION_CODE = "Verification Code" +LABEL_DONT_ASK_VERIFICATION_CODE = "Don't ask for the code for 2 weeks" +BUTTON_SIGN_IN = "Sign In" +TITLE_SIGN_IN_GOOGLE = "Sign In using Google" +TITLE_SIGN_IN_FACEBOOK = "Sign In using Facebook" +TITLE_SIGN_IN_TWITTER = "Sign In using Twitter" +LABEL_FORGOT_PASSWORD = "Forgot password" +LABEL_REGISTRATION = "Registration" [TOP_TOOLBAR] -BUTTON_ADD_ACCOUNT = "Account toevoegen" -BUTTON_SETTINGS = "Instellingen" +BUTTON_ADD_ACCOUNT = "Add Account" +BUTTON_SETTINGS = "Settings" BUTTON_HELP = "Help" -BUTTON_LOGOUT = "Afmelden" +BUTTON_LOGOUT = "Logout" [SEARCH] -MAIN_INPUT_PLACEHOLDER = "Zoeken" -TITLE_ADV = "Geavanceerd zoeken" -LABEL_ADV_FROM = "Van" -LABEL_ADV_TO = "Naar" -LABEL_ADV_SUBJECT = "Onderwerp" -LABEL_ADV_TEXT = "Tekst" -LABEL_ADV_HAS_ATTACHMENT = "Heeft bijlage" -LABEL_ADV_HAS_ATTACHMENTS = "Heeft bijlages" -LABEL_ADV_FLAGGED = "Gemarkeerd" -LABEL_ADV_UNSEEN = "Ongelezen" -LABEL_ADV_DATE = "Datum" -LABEL_ADV_DATE_ALL = "Alles" -LABEL_ADV_DATE_3_DAYS = "Tot 3 dagen oud" -LABEL_ADV_DATE_7_DAYS = "Tot 1 week oud" -LABEL_ADV_DATE_MONTH = "Tot 1 maand oud" -LABEL_ADV_DATE_3_MONTHS = "Tot 3 maanden oud" -LABEL_ADV_DATE_6_MONTHS = "Tot 6 maanden oud" -LABEL_ADV_DATE_YEAR = "Tot 1 jaar oud" -BUTTON_ADV_SEARCH = "Zoeken" +MAIN_INPUT_PLACEHOLDER = "Search" +TITLE_ADV = "Advanced Search" +LABEL_ADV_FROM = "From" +LABEL_ADV_TO = "To" +LABEL_ADV_SUBJECT = "Subject" +LABEL_ADV_TEXT = "Text" +LABEL_ADV_HAS_ATTACHMENT = "Has attachment" +LABEL_ADV_HAS_ATTACHMENTS = "Has attachments" +LABEL_ADV_FLAGGED = "Flagged" +LABEL_ADV_UNSEEN = "Unseen" +LABEL_ADV_DATE = "Date" +LABEL_ADV_DATE_ALL = "All" +LABEL_ADV_DATE_3_DAYS = "Up to 3 days old" +LABEL_ADV_DATE_7_DAYS = "Up to 1 week old" +LABEL_ADV_DATE_MONTH = "Up to 1 month old" +LABEL_ADV_DATE_3_MONTHS = "Up to 3 months old" +LABEL_ADV_DATE_6_MONTHS = "Up to 6 months old" +LABEL_ADV_DATE_YEAR = "Up to 1 year old" +BUTTON_ADV_SEARCH = "Search" [PREVIEW_POPUP] -FULLSCREEN = "Schakel volledig scherm in/uit" -ZOOM = "Zoom in/uit" -CLOSE = "Sluiten (Esc)" -LOADING = "Ophalen..." -GALLERY_PREV = "Vorige (Linker Pijl toets)" -GALLERY_NEXT = "Volgende (Rechter Pijl toets)" -GALLERY_COUNTER = "%curr% van %total%" -IMAGE_ERROR = "De afbeelding kan niet worden geladen" -AJAX_ERROR = "De inhoud kan niet worden geladen" +FULLSCREEN = "Toggle fullscreen" +ZOOM = "Zoom in/out" +CLOSE = "Close (Esc)" +LOADING = "Loading..." +GALLERY_PREV = "Previous (arrow left)" +GALLERY_NEXT = "Next (arrow right)" +GALLERY_COUNTER = "%curr% of %total%" +IMAGE_ERROR = "The image could not be loaded." +AJAX_ERROR = "The content could not be loaded." [FOLDER_LIST] -BUTTON_COMPOSE = "Nieuw bericht" -BUTTON_CONTACTS = "Contactpersonen" -INBOX_NAME = "Postvak IN" -SENT_NAME = "Verzonden items" -DRAFTS_NAME = "Concepten" -SPAM_NAME = "Ongewenste e-mail" -TRASH_NAME = "Verwijderde items" -ARCHIVE_NAME = "Archief" +BUTTON_COMPOSE = "Compose" +BUTTON_CONTACTS = "Contacts" +INBOX_NAME = "Inbox" +SENT_NAME = "Sent" +DRAFTS_NAME = "Drafts" +SPAM_NAME = "Spam" +TRASH_NAME = "Trash" +ARCHIVE_NAME = "Archive" [QUOTA] -TITLE = "Quota gebruik" +TITLE = "Quota usage" [MESSAGE_LIST] -BUTTON_RELOAD = "Berichten controleren" -BUTTON_MOVE_TO = "Verplaatsen" -BUTTON_DELETE = "Verwijderen" -BUTTON_ARCHIVE = "Archiveren" -BUTTON_SPAM = "Ongewenste e-mail" -BUTTON_NOT_SPAM = "Geen ongewenste e-mail" -BUTTON_EMPTY_FOLDER = "Map leegmaken" -BUTTON_MULTY_FORWARD = "Doorsturen als bijlage(n)" -BUTTON_DELETE_WITHOUT_MOVE = "Permanent verwijderen" -BUTTON_MORE = "Meer" -MENU_SET_SEEN = "Markeer als gelezen" -MENU_SET_ALL_SEEN = "Markeer alles als gelezen" -MENU_UNSET_SEEN = "Markeer als ongelezen" -MENU_SET_FLAG = "Vlag" -MENU_UNSET_FLAG = "Vlag verwijderen" -MENU_SELECT_ALL = "Alle" -MENU_SELECT_NONE = "Geen" -MENU_SELECT_INVERT = "Selectie omkeren" -MENU_SELECT_UNSEEN = "Ongelezen" -MENU_SELECT_SEEN = "Gelezen" -MENU_SELECT_FLAGGED = "Met Vlag" -MENU_SELECT_UNFLAGGED = "Zonder Vlag" -EMPTY_LIST = "Geen berichten" -EMPTY_SEARCH_LIST = "Geen items gevonden" -SEARCH_RESULT_FOR = "Zoekresultaten voor\"%SEARCH%\"" -BACK_TO_MESSAGE_LIST = "terug naar berichtenlijst" -LIST_LOADING = "Ophalen..." -EMPTY_SUBJECT_TEXT = "(Geen onderwerp)" -PUT_MESSAGE_HERE = "Sleep bericht hier om ze te bekijken in de lijst" -TODAY_AT = "vandaag om %TIME%" -YESTERDAY_AT = "gisteren om %TIME%" -SEARCH_PLACEHOLDER = "Zoeken" -NEW_MESSAGE_NOTIFICATION = "U heeft %COUNT% nieuwe berichten!" -QUOTA_SIZE = "U gebruikt %SIZE% (%PROC%%) van %LIMIT%" +BUTTON_RELOAD = "Reload Message List" +BUTTON_MOVE_TO = "Move To" +BUTTON_DELETE = "Delete" +BUTTON_ARCHIVE = "Archive" +BUTTON_SPAM = "Spam" +BUTTON_NOT_SPAM = "Not Spam" +BUTTON_EMPTY_FOLDER = "Clear Folder" +BUTTON_MULTY_FORWARD = "Forward as attachment(s)" +BUTTON_DELETE_WITHOUT_MOVE = "Delete permanently" +BUTTON_MORE = "More" +MENU_SET_SEEN = "Mark as read" +MENU_SET_ALL_SEEN = "Mark all as read" +MENU_UNSET_SEEN = "Mark as unread" +MENU_SET_FLAG = "Flag" +MENU_UNSET_FLAG = "Unflag" +MENU_SELECT_ALL = "All" +MENU_SELECT_NONE = "None" +MENU_SELECT_INVERT = "Invert" +MENU_SELECT_UNSEEN = "Unread" +MENU_SELECT_SEEN = "Read" +MENU_SELECT_FLAGGED = "Flagged" +MENU_SELECT_UNFLAGGED = "Unflagged" +EMPTY_LIST = "Empty list." +EMPTY_SEARCH_LIST = "No messages matched your search." +SEARCH_RESULT_FOR = "Search results for \"%SEARCH%\"" +BACK_TO_MESSAGE_LIST = "back to message list" +LIST_LOADING = "Loading" +EMPTY_SUBJECT_TEXT = "(No subject)" +PUT_MESSAGE_HERE = "Drop message here to view it in the list" +TODAY_AT = "today at %TIME%" +YESTERDAY_AT = "yesterday at %TIME%" +SEARCH_PLACEHOLDER = "Search" +NEW_MESSAGE_NOTIFICATION = "You have %COUNT% new messages!" +QUOTA_SIZE = "Using %SIZE% (%PROC%%) of your %LIMIT%" [MESSAGE] -BUTTON_EDIT = "Aanpassen" -BUTTON_BACK = "Terug" -BUTTON_CLOSE = "Sluiten" -BUTTON_DELETE = "Verwijderen" -BUTTON_ARCHIVE = "Archiveren" -BUTTON_SPAM = "Ongewenste e-mail" -BUTTON_NOT_SPAM = "Geen ongewenste e-mail" -BUTTON_MOVE_TO = "Verplaatsen" -BUTTON_MORE = "Meer" -BUTTON_REPLY = "Beantwoorden" -BUTTON_REPLY_ALL = "Allen beantwoorden" -BUTTON_FORWARD = "Doorsturen" -BUTTON_FORWARD_AS_ATTACHMENT = "Doorsturen als bijlage" -BUTTON_EDIT_AS_NEW = "Bewerken om opnieuw te verzenden" -BUTTON_SHOW_IMAGES = "Toon afbeeldingen" -BUTTON_NOTIFY_READ_RECEIPT = "De afzender heeft om een leesbevestiging gevraagd" -BUTTON_IN_NEW_WINDOW = "Toon in nieuw venster" -BUTTON_THREAD_LIST = "Groep lijst" -BUTTON_THREAD_PREV = "Vorige" -BUTTON_THREAD_NEXT = "Volgende" -BUTTON_THREAD_MORE = "Meer berichten" -MENU_HEADERS = "Toon berichtkoppen" -MENU_VIEW_ORIGINAL = "Toon origineel" -MENU_DOWNLOAD_ORIGINAL = "Download als .eml bestand" -MENU_FILTER_SIMILAR = "Filter gelijksoortige berichten" -MENU_PRINT = "Afdrukken" -EMPTY_SUBJECT_TEXT = "(Geen onderwerp)" -LABEL_SUBJECT = "Onderwerp" -LABEL_DATE = "Datum" -LABEL_FROM = "Van" -LABEL_FROM_SHORT = "van" -LABEL_TO = "Naar" -LABEL_TO_SHORT = "naar" +BUTTON_EDIT = "Edit" +BUTTON_BACK = "Back" +BUTTON_CLOSE = "Close" +BUTTON_DELETE = "Delete" +BUTTON_ARCHIVE = "Archive" +BUTTON_SPAM = "Spam" +BUTTON_NOT_SPAM = "Not Spam" +BUTTON_MOVE_TO = "Move To" +BUTTON_MORE = "More" +BUTTON_REPLY = "Reply" +BUTTON_REPLY_ALL = "Reply All" +BUTTON_FORWARD = "Forward" +BUTTON_FORWARD_AS_ATTACHMENT = "Forward as attachment" +BUTTON_EDIT_AS_NEW = "Edit as New" +BUTTON_SHOW_IMAGES = "Display external images" +BUTTON_NOTIFY_READ_RECEIPT = "The sender has asked to be notified when you read this message." +BUTTON_IN_NEW_WINDOW = "View in separate window" +BUTTON_THREAD_LIST = "Thread list" +BUTTON_THREAD_PREV = "Previous" +BUTTON_THREAD_NEXT = "Next" +BUTTON_THREAD_MORE = "More messages" +MENU_HEADERS = "Show message headers" +MENU_VIEW_ORIGINAL = "Show Source" +MENU_DOWNLOAD_ORIGINAL = "Download as .eml file" +MENU_FILTER_SIMILAR = "Filter messages like this" +MENU_PRINT = "Print" +EMPTY_SUBJECT_TEXT = "(No subject)" +LABEL_SUBJECT = "Subject" +LABEL_DATE = "Date" +LABEL_FROM = "From" +LABEL_FROM_SHORT = "from" +LABEL_TO = "To" +LABEL_TO_SHORT = "to" LABEL_CC = "CC" LABEL_BCC = "BCC" LABEL_REPLY_TO = "Reply-To" -PRINT_LABEL_FROM = "Van" -PRINT_LABEL_TO = "Naar" +PRINT_LABEL_FROM = "From" +PRINT_LABEL_TO = "To" PRINT_LABEL_CC = "CC" PRINT_LABEL_BCC = "BCC" PRINT_LABEL_REPLY_TO = "Reply-To" -PRINT_LABEL_DATE = "Datum" -PRINT_LABEL_SUBJECT = "Onderwerp" -PRINT_LABEL_ATTACHMENTS = "Bijlagen" -MESSAGE_LOADING = "Bericht ophalen" -MESSAGE_VIEW_DESC = "Selecteer een bericht in de lijst om hier te bekijken" -PGP_PASSWORD_INPUT_PLACEHOLDER = "Wachtwoord" -PGP_SIGNED_MESSAGE_DESC = "OpenPGP ondertekend bericht (klik om te verifiëren)" -PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP versleuteld bericht (klik om te ontsleutelen)" +PRINT_LABEL_DATE = "Date" +PRINT_LABEL_SUBJECT = "Subject" +PRINT_LABEL_ATTACHMENTS = "Attachments" +MESSAGE_LOADING = "Loading" +MESSAGE_VIEW_DESC = "Select message in list to view it here." +PGP_PASSWORD_INPUT_PLACEHOLDER = "Password" +PGP_SIGNED_MESSAGE_DESC = "OpenPGP signed message (click to verify)" +PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP encrypted message (click to decrypt)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] -SUBJECT = "Ontvangstbevestiging (weergegeven) - %SUBJECT%" -BODY = "Dit is een bevestiging dat uw bericht aan %READ-RECEIPT% is ontvangen. +SUBJECT = "Return Receipt (displayed) - %SUBJECT%" +BODY = "This is a Return Receipt for the mail that you sent to %READ-RECEIPT%. -Let op: Deze ontvangstbevestiging bevestigd slechts dat uw bericht was weergegeven op het scherm van de ontvanger. -Er is geen enkele garantie dat uw bericht is gelezen of begrepen." +Note: This Return Receipt only acknowledges that the message was displayed on the recipient's computer. +There is no guarantee that the recipient has read or understood the message contents." [SUGGESTIONS] -SEARCHING_DESC = "Zoeken..." +SEARCHING_DESC = "Searching..." [CONTACTS] -LEGEND_CONTACTS = "Contactpersonen" -SEARCH_INPUT_PLACEHOLDER = "Zoeken" -BUTTON_ADD_CONTACT = "Contactpersoon Toevoegen" -BUTTON_CREATE_CONTACT = "Toevoegen" -BUTTON_UPDATE_CONTACT = "Bijwerken" -BUTTON_IMPORT = "Importeer (csv, vcf, vCard)" -BUTTON_EXPORT_VCARD = "Exporteer (vcf, vCard)" -BUTTON_EXPORT_CSV = "Exporteer (csv)" -ERROR_IMPORT_FILE = "Fout bij importeren (ongeldige bestandsindeling)" -LIST_LOADING = "Ophalen..." -EMPTY_LIST = "Geen contactpersonen" -EMPTY_SEARCH = "Geen items gevonden" -CLEAR_SEARCH = "Wis zoekopdracht" -CONTACT_VIEW_DESC = "Selecteer een contactpersoon in de lijst om hier te bekijken" -LABEL_DISPLAY_NAME = "Weergeven als" -LABEL_EMAIL = "E-mail adres" -LABEL_PHONE = "Telefoon" +LEGEND_CONTACTS = "Contacts" +SEARCH_INPUT_PLACEHOLDER = "Search" +BUTTON_ADD_CONTACT = "Add Contact" +BUTTON_CREATE_CONTACT = "Create" +BUTTON_UPDATE_CONTACT = "Update" +BUTTON_IMPORT = "Import (csv, vcf, vCard)" +BUTTON_EXPORT_VCARD = "Export (vcf, vCard)" +BUTTON_EXPORT_CSV = "Export (csv)" +ERROR_IMPORT_FILE = "Import error (invalid file format)" +LIST_LOADING = "Loading" +EMPTY_LIST = "No contacts here" +EMPTY_SEARCH = "No contacts found" +CLEAR_SEARCH = "Clear search" +CONTACT_VIEW_DESC = "Select contact in list to view it here." +LABEL_DISPLAY_NAME = "Display name" +LABEL_EMAIL = "Email" +LABEL_PHONE = "Phone" LABEL_WEB = "Web" -LABEL_BIRTHDAY = "Geboortedatum" -LINK_ADD_EMAIL = "E-mail adres toevoegen" -LINK_ADD_PHONE = "Telefoonnummer toevoegen" -LINK_BIRTHDAY = "Geboortedatum" -PLACEHOLDER_ENTER_DISPLAY_NAME = "Weergeven als" -PLACEHOLDER_ENTER_LAST_NAME = "Achternaam" -PLACEHOLDER_ENTER_FIRST_NAME = "Voornaam" -PLACEHOLDER_ENTER_NICK_NAME = "Bijnaam" -LABEL_READ_ONLY = "Alleen lezen" -LABEL_SHARE = "Deel" -ADD_MENU_LABEL = "Toevoegen" -ADD_MENU_NICKNAME = "Bijnaam" -ADD_MENU_NOTES = "Notities" -ADD_MENU_EMAIL = "E-mail adres" -ADD_MENU_PHONE = "Telefoonnummer" -ADD_MENU_URL = "Webpagina" -ADD_MENU_ADDRESS = "Adres" -ADD_MENU_BIRTHDAY = "Geboortedatum" -ADD_MENU_TAGS = "Labels" -BUTTON_SHARE_NONE = "Niemand" -BUTTON_SHARE_ALL = "Iedereen" -BUTTON_SYNC = "Synchroniseren (CardDAV)" +LABEL_BIRTHDAY = "Birthday" +LINK_ADD_EMAIL = "Add an email address" +LINK_ADD_PHONE = "Add a phone" +LINK_BIRTHDAY = "Birthday" +PLACEHOLDER_ENTER_DISPLAY_NAME = "Enter display name" +PLACEHOLDER_ENTER_LAST_NAME = "Enter last name" +PLACEHOLDER_ENTER_FIRST_NAME = "Enter first name" +PLACEHOLDER_ENTER_NICK_NAME = "Enter nickname" +LABEL_READ_ONLY = "Read only" +LABEL_SHARE = "Share" +ADD_MENU_LABEL = "Add" +ADD_MENU_NICKNAME = "Nickname" +ADD_MENU_NOTES = "Notes" +ADD_MENU_EMAIL = "Email" +ADD_MENU_PHONE = "Phone" +ADD_MENU_URL = "URL" +ADD_MENU_ADDRESS = "Address" +ADD_MENU_BIRTHDAY = "Birthday" +ADD_MENU_TAGS = "Tags" +BUTTON_SHARE_NONE = "None" +BUTTON_SHARE_ALL = "Everyone" +BUTTON_SYNC = "Synchronization (CardDAV)" [COMPOSE] -TITLE_FROM = "Van" -TITLE_TO = "Naar" +TITLE_FROM = "From" +TITLE_TO = "To" TITLE_CC = "CC" TITLE_BCC = "BCC" -TITLE_REPLY_TO = "Antwoordadres" -TITLE_SUBJECT = "Onderwerp" -LINK_SHOW_INPUTS = "Toon alle velden" -BUTTON_SEND = "Verzenden" -BUTTON_SAVE = "Concept opslaan" -BUTTON_DELETE = "Verwijder" -BUTTON_CANCEL = "Annuleer" -BUTTON_MINIMIZE = "Minimaliseer" -SAVED_TIME = "Bewaard op %TIME%" -SAVED_ERROR_ON_SEND = "Bericht is verzonden maar niet bewaard in de VERZONDEN map" -DISCARD_UNSAVED_DATA = "Niet opgeslagen gegevens verwijderen?" -ATTACH_FILES = "Bestand(en) toevoegen" -ATTACH_DROP_FILES_DESC = "Sleep bestanden naar hier" -ATTACH_ITEM_CANCEL = "Annuleer" +TITLE_REPLY_TO = "Reply-To" +TITLE_SUBJECT = "Subject" +LINK_SHOW_INPUTS = "show all fields" +BUTTON_SEND = "Send" +BUTTON_SAVE = "Save" +BUTTON_DELETE = "Delete" +BUTTON_CANCEL = "Cancel" +BUTTON_MINIMIZE = "Minimize" +SAVED_TIME = "Saved at %TIME%" +SAVED_ERROR_ON_SEND = "Message was sent but not saved to sent items folder" +DISCARD_UNSAVED_DATA = "Discard unsaved data?" +ATTACH_FILES = "Attach files" +ATTACH_DROP_FILES_DESC = "Drop files here" +ATTACH_ITEM_CANCEL = "Cancel" DROPBOX = "Dropbox" GOOGLE_DRIVE = "Google Drive" -REPLY_MESSAGE_TITLE = "%EMAIL% schreef op %DATETIME%" -FORWARD_MESSAGE_TOP_TITLE = "-------- Doorgestuurd bericht -------" -FORWARD_MESSAGE_TOP_FROM = "Van" -FORWARD_MESSAGE_TOP_TO = "Naar" +REPLY_MESSAGE_TITLE = "%DATETIME%, %EMAIL% wrote" +FORWARD_MESSAGE_TOP_TITLE = "-------- Forwarded message -------" +FORWARD_MESSAGE_TOP_FROM = "From" +FORWARD_MESSAGE_TOP_TO = "To" FORWARD_MESSAGE_TOP_CC = "CC" -FORWARD_MESSAGE_TOP_SENT = "Verzonden" -FORWARD_MESSAGE_TOP_SUBJECT = "Onderwerp" -EMPTY_TO_ERROR_DESC = "Kies ten minste één ontvanger voordat u het bericht verstuurd" -NO_ATTACHMENTS_HERE_DESC = "Er zijn geen bijlagen" -ATTACHMENTS_ERROR_DESC = "Waarschuwing! Nog niet alle bijlagen zijn klaar met uploaden" -ATTACHMENTS_UPLOAD_ERROR_DESC = "Toevoegen van bijlage(n) is nog niet gereed" -BUTTON_REQUEST_READ_RECEIPT = "Leesbevestiging vragen" -BUTTON_MARK_AS_IMPORTANT = "Marker als belangrijk" -BUTTON_OPEN_PGP = "OpenPGP (allen bij Platte Tekst)" -BUTTON_REQUEST_DSN = "Ontvangstbevestiging vragen" +FORWARD_MESSAGE_TOP_SENT = "Sent" +FORWARD_MESSAGE_TOP_SUBJECT = "Subject" +EMPTY_TO_ERROR_DESC = "Please specify at least one recipient" +NO_ATTACHMENTS_HERE_DESC = "No attachments here." +ATTACHMENTS_ERROR_DESC = "Warning! Not all attachments have been uploaded." +ATTACHMENTS_UPLOAD_ERROR_DESC = "Not all attachments have been uploaded yet." +BUTTON_REQUEST_READ_RECEIPT = "Request a read receipt" +BUTTON_MARK_AS_IMPORTANT = "Mark as important" +BUTTON_OPEN_PGP = "OpenPGP (Plain Text Only)" +BUTTON_REQUEST_DSN = "Request a delivery receipt" [POPUPS_WELCOME_PAGE] BUTTON_CLOSE = "Close" [POPUPS_ASK] -BUTTON_YES = "Ja" -BUTTON_NO = "Nee" -DESC_WANT_CLOSE_THIS_WINDOW = "Weet u zeker dat u dit venster wilt sluiten?" -DESC_WANT_DELETE_MESSAGES = "Weet u zeker dat u dit/deze bericht/berichten wilt verwijderen?" +BUTTON_YES = "Yes" +BUTTON_NO = "No" +DESC_WANT_CLOSE_THIS_WINDOW = "Are you sure you want to close this window?" +DESC_WANT_DELETE_MESSAGES = "Are you sure you want to delete the message(s)?" [POPUPS_LANGUAGES] -TITLE_LANGUAGES = "Kies uw taal" +TITLE_LANGUAGES = "Choose your language" [POPUPS_ADD_ACCOUNT] -TITLE_ADD_ACCOUNT = "Account toevoegen?" -BUTTON_ADD_ACCOUNT = "Toevoegen" -TITLE_UPDATE_ACCOUNT = "Account updaten?" +TITLE_ADD_ACCOUNT = "Add Account?" +BUTTON_ADD_ACCOUNT = "Add" +TITLE_UPDATE_ACCOUNT = "Update Account?" BUTTON_UPDATE_ACCOUNT = "Update" [POPUPS_IDENTITY] -TITLE_ADD_IDENTITY = "Identiteit toevoegen?" -TITLE_UPDATE_IDENTITY = "Identiteit bijwerken?" -BUTTON_ADD_IDENTITY = "Toevoegen" -BUTTON_UPDATE_IDENTITY = "Bijwerken" -LABEL_EMAIL = "E-mail adres" -LABEL_NAME = "Naam" -LABEL_REPLY_TO = "Antwoordadres" +TITLE_ADD_IDENTITY = "Add Identity?" +TITLE_UPDATE_IDENTITY = "Update Identity?" +BUTTON_ADD_IDENTITY = "Add" +BUTTON_UPDATE_IDENTITY = "Update" +LABEL_EMAIL = "Email" +LABEL_NAME = "Name" +LABEL_REPLY_TO = "Reply-To" LABEL_SIGNATURE = "Signature" LABEL_CC = "Cc" -LABEL_BCC = "BCC" +LABEL_BCC = "Bcc" LABEL_SIGNATURE_INSERT_BEFORE = "Insert this signature before quoted text in replies" [POPUPS_CREATE_FOLDER] -TITLE_CREATE_FOLDER = "Map aanmaken?" +TITLE_CREATE_FOLDER = "Create a folder?" SELECT_NO_PARENT = "" -LABEL_NAME = "Map naam" -LABEL_PARENT = "Onderliggende map" -BUTTON_CREATE = "Maken" -BUTTON_CANCEL = "Annuleer" -BUTTON_CLOSE = "Sluiten" -TITLE_CREATING_PROCESS = "Maak een nieuwe map" +LABEL_NAME = "Folder name" +LABEL_PARENT = "Parent folder" +BUTTON_CREATE = "Create" +BUTTON_CANCEL = "Cancel" +BUTTON_CLOSE = "Close" +TITLE_CREATING_PROCESS = "Creating a folder" [POPUPS_CLEAR_FOLDER] -TITLE_CLEAR_FOLDER = "Alle inhoud van deze map verwijderen?" -BUTTON_CLEAR = "Wissen" -BUTTON_CANCEL = "Annuleer" -BUTTON_CLOSE = "Sluiten" -DANGER_DESC_WARNING = "Opgelet!" -DANGER_DESC_HTML_1 = "Deze actie verwijdert alle e-mails in de map %FOLDER%!" -DANGER_DESC_HTML_2 = "Eens in gang gezet kan het proces niet geannuleerd worden!" -TITLE_CLEARING_PROCESS = "Folder aan het leegmaken..." +TITLE_CLEAR_FOLDER = "Purge all messages from the folder?" +BUTTON_CLEAR = "Clear" +BUTTON_CANCEL = "Cancel" +BUTTON_CLOSE = "Close" +DANGER_DESC_WARNING = "Warning!" +DANGER_DESC_HTML_1 = "This action will result in removing all mails from %FOLDER% folder completely." +DANGER_DESC_HTML_2 = "Once started, the process cannot be aborted or cancelled." +TITLE_CLEARING_PROCESS = "Purging the folder..." [POPUPS_IMPORT_OPEN_PGP_KEY] -TITLE_IMPORT_OPEN_PGP_KEY = "Importeer OpenPGP sleutel" -BUTTON_IMPORT_OPEN_PGP_KEY = "Importeer" +TITLE_IMPORT_OPEN_PGP_KEY = "Import OpenPGP key" +BUTTON_IMPORT_OPEN_PGP_KEY = "Import" [POPUPS_VIEW_OPEN_PGP_KEY] -TITLE_VIEW_OPEN_PGP_KEY = "Bekijk OpenPGP sleutel" -BUTTON_SELECT = "Selecteer" -BUTTON_CLOSE = "Sluiten" +TITLE_VIEW_OPEN_PGP_KEY = "View OpenPGP key" +BUTTON_SELECT = "Select" +BUTTON_CLOSE = "Close" [POPUPS_GENERATE_OPEN_PGP_KEYS] -TITLE_GENERATE_OPEN_PGP_KEYS = "Genereer OpenPGP sleutels" -LABEL_EMAIL = "E-mail" -LABEL_NAME = "Naam" -LABEL_PASSWORD = "Wachtwoord" -LABEL_KEY_BIT_LENGTH = "Sleutel lengte" -BUTTON_GENERATE_OPEN_PGP_KEYS = "Genereer" +TITLE_GENERATE_OPEN_PGP_KEYS = "Generate OpenPGP keys" +LABEL_EMAIL = "Email" +LABEL_NAME = "Name" +LABEL_PASSWORD = "Password" +LABEL_KEY_BIT_LENGTH = "Key length" +BUTTON_GENERATE_OPEN_PGP_KEYS = "Generate" [POPUPS_COMPOSE_OPEN_PGP] -TITLE_COMPOSE_OPEN_PGP = "OpenPGP ondertekenen/versleutelen" -LABEL_SIGN = "Ondertekenen" -LABEL_ENCRYPT = "Versleutelen" -LABEL_PASSWORD = "Wachtwoord" -BUTTON_SIGN = "Ondertekenen" -BUTTON_ENCRYPT = "Versleutelen" -BUTTON_SIGN_AND_ENCRYPT = "Ondertekenen en versleutelen" +TITLE_COMPOSE_OPEN_PGP = "OpenPGP Sign/Encrypt" +LABEL_SIGN = "Sign" +LABEL_ENCRYPT = "Encrypt" +LABEL_PASSWORD = "Password" +BUTTON_SIGN = "Sign" +BUTTON_ENCRYPT = "Encrypt" +BUTTON_SIGN_AND_ENCRYPT = "Sign and encrypt" [POPUPS_TWO_FACTOR_TEST] -TITLE_TEST_CODE = "2-Stap verificatie test" +TITLE_TEST_CODE = "2-Step verification test" LABEL_CODE = "Code" BUTTON_TEST = "Test" [POPUPS_FILTER] -TITLE_CREATE_FILTER = "Filter toevoegen" -TITLE_EDIT_FILTER = "Filter aanpassen" -FILTER_NAME = "Naam" -LEGEND_CONDITIONS = "Voorwaarden" -LEGEND_ACTIONS = "Akties" -BUTTON_DONE = "Klaar" -BUTTON_ADD_CONDITION = "Voorwaarde toevoegen" -SELECT_ACTION_NONE = "Geen" -SELECT_ACTION_MOVE_TO = "Verplaats naar" -SELECT_ACTION_FORWARD_TO = "Doorsturen naar" -SELECT_ACTION_REJECT = "Afwijzen" -SELECT_ACTION_VACATION_MESSAGE = "Afwezigheidbericht" -SELECT_ACTION_DISCARD = "Gooi weg" -SELECT_FIELD_FROM = "Van" -SELECT_FIELD_RECIPIENTS = "Ontvanger(s) (Aan of CC)" -SELECT_FIELD_SUBJECT = "Onderwerp" -SELECT_FIELD_HEADER = "Berichtkop" -SELECT_FIELD_SIZE = "Grootte" -SELECT_TYPE_CONTAINS = "Bevat" -SELECT_TYPE_NOT_CONTAINS = "Bevat niet" -SELECT_TYPE_MATCHES = "Komt overeen met (* and ? supported)" -SELECT_TYPE_NOT_MATCHES = "Komt niet overeen met (* and ? supported)" -SELECT_TYPE_REGEXP = "Reguliere expressie (Regexp)" -SELECT_TYPE_NOT_REGEXP = "Niet reguliere expressie (Regexp)" -SELECT_TYPE_EQUAL_TO = "Gelijk aan" -SELECT_TYPE_NOT_EQUAL_TO = "Niet gelijk aan" -SELECT_MATCH_ANY = "Komt overeen met een van de volgende voorwaarden" -SELECT_MATCH_ALL = "Komt overeen met alle voorwaarden" -MARK_AS_READ_LABEL = "Markeer als gelezen" -REPLY_INTERVAL_LABEL = "Antwoord interval (dagen)" -KEEP_LABEL = "Behoud" -STOP_LABEL = "Stop niet met uitvoeren van volgende filters" -EMAIL_LABEL = "E-mail" -VACATION_SUBJECT_LABEL = "Onderwerp (optioneel)" -VACATION_MESSAGE_LABEL = "Bericht" -REJECT_MESSAGE_LABEL = "Afwijsbericht" -ALL_INCOMING_MESSAGES_DESC = "Alle inkomende berichten" +TITLE_CREATE_FILTER = "Create a filter?" +TITLE_EDIT_FILTER = "Update filter?" +FILTER_NAME = "Name" +LEGEND_CONDITIONS = "Conditions" +LEGEND_ACTIONS = "Actions" +BUTTON_DONE = "Done" +BUTTON_ADD_CONDITION = "Add a Condition" +SELECT_ACTION_NONE = "None" +SELECT_ACTION_MOVE_TO = "Move to" +SELECT_ACTION_FORWARD_TO = "Forward to" +SELECT_ACTION_REJECT = "Reject" +SELECT_ACTION_VACATION_MESSAGE = "Vacation message" +SELECT_ACTION_DISCARD = "Discard" +SELECT_FIELD_FROM = "From" +SELECT_FIELD_RECIPIENTS = "Recipients (To or CC)" +SELECT_FIELD_SUBJECT = "Subject" +SELECT_FIELD_HEADER = "Header" +SELECT_FIELD_SIZE = "Size" +SELECT_TYPE_CONTAINS = "Contains" +SELECT_TYPE_NOT_CONTAINS = "Not Contains" +SELECT_TYPE_MATCHES = "Matches (* and ? supported)" +SELECT_TYPE_NOT_MATCHES = "Not Matches (* and ? supported)" +SELECT_TYPE_REGEXP = "Regexp" +SELECT_TYPE_NOT_REGEXP = "Not Regexp" +SELECT_TYPE_EQUAL_TO = "Equal To" +SELECT_TYPE_NOT_EQUAL_TO = "Not Equal To" +SELECT_MATCH_ANY = "Matching any of the following rules" +SELECT_MATCH_ALL = "Matching all of the following rules" +MARK_AS_READ_LABEL = "Mark as read" +REPLY_INTERVAL_LABEL = "Reply interval (days)" +KEEP_LABEL = "Keep" +STOP_LABEL = "Don't stop processing rules" +EMAIL_LABEL = "Email" +VACATION_SUBJECT_LABEL = "Subject (optional)" +VACATION_MESSAGE_LABEL = "Message" +REJECT_MESSAGE_LABEL = "Reject message" +ALL_INCOMING_MESSAGES_DESC = "All incoming messages" [POPUPS_SYSTEM_FOLDERS] -TITLE_SYSTEM_FOLDERS = "Selecteer systeem mappen" -SELECT_CHOOSE_ONE = "Kies één" -SELECT_UNUSE_NAME = "Niet gebruiken" -LABEL_SENT = "Verzonden items" -LABEL_DRAFTS = "Concepten" -LABEL_SPAM = "Ongewenste e-mail" -LABEL_TRASH = "Verwijderde items" -LABEL_ARCHIVE = "Archief" -BUTTON_CANCEL = "Annuleer" -BUTTON_CLOSE = "Sluiten" -NOTIFICATION_SENT = "U heeft nog geen \"Verzonden items\" folder aangeduid waar de berichten geplaatst worden na het versturen. -Indien u geen verzonden berichten wilt bewaren, kies de \"Niet gebruiken\" optie." -NOTIFICATION_DRAFTS = "U heeft nog geen \"Concepten\" folder aangeduid waar de berichten bewaard worden tijdens het opstellen." -NOTIFICATION_SPAM = "U heeft nog geen \"Ongewenste e-mail\" folder aangeduid waar de spam berichten geplaatst worden. -Indien u berichten permanent wilt verwijderen, kies de \"Niet gebruiken\" optie." -NOTIFICATION_TRASH = "U heeft nog geen \"Verwijderde items\" folder aangeduid waar de verwijderde berichten geplaatst worden. -Indien u berichten permanent wilt verwijderen, kies de \"Niet gebruiken\" optie." -NOTIFICATION_ARCHIVE = "U heeft nog geen \"Archief\" map aangeduid waar de gearchiveerde berichten geplaatst worden." +TITLE_SYSTEM_FOLDERS = "Select system folders" +SELECT_CHOOSE_ONE = "Choose one" +SELECT_UNUSE_NAME = "Do not use" +LABEL_SENT = "Sent" +LABEL_DRAFTS = "Drafts" +LABEL_SPAM = "Spam" +LABEL_TRASH = "Trash" +LABEL_ARCHIVE = "Archive" +BUTTON_CANCEL = "Cancel" +BUTTON_CLOSE = "Close" +NOTIFICATION_SENT = "You haven't selected \"Sent\" system folder messages are put to after sending. +If you don't want to save sent message, please select \"Do not use\" option." +NOTIFICATION_DRAFTS = "You haven't selected \"Drafts\" system folder messages are saved to while composing." +NOTIFICATION_SPAM = "You haven't selected \"Spam\" system folder spamed messages are placed to. +If you wish to remove messages permanently, please select \"Do not use\" option." +NOTIFICATION_TRASH = "You haven't selected \"Trash\" system folder deleted messages are placed to. +If you wish to remove messages permanently, please select \"Do not use\" option." +NOTIFICATION_ARCHIVE = "You haven't selected \"Archive\" system folder achived messages are placed to." [POPUPS_TWO_FACTOR_CFG] -LEGEND_TWO_FACTOR_AUTH = "2-Stap verificatie" -LABEL_ENABLE_TWO_FACTOR = "Gebruik 2-Stap verificatie" -LABEL_TWO_FACTOR_USER = "Gebruikersnaam" +LEGEND_TWO_FACTOR_AUTH = "2-Step Verification (TOTP)" +LABEL_ENABLE_TWO_FACTOR = "Enable 2-Step verification" +LABEL_TWO_FACTOR_USER = "User" LABEL_TWO_FACTOR_STATUS = "Status" -LABEL_TWO_FACTOR_SECRET = "Geheime sleutel" +LABEL_TWO_FACTOR_SECRET = "Secret" LABEL_TWO_FACTOR_BACKUP_CODES = "Backup codes" -BUTTON_CREATE = "Nieuwe geheime sleutel aanmaken" +BUTTON_CREATE = "Create a secret" BUTTON_ACTIVATE = "Activate" -BUTTON_CLEAR = "Wissen" +BUTTON_CLEAR = "Clear" BUTTON_LOGOUT = "Logout" BUTTON_DONE = "Done" BUTTON_TEST = "Test" LINK_TEST = "test" -BUTTON_SHOW_SECRET = "Bekijk geheime sleutel" -BUTTON_HIDE_SECRET = "Verberg geheime sleutel" +BUTTON_SHOW_SECRET = "Show Secret" +BUTTON_HIDE_SECRET = "Hide Secret" TWO_FACTOR_REQUIRE_DESC = "Your account requires 2-Step verification configuration." -TWO_FACTOR_SECRET_CONFIGURED_DESC = "Geconfigureerd" -TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Niet geconfigureerd" -TWO_FACTOR_SECRET_DESC = "Importeer deze informatie in uw Google Authenticator-client (of andere TOTP-client) door gebruik te maken van de QR code hier beneden of door de code handmatig in te voeren." -TWO_FACTOR_BACKUP_CODES_DESC = "Als u geen codes ontvangt via de Google Authenticator kan je de backup codes gebruiken om in te loggen. Na gebruik van de backup code wordt deze inactief." +TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configured" +TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured" +TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually." +TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator (or other TOTP client), you can use backup codes to sign in. After you’ve used a backup code to sign in, it will become inactive." TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test." [TITLES] -LOADING = "Ophalen..." -LOGIN = "Inloggen" -MAILBOX = "Mailbox" -SETTINGS = "Instellingen" -COMPOSE = "Opstellen" +LOADING = "Loading" +LOGIN = "Login" +MAILBOX = "MailBox" +SETTINGS = "Settings" +COMPOSE = "Compose" [UPLOAD] -ERROR_FILE_IS_TOO_BIG = "Bestand is te groot" -ERROR_FILE_PARTIALLY_UPLOADED = "Bestand is slechts deels geüpload door onbekende oorzaak" -ERROR_NO_FILE_UPLOADED = "Geen bestand geüpload" -ERROR_MISSING_TEMP_FOLDER = "Tijdelijk bestand ontbreekt" -ERROR_ON_SAVING_FILE = "Onbekende fout bij het opslaan van het bestand" -ERROR_FILE_TYPE = "Onjuist bestandstype" -ERROR_UNKNOWN = "Er is een onbekende fout opgetreden" +ERROR_FILE_IS_TOO_BIG = "File is too big" +ERROR_FILE_PARTIALLY_UPLOADED = "File was partially uploaded due to unknown error" +ERROR_NO_FILE_UPLOADED = "No file uploaded" +ERROR_MISSING_TEMP_FOLDER = "The temporary file is missing" +ERROR_ON_SAVING_FILE = "An unknown file upload error occurred" +ERROR_FILE_TYPE = "Invalid file type" +ERROR_UNKNOWN = "An unknown file upload error occurred" [EDITOR] -TEXT_SWITCHER_PLAINT_TEXT = "Platte tekst" -TEXT_SWITCHER_RICH_FORMATTING = "Tekst met opmaak" -TEXT_SWITCHER_CONFIRM = "Tekst opmaak zal verloren gaan. Wenst u verder te gaan?" +TEXT_SWITCHER_PLAINT_TEXT = "Plain text" +TEXT_SWITCHER_RICH_FORMATTING = "Rich formatting" +TEXT_SWITCHER_CONFIRM = "Text formatting and images will be lost. Are you sure you want to continue?" [SETTINGS_LABELS] -LABEL_PERSONAL_NAME = "Persoonlijk" -LABEL_GENERAL_NAME = "Algemeen" -LABEL_CONTACTS_NAME = "Contactpersonen" -LABEL_FOLDERS_NAME = "Mappen" +LABEL_PERSONAL_NAME = "Personal" +LABEL_GENERAL_NAME = "General" +LABEL_CONTACTS_NAME = "Contacts" +LABEL_FOLDERS_NAME = "Folders" LABEL_ACCOUNTS_NAME = "Accounts" -LABEL_IDENTITY_NAME = "Identiteit" -LABEL_IDENTITIES_NAME = "Identiteiten" +LABEL_IDENTITY_NAME = "Identity" +LABEL_IDENTITIES_NAME = "Identities" LABEL_FILTERS_NAME = "Filters" LABEL_TEMPLATES_NAME = "Templates" -LABEL_SECURITY_NAME = "Beveiliging" +LABEL_SECURITY_NAME = "Security" LABEL_SOCIAL_NAME = "Social" -LABEL_THEMES_NAME = "Thema's" -LABEL_CHANGE_PASSWORD_NAME = "Wachtwoord" +LABEL_THEMES_NAME = "Themes" +LABEL_CHANGE_PASSWORD_NAME = "Password" LABEL_OPEN_PGP_NAME = "OpenPGP" -BUTTON_BACK = "Terug" +BUTTON_BACK = "Back" [SETTINGS_FILTERS] LEGEND_FILTERS = "Filters" -BUTTON_SAVE = "Opslaan" -BUTTON_ADD_FILTER = "Filter toevoegen" -BUTTON_DELETE = "Verwijder" -BUTTON_RAW_SCRIPT = "Maak een custom script" -SUBNAME_NONE = "Geen" -SUBNAME_MOVE_TO = "Verplaats naar map \"%FOLDER%\"" -SUBNAME_FORWARD_TO = "Doorsturen naar \"%EMAIL%\"" -SUBNAME_REJECT = "Afwijzen" -SUBNAME_VACATION_MESSAGE = "Afwezigheidsbericht" -SUBNAME_DISCARD = "Gooi weg" -CAPABILITY_LABEL = "Mogelijkheden" -LOADING_PROCESS = "Bezig met updaten van de filter lijst" -DELETING_ASK = "Weet u het zeker?" -CHACHES_NEED_TO_BE_SAVED_DESC = "Wijzigingen moeten nog opgeslagen worden op de server." +BUTTON_SAVE = "Save" +BUTTON_ADD_FILTER = "Add a Filter" +BUTTON_DELETE = "Delete" +BUTTON_RAW_SCRIPT = "Use Custom User Script" +SUBNAME_NONE = "None" +SUBNAME_MOVE_TO = "Move to \"%FOLDER%\"" +SUBNAME_FORWARD_TO = "Forward to \"%EMAIL%\"" +SUBNAME_REJECT = "Reject" +SUBNAME_VACATION_MESSAGE = "Vacation message" +SUBNAME_DISCARD = "Discard" +CAPABILITY_LABEL = "Capability" +LOADING_PROCESS = "Updating filter list" +DELETING_ASK = "Are you sure?" +CHACHES_NEED_TO_BE_SAVED_DESC = "These changes need to be saved to the server." [SETTINGS_IDENTITY] -LEGEND_IDENTITY = "Identiteit" -LABEL_DISPLAY_NAME = "Naam" -LABEL_REPLY_TO = "Antwoordadres" -LABEL_SIGNATURE = "Handtekening" -LABEL_ADD_SIGNATURE_TO_ALL = "Handtekening standaard toevoegen aan bericht" +LEGEND_IDENTITY = "Identity" +LABEL_DISPLAY_NAME = "Name" +LABEL_REPLY_TO = "Reply-To" +LABEL_SIGNATURE = "Signature" +LABEL_ADD_SIGNATURE_TO_ALL = "Add your signature to all the outgoing messages" [SETTINGS_SECURITY] -LEGEND_SECURITY = "Beveiliging" +LEGEND_SECURITY = "Security" LABEL_CONFIGURATE_TWO_FACTOR = "Configurate 2-Step verification" -LABEL_AUTOLOGOUT = "Automatisch uitloggen" -AUTOLOGIN_NEVER_OPTION_NAME = "Nooit" -AUTOLOGIN_MINUTES_OPTION_NAME = "%MINUTES% minuten" +LABEL_AUTOLOGOUT = "Auto Logout" +AUTOLOGIN_NEVER_OPTION_NAME = "Never" +AUTOLOGIN_MINUTES_OPTION_NAME = "%MINUTES% minute(s)" [SETTINGS_GENERAL] -LEGEND_GENERAL = "Algemeen" -LABEL_LANGUAGE = "Taal" -LABEL_LAYOUT = "Indeling" -LABEL_LAYOUT_NO_SPLIT = "Geen splitsing" -LABEL_LAYOUT_VERTICAL_SPLIT = "Verticale splitsing" -LABEL_LAYOUT_HORIZONTAL_SPLIT = "Horizontale splitsing" -LABEL_EDITOR = "Standaard tekst editor" -LABEL_EDITOR_HTML = "HTML" -LABEL_EDITOR_PLAIN = "Platte tekst" -LABEL_EDITOR_HTML_FORCED = "Html (geforceerd)" -LABEL_EDITOR_PLAIN_FORCED = "Platte tekst (geforceerd)" -LABEL_ANIMATION = "Interface animatie" -LABEL_ANIMATION_FULL = "Volledig" -LABEL_ANIMATION_NORMAL = "Normaal" -LABEL_ANIMATION_NONE = "Geen" -LABEL_VIEW_OPTIONS = "Bekijk opties" -LABEL_USE_PREVIEW_PANE = "Toon leesvenster" -LABEL_USE_CHECKBOXES_IN_LIST = "Toon selectievakjes in de lijst" -LABEL_USE_THREADS = "Groepeer berichten" -LABEL_REPLY_SAME_FOLDER = "Plaats antwoorden in de map van het originele bericht" -LABEL_SHOW_IMAGES = "Afbeeldingen altijd weergeven in het bericht" -LABEL_SHOW_ANIMATION = "Toon animaties" -LABEL_MESSAGE_PER_PAGE = "Berichten op pagina" -LABEL_NOTIFICATIONS = "Notificaties" -LABEL_SOUND_NOTIFICATION = "Notificatie geluid" -LABEL_CHROME_NOTIFICATION_DESC = "Toon nieuwe berichten popup" -LABEL_CHROME_NOTIFICATION_DESC_DENIED = "(Geblokkeerd door de browser)" +LEGEND_GENERAL = "General" +LABEL_LANGUAGE = "Language" +LABEL_LAYOUT = "Layout" +LABEL_LAYOUT_NO_SPLIT = "No Split" +LABEL_LAYOUT_VERTICAL_SPLIT = "Vertical Split" +LABEL_LAYOUT_HORIZONTAL_SPLIT = "Horizontal Split" +LABEL_EDITOR = "Default text editor" +LABEL_EDITOR_HTML = "Html" +LABEL_EDITOR_PLAIN = "Plain" +LABEL_EDITOR_HTML_FORCED = "Html (forced)" +LABEL_EDITOR_PLAIN_FORCED = "Plain (forced)" +LABEL_ANIMATION = "Interface animation" +LABEL_ANIMATION_FULL = "Full" +LABEL_ANIMATION_NORMAL = "Normal" +LABEL_ANIMATION_NONE = "None" +LABEL_VIEW_OPTIONS = "View options" +LABEL_USE_PREVIEW_PANE = "Use preview pane" +LABEL_USE_CHECKBOXES_IN_LIST = "Display checkboxes in list" +LABEL_USE_THREADS = "Use threads" +LABEL_REPLY_SAME_FOLDER = "Place replies in the folder of the message being replied to" +LABEL_SHOW_IMAGES = "Always display external images in message body" +LABEL_SHOW_ANIMATION = "Show animation" +LABEL_MESSAGE_PER_PAGE = "Messages on page" +LABEL_NOTIFICATIONS = "Notifications" +LABEL_SOUND_NOTIFICATION = "Sound notification" +LABEL_CHROME_NOTIFICATION_DESC = "Show new messages notification popups" +LABEL_CHROME_NOTIFICATION_DESC_DENIED = "(Blocked by the browser)" [SETTINGS_CONTACTS] -LEGEND_CONTACTS = "Contactpersonen" -LABEL_CONTACTS_AUTOSAVE = "Automatisch ontvangers toevoegen aan uw adresboek" -LEGEND_CONTACTS_SYNC = "Server Synchronisatie (CardDAV)" -LABEL_CONTACTS_SYNC_ENABLE = "Server synchronisatie inschakelen" +LEGEND_CONTACTS = "Contacts" +LABEL_CONTACTS_AUTOSAVE = "Automatically add recipients to your address book" +LEGEND_CONTACTS_SYNC = "Remote Synchronization (CardDAV)" +LABEL_CONTACTS_SYNC_ENABLE = "Enable remote synchronization" LABEL_CONTACTS_SYNC_SERVER = "Server" -LABEL_CONTACTS_SYNC_AB_URL = "Adresboek URL" -LABEL_CONTACTS_SYNC_USER = "Gebruikersnaam" -LABEL_CONTACTS_SYNC_PASSWORD = "Wachtwoord" +LABEL_CONTACTS_SYNC_AB_URL = "Addressbook URL" +LABEL_CONTACTS_SYNC_USER = "User" +LABEL_CONTACTS_SYNC_PASSWORD = "Password" [SETTINGS_THEMES] -LEGEND_THEMES = "Thema's" -LEGEND_THEMES_CUSTOM = "Aangepaste thema configuratie" -LABEL_CUSTOM_TYPE = "Soort" -LABEL_CUSTOM_TYPE_LIGHT = "Licht" -LABEL_CUSTOM_TYPE_DARK = "Donker" -LABEL_CUSTOM_BACKGROUND_IMAGE = "Achtergrond" -BUTTON_UPLOAD_BACKGROUND_IMAGE = "Upload achtergrond afbeelding (JPG, PNG)" -ERROR_FILE_IS_TOO_BIG = "Bestand is te groot" -ERROR_FILE_TYPE_ERROR = "Onjuist bestandstype (alleen JPG and PNG)" -ERROR_UNKNOWN = "Er is een onbekende fout opgetreden" +LEGEND_THEMES = "Themes" +LEGEND_THEMES_CUSTOM = "Custom Theme Configuration" +LABEL_CUSTOM_TYPE = "Type" +LABEL_CUSTOM_TYPE_LIGHT = "Light" +LABEL_CUSTOM_TYPE_DARK = "Dark" +LABEL_CUSTOM_BACKGROUND_IMAGE = "Background" +BUTTON_UPLOAD_BACKGROUND_IMAGE = "Upload background image (JPG, PNG)" +ERROR_FILE_IS_TOO_BIG = "File is too big" +ERROR_FILE_TYPE_ERROR = "Invalid file type (JPG and PNG only)" +ERROR_UNKNOWN = "An unknown file upload error occurred" [SETTINGS_SOCIAL] LEGEND_GOOGLE = "Google" -BUTTON_GOOGLE_CONNECT = "Via Google verbinden" -BUTTON_GOOGLE_DISCONNECT = "Verbinding met Google verbreken" -MAIN_GOOGLE_DESC = "Na activatie van inloggen via Google kunt u hiermee inloggen d.m.v. de Google knop op het login scherm." +BUTTON_GOOGLE_CONNECT = "Connect Google" +BUTTON_GOOGLE_DISCONNECT = "Disconnect Google" +MAIN_GOOGLE_DESC = "After enabling login via Google, you can log into this account using Google button on the login screen." LEGEND_FACEBOOK = "Facebook" -BUTTON_FACEBOOK_CONNECT = "Via Facebook verbinden" -BUTTON_FACEBOOK_DISCONNECT = "Verbinding met Facebook verbreken" -MAIN_FACEBOOK_DESC = "Na activatie van inloggen via Facebook kunt u hiermee inloggen d.m.v. de Google knop op het login scherm." +BUTTON_FACEBOOK_CONNECT = "Connect Facebook" +BUTTON_FACEBOOK_DISCONNECT = "Disconnect Facebook" +MAIN_FACEBOOK_DESC = "After enabling login via Facebook, you can log into this account using Facebook button on the login screen." LEGEND_TWITTER = "Twitter" -BUTTON_TWITTER_CONNECT = "Via Twitter verbinden" -BUTTON_TWITTER_DISCONNECT = "Verbinding via Twitter verbreken" -MAIN_TWITTER_DESC = "Na activatie van inloggen via Twitter kunt u hiermee inloggen d.m.v. de Google knop op het login scherm." +BUTTON_TWITTER_CONNECT = "Connect Twitter" +BUTTON_TWITTER_DISCONNECT = "Disconnect Twitter" +MAIN_TWITTER_DESC = "After enabling login via Twitter, you can log into this account using Twitter button on the login screen." [SETTINGS_FOLDERS] -LEGEND_FOLDERS = "Mappen lijst" -BUTTON_CREATE = "Maak een map" -BUTTON_SYSTEM = "Selecteer systeem mappen" -BUTTON_DELETE = "Verwijder" -BUTTON_SUBSCRIBE = "Abonneer" -BUTTON_UNSUBSCRIBE = "Abonnement opzeggen" -LOADING_PROCESS = "Mappen lijst aan het bijwerken" -CREATING_PROCESS = "Map aan het aanmaken" -DELETING_PROCESS = "Map aan het wissen" -RENAMING_PROCESS = "Map hernoemen" -DELETING_ASK = "Weet u het zeker?" -TO_MANY_FOLDERS_DESC_1 = "U heeft te veel mappen!" -TO_MANY_FOLDERS_DESC_2 = "Er worden er maar een deel weergegeven om prestatieproblemen te voorkomen." +LEGEND_FOLDERS = "Folder List" +BUTTON_CREATE = "Create Folder" +BUTTON_SYSTEM = "Select System Folders" +BUTTON_DELETE = "Delete" +BUTTON_SUBSCRIBE = "Subscribe" +BUTTON_UNSUBSCRIBE = "Unsubscribe" +LOADING_PROCESS = "Updating folder list" +CREATING_PROCESS = "Creating a folder" +DELETING_PROCESS = "Deleting a folder" +RENAMING_PROCESS = "Renaming a folder" +DELETING_ASK = "Are you sure?" +TO_MANY_FOLDERS_DESC_1 = "You have too many folders!" +TO_MANY_FOLDERS_DESC_2 = "We have shown only a part of them, to avoid performance problems." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] -LEGEND_ACCOUNTS = "Account Lijst" -LEGEND_IDENTITIES = "Identiteiten" -LEGEND_ACCOUNTS_AND_IDENTITIES = "Accounts en Identiteiten" -BUTTON_ADD_ACCOUNT = "Account toevoegen" -BUTTON_ADD_IDENTITY = "Identiteit toevoegen" -BUTTON_DELETE = "Wissen" -LOADING_PROCESS = "Account lijst aan het bijwerken" -DELETING_ASK = "Weet u het zeker?" -DEFAULT_IDENTITY_LABEL = "standaard" +LEGEND_ACCOUNTS = "Accounts" +LEGEND_IDENTITIES = "Identities" +LEGEND_ACCOUNTS_AND_IDENTITIES = "Accounts and Identities" +BUTTON_ADD_ACCOUNT = "Add an Account" +BUTTON_ADD_IDENTITY = "Add an Identity" +BUTTON_DELETE = "Delete" +LOADING_PROCESS = "Updating..." +DELETING_ASK = "Are you sure?" +DEFAULT_IDENTITY_LABEL = "default" [SETTINGS_IDENTITIES] -LEGEND_IDENTITY = "Identiteit" -LEGEND_IDENTITIES = "Additionele Identiteit" -LABEL_DEFAULT = "Standaard" -LABEL_DISPLAY_NAME = "Naam" -LABEL_REPLY_TO = "Antwoordadres" -LABEL_SIGNATURE = "Handtekening" -LABEL_ADD_SIGNATURE_TO_ALL = "Handtekening standaard toevoegen aan bericht" -BUTTON_ADD_IDENTITY = "Identiteit toevoegen" -BUTTON_DELETE = "Verwijder" -LOADING_PROCESS = "Identiteit lijst bijwerken" -DELETING_ASK = "Weet u het zeker?" +LEGEND_IDENTITY = "Identity" +LEGEND_IDENTITIES = "Additional Identities" +LABEL_DEFAULT = "Default" +LABEL_DISPLAY_NAME = "Name" +LABEL_REPLY_TO = "Reply-To" +LABEL_SIGNATURE = "Signature" +LABEL_ADD_SIGNATURE_TO_ALL = "Add your signature to all the outgoing messages" +BUTTON_ADD_IDENTITY = "Add Identity" +BUTTON_DELETE = "Delete" +LOADING_PROCESS = "Updating identity list" +DELETING_ASK = "Are you sure?" [SETTINGS_CHANGE_PASSWORD] -LEGEND_CHANGE_PASSWORD = "Wachtwoord aanpassen" -LABEL_CURRENT_PASSWORD = "Huidig wachtwoord" -LABEL_NEW_PASSWORD = "Nieuw wachtwoord" -LABEL_REPEAT_PASSWORD = "Bevestig wachtwoord" -BUTTON_UPDATE_PASSWORD = "Wachtwoord wijzigen" -ERROR_PASSWORD_MISMATCH = "Wachtwoorden zijn niet gelijk, probeer opnieuw" +LEGEND_CHANGE_PASSWORD = "Change Password" +LABEL_CURRENT_PASSWORD = "Current password" +LABEL_NEW_PASSWORD = "New password" +LABEL_REPEAT_PASSWORD = "Confirm New Password" +BUTTON_UPDATE_PASSWORD = "Set New Password" +ERROR_PASSWORD_MISMATCH = "Passwords do not match, please try again" [SETTINGS_OPEN_PGP] LEGEND_OPEN_PGP = "OpenPGP" -BUTTON_ADD_OPEN_PGP_KEY = "Importeer OpenPGP sleutel" -BUTTON_GENERATE_OPEN_PGP_KEYS = "Genereer OpenPGP sleutels" -TITLE_PRIVATE = "Privé sleutel" -TITLE_PUBLIC = "Publieke sleutel" -DELETING_ASK = "Weet u het zeker?" +BUTTON_ADD_OPEN_PGP_KEY = "Import OpenPGP Key" +BUTTON_GENERATE_OPEN_PGP_KEYS = "Generate OpenPGP Keys" +TITLE_PRIVATE = "Private" +TITLE_PUBLIC = "Public" +DELETING_ASK = "Are you sure?" [SHORTCUTS_HELP] -LEGEND_SHORTCUTS_HELP = "Hulp bij toetsenbord sneltoetsen" +LEGEND_SHORTCUTS_HELP = "Keyboard shortcuts help" TAB_MAILBOX = "Mailbox" -TAB_MESSAGE_LIST = "Berichtenlijst" -TAB_MESSAGE_VIEW = "Bericht leesvenster" -TAB_COMPOSE = "Opstellen" -LABEL_OPEN_USER_DROPDOWN = "Open gebruikers menu" -LABEL_REPLY = "Beantwoord" -LABEL_REPLY_ALL = "Alle beantwoorden" -LABEL_FORWARD = "Doorsturen" -LABEL_FORWARD_MULTIPLY = "Doorsturen als bijlage(n)" +TAB_MESSAGE_LIST = "Message list" +TAB_MESSAGE_VIEW = "Message view" +TAB_COMPOSE = "Compose" +LABEL_OPEN_USER_DROPDOWN = "Open user dropdown" +LABEL_REPLY = "Reply" +LABEL_REPLY_ALL = "Reply All" +LABEL_FORWARD = "Forward" +LABEL_FORWARD_MULTIPLY = "Forward as attachment(s)" LABEL_HELP = "Help" -LABEL_CHECK_ALL = "Selecteer alle berichten" -LABEL_ARCHIVE = "Archiveren" -LABEL_DELETE = "Verwijderen" -LABEL_OPEN_THREAD = "Open geselecteerde berichtenlijst"" -LABEL_MOVE = "Verplaatsen" -LABEL_READ = "Markeer geselecteerde berichten als gelezen" -LABEL_UNREAD = "Markeer geselecteerde berichten als ongelezen" -LABEL_IMPORTANT = "Belangrijk, vlag geselecteerde berichten" -LABEL_SEARCH = "Zoeken" -LABEL_CANCEL_SEARCH = "Zoekopdracht afbreken" -LABEL_FULLSCREEN_ENTER = "Bericht in volledig scherm lezen (leesvenster ingeschakeld)" -LABEL_VIEW_MESSAGE_ENTER = "Bericht lezen (leesvenster uitgeschakeld)" -LABEL_SWITCH_TO_MESSAGE = "Schakel focus naar bericht" -LABEL_SWITCH_TO_FOLDER_LIST = "Schakel focus naar berichtenlijst" -LABEL_FULLSCREEN_TOGGLE = "Schakel tussen normaal en lezen in volledig scherm" -LABEL_BLOCKQUOTES_TOGGLE = "Schakel blok citaten aan of uit" -LABEL_THREAD_NEXT = "Volgende bericht in groep" -LABEL_THREAD_PREV = "Vorige bericht in groep" -LABEL_PRINT = "Afdrukken" -LABEL_EXIT_FULLSCREEN = "Volledig scherm sluiten" -LABEL_CLOSE_MESSAGE = "Bericht sluiten (leesvenster uitgeschakeld)" -LABEL_SWITCH_TO_LIST = "Schakel focus terug naar berichtenlijst" -LABEL_OPEN_COMPOSE_POPUP = "Open nieuw bericht venster" -LABEL_OPEN_IDENTITIES_DROPDOWN = "Open identiteiten menu" -LABEL_SAVE_MESSAGE = "Concept opslaan" -LABEL_SEND_MESSAGE = "Bericht versturen" -LABEL_CLOSE_COMPOSE = "Nieuw bericht venster sluiten" +LABEL_CHECK_ALL = "Select all messages" +LABEL_ARCHIVE = "Archive" +LABEL_DELETE = "Delete" +LABEL_OPEN_THREAD = "Open selected thread" +LABEL_MOVE = "Move" +LABEL_READ = "Read selected messages" +LABEL_UNREAD = "Unread selected messages" +LABEL_IMPORTANT = "Important, star/flag selected messages" +LABEL_SEARCH = "Search" +LABEL_CANCEL_SEARCH = "Cancel search" +LABEL_FULLSCREEN_ENTER = "Fullscreen (Preview pane layout)" +LABEL_VIEW_MESSAGE_ENTER = "View message (No preview pane layout)" +LABEL_SWITCH_TO_MESSAGE = "Switch focus to selected message" +LABEL_SWITCH_TO_FOLDER_LIST = "Switch focus to folder list" +LABEL_FULLSCREEN_TOGGLE = "Toggle fullscreen mode" +LABEL_BLOCKQUOTES_TOGGLE = "Toggle message blockquotes" +LABEL_THREAD_NEXT = "Next message in thread" +LABEL_THREAD_PREV = "Previous message in thread" +LABEL_PRINT = "Print" +LABEL_EXIT_FULLSCREEN = "Exit fullscreen mode" +LABEL_CLOSE_MESSAGE = "Close message (No preview pane layout)" +LABEL_SWITCH_TO_LIST = "Switch focus back to message list" +LABEL_OPEN_COMPOSE_POPUP = "Open compose popup" +LABEL_OPEN_IDENTITIES_DROPDOWN = "Open identities dropdown" +LABEL_SAVE_MESSAGE = "Save message" +LABEL_SEND_MESSAGE = "Send message" +LABEL_CLOSE_COMPOSE = "Close compose" [PGP_NOTIFICATIONS] -NO_PUBLIC_KEYS_FOUND = "Geen publieke sleutels gevonden" -NO_PUBLIC_KEYS_FOUND_FOR = "Geen publieke sleutels gevonden voor e-mail adres \"%EMAIL%\"" -NO_PRIVATE_KEY_FOUND = "Geen geheime sleutel gevonden" -NO_PRIVATE_KEY_FOUND_FOR = "Geen geheime sleutel gevonden voor e-mail adres \"%EMAIL%\"" -UNVERIFIRED_SIGNATURE = "Ongeverifieerde handtekening" -DECRYPTION_ERROR = "OpenPGP decryptie fout" -GOOD_SIGNATURE = "Juiste handtekening van %USER%" -PGP_ERROR = "OpenPGP foutmelding: %ERROR%" -SPECIFY_FROM_EMAIL = "Geef a.u.b. een VAN e-mail adres op" -SPECIFY_AT_LEAST_ONE_RECIPIENT = "Geef a.u.b. minimaal één ontvanger op" +NO_PUBLIC_KEYS_FOUND = "No public keys found" +NO_PUBLIC_KEYS_FOUND_FOR = "No public keys found for \"%EMAIL%\" email" +NO_PRIVATE_KEY_FOUND = "No private key found" +NO_PRIVATE_KEY_FOUND_FOR = "No private key found for \"%EMAIL%\" email" +UNVERIFIRED_SIGNATURE = "Unverified signature" +DECRYPTION_ERROR = "OpenPGP decryption error" +GOOD_SIGNATURE = "Good signature from %USER%" +PGP_ERROR = "OpenPGP error: %ERROR%" +SPECIFY_FROM_EMAIL = "Please specify FROM email address" +SPECIFY_AT_LEAST_ONE_RECIPIENT = "Please specify at least one recipient" [NOTIFICATIONS] -INVALID_TOKEN = "Ongeldige token" -AUTH_ERROR = "Authenticatie mislukt" -ACCESS_ERROR = "Toegangsfout" -CONNECTION_ERROR = "Kan geen verbinding maken met de Server" -CAPTCHA_ERROR = "Onjuiste CAPTCHA" -SOCIAL_FACEBOOK_LOGIN_ACCESS_DISABLE = "Deze social ID is nog niet aan een e-mail account gekoppeld. Log in met e-mail adres en wachtwoord en schakel deze functie in in het account instellingen menu." -SOCIAL_TWITTER_LOGIN_ACCESS_DISABLE = "Deze social ID is nog niet aan een e-mail account gekoppeld. Log in met e-mail adres en wachtwoord en schakel deze functie in in het account instellingen menu." -SOCIAL_GOOGLE_LOGIN_ACCESS_DISABLE = "Deze social ID is nog niet aan een e-mail account gekoppeld. Log in met e-mail adres en wachtwoord en schakel deze functie in in het account instellingen menu." -DOMAIN_NOT_ALLOWED = "Domein is niet toegestaan" -ACCOUNT_NOT_ALLOWED = "Account is niet toegestaan" -ACCOUNT_TWO_FACTOR_AUTH_REQUIRED = "2-Stap verificatie vereist" -ACCOUNT_TWO_FACTOR_AUTH_ERROR = "2-Stap verificatie fout" -COULD_NOT_SAVE_NEW_PASSWORD = "Nieuwe wachtwoord kon niet opgeslagen worden" -CURRENT_PASSWORD_INCORRECT = "Huidig wachtwoord onjuist" -NEW_PASSWORD_SHORT = "Wachtwoord is te kort" -NEW_PASSWORD_WEAK = "Wachtwoord is te makkelijk" -NEW_PASSWORD_FORBIDDENT = "Wachtwoord bevat verboden tekens" -CONTACTS_SYNC_ERROR = "Contactpersonen synchronisatie fout" -CANT_GET_MESSAGE_LIST = "Berichtenlijst kan niet worden opgehaald" -CANT_GET_MESSAGE = "Bericht kan niet worden opgehaald" -CANT_DELETE_MESSAGE = "Kan bericht niet verwijderen" -CANT_MOVE_MESSAGE = "Kan bericht niet verplaatsen" -CANT_SAVE_MESSAGE = "Kan bericht niet opslaan" -CANT_SEND_MESSAGE = "Kan bericht niet verzenden" -INVALID_RECIPIENTS = "Onjuiste ontvangers" -CANT_SAVE_FILTERS = "Kan filters niet opslaan" -CANT_GET_FILTERS = "Kan filters niet ophalen" -FILTERS_ARE_NOT_CORRECT = "Filters zijn onjuist" -CANT_CREATE_FOLDER = "Kan map niet aanmaken" -CANT_RENAME_FOLDER = "Kan map niet hernoemen" -CANT_DELETE_FOLDER = "Kan map niet verwijderen" -CANT_DELETE_NON_EMPTY_FOLDER = "Een niet lege map kan niet verwijderd worden" -CANT_SUBSCRIBE_FOLDER = "Kan niet abonneren op folder" -CANT_UNSUBSCRIBE_FOLDER = "Kan abonnement op folder niet opzeggen" -CANT_SAVE_SETTINGS = "Instellingen kunnen niet opgeslagen worden" -CANT_SAVE_PLUGIN_SETTINGS = "Instellingen kunnen niet opgeslagen worden" -DOMAIN_ALREADY_EXISTS = "Domein bestaat reeds" -CANT_INSTALL_PACKAGE = "Package installeren mislukt" -CANT_DELETE_PACKAGE = "Package verwijderen mislukt" -INVALID_PLUGIN_PACKAGE = "Ongeldig plug-in package" -UNSUPPORTED_PLUGIN_PACKAGE = "Niet ondersteund plug-in package" -LICENSING_SERVER_IS_UNAVAILABLE = "Licentie Server is niet beschikbaar" -LICENSING_DOMAIN_EXPIRED = "Licentie voor dit domein is verlopen" -LICENSING_DOMAIN_BANNED = "Licentie voor dit domein is verboden" -DEMO_SEND_MESSAGE_ERROR = "Vanwege beveiliging is het niet toegestaan dat deze demo account e-mail naar extern verzend!" -DEMO_ACCOUNT_ERROR = "Vanwege beveiliging is deze actie niet toegestaan voor deze account!" -ACCOUNT_ALREADY_EXISTS = "Account bestaat al" -MAIL_SERVER_ERROR = "Fout bij toegang tot de mail Server" -INVALID_INPUT_ARGUMENT = "Ongeldig invoer argument" -UNKNOWN_ERROR = "Er is een onbekende fout opgetreden" +INVALID_TOKEN = "Invalid token" +AUTH_ERROR = "Authentication failed" +ACCESS_ERROR = "Access error" +CONNECTION_ERROR = "Can't connect to server" +CAPTCHA_ERROR = "Incorrect CAPTCHA." +SOCIAL_FACEBOOK_LOGIN_ACCESS_DISABLE = "This social ID is not assigned for any email account yet. Log in using email credentials and enable this feature in account settings." +SOCIAL_TWITTER_LOGIN_ACCESS_DISABLE = "This social ID is not assigned for any email account yet. Log in using email credentials and enable this feature in account settings." +SOCIAL_GOOGLE_LOGIN_ACCESS_DISABLE = "This social ID is not assigned for any email account yet. Log in using email credentials and enable this feature in account settings." +DOMAIN_NOT_ALLOWED = "Domain is not allowed" +ACCOUNT_NOT_ALLOWED = "Account is not allowed" +ACCOUNT_TWO_FACTOR_AUTH_REQUIRED = "Two factor verification required" +ACCOUNT_TWO_FACTOR_AUTH_ERROR = "Two factor verification error" +COULD_NOT_SAVE_NEW_PASSWORD = "Could not save new password" +CURRENT_PASSWORD_INCORRECT = "Current password incorrect" +NEW_PASSWORD_SHORT = "Password is too short" +NEW_PASSWORD_WEAK = "Password is too easy" +NEW_PASSWORD_FORBIDDENT = "Password contains forbidden characters" +CONTACTS_SYNC_ERROR = "Contacts synchronization error" +CANT_GET_MESSAGE_LIST = "Can't get message list" +CANT_GET_MESSAGE = "Can't get message" +CANT_DELETE_MESSAGE = "Can't delete message" +CANT_MOVE_MESSAGE = "Can't move message" +CANT_SAVE_MESSAGE = "Can't save message" +CANT_SEND_MESSAGE = "Can't send message" +INVALID_RECIPIENTS = "Invalid recipients" +CANT_SAVE_FILTERS = "Can't save filters" +CANT_GET_FILTERS = "Can't get filters" +FILTERS_ARE_NOT_CORRECT = "Filters are not correct" +CANT_CREATE_FOLDER = "Can't create folder" +CANT_RENAME_FOLDER = "Can't rename folder" +CANT_DELETE_FOLDER = "Can't delete folder" +CANT_DELETE_NON_EMPTY_FOLDER = "Can't delete non-empty directory" +CANT_SUBSCRIBE_FOLDER = "Can't subscribe folder" +CANT_UNSUBSCRIBE_FOLDER = "Can't unsubscribe folder" +CANT_SAVE_SETTINGS = "Can't save settings" +CANT_SAVE_PLUGIN_SETTINGS = "Can't save settings" +DOMAIN_ALREADY_EXISTS = "Domain already exists" +CANT_INSTALL_PACKAGE = "Failed to install package" +CANT_DELETE_PACKAGE = "Failed to remove package" +INVALID_PLUGIN_PACKAGE = "Invalid plugin package" +UNSUPPORTED_PLUGIN_PACKAGE = "Unsupported plugin package" +LICENSING_SERVER_IS_UNAVAILABLE = "Subscription server is unvailable" +LICENSING_DOMAIN_EXPIRED = "Subscription for this domain has expired." +LICENSING_DOMAIN_BANNED = "Subscription for this domain is banned." +DEMO_SEND_MESSAGE_ERROR = "For security purposes, this account is not allowed to send messages to external e-mail addresses!" +DEMO_ACCOUNT_ERROR = "For security purposes, this account is not allowed for this action!" +ACCOUNT_ALREADY_EXISTS = "Account already exists" +MAIL_SERVER_ERROR = "An error has occured while accessing mail server" +INVALID_INPUT_ARGUMENT = "Invalid input argument" +UNKNOWN_ERROR = "Unknown error" [STATIC] -BACK_LINK = "Opnieuw laden" -DOMAIN_LIST_DESC = "Lijst van webmail domeinen die toegankelijk zijn" -PHP_EXSTENSIONS_ERROR_DESC = "Vereiste PHP extensies zijn niet beschikbaar in uw PHP configuratie!" -PHP_VERSION_ERROR_DESC = "Uw PHP versie (%VERSION%) is lager dan de minimaal vereiste 5.3.0!" -NO_SCRIPT_TITLE = "JavaScript is benodigd voor deze applicatie" -NO_SCRIPT_DESC = "JavaScript ondersteuning is niet beschikbaar in uw browser. -Gelieve Javascript in te schakelen en opnieuw te proberen." -NO_COOKIE_TITLE = "Cookies ondersteuning is nodig voor deze applicatie" -NO_COOKIE_DESC = "Cookies ondersteuning is niet beschikbaar in uw browser. -Gelieve Cookies in te schakelen en opnieuw te proberen." -BAD_BROWSER_TITLE = "Uw browser is verouderd" -BAD_BROWSER_DESC = "Om alle functies van deze applicatie te gebruiken, -download en installeer een van de volgende browsers:" +BACK_LINK = "Reload" +DOMAIN_LIST_DESC = "List of domains webmail is allowed to access." +PHP_EXSTENSIONS_ERROR_DESC = "Required PHP extension are not available in your PHP configuration!" +PHP_VERSION_ERROR_DESC = "Your PHP version (%VERSION%) is lower than the minimal required 5.3.0!" +NO_SCRIPT_TITLE = "JavaScript is required for this application." +NO_SCRIPT_DESC = "JavaScript support is not available in your browser. +Please enable JavaScript support in your browser settings and retry." +NO_COOKIE_TITLE = "Cookies support is required for this application." +NO_COOKIE_DESC = "Cookies support is not available in your browser. +Please enable Cookie support in your browser settings and retry." +BAD_BROWSER_TITLE = "Your browser is outdated." +BAD_BROWSER_DESC = "To use all the features of the application, +download and install one of these browsers:" diff --git a/rainloop/v/0.0.0/langs/no.ini b/rainloop/v/0.0.0/langs/no.ini index 3d94921f8..f1be023a9 100644 --- a/rainloop/v/0.0.0/langs/no.ini +++ b/rainloop/v/0.0.0/langs/no.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Klikk på en e-post for å lese" PGP_PASSWORD_INPUT_PLACEHOLDER = "Passord" PGP_SIGNED_MESSAGE_DESC = "OpenPGP-signert melding (klikk for å verifisere)" PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP-kryptert melding (klikk for å dekryptere)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Lesebekreftelse (meldingen er lest) - %SUBJECT%" @@ -551,6 +554,9 @@ RENAMING_PROCESS = "Endre navn på en mappe" DELETING_ASK = "Er du sikker?" TO_MANY_FOLDERS_DESC_1 = "You have too many folders!" TO_MANY_FOLDERS_DESC_2 = "We have shown only a part of them, to avoid performance problems." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Kontoer" @@ -709,4 +715,4 @@ NO_COOKIE_DESC = "Cookies-støtte er ikke tilgjengelig i nettleseren din . Vennligst aktiver Cookie-støtte i nettleserens innstillinger, og prøv på nytt ." BAD_BROWSER_TITLE = "Nettleseren din er utdatert." BAD_BROWSER_DESC = "Hvis du vil bruke alle funksjonene i programmet, -last ned og installerer en av disse nettleserne:" \ No newline at end of file +last ned og installerer en av disse nettleserne:" diff --git a/rainloop/v/0.0.0/langs/pl.ini b/rainloop/v/0.0.0/langs/pl.ini index 7e22c9237..5bdb1b370 100644 --- a/rainloop/v/0.0.0/langs/pl.ini +++ b/rainloop/v/0.0.0/langs/pl.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Wybierz wiadomość z listy w celu jej wyświetlenia" PGP_PASSWORD_INPUT_PLACEHOLDER = "Hasło" PGP_SIGNED_MESSAGE_DESC = "Wiadomość podpisana za pomocą OpenPGP (kliknij, aby zweryfikować)" PGP_ENCRYPTED_MESSAGE_DESC = "Wiadomość zaszyfrowana za pomocą OpenPGP (kliknij, aby odszyfrować)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Potwierdzenie odbioru (wyświetlenia) - %SUBJECT%" @@ -552,6 +555,9 @@ RENAMING_PROCESS = "Zmiana nazwy folderu" DELETING_ASK = "Czy na pewno usunąć?" TO_MANY_FOLDERS_DESC_1 = "Masz za dużo folderów!" TO_MANY_FOLDERS_DESC_2 = "Pokazaliśmy tylko część z nich aby uniknąć problemów z wydajnością." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Lista kont" diff --git a/rainloop/v/0.0.0/langs/pt-br.ini b/rainloop/v/0.0.0/langs/pt-br.ini index 2ef48d5bd..04725a26b 100644 --- a/rainloop/v/0.0.0/langs/pt-br.ini +++ b/rainloop/v/0.0.0/langs/pt-br.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Selecione uma mensagem para visualizá-la aqui." PGP_PASSWORD_INPUT_PLACEHOLDER = "Senha" PGP_SIGNED_MESSAGE_DESC = "Mensagem assinada com OpenPGP (clique para verificar)" PGP_ENCRYPTED_MESSAGE_DESC = "Mensagem criptografada com OpenPGP (clique para descriptografar)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Aviso de recepção (Visualizada) - %SUBJECT%" @@ -552,6 +555,9 @@ RENAMING_PROCESS = "Renomeando a pasta" DELETING_ASK = "Você tem certeza?" TO_MANY_FOLDERS_DESC_1 = "Você possui muitas pastas!" TO_MANY_FOLDERS_DESC_2 = "Mostraremos apenas uma parte delas, para evitar problemas de desempenho." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Lista de contas" diff --git a/rainloop/v/0.0.0/langs/pt-pt.ini b/rainloop/v/0.0.0/langs/pt-pt.ini index ac2bcc778..61c813ae2 100644 --- a/rainloop/v/0.0.0/langs/pt-pt.ini +++ b/rainloop/v/0.0.0/langs/pt-pt.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Selecione uma mensagem na lista para ver o conteúdo aqui." PGP_PASSWORD_INPUT_PLACEHOLDER = "Palavra-passe" PGP_SIGNED_MESSAGE_DESC = "Mensagem assinada com OpenPGP (clique para verificar)" PGP_ENCRYPTED_MESSAGE_DESC = "Mensagem encriptada com OpenPGP (clique para desencriptar)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Recibo de leitura (apresentado) - %SUBJECT%" @@ -552,6 +555,9 @@ RENAMING_PROCESS = "Renomear a pasta" DELETING_ASK = "Tem a certeza?" TO_MANY_FOLDERS_DESC_1 = "Você tem demasiadas pastas!" TO_MANY_FOLDERS_DESC_2 = "Apenas apresentámos parte delas, para evitar problemas de desempenho." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Lista de contas" diff --git a/rainloop/v/0.0.0/langs/ro.ini b/rainloop/v/0.0.0/langs/ro.ini index 81e5e205f..f265a452d 100644 --- a/rainloop/v/0.0.0/langs/ro.ini +++ b/rainloop/v/0.0.0/langs/ro.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Selectați un mesaj pentru al vizualiza." PGP_PASSWORD_INPUT_PLACEHOLDER = "Password" PGP_SIGNED_MESSAGE_DESC = "OpenPGP signed message (click to verify)" PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP encrypted message (click to decrypt)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Mesajul dumneavoastră a fost citit - %SUBJECT%" @@ -551,6 +554,9 @@ RENAMING_PROCESS = "Redenumesc dosarul" DELETING_ASK = "Sunteți sigur?" TO_MANY_FOLDERS_DESC_1 = "You have too many folders!" TO_MANY_FOLDERS_DESC_2 = "We have shown only a part of them, to avoid performance problems." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Lista de Conturi" @@ -709,4 +715,4 @@ NO_COOKIE_DESC = "Aparent, Cookie sau nu este acceptat de browser-ul dvs. sau op Întoarceți Cookie, schimband optiunile browserului dvs., apoi încercați din nou." BAD_BROWSER_TITLE = "Browser-ul dvs. este depășit." BAD_BROWSER_DESC = "Pentru a utiliza toate caracteristicile cererii, -descărcați și instalați unul dintre aceste browsere:" \ No newline at end of file +descărcați și instalați unul dintre aceste browsere:" diff --git a/rainloop/v/0.0.0/langs/ru.ini b/rainloop/v/0.0.0/langs/ru.ini index bf7a2f281..1626f5eb0 100644 --- a/rainloop/v/0.0.0/langs/ru.ini +++ b/rainloop/v/0.0.0/langs/ru.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Выберите сообщение для просмотр PGP_PASSWORD_INPUT_PLACEHOLDER = "Пароль" PGP_SIGNED_MESSAGE_DESC = "OpenPGP подписанное сообщение (нажмите, чтобы подтвердить)" PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP шифрованное сообщение (нажмите, чтобы расшифровать)" +LINK_DOWNLOAD_AS_ZIP = "Сохранить как zip" +LINK_SAVE_TO_OWNCLOUD = "Сохранить в ownCloud" +LINK_SAVE_TO_DROPBOX = "Сохранить в Dropbox" [READ_RECEIPT] SUBJECT = "Уведомление о прочтении письма - %SUBJECT%" @@ -552,6 +555,9 @@ RENAMING_PROCESS = "Переименование папки" DELETING_ASK = "Точно?" TO_MANY_FOLDERS_DESC_1 = "У вас слишком много папок!" TO_MANY_FOLDERS_DESC_2 = "Мы показали только часть из них, чтобы избежать проблем с производительностью." +HELP_DELETE_FOLDER = "Удалить папку" +HELP_SHOW_HIDE_FOLDER = "Показывать/прятать папку" +HELP_SHOW_HIDE_FOLDER_COUNT = "Показывать/прятать количество сообщений в папке" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Список Аккаунтов" @@ -710,4 +716,4 @@ NO_COOKIE_DESC = "По-видимому, Cookie либо не поддержив Включите Cookie, изменив настройки браузера, затем повторите попытку." BAD_BROWSER_TITLE = "Ваш браузер устарел." BAD_BROWSER_DESC = "Чтобы использовать все возможности приложения, -загрузите и установите один из этих браузеров:" \ No newline at end of file +загрузите и установите один из этих браузеров:" diff --git a/rainloop/v/0.0.0/langs/sk.ini b/rainloop/v/0.0.0/langs/sk.ini index 34cdd15a0..3b43c2c58 100644 --- a/rainloop/v/0.0.0/langs/sk.ini +++ b/rainloop/v/0.0.0/langs/sk.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Vyberte správu zo zoznamu pre jej zobrazenie tu." PGP_PASSWORD_INPUT_PLACEHOLDER = "Password" PGP_SIGNED_MESSAGE_DESC = "OpenPGP signed message (click to verify)" PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP encrypted message (click to decrypt)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Return Receipt (displayed) - %SUBJECT%" @@ -552,6 +555,9 @@ RENAMING_PROCESS = "Premenovávam prečinok" DELETING_ASK = "Ste si istý?" TO_MANY_FOLDERS_DESC_1 = "You have too many folders!" TO_MANY_FOLDERS_DESC_2 = "We have shown only a part of them, to avoid performance problems." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Zoznam účtov" @@ -710,4 +716,4 @@ NO_COOKIE_DESC = "Váš internetový prehliadač nepodporuje Cookies. Prosím povoľte podporu Cookies v nastaveniach vášho internetového prehliadača a skúste to znova." BAD_BROWSER_TITLE = "Používate zastaralý internetový prehliadač." BAD_BROWSER_DESC = "Aby ste mohli využívať všetky funkcie tejto aplikácie, -použite niektorý z nasledujúcich internetových prehliadačov:" \ No newline at end of file +použite niektorý z nasledujúcich internetových prehliadačov:" diff --git a/rainloop/v/0.0.0/langs/sv.ini b/rainloop/v/0.0.0/langs/sv.ini index d04928ae7..eff3f163e 100644 --- a/rainloop/v/0.0.0/langs/sv.ini +++ b/rainloop/v/0.0.0/langs/sv.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Välj meddelande i listan att visa här." PGP_PASSWORD_INPUT_PLACEHOLDER = "Lösenord" PGP_SIGNED_MESSAGE_DESC = "OpenPGP signerat meddelande (klicka för att verifiera)" PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP krypterat meddelande (klicka för att dekryptera)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Mottagar kvitto (visad) - %SUBJECT%" @@ -552,6 +555,9 @@ RENAMING_PROCESS = "Byter namn på en mapp" DELETING_ASK = "Är du säker?" TO_MANY_FOLDERS_DESC_1 = "You have too many folders!" TO_MANY_FOLDERS_DESC_2 = "We have shown only a part of them, to avoid performance problems." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Kontolista" @@ -710,4 +716,4 @@ NO_COOKIE_DESC = "Kakstöd är inte tillgängligt i webbläsaren. Aktivera kakstöd och försök igen." BAD_BROWSER_TITLE = "Webbläsaren är för gammal." BAD_BROWSER_DESC = "För att använda funktioner i denna applikation, -ladda ner och installera någon av följande webbläsare:" \ No newline at end of file +ladda ner och installera någon av följande webbläsare:" diff --git a/rainloop/v/0.0.0/langs/tr.ini b/rainloop/v/0.0.0/langs/tr.ini index 457bf2dd5..017ec19fb 100644 --- a/rainloop/v/0.0.0/langs/tr.ini +++ b/rainloop/v/0.0.0/langs/tr.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Burada görüntülemek için listeden mesaj seçin." PGP_PASSWORD_INPUT_PLACEHOLDER = "Şifre" PGP_SIGNED_MESSAGE_DESC = "OpenPGP imzalı mesaj (onay için tıklayın)" PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP şifreli mesaj (çözmek için tıklayın)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Return Receipt (displayed) - %SUBJECT%" @@ -550,6 +553,9 @@ RENAMING_PROCESS = "Klasör değiştiriliyor" DELETING_ASK = "Eminmisiniz?" TO_MANY_FOLDERS_DESC_1 = "You have too many folders!" TO_MANY_FOLDERS_DESC_2 = "We have shown only a part of them, to avoid performance problems." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Hesap Listesi" @@ -708,4 +714,4 @@ NO_COOKIE_DESC = "Çerezler destek tarayıcınızda mevcut değil. Tarayıcı ayarlarında Cookie desteği etkinleştirin ve yeniden deneyin." BAD_BROWSER_TITLE = "Tarayıcınız çok eski." BAD_BROWSER_DESC = "Uygulamanın tüm özelliklerini kullanmak için, -Bu tarayıcılardan birini indirmek ve yükleyin:" \ No newline at end of file +Bu tarayıcılardan birini indirmek ve yükleyin:" diff --git a/rainloop/v/0.0.0/langs/ua.ini b/rainloop/v/0.0.0/langs/ua.ini index 4ac09335d..6d696cb48 100644 --- a/rainloop/v/0.0.0/langs/ua.ini +++ b/rainloop/v/0.0.0/langs/ua.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "Выберіть повідомлення для перег PGP_PASSWORD_INPUT_PLACEHOLDER = "Пароль" PGP_SIGNED_MESSAGE_DESC = "OpenPGP підписане повідомлення (натисніть, щоб підтвердити)" PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP шифроване повідомлення (натисніть, щоб розшифрувати)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Сповіщення про прочитання цього повідомлення - %SUBJECT%" @@ -552,6 +555,9 @@ RENAMING_PROCESS = "Перейменування теки" DELETING_ASK = "Впевнені?" TO_MANY_FOLDERS_DESC_1 = "You have too many folders!" TO_MANY_FOLDERS_DESC_2 = "We have shown only a part of them, to avoid performance problems." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "Список акаунтів" @@ -710,4 +716,4 @@ NO_COOKIE_DESC = "Здається, Cookie або не підтримуютьс Увімкніть Cookie, змінив налаштівання браузера, і спробуйте знову." BAD_BROWSER_TITLE = "Ваш браузер застарів." BAD_BROWSER_DESC = "Щоб використовувати всі можливості додатку, -завантажте і встановіть один з цих браузерів:" \ No newline at end of file +завантажте і встановіть один з цих браузерів:" diff --git a/rainloop/v/0.0.0/langs/zh-cn.ini b/rainloop/v/0.0.0/langs/zh-cn.ini index f4826d416..bf69baaba 100644 --- a/rainloop/v/0.0.0/langs/zh-cn.ini +++ b/rainloop/v/0.0.0/langs/zh-cn.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "在此查看列表中选中的邮件。" PGP_PASSWORD_INPUT_PLACEHOLDER = "Password" PGP_SIGNED_MESSAGE_DESC = "OpenPGP signed message (click to verify)" PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP encrypted message (click to decrypt)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Return Receipt (displayed) - %SUBJECT%" @@ -552,6 +555,9 @@ RENAMING_PROCESS = "文件夹重命名" DELETING_ASK = "确定?" TO_MANY_FOLDERS_DESC_1 = "You have too many folders!" TO_MANY_FOLDERS_DESC_2 = "We have shown only a part of them, to avoid performance problems." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "账户列表" @@ -710,4 +716,4 @@ NO_COOKIE_DESC = "您的浏览器不支持Cookies。 请启用浏览器的Cookies支持并重试。" BAD_BROWSER_TITLE = "您的浏览器过时了" BAD_BROWSER_DESC = "为了使用所有特性, -下载并安装其中一款浏览器:" \ No newline at end of file +下载并安装其中一款浏览器:" diff --git a/rainloop/v/0.0.0/langs/zh-tw.ini b/rainloop/v/0.0.0/langs/zh-tw.ini index 7d9bf5b42..a2a03f391 100644 --- a/rainloop/v/0.0.0/langs/zh-tw.ini +++ b/rainloop/v/0.0.0/langs/zh-tw.ini @@ -150,6 +150,9 @@ MESSAGE_VIEW_DESC = "在此查看列表中選中的郵件。" PGP_PASSWORD_INPUT_PLACEHOLDER = "Password" PGP_SIGNED_MESSAGE_DESC = "OpenPGP signed message (click to verify)" PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP encrypted message (click to decrypt)" +LINK_DOWNLOAD_AS_ZIP = "Download as zip" +LINK_SAVE_TO_OWNCLOUD = "Save to ownCloud" +LINK_SAVE_TO_DROPBOX = "Save to Dropbox" [READ_RECEIPT] SUBJECT = "Return Receipt (displayed) - %SUBJECT%" @@ -552,6 +555,9 @@ RENAMING_PROCESS = "資料夾重命名" DELETING_ASK = "確定?" TO_MANY_FOLDERS_DESC_1 = "You have too many folders!" TO_MANY_FOLDERS_DESC_2 = "We have shown only a part of them, to avoid performance problems." +HELP_DELETE_FOLDER = "Delete folder" +HELP_SHOW_HIDE_FOLDER = "Show/hide folder" +HELP_SHOW_HIDE_FOLDER_COUNT = "Show/hide folder message count" [SETTINGS_ACCOUNTS] LEGEND_ACCOUNTS = "帳戶列表" @@ -710,4 +716,4 @@ NO_COOKIE_DESC = "您的瀏覽器不支持Cookies。 請啟用瀏覽器的Cookies支持並重試。" BAD_BROWSER_TITLE = "您的瀏覽器過時了" BAD_BROWSER_DESC = "為了使用所有特性, -下載並安裝其中一款瀏覽器:" \ No newline at end of file +下載並安裝其中一款瀏覽器:" diff --git a/rainloop/v/0.0.0/static/css/fonts/rainloop.eot b/rainloop/v/0.0.0/static/css/fonts/rainloop.eot index cb64d4537061e1aebe658a89c5240c65c65b531e..d2bf0d5418bcabc87a4f168ae35fbb4b326b1671 100644 GIT binary patch delta 607 zcmY+A&1(~35XNWr+J$CyF}8mIP?i8dD^6JjXafT%eI^~9zM3*qFUuPMc%AgMO5Jw0V@GZP z2yZCNIoox5JrK$Nf#!j^+RE*A?DZaiyakZox-)B6#ZOMp(@Xk6CjBbNo@m zAvH6W7)!(zrm)bkI;@(xY%Uw(GR_AXE=?Ms+f-OUo?%RvhvejC<&dJYcqlw-Troz& zq2I-f9x>Ao(&oj8{;P`M(G{7v!vxC7X<3fQO3?Zb;`9@O{xTfyE?NSLCQNwCg_D9g p;k65o>9dl>ZvrlL)k`fgpe)VbwbHpWUZ>X delta 442 zcmX>xlkv-RMz$~B3=BTr6WPpI_Sruxo#;@JQuxzjBLjoC0RsbrjJu1g8^dA-HXvUB z$XDIGT;SdcwBnolo6S!=W-z;foWj5e3?L@3sUQ<2z+xaiGeaqm1bP|bMz9Ko^Kr+1 Jfm9%S1OU1-Wsv{? diff --git a/rainloop/v/0.0.0/static/css/fonts/rainloop.svg b/rainloop/v/0.0.0/static/css/fonts/rainloop.svg index 3357f3364..cc66a0e77 100644 --- a/rainloop/v/0.0.0/static/css/fonts/rainloop.svg +++ b/rainloop/v/0.0.0/static/css/fonts/rainloop.svg @@ -122,4 +122,5 @@ + diff --git a/rainloop/v/0.0.0/static/css/fonts/rainloop.ttf b/rainloop/v/0.0.0/static/css/fonts/rainloop.ttf index 3cc1d79cc064c24b7833497d2d17bfd92e686cbd..09186ead5ced56fdc813ec9d5d3b92e5e0ace302 100644 GIT binary patch delta 636 zcmY+COK1~O6o${4nLCrYxmwAX19U;w*IGQlv;|(QRBP_}I8`p{!O9Deu}fOPRH+cH z*5+EiC*J#{S4nTq%$6-@&&m{l#DOn0tJQ!tq{rbw(!+JDR(Xso*8oh1YD5mF4iU=@cAX!ozsQ9>a6kbnl@T_v_r^Q}kD$ z-vn@k6o&#J;Q*a7NTjLX+ot_m*un*OUG$;dl|BhWAKmB7n`?`pgN|M7f(8i~qZcaj z-bfN-=^SQ^AL>N6U;T3_1w%&aYRWhg3jV%@aQ7l3ZYO~(G09knDPHqGh|{+S`pa>->tjpYg`| M7vHJ!Pv#E(1oLx*jQ{`u delta 403 zcmZ25gYnEX#(D-u1_lORh6V;^h5$FW5Z}U|9vc}LybXY&GVU&}ZVZbV*noTiAYZ{h zSl>v0md|zu2F3^=KP)*nvEZUM|8)iirX@gZke*mv@c%#1BnEE|pgc!h|G|4UAO za^eihwmJp|mMcL1yWGTz0*2#^EI@e+AYUObF*kK1 zBqpXJ3j)H-``sGn8+cB?9zVoIe~W!<8s8lM8$=*~Kp^Cm8NPj(J-)g4Hw+lMWLAuA z4IRFh=?3!6bc?Uf{DLA z#zuFM?@2~~eqo-EZ{GQYpKhi9Ht+^ucqxd&ffNRj1Y)T9cOWsuhH7o|>P^peLM~^6 zVM~9jiEU$ESGD)F((CGDv&y{G;PoCX%&-So=jJ?>wz}E@R$3Q8^$aN1Po2LdFl^pr0=S@?g}zn zMWE&^Gf)HkhD^tpq|?xF@CC?1PQYDKx0M;F0$zi{;ZNbU;DaEIgu41@k7=5zoz@7jQL$S=if{Ye)yC}#p^P-iA*E|z>M^Uuuo%=X+DSZ9Vi zqC1qvR7;aCnUF{(Sn`Q`#(_za$)d@<$;QcvN!-cK$?(am4Ae=&%w9AMv<~=a`1XEy zcm}F>y`7-`Gq`lL&${dB{_*~Nj9Qv?9S!wmB`iubxP^WdLvcg@9gCgIe(+Fv^d1FH z#b>vjx6od?_v-8DegVw99ClkRV3TuMuD}$F?R1mp{CL^MvP$F2qIGTiFc+PJ9DJ^F zg)_CY+`+VEqI1V0m+nzct-G9ngPe5k{M7Ub#*s^v^J}56*7i1?!!-t{2RvREB+@1r zw0&T3Yac-S|05r7)45z@aC^YxcZDKt3Pal$2Di=vwEy2Sjq9}(ewPyT-+zGr*>t`h z$LnH-{yPbv`5#U9>v8-pC+NTH0Gj{F)ZX8wbGpXh@`%Rk`i-*#G2qFHMEYs&^kBr`#z6CIkEb&ax8Nrjk4jCy! zDKaQB%Q8qN=OV#+6ZfU5NddYA}e?6*m zf-eqi>sc?6cW)DWWajn$95+hQ(fLMttLt^WaeBk`68^}~;d1F{itB3g4yX4a);^Nu z$)R2I%gOKL#a^HBBdC*p`Rig~>vP4O{x$9V^{y6@!)wx}HpnlPNdaT;p9W~i$u$kleG`Ys%KlHx-zNb#uYvurmfn39A zNsltMp5Pw$Q|u}BQEvCUP+!V*-@spzT;g;4P+)4`(?pu6Mz9CuXVX)uAMnIKMM zYud$DTXYbfpRG4;Cb6NdJ+3UZx@imh(QXqFYb+Z%g5ow}Y$cQUgDcvEOD2EbC<;S_ zq2&_@jqh%E_ z4!a8?-$&C&UPsKPE;Dz(@K+)C+-}1;b_2bsr2zUHo29&gR!`QwqYH6aDG`+N_2o~s z^m?K(ivuZdI8ww7mujd|!BU2>{ftsi92i!yk>Na0ZZRx$f2q&@9rLp(zOW`9Fq` zF?8;NOW=83+W;2h1!sT5kAM;i2)j`0>(Sv3)1#$IFnju+Ne_s>#c$;9Pk{RG){$1O zPBVo3_x*RsczS+M;K;PSZ`Y@oyhF*DNmowV4YDglc)}EyLsWdJ%*tlORjw68EhHc020+F0A#p4r?z6u9r0zX&?*= z1^!0t|JDB^?#@vWb?>n$$Yb!FDly?w79x2^MKpew((XqWz<_cYtr}^wqoxwOwa7bS zo4mh~eqD9J{fvm3++OH!Rhie+SM!o3NtJ8fDVq$=1)I)Vx7vl?ons33U?tzX%3qFc z#93?ms;eunn(Yj_D7bqq+ob_2Dyq|;)rpUyjOdQsQ8{@~7kOS}y=Z8_lH|L5*S$@; zZudtLB~kjrxQ$MeoAIYKJg&#h`RI)yli_^?B=LR98F*n8xILJ-)2?5nC1~u9TJqRq z#ffvWF>{<`0AIc6T}EQ>8c#g-!Z%41I*JKRKm-;*R07%ZhsMUd&TPyeJTHT|BZOb4 zVZlJ80x`@GglL-f#0qJCl5C%ZPn9vp~X0`x_Ee^GNfkAuJ)`K7*bD4P0$le~lyOF`5FG+#d|*td#pK zD)suRlv^{=z=6pk*+VA2aE7C6R&;obTTNAUHpvmo3o>o8p=9x8k&JTxDk91LBLNbk zdc?J|;%8-^x7&7nu>Uw;@SdYC&{RXdfqFQ>b)R&X@h_E_@KX3I@}z@(sJo#>svtB++r>W%$XmCKl_5lA-74%dD_E=~P zwse@b!b?e!I^lP$yN7y3UD@_^MtzDGunbkV|qF$_Rz9S#|dkn zf(*8o2XhGIe4Rx!W3lshz$>!DTrcjIJ%WK*6j=;sZwP+L-1ueTN7a68uN4baJNVMB z!m(xZ6RQeE$CHyL&)-k}fq%bLdO@Fq%HpyTemvRI4#r9Pdz&QG0c1flbZvu^LKYon z77S1U_D9zs8JD$ba6lX^HC&FlK;r?1btYR0huk`jCRUaYmQZ0uWr2>2JUsl?cdfIy zE8*yFEo4~5SYP`uW5W8S^ebZTWsUXyl7UJv?%n2v-x$O5vq{bD^5W|HI#vybV9o1G zTH>P*i=ANG^p?h2noX!xV&Z7 z;SK!?r4$VIK6&=iK`-C{W|rh?o^|zh}s6^XUHM;{KHF5cx*ZWZDS3M504z zX%#H5Tue~xd0RUM&!rk`tSUt9MzxHndt=DZbJp{A+0UqUQx`|esbM;hM)xmGEq=$> zV{1D1O+|Fupu~kXxbgX*EYAzueHRG}-GE&1mQjtjvgQPck6!�%Fnur%6rjw@5G_ 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 aTKNtgRl!&F-|JrxDh9#gd&1&CApaL7M{(c) literal 13492 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 p;k65o>9dl>ZvrlL)k`fgpe)VbwbHpWUZ>X delta 442 zcmX>xlkv-RMz$~B3=BTr6WPpI_Sruxo#;@JQuxzjBLjoC0RsbrjJu1g8^dA-HXvUB z$XDIGT;SdcwBnolo6S!=W-z;foWj5e3?L@3sUQ<2z+xaiGeaqm1bP|bMz9Ko^Kr+1 Jfm9%S1OU1-Wsv{? diff --git a/vendors/fontastic/fonts/rainloop.svg b/vendors/fontastic/fonts/rainloop.svg index 3357f3364..cc66a0e77 100644 --- a/vendors/fontastic/fonts/rainloop.svg +++ b/vendors/fontastic/fonts/rainloop.svg @@ -122,4 +122,5 @@ + diff --git a/vendors/fontastic/fonts/rainloop.ttf b/vendors/fontastic/fonts/rainloop.ttf index 3cc1d79cc064c24b7833497d2d17bfd92e686cbd..09186ead5ced56fdc813ec9d5d3b92e5e0ace302 100644 GIT binary patch delta 636 zcmY+COK1~O6o${4nLCrYxmwAX19U;w*IGQlv;|(QRBP_}I8`p{!O9Deu}fOPRH+cH z*5+EiC*J#{S4nTq%$6-@&&m{l#DOn0tJQ!tq{rbw(!+JDR(Xso*8oh1YD5mF4iU=@cAX!ozsQ9>a6kbnl@T_v_r^Q}kD$ z-vn@k6o&#J;Q*a7NTjLX+ot_m*un*OUG$;dl|BhWAKmB7n`?`pgN|M7f(8i~qZcaj z-bfN-=^SQ^AL>N6U;T3_1w%&aYRWhg3jV%@aQ7l3ZYO~(G09knDPHqGh|{+S`pa>->tjpYg`| M7vHJ!Pv#E(1oLx*jQ{`u delta 403 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�%Fnur%6rjw@5G_ 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 aTKNtgRl!&F-|JrxDh9#gd&1&CApaL7M{(c) literal 13492 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
+
  • +
    + +
  • Character mapping

      @@ -968,6 +972,10 @@ h2{font-size:18px;padding:0 0 21px 5px;margin:45px 0 0 0;text-transform:uppercas
      +
    • +
      + +