Giter Site home page Giter Site logo

deltachat / deltachat-android Goto Github PK

View Code? Open in Web Editor NEW
1.1K 50.0 143.0 156.02 MB

Email-based instant messaging for Android.

License: GNU General Public License v3.0

Makefile 0.05% C 1.56% Shell 0.38% Java 57.93% Dockerfile 0.04% HTML 39.89% CSS 0.01% JavaScript 0.10% Nix 0.04%
messenger android email deltachat chat

deltachat-android's Introduction

Delta Chat Android Client

This is the Android client for Delta Chat. It is available on F-Droid and the Google Play Store. The APK can also be downloaded from get.delta.chat.

For the core library and other common info, please refer to the Delta Chat Core Library.

For general contribution hints, please refer to CONTRIBUTING.md.

Screenshot Chat List Screenshot Chat View

Check Out Repository

When checking out deltachat-android, make sure also to check out the subproject deltachat-core-rust:

  • When using Git, you can do this initially by $ git clone --recursive https://github.com/deltachat/deltachat-android or later by git submodule update --init --recursive. If you do this in your home directory, this results in the folder ~/deltachat-android which is just fine.

Build Using Nix

The repository contains Nix development environment described in flake.nix file. If you don't have Nix installed, the easiest way is to use The Determinate Nix Installer which installs Nix with Flakes feature enabled out of the box and can be cleanly uninstalled with /nix/nix-installer uninstall once you don't need it anymore.

Once you have Nix with Flakes feature set up start the development environment shell:

nix develop

Nix development environment contains Rust with cross-compilation toolchains and Android SDK.

To build an APK run the following 2 steps. Note that the first step may take some time to build for all architectures. You can optionally read the first comment block in the ndk-make.sh script for pointers on how to build for a specific architecture.

$ scripts/ndk-make.sh
$ ./gradlew assembleDebug

Resulting APK files can be found in build/outputs/apk/gplay/debug/ and build/outputs/apk/fat/debug/.

Build Using Dockerfile

Another way to build APK is to use provided Dockerfile with Docker or Podman. Podman is a drop-in replacement for Docker that does not require root privileges.

If you don't have Docker or Podman setup yet, read how to setup Podman below. If you don't want to use Docker or Podman, read how to manually install the build environment.

First, build the image deltachat-android by running

podman build --build-arg UID=$(id -u) --build-arg GID=$(id -g) . -t deltachat-android

or

docker build --build-arg UID=$(id -u) --build-arg GID=$(id -g) . -t deltachat-android

Then, run the image:

podman run --userns=keep-id -it --name deltachat -v $(pwd):/home/app:z -w /home/app localhost/deltachat-android

or

docker run -it --name deltachat -v $(pwd):/home/app:z -w /home/app localhost/deltachat-android

You can leave the container with Ctrl+D or by typing exit and re-enter it with docker start -ia deltachat or podman start -ia deltachat.

Within the container, install toolchains and build the native library:

deltachat@6012dcb974fe:/home/app$ scripts/install-toolchains.sh
deltachat@6012dcb974fe:/home/app$ scripts/ndk-make.sh

Then, build an APK:

deltachat@6012dcb974fe:/home/app$ ./gradlew assembleDebug

Troubleshooting

  • Executing ./gradlew assembleDebug inside the container fails with The SDK directory '/home/user/Android/Sdk' does not exist.:

    The problem is that Android Studio (outside the container) automatically creates a file local.properties with a content like sdk.dir=/home/username/Android/Sdk, so, Gradle-inside-the-container looks for the Sdk at /home/username/Android/Sdk, where it can't find it. You could:

    • either: remove the file or just the line starting with sdk.dir
    • or: run ./gradlew assembleDebug from outside the container (however, there may be incompatibility issues if different versions are installed inside and outside the container)
  • Running the image fails with ERRO[0000] The storage 'driver' option must be set in /etc/containers/storage.conf, guarantee proper operation.:

    In /etc/containers/storage.conf, replace the line: driver = "" with: driver = "overlay". You can also set the driver option to something else, you just need to set it to something. Read about possible options here.

Setup Podman

These instructions were only tested on a Manjaro machine so far. If anything doesn't work, please open an issue.

First, Install Podman.

Then, if you want to run Podman without root, run:

sudo touch /etc/subgid
sudo touch /etc/subuid
sudo usermod --add-subuids 165536-231072 --add-subgids 165536-231072 yourusername

(replace yourusername with your username). See https://wiki.archlinux.org/index.php/Podman#Rootless_Podman for more information.

Install Build Environment (without Docker or Podman)

To setup build environment manually:

  • Either, in Android Studio, go to "Tools / SDK Manager / SDK Tools", enable "Show Package Details", select "CMake" and the desired NDK (install the same NDK version as the Dockerfile), hit "Apply".
  • Or read Dockerfile and mimic what it does.

Then, in both cases, install Rust using rustup and Rust toolchains for cross-compilation by executing scripts/install-toolchains.sh.

Then, configure ANDROID_NDK_ROOT environment variable to point to the Android NDK installation directory e.g. by adding this to your .bashrc:

export ANDROID_NDK_ROOT=${HOME}/Android/Sdk/ndk/[version] # (or wherever your NDK is) Note that there is no `/` at the end!
export PATH=${PATH}:${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/:${ANDROID_NDK_ROOT}

After that, call scripts/ndk-make.sh in the root directory to build core-rust. Afterwards run the project in Android Studio. The project requires API 25.

With chance, that's it :) - if not, read on how to set up a proper development environment.

Install Development Environment

  1. Some libs required by Android Studio may be missing on 64 bit Linux machines Source], so for Ubuntu execute $ sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386 and for Fedora execute $ sudo yum install zlib.i686 ncurses-libs.i686 bzip2-libs.i686.

  2. Download Android Studio from https://developer.android.com (android-studio-ide-...-linux.zip) and unpack the archive which contains a single folder called android-studio; move this folder e.g. to ~/android-studio.

  3. To launch Android Studio for the first time, open a terminal, navigate to ~/android-studio/bin, execute ./studio.sh and use all the standard values from the wizard.

  4. Android Studio now asks you if you want to open an existing project; choose ~/deltachat-android as created in the "Build" chapter (Android Studio starts to build the project, however, there are some steps missing before this will succeed).

  5. If components are missing, click on the corresponding error message and install eg. required SDKs and the "Build-Tools" (you should also find the option at "Tools / Android / SDK Manager / SDK Platforms"). Now the build should succeed - but the app still misses the native part.

  6. Download Android NDK from NDK Archives and extract the archive containing a single folder called something like android-ndk-r23b-linux; move this folder e.g. to ~/android-ndk.

  7. Export the folder path to your environment as ANDROID_NDK_ROOT and add it to PATH. You can achieve this e.g. by adding this to your .bashrc

    export ANDROID_NDK_ROOT=${HOME}/android-ndk
    export PATH=${PATH}:${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/:${ANDROID_NDK_ROOT}

Run UI Tests and Benchmarks

  • You don't necessarily need a dedicated testing device. Backup your current account first, maybe there are some bugs in switching accounts.

  • You can run benchmarks on either an emulated device or a real device. You need at least Android 9. For better benchmark results, you should run the benchmark on a real device and make sure that the core is compiled in release mode.

  • Disable animations on your device, otherwise the test may fail: at "Developer options" set all of "Window animation scale", "Transition animation scale" and "Animator duration scale" to 0x

  • In Android Studio: "File" / "Sync project with gradle files"

  • In Android Studio: "Run" / "Edit configurations" / "+" / "Android Instrumented test": Either select a specific class or select "All in Module" / "OK" / Select your configuration in the toolbar / Click on the green "run" button in the toolbar to run the tests

Get the benchmark results

When the benchmark is done, you will get a result like MEASURED RESULTS (Benchmark) - Going thorough all 10 chats: 11635,11207,11363,11352,11279,11183,11137,11145,11032,11057. You can paste 11635,11207,11363,11352,11279,11183,11137,11145,11032,11057 into a cell in a LibreOffice spreadsheet, do "Data" / "Text to columns", choose , as a separator, hit "OK", and create a diagram.

Run online tests

For some tests, you need to provide the credentials to an actual email account. You have 2 ways to do this:

  1. (Recommended): Put them into the file ~/.gradle/gradle.properties (create it if it doesn't exist):

    [email protected]
    TEST_MAIL_PW=youpassword
    
  2. Or set them via environment variables.

Translations

Android metadata and changelogs are translated using Weblate.

Translation status

Credits

The user interface classes are based on the Signal messenger.

License

Licensed GPLv3+, see the LICENSE file for details.

Copyright © 2022 Delta Chat contributors.

deltachat-android's People

Contributors

adbenitez avatar ampli-fier avatar angelo-fuchs avatar asmodeumx avatar boehrsi avatar boffire avatar chklump avatar comradekingu avatar cyberta avatar darkestdark avatar dignifiedquire avatar florianhaar avatar hocuri avatar hpk42 avatar imgbot[bot] avatar imgbotapp avatar jikstra avatar lenzgr avatar link2xt avatar meganoahj avatar missytake avatar ngocanhtve avatar ozancankaratas avatar pjvleeuwen avatar r10s avatar ralphtheninja avatar simon-laux avatar ssilnicki-dev avatar weblate avatar wofwca avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

deltachat-android's Issues

Problem with two-factor sign-in verification

Hi,
first off, such a great idea man! surely it would be useful for everyone!
The two step sign-in verification is my problem to use Delta Chat! Actually when i tried to sign-in via my Gmail account, it ended with an error. Could you plz fix it?
Sorry for my bad english!

New message do not appear if app is open

I tested on two phones (sony android 5.1.1, oneplus android 5.1.1), both
application is downloaded via f-droid (v0.1.15, 2/2/2017).

I added two gmail account, enabled less secure app login inside gmail, I rebooted both phone.
The problem is, if I send a message, on the other phone it do not appear until I close
delta chat, after closing in 2-5 sec and a new notification appear.
If I leave open the delta chat's chat window, the new message never arrives.

In the gmail account the message is properly sent and received.
As a workaround it would be nice to have a manual refresh icon inside chat window.

Emails from other MUA are shown in the chat

In my MUA I forwarded a normal email that had nothing to do with a chat to another person having delta chat installed. The email showed up in Delta Chat in a conversation.
I would expect Delta to only show chat related emails.

screenshot_2017-02-14-19-57-21
screenshot_2017-02-14-19-57-57

How does Delta decide if an email is a chat message or not?

If you need more details about the email please let me know.

Handle contacts with multiple mail addresses

Most of my contacts have multiple mail addresses but they are just recognized by Delta Chat if I/they send with/to the exact address the chat was started with

An other issue is Delta Chat always responses with the configured address, but I have multiple address. One for private one for business. I could ask which one to use for response.

Delta developement environment

I have no experience in android programming, but I'd like to setup a developement environment to write and compile Delta code, so I can try some ideas. Would you helpme doing it? On gnu/linux, I don't have windows.

Some feedback

  • It is very hard to find the repository and information about the app if you only know the name "Delta Chat". Even with the search box on GitHub itself it is hard to find (also try a search engine of your liking). Some renaming of the repos would help.

  • The relation of back end and front end is difficult to understand. How about a diagram? Allwoing the Wiki and the repos would also help?

  • When I setup the app I can receive email but not send, there is no error message or log. It is very frustrating to debug when something is not working

  • Keep up the good work, it's a great idea. 👍

Large download

Hi!
Please take a look at this screenshot:
data-800mb-gsm-transfer

During three hours. I not send / receive any data! Delta Chat was not used at that time! What data and to whom they were sent?

--
keypey

Improve links inside mails

messages containing only 2 digits are already linked to the telephone app, I think, normal numbers contain more digits, maybe at least 4-5.

Option to limit history download

I would like an option to limit the amount of email history downloaded from the server. Perhaps options such as:

  • Past Day
  • Past Month
  • Past Year
  • All
  • None

Does it yet support TLS connection

Not got the client working yet with our setup but I suspect it may be the form of connection. Is there a test for imap/smtp connection in the client to check config?

Love the idea btw :-)

Translation of Domainnames with ä ü ö etc.

Domainnames with non-ASCII-letters, eg. german letters like ö ü ä etc, are translated. The answer of an recipient won't appear in Delta Chat, because the translated E-Mail-Adress differs from the recipients one.

Question: Which servers are connected?

I like your project very much, but i am concerned about all network activities.
I assume that the app ist only connecting to the imap server i configured, but i want to go sure when i saw that there is some "backend"-repository.
Does the app use (mandatory or optional) any third party server except the imap server i connect to?
Regards

Paging through images does not yet work

For now, you can only open one image at a time in the chat view.

We should add a functionality, where swiping left/right goes to the previous/next image.

Limit retained history

Similar to #21. I would like to have an option to limit the amount of history kept in the app as I'm using the app. For example, I could limit the amount of history by number of message (like 200) or length of time (like 90 days).

I would not expect this limit to cause messages to be deleted from the server.

Reactivate IntroActivity

We've disabled IntroActivity for now; before shipping, we should re-enable it based upon mrmailbox_is_configured(). For this, we should check some occurrences of UserConfig.isClientActivated()

Call MrStockAddStr() again after language change

We have to call MrStockAddStr() for each string each time the user changes the language of the program. Otherwise the backend uses the string of the prior language.

The easiest way to fix this seems to be a function as MrMailbox.AddStockStrings() that is called on init and after language changes.

Delta Chat removes 'new' flag from all mail in all mailboxes

Hello,

I connected once to my IMAP account with Delta Chat, and all NEW email in all mailboxes now still shows as unread but not as NEW anymore.

That was a surprising behaviour for me: both that Delta Chat went and read through all my mailboxes, and that it changed flags on messages it shouldn't have anything to do with.

Use the `In-Reply-To` header tag

First of all: great idea.

I was trying to see how Delta Chat interact with a "normal" MUA. I realized that Delta Chat doesn't use the In-Reply-To header tag and in the "normal" MUA the discussion results all scattered around in the Inbox...

It would be nice to use such tag in order to recognize Delta Chat chats as threads in "normal" MUAs.

Unable to create initial account

I tried to test delta chat on my old tablet with Android 4.2.2. When I started delta chat it asked my to insert my email address.
But I my input wasn't shown in the input field.
So I tapped long on this field until the cursor came up. But after releasing my finger from the input field the cursor disappeared immediatly.
So I can't create a first account.
But entering a password is possible.

File Attaches

First off: Great Project!
If encryption and all ohter features will work, it will be the best messanger ever!

If I attach file in deltachat and send it, it will be usable on linux with Thunderbird.
If I attach a mp3 in Thunderbid and send it to Deltachat, I will see an attach and a slider without play-button. I can't find a way to use the mp3 on the phone.

Send email to myself

I have tried to talk to myself in the app, and then my inbox actually received an email from myself.

But when I tried reply to myself in the inbox, the inbox showed the reply message, but there wasn't any new message in the app.

Isn't it weird?

Added pt (português) translation

I have translated your application into pt (português). Here is the xml:

<?xml version="1.0" encoding="utf-8"?>



<resources xmlns:tools="http://schemas.android.com/tools">
    <string name="AppName">Delta Chat</string>
    <string name="LanguageName">Português</string>
    <string name="LanguageNameInEnglish" tools:keep="@string/LanguageNameInEnglish">Portuguese</string>
    <string name="LanguageCode" tools:keep="@string/LanguageCode">pt</string>
    <!--chats view-->
    <string name="Settings">Configurações</string>
    <string name="NewGroup">Novo Grupo</string>
    <string name="Yesterday">ontem</string>
    <string name="NoResult">Nenhum resultado</string>
    <string name="NoChats">Ainda não há chats.</string>
    <string name="WaitingForNetwork">Aguardando rede…</string>
    <string name="Connecting">Conectando…</string>
    <string name="Updating">Atualizando…</string>
    <string name="DeleteChat">Apagar conversa</string>
    <string name="SelectChat">Selecione um Chat …</string>
    <string name="Search">Busca</string>
    <string name="MuteNotifications">Silenciar notificações</string>
    <string name="MuteFor">Silenciar por %1$s</string>
    <string name="UnmuteNotifications">Restaurar Som</string>
    <string name="WillUnmuteIn">Em %1$s</string>
    <string name="Draft">Rascunho</string>
    <!--audio view-->
    <string name="NoAudio">Por favor, adicione arquivos à biblioteca de música de seu dispositivo para vê-los aqui.</string>
    <string name="AttachMusic">Música</string>
    <string name="AudioUnknownArtist">Artista desconhecido</string>
    <string name="AudioUnknownTitle">Título desconhecido</string>
    <!--documents view-->
    <string name="SelectFile">Selecione um Arquivo</string>
    <string name="FreeOfTotal">Disponível %1$s de %2$s</string>
    <string name="UnknownError">Erro desconhecido</string>
    <string name="AccessError">Erro de acesso</string>
    <string name="NoFiles">Ainda não há arquivos</string>
    <string name="FileUploadLimit">Tamanho do arquivo não deve ser maior que %1$s</string>
    <string name="NotMounted">Armazenamento não está montado</string>
    <string name="UsbActive">Transferência USB ativa</string>
    <string name="InternalStorage">Armazenamento Interno</string>
    <string name="ExternalStorage">Armazenamento Externo</string>
    <string name="SystemRoot">Administrador do Sistema</string>
    <string name="SdCard">Cartão SD</string>
    <string name="Folder">Pasta</string>
    <string name="GalleryInfo">Para enviar imagens sem compressão</string>
    <!--chat view-->
    <string name="ChatGallery">Galeria</string>
    <string name="ChatLocation">Localização</string>
    <string name="ChatVideo">Vídeo</string>
    <string name="ChatDocument">Arquivo</string>
    <string name="ChatCamera">Câmera</string>
    <string name="NoMessages">Ainda não há mensagens aqui.</string>
    <string name="ForwardedMessage">Mensagem encaminhada</string>
    <string name="From">De</string>
    <string name="NoRecent">Nada recente</string>
    <string name="TypeMessage">Mensagem</string>
    <string name="SlideToCancel">DESLIZE PARA CANCELAR</string>
    <string name="SaveToDownloads">Salvar em downloads</string>
    <string name="DeleteGif">Apagar GIF?</string>
    <string name="SaveToMusic">Salvar em músicas</string>
    <string name="ShareFile">Compartilhar</string>
    <string name="UnsupportedAttachment">Anexo não suportado</string>
    <string name="OpenInBrowser">ABRIR EM…</string>
    <string name="SendItems">Enviar %1$s</string>
    <string name="OpenUrlAlert">Abrir URL em %1$s?</string>
    <string name="MoreInfo">Mais informações</string>
    <string name="ShareSendTo">Enviar para…</string>
    <string name="ClearRecentEmoji">Limpar emojis recentes?</string>
    <string name="AddShortcut">Adicionar atalho</string>
    <string name="ShortcutAdded">Atalho adicionado à tela de início</string>
    <!--notification-->
    <string name="Reply">Responder</string>
    <string name="ReplyToGroup">Responder para %1$s</string>
    <string name="ReplyToUser">Responder para %1$s</string>
    <string name="NotificationMessagesPeopleDisplayOrder">%1$s %2$s</string>
    <!--contacts view-->
    <string name="NoContacts">Ainda não há contatos</string>
    <string name="TodayAt">às</string>
    <string name="YesterdayAt">ontem às</string>
    <!--group create view-->
    <string name="SendMessageTo">Enviar mensagem para…</string>
    <string name="EnterGroupNamePlaceholder">Digite o nome do grupo</string>
    <string name="ShareLink">Compartilhar Link</string>
    <!--group info view-->
    <string name="SharedMedia">Mídia Compartilhada</string>
    <string name="SETTINGS">Configurações</string>
    <string name="AddMember">Adicionar membro</string>
    <string name="Notifications">Notificações</string>
    <string name="RemoveMember">Remover do grupo</string>
    <!--contact info view-->
    <string name="ShareContact">Compartilhar</string>
    <string name="AddContact">Adicionar</string>
    <string name="NewContactTitle">Adicionar contato</string>
    <string name="BlockContact">Bloquear</string>
    <string name="DeleteContact">Apagar</string>
    <string name="Info">Info</string>
    <!--stickers view-->
    <string name="Stickers">Stickers</string>
    <string name="AddStickers">Adicionar Stickers</string>
    <string name="AddToStickers">Adicionar aos Stickers</string>
    <string name="AddStickersNotFound">Stickers não encontrados</string>
    <string name="StickersRemoved">Stickers removidos</string>
    <string name="AddStickersInstalled">Novos stickers adicionados</string>
    <string name="StickersHide">Esconder</string>
    <string name="StickersShow">Mostrar</string>
    <string name="StickersShare">Compartilhar</string>
    <string name="StickersCopy">Copiar link</string>
    <string name="StickersRemove">Remover</string>
    <string name="NoStickers">Nenhum sticker</string>
    <string name="SendSticker">ENVIAR STICKER</string>
    <!--settings view-->
    <string name="TextSize">Tamanho do texto nas mensagens</string>
    <string name="EnableAnimations">Permitir Animações</string>
    <string name="UnblockContact">Desbloquear</string>
    <string name="NoBlocked">Nenhum usuário bloqueado</string>
    <string name="NormalMessages">Notificações de mensagens</string>
    <string name="Alert">Alerta</string>
    <string name="MessagePreview">Visualização de Mensagem</string>
    <string name="GroupMessages">Notificações de grupo</string>
    <string name="Sound">Som</string>
    <string name="InAppNotifications">Notificações no aplicativo</string>
    <string name="Vibrate">Vibrar</string>
    <string name="Reset">Limpar</string>
    <string name="ResetAllNotifications">Restaurar configurações</string>
    <string name="NotificationsAndSounds">Notificações e Sons</string>
    <string name="BlockedUsers">Usuários bloqueados</string>
    <string name="Default">Padrão</string>
    <string name="OnlyIfSilent">Somente no silencioso</string>
    <string name="ChatBackground">Papel de Parede</string>
    <string name="SendByEnter">Enviar usando \'Enter\'</string>
    <string name="Language">Idioma</string>
    <string name="Help">Perguntas frequentes</string>
    <string name="DeleteLocalization">Apagar localização?</string>
    <string name="Enabled">Ativado</string>
    <string name="Disabled">Desativado</string>
    <string name="NotificationsService">Serviço Manter-Ativo</string>
    <string name="NotificationsServiceInfo">Reiniciar o app quando desligado pelo usuário ou pelo sistema. Isso irá garantir que o app mostre as notificações.</string>
    <string name="NotificationsServiceConnection">Conexão em Segundo Plano</string>
    <string name="NotificationsServiceConnectionInfo">Manter uma conexão de baixo impacto para receber notificações. Habilite para notificações mais confiáveis.</string>
    <string name="LedColor">Cor do LED</string>
    <string name="BadgeNumber">Contador no Ícone</string>
    <string name="Short">Curta</string>
    <string name="Long">Longa</string>
    <string name="SystemDefault">Padrão do sistema</string>
    <string name="RaiseToSpeak">Levantar para Falar</string>
    <string name="EditName">Editar nome</string>
    <string name="NotificationsPriority">Prioridade</string>
    <string name="NotificationsPriorityDefault">Padrão</string>
    <string name="NotificationsPriorityHigh">Alta</string>
    <string name="NotificationsPriorityMax">Máxima</string>
    <string name="RepeatNotifications">Repetir Notificações</string>
    <string name="NotificationsOther">Outro</string>
    <string name="InChatSound">Sons no Chat</string>
    <string name="SoundDefault">Padrão</string>
    <string name="VibrationDefault">Padrão</string>
    <string name="SmartNotifications">Notificações Inteligentes</string>
    <string name="SmartNotificationsInfo">Tocar no máximo %1$s a cada %2$s</string>
    <string name="SmartNotificationsSoundAtMost">Tocar no máximo</string>
    <string name="SmartNotificationsTimes">vezes</string>
    <string name="SmartNotificationsWithin">a cada</string>
    <string name="SmartNotificationsMinutes">minutos</string>
    <string name="DirectShare">Compartilhamento Direto</string>
    <string name="DirectShareInfo">Mostrar chats recentes no menu compartilhar</string>
    <!--cache view-->
    <string name="CacheSettings">Configurações de Cache</string>
    <string name="LocalDatabase">Banco de Dados Local</string>
    <string name="LocalDatabaseClear">Limpar todos os textos em cache?</string>
    <string name="LocalDatabaseInfo">Limpar o banco de dados local apagará todos os textos das mensagens em cache e compactará o banco de dados para economizar espaço. O Delta Chat precisa de alguns dados para trabalhar, então o tamanho do banco não vai chegar a zero.\n\nEssa operação pode demorar alguns minutos para ser concluída.</string>
    <string name="ClearMediaCache">Limpar Cache</string>
    <string name="CacheClear">Limpar</string>
    <string name="LocalDocumentCache">Documentos</string>
    <string name="LocalPhotoCache">Fotos</string>
    <string name="LocalAudioCache">Mensagens de voz</string>
    <string name="LocalVideoCache">Vídeos</string>
    <string name="LocalMusicCache">Música</string>
    <string name="LocalCache">Outros arquivos</string>
    <string name="CacheEmpty">Vazio</string>
    <string name="KeepMedia">Manter Mídias</string>
    <string name="KeepMediaInfo">Fotos, vídeos e outros arquivos da nuvem que você &lt;b&gt;não acessou&lt;/b&gt; durante esse período serão removidos deste dispositivo para economizar espaço em disco.</string>
    <string name="KeepMediaForever">Permanentemente</string>
    <!--passcode view-->
    <string name="Passcode">Senha de Bloqueio</string>
    <string name="ChangePasscode">Alterar Senha</string>
    <string name="ChangePasscodeInfo">Quando você define uma senha adicional, um ícone de cadeado aparece na página de chats. Clique para bloquear e desbloquear o app.\n\nNota: se você esquecer a sua senha, terá de excluir e reinstalar o app.</string>
    <string name="PasscodePIN">PIN</string>
    <string name="PasscodePassword">Senha</string>
    <string name="EnterCurrentPasscode">Insira sua senha atual</string>
    <string name="EnterNewFirstPasscode">Insira uma senha</string>
    <string name="EnterNewPasscode">Insira sua nova senha</string>
    <string name="EnterYourPasscode">Insira sua senha</string>
    <string name="ReEnterYourPasscode">Re-insira sua nova senha</string>
    <string name="PasscodeDoNotMatch">As senhas não são iguais</string>
    <string name="AutoLock">Auto-bloquear</string>
    <string name="AutoLockInfo">Requisitar senha se estiver ausente por muito tempo.</string>
    <string name="AutoLockInTime">em %1$s</string>
    <string name="UnlockFingerprint">Desbloquear com Impressão Digital</string>
    <string name="FingerprintInfo">Confirme a impressão digital para continuar</string>
    <string name="FingerprintHelp">Toque o sensor</string>
    <string name="FingerprintNotRecognized">Impressão digital não reconhecida.</string>
    <!--photo gallery view-->
    <string name="ShowAllMedia">Mostrar todas as mídias</string>
    <string name="SaveToGallery">Salvar na galeria</string>
    <string name="Of">%1$d de %2$d</string>
    <string name="Gallery">Galeria</string>
    <string name="AllPhotos">Todas as Fotos</string>
    <string name="AllVideo">Todos os Vídeos</string>
    <string name="NoPhotos">Ainda não há fotos</string>
    <string name="NoVideo">Nenhum vídeo ainda</string>
    <string name="PleaseDownload">Baixar o vídeo primeiro</string>
    <string name="NoRecentPhotos">Nenhuma foto recente</string>
    <string name="NoRecentGIFs">Nenhum GIF recente</string>
    <string name="SearchImages">BUSCAR IMAGENS</string>
    <string name="SearchImagesInfo">BUSCA GLOBAL</string>
    <string name="SearchGifs">BUSCAR GIFS</string>
    <string name="SearchImagesTitle">Procurar na web</string>
    <string name="SearchGifsTitle">Procurar GIFs</string>
    <string name="CropImage">Recortar imagem</string>
    <string name="EditImage">Editar imagem</string>
    <string name="Enhance">Realçar</string>
    <string name="Highlights">Luzes</string>
    <string name="Contrast">Contraste</string>
    <string name="Exposure">Exposição</string>
    <string name="Warmth">Calor</string>
    <string name="Saturation">Saturação</string>
    <string name="Vignette">Vignette</string>
    <string name="Shadows">Sombras</string>
    <string name="Grain">Granulado</string>
    <string name="Sharpen">Nitidez</string>
    <string name="Fade">Fade</string>
    <string name="Tint">Matiz</string>
    <string name="TintShadows">SOMBRAS</string>
    <string name="TintHighlights">LUZES</string>
    <string name="Curves">Curvas</string>
    <string name="CurvesAll">TUDO</string>
    <string name="CurvesRed">VERMELHO</string>
    <string name="CurvesGreen">VERDE</string>
    <string name="CurvesBlue">AZUL</string>
    <string name="Blur">Desfoque</string>
    <string name="BlurOff">Desativado</string>
    <string name="BlurLinear">Linear</string>
    <string name="BlurRadial">Radial</string>
    <string name="DiscardChanges">Descartar mudanças?</string>
    <string name="ClearSearch">Limpar histórico de busca?</string>
    <string name="ClearButton">Limpar</string>
    <string name="PickerPhotos">Fotos</string>
    <string name="PickerVideo">Vídeo</string>
    <string name="AddCaption">Adicionar legenda…</string>
    <string name="PhotoCaption">Legenda da Foto</string>
    <string name="VideoCaption">Legenda do Vídeo</string>
    <string name="Caption">Legenda</string>
    <!--privacy settings-->
    <string name="PrivacySettings">Privacidade e Segurança</string>
    <string name="PrivacyTitle" tools:keep="@string/PrivacyTitle">Privacidade</string>
    <string name="SecurityTitle">Segurança</string>
    <!--edit video view-->
    <string name="EditVideo">Editar Vídeo</string>
    <string name="OriginalVideo">Vídeo Original</string>
    <string name="EditedVideo">Vídeo Editado</string>
    <string name="SendingVideo">Enviando vídeo…</string>
    <string name="CompressVideo">Compactar Vídeo</string>
    <!--button titles-->
    <string name="Next">Próximo</string>
    <string name="Back">Voltar</string>
    <string name="Done">Concluído</string>
    <string name="Open">Abrir</string>
    <string name="Save">Salvar</string>
    <string name="Cancel">Cancelar</string>
    <string name="Close">Fechar</string>
    <string name="Add">Adicionar</string>
    <string name="Edit">Editar</string>
    <string name="Send">Enviar</string>
    <string name="CopyToClipboard">Copiar</string>
    <string name="Delete">Apagar</string>
    <string name="Forward">Encaminhar</string>
    <string name="Retry">Tentar novamente</string>
    <string name="FromCamera">Câmera</string>
    <string name="FromGalley">Galeria</string>
    <string name="DeletePhoto">Apagar foto</string>
    <string name="Set">Aplicar</string>
    <string name="OK">OK</string>
    <string name="Crop">CORTAR</string>
    <!--messages-->
    <string name="AttachPhoto">Foto</string>
    <string name="AttachVideo">Vídeo</string>
    <string name="AttachGif">GIF</string>
    <string name="AttachLocation">Localização</string>
    <string name="AttachContact">Contato</string>
    <string name="AttachDocument">Arquivo</string>
    <string name="AttachSticker">Sticker</string>
    <string name="AttachAudio">Mensagem de voz</string>
    <string name="FromSelf">Você</string>
    <!--Alert messages-->
    <string name="Loading">Carregando…</string>
    <string name="NoPlayerInstalled">Você não possui um reprodutor de vídeo, instale um para continuar</string>
    <string name="NoHandleAppInstalled">Você não possui um aplicativo que suporte o tipo de arquivo \'%1$s\', por favor instale um para continuar</string>
    <string name="AddToTheGroupTitle">Adcione %1$s ao chat %2$s?</string>
    <string name="AddToTheGroup">Adicionar %1$s ao grupo?</string>
    <string name="UserAlreadyInGroup">Este usuário já está neste grupo</string>
    <string name="ForwardMessagesTo">Encaminhar mensagem para &lt;b&gt;%1$s&lt;/b&gt;?</string>
    <string name="SendMessagesTo">Enviar mensagens para &lt;b&gt;%1$s&lt;/b&gt;?</string>
    <string name="SendContactTo">Enviar contato para %1$s?</string>
    <string name="AreYouSureDeleteAndExit">Você tem certeza que apagar e sair do grupo?</string>
    <string name="AreYouSureDeleteThisChat">Você tem certeza que deseja apagar esta conversa?</string>
    <string name="ShareYouLocationUnable">O aplicativo foi impossibilitado de determinar sua localização atual.</string>
    <string name="ShareYouLocationUnableManually">Escolher manualmente</string>
    <string name="AreYouSureBlockContact">Você tem certeza que deseja bloquear este contato?</string>
    <string name="AreYouSureDeleteContact">Você tem certeza que deseja apagar este contato?</string>
    <string name="AreYouSureDeleteMessages">Você tem certeza que deseja apagar %1$s?</string>
    <string name="RaiseToSpeakAlert">Gostaria de habilitar o \"Levantar para Falar\" para mensagens de voz?</string>
    <!--permissions-->
    <string name="PermissionContacts">Delta Chat precisa acessar seus contatos para que você possa se conectar aos seus amigos em todos os seus dispositivos.</string>
    <string name="PermissionStorage">Delta Chat precisa acessar seu armazenamento para que você possa enviar e salvar fotos, vídeos, músicas e outras mídias.</string>
    <string name="PermissionNoAudio">Delta Chat precisa acessar seu microfone para que você possa enviar mensagens de voz.</string>
    <string name="PermissionNoLocation">Delta Chat precisa acessar sua localização para que você possa compartilhar com seus amigos.</string>
    <string name="PermissionNoLocationPosition">O Delta Chat precisa acessar sua localização</string>
    <string name="PermissionOpenSettings">Configurações</string>
    <!--Intro view-->
    <string name="Intro1Headline">Delta Chat</string>
    <string name="Intro1Message">O aplicativo com o &lt;b&gt;maior número de usuários&lt;/b&gt; do mundo.&lt;br/&gt;&lt;b&gt;Grátis&lt;/b&gt; e &lt;b&gt;seguro&lt;/b&gt;.</string>

    <string name="Intro2Headline">Independente</string>
    <string name="Intro2Message">&lt;b&gt;Independente&lt;/b&gt; de serviços estrangeiros. Este aplicativo só precisa de um e-mail para funcionar.</string>

    <string name="Intro3Headline">Rápido</string>
    <string name="Intro3Message">&lt;b&gt;Envie mensagens&lt;/b&gt; num átimo.&lt;br/&gt; Interface leve.</string>

    <string name="Intro4Headline">Poderoso</string>
    <string name="Intro4Message">&lt;b&gt;Sem limites&lt;/b&gt; para chats, imagens, vídeos, áudio e mais. Multicliente.</string>

    <string name="Intro5Headline">Grátis</string>
    <string name="Intro5Message">&lt;b&gt;Delta Chat&lt;/b&gt; será sempre grátis, de Código livre e sem propagandas.</string>

    <string name="Intro6Headline">Seguro</string>
    <string name="Intro6Message">&lt;b&gt;Criptografia&lt;/b&gt; com as tecnologias mais usadas. Suas mensagens ficam no servidor de e-mail.</string>

    <string name="Intro7Headline">Confiável</string>

    <string name="IntroStartMessaging">Comece a conversar</string>
    <!--plural-->
    <string name="Members_zero">%1$d membros</string>
    <string name="Members_one">%1$d membro</string>
    <string name="Members_two">%1$d membros</string>
    <string name="Members_few">%1$d membros</string>
    <string name="Members_many">%1$d membros</string>
    <string name="Members_other">%1$d membros</string>
    <plurals name="NewMessages">
        <item quantity="one">%d new message</item>
        <item quantity="other">%d new messages</item>
    </plurals>
    <plurals name="messages">
        <item quantity="one">%d message</item>
        <item quantity="other">%d messages</item>
    </plurals>
    <string name="items_zero">nenhum item</string>
    <string name="items_one">%1$d item</string>
    <string name="items_two">%1$d itens</string>
    <string name="items_few">%1$d itens</string>
    <string name="items_many">%1$d itens</string>
    <string name="items_other">%1$d itens</string>
    <string name="FromChats_zero">de nenhum chat</string>
    <string name="FromChats_one">de %1$d chat</string>
    <string name="FromChats_two">de %1$d chats</string>
    <string name="FromChats_few">de %1$d chats</string>
    <string name="FromChats_many">de %1$d chats</string>
    <string name="FromChats_other">de %1$d chats</string>

    <plurals name="Chats">
        <item quantity="one">%d chat</item>
        <item quantity="other">%d chats</item>
    </plurals>

    <string name="Seconds_zero">%1$d segundos</string>
    <string name="Seconds_one">%1$d segundo</string>
    <string name="Seconds_two">%1$d segundos</string>
    <string name="Seconds_few">%1$d segundos</string>
    <string name="Seconds_many">%1$d segundos</string>
    <string name="Seconds_other">%1$d segundos</string>
    <string name="Minutes_zero">%1$d minutos</string>
    <string name="Minutes_one">%1$d minuto</string>
    <string name="Minutes_two">%1$d minutos</string>
    <string name="Minutes_few">%1$d minutos</string>
    <string name="Minutes_many">%1$d minutos</string>
    <string name="Minutes_other">%1$d minutos</string>
    <string name="Hours_zero">%1$d horas</string>
    <string name="Hours_one">%1$d hora</string>
    <string name="Hours_two">%1$d horas</string>
    <string name="Hours_few">%1$d horas</string>
    <string name="Hours_many">%1$d horas</string>
    <string name="Hours_other">%1$d horas</string>
    <string name="Days_zero">%1$d dias</string>
    <string name="Days_one">%1$d dia</string>
    <string name="Days_two">%1$d dias</string>
    <string name="Days_few">%1$d dias</string>
    <string name="Days_many">%1$d dias</string>
    <string name="Days_other">%1$d dias</string>
    <string name="Weeks_zero">%1$d semanas</string>
    <string name="Weeks_one">%1$d semana</string>
    <string name="Weeks_two">%1$d semanas</string>
    <string name="Weeks_few">%1$d semanas</string>
    <string name="Weeks_many">%1$d semanas</string>
    <string name="Weeks_other">%1$d semanas</string>
    <string name="Months_zero">%1$d meses</string>
    <string name="Months_one">%1$d mês</string>
    <string name="Months_two">%1$d meses</string>
    <string name="Months_few">%1$d meses</string>
    <string name="Months_many">%1$d meses</string>
    <string name="Months_other">%1$d meses</string>
    <string name="Years_zero">%1$d anos</string>
    <string name="Years_one">%1$d ano</string>
    <string name="Years_two">%1$d anos</string>
    <string name="Years_few">%1$d anos</string>
    <string name="Years_many">%1$d anos</string>
    <string name="Years_other">%1$d anos</string>
    <string name="Users_zero">%1$d usuários</string>
    <string name="Users_one">%1$d usuário</string>
    <string name="Users_two">%1$d usuários</string>
    <string name="Users_few">%1$d usuários</string>
    <string name="Users_many">%1$d usuários</string>
    <string name="Users_other">%1$d usuários</string>
    <string name="Times_zero">%1$d vezes</string>
    <string name="Times_one">%1$d vez</string>
    <string name="Times_two">%1$d vezes</string>
    <string name="Times_few">%1$d vezes</string>
    <string name="Times_many">%1$d vezes</string>
    <string name="Times_other">%1$d vezes</string>
    <string name="Meters_zero">%1$d metros</string>
    <string name="Meters_one">%1$d metro</string>
    <string name="Meters_two">%1$d metros</string>
    <string name="Meters_few">%1$d metros</string>
    <string name="Meters_many">%1$d metros</string>
    <string name="Meters_other">%1$d metros</string>
    <string name="Stickers_zero">%1$d stickers</string>
    <string name="Stickers_one">%1$d sticker</string>
    <string name="Stickers_two">%1$d stickers</string>
    <string name="Stickers_few">%1$d stickers</string>
    <string name="Stickers_many">%1$d stickers</string>
    <string name="Stickers_other">%1$d stickers</string>
    <string name="Photos_zero">%1$d fotos</string>
    <string name="Photos_one">%1$d foto</string>
    <string name="Photos_two">%1$d fotos</string>
    <string name="Photos_few">%1$d fotos</string>
    <string name="Photos_many">%1$d fotos</string>
    <string name="Photos_other">%1$d fotos</string>
    <!--date formatters-->
    <string name="formatterMonthYear">MMMM yyyy</string>
    <string name="formatterMonth">dd MMM</string>
    <string name="formatterYear">dd.MM.yyyy</string>
    <string name="chatDate">EEE, d MMMM</string>
    <string name="chatFullDate">EEE, d MMMM, yyyy</string>
    <string name="formatterWeek">EEE</string>
    <string name="formatterDay24H">HH:mm</string>
    <string name="formatterDay12H">h:mm a</string>
    <string name="formatDateAtTime">%1$s às %2$s</string>
    <string name="AccountSettings">Configurações de conta</string>
    <string name="MyAccount">Minha conta</string>
    <string name="Yes">Sim</string>
    <string name="No">Não</string>
    <string name="MyName">Meu nome</string>
    <string name="MyNameExplain">Este nome será exibido aos seus contatos.\n\nSe não inseri-lo os destinatários visualizarão o seu endereço de e-mail.</string>
    <string name="MyEmailAddress">Meu endereço de e-mail</string>
    <string name="Password">Senha</string>
    <string name="SmtpPassword">senha SMTP</string>
    <string name="FromAbove">de acima</string>
    <string name="SmtpLoginname">Nome de usuário SMTP</string>
    <string name="SmtpPort">Porta SMTP</string>
    <string name="Automatic">automático</string>
    <string name="ImapServer">Servidor IMAP</string>
    <string name="ImapLoginname">Nome de login IMAP</string>
    <string name="SmtpServer">Servidor SMTP</string>
    <string name="ImapPort">Porta IMAP</string>
    <string name="InboxHeadline">Caixa de entrada</string>
    <string name="OutboxHeadline">Caixa de saída</string>
    <string name="BasicSettings">Configurações básicas</string>
    <string name="MyAccountExplain">Para servidores de e-mail mais populares as configurações são detectadas automaticamente.</string>
    <string name="MyAccountExplain2" >Por vezes é necessário habilitar as funcionalidades IMAP/SMTP nas configurações do provedor escolhido.\n\nNão exite em pedir ajuda ao provedor ou aos seus amigos.</string>
    <string name="AccountNotConfigured">Conta não configurada</string>
    <string name="AboutThisProgram">Sobre o Delta Chat</string>
    <string name="NotSet">Não configurado</string>
    <string name="NewChat">Novo Chat</string>
    <string name="MemberSg">## membro</string>
    <string name="MemberPl">## membros</string>
    <string name="ContactSg"># contato</string>
    <string name="ContactPl">## contatos</string>
    <string name="Deaddrop">Caixa de entrada</string>
    <string name="Media">Mídias</string>
    <string name="DeaddropInChatlist">Exibir caixa de entrada na lista de conversas</string>
    <string name="MuteAlways">Silenciar sempre</string>
    <string name="AskStartChatWith">Conversar com &lt;b&gt;%1$s&lt;/b&gt;?</string>
    <string name="DeaddropHint">Para conversar clique na seta.</string>
    <string name="NotYetImplemented">Função ainda não implementada.</string>
    <string name="DefaultStatusText">Enviado pelo Delta Chat Messenger</string>
    <string name="SubjectPrefix">Mensagem instantânea</string>
    <string name="SeachUser">Busca</string>
    <string name="Name" >Nome</string>
    <string name="EmailAddress">Endereço de e-mail</string>
    <string name="MeAnd">Eu e</string>
    <string name="CannotDeleteContact">Impossível deletar usuários ativos, bloqueie-os.</string>
    <string name="BadEmailAddress">E-mail inválido.</string>
    <string name="ContactDeleted">Usuário deletado.</string>
    <string name="ContactCreated">Usuário criado.</string>
    <string name="ViewProfile">Ver perfil</string>
    <string name="OneMomentPlease">Um momento, por favor...</string>
    <string name="CannotDeleteChat">Impossível deletar a conversa.</string>
    <string name="NoChatsHelp">Comece uma conversa pressionando o botão "+" no canto direito inferior. Alternativamente acesse a opção correspondente pelo menu.</string>
    <string name="ConfiguringAccount">Configurando conta...</string>
    <string name="CannotConnect">Não conectou! Revise as configurações.</string>
    <string name="Intro7Message">&lt;b&gt;Delta Chat&lt;/b&gt; é seguro para fins comerciais e compatível com os padrões de uso.</string>
    <string name="InviteMenuEntry">Convidar Amigos</string>
    <string name="InviteText">Agora estou usando o Delta Chat - %1$s - contate-me às %2$s</string>
    <string name="AdvancedSettings">Configurações avançadas</string>
    <string name="AskResetNotifications" >Zerar configurações de som e notificação desta página, usuários e grupos?</string>
    <string name="AttachFiles">Anexar arquivos</string>
    <string name="Chats">Conversas</string>
    <string name="ErrGroupNameEmpty">Escolha o nome do grupo.</string>
    <string name="MsgNewGroupDraftHint">Escreva a primeira mensagem para que os demais possam interagir no grupo.\n\n• Não é necessário que todos usem o Delta Chat.\n\n• A primeira mensagem pode demorar um pouco.</string>
    <string name="MsgNewGroupDraft">Olá! Criei o grupo \"##\" para conversarmos.</string>
    <string name="MsgGroupNameChanged">O nome do grupo mudou de \"##\" para \"##\".</string>
    <string name="MsgGroupImageChanged">Imagem do grupo alterada.</string>
    <string name="MsgMemberAddedToGroup">## adicionado.</string>
    <string name="MsgMemberRemovedFromToGroup">## removido.</string>
    <string name="AskAddMemberToGroup">Adicionar &lt;b&gt;%1$s&lt;/b&gt; no grupo?</string>
    <string name="AskRemoveMemberFromGroup">Remover &lt;b&gt;%1$s&lt;/b&gt; so grupo?</string>
    <string name="ErrSelfNotInGroup">É preciso ser um membro do grupo para fazer isso.</string>
    <string name="MsgGroupLeft">Deixou o grupo.</string>
    <string name="NoMessagesHint">Enviar mensagem para &lt;b&gt;%1$s&lt;/b&gt;:\n\n•  &lt;b&gt;%2$s&lt;/b&gt; não precisa usar o Delta Chat.\n\n• A primeira mensagem pode demorar um pouco.</string>
    <string name="SendNRcvReadReceipts">Enviar e receber confirmação</string>
    <string name="E2EEncryption">Criptografia ponta-a-ponta</string>
    <string name="E2EManagePrivateKeys">Gerir chaves privadas</string>
    <string name="E2ECompareKeys">Comparar chaves</string>
    <string name="ResetUserKey">Reconfigurar chave do usuário</string>
    <string name="ForwardToTitle">Selecione um Chat …</string>
</resources>

https://gist.github.com/luisfsr/984b5e1bbae800f8c5be748344b21194


Translation made with Stringlate.

Strato Mailbox Integration

Gemäss Beschreibung wird der Chatverlauf im Ordner Chats abgespeichert. Bei Strato wird dieser Ordner nicht angelegt, bzw. der Verlauf nicht gespeichert. Ich kann auch selber keinen Ordner auf oberster Ebene anlegen. Eventuell könnte man eine Option einbauen, dass eine Kopie des Chatverlaufs ganz normal im Posteingang abgespeichert werden kann.
Strato sieht so aus:
strato

GMX sieht so aus:
gmx

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.