Compare commits

...

96 Commits

Author SHA1 Message Date
B. Petersen 3863b74fbd Update messenger-backend submodule. 2017-12-15 01:04:56 +01:00
B. Petersen 8216ce7d20 bump version 2017-12-15 01:02:46 +01:00
B. Petersen a7a06ce26b wording 2017-12-15 00:05:37 +01:00
B. Petersen e9e4c01e54 Update messenger-backend submodule. 2017-12-14 23:59:26 +01:00
B. Petersen 47e2fa4a22 disable entering the setup code, for now 2017-12-14 23:59:07 +01:00
B. Petersen 90fad460a6 changelog 2017-12-14 23:54:41 +01:00
B. Petersen 929962c228 bump version 2017-12-14 23:47:52 +01:00
B. Petersen a55edf0ba0 update gradle, simplify versionCode, add flavorDimensions, fixed #217 2017-12-14 23:40:54 +01:00
B. Petersen e255926e10 allow self talk chats 2017-12-14 23:39:06 +01:00
B. Petersen 21ed3e06e6 update german and polish translations 2017-12-11 22:21:53 +01:00
B. Petersen 2ceffb283f update translations 2017-12-09 16:29:50 +01:00
B. Petersen 2e52bacfba wording 2017-12-09 16:28:13 +01:00
B. Petersen 6c624e93b3 Update messenger-backend submodule. 2017-12-07 16:13:49 +01:00
B. Petersen ee5b2371e0 update jni makefile 2017-12-07 16:13:34 +01:00
B. Petersen 18297213f2 update translations 2017-12-06 16:39:31 +01:00
B. Petersen 1373e46d04 regarding cancel/move events on setup message clicks 2017-12-06 12:58:11 +01:00
B. Petersen d7c6bac301 add a little margin below the last setup code row (for kitkat) 2017-12-06 12:48:27 +01:00
B. Petersen b9e3a5454e update Russian translation 2017-12-06 12:26:21 +01:00
B. Petersen 3decd485ea add an option to retry entering the setup code 2017-12-06 12:24:21 +01:00
B. Petersen 285fcf3df3 Update messenger-backend submodule. 2017-12-06 11:27:10 +01:00
B. Petersen 0312960e93 show a message after entering the setup code 2017-12-06 00:39:07 +01:00
B. Petersen cfee7400c9 update Italian 2017-12-06 00:20:03 +01:00
B. Petersen e113fb0902 add layout file for displaying the setup code entry fields 2017-12-06 00:19:18 +01:00
B. Petersen deedd1acac add ui for entering the setup code 2017-12-06 00:17:40 +01:00
B. Petersen e1d912158d detect clicks on setup messages 2017-12-05 17:30:44 +01:00
B. Petersen 373e15b08a changelog 2017-12-05 16:10:57 +01:00
B. Petersen e2bdb0bf13 do not use a symbol for the enter key; while a good idea, in practise, this creates too much confusion and problems with translations. 2017-12-05 16:03:01 +01:00
B. Petersen 19de16887c fix some string escapes 2017-12-05 15:50:07 +01:00
B. Petersen 8609892116 update Albanian 2017-12-05 15:45:08 +01:00
B. Petersen 76717b908d connect after importing a backup, fixes #213 2017-12-05 15:33:52 +01:00
B. Petersen c57ae9861f do the key transfer in a separate thread 2017-12-05 14:01:48 +01:00
B. Petersen 63a2899fdc hilite setup message 2017-12-04 17:44:05 +01:00
B. Petersen 2d86c5b10b update Albanian translation 2017-12-04 16:31:33 +01:00
B. Petersen bd5ba8ebaf Add Setup Message text 2017-12-03 23:52:51 +01:00
B. Petersen 0e90ea1308 add albanian translation 2017-12-03 16:49:25 +01:00
B. Petersen ec05602bb1 update german translation 2017-12-03 16:47:36 +01:00
B. Petersen 2c55c93367 add ui for initiating autocrypt key transfer 2017-12-03 15:53:59 +01:00
B. Petersen b37a91cdd9 adapt to new imex api 2017-11-30 23:44:46 +01:00
B. Petersen 223c39d26a comment 2017-11-30 14:16:56 +01:00
B. Petersen 0a46073552 comment 2017-11-29 17:55:40 +01:00
B. Petersen 0325c9531f Update messenger-backend submodule. 2017-11-29 17:30:21 +01:00
B. Petersen c4ec5c6e1a comment 2017-11-29 17:21:03 +01:00
B. Petersen b00e35f341 Update Portuguese and Turkish translations 2017-11-29 12:05:27 +01:00
B. Petersen a935425e5d typo 2017-11-29 12:03:29 +01:00
B. Petersen 46fc46ee4f switch to Semantic Versioning, https://semver.org/ 2017-11-26 18:00:38 +01:00
B. Petersen d7fcf9433d Update messenger-backend submodule. 2017-11-26 17:59:10 +01:00
B. Petersen ec921e22e8 adapt to new mrlot_t api 2017-11-24 14:42:56 +01:00
B. Petersen 55bc139c72 adapt to new send api 2017-11-23 17:32:58 +01:00
B. Petersen a5187ed1a2 adapt to new late filing api 2017-11-23 13:31:48 +01:00
B. Petersen a79cbe9804 adapt to new api 2017-11-23 11:44:02 +01:00
B. Petersen dd9d10a991 adapt duration/width to new api 2017-11-22 21:59:04 +01:00
Björn Petersen 3c78f6a82f Update ISSUE_TEMPLATE.md 2017-11-22 20:03:03 +01:00
Björn Petersen 4a30940d54 Merge pull request #206 from Ampli-fier/master
Contributing guidelines and Issue template
2017-11-22 19:54:45 +01:00
B. Petersen 0c0e1a35e2 fix memory leak 2017-11-22 16:52:02 +01:00
B. Petersen 0fe4827214 use core function to get the mime type 2017-11-22 16:45:02 +01:00
B. Petersen 80c8b7ef20 use mrmsg_get_file() function 2017-11-22 15:38:43 +01:00
B. Petersen 93a99cdd2c fix weird return values 2017-11-22 15:29:05 +01:00
B. Petersen 76dfa1fca5 adapt to new forward-check-c-api 2017-11-22 15:18:20 +01:00
B. Petersen ba1c32fe05 adapt to new c-api 2017-11-22 14:34:41 +01:00
B. Petersen 1c77b0bf4e Update messenger-backend submodule. 2017-11-21 23:47:14 +01:00
B. Petersen 31331b958f fix usage of jobject and jclass 2017-11-21 23:46:46 +01:00
B. Petersen 80fc718ec8 adapt to new c-api 2017-11-21 23:42:56 +01:00
B. Petersen 823a1e2197 adapt to new C-API 2017-11-21 23:06:11 +01:00
Ampli-fier 8fad2d0226 Update ISSUE_TEMPLATE.md 2017-11-21 22:29:24 +01:00
Ampli-fier ad69dc4ad4 Update CONTRIBUTING.md 2017-11-21 22:19:38 +01:00
B. Petersen f8f89497a9 Adapt to new C-API 2017-11-21 17:01:34 +01:00
B. Petersen 4272ac7619 Adapt to new C-API. 2017-11-21 16:32:40 +01:00
B. Petersen 3e5da102a5 Update checklist 2017-11-20 23:57:35 +01:00
B. Petersen 51742716ec Changelog 2017-11-20 23:43:59 +01:00
B. Petersen fb7a106617 Update messenger-backend submodule. 2017-11-20 18:19:17 +01:00
B. Petersen c016c728d3 Adapt to new C-API. 2017-11-20 16:24:23 +01:00
Ampli-fier b6c1d4b768 Created CONTRIBUTING.md 2017-11-19 19:48:59 +01:00
Ampli-fier 21cb85ce39 Create ISSUE_TEMPLATE.md 2017-11-19 19:48:09 +01:00
B. Petersen fa9f13bba8 Adapt to new API, use mrarray_t instead of carray 2017-11-19 11:41:20 +01:00
B. Petersen 7feda6323a Bump version 2017-11-18 17:15:16 +01:00
B. Petersen 4cd02a673f Changelog 2017-11-18 17:09:11 +01:00
B. Petersen 22659c35fb Update messenger-backend submodule. 2017-11-18 16:58:47 +01:00
B. Petersen a6f89674b8 Add Serbian translation. 2017-11-18 16:31:33 +01:00
B. Petersen 1bfdbfc00d Show correct hint after chat deletion. 2017-11-17 17:45:20 +01:00
B. Petersen 73686ba57f Comment 2017-11-17 16:22:17 +01:00
B. Petersen c44c78c87d Update strings. 2017-11-17 14:59:17 +01:00
Björn Petersen 371042029f Merge pull request #203 from Ampli-fier/master
Minor corrections to strings.xml
2017-11-17 14:58:04 +01:00
Ampli-fier fa0f66bde2 Minor corrections to strings.xml 2017-11-17 14:40:34 +01:00
B. Petersen 843c5b548e Update checklist. 2017-11-17 13:47:14 +01:00
B. Petersen 06a3a6b285 Add changes from modified PR 191, https://github.com/deltachat/deltachat-android/pull/191/ 2017-11-17 13:32:56 +01:00
B. Petersen d2ac75d526 Comment 2017-11-17 11:47:48 +01:00
B. Petersen 723b56b2d9 Simplify txpull/txpush scripts. 2017-11-17 11:42:41 +01:00
B. Petersen 1910ccff83 Wording 2017-11-17 11:42:09 +01:00
B. Petersen 11e676de2c Move update-core script to tools. 2017-11-17 01:25:51 +01:00
B. Petersen eb2c357868 Update messenger-backend submodule. 2017-11-17 01:25:06 +01:00
B. Petersen 4020b9c086 Fix translation issues. 2017-11-17 01:20:31 +01:00
B. Petersen be0670c592 Add a script to push back to Transifex. 2017-11-17 01:19:44 +01:00
B. Petersen d1786bc9dc Update translations. 2017-11-17 01:05:56 +01:00
B. Petersen 215b834da9 Add a script to pull all translation files from Transifex. 2017-11-17 01:03:27 +01:00
B. Petersen 5e77be8dd0 Update messenger-backend submodule. 2017-11-16 22:32:27 +01:00
B. Petersen 913663743c Bump version 2017-11-16 21:41:33 +01:00
54 changed files with 1802 additions and 436 deletions
+23
View File
@@ -0,0 +1,23 @@
# Thank you for contributing to Delta Chat.
Delta Chat is divided in two parts: Android and [Core](https://github.com/deltachat/deltachat-core).
In short, the Android part is about the User Interface. The Interface is translated using [Transifex](https://www.transifex.com/delta-chat/delta-chat-android). The Core part is about handling the connection to the mail server and the chat or e-mail messages as well as providing secure communication by using [Autocrypt](https://autocrypt.org/en/latest/).
Delta Chat Core is used in the Android and in the [iOS](https://github.com/deltachat/deltachat-ios) version.
Please try to create your issue to the respective Issue tracker: Here, or in [Core](https://github.com/deltachat/deltachat-core/issues). Don't worry, if you are not sure. We will move the issue if necessary.
If you intend to create a **feature request** for Delta Chat, please check the exiting requests for
* [Android](https://github.com/deltachat/deltachat-android/issues?q=is%3Aissue+label%3A%22feature+request%22+sort%3Aupdated-desc) and
* [Core](https://github.com/deltachat/deltachat-core/issues?q=is%3Aissue+label%3A%22feature+request%22+sort%3Aupdated-desc)
first.
If you intend to send a **bug report** for Delta Chat, search for bugs (including closed) in
* [Android](https://github.com/deltachat/deltachat-android/issues?&q=is%3Aissue) and
* [Core](https://github.com/deltachat/deltachat-core/issues?&q=is%3Aissue)
A **bug** is a reproducable misbehaviour, when something happens but something else should happen instead.
Did you know there is a [Help](https://delta.chat/en/help) page for Delta Chat?
+34
View File
@@ -0,0 +1,34 @@
_Please read the guidelines linked above, especially when you are a first time contributor. Remove this text and provide some basic informations below, if applicable. Remove template content that is not applicable._
**Delta Chat version**
See settings dialog …
**Expected behavior**
What is the expected output?
**Actual behavior**
What do you see instead?
**Steps to reproduce the problem**
1.
2.
**Screen snapshots**
If applicable …
**Debug logs**
If applicable, debug logs can be copied from within the Delta Chat app:
Open the _Settings_ menu -> _About_ -> _version number|Info_.
Alternatively from the Android system log:
` adb logcat -v time -s DeltaChat `
This log contains private data (e.g. mail address, provider information) which shall be removed or anonymised prior to posting.
+4
View File
@@ -9,3 +9,7 @@ libs/
# ignore private scripts and directories, eg. local2github.prv.sh
*.prv*
# transifex temporary files
tools/.tx/
tools/translations/
+22
View File
@@ -1,5 +1,27 @@
# Delta Chat Changelog
## v0.11.1
2017-12-14
* Add option to initiate Autocrypt Key Transfer
* Connect after importing a backup
* Add Albanian translation
* Update German, Italian, Polish and Russian translations
## v0.10.0
2017-11-29
* Fix usage of multiple private keys
* Fix various memory leaks
* Update English, Portuguese and Turkish translations
## v0.9.9
2017-11-18
* Alternate include order for F-Droid
* Add Serbian translation
* Update Catalan, Dutch, English, French, German, Hungarian, Italian, Polish, Portuguese, Russian, Spanish, Tamil, Telugu and Ukrainian translations
## v0.9.8
2017-11-15
+8 -6
View File
@@ -79,13 +79,12 @@ android {
}
}
defaultConfig.versionCode = 47
sourceSets.main {
jniLibs.srcDir 'libs'
jni.srcDirs = [] //disable automatic ndk-build call
}
flavorDimensions "none"
productFlavors {
/*
x86 {
@@ -108,19 +107,22 @@ android {
}
*/
fat {
versionCode = 3
dimension "none"
//versionCode = 3
}
}
applicationVariants.all { variant ->
/*applicationVariants.all { variant ->
def abiVersion = variant.productFlavors.get(0).versionCode
variant.mergedFlavor.versionCode = defaultConfig.versionCode * 10 + abiVersion;
}
}*/
defaultConfig {
minSdkVersion 14 // 14: Android 4.0 Ice Cream Sandwich 2011 (Telegram default), 21: Android 5.0 Lollipop 2014 (recommended for InstantRun)
targetSdkVersion 25 // 25: Nougat. CAVE: Do NOT target "Andoid O" without checking the background tasks carefully, see https://developer.android.com/preview/behavior-changes.html#back-all . As long as we target "Nougat", everything works as expected even for "Andoid O" or later
// in general, we should not change the target without reason; eg. after the switch to Nougat, the camera stops working (see https://inthecheesefactory.com/blog/how-to-share-access-to-file-with-fileprovider-on-android-nougat/en )
versionName "0.9.8" // do NOT forget to increase defaultConfig.versionCode!
versionName "0.11.1" // do NOT forget to increase defaultConfig.versionCode!
versionCode 506
}
}
+3 -1
View File
@@ -1633,15 +1633,18 @@ LOCAL_SRC_FILES += \
./messenger-backend/libs/netpgp/src/writer.c \
./messenger-backend/src/mraheader.c \
./messenger-backend/src/mrapeerstate.c \
./messenger-backend/src/mrarray.c \
./messenger-backend/src/mrchat.c \
./messenger-backend/src/mrchatlist.c \
./messenger-backend/src/mrcontact.c \
./messenger-backend/src/mrdehtml.c \
./messenger-backend/src/mrhash.c \
./messenger-backend/src/mrimap.c \
./messenger-backend/src/mrjob.c \
./messenger-backend/src/mrkey.c \
./messenger-backend/src/mrkeyring.c \
./messenger-backend/src/mrloginparam.c \
./messenger-backend/src/mrlot.c \
./messenger-backend/src/mrmailbox.c \
./messenger-backend/src/mrmailbox_configure.c \
./messenger-backend/src/mrmailbox_e2ee.c \
@@ -1653,7 +1656,6 @@ LOCAL_SRC_FILES += \
./messenger-backend/src/mrmsg.c \
./messenger-backend/src/mrparam.c \
./messenger-backend/src/mrpgp.c \
./messenger-backend/src/mrpoortext.c \
./messenger-backend/src/mrsaxparser.c \
./messenger-backend/src/mrsimplify.c \
./messenger-backend/src/mrsmtp.c \
+220 -137
View File
@@ -117,15 +117,15 @@ void mrosnative_unsetup_thread(mrmailbox_t* mailbox)
/* tools */
static jintArray carray2jintArray_n_carray_free(JNIEnv *env, const carray* ca)
static jintArray mrarray2jintArray_n_mrarray_unref(JNIEnv *env, const mrarray_t* ca)
{
int i, icnt = ca? carray_count(ca) : 0;
int i, icnt = ca? mrarray_get_cnt(ca) : 0;
jintArray ret = (*env)->NewIntArray(env, icnt); if (ret == NULL) { return NULL; }
if( ca ) {
if( icnt ) {
void** ca_data = carray_data(ca);
if( sizeof(void*)==sizeof(jint) ) {
uintptr_t* ca_data = ca->m_array;
if( sizeof(uintptr_t)==sizeof(jint) ) {
(*env)->SetIntArrayRegion(env, ret, 0, icnt, (jint*)ca_data);
}
else {
@@ -137,7 +137,7 @@ static jintArray carray2jintArray_n_carray_free(JNIEnv *env, const carray* ca)
free(temp);
}
}
carray_free(ca);
mrarray_unref(ca);
}
return ret;
@@ -258,9 +258,9 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_configureAndConnect(JNIEnv *env
}
JNIEXPORT void Java_com_b44t_messenger_MrMailbox_configureCancel(JNIEnv *env, jclass cls)
JNIEXPORT void Java_com_b44t_messenger_MrMailbox_stopOngoingProcess(JNIEnv *env, jclass cls)
{
mrmailbox_configure_cancel(get_mrmailbox_t(env, cls));
mrmailbox_stop_ongoing_process(get_mrmailbox_t(env, cls));
}
@@ -287,9 +287,9 @@ JNIEXPORT void Java_com_b44t_messenger_MrMailbox_disconnect(JNIEnv *env, jclass
JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getKnownContacts(JNIEnv *env, jclass cls, jstring query)
{
CHAR_REF(query);
carray* ca = mrmailbox_get_known_contacts(get_mrmailbox_t(env, cls), queryPtr);
mrarray_t* ca = mrmailbox_get_known_contacts(get_mrmailbox_t(env, cls), queryPtr);
CHAR_UNREF(query);
return carray2jintArray_n_carray_free(env, ca);
return mrarray2jintArray_n_mrarray_unref(env, ca);
}
@@ -301,8 +301,8 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_getBlockedCount(JNIEnv *env, jc
JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getBlockedContacts(JNIEnv *env, jclass cls)
{
carray* ca = mrmailbox_get_blocked_contacts(get_mrmailbox_t(env, cls));
return carray2jintArray_n_carray_free(env, ca);
mrarray_t* ca = mrmailbox_get_blocked_contacts(get_mrmailbox_t(env, cls));
return mrarray2jintArray_n_mrarray_unref(env, ca);
}
@@ -433,10 +433,10 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_setChatName(JNIEnv *env, jclass
}
JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_setChatImage(JNIEnv *env, jclass cls, jint chat_id, jstring image/*NULL=delete*/)
JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_setChatProfileImage(JNIEnv *env, jclass cls, jint chat_id, jstring image/*NULL=delete*/)
{
CHAR_REF(image);
jint ret = (jint)mrmailbox_set_chat_image(get_mrmailbox_t(env, cls), chat_id, imagePtr/*CHAR_REF() preserves NULL*/);
jint ret = (jint)mrmailbox_set_chat_profile_image(get_mrmailbox_t(env, cls), chat_id, imagePtr/*CHAR_REF() preserves NULL*/);
CHAR_UNREF(image);
return ret;
}
@@ -499,33 +499,30 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_sendTextMsg(JNIEnv *env, jclass
}
JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_sendVcardMsg(JNIEnv *env, jobject obj, jint chat_id, jint contact_id)
{
return mrmailbox_send_vcard_msg(get_mrmailbox_t(env, obj), chat_id, contact_id);
}
JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_sendMediaMsg(JNIEnv *env, jclass cls, jint chat_id, jint type, jstring file, jstring mime, jint w, jint h, jint ms, jstring author, jstring trackname)
{
mrmsg_t* msg = mrmsg_new();
msg->m_type = type;
CHAR_REF(mime);
mrparam_set(msg->m_param, 'm', mimePtr);
CHAR_UNREF(mime);
CHAR_REF(file);
mrparam_set(msg->m_param, 'f', filePtr);
CHAR_UNREF(file);
if( type == MR_MSG_IMAGE || type == MR_MSG_GIF || type == MR_MSG_VIDEO ) {
mrparam_set_int(msg->m_param, 'w', w);
mrparam_set_int(msg->m_param, 'h', h);
}
if( type == MR_MSG_AUDIO || type == MR_MSG_VOICE || type == MR_MSG_VIDEO ) {
mrparam_set_int(msg->m_param, 'd', ms);
}
if( type == MR_MSG_AUDIO ) {
CHAR_REF(author);
mrparam_set(msg->m_param, 'N', authorPtr);
CHAR_UNREF(author);
CHAR_REF(trackname);
mrparam_set(msg->m_param, 'n', tracknamePtr);
CHAR_UNREF(trackname);
}
jint msg_id = mrmailbox_send_msg(get_mrmailbox_t(env, cls), chat_id, msg);
mrmsg_unref(msg);
jint msg_id = 0;
CHAR_REF(file);
CHAR_REF(mime);
CHAR_REF(author);
CHAR_REF(trackname);
switch( type ) {
case MR_MSG_IMAGE: msg_id = (jint)mrmailbox_send_image_msg(get_mrmailbox_t(env, cls), chat_id, filePtr, mimePtr, w, h); break;
case MR_MSG_VIDEO: msg_id = (jint)mrmailbox_send_video_msg(get_mrmailbox_t(env, cls), chat_id, filePtr, mimePtr, w, h, ms); break;
case MR_MSG_VOICE: msg_id = (jint)mrmailbox_send_voice_msg(get_mrmailbox_t(env, cls), chat_id, filePtr, mimePtr, ms); break;
case MR_MSG_AUDIO: msg_id = (jint)mrmailbox_send_audio_msg(get_mrmailbox_t(env, cls), chat_id, filePtr, mimePtr, ms, authorPtr, tracknamePtr); break;
default: msg_id = (jint)mrmailbox_send_file_msg (get_mrmailbox_t(env, cls), chat_id, filePtr, mimePtr); break;
}
CHAR_UNREF(trackname);
CHAR_UNREF(author);
CHAR_UNREF(mime);
CHAR_UNREF(file);
return msg_id;
}
@@ -606,11 +603,33 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_cmdline(JNIEnv *env, jclass
}
JNIEXPORT void Java_com_b44t_messenger_MrMailbox_imex(JNIEnv *env, jclass cls, jint what, jstring dir)
JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_initiateKeyTransfer(JNIEnv *env, jclass cls)
{
jstring setup_code = NULL;
char* temp = mrmailbox_initiate_key_transfer(get_mrmailbox_t(env, cls));
if( temp ) {
setup_code = JSTRING_NEW(temp);
free(temp);
}
return setup_code;
}
JNIEXPORT jboolean Java_com_b44t_messenger_MrMailbox_continueKeyTransfer(JNIEnv *env, jclass cls, jint msg_id, jstring setupCode)
{
CHAR_REF(setupCode);
jboolean ret = mrmailbox_continue_key_transfer(get_mrmailbox_t(env, cls), msg_id, setupCodePtr);
CHAR_UNREF(setupCode);
return ret;
}
JNIEXPORT int Java_com_b44t_messenger_MrMailbox_imex(JNIEnv *env, jclass cls, jint what, jstring dir)
{
CHAR_REF(dir);
mrmailbox_imex(get_mrmailbox_t(env, cls), what, dirPtr, "");
jint ret = mrmailbox_imex(get_mrmailbox_t(env, cls), what, dirPtr, "");
CHAR_UNREF(dir);
return ret;
}
@@ -672,13 +691,15 @@ JNIEXPORT jint Java_com_b44t_messenger_MrChatlist_MrChatlistGetCnt(JNIEnv *env,
JNIEXPORT jlong Java_com_b44t_messenger_MrChatlist_MrChatlistGetChatByIndex(JNIEnv *env, jclass c, jlong hChatlist, jint index)
{
return (jlong)mrchatlist_get_chat_by_index((mrchatlist_t*)hChatlist, index);
mrchatlist_t* chatlist = (mrchatlist_t*)hChatlist;
return (jlong)mrmailbox_get_chat(chatlist->m_mailbox, mrchatlist_get_chat_id(chatlist, index));
}
JNIEXPORT jlong Java_com_b44t_messenger_MrChatlist_MrChatlistGetMsgByIndex(JNIEnv *env, jclass c, jlong hChatlist, jint index)
{
return (jlong)mrchatlist_get_msg_by_index((mrchatlist_t*)hChatlist, index);
mrchatlist_t* chatlist = (mrchatlist_t*)hChatlist;
return (jlong)mrmailbox_get_msg(chatlist->m_mailbox, mrchatlist_get_msg_id(chatlist, index));
}
@@ -713,62 +734,61 @@ JNIEXPORT void Java_com_b44t_messenger_MrChat_MrChatUnref(JNIEnv *env, jclass c,
}
JNIEXPORT jint Java_com_b44t_messenger_MrChat_getId(JNIEnv *env, jclass cls)
JNIEXPORT jint Java_com_b44t_messenger_MrChat_getId(JNIEnv *env, jobject obj)
{
mrchat_t* ths = get_mrchat_t(env, cls); if( ths == NULL ) { return 0; }
mrchat_t* ths = get_mrchat_t(env, obj); if( ths == NULL ) { return 0; }
return ths->m_id;
}
JNIEXPORT jint Java_com_b44t_messenger_MrChat_getType(JNIEnv *env, jclass cls)
JNIEXPORT jint Java_com_b44t_messenger_MrChat_getType(JNIEnv *env, jobject obj)
{
mrchat_t* ths = get_mrchat_t(env, cls); if( ths == NULL ) { return 0; }
mrchat_t* ths = get_mrchat_t(env, obj); if( ths == NULL ) { return 0; }
return ths->m_type;
}
JNIEXPORT jint Java_com_b44t_messenger_MrChat_getArchived(JNIEnv *env, jclass cls)
JNIEXPORT jint Java_com_b44t_messenger_MrChat_getArchived(JNIEnv *env, jobject obj)
{
mrchat_t* ths = get_mrchat_t(env, cls); if( ths == NULL ) { return 0; }
mrchat_t* ths = get_mrchat_t(env, obj); if( ths == NULL ) { return 0; }
return ths->m_archived;
}
JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getName(JNIEnv *env, jclass cls)
JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getName(JNIEnv *env, jobject obj)
{
mrchat_t* ths = get_mrchat_t(env, cls); if( ths == NULL ) { return JSTRING_NEW(NULL); }
mrchat_t* ths = get_mrchat_t(env, obj); if( ths == NULL ) { return JSTRING_NEW(NULL); }
return JSTRING_NEW(ths->m_name);
}
JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getSubtitle(JNIEnv *env, jclass cls)
JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getSubtitle(JNIEnv *env, jobject obj)
{
const char* temp = mrchat_get_subtitle(get_mrchat_t(env, cls));
const char* temp = mrchat_get_subtitle(get_mrchat_t(env, obj));
jstring ret = JSTRING_NEW(temp);
free(temp);
return ret;
}
JNIEXPORT jint Java_com_b44t_messenger_MrChat_getParam(JNIEnv *env, jclass cls, jint key, jstring def)
JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getProfileImage(JNIEnv *env, jobject obj)
{
mrchat_t* ths = get_mrchat_t(env, cls);
jstring ret = NULL;
CHAR_REF(def);
char* temp = mrparam_get(ths? ths->m_param:NULL, key, defPtr);
if( temp ) {
ret = JSTRING_NEW(temp);
free(temp);
}
CHAR_UNREF(def);
return ret; /* returns NULL only if key is unset and "def" is NULL */
const char* temp = mrchat_get_profile_image(get_mrchat_t(env, obj));
jstring ret = JSTRING_NEW(temp);
free(temp);
return ret;
}
JNIEXPORT jint Java_com_b44t_messenger_MrChat_getParamInt(JNIEnv *env, jclass cls, jint key, jint def)
JNIEXPORT jboolean Java_com_b44t_messenger_MrChat_isUnpromoted(JNIEnv *env, jobject obj)
{
mrchat_t* ths = get_mrchat_t(env, cls);
return mrparam_get_int(ths? ths->m_param:NULL, key, def);
return mrchat_is_unpromoted(get_mrchat_t(env, obj)) != 0;
}
JNIEXPORT jboolean Java_com_b44t_messenger_MrChat_isSelfTalk(JNIEnv *env, jobject obj)
{
return mrchat_is_self_talk(get_mrchat_t(env, obj)) != 0;
}
@@ -807,8 +827,8 @@ JNIEXPORT jint Java_com_b44t_messenger_MrChat_MrChatSetDraft(JNIEnv *env, jclass
JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getChatMedia(JNIEnv *env, jclass cls, jint chat_id, jint msg_type, jint or_msg_type)
{
carray* ca = mrmailbox_get_chat_media(get_mrmailbox_t(env, cls), chat_id, msg_type, or_msg_type);
return carray2jintArray_n_carray_free(env, ca);
mrarray_t* ca = mrmailbox_get_chat_media(get_mrmailbox_t(env, cls), chat_id, msg_type, or_msg_type);
return mrarray2jintArray_n_mrarray_unref(env, ca);
}
@@ -820,31 +840,31 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_getNextMedia(JNIEnv *env, jclas
JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getChatMsgs(JNIEnv *env, jclass cls, jint chat_id, jint flags, jint marker1before)
{
carray* ca = mrmailbox_get_chat_msgs(get_mrmailbox_t(env, cls), chat_id, flags, marker1before);
return carray2jintArray_n_carray_free(env, ca);
mrarray_t* ca = mrmailbox_get_chat_msgs(get_mrmailbox_t(env, cls), chat_id, flags, marker1before);
return mrarray2jintArray_n_mrarray_unref(env, ca);
}
JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_searchMsgs(JNIEnv *env, jclass cls, jint chat_id, jstring query)
{
CHAR_REF(query);
carray* ca = mrmailbox_search_msgs(get_mrmailbox_t(env, cls), chat_id, queryPtr);
mrarray_t* ca = mrmailbox_search_msgs(get_mrmailbox_t(env, cls), chat_id, queryPtr);
CHAR_UNREF(query);
return carray2jintArray_n_carray_free(env, ca);
return mrarray2jintArray_n_mrarray_unref(env, ca);
}
JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getFreshMsgs(JNIEnv *env, jclass cls)
{
carray* ca = mrmailbox_get_fresh_msgs(get_mrmailbox_t(env, cls));
return carray2jintArray_n_carray_free(env, ca);
mrarray_t* ca = mrmailbox_get_fresh_msgs(get_mrmailbox_t(env, cls));
return mrarray2jintArray_n_mrarray_unref(env, ca);
}
JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getChatContacts(JNIEnv *env, jclass cls, jint chat_id)
{
carray* ca = mrmailbox_get_chat_contacts(get_mrmailbox_t(env, cls), chat_id);
return carray2jintArray_n_carray_free(env, ca);
mrarray_t* ca = mrmailbox_get_chat_contacts(get_mrmailbox_t(env, cls), chat_id);
return mrarray2jintArray_n_mrarray_unref(env, ca);
}
@@ -929,53 +949,35 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMsg_MrMsgGetToId(JNIEnv *env, jclass c,
}
JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getParam(JNIEnv *env, jobject obj, jint key, jstring def)
JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getWidth(JNIEnv *env, jobject obj, jint def)
{
mrmsg_t* ths = get_mrmsg_t(env, obj);
jstring ret = NULL;
CHAR_REF(def);
char* temp = mrparam_get(ths? ths->m_param:NULL, key, defPtr);
if( temp ) {
ret = JSTRING_NEW(temp);
free(temp);
}
CHAR_UNREF(def);
return ret;
jint ret = (jint)mrmsg_get_width(get_mrmsg_t(env, obj));
return ret? ret : def;
}
JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getParamInt(JNIEnv *env, jobject obj, jint key, jint def)
JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getHeight(JNIEnv *env, jobject obj, jint def)
{
mrmsg_t* ths = get_mrmsg_t(env, obj);
return mrparam_get_int(ths? ths->m_param:NULL, key, def);
jint ret = (jint)mrmsg_get_height(get_mrmsg_t(env, obj));
return ret? ret : def;
}
JNIEXPORT void Java_com_b44t_messenger_MrMsg_setParamInt(JNIEnv *env, jobject obj, jint key, jint value)
JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getDuration(JNIEnv *env, jobject obj)
{
mrmsg_t* ths = get_mrmsg_t(env, obj);
mrparam_set_int(ths? ths->m_param:NULL, key, value);
return mrmsg_get_duration(get_mrmsg_t(env, obj));
}
JNIEXPORT void Java_com_b44t_messenger_MrMsg_saveParamToDisk(JNIEnv *env, jobject obj)
JNIEXPORT void Java_com_b44t_messenger_MrMsg_lateFilingMediaSize(JNIEnv *env, jobject obj, jint width, jint height, jint duration)
{
mrmsg_save_param_to_disk(get_mrmsg_t(env, obj));
mrmsg_latefiling_mediasize(get_mrmsg_t(env, obj), width, height, duration);
}
JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getBytes(JNIEnv *env, jobject obj)
{
jint ret = 0;
mrmsg_t* ths = get_mrmsg_t(env, obj);
if( ths ) {
const char* file = mrparam_get(ths->m_param, 'f', NULL);
if( file ) {
ret = mr_get_filebytes(file);
free(file);
}
}
return ret;
return (jint)mrmsg_get_filebytes(get_mrmsg_t(env, obj));
}
@@ -985,21 +987,45 @@ JNIEXPORT jlong Java_com_b44t_messenger_MrMsg_getSummaryCPtr(JNIEnv *env, jobjec
}
JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getSummarytext(JNIEnv *env, jobject obj, jint approx_characters)
JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getSummarytext(JNIEnv *env, jobject obj, jint approx_characters)
{
return JSTRING_NEW(mrmsg_get_summarytext(get_mrmsg_t(env, obj), approx_characters));
char* temp = mrmsg_get_summarytext(get_mrmsg_t(env, obj), approx_characters);
jstring ret = JSTRING_NEW(temp);
free(temp);
return ret;
}
JNIEXPORT jint Java_com_b44t_messenger_MrMsg_showPadlock(JNIEnv *env, jobject obj)
{
return mrmsg_show_padlock(get_mrmsg_t(env, obj));
return mrmsg_get_showpadlock(get_mrmsg_t(env, obj));
}
JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getFilename(JNIEnv *env, jobject obj)
JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getFile(JNIEnv *env, jobject obj)
{
return JSTRING_NEW(mrmsg_get_filename(get_mrmsg_t(env, obj)));
char* temp = mrmsg_get_file(get_mrmsg_t(env, obj));
jstring ret = JSTRING_NEW(temp);
free(temp);
return ret;
}
JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getFilemime(JNIEnv *env, jobject obj)
{
char* temp = mrmsg_get_filemime(get_mrmsg_t(env, obj));
jstring ret = JSTRING_NEW(temp);
free(temp);
return ret;
}
JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getFilename(JNIEnv *env, jobject obj)
{
char* temp = mrmsg_get_filename(get_mrmsg_t(env, obj));
jstring ret = JSTRING_NEW(temp);
free(temp);
return ret;
}
@@ -1009,12 +1035,40 @@ JNIEXPORT jlong Java_com_b44t_messenger_MrMsg_getMediainfoCPtr(JNIEnv *env, jobj
}
JNIEXPORT jint Java_com_b44t_messenger_MrMsg_isIncreation(JNIEnv *env, jobject obj)
JNIEXPORT jboolean Java_com_b44t_messenger_MrMsg_isForwarded(JNIEnv *env, jobject obj)
{
return (jint)mrmsg_is_increation(get_mrmsg_t(env, obj));
return mrmsg_is_forwarded(get_mrmsg_t(env, obj)) != 0;
}
JNIEXPORT jboolean Java_com_b44t_messenger_MrMsg_isIncreation(JNIEnv *env, jobject obj)
{
return mrmsg_is_increation(get_mrmsg_t(env, obj)) != 0;
}
JNIEXPORT jboolean Java_com_b44t_messenger_MrMsg_isSystemcmd(JNIEnv *env, jobject obj)
{
return mrmsg_is_systemcmd(get_mrmsg_t(env, obj)) != 0;
}
JNIEXPORT jboolean Java_com_b44t_messenger_MrMsg_isSetupMessage(JNIEnv *env, jobject obj)
{
return mrmsg_is_setupmessage(get_mrmsg_t(env, obj));
}
JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getSetupCodeBegin(JNIEnv *env, jobject obj)
{
char* temp = mrmsg_get_setupcodebegin(get_mrmsg_t(env, obj));
jstring ret = JSTRING_NEW(temp);
free(temp);
return ret;
}
/*******************************************************************************
* MrContact
******************************************************************************/
@@ -1040,76 +1094,105 @@ JNIEXPORT void Java_com_b44t_messenger_MrContact_MrContactUnref(JNIEnv *env, jcl
}
JNIEXPORT jstring Java_com_b44t_messenger_MrContact_MrContactGetName(JNIEnv *env, jclass c, jlong hContact)
JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getName(JNIEnv *env, jobject obj)
{
mrcontact_t* ths = (mrcontact_t*)hContact; if( ths == NULL ) { return JSTRING_NEW(NULL); }
return JSTRING_NEW(ths->m_name);
const char* temp = mrcontact_get_name(get_mrcontact_t(env, obj));
jstring ret = JSTRING_NEW(temp);
free(temp);
return ret;
}
JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getAuthName(JNIEnv *env, jclass cls)
JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getDisplayName(JNIEnv *env, jobject obj)
{
mrcontact_t* ths = get_mrcontact_t(env, cls); if( ths == NULL ) { return JSTRING_NEW(NULL); }
return JSTRING_NEW(ths->m_authname);
const char* temp = mrcontact_get_display_name(get_mrcontact_t(env, obj));
jstring ret = JSTRING_NEW(temp);
free(temp);
return ret;
}
JNIEXPORT jstring Java_com_b44t_messenger_MrContact_MrContactGetAddr(JNIEnv *env, jclass c, jlong hContact)
JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getAddr(JNIEnv *env, jobject obj)
{
mrcontact_t* ths = (mrcontact_t*)hContact; if( ths == NULL ) { return JSTRING_NEW(NULL); }
return JSTRING_NEW(ths->m_addr);
const char* temp = mrcontact_get_addr(get_mrcontact_t(env, obj));
jstring ret = JSTRING_NEW(temp);
free(temp);
return ret;
}
JNIEXPORT jint Java_com_b44t_messenger_MrContact_MrContactIsBlocked(JNIEnv *env, jclass c, jlong hContact)
JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getNameNAddr(JNIEnv *env, jobject obj)
{
mrcontact_t* ths = (mrcontact_t*)hContact; if( ths == NULL ) { return 0; }
return (jint)ths->m_blocked;
const char* temp = mrcontact_get_name_n_addr(get_mrcontact_t(env, obj));
jstring ret = JSTRING_NEW(temp);
free(temp);
return ret;
}
JNIEXPORT jboolean Java_com_b44t_messenger_MrContact_isBlocked(JNIEnv *env, jobject obj)
{
mrcontact_t* ths = get_mrcontact_t(env, obj); if( ths == NULL ) { return 0; }
return (jboolean)(ths->m_blocked != 0);
}
/*******************************************************************************
* MrPoortext
* MrLot
******************************************************************************/
JNIEXPORT void Java_com_b44t_messenger_MrPoortext_MrPoortextUnref(JNIEnv *env, jclass c, jlong hPoortext)
static mrlot_t* get_mrlot_t(JNIEnv *env, jobject obj)
{
mrpoortext_unref((mrpoortext_t*)hPoortext);
static jfieldID fid = 0;
if( fid == 0 ) {
jclass cls = (*env)->GetObjectClass(env, obj);
fid = (*env)->GetFieldID(env, cls, "m_hLot", "J" /*Signature, J=long*/);
}
if( fid ) {
return (mrlot_t*)(*env)->GetLongField(env, obj, fid);
}
return NULL;
}
JNIEXPORT jstring Java_com_b44t_messenger_MrPoortext_MrPoortextGetText1(JNIEnv *env, jclass c, jlong hPoortext)
JNIEXPORT void Java_com_b44t_messenger_MrLot_unref(JNIEnv *env, jclass cls, jlong hLot)
{
mrpoortext_t* ths = (mrpoortext_t*)hPoortext; if( ths == NULL ) { return JSTRING_NEW(NULL); }
mrlot_unref((mrlot_t*)hLot);
}
JNIEXPORT jstring Java_com_b44t_messenger_MrLot_getText1(JNIEnv *env, jobject obj)
{
mrlot_t* ths = get_mrlot_t(env, obj); if( ths == NULL ) { return JSTRING_NEW(NULL); }
return JSTRING_NEW(ths->m_text1);
}
JNIEXPORT jint Java_com_b44t_messenger_MrPoortext_MrPoortextGetText1Meaning(JNIEnv *env, jclass c, jlong hPoortext)
JNIEXPORT jint Java_com_b44t_messenger_MrLot_getText1Meaning(JNIEnv *env, jobject obj)
{
mrpoortext_t* ths = (mrpoortext_t*)hPoortext; if( ths == NULL ) { return 0; }
mrlot_t* ths = get_mrlot_t(env, obj); if( ths == NULL ) { return 0; }
return ths->m_text1_meaning;
}
JNIEXPORT jstring Java_com_b44t_messenger_MrPoortext_MrPoortextGetText2(JNIEnv *env, jclass c, jlong hPoortext)
JNIEXPORT jstring Java_com_b44t_messenger_MrLot_getText2(JNIEnv *env, jobject obj)
{
mrpoortext_t* ths = (mrpoortext_t*)hPoortext; if( ths == NULL ) { return JSTRING_NEW(NULL); }
mrlot_t* ths = get_mrlot_t(env, obj); if( ths == NULL ) { return JSTRING_NEW(NULL); }
return JSTRING_NEW(ths->m_text2);
}
JNIEXPORT jlong Java_com_b44t_messenger_MrPoortext_MrPoortextGetTimestamp(JNIEnv *env, jclass c, jlong hPoortext)
JNIEXPORT jlong Java_com_b44t_messenger_MrLot_getTimestamp(JNIEnv *env, jobject obj)
{
mrpoortext_t* ths = (mrpoortext_t*)hPoortext; if( ths == NULL ) { return 0; }
mrlot_t* ths = get_mrlot_t(env, obj); if( ths == NULL ) { return 0; }
return ths->m_timestamp;
}
JNIEXPORT jint Java_com_b44t_messenger_MrPoortext_MrPoortextGetState(JNIEnv *env, jclass c, jlong hPoortext)
JNIEXPORT jint Java_com_b44t_messenger_MrLot_getState(JNIEnv *env, jobject obj)
{
mrpoortext_t* ths = (mrpoortext_t*)hPoortext; if( ths == NULL ) { return 0; }
mrlot_t* ths = get_mrlot_t(env, obj); if( ths == NULL ) { return 0; }
return ths->m_state;
}
@@ -307,7 +307,7 @@ public class BaseFragment {
}
try {
visibleDialog = dialog;
visibleDialog.setCanceledOnTouchOutside(true);
//visibleDialog.setCanceledOnTouchOutside(true); -- we do overwrite this from time to time manually, eg. for showing the setup code. so, not all dialogs should be cancelled when touching outside!
visibleDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
@@ -820,8 +820,8 @@ public class AndroidUtilities {
public static void openForViewOrShare(Activity activity, int msg_id, String cmd)
{
MrMsg msg = MrMailbox.getMsg(msg_id);
String path = msg.getParam('f', "");
String mimeType = getMimetype(path, msg.getParam('m', "application/octet-stream"));
String path = msg.getFile();
String mimeType = getMimetype(path, msg.getFilemime());
try {
File file = new File(path);
if( !file.exists() ) {
@@ -892,8 +892,8 @@ public class AndroidUtilities {
MrMsg msg = MrMailbox.getMsg(msg_id);
final int msg_type = msg.getType();
String msg_file_path = msg.getParam('f', "");
final String msg_mime = msg.getParam('m', "application/octet-stream");
String msg_file_path = msg.getFile();
final String msg_mime = msg.getFilemime();
final String msg_file_name = msg.getFilename();
final File sourceFile = new File(msg_file_path);
if( !sourceFile.exists() ) {
@@ -55,7 +55,7 @@ import com.b44t.messenger.MessageObject;
import com.b44t.messenger.MrChat;
import com.b44t.messenger.MrContact;
import com.b44t.messenger.MrMailbox;
import com.b44t.messenger.MrPoortext;
import com.b44t.messenger.MrLot;
import com.b44t.messenger.R;
import com.b44t.messenger.TLRPC;
import com.b44t.messenger.Components.AvatarDrawable;
@@ -75,6 +75,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
public interface ChatMessageCellDelegate {
void didPressedUserAvatar(ChatMessageCell cell, TLRPC.User user);
void didPressedSetupMessage(ChatMessageCell cell);
void didLongPressed(ChatMessageCell cell);
void didPressedUrl(MessageObject messageObject, ClickableSpan url, boolean longPress);
void didPressedImage(ChatMessageCell cell);
@@ -207,6 +208,8 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
private AvatarDrawable avatarDrawable;
private boolean avatarPressed;
private boolean setupmessagePressed;
private boolean drawNewchatButton;
private boolean newchatPressed;
private int newchatStartX;
@@ -658,7 +661,11 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
newchatPressed = true;
result = true;
invalidate();
} else if( currentMessageObject.messageOwner.is_setup_message && currentBackgroundDrawable.getBounds().contains((int)x, (int)y) ) {
setupmessagePressed = true;
result = true;
}
if (result) {
startCheckLongPress();
}
@@ -683,6 +690,18 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
avatarPressed = false;
}
}
} else if(setupmessagePressed) {
if (event.getAction() == MotionEvent.ACTION_UP) {
setupmessagePressed = false;
delegate.didPressedSetupMessage(this);
}
else if(event.getAction() == MotionEvent.ACTION_CANCEL) {
setupmessagePressed = false;
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
if( !currentBackgroundDrawable.getBounds().contains((int)x, (int)y) ) {
setupmessagePressed = false;
}
}
} else if (newchatPressed) {
if (event.getAction() == MotionEvent.ACTION_UP) {
newchatPressed = false;
@@ -1014,7 +1033,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
maxWidth = maxWidth - dp(86);
MrPoortext pt = MrMailbox.getMsg(messageObject.getId()).getMediainfo();
MrLot pt = MrMailbox.getMsg(messageObject.getId()).getMediainfo();
CharSequence stringFinal = TextUtils.ellipsize(pt.getText2(), audioTitlePaint, maxWidth, TextUtils.TruncateAt.MIDDLE);
songLayout = new StaticLayout(stringFinal, audioTitlePaint, maxWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
if (songLayout.getLineCount() > 0) {
@@ -1052,7 +1071,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
int minutes = duration / 60;
int seconds = duration - minutes * 60;
String infoString = String.format("%d:%02d, %s", minutes, seconds, formatFileSize(documentAttach.size));
if( MrMailbox.getMsg(messageObject.getId()).isIncreation()!=0 ) {
if( MrMailbox.getMsg(messageObject.getId()).isIncreation() ) {
infoString = ApplicationLoader.applicationContext.getString(R.string.OneMoment);
}
infoWidth = (int) Math.ceil(infoPaint.measureText(infoString));
@@ -44,9 +44,9 @@ import com.b44t.messenger.ContactsController;
import com.b44t.messenger.EmojiInputView;
import com.b44t.messenger.LocaleController;
import com.b44t.messenger.MrChat;
import com.b44t.messenger.MrLot;
import com.b44t.messenger.MrMailbox;
import com.b44t.messenger.MrMsg;
import com.b44t.messenger.MrPoortext;
import com.b44t.messenger.R;
import com.b44t.messenger.ImageReceiver;
import com.b44t.messenger.ActionBar.Theme;
@@ -121,7 +121,7 @@ public class ChatlistCell extends BaseCell {
private int avatarWH = AndroidUtilities.dp(52);
private MrChat m_mrChat = new MrChat(0);
private MrPoortext m_summary = new MrPoortext(0);
private MrLot m_summary = new MrLot(0);
private boolean m_showUnreadCount;
public ChatlistCell(Context context) {
@@ -163,7 +163,7 @@ public class ChatlistCell extends BaseCell {
avatarImage.setRoundRadius(AndroidUtilities.dp(26));
}
public void setChat(MrChat mrChat, MrPoortext mrSummary, int i, boolean showUnreadCount) {
public void setChat(MrChat mrChat, MrLot mrSummary, int i, boolean showUnreadCount) {
m_mrChat = mrChat;
m_summary = mrSummary;
m_showUnreadCount = showUnreadCount;
@@ -265,8 +265,8 @@ public class ChatlistCell extends BaseCell {
int title_meaning = m_summary.getText1Meaning();
int title_color = Theme.CHATLIST_NAME_TEXT_COLOR;
switch( title_meaning ) {
case MrPoortext.MR_TEXT1_SELF: title_color = Theme.CHATLIST_SELF_TEXT_COLOR; break;
case MrPoortext.MR_TEXT1_DRAFT: title_color = Theme.CHATLIST_DRAFT_TEXT_COLOR; break;
case MrLot.MR_TEXT1_SELF: title_color = Theme.CHATLIST_SELF_TEXT_COLOR; break;
case MrLot.MR_TEXT1_DRAFT: title_color = Theme.CHATLIST_DRAFT_TEXT_COLOR; break;
}
SpannableStringBuilder stringBuilder = SpannableStringBuilder.valueOf(String.format("%s: %s", title, mess));
stringBuilder.setSpan(new ForegroundColorSpan(title_color), 0, title.length() + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
@@ -43,7 +43,9 @@ import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v4.content.FileProvider;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.style.ClickableSpan;
import android.text.style.URLSpan;
import android.util.SparseIntArray;
@@ -455,7 +457,6 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
{
int do_archive = m_mrChat.getArchived()==0? 1: 0;
MrMailbox.archiveChat((int)dialog_id, do_archive);
MrMailbox.MrCallback(MrMailbox.MR_EVENT_MSGS_CHANGED, 0, 0);
AndroidUtilities.showDoneHint(context);
if( do_archive == 1 ) {
finishFragment();
@@ -474,13 +475,9 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
builder.setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if( MrMailbox.deleteChat((int)dialog_id)!=0 ) {
AndroidUtilities.showDoneHint(getParentActivity());
finishFragment();
}
else {
AndroidUtilities.showErrorHint(getParentActivity());
}
MrMailbox.deleteChat((int)dialog_id);
AndroidUtilities.showDoneHint(getParentActivity());
finishFragment();
}
});
builder.setNegativeButton(R.string.Cancel, null);
@@ -853,11 +850,11 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
TextView emptyView = new TextView(context);
if( m_mrChat.getParamInt(MrChat.MRP_UNPROMOTED, 0)==1 ) {
if( m_mrChat.isUnpromoted() ) {
emptyView.setText(context.getString(R.string.MsgNewGroupDraftHint));
emptyView.setGravity(Gravity.START);
}
else if( m_mrChat.getType()==MrChat.MR_CHAT_NORMAL ){
else if( m_mrChat.getType()==MrChat.MR_CHAT_NORMAL && !m_mrChat.isSelfTalk() ){
String name = m_mrChat.getName();
emptyView.setText(AndroidUtilities.replaceTags(String.format(context.getString(R.string.NoMessagesHint), name, name)));
emptyView.setGravity(Gravity.START);
@@ -2672,6 +2669,12 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
}
}
@Override
public void didPressedSetupMessage(ChatMessageCell cell) {
//querySetupCode(cell.getMessageObject().getId(), null);
Toast.makeText(getParentActivity(), ApplicationLoader.applicationContext.getString(R.string.NotYetImplemented), Toast.LENGTH_SHORT).show();
}
@Override
public boolean canPerformActions() {
return actionBar != null && !actionBar.isActionModeShowed();
@@ -2765,7 +2768,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
public void didPressedImage(ChatMessageCell cell) {
MessageObject message = cell.getMessageObject();
if( message.type == MessageObject.MO_TYPE3_VIDEO && MrMailbox.getMsg(message.getId()).isIncreation()!=0 ) {
if( message.type == MessageObject.MO_TYPE3_VIDEO && MrMailbox.getMsg(message.getId()).isIncreation() ) {
return; // we're not ready (still compressing), a hint is already shown in the message itself
}
@@ -2910,4 +2913,80 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
}
}
}
void querySetupCode(final int msg_id, String[] preload)
{
if( !MrMailbox.getMsg(msg_id).isSetupMessage()) {
return;
}
View gl = View.inflate(getParentActivity(), R.layout.setup_code_grid, null);
final EditText[] editTexts = {
(EditText) gl.findViewById(R.id.setupCode0), (EditText) gl.findViewById(R.id.setupCode1), (EditText) gl.findViewById(R.id.setupCode2),
(EditText) gl.findViewById(R.id.setupCode3), (EditText) gl.findViewById(R.id.setupCode4), (EditText) gl.findViewById(R.id.setupCode5),
(EditText) gl.findViewById(R.id.setupCode6), (EditText) gl.findViewById(R.id.setupCode7), (EditText) gl.findViewById(R.id.setupCode8)
};
AlertDialog.Builder builder1 = new AlertDialog.Builder(getParentActivity());
builder1.setView(gl);
editTexts[0].setText(MrMailbox.getMsg(msg_id).getSetupCodeBegin());
editTexts[0].setSelection(editTexts[0].getText().length());
for( int i = 0; i < 9; i++ ) {
if( preload != null && i < preload.length ) {
editTexts[i].setText(preload[i]);
editTexts[i].setSelection(editTexts[i].getText().length());
}
editTexts[i].addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if( s.length()==4 ) {
for ( int i = 0; i < 8; i++ ) {
if( editTexts[i].hasFocus() && editTexts[i+1].getText().length()<4 ) {
editTexts[i+1].requestFocus();
break;
}
}
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
builder1.setTitle(ApplicationLoader.applicationContext.getString(R.string.AutocryptKeyTransfer));
builder1.setMessage(AndroidUtilities.replaceTags(ApplicationLoader.applicationContext.getString(R.string.AutocryptKeyTransferPleaseEnterCode)));
builder1.setNegativeButton(R.string.Cancel, null);
builder1.setCancelable(false); // prevent the dialog from being dismissed accidentally (when the dialog is closed, the setup code is gone forever and the user has to create a new setup message)
builder1.setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String setup_code = "";
final String[] preload = new String[9];
for ( int i = 0; i < 9; i++ ) {
preload[i] = editTexts[i].getText().toString();
setup_code += preload[i];
}
boolean success = MrMailbox.continueKeyTransfer(msg_id, setup_code);
AlertDialog.Builder builder2 = new AlertDialog.Builder(getParentActivity());
builder2.setTitle(ApplicationLoader.applicationContext.getString(R.string.AutocryptKeyTransfer));
builder2.setMessage(AndroidUtilities.replaceTags(ApplicationLoader.applicationContext.getString(success? R.string.AutocryptKeyTransferSucceeded : R.string.AutocryptKeyTransferBadCode)));
builder2.setNegativeButton(R.string.Cancel, null);
builder2.setPositiveButton(R.string.Retry, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
querySetupCode(msg_id, preload);
}
});
showDialog(builder2.create());
}
});
showDialog(builder1.create());
}
}
@@ -477,7 +477,6 @@ public class ChatlistActivity extends BaseFragment implements NotificationCenter
public void onClick(DialogInterface dialogInterface, int clickedEntry) {
if( clickedEntry==0 ) {
MrMailbox.archiveChat(mrChat.getId(), mrChat.getArchived() == 0 ? 1 : 0);
MrMailbox.MrCallback(MrMailbox.MR_EVENT_MSGS_CHANGED, 0, 0);
AndroidUtilities.showDoneHint(context);
}
else if( clickedEntry==1 ) {
@@ -486,13 +485,8 @@ public class ChatlistActivity extends BaseFragment implements NotificationCenter
builder.setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if( MrMailbox.deleteChat(mrChat.getId())!=0 ) {
MrMailbox.MrCallback(MrMailbox.MR_EVENT_MSGS_CHANGED, 0, 0);
AndroidUtilities.showDoneHint(context);
}
else {
AndroidUtilities.showErrorHint(context);
}
MrMailbox.deleteChat(mrChat.getId());
AndroidUtilities.showDoneHint(context);
}
});
builder.setNegativeButton(R.string.Cancel, null);
@@ -975,7 +969,7 @@ public class ChatlistActivity extends BaseFragment implements NotificationCenter
cell.useSeparator = (i != getItemCount() - 1);
MrChat mrChat = getChatByIndex(i);
MrPoortext mrSummary = m_chatlist.getSummaryByIndex(i, mrChat);
MrLot mrSummary = m_chatlist.getSummaryByIndex(i, mrChat);
cell.setChat(mrChat, mrSummary, i, true);
}
}
@@ -1107,7 +1101,7 @@ public class ChatlistActivity extends BaseFragment implements NotificationCenter
cell.useSeparator = (j != m_chatlistCnt - 1);
MrChat mrChat = m_chatlist.getChatByIndex(j);
MrPoortext mrSummary = m_chatlist.getSummaryByIndex(j, mrChat);
MrLot mrSummary = m_chatlist.getSummaryByIndex(j, mrChat);
cell.setChat(mrChat, mrSummary, -1,
true /*always show unread count*/);
@@ -1123,7 +1117,7 @@ public class ChatlistActivity extends BaseFragment implements NotificationCenter
MrMsg mrMsg = MrMailbox.getMsg(m_msgIds[j]);
MrChat mrChat = MrMailbox.getChat(mrMsg.getChatId());
MrPoortext mrSummary = mrMsg.getSummary(mrChat);
MrLot mrSummary = mrMsg.getSummary(mrChat);
cell.setChat(mrChat, mrSummary, -1,
mrMsg.getState()==MrMsg.MR_IN_FRESH /*show unread count only if the message itself is unread*/ );
@@ -182,7 +182,7 @@ public class ContactsController {
}
}
else if( chatType == MrChat.MR_CHAT_GROUP ) {
tempPath = mrChat.getParam(MrChat.MRP_PROFILE_IMAGE, "");
tempPath = mrChat.getProfileImage();
}
}
@@ -54,10 +54,9 @@ public class MrChat {
public native String getName();
public native String getSubtitle();
public static int MRP_UNPROMOTED = 'U';
public static int MRP_PROFILE_IMAGE = 'i';
public native String getParam(int key, String def);
public native int getParamInt(int key, int def);
public native String getProfileImage();
public native boolean isUnpromoted();
public native boolean isSelfTalk();
public String getDraft() {
return MrChatGetDraft(m_hChat);
@@ -50,8 +50,8 @@ public class MrChatlist {
return new MrMsg(MrChatlistGetMsgByIndex(m_hChatlist, index));
}
public MrPoortext getSummaryByIndex(int index, MrChat chat) {
return new MrPoortext(MrChatlistGetSummaryByIndex(m_hChatlist, index, chat.getCPtr()));
public MrLot getSummaryByIndex(int index, MrChat chat) {
return new MrLot(MrChatlistGetSummaryByIndex(m_hChatlist, index, chat.getCPtr()));
}
private long m_hChatlist;
@@ -42,52 +42,12 @@ public class MrContact {
MrContactUnref(m_hContact);
}
public String getName() {
return MrContactGetName(m_hContact);
}
public native String getAuthName();
public String getAddr() {
return MrContactGetAddr(m_hContact);
}
public int isBlocked() {
return MrContactIsBlocked(m_hContact);
}
public native String getName();
public native String getDisplayName();
public native String getAddr();
public native String getNameNAddr();
public native boolean isBlocked();
private long m_hContact;
private native static void MrContactUnref (long hContact);
private native static String MrContactGetName (long hContact);
private native static String MrContactGetAddr (long hContact);
private native static int MrContactIsBlocked (long hContact);
/* additional functions that are not 1:1 available in the backend
**********************************************************************************************/
public static TLRPC.User contactId2user(int id)
{
TLRPC.User ret = new TLRPC.User();
ret.id = id;
return ret;
}
public String getDisplayName() {
String s=MrContactGetName(m_hContact);
if(s.isEmpty()) {
s=MrContactGetAddr(m_hContact);
}
return s;
}
public String getNameNAddr() {
String s=MrContactGetName(m_hContact);
if(s.isEmpty()) {
s=MrContactGetAddr(m_hContact);
}
else {
s+=" ("+MrContactGetAddr(m_hContact)+")";
}
return s;
}
}
@@ -19,7 +19,7 @@
*
*******************************************************************************
*
* File: MrPoortext.java
* File: MrLot.java
* Purpose: Wrap around mrpoortext_t
*
******************************************************************************/
@@ -28,47 +28,27 @@
package com.b44t.messenger;
public class MrPoortext {
public class MrLot {
public final static int MR_TEXT1_NORMAL = 0;
public final static int MR_TEXT1_DRAFT = 1;
public final static int MR_TEXT1_USERNAME = 2;
public final static int MR_TEXT1_SELF = 3;
public MrPoortext(long hPoortext) {
m_hPoortext = hPoortext;
public MrLot(long hLot) {
m_hLot = hLot;
}
@Override protected void finalize() throws Throwable {
super.finalize();
MrPoortextUnref(m_hPoortext);
MrLotUnref(m_hLot);
}
public String getText1() {
return MrPoortextGetText1(m_hPoortext);
}
public native String getText1();
public native int getText1Meaning();
public native String getText2();
public native long getTimestamp();
public native int getState();
public int getText1Meaning() {
return MrPoortextGetText1Meaning(m_hPoortext);
}
public String getText2() {
return MrPoortextGetText2(m_hPoortext);
}
public long getTimestamp() {
return MrPoortextGetTimestamp(m_hPoortext);
}
public int getState() {
return MrPoortextGetState(m_hPoortext);
}
private long m_hPoortext;
private native static void MrPoortextUnref (long hPoortext);
private native static String MrPoortextGetText1 (long hPoortext);
private native static int MrPoortextGetText1Meaning (long hPoortext);
private native static String MrPoortextGetText2 (long hPoortext);
private native static long MrPoortextGetTimestamp (long hPoortext);
private native static int MrPoortextGetState (long hPoortext);
private long m_hLot;
private native static void MrLotUnref(long hLot);
}
@@ -52,7 +52,7 @@ public class MrMailbox {
public native static String getBlobdir();
public native static int configureAndConnect();
public native static void configureCancel();
public native static void stopOngoingProcess();
public native static int isConfigured();
@@ -67,11 +67,13 @@ public class MrMailbox {
public native static String getInfo();
public native static String cmdline(String cmd);
public native static String initiateKeyTransfer();
public native static boolean continueKeyTransfer(int msg_id, String setup_code);
public final static int MR_IMEX_EXPORT_SELF_KEYS = 1;
public final static int MR_IMEX_IMPORT_SELF_KEYS = 2;
public final static int MR_IMEX_EXPORT_BACKUP = 11;
public final static int MR_IMEX_IMPORT_BACKUP = 12;
public native static void imex(int what, String dir);
public native static int imex(int what, String dir);
public native static String imexHasBackup(String dir);
public native static int checkPassword(String pw);
@@ -138,7 +140,7 @@ public class MrMailbox {
public native static int addContactToChat (int chat_id, int contact_id);
public native static int removeContactFromChat (int chat_id, int contact_id);
public native static int setChatName (int chat_id, String name);
public native static int setChatImage (int chat_id, String name);
public native static int setChatProfileImage (int chat_id, String name);
public final static int MR_GCM_ADDDAYMARKER = 0x01;
public native static int[] getChatMsgs(int chat_id, int flags, int marker1before);
@@ -150,7 +152,7 @@ public class MrMailbox {
public native static int[] getChatMedia(int chat_id, int msg_type, int or_msg_type);
public native static int getNextMedia(int msg_id, int dir);
public native static int[] getChatContacts(int chat_id);
public native static int deleteChat(int chat_id);
public native static void deleteChat(int chat_id);
private native static long MrMailboxGetChatlist (long hMailbox, int listflags, String query); // returns hChatlist which must be unref'd after usage
private native static long MrMailboxGetChat (long hMailbox, int chat_id); // return hChat which must be unref'd after usage
@@ -171,6 +173,7 @@ public class MrMailbox {
public native static void forwardMsgs(int msg_ids[], int chat_ids);
public native static int sendTextMsg(int chat_id, String text);
public native static int sendVcardMsg(int chat_id, int contact_id);
public native static int sendMediaMsg(int chat_id, int type, String file, String mime, int w, int h, int time_ms, String author, String trackname);
private native static long MrMailboxGetMsg (long hMailbox, int id); // return hMsg which must be unref'd after usage
@@ -199,7 +202,6 @@ public class MrMailbox {
public final static int MR_EVENT_CONFIGURE_PROGRESS = 2041;
public final static int MR_EVENT_IMEX_ENDED = 2050;
public final static int MR_EVENT_IMEX_PROGRESS = 2051;
public final static int MR_EVENT_IMEX_FILE_WRITTEN = 2052;
@@ -227,15 +229,6 @@ public class MrMailbox {
});
return 0;
case MR_EVENT_IMEX_ENDED:
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public void run() {
NotificationCenter.getInstance().postNotificationName(NotificationCenter.imexEnded, (int)data1);
}
});
return 0;
case MR_EVENT_IMEX_PROGRESS:
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
@@ -333,7 +326,7 @@ public class MrMailbox {
return 0;
case MR_EVENT_GET_STRING:
String s = "ErrStrBadId";
String s;
switch( (int)data1 ) {
// the string-IDs are defined in the backend; as this is the only place where they're used, there is no benefit in creating an enum or sth. like that.
case 1: s = ApplicationLoader.applicationContext.getString(R.string.NoMessages); break;
@@ -369,6 +362,10 @@ public class MrMailbox {
case 36: s = "<c#808080>"+ApplicationLoader.applicationContext.getString(R.string.E2eeOffBecauseOfUser)+"</c>"; break;
case 37: s = "<c#808080>"+ApplicationLoader.applicationContext.getString(R.string.E2eeOffBecauseOfRecipient)+"</c>"; break;
case 40: s = ApplicationLoader.applicationContext.getString(R.string.ArchivedChats); break;
case 42: s = ApplicationLoader.applicationContext.getString(R.string.AutocryptSetupMessageSubject); break;
case 43: s = ApplicationLoader.applicationContext.getString(R.string.AutocryptSetupMessageGeneralBody); break;
case 50: s = ApplicationLoader.applicationContext.getString(R.string.SelfTalkSubtitle); break;
default: s = null; break;
}
return String2CPtr(s);
@@ -95,20 +95,26 @@ public class MrMsg {
return MrMsgGetToId(m_hMsg);
}
public native String getParam(int key, String def);
public native int getParamInt(int key, int def);
public native void setParamInt(int key, int def);
public native void saveParamToDisk();
public native int getWidth(int def);
public native int getHeight(int def);
public native int getDuration();
public native void lateFilingMediaSize(int width, int height, int duration);
public native int getBytes();
public MrPoortext getSummary(MrChat chat) { return new MrPoortext(getSummaryCPtr(chat.getCPtr())); }
public MrLot getSummary(MrChat chat) { return new MrLot(getSummaryCPtr(chat.getCPtr())); }
private native long getSummaryCPtr(long hChat);
public native String getSummarytext(int approx_characters);
public native int showPadlock();
public MrPoortext getMediainfo() { return new MrPoortext(getMediainfoCPtr()); }
public MrLot getMediainfo() { return new MrLot(getMediainfoCPtr()); }
private native long getMediainfoCPtr();
public native String getFile();
public native String getFilemime();
public native String getFilename();
public native int isIncreation();
public native boolean isForwarded();
public native boolean isSystemcmd();
public native boolean isSetupMessage();
public native String getSetupCodeBegin();
public native boolean isIncreation();
private long m_hMsg; // must not be renamed as referenced by JNI under the name "m_hMsg"
private native static void MrMsgUnref (long hMsg);
@@ -152,19 +158,24 @@ public class MrMsg {
ret.out = ret.from_id==MrContact.MR_CONTACT_ID_SELF; // true=outgoing message, read eg. in MessageObject.isOutOwner()
ret.created_by_mr = true;
ret.show_padlock = showPadlock()!=0;
ret.is_system_cmd = getParamInt('S', 0)!=0;
ret.is_system_cmd = isSystemcmd();
ret.is_setup_message = isSetupMessage();
if( type == MR_MSG_TEXT ) {
ret.message = getText();
}
else if( type == MR_MSG_FILE && isSetupMessage() )
{
ret.message = ApplicationLoader.applicationContext.getString(R.string.AutocryptSetupMessageTapBody);
}
else if( type == MR_MSG_IMAGE ) {
String path = getParam('f', "");
String path = getFile();
TLRPC.TL_photo photo = null;
if( !path.isEmpty() ) {
try {
TLRPC.TL_photoSize photoSize = new TLRPC.TL_photoSize();
photoSize.w = getParamInt('w', 800);
photoSize.h = getParamInt('h', 800);
photoSize.w = getWidth(800);
photoSize.h = getHeight(800);
photoSize.size = 0; // not sure what to use here, maybe `getBytes();`?
photoSize.location = new TLRPC.TL_fileLocation();
photoSize.location.mr_path = path;
@@ -198,7 +209,7 @@ public class MrMsg {
}
}
else if( type == MR_MSG_GIF || type == MR_MSG_AUDIO || type == MR_MSG_VOICE || type == MR_MSG_VIDEO || type == MR_MSG_FILE ) {
String path = getParam('f', "");
String path = getFile();
if( !path.isEmpty()) {
ret.message = "-1"; // may be misused for video editing information
ret.media = new TLRPC.TL_messageMediaDocument();
@@ -208,20 +219,20 @@ public class MrMsg {
ret.media.document.mr_path = path;
ret.media.document.size = getBytes();
if( type == MR_MSG_GIF ) {
ret.media.document.mime_type = getParam('m', "image/gif");
ret.media.document.mime_type = getFilemime();
TLRPC.PhotoSize size = new TLRPC.PhotoSize();
size.location = new TLRPC.TL_fileLocation();
size.location.mr_path = path;
size.location.local_id = -ret.id;
size.w = getParamInt('w', 320);
size.h = getParamInt('h', 240);
size.w = getWidth(320);
size.h = getHeight(240);
size.type = "s";
ret.media.document.thumb = size;
}
else if( type == MR_MSG_AUDIO || type == MR_MSG_VOICE ) {
TLRPC.TL_documentAttributeAudio attr = new TLRPC.TL_documentAttributeAudio();
attr.voice = type == MR_MSG_VOICE;
attr.duration = getParamInt('d', 0) / 1000;
attr.duration = getDuration() / 1000;
ret.media.document.attributes.add(attr);
}
else if( type == MR_MSG_VIDEO ) {
@@ -235,9 +246,7 @@ public class MrMsg {
size.type = "s";
ret.media.document.thumb = size;
setParamInt('w', size.w);
setParamInt('h', size.h);
saveParamToDisk();
lateFilingMediaSize(size.w, size.h, 0);
}
catch (Exception e) {}
}
@@ -246,20 +255,20 @@ public class MrMsg {
size.location = new TLRPC.TL_fileLocation();
size.location.mr_path = tfile.getAbsolutePath();
size.location.local_id = -ret.id;
size.w = getParamInt('w', 320);
size.h = getParamInt('h', 240);
size.w = getWidth(320);
size.h = getHeight(240);
size.type = "s";
ret.media.document.thumb = size;
}
TLRPC.TL_documentAttributeVideo attr = new TLRPC.TL_documentAttributeVideo();
attr.duration = getParamInt('d', 0) / 1000;
attr.w = getParamInt('w', 320);
attr.h = getParamInt('h', 240);
attr.duration = getDuration() / 1000;
attr.w = getWidth(320);
attr.h = getHeight(240);
ret.media.document.attributes.add(attr);
}
else {
ret.media.document.mime_type = getParam('m', "application/octet-stream");
ret.media.document.mime_type = getFilemime();
}
}
@@ -271,7 +280,7 @@ public class MrMsg {
ret.message = String.format("<unsupported message type #%d for id #%d>", type, ret.id);
}
if( !getParam('a', "").equals("") ) {
if( isForwarded() ) {
ret.flags |= TLRPC.MESSAGE_FLAG_FWD;
}
@@ -110,7 +110,7 @@ public class MusicPlayerService extends Service implements NotificationCenter.No
{
AudioInfo audioInfo = MediaController.getInstance().getAudioInfo();
MrPoortext pt = MrMailbox.getMsg(messageObject.getId()).getMediainfo();
MrLot pt = MrMailbox.getMsg(messageObject.getId()).getMediainfo();
String authorName = pt.getText1();
String songName = pt.getText2();
if( songName == null || songName.length()==0 ) {
@@ -168,7 +168,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
String nameonly = big.location.volume_id + "_" + big.location.local_id + ".jpg";
File fileobj = new File(FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE), nameonly);
String fullpath = fileobj.getAbsolutePath();
MrMailbox.setChatImage(chat_id, fullpath);
MrMailbox.setChatProfileImage(chat_id, fullpath);
}
}
};
@@ -515,7 +515,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
// show menu to change the group image
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
CharSequence[] items;
boolean hasPhoto = MrMailbox.getChat(chat_id).getParam(MrChat.MRP_PROFILE_IMAGE, null)!=null;
boolean hasPhoto = MrMailbox.getChat(chat_id).getProfileImage()!=null;
if ( !hasPhoto ) {
items = new CharSequence[]{context.getString(R.string.FromCamera), context.getString(R.string.FromGalley)};
} else {
@@ -536,7 +536,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
builder.setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if( MrMailbox.setChatImage(chat_id, null)!=0 ) {
if( MrMailbox.setChatProfileImage(chat_id, null)!=0 ) {
AndroidUtilities.showDoneHint(getParentActivity());
}
}
@@ -841,7 +841,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
settingsNotificationsRow = rowCount++;
}
if( user_id!=0 || chat_id!=MrChat.MR_CHAT_ID_DEADDROP) {
if( (user_id!=0 && user_id!=MrContact.MR_CONTACT_ID_SELF) || (chat_id!=0 && chat_id!=MrChat.MR_CHAT_ID_DEADDROP)) {
changeNameRow = rowCount++;
}
@@ -870,7 +870,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
boolean blocked = false;
if( user_id!=0 ) {
MrContact mrContact = MrMailbox.getContact(user_id);
blocked = mrContact.isBlocked()!=0;
blocked = mrContact.isBlocked();
}
return blocked;
}
@@ -889,9 +889,6 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
mrContact = MrMailbox.getContact(user_id);
newString = mrContact.getDisplayName();
newString2 = mrContact.getAddr();
/*if( !newString.equals(mrContact.getAuthName()) ) { -- not sure if it is really useful to display the auth-name here
newString += " (" + mrContact.getAuthName() + ")";
}*/
}
else {
mrChat = MrMailbox.getChat(chat_id);
@@ -921,6 +918,9 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
if (user_id != 0) {
item.addSubItem(ID_COPY_EMAIL_TO_CLIPBOARD, ApplicationLoader.applicationContext.getString(R.string.CopyToClipboard), 0);
}
if( user_id != 0 && user_id != MrContact.MR_CONTACT_ID_SELF ) {
item.addSubItem(ID_BLOCK_CONTACT, userBlocked()? ApplicationLoader.applicationContext.getString(R.string.UnblockContact) : ApplicationLoader.applicationContext.getString(R.string.BlockContact), 0);
item.addSubItem(ID_DELETE_CONTACT, ApplicationLoader.applicationContext.getString(R.string.DeleteContact), 0);
}
@@ -99,15 +99,8 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
}
public void sendMessageContact(int contact_id, int dialog_id) {
MrContact contact = MrMailbox.getContact(contact_id);
String msg = contact.getAuthName();
if(msg.isEmpty()) {
msg = contact.getAddr();
}
else {
msg += ": " + contact.getAddr();
}
SendMessagesHelper.getInstance().sendMessageText(msg, dialog_id, null);
int msg_id = MrMailbox.sendVcardMsg(dialog_id, contact_id);
updateInterfaceForNewMessage(dialog_id, true, msg_id);
}
public void sendMessageDocument(TLRPC.TL_document document, VideoEditedInfo videoEditedInfo, String path, long peer, HashMap<String, String> params) {
@@ -132,7 +125,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
else {
NotificationCenter.getInstance().postNotificationName(NotificationCenter.messageSendError, msg_id);
}
NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload);
//NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload); -- already send due to MR_EVENT_MSGS_CHANGED which is send by the core on sending messages
}
private void sendMessage__(String message,
@@ -345,7 +345,7 @@ public class SettingsAccountFragment extends BaseFragment implements Notificatio
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, ApplicationLoader.applicationContext.getString(R.string.Cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MrMailbox.configureCancel();
MrMailbox.stopOngoingProcess();
}
});
progressDialog.show();
@@ -72,6 +72,7 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
private int settingsShadowRow;
private int imexHeaderRow;
private int initiateKeyTransferRow;
private int manageKeysRow;
private int backupRow;
private int backupShadowRow;
@@ -120,6 +121,7 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
settingsShadowRow = rowCount++;
imexHeaderRow = rowCount++;
initiateKeyTransferRow = rowCount++;
manageKeysRow = rowCount++;
backupRow = rowCount++;
backupShadowRow = rowCount++;
@@ -232,6 +234,63 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
{
presentFragment(new SettingsAccountFragment(null));
}
else if(i==initiateKeyTransferRow )
{
AlertDialog.Builder builder1 = new AlertDialog.Builder(getParentActivity());
builder1.setTitle(ApplicationLoader.applicationContext.getString(R.string.AutocryptKeyTransfer));
builder1.setMessage(AndroidUtilities.replaceTags(ApplicationLoader.applicationContext.getString(R.string.AutocryptKeyTransferMsgBeforeSend)));
builder1.setNegativeButton(R.string.Cancel, null);
builder1.setPositiveButton(R.string.AutocryptKeyTransferInitiate, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
progressDialog = new ProgressDialog(getParentActivity());
progressDialog.setMessage(ApplicationLoader.applicationContext.getString(R.string.OneMoment));
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.setCancelable(false);
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, ApplicationLoader.applicationContext.getString(R.string.Cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MrMailbox.stopOngoingProcess();
}
});
progressDialog.show();
Utilities.searchQueue.postRunnable(new Runnable() {
@Override
public void run() {
final String sc = MrMailbox.initiateKeyTransfer();
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public void run() {
if( progressDialog != null ) {
progressDialog.dismiss();
progressDialog = null;
}
if( sc != null ) {
String scFormatted = "";
try {
scFormatted = sc.substring(0, 4) + " - " + sc.substring(5, 9) + " - " + sc.substring(10, 14) + " -\n\n" +
sc.substring(15, 19) + " - " + sc.substring(20, 24) + " - " + sc.substring(25, 29) + " -\n\n" +
sc.substring(30, 34) + " - " + sc.substring(35, 39) + " - " + sc.substring(40, 44);
} catch (Exception e) {
e.printStackTrace();
}
AlertDialog.Builder builder2 = new AlertDialog.Builder(getParentActivity());
builder2.setTitle(ApplicationLoader.applicationContext.getString(R.string.AutocryptKeyTransfer));
builder2.setMessage(AndroidUtilities.replaceTags(String.format(ApplicationLoader.applicationContext.getString(R.string.AutocryptKeyTransferMsgAfterSend), scFormatted)));
builder2.setPositiveButton(R.string.OK, null);
builder2.setCancelable(false); // prevent the dialog from being dismissed accidentally (when the dialog is closed, the setup code is gone forever and the user has to create a new setup message)
showDialog(builder2.create());
}
}
});
}
});
}
});
showDialog(builder1.create());
}
else if(i==manageKeysRow )
{
imexShowMenu(ApplicationLoader.applicationContext.getString(R.string.E2EManagePrivateKeys),
@@ -410,7 +469,7 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, ApplicationLoader.applicationContext.getString(R.string.Cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MrMailbox.imex(0, null);
MrMailbox.stopOngoingProcess();
}
});
progressDialog.show();
@@ -420,7 +479,18 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
MrMailbox.m_lastErrorString = "";
}
MrMailbox.imex(what, imexDir.getAbsolutePath());
Utilities.searchQueue.postRunnable(new Runnable() {
@Override
public void run() {
final int res = MrMailbox.imex(progressWhat, imexDir.getAbsolutePath());
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public void run() {
NotificationCenter.getInstance().postNotificationName(NotificationCenter.imexEnded, (int)res);
}
});
}
});
}
@Override
@@ -535,6 +605,9 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
String cntStr = String.format("%d", MrMailbox.getBlockedCount());
textCell.setTextAndValue(ApplicationLoader.applicationContext.getString(R.string.BlockedContacts), cntStr, true);
}
else if( i==initiateKeyTransferRow ) {
textCell.setText(mContext.getString(R.string.AutocryptKeyTransferInitiate), true);
}
else if( i==manageKeysRow ) {
textCell.setText(mContext.getString(R.string.E2EManagePrivateKeys), true);
}
@@ -258,6 +258,7 @@ public class TLRPC {
public boolean created_by_mr;
public boolean show_padlock;
public boolean is_system_cmd;
public boolean is_setup_message;
}
public static class TL_message extends Message {
@@ -323,7 +323,7 @@ public class WelcomeActivity extends Activity implements NotificationCenter.Noti
}
private ProgressDialog progressDialog = null;
private void startImport(String backupFile)
private void startImport(final String backupFile)
{
if( progressDialog!=null ) {
progressDialog.dismiss();
@@ -337,7 +337,7 @@ public class WelcomeActivity extends Activity implements NotificationCenter.Noti
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, ApplicationLoader.applicationContext.getString(R.string.Cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MrMailbox.imex(0, null);
MrMailbox.stopOngoingProcess();
}
});
progressDialog.show();
@@ -347,7 +347,18 @@ public class WelcomeActivity extends Activity implements NotificationCenter.Noti
MrMailbox.m_lastErrorString = "";
}
MrMailbox.imex(MrMailbox.MR_IMEX_IMPORT_BACKUP, backupFile);
Utilities.searchQueue.postRunnable(new Runnable() {
@Override
public void run() {
final int res = MrMailbox.imex(MrMailbox.MR_IMEX_IMPORT_BACKUP, backupFile);
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public void run() {
NotificationCenter.getInstance().postNotificationName(NotificationCenter.imexEnded, (int)res);
}
});
}
});
}
@Override
@@ -371,6 +382,7 @@ public class WelcomeActivity extends Activity implements NotificationCenter.Noti
}
if( (int)args[0]==1 ) {
MrMailbox.connect(); // import does not automatically connect
startActivity(new Intent(WelcomeActivity.this, LaunchActivity.class));
finish();
}
@@ -0,0 +1,144 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- the FrameLayout is needed as View.inflate() without a root discards all layout_-attributes -->
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="16dp"
android:layout_marginLeft="24dp"
android:layout_marginStart="24dp"
android:layout_marginRight="24dp"
android:layout_marginEnd="24dp"
android:columnCount="6"
android:rowCount="1">
<!-- 1st row -->
<EditText
android:id="@+id/setupCode0"
android:layout_marginBottom="8dp"
android:layout_width="wrap_content"
android:inputType="numberDecimal"
android:maxLength="4"
android:minEms="3"/>
<TextView
android:layout_marginBottom="8dp"
android:text=" - "
android:textAppearance="@style/TextAppearance.AppCompat"/>
<EditText
android:id="@+id/setupCode1"
android:layout_marginBottom="8dp"
android:layout_width="wrap_content"
android:inputType="numberDecimal"
android:maxLength="4"
android:minEms="3"/>
<TextView
android:text=" - "
android:textAppearance="@style/TextAppearance.AppCompat"/>
<EditText
android:id="@+id/setupCode2"
android:layout_marginBottom="8dp"
android:layout_width="wrap_content"
android:inputType="numberDecimal"
android:maxLength="4"
android:minEms="3"/>
<TextView
android:layout_marginBottom="8dp"
android:text=" - "
android:textAppearance="@style/TextAppearance.AppCompat"/>
<!-- 2nd row -->
<EditText
android:id="@+id/setupCode3"
android:layout_marginBottom="8dp"
android:layout_width="wrap_content"
android:inputType="numberDecimal"
android:maxLength="4"
android:minEms="3"/>
<TextView
android:layout_marginBottom="8dp"
android:text=" - "
android:textAppearance="@style/TextAppearance.AppCompat"/>
<EditText
android:id="@+id/setupCode4"
android:layout_marginBottom="8dp"
android:layout_width="wrap_content"
android:inputType="numberDecimal"
android:maxLength="4"
android:minEms="3"/>
<TextView
android:layout_marginBottom="8dp"
android:text=" - "
android:textAppearance="@style/TextAppearance.AppCompat"/>
<EditText
android:id="@+id/setupCode5"
android:layout_marginBottom="8dp"
android:layout_width="wrap_content"
android:inputType="numberDecimal"
android:maxLength="4"
android:minEms="3"/>
<TextView
android:text=" - "
android:textAppearance="@style/TextAppearance.AppCompat"/>
<!-- 3rd row -->
<EditText
android:id="@+id/setupCode6"
android:layout_marginBottom="8dp"
android:layout_width="wrap_content"
android:inputType="numberDecimal"
android:maxLength="4"
android:minEms="3"/>
<TextView
android:text=" - "
android:layout_marginBottom="8dp"
android:textAppearance="@style/TextAppearance.AppCompat"/>
<EditText
android:id="@+id/setupCode7"
android:layout_marginBottom="8dp"
android:layout_width="wrap_content"
android:inputType="numberDecimal"
android:maxLength="4"
android:minEms="3"/>
<TextView
android:text=" - "
android:layout_marginBottom="8dp"
android:textAppearance="@style/TextAppearance.AppCompat"/>
<EditText
android:id="@+id/setupCode8"
android:layout_marginBottom="8dp"
android:layout_width="wrap_content"
android:inputType="numberDecimal"
android:maxLength="4"
android:minEms="3"/>
<TextView
android:text=" "
android:layout_marginBottom="8dp"
android:textAppearance="@style/TextAppearance.AppCompat"/>
</GridLayout>
</FrameLayout>
@@ -169,6 +169,7 @@
<!--permissions-->
<string name="PermissionContacts">Delta Chat necessita accedir als teus contactes perquè puguis connectar amb els teus amics de de qualsevol dels teus dispositius.</string>
<string name="PermissionStorage">Delta Chat necessita accedir al teu emmagatzematge per poder enviar i guardar fotos, vídeos, música i altres continguts audiovisuals.</string>
<string name="PermissionOpenSettings">Preferències</string>
<!--Intro view-->
<string name="Intro1Headline">Delta Chat</string>
<string name="Intro2Headline">Independent</string>
@@ -41,9 +41,9 @@
<string name="From">Von</string>
<string name="NoRecent">Keine aktuellen</string>
<string name="TypeMessage">Nachricht</string>
<string name="SlideToCancel">WISCHEN UM ABZUBRECHEN</string>
<string name="SaveToDownloads">In Downloads speichern</string>
<string name="SaveToMusic">In Musik speichern</string>
<string name="SlideToCancel">Wischen um abzubrechen</string>
<string name="SaveToDownloads">In Downloads speichern</string>
<string name="SaveToMusic">In Musik speichern</string>
<string name="Share">Teilen</string>
<string name="SendItems">%1$s senden</string>
<string name="ClearRecentEmoji">Zuletzt benutzte Emoji leeren?</string>
@@ -83,7 +83,7 @@
<string name="Default">Standard</string>
<string name="OnlyIfSilent">Wenn lautlos</string>
<string name="ChatBackground">Chat-Hintergrundbild</string>
<string name="SendByEnter">Mit Taste „Enter“ senden</string>
<string name="SendByEnter">Mit Eingabetaste senden</string>
<string name="Help">Hilfe</string>
<string name="Enabled">An</string>
<string name="Disabled">Aus</string>
@@ -151,13 +151,13 @@
<string name="Sharpen">Schärfe</string>
<string name="Fade">Verblassen</string>
<string name="Tint">Tönung</string>
<string name="TintShadows">TIEFEN</string>
<string name="TintHighlights">LICHTER</string>
<string name="TintShadows">Tiefen</string>
<string name="TintHighlights">Lichter</string>
<string name="Curves">Kurven</string>
<string name="CurvesAll">ALLE</string>
<string name="CurvesRed">ROT</string>
<string name="CurvesGreen">GRÜN</string>
<string name="CurvesBlue">BLAU</string>
<string name="CurvesAll">Alle</string>
<string name="CurvesRed">Rot</string>
<string name="CurvesGreen">Grün</string>
<string name="CurvesBlue">Blau</string>
<string name="Blur">Unschärfe</string>
<string name="BlurOff">Aus</string>
<string name="BlurLinear">Linear</string>
@@ -184,7 +184,7 @@
<string name="FromGalley">Aus der Galerie</string>
<string name="Set">Wählen</string>
<string name="OK">OK</string>
<string name="Crop">SCHNEIDEN</string>
<string name="Crop">Schneiden</string>
<!--messages-->
<string name="AttachPhoto">Bild</string>
<string name="AttachVideo">Video</string>
@@ -208,7 +208,7 @@
<string name="PermissionOpenSettings">Einstellungen anpassen</string>
<!--Intro view-->
<string name="Intro1Headline">Delta Chat</string>
<string name="Intro1Message">Der Messenger mit der <![CDATA[<b>größten Reichweite</b>]]> der Welt.<![CDATA[<br/><b>Kostenlos</b>]]> und <![CDATA[<b>sicher</b>]]>.</string>
<string name="Intro1Message">Der Messenger mit der <![CDATA[<b>größten Reichweite</b>]]> der Welt.<![CDATA[<br/><b>Frei</b>]]> und <![CDATA[<b>sicher</b>]]>.</string>
<string name="Intro2Headline">Unabhängig</string>
<string name="Intro2Message"><![CDATA[<b>Keine Abhängigkeiten</b>]]> von fremden Diensten und Servern. Die App verwendet nur Ihren E-Mail-Server.</string>
@@ -220,7 +220,7 @@
<string name="Intro4Message"><![CDATA[<b>Unbegrenzte</b>]]> Chats, Bilder, Videos, Sprachnachrichten und mehr. Multi-Client-fähig.</string>
<string name="Intro5Headline">Frei</string>
<string name="Intro5Message"><![CDATA[<b>Delta Chat</b>]]> ist für immer kostenlos.<![CDATA[<br/>]]>OpenSource. Keine Werbung. Kein Abo.</string>
<string name="Intro5Message">Open Source. Keine Werbung. Kein Abo.<![CDATA[<br/>]]>Keine Bindung an die Mobilfunknummer.</string>
<string name="Intro6Headline">Sicher</string>
<string name="Intro6Message"><![CDATA[<b>Verschlüsselung</b>]]> mit allen gängigen Verfahren. Die Nachrichten bleiben auf Ihren Servern.</string>
@@ -239,7 +239,7 @@
</plurals>
<plurals name="MeAndMembers">
<item quantity="one">Ich und %d Mitglied</item>
<item quantity="other">Ich und %d Mitglieder</item>
<item quantity="other">%d Mitglieder und ich</item>
</plurals>
<plurals name="NewMessages">
<item quantity="one">%d neue Nachricht</item>
@@ -338,7 +338,7 @@
<string name="InviteMenuEntry">Einladungen versenden</string>
<string name="InviteText">Ich verwende nun auch den Delta Chat Messenger - %1$s - und bin dort unter %2$s erreichbar.</string>
<string name="AdvancedSettings">Fortgeschrittene Einstellungen</string>
<string name="AskResetNotifications" >Alle Benachrichtigungseinstellungen und Töne dieser Seite und auch der einzelnen Chats zurücksetzen?</string>
<string name="AskResetNotifications">Alle Benachrichtigungseinstellungen und Töne dieser Seite und auch der einzelnen Chats zurücksetzen?</string>
<string name="AttachFiles">Dateien anhängen</string>
<string name="ErrGroupNameEmpty">Bitte einen Namen für die Gruppe eingeben.</string>
<string name="MsgNewGroupDraftHint">Eine erste Nachricht schreiben; dann können die anderen in der Gruppe antworten.\n\n• Gruppenmitglieder müssen hierzu Delta Chat nicht installiert haben.\n\n• Die Zustellung der ersten Nachricht kann einen Moment dauern.</string>
@@ -401,4 +401,23 @@
<string name="NoRecentEmoji">Hier werden die zuletzt verwendeten Emoji angezeigt.</string>
<string name="E2eeOffBecauseOfUser">Um die Ende-zu-Ende-Verschlüsselung zu aktivieren, aktivieren Sie die entsprechende Option in den Einstellungen. </string>
<string name="E2eeOffBecauseOfRecipient">Die Ende-zu-Ende-Verschlüsselung wird aktiviert, sobald der Kontakt die entsprechende Einstellung aktiviert.</string>
<string name="NotNow">Nicht jetzt</string>
<string name="ArchiveChat">Chat archivieren</string>
<string name="UnarchiveChat">Archivieren rückgängig</string>
<string name="ArchivedChats">Archivierte Chats</string>
<string name="Archived">Archiviert</string>
<string name="LeaveGroup">Gruppe verlassen</string>
<string name="AskLeaveGroup">Diese Gruppe verlassen?</string>
<string name="Never">Niemals</string>
<string name="AutocryptKeyTransferInitiate">Autocrypt-Key-Transfer starten</string>
<string name="AutocryptKeyTransfer">Autocrypt-Key-Transfer</string>
<string name="AutocryptKeyTransferMsgBeforeSend">Der <![CDATA[<i>]]>Autocrypt-Key-Transfer<![CDATA[</i>]]> erfordert, dass das andere Gerät Autocrypt-kompatibel ist.\n\nSie können dann Ihren privaten Schlüssel an sich selbst schicken. Der Schlüssel wird mit einem <![CDATA[<i>]]>Setup Code<![CDATA[</i>]]> geschützt; dieser wird hier angezeigt und muss auf dem anderen Gerät eingetippt werden.</string>
<string name="AutocryptKeyTransferMsgAfterSend">Ihr Schüssel wurde an Sie selbst verschickt. Wechseln sie nun zum anderen Gerät und öffnen die Setup-Nachricht. Sie werden dann aufgefordert einen Setup-Code einzugeben. Tippen Sie dort die folgenden Zahlen ein:\n\n%1$s\n\nWenn Sie fertig sind, ist Autocrypt auf dem anderen Gerät eingerichet.</string>
<string name="AutocryptSetupMessageSubject">Autocrypt-Setup-Nachricht</string>
<string name="AutocryptSetupMessageGeneralBody">Diese Autocrypt-Setup-Nachricht wird verwendet um Ihren Schlüssel von einem Gerät auf das andere zu übertragen.\n\nUm Ihren Schlüssel zu verwenden, öffnen Sie diese Nachricht in einer Autocrypt-kompatiblen E-Mail-App und geben Sie den Setup-Code ein, der Ihnen auf dem andern Gerät angezeigt wurde.</string>
<string name="AutocryptSetupMessageTapBody">Diese Autocrypt-Setup-Nachricht wird verwendet um Ihren Schlüssel von einem Gerät auf das andere zu übertragen.\n\nTippen Sie auf diese Nachricht, um den Schlüssel zu verwenden.</string>
<string name="AutocryptKeyTransferPleaseEnterCode">Bitte geben Sie den Setup-Code ein, der auf dem anderen Gerät angezeigt wird.</string>
<string name="AutocryptKeyTransferBadCode">Ungültiger Setup-Code. Bitte versuchen Sie es erneut.\n\nWenn Sie den Setup-Code nicht mehr haben, können Sie auch jederzeit einen neue Autocrypt-Setup-Nachricht mit einem neuen Setup-Code erzeugen.</string>
<string name="AutocryptKeyTransferSucceeded">Ihr Schlüssel wurde erfolgreich übertragen. Dieses Gerät wird nun Autocrypt mit demselben Schlüssel wie das Andere verwenden.</string>
<string name="Retry">Wiederholen</string>
</resources>
@@ -336,7 +336,7 @@
<string name="InviteMenuEntry">Invitar a amigos</string>
<string name="InviteText">Estoy usando Delta Chat ahora - %1$s - puede escribirme a %2$s</string>
<string name="AdvancedSettings">Ajustes avanzados</string>
<string name="AskResetNotifications" >¿Reiniciar los ajustes de notificación y sonido de esta página y de sus contactos y grupos?</string>
<string name="AskResetNotifications">¿Reiniciar los ajustes de notificación y sonido de esta página y de sus contactos y grupos?</string>
<string name="AttachFiles">Adjuntar archivos</string>
<string name="ErrGroupNameEmpty">Introduzca un nombre para el grupo.</string>
<string name="MsgNewGroupDraftHint">Escriba un primer mensaje para permitir a los demás participar en este grupo.\n\n• No importa si los miembros no usan Delta Chat.\n\n• El primer mensaje puede tardar un momento.</string>
@@ -338,7 +338,7 @@
<string name="InviteMenuEntry">Envoyer des invitations</string>
<string name="InviteText">J\'utilise la messagerie Delta Chat maintenant - %1$s - vous pouvez me contacter à %2$s</string>
<string name="AdvancedSettings">Paramètres avancés</string>
<string name="AskResetNotifications" >Réinitialiser toutes les paramètres de notification et les sons de cette page ainsi que de vos contacts et groupes?</string>
<string name="AskResetNotifications">Réinitialiser toutes les paramètres de notification et les sons de cette page ainsi que de vos contacts et groupes?</string>
<string name="AttachFiles">Joindre des fichiers</string>
<string name="ErrGroupNameEmpty">Merci de saisir un nom pour le groupe.</string>
<string name="MsgNewGroupDraftHint">Écrivez un premier message pour permettre aux autres de répondre dans ce groupe.\n\n• Ça ne devrait pas poser de problème si tous les membres du groupe n\'utilisent pas Delta Chat.\n\n• L\'envoi du premier message peut prendre un moment.</string>
@@ -383,6 +383,7 @@
<string name="ReadReceipt">Accusé de réception</string>
<string name="NameAndStatus">Nom et statut</string>
<string name="MyStatus">Mon statut</string>
<string name="MyStatusExplain">Le status est indiqué par ex. dans les pieds de page des emails.</string>
<string name="MsgGroupImageDeleted">Image du groupe effacée.</string>
<string name="AskDeleteGroupImage">Êtes-vous sûr de vouloir effacer l\'image du groupe?\n\nCeci affectera tous les appareils de tous les membres du groupe.</string>
<string name="ExportImportHeader">Exporter et importer</string>
@@ -398,4 +399,15 @@
<string name="ImportPrivateKeys">Importer les clés privées</string>
<string name="ImportPrivateKeysAsk2">Importer des clés privées depuis <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>?\n\n• Les clés privées existantes ne sont pas supprimées\n\n•
La dernière clé importée sera utilisée comme nouvelle clé par défaut</string>
<string name="NoRecentEmoji">Les emoji récemment utilisés seront affichés ici.</string>
<string name="E2eeOffBecauseOfUser">Pour activer le chiffrement bout-à-bout, vérifiez l\'option correspondante dans vos paramètres.</string>
<string name="E2eeOffBecauseOfRecipient">Le chiffrement sera bout-à-bout si le contact active l\'option correspondante.</string>
<string name="NotNow">Pas maintenant</string>
<string name="ArchiveChat">Archive des conversations</string>
<string name="UnarchiveChat">Conversation non archivée</string>
<string name="ArchivedChats">Conversations archivées</string>
<string name="Archived">Archivé</string>
<string name="LeaveGroup">Quitter le groupe</string>
<string name="AskLeaveGroup">Êtes-vous sûr de vouloir quitter ce groupe?</string>
<string name="Never">Jamais</string>
</resources>
@@ -297,6 +297,7 @@
<string name="AccountSettings">Fiókbeállítások</string>
<string name="MyAccount">Fiókom</string>
<string name="MyName">Nevem</string>
<string name="MyNameExplain">A címzetteknek megjelenő neved. Ha nem adsz meg itt nevet, akkor csak az e-mail címedet fogják látni.</string>
<string name="Password">Jelszó</string>
<string name="SmtpPassword">SMTP jelszó</string>
<string name="FromAbove">fentről másolva</string>
@@ -321,6 +322,7 @@
<string name="AskStartChatWith">Beszélgetést indítasz <![CDATA[<b>]]>%1$s<![CDATA[</b>]]> partnerrel?</string>
<string name="DeaddropHint">Beszélgetés indításához koppints a válasz-nyílra.</string>
<string name="NotYetImplemented">Ez a funkció nem érhető el vagy még nem készült el.</string>
<string name="DefaultStatusText">A Delta Chat Messengeremmel küldtem: https://delta.chat</string>
<string name="Name" >Név</string>
<string name="EmailAddress">E-mail cím</string>
<string name="CannotDeleteContact">A használatban lévő névjegyet nem lehet törölni, ehelyett letilthatod a partnert.</string>
@@ -335,7 +337,7 @@
<string name="InviteMenuEntry">Meghívó küldése</string>
<string name="InviteText">A Delta Chat nevű programmal chatelek - %1$s - írhatsz nekem ezen a címen: %2$s</string>
<string name="AdvancedSettings">További beállítások</string>
<string name="AskResetNotifications" >Az oldal, a partnereid és csoportjaid minden értesítési és hangbeállítását visszaállítod?</string>
<string name="AskResetNotifications">Az oldal, a partnereid és csoportjaid minden értesítési és hangbeállítását visszaállítod?</string>
<string name="AttachFiles">Fájlok csatolása</string>
<string name="ErrGroupNameEmpty">Nevezd el a csoportot.</string>
<string name="MsgNewGroupDraftHint">Írj egy kezdőüzenetet, hogy a többiek válaszolhassanak a csoportban.\n\n• Nincs gond, ha nem használja minden tag a Delta Chatet.\n\n• Az első üzenet kézbesítése kicsit lassabb lehet.</string>
@@ -349,10 +351,36 @@
<string name="ErrSelfNotInGroup">Csoporttagnak kell lenned, hogy ezt megtehesd.</string>
<string name="MsgGroupLeft">Kiléptél a csoportból.</string>
<string name="NoMessagesHint">Üzenetküldés <![CDATA[<b>]]>%1$s<![CDATA[</b>]]> partnernek:\n\n• Nincs gond, ha <![CDATA[<b>]]>%2$s<![CDATA[</b>]]> nem használja a Delta Chatet.\n\n• Az első üzenet kézbesítése kicsit lassabb lehet.</string>
<string name="SendNRcvReadReceipts">Tértivevények küldése és fogadása</string>
<string name="E2EManagePrivateKeys">Privát kulcsok kezelése</string>
<string name="E2ECompareKeys">Kulcsok összehasonlítása</string>
<string name="ForwardToTitle">Továbbítás…</string>
<string name="SelectContact">Válassz partnert</string>
<string name="DoneHint">Kész.</string>
<string name="FileNotFound">%1$s fájl nem található.</string>
<string name="Error">Hiba: %1$s</string>
<string name="NoNetwork">Nincs hálózat.</string>
<string name="PermNotificationTitle">%1$s csatlakozva</string>
<string name="AutoplayGifs">GIF-ek automatikus lejátszása</string>
<string name="EncryptedMessage">Titkosított üzenet</string>
<string name="Encryption">Titkosítás</string>
<string name="EncrinfoFingerprints">Ujjlenyomatok</string>
<string name="Backup">Biztonsági mentés</string>
<string name="ReadReceiptMailBody">Tértivevény erről az üzenetről: „%1$s”.\n\nEz a tértivevény csak arról értesít, hogy az üzenet megjelent a címzett készülékén. Az nem biztos, hogy el is olvasta a tartalmát.</string>
<string name="ReadReceipt">Tértivevény</string>
<string name="NameAndStatus">Név és állapot</string>
<string name="MyStatus">Állapotom</string>
<string name="MyStatusExplain">Az állapot megjelenik pl. e-mail aláírásként.</string>
<string name="MsgGroupImageDeleted">Csoportkép törölve.</string>
<string name="AskDeleteGroupImage">Biztos törlöd a csoport képét?\n\nEzzel minden csoporttag minden készülékéről törlöd.</string>
<string name="ExportImportHeader">Exportálás és importálás</string>
<string name="EnterPasswordToContinue">A folytatáshoz add meg %1$s jelszavát:</string>
<string name="IncorrectPassword">Helytelen jelszó.</string>
<string name="ImportBackup">Biztonsági mentés importálása</string>
<string name="ExportBackup">Biztonsági mentés exportálása</string>
<string name="ExportPrivateKeys">Privát kulcsok exportálása</string>
<string name="ImportPrivateKeys">Privát kulcsok importálása</string>
<string name="NotNow">Most nem</string>
<string name="ArchiveChat">Beszélgetés archiválása</string>
<string name="ArchivedChats">Archivált beszélgetések</string>
</resources>
@@ -338,7 +338,7 @@
<string name="InviteMenuEntry">Invita amici</string>
<string name="InviteText">Ora sto usando l\'applicazione di messaggistica Delta Chat - %1$s - puoi scrivermi all\'indirizzo %2$s</string>
<string name="AdvancedSettings">Impostazioni avanzate</string>
<string name="AskResetNotifications" >Ripristinare tutte le impostazioni di notifica e suoni per questa pagina, i contatti e i gruppi?</string>
<string name="AskResetNotifications">Ripristinare tutte le impostazioni di notifica e suoni per questa pagina, i contatti e i gruppi?</string>
<string name="AttachFiles">Allega file</string>
<string name="ErrGroupNameEmpty">Inserire un nome per il gruppo.</string>
<string name="MsgNewGroupDraftHint">Scrivere il primo messaggio per permettere agli altri componenti di rispondere nel gruppo\n\n• Va bene anche se non tutti i membri usano Delta Chat.\n\n• L\'invio del primo messaggio può richiedere qualche secondo.</string>
@@ -401,4 +401,23 @@
<string name="NoRecentEmoji">Le emoji utilizzate di recente verranno mostrate qui.</string>
<string name="E2eeOffBecauseOfUser">Per abilitare la crittografia end-to-end, selelzionare l\'opzione corrispondente nelle impostazioni.</string>
<string name="E2eeOffBecauseOfRecipient">La crittigrafia end-to-end sarà attiva solo se anche chi riceve il messaggio abilita l\'opzione corridpondente.</string>
<string name="NotNow">Non ora</string>
<string name="ArchiveChat">Archivia chat</string>
<string name="UnarchiveChat">Ripristina chat</string>
<string name="ArchivedChats">Chat archiviate</string>
<string name="Archived">Archiviata</string>
<string name="LeaveGroup">Abbandona gruppo</string>
<string name="AskLeaveGroup">Sei sicuro di voler abbandonare il gruppo?</string>
<string name="Never">Mai</string>
<string name="AutocryptKeyTransferInitiate">Avviato trasferimento chiavi Autocrypt</string>
<string name="AutocryptKeyTransfer">Trasferimento chiavi Autocrypt</string>
<string name="AutocryptKeyTransferMsgBeforeSend">Il <![CDATA[<i>]]>trasferimento chiavi Autocrypt<![CDATA[</i>]]> richiede che il client email sull\'altro dispositivo sia compatibile con Autocrypt.\n\nSarà quindi possibile inviare la chiave a se stessi. La chiave verrà cifrata con un codice di configurazione che verrà mostrato qui e dovrà essere digitato sull\'altro dispositivo.</string>
<string name="AutocryptKeyTransferMsgAfterSend">La chiave è stata inviata. Passare all\'altro dispositivo e aprire il messaggio di configurazione. Verrà richiesto un codice. Digitare il codice seguente:\n\n%1$s\n\nUna volta terminato, l\'altro dispositivo sarà pronto per usare Autocrypt.</string>
<string name="AutocryptSetupMessageSubject">Massaggio di configurazione Autocrypt</string>
<string name="AutocryptSetupMessageGeneralBody">Questo è il messaggio di configurazione di Autocrypt usato per trasferire la propria chiave tra più client.\n\nPer decifrare e usare la chiave, aprire il messaggio in un client compatibile con Autocrypt e digitare il codice di configurazione visibile sul dispositivo dal quale si è generata la chiave.</string>
<string name="AutocryptSetupMessageTapBody">Questo è il messaggio di configurazione di Autocrypt usato per trasferire la propria chiave tra più client.\n\nPer decifrare e usare la chiave, aprire questo messaggio.</string>
<string name="AutocryptKeyTransferPleaseEnterCode">Inserire il codice di configurazione mostrato sull\'altro dispositivo.</string>
<string name="AutocryptKeyTransferBadCode">Codice di configurazione errato.\n\nSe non si ricorda il codice di configurazione, avviare nuovamente il trafserimento chiavi sull\'altro dispositivo.</string>
<string name="AutocryptKeyTransferSucceeded">Chiave trasferita con successo. Questo dispositivo è pronto per usare Autocrypt con la stessa chiave dell\'altro dispositivo.</string>
<string name="Retry">Riprovare</string>
</resources>
@@ -10,6 +10,7 @@
<string name="NoResult">결과 없음</string>
<string name="NoChats">채팅방이 없습니다…</string>
<string name="DeleteChat">채팅방 나가기</string>
<string name="SelectChat">채팅선택</string>
<string name="Search">검색</string>
<string name="MuteNotifications">알림 음소거</string>
<string name="UnmuteNotifications">음소거 해제</string>
@@ -167,6 +168,8 @@
<!--privacy settings-->
<string name="PrivacySettings">개인정보 및 보안</string>
<string name="SecurityTitle">보안</string>
<!--edit video view-->
<string name="SendVideo">비디오 전송</string>
<!--button titles-->
<string name="Done">완료</string>
<string name="Open">열기</string>
@@ -204,6 +207,15 @@
<string name="PermissionOpenSettings">설정</string>
<!--Intro view-->
<string name="Intro1Headline">Delta Chat</string>
<string name="Intro2Headline">독립적인</string>
<string name="Intro3Headline">빠르게</string>
<string name="Intro4Headline">강력하게</string>
<string name="Intro5Headline">자유롭게</string>
<string name="Intro5Message">광고 배너 금지</string>
<string name="Intro6Headline">안전하게</string>
<string name="Intro7Headline">비밀</string>
<string name="IntroStartMessaging">시작하기</string>
<!--plural-->
<plurals name="Members">
@@ -250,6 +262,8 @@
<string name="MyAccount">계정</string>
<string name="MyName">내 이름</string>
<string name="Password">암호</string>
<string name="FromAbove">위부터</string>
<string name="Automatic">자동</string>
<string name="NewChat">채팅 시작</string>
<string name="Deaddrop">사서함</string>
<string name="InviteMenuEntry">친구 초대</string>
@@ -3,6 +3,7 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="AppName">Delta Chat</string>
<!--chats view-->
<string name="Settings">Innstillinger</string>
<string name="NewGroup">Ny gruppe</string>
@@ -11,12 +12,16 @@
<string name="DeleteChat">Slett sludring</string>
<string name="SelectChat">Velg sludring…</string>
<string name="Search">Søk</string>
<string name="MuteNotifications">Demp merknader</string>
<string name="MuteFor">Demp i %1$s</string>
<string name="UnmuteNotifications">Fjern demping</string>
<string name="Draft">Kladd</string>
<!--audio view-->
<string name="NoAudio">Legg til filer i musikkbiblioteket på din enhet for å se dem her.</string>
<string name="AttachMusic">Musikk</string>
<!--documents view-->
<string name="SelectFile">Velg fil</string>
<string name="FreeOfTotal">Frigjør %1$s av %2$s</string>
<string name="ErrorHint">Ukjent feil</string>
<string name="AccessError">Tilgangsfeil</string>
<string name="NoFiles">Ingen filer enda…</string>
@@ -24,8 +29,10 @@
<string name="UsbActive">USB-overføring aktiv</string>
<string name="InternalStorage">Intern lagring</string>
<string name="ExternalStorage">Ekstern lagring</string>
<string name="SystemRoot">Systemrot</string>
<string name="SdCard">SD-kort</string>
<string name="Folder">Mappe</string>
<string name="GalleryInfo">For å sende ukomprimerte bilder</string>
<!--chat view-->
<string name="ChatGallery">Galleri</string>
<string name="ChatCamera">Kamera</string>
@@ -35,6 +42,8 @@
<string name="NoRecent">Ingen nylige</string>
<string name="TypeMessage">Melding</string>
<string name="SlideToCancel">DRA FOR Å AVBRYTE</string>
<string name="SaveToDownloads">Lagre i \"Nedlastinger\"</string>
<string name="SaveToMusic">Lagre i \"Musikk\"</string>
<string name="Share">Del</string>
<string name="SendItems">Send %1$s</string>
<string name="ClearRecentEmoji">Slett nylige emoji-er?</string>
@@ -58,18 +67,22 @@
<string name="BlockContact">Blokker kontakt</string>
<string name="DeleteContact">Slett kontakt</string>
<string name="Info">Info</string>
<!--settings view-->
<string name="TextSize">Skriftstørrelse for meldinger</string>
<string name="UnblockContact">Fjern blokkering av kontakt</string>
<string name="NoBlocked">Ingen blokkerte kontakter enda</string>
<string name="DefaultForNormalMessages">Normale meldinger</string>
<string name="MessagePreview">Meldingsforhåndsvisning</string>
<string name="DefaultForGroupMessages">Gruppemeldinger</string>
<string name="Sound">Lyd</string>
<string name="InAppNotifications">Merknader i programmet</string>
<string name="Vibrate">Vibrer</string>
<string name="ResetAllNotifications">Tilbakestill alle merknader</string>
<string name="NotificationsAndSounds">Merknader og lyder</string>
<string name="BlockedContacts">Blokkerte kontakter</string>
<string name="Default">Forvalg</string>
<string name="OnlyIfSilent">Bare hvis lydløs</string>
<string name="SendByEnter">Send med "Enter"</string>
<string name="Help">Hjelp</string>
<string name="Enabled"></string>
<string name="Disabled">Av</string>
@@ -83,6 +96,7 @@
<string name="NotificationsPriorityHigh">Høy prioritet</string>
<string name="NotificationsPriorityMax">Høyeste prioritet</string>
<string name="RepeatNotifications">Gjenta merknader</string>
<string name="SmartNotificationsSoundAtMost">Maks.</string>
<string name="SmartNotificationsTimes">tider</string>
<string name="SmartNotificationsWithin">innen</string>
<string name="SmartNotificationsMinutes">minutter</string>
@@ -91,12 +105,18 @@
<!--cache view-->
<string name="CacheSettings">Lagring</string>
<string name="KeepMedia">Behold media</string>
<string name="KeepMediaInfo">Bilder, video og andre filer fra skysludringer du <![CDATA[<b>ikke har åpnet</b>]]> i løpet av denne perioden vil bli fjernet fra denne enheten for å spare plass.</string>
<string name="KeepMediaForever">For alltid</string>
<!--passcode view-->
<string name="Passcode">Programlås</string>
<string name="PasscodePIN">PIN</string>
<string name="PasscodePassword">Passord</string>
<string name="AutoLock">Autolås</string>
<string name="UnlockFingerprint">Lås opp med fingeravtrykk</string>
<string name="FingerprintInfo">Bekreft fingeravtrykk for å fortsette</string>
<string name="FingerprintNotRecognized">Fingeravtrykket ble ikke gjenkjent. Prøv igjen</string>
<!--photo gallery view-->
<string name="SaveToGallery">Lagre i \"Galleri\"</string>
<string name="Of">%1$d av %2$d</string>
<string name="Gallery">Galleri</string>
<string name="AllPhotos">Alle bilder</string>
@@ -107,6 +127,8 @@
<string name="EditImage">Rediger bilde</string>
<string name="Enhance">Forbedre</string>
<string name="Contrast">Kontrast</string>
<string name="Shadows">Skygger</string>
<string name="TintShadows">Skygger</string>
<string name="CurvesAll">ALLE</string>
<string name="CurvesRed">RØD</string>
<string name="CurvesGreen">GRØNN</string>
@@ -140,19 +162,32 @@
<string name="AttachGif">GIF</string>
<string name="AttachContact">Kontakt</string>
<string name="AttachDocument">Fil</string>
<string name="AttachVoiceMessage">Stemmemelding</string>
<string name="FromSelf">Meg</string>
<!--Alert messages-->
<string name="NoHandleAppInstalled">Du har ingen programmer som kan håndtere \'%1$s\', installer et for å fortsette</string>
<string name="ContactAlreadyInGroup">Denne kontakten er allerede i denne gruppen.</string>
<string name="ForwardMessagesTo">Videresend valgte meldinger til <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="SendMessagesTo">Send meldinger til <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="AreYouSureDeleteThisChat">Slett denne sludringen? Den vil ikke lenger bli vist i sludrelisten, men meldingene vil forbli på tjeneren.</string>
<string name="AreYouSureBlockContact">Er du sikker på at du vil blokkere denne kontakten?</string>
<string name="AreYouSureDeleteContact">Er du sikker på at du ønsker å slette denne kontakten?</string>
<!--permissions-->
<string name="PermissionContacts">Delta Chat trenger tilgang til kontaktene dine slik at du kan koble til dine venner på tvers av alle enhetene dine.</string>
<string name="PermissionStorage">Delta chat trenger tilgang til lagring, slik at du kan sende og lagre bilder, videoer, musikk og annen media.</string>
<string name="PermissionNoAudio">Delta Chat trenger mikrofontilgang slik at du kan sende stemmemeldinger.</string>
<string name="PermissionOpenSettings">Tilpass innstillinger</string>
<!--Intro view-->
<string name="Intro1Headline">Delta Chat</string>
<string name="Intro1Message">Meldingstjenesten med <![CDATA[<b>størst rekkevidde</b>]]> i verden.<![CDATA[<br/><b>Gratis</b>]]> og <![CDATA[<b>trygt</b>]]>.</string>
<string name="Intro2Headline">Uavhengig</string>
<string name="Intro2Message"><![CDATA[<b>Ingen avhengigheter</b>]]> på datamaskiner annensteds hen, eller tjenester. Programmet bruker kun e-posttjeneren din.</string>
<string name="Intro3Headline">Rask</string>
<string name="Intro4Headline">Kraftig</string>
<string name="Intro4Message"><![CDATA[<b>Ubegrensede</b>]]> sludringer, bilder, videoer, lydmeldinger med mer. Multiklient-støtte.</string>
<string name="Intro5Headline">Ledig</string>
<string name="Intro6Headline">Trygt</string>
<string name="Intro6Message"><![CDATA[<b>Kryptert</b>]]> med alle vanlige alle vanlige algoritmer. Meldingene forblir på tjenerne.</string>
@@ -160,10 +195,63 @@
<string name="Intro7Headline">Pålitelig</string>
<string name="IntroStartMessaging">Start meldingsutveksling</string>
<!--plural-->
<plurals name="Members">
<item quantity="one">%d medlem</item>
<item quantity="other">%d medlemmer</item>
</plurals>
<plurals name="Contacts">
<item quantity="one">%d kontakt</item>
<item quantity="other">%d kontakter</item>
</plurals>
<plurals name="MeAndMembers">
<item quantity="one">%d medlem og meg</item>
<item quantity="other">%d medlemmer og meg</item>
</plurals>
<plurals name="NewMessages">
<item quantity="one">%d ny melding</item>
<item quantity="other">%d nye meldinger</item>
</plurals>
<plurals name="messages">
<item quantity="one">%d melding</item>
<item quantity="other">%d meldinger</item>
</plurals>
<plurals name="AreYouSureDeleteMessages">
<item quantity="one">Slett %d melding? Den vil også bli slettet fra tjeneren?</item>
<item quantity="other">Slett %d meldinger? De vil også bli slettet fra tjeneren.</item>
</plurals>
<plurals name="NewMessagesInChats">
<item quantity="one">%1$s i %2$d sludring</item>
<item quantity="other">%1$s i %2$d sludringer</item>
</plurals>
<plurals name="Chats">
<item quantity="one">%d sludring</item>
<item quantity="other">%d sludringer</item>
</plurals>
<plurals name="Minutes">
<item quantity="one">%d minutt</item>
<item quantity="other">%d minutter</item>
</plurals>
<plurals name="Hours">
<item quantity="one">%d time</item>
<item quantity="other">%d timer</item>
</plurals>
<plurals name="Days">
<item quantity="one">%d dag</item>
<item quantity="other">%d dager</item>
</plurals>
<plurals name="Weeks">
<item quantity="one">%d uke</item>
<item quantity="other">%d uker</item>
</plurals>
<plurals name="Months">
<item quantity="one">%d måned</item>
<item quantity="other">%d måneder</item>
</plurals>
<plurals name="MaxNotifications">
<item quantity="one">Maksimalt %1$d merknad i løpet av %2$s</item>
<item quantity="other">Maksimalt %1$d merknader i løpet av %2$s</item>
</plurals>
<!--date formatters-->
<string name="formatterMonthYear">MMMM yyyy</string>
<string name="formatterMonth">dd MMM</string>
@@ -175,9 +263,11 @@
<string name="Password">Passord</string>
<string name="SmtpPassword">SMTP-passord</string>
<string name="FromAbove">Ovenfra</string>
<string name="SmtpLoginname">SMTP-innloggingsnavn</string>
<string name="SmtpPort">SMTP-port</string>
<string name="Automatic">Automatisk</string>
<string name="ImapServer">IMAP-tjener</string>
<string name="ImapLoginname">IMAP-innloggingsnavn</string>
<string name="SmtpServer">SMTP-tjener</string>
<string name="ImapPort">IMAP-port</string>
<string name="InboxHeadline">Innboks</string>
@@ -185,9 +275,16 @@
<string name="MyAccountExplain">For kjente e-posttilbydere blir ytterligere innstillinger bestemt automatisk.</string>
<string name="MyAccountExplain2" >Noen ganger <![CDATA[<b>]]>må IMAP skrus på<![CDATA[</b>]]> i vev-e-postgrenseflaten.\n\nVed problemer, spør din e-posttilbyder eller dine venner.</string>
<string name="AccountNotConfigured">Konto ikke satt opp</string>
<string name="AboutThisProgram">Om</string>
<string name="NotSet">Ikke satt</string>
<string name="NewChat">Ny sludring</string>
<string name="Deaddrop">Kontaktforespørsler</string>
<string name="DeaddropInChatlist">Vis kontaktforespørsler i sludrelisten</string>
<string name="MuteAlways">Alltid dempet</string>
<string name="AskStartChatWith">Begynn å sludre med <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="DeaddropHint">For å begynne sludring, klikk på svar-pilene.</string>
<string name="NotYetImplemented">Denne funksjonen er ikke tilgjengelig eller ufullstendig.</string>
<string name="DefaultStatusText">Sendt med Delta Chat: https://delta.chat</string>
<string name="Name" >Navn</string>
<string name="EmailAddress">E-postadresse</string>
<string name="CannotDeleteContact">Kan ikke slette kontakter i bruk, blokker kontakt istedenfor.</string>
@@ -197,14 +294,21 @@
<!-- Translators: please use a very short string here, it should not much longer than
the string needed for video time+size (0:00, 12,3 Mib) -->
<string name="OneMoment">Et øyeblikk…</string>
<string name="NoChatsHelp">Start forsendelse av meldinger ved å trykke på den nye sludreknappen nederst i høyre hjørne eller trykk menyknappen for flere valg.</string>
<string name="Intro7Message"><![CDATA[<b>Delta Chat</b>]]> er trygt for bedriftsbruk, kompatibelt og basert på standarder.</string>
<string name="InviteMenuEntry">Send invitasjoner</string>
<string name="InviteText">Jeg bruker Delta Chat-meldingstjenesten nå - %1$s - du kan tekste meg på %2$s</string>
<string name="AdvancedSettings">Avanserte innstillinger</string>
<string name="AttachFiles">Legg ved filer</string>
<string name="ErrGroupNameEmpty">Skriv inn et navn for gruppen.</string>
<string name="MsgNewGroupDraft">Hei, jeg har akkurat opprettet gruppen \"%1$s\" for oss.</string>
<string name="MsgGroupImageChanged">Gruppebilde endret.</string>
<string name="MsgMemberAddedToGroup">Medlem %1$s lagt til.</string>
<string name="MsgMemberRemovedFromToGroup">Medlem %1$s fjernet.</string>
<string name="AskAddMemberToGroup">Legg til <![CDATA[<b>]]>%1$s<![CDATA[</b>]]> i gruppen?</string>
<string name="AskRemoveMemberFromGroup">Fjern <![CDATA[<b>]]>%1$s<![CDATA[</b>]]> fra gruppen?</string>
<string name="ErrSelfNotInGroup">Du må være medlem av gruppen for å utføre denne handlingen.</string>
<string name="MsgGroupLeft">Gruppe oppløst.</string>
<string name="SendNRcvReadReceipts">Motta og send meldingskvitteringer</string>
<string name="PreferE2EEncryption">Foretrekk ende-til-ende -kryptering</string>
<string name="E2EManagePrivateKeys">Behandle private nøkler</string>
@@ -216,6 +320,7 @@
<string name="Error">Feil: %1$s</string>
<string name="NoNetwork">Nettverk utilgjengelig.</string>
<string name="Audio">Lyd</string>
<string name="PleaseCutVideoToMaxSize">Gjør videoen mindre enn %1$s.</string>
<string name="PermNotificationTitle">Tilkoblet %1$s</string>
<string name="PermNotificationText">Venter på meldinger…</string>
<string name="SettingsFor">Innstillinger for %1$s</string>
@@ -235,6 +340,7 @@
<string name="AskDeleteGroupImage">Er du sikker på at du vil slette dette gruppebildet?\n\nDette vil ha innvirkning på alle enhetene tilhørende gruppemedlemmene.</string>
<string name="ExportImportHeader">Eksport og import</string>
<string name="EnterPasswordToContinue">Skriv inn passordet for %1$s for å fortsette:</string>
<string name="IncorrectPassword">Uriktig passord.</string>
<string name="ImportBackup">Importer sikkerhetskopi</string>
<string name="FilesSuccessfullyExported">Filer eksporter til <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>.</string>
<string name="ExportBackup">Eksporter sikkerhetskopi</string>
@@ -242,4 +348,14 @@
<string name="ImportPrivateKeys">Importer private nøkler</string>
<string name="ImportPrivateKeysAsk2">Importer private nøkler fra <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>?\n\n• Eksisterende private nøkler blir ikke slettet\n\n• Den sist importerte nøkkelen vil bli brukt som ny forvalgt nøkkel</string>
<string name="NoRecentEmoji">Nylig brukte emoji-er vil bli vist her.</string>
<string name="E2eeOffBecauseOfUser">For å skru på ende-til-ende -kryptering, huk det ut i innstillingene.</string>
<string name="E2eeOffBecauseOfRecipient">Ende-til-ende -kryptering vil bli brukt hvis mottakeren også skrur det på.</string>
<string name="NotNow">Ikke nå</string>
<string name="ArchiveChat">Arkiver sludring</string>
<string name="UnarchiveChat">Fjern sludring fra arkiv</string>
<string name="ArchivedChats">Arkiverte sludringer</string>
<string name="Archived">Arkivert</string>
<string name="LeaveGroup">Forlat gruppe</string>
<string name="AskLeaveGroup">Er du sikker på at du vil forlate denne gruppen?</string>
<string name="Never">Aldri</string>
</resources>
@@ -338,7 +338,7 @@
<string name="InviteMenuEntry">Vrienden uitnodigen</string>
<string name="InviteText">Ik gebruik Delta Chat, %1$s, je kan me berichtjes sturen op %2$s</string>
<string name="AdvancedSettings">Geavanceerde instellingen</string>
<string name="AskResetNotifications" >Herstel alle notificatieinstellingen en geluiden van deze pagina en je contacten en groepen?</string>
<string name="AskResetNotifications">Herstel alle notificatieinstellingen en geluiden van deze pagina en je contacten en groepen?</string>
<string name="AttachFiles">Voeg bestanden toe</string>
<string name="ErrGroupNameEmpty">Typ een naam in voor de groep.</string>
<string name="MsgNewGroupDraftHint">Schrijf een eerste bericht om anderen te kunnen laten reageren in deze groep.\n\n• Het is oké als niet iedereen Delta Chat gebruikt.\n\n• Het leveren van het eerste bericht kan even duren.</string>
@@ -366,7 +366,7 @@
<string name="InviteMenuEntry">Wyślij zaproszenia</string>
<string name="InviteText">Teraz używam komunikatora Delta Chat - %1$s - możesz pisać do mnie na %2$s</string>
<string name="AdvancedSettings">Ustawienia zaawansowane</string>
<string name="AskResetNotifications" >Zresetować wszystkie ustawienia powiadomień i dźwięków na tej stronie oraz dla swoich kontaktów i grup?</string>
<string name="AskResetNotifications">Zresetować wszystkie ustawienia powiadomień i dźwięków na tej stronie oraz dla swoich kontaktów i grup?</string>
<string name="AttachFiles">Załącz pliki</string>
<string name="ErrGroupNameEmpty">Podaj nazwę dla grupy</string>
<string name="MsgNewGroupDraftHint">Napisz pierwszą wiadomość, by inni mogli odpowiedzieć w tej grupie.\n\n• Nie ma problemu, jeśli nie wszyscy członkowie korzystają z Delta Chat.\n\n• Dostarczenie pierwszej wiadomości może chwilę potrwać.</string>
@@ -428,4 +428,24 @@
<string name="ImportPrivateKeysAsk2">Zaimportować prywatne klucze z <![CDATA[<i>]]>%1$s<![CDATA[]]>?\n\n• Istniejące prywatne klucze nie są usuwane\n\n• Ostatni zaimportowany klucz zostanie użyty jako nowy klucz domyślny</string>
<string name="NoRecentEmoji">Tutaj będą pokazane ostatnio używane emoji.</string>
<string name="E2eeOffBecauseOfUser">Aby włączyć szyfrowanie typu end-to-end, zaznacz odpowiednią opcję w ustawieniach.</string>
</resources>
<string name="E2eeOffBecauseOfRecipient">Szyfrowanie zostanie przełączone na end-to-end, jeśli kontakt włączy odpowiednią opcję.</string>
<string name="NotNow">Nie teraz</string>
<string name="ArchiveChat">Archiwizuj czat</string>
<string name="UnarchiveChat">Przywróć czat z archiwum</string>
<string name="ArchivedChats">Zarchiwizowane czaty</string>
<string name="Archived">Zarchiwizowane</string>
<string name="LeaveGroup">Opuść grupę</string>
<string name="AskLeaveGroup">Czy na pewno chcesz opuścić tą grupę?</string>
<string name="Never">Nigdy</string>
<string name="AutocryptKeyTransferInitiate">Rozpocznij tranfer klucza automatycznego szyfrowania</string>
<string name="AutocryptKeyTransfer">Tranfer klucza automatycznego szyfrowania</string>
<string name="AutocryptKeyTransferMsgBeforeSend"><![CDATA[<i>]]>Tranfer klucza automatycznego szyfrowania<![CDATA[</i>]]> wymaga, aby klient poczty na drugim urządzeniu był zgodny z automatycznym szyfrowaniem.\n\nMożesz wysłać klucz do siebie. Klucz zostanie zaszyfrowany za pomocą wyświetlonego tutaj kodu konfiguracyjnego, który należy wpisać na drugim urządzeniu.</string>
<string name="AutocryptKeyTransferMsgAfterSend">Klucz został wysłany do ciebie. Przejdź do innego urządzenia i otwórz wiadomość konfiguracyjną. Zostanie wyświetlona prośba o podanie kodu konfiguracyjnego. Wpisz następujące cyfry w podpowiedzi:\n\n%1$s\n\nGdy skończysz, drugie urządzenie będzie gotowe do użycia funkcji automatycznego szyfrowania.</string>
<string name="AutocryptSetupMessageSubject">Wiadomość konfiguracyjna automatycznego szyfrowania</string>
<string name="AutocryptSetupMessageGeneralBody">Jest to wiadomość konfiguracyjna automatycznego szyfrowania służąca do przesyłania klucza między klientami.\n\nAby odszyfrować i użyć klucza, otwórz wiadomość w kliencie zgodnym z automatycznym szyfrowaniem i wprowadź kod konfiguracyjny przedstawiony na urządzeniu generującym.</string>
<string name="AutocryptSetupMessageTapBody">Jest to wiadomość konfiguracyjna automatycznego szyfrowania służąca do przesyłania klucza między klientami.\n\nAby odszyfrować i użyć klucza, dotknij tą wiadomość.</string>
<string name="AutocryptKeyTransferPleaseEnterCode">Wprowadź kod konfiguracyjny wyświetlany na drugim urządzeniu.</string>
<string name="AutocryptKeyTransferBadCode">Zły kod konfiguracyjny. Spróbuj ponownie.\n\nJeśli nie pamiętasz kodu konfiguracji, po prostu uruchom ponownie transfer klucza na drugim urządzeniu.</string>
<string name="AutocryptKeyTransferSucceeded">Udany transfer klucza. To urządzenie jest teraz gotowe do użycia automatycznego szyfrowania za pomocą tego samego klucza, co na drugim urządzeniu.</string>
<string name="Retry">Powtórz</string>
</resources>
@@ -17,7 +17,7 @@
<string name="UnmuteNotifications">Restaurar som</string>
<string name="Draft">Rascunho</string>
<!--audio view-->
<string name="NoAudio">Por favor, adicione músicas à sua biblioteca para vê-las aqui.</string>
<string name="NoAudio">Músicas adicionados à biblioteca do dispositivo serão exibidas aqui.</string>
<string name="AttachMusic">Música</string>
<!--documents view-->
<string name="SelectFile">Selecione um arquivo</string>
@@ -41,7 +41,7 @@
<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="SlideToCancel">Deslize para cancelar</string>
<string name="SaveToDownloads">Salvar em downloads</string>
<string name="SaveToMusic">Salvar em músicas</string>
<string name="Share">Compartilhar</string>
@@ -205,7 +205,7 @@
<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="PermissionOpenSettings">Configurações de ajuste</string>
<string name="PermissionOpenSettings">Configurações</string>
<!--Intro view-->
<string name="Intro1Headline">Delta Chat</string>
<string name="Intro1Message">O aplicativo com a <![CDATA[<b>maior base de contatos</b>]]> do mundo.<![CDATA[<br/><b>Grátis</b>]]> e <![CDATA[<b>seguro</b>]]>.</string>
@@ -222,7 +222,7 @@
<string name="Intro5Headline">Grátis</string>
<string name="Intro5Message"><![CDATA[<b>Delta Chat</b>]]> será sempre grátis, de<![CDATA[<br/>]]>Código livre e sem propagandas.</string>
<string name="Intro6Headline">Seguro</string>
<string name="Intro6Headline">Criptografado</string>
<string name="Intro6Message"><![CDATA[<b>Criptografia</b>]]> com as tecnologias mais usadas. Suas mensagens ficam no servidor de e-mail.</string>
<string name="Intro7Headline">Confiável</string>
@@ -338,7 +338,7 @@
<string name="InviteMenuEntry">Convidar amigos</string>
<string name="InviteText">Estou usando o Delta Chat messenger - %1$s - meu contato neste app é: %2$s</string>
<string name="AdvancedSettings">Configurações avançadas</string>
<string name="AskResetNotifications" >Zerar todas as configurações e sons gerais, dos contatos e dos grupos?</string>
<string name="AskResetNotifications">Zerar todas as configurações e sons gerais, dos contatos e dos grupos?</string>
<string name="AttachFiles">Anexar arquivos</string>
<string name="ErrGroupNameEmpty">Por favor, designar um nome ao grupo.</string>
<string name="MsgNewGroupDraftHint">Escreva a primeira mensagem, possibilitando assim que os demais participem do grupo.\n\n• Tudo bem se nem todos usarem o Delta Chat.\n\n• A primeira mensagem pode demorar um pouco.</string>
@@ -398,4 +398,15 @@
<string name="ExportPrivateKeys">Exportar chaves privadas</string>
<string name="ImportPrivateKeys">Importar chaves privadas</string>
<string name="ImportPrivateKeysAsk2">Importar chaves privadas de <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>?\n\n• As chaves existentes não serão apagadas\n\n• A última chave importada será usada como padrão</string>
<string name="NoRecentEmoji">Emojis recentemente usados.</string>
<string name="E2eeOffBecauseOfUser">Para habilitar a criptografia ponta a ponta revise as configurações do aplicativo.</string>
<string name="E2eeOffBecauseOfRecipient">> A criptografia ponta a ponta será empregada se o destinatário habilitá-la também.</string>
<string name="NotNow">Agora não</string>
<string name="ArchiveChat">Arquivar conversa</string>
<string name="UnarchiveChat">Desarquivar conversa</string>
<string name="ArchivedChats">Conversas arquivadas</string>
<string name="Archived">Arquivado</string>
<string name="LeaveGroup">Sair do grupo</string>
<string name="AskLeaveGroup">Tem certeza que deseja sair do grupo?</string>
<string name="Never">Jamais</string>
</resources>
@@ -17,7 +17,7 @@
<string name="UnmuteNotifications">Включить уведомления</string>
<string name="Draft">Черновик</string>
<!--audio view-->
<string name="NoAudio">Добавьте файлы в музыкальную коллекцию на вашем устройстве для того, чтобы увидеть его здесь.</string>
<string name="NoAudio">Добавьте файлы в музыкальную коллекцию на вашем устройстве для того, чтобы увидеть их здесь.</string>
<string name="AttachMusic">Музыка</string>
<!--documents view-->
<string name="SelectFile">Выбрать файл</string>
@@ -78,7 +78,7 @@
<string name="InAppNotifications">Уведомления программы</string>
<string name="Vibrate">Вибрация</string>
<string name="ResetAllNotifications">Сбросить все уведомления</string>
<string name="NotificationsAndSounds">Уведомления и Звуки</string>
<string name="NotificationsAndSounds">Уведомления и звуки</string>
<string name="BlockedContacts">Заблокированные контакты</string>
<string name="Default">По умолчанию</string>
<string name="OnlyIfSilent">Только если тишина</string>
@@ -366,7 +366,7 @@
<string name="InviteMenuEntry">Отправить приглашения</string>
<string name="InviteText">Я использую систему мгновенных сообщений Delta Chat - %1$s - вы можете написать мне на %2$s</string>
<string name="AdvancedSettings">Расширенные настройки</string>
<string name="AskResetNotifications" >Сбросить все настройки уведомлений и звуки этой страницы, а также ваших контактов и групп?</string>
<string name="AskResetNotifications">Сбросить все настройки уведомлений и звуки этой страницы, а также ваших контактов и групп?</string>
<string name="AttachFiles">Прикрепить файлы</string>
<string name="ErrGroupNameEmpty">Введите название группы.</string>
<string name="MsgNewGroupDraftHint">Напишите первое сообщение, чтобы другие могли отвечать в этой группе.\n\n• Группа будет нормально общаться, даже если не все участники используют Delta Chat.\n\n• Доставка первого сообщения может занять некоторое время.</string>
@@ -396,7 +396,7 @@
<string name="PermNotificationText">Ожидание сообщений …</string>
<string name="SettingsFor">Настройки для %1$s</string>
<string name="AutoplayGifs">Автозапуск GIF</string>
<string name="HelpUrl">https://delta.chat/en/help</string>
<string name="HelpUrl">https://delta.chat/ru/help</string>
<string name="EncryptedMessage">Зашифрованное сообщение</string>
<string name="Encryption">Шифрование</string>
<string name="EncrinfoE2E">Включено сквозное шифрование.</string>
@@ -411,6 +411,7 @@
<string name="ReadReceipt">Уведомление о доставке</string>
<string name="NameAndStatus">Имя и статус</string>
<string name="MyStatus">Мой статус</string>
<string name="MyStatusExplain">Статус может быть показан в подписи.</string>
<string name="MsgGroupImageDeleted">Изображение группы удалено.</string>
<string name="AskDeleteGroupImage">Вы действительно хотите удалить изображение группы?\n\nИзменение вступит в силу на всех устройствах участников группы.</string>
<string name="ExportImportHeader">Экспорт и импорт</string>
@@ -425,4 +426,26 @@
<string name="ExportPrivateKeys">Экспорт закрытых ключей</string>
<string name="ImportPrivateKeys">Импорт закрытых ключей</string>
<string name="ImportPrivateKeysAsk2">Импорт закрытых ключей из <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>?\n\n• Существующие закрытые ключи удалены не будут\n\n• Последний импортированный ключ будет использован по умолчанию.</string>
</resources>
<string name="NoRecentEmoji">Здесь будут ранее использованные смайлики.</string>
<string name="E2eeOffBecauseOfUser">Для включения сквозного шифрования выберите соответствующий пункт в настройках.</string>
<string name="E2eeOffBecauseOfRecipient">Шифрование будет переключено в сквозной режим, если со стороны контакта будет выбран соответствующий пункт настроек.</string>
<string name="NotNow">Не сейчас</string>
<string name="ArchiveChat">Архивировать чат</string>
<string name="UnarchiveChat">Разархивировать чат</string>
<string name="ArchivedChats">Архивированные чаты</string>
<string name="Archived">Помещено в архив</string>
<string name="LeaveGroup">Выйти из группы</string>
<string name="AskLeaveGroup">Вы уверены, что хотите выйти из группы?</string>
<string name="Never">Никогда</string>
<string name="AutocryptKeyTransferInitiate">Начать передачу ключа Autocrypt</string>
<string name="AutocryptKeyTransfer">Передача ключа Autocrypt</string>
<string name="AutocryptKeyTransferMsgBeforeSend">Для <![CDATA[<i>]]>передачи ключа Autocrypt<![CDATA[</i>]]> необходимо, чтобы почтовый клиент на другом устройстве так же поддерживал Autocrypt.\n\nЗатем Вы можете послать ключ себе. Ключ будет зашифрован кодом настройки, который указан здесь, и который нужно будет ввести на другом устройстве.</string>
<string name="AutocryptKeyTransferMsgAfterSend">Вы отправили ключ себе. Теперь перейдите к другому устройству и откройте сообщение настройки. Будет предложено ввести код настройки. Введите следующие цифры:\n\n%1$s\n\nКак только Вы это сделаете, другое устройство будет готово использовать Autocrypt.</string>
<string name="AutocryptSetupMessageSubject">Сообщение настройки Autocrypt</string>
<string name="AutocryptSetupMessageGeneralBody">Это сообщение настройки Autocrypt, используемое для передачи ключа между клиентами.\n\nДля расшифровки и использования Вашего ключа откройте это сообщение в почтовом клиенте, совместимом с Autocrypt, и введите код, показываемый на устройстве, с которого отправлено сообщение.</string>
<string name="AutocryptSetupMessageTapBody">Это сообщение настройки Autocrypt, используемое для передачи Вашего ключа между клиентами.\n\nЧтобы расшифровать и начать использовать Ваш ключ, нажмите на это сообщение.</string>
<string name="AutocryptKeyTransferPleaseEnterCode">Пожалуйста, введите код настройки, показанный на другом устройстве.</string>
<string name="AutocryptKeyTransferBadCode">Неверный код настройки. Пожалуйста, повторите.\n\nЕсли Вы не помните код настройки, вернитесь к исходному устройству и передайте ключ ещё раз.</string>
<string name="AutocryptKeyTransferSucceeded">Ключ передан успешно. Сейчас это устройство может использовать Autocrypt с тем же ключом, что и на другом устройстве.</string>
<string name="Retry">Повторить</string>
</resources>
@@ -0,0 +1,393 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="AppName">Fjalosje Delta</string>
<!--chats view-->
<string name="Settings">Rregullime</string>
<string name="NewGroup">Grup i ri</string>
<string name="NoResult">Ska përfundime.</string>
<string name="NoChats">Ende pa fjalosje.</string>
<string name="DeleteChat">Fshije fjalosjen</string>
<string name="SelectChat">Përzgjidhni fjalosje…</string>
<string name="Search">Kërko</string>
<string name="MuteNotifications">Mos shfaq njoftime</string>
<string name="MuteFor">Mos i shfaq për %1$s</string>
<string name="UnmuteNotifications">Shfaqi</string>
<string name="Draft">Skicë</string>
<!--audio view-->
<string name="NoAudio">Kartelat e shtuara te mediateka e pajisjes suaj do të shfaqen këtu.</string>
<string name="AttachMusic">Muzikë</string>
<!--documents view-->
<string name="SelectFile">Përzgjidhni Kartelë</string>
<string name="FreeOfTotal">%1$s nga %2$s të lira</string>
<string name="ErrorHint">Gabim i panjohur</string>
<string name="AccessError">Gabim hyrjeje</string>
<string name="NoFiles">Ende pa kartela…</string>
<string name="NotMounted">Ska depozitë të montuar</string>
<string name="UsbActive">Shpërngulje USB në ecuri e sipër</string>
<string name="InternalStorage">Depozitë e Brendshme</string>
<string name="ExternalStorage">Depozitë e Jashtme</string>
<string name="SystemRoot">Rrënjë e Sistemit</string>
<string name="SdCard">Diskth SD</string>
<string name="Folder">Dosje</string>
<string name="GalleryInfo">Për dërgim figurash të pangjeshura</string>
<!--chat view-->
<string name="ChatGallery">Galeri</string>
<string name="ChatCamera">Kamerë</string>
<string name="NoMessages">Ska mesazhe.</string>
<string name="ForwardedMessage">Mesazh i përcjellë</string>
<string name="From">Nga</string>
<string name="TypeMessage">Mesazh</string>
<string name="SaveToDownloads">Ruaje te \"Shkarkime\"</string>
<string name="SaveToMusic">Ruaje te \"Muzikë\"</string>
<string name="AddShortcut">Shtoje widget-in te kreu</string>
<string name="ShortcutAdded">Widget-i u shtua tek kreu</string>
<!--notification-->
<string name="Reply">Përgjigjuni</string>
<string name="ReplyToGroup">Përgjigjiuni %1$s</string>
<string name="ReplyToContact">Përgjigjiuni %1$s</string>
<!--contacts view-->
<string name="NoContacts">Ende pa kontakte.</string>
<!--group create view-->
<string name="SendMessageTo">Dërgoni mesazh te…</string>
<string name="EnterGroupNamePlaceholder">Jepni emër grupi</string>
<!--group info view-->
<string name="AddMember">Shtoni anëtar</string>
<string name="Notifications">Njoftime</string>
<string name="RemoveMember">Hiqni anëtar</string>
<!--contact info view-->
<string name="NewContactTitle">Kontakt i ri</string>
<string name="BlockContact">Bllokoje kontaktin</string>
<string name="DeleteContact">Fshije kontaktin</string>
<string name="Info">Të dhëna</string>
<!--settings view-->
<string name="TextSize">Madhësi shkronjash mesazhi</string>
<string name="UnblockContact">Zhbllokoje kontaktin</string>
<string name="NoBlocked">Ende pa kontakte të bllokuar</string>
<string name="DefaultForNormalMessages">Mesazhe normale</string>
<string name="MessagePreview">Paraparje mesazhesh</string>
<string name="Sound">Tingull</string>
<string name="Vibrate">Dridhu</string>
<string name="ResetAllNotifications">Ktheji krejt njoftimet te parazgjedhjet</string>
<string name="NotificationsAndSounds">Njoftime dhe tinguj</string>
<string name="BlockedContacts">Kontakte të bllokuar</string>
<string name="Default">Parazgjedhje</string>
<string name="ChatBackground">Sfond fjalosjeje</string>
<string name="SendByEnter">Dërgoje me \"Enter\"</string>
<string name="Help">Ndihmë</string>
<string name="Enabled">On</string>
<string name="Disabled">Off</string>
<string name="LedColor">Ngjyrë LED</string>
<string name="Short">E shkurtër</string>
<string name="Long">E gjatë</string>
<string name="RaiseToSpeak">Rriteni që të flisni</string>
<string name="EditName">Përpunoni emrin</string>
<string name="NotificationsPriority">Shiheni</string>
<string name="NotificationsPriorityDefault">Përparësi normale</string>
<string name="NotificationsPriorityHigh">Përparësi e lartë</string>
<string name="NotificationsPriorityMax">Përparësia më lartë</string>
<string name="RepeatNotifications">Ripërsëriti njoftimet</string>
<string name="NotificationsOther">Tjetër</string>
<string name="SmartNotifications">Kufizo njoftimet</string>
<string name="SmartNotificationsSoundAtMost">Maks.</string>
<string name="SmartNotificationsTimes">herë</string>
<string name="SmartNotificationsWithin">brenda</string>
<string name="SmartNotificationsMinutes">minutash</string>
<!--cache view-->
<string name="CacheSettings">Depozitë</string>
<string name="KeepMedia">Mbaje Median</string>
<string name="KeepMediaInfo">Foto, video dhe kartela të tjera prej bisedash në re, që <![CDATA[<b>nuk i keni hapur</b>]]> gjatë kësaj periudhe, do të hiqen prej pajisjes, për të kursyer hapësirë disku.</string>
<string name="KeepMediaForever">Përgjithmonë</string>
<!--passcode view-->
<string name="Passcode">Kyçje Kodkalimi</string>
<string name="ChangePasscode">Ndryshoni Kodkalimin</string>
<string name="ChangePasscodeInfo">Kur rregulloni një kodkalim shtesë, te faqja e bisedave do të shfaqet një ikonë dryni. Prekeni që të kyçet aplikacioni.\n\nShënim: nëse harroni kodkalimin, do tju duhet të fshini dhe ri-instaloni aplikacionin.</string>
<string name="PasscodePIN">PIN</string>
<string name="PasscodePassword">Fjalëkalim</string>
<string name="EnterCurrentPasscode">Jepni kodkalimin tuaj të tanishëm</string>
<string name="EnterNewFirstPasscode">Jepni një kodkalim</string>
<string name="EnterNewPasscode">Jepni kodkalimin tuaj të ri</string>
<string name="EnterYourPasscode">Jepni kodkalimin tuaj</string>
<string name="ReEnterYourPasscode">Rijepeni kodkalimin tuaj të ri</string>
<string name="PasscodeDoNotMatch">Kodkalimet nuk përputhen</string>
<string name="AutoLock">Vetëkyçe</string>
<string name="AutoLockInfo">Kërko kodkalim nëse largohet për njëfarë koe.</string>
<string name="UnlockFingerprint">Shkyçe me shenja gishtash</string>
<string name="FingerprintInfo">Që të vazhdohet, konfirmoni shenja gishtash</string>
<string name="FingerprintNotRecognized">Shenja gishtash që nuk njihen. Riprovoni</string>
<!--photo gallery view-->
<string name="SaveToGallery">Ruaje te \"Galeri\"</string>
<string name="Gallery">Galeri</string>
<string name="AllPhotos">Krejt Fotot</string>
<string name="AllVideo">Krejt Videot</string>
<string name="NoPhotos">Ende pa foto</string>
<string name="NoVideo">Ende pa video</string>
<string name="CropImage">Qetheni figurën</string>
<string name="EditImage">Përpunoni figurën</string>
<string name="Enhance">Përmirësoje</string>
<string name="Highlights">Theksime</string>
<string name="Contrast">Kontrast</string>
<string name="Exposure">Ekspozim</string>
<string name="Warmth">Ngrohtësi</string>
<string name="Saturation">Ngopje</string>
<string name="Shadows">Hij</string>
<string name="Sharpen">Mprehe</string>
<string name="Fade">Zbehe</string>
<string name="Tint">Ngjyrosje</string>
<string name="TintShadows">Hije</string>
<string name="TintHighlights">Theksime</string>
<string name="Curves">Kurba</string>
<string name="CurvesAll">Krejt</string>
<string name="CurvesRed">E kuqe</string>
<string name="CurvesGreen">E gjelbër</string>
<string name="CurvesBlue">Blu</string>
<string name="BlurOff">Off</string>
<string name="BlurLinear">Lineare</string>
<string name="BlurRadial">Radiale</string>
<string name="DiscardChanges">Të hidhen tej ndryshimet></string>
<string name="ClearButton">Pastroje</string>
<string name="PickerPhotos">Foto</string>
<string name="PickerVideo">Video</string>
<!--privacy settings-->
<string name="PrivacySettings">Privatësi dhe siguri</string>
<string name="SecurityTitle">Siguri</string>
<!--edit video view-->
<string name="SendVideo">Dërgoni Video</string>
<!--button titles-->
<string name="Done">U bë</string>
<string name="Open">Hape</string>
<string name="Cancel">Anuloje</string>
<string name="Edit">Përpunoni</string>
<string name="Send">Dërgoje</string>
<string name="CopyToClipboard">Kopjoje në të papastër</string>
<string name="Delete">Fshije</string>
<string name="Forward">Përcille</string>
<string name="FromCamera">Prej kamerës</string>
<string name="FromGalley">Nga \"Galeri\"</string>
<string name="OK">OK</string>
<string name="Crop">Qethe</string>
<!--messages-->
<string name="AttachPhoto">Foto</string>
<string name="AttachVideo">Video</string>
<string name="AttachGif">GIF</string>
<string name="AttachContact">Kontakt</string>
<string name="AttachDocument">Kartelë</string>
<string name="AttachVoiceMessage">Mesazh zanor</string>
<string name="FromSelf">Unë</string>
<!--Alert messages-->
<string name="NoHandleAppInstalled">Asnjë aplikacion nga të instaluarit s\e hap dot llojin \'%1$s\' e kartelave, ju lutemi, që të vazhdohet, instaloni një të tillë.</string>
<string name="ContactAlreadyInGroup">Kontakti gjendet tashmë në këtë grup.</string>
<string name="ForwardMessagesTo">Përcillja mesazhet e përzgjedhur <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="SendMessagesTo">Të dërgohen mesazhet te <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="AreYouSureDeleteThisChat">Të fshihet kjo bisedë? S\do të shfaqet më te lista e bisedave, mesazhet e saj do të mbeten në shërbyes.</string>
<string name="AreYouSureBlockContact">Jeni i sigurt se doni ta bllokoni këtë kontakt?</string>
<string name="AreYouSureDeleteContact">Jeni i sigurt se doni ta fshini këtë kontakt?</string>
<!--permissions-->
<string name="PermissionContacts">Lypset hyrje te kontaktet për tju lidhur me shokët tuaj nga cilado pajisje juaj.</string>
<string name="PermissionStorage">Për dërgim dhe ruajte fotosh, videosh, muzike dhe media të tjera, lypset hyrje te depozita.</string>
<string name="PermissionNoAudio">Për dërgim mesazhesh zanorë, lypset hyrje te mikrofoni.</string>
<string name="PermissionOpenSettings">Rregullime</string>
<!--Intro view-->
<string name="Intro1Headline">Fjalosje Delta</string>
<string name="Intro1Message">Lajmëtari me <![CDATA[<b>publikun më të gjerë</b>]]> në botë.<![CDATA[<br/><b>I lirë</b>]]> dhe <![CDATA[<b>i pavarur</b>]]>.</string>
<string name="Intro2Headline">I pavarur</string>
<string name="Intro2Message"><![CDATA[<b>I pavarur</b>]]> nga kompjutera apo shërbime të huaja. Aplikacioni përdor vetëm shërbyesin tuaj të email-eve.</string>
<string name="Intro3Headline">I shpejtë</string>
<string name="Intro3Message"><![CDATA[<b>Dërgim mesazhesh</b>]]> brenda pak sekondash.<![CDATA[<br/>]]>Ndërfaqe e shpejtë.</string>
<string name="Intro4Headline">I fuqishëm</string>
<string name="Intro4Message">Fjalosje, figura, video, mesazhe audio, etj <![CDATA[<b>Pa kufi</b>]]>. I aftë për punë me shumë klientë.</string>
<string name="Intro5Headline">I lirë</string>
<string name="Intro5Message"><![CDATA[<b>Delta Chat</b>]]> është i lirë, përgjithmonë.<![CDATA[<br/>]]>Me burim të hapët. Pa reklama. Pa pajtime. Pa kyçje brenda një platforme nga tregtues.</string>
<string name="Intro6Headline">I fshehtëzuar</string>
<string name="Intro6Message"><![CDATA[<b>I fshehtëzuar</b>]]> me krejt algoritmet e zakonshëm. Mesazhet mbeten në shërbyesit tuaj.</string>
<string name="Intro7Headline">I besueshëm</string>
<string name="IntroStartMessaging">Filloni të Shkëmbeni Mesazhe</string>
<!--plural-->
<plurals name="Members">
<item quantity="one">%d anëtar</item>
<item quantity="other">%d anëtarë</item>
</plurals>
<plurals name="Contacts">
<item quantity="one">%d kontakte</item>
<item quantity="other">%d kontakte</item>
</plurals>
<plurals name="MeAndMembers">
<item quantity="one">%d anëtar dhe unë</item>
<item quantity="other">%d anëtarë dhe unë</item>
</plurals>
<plurals name="NewMessages">
<item quantity="one">%d mesazh i ri</item>
<item quantity="other">%d mesazhe të rinj</item>
</plurals>
<plurals name="messages">
<item quantity="one">%d mesazh</item>
<item quantity="other">%d mesazhe</item>
</plurals>
<plurals name="AreYouSureDeleteMessages">
<item quantity="one">Të fshihen %d mesazh? Do të fshihet edhe nga shërbyesi.</item>
<item quantity="other">Të fshihen %d mesazhe? Këta do të fshihen edhe nga shërbyesi.</item>
</plurals>
<plurals name="NewMessagesInChats">
<item quantity="one">%1$s në %2$d fjalosje</item>
<item quantity="other">%1$s në %2$d fjalosje</item>
</plurals>
<plurals name="Chats">
<item quantity="one">%d fjalosje</item>
<item quantity="other">%d fjalosje</item>
</plurals>
<plurals name="Minutes">
<item quantity="one">%d minutë</item>
<item quantity="other">%d minuta</item>
</plurals>
<plurals name="Hours">
<item quantity="one">%d orë</item>
<item quantity="other">%d orë</item>
</plurals>
<plurals name="Days">
<item quantity="one">%d ditë</item>
<item quantity="other">%d ditë</item>
</plurals>
<plurals name="Weeks">
<item quantity="one">%d javë</item>
<item quantity="other">%d javë</item>
</plurals>
<plurals name="Months">
<item quantity="one">%d muaj</item>
<item quantity="other">%d muaj</item>
</plurals>
<plurals name="MaxNotifications">
<item quantity="one">E shumta %1$d njoftime brenda %2$s</item>
<item quantity="other">E shumta %1$d njoftime brenda %2$s</item>
</plurals>
<!--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="AccountSettings">Rregullime llogarie</string>
<string name="MyAccount">Llogaria ime</string>
<string name="MyName">Emri im</string>
<string name="MyNameExplain">Emri juaj, si u shfaqet marrësve. Në u lëntë i zbrazët, do të dërgohet vetëm adresa juaj email.</string>
<string name="Password">Fjalëkalim</string>
<string name="SmtpPassword">Fjalëkalim SMTP</string>
<string name="FromAbove">Nga sipër</string>
<string name="SmtpLoginname">Emër hyrjeje për SMTP</string>
<string name="SmtpPort">Portë SMTP</string>
<string name="Automatic">Automatike</string>
<string name="ImapServer">Shërbyes IMAP</string>
<string name="ImapLoginname">Emër hyrjeje për IMAP</string>
<string name="SmtpServer">Shërbyes SMTP</string>
<string name="ImapPort">Portë IMAP</string>
<string name="InboxHeadline">Të marrë</string>
<string name="OutboxHeadline">Të dërguar</string>
<string name="MyAccountExplain">Për furnizues të njohur shërbimesh email, rregullimet shtesë përcaktohen vetvetiu.</string>
<string name="MyAccountExplain2" >Ndonjëherë, <![CDATA[<b>]]>IMAP lypset të aktivizohet<![CDATA[</b>]]> te pjesa e dukshme e sistemit email web.\n\nNëse hasni probleme, këshillohuni me furnizuesin e email-it ose me shokë tuajt.</string>
<string name="AccountNotConfigured">Llogari e paformësuar</string>
<string name="AboutThisProgram">Mbi Delta Chat-in</string>
<string name="NotSet">E papërcaktuar</string>
<string name="NewChat">Fjalosje e re</string>
<string name="Deaddrop">Kërkesa kontakti</string>
<string name="DeaddropInChatlist">Shfaq te listë fjalosjesh kërkesa kontakti</string>
<string name="AskStartChatWith">Bisedoni me <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="DeaddropHint">Prekni shigjetat përgjigje që të nisni të bisedoni.</string>
<string name="NotYetImplemented">Ky funksion s’është i passhëm ose është jo i plotë</string>
<string name="DefaultStatusText">Dërguar me Lajmëtarin tim Delta Chat: https://delta.chat</string>
<string name="Name" >Emër</string>
<string name="EmailAddress">Adresë email</string>
<string name="CannotDeleteContact">Sfshihen dot kontakte në përdorim, në vend të kësaj bëni bllokim kontakti.</string>
<string name="BadEmailAddress">Adresë email e gabuar</string>
<string name="ContactCreated">Kontakti u krijua</string>
<string name="ViewProfile">Shihni profilin</string>
<!-- Translators: please use a very short string here, it should not much longer than
the string needed for video time+size (0:00, 12,3 Mib) -->
<string name="OneMoment">Një sekondë…</string>
<string name="NoChatsHelp">Nisni të shkëmbeni mesazhe duke shtypur butonin \"Fjalosje e re\" poshtë djathtas, ose prekni butonin \"Menu\" për më tepër mundësi.</string>
<string name="Intro7Message"><![CDATA[<b>Delta Chat</b>]]> është i parrezik për përdorim në biznes, i përputhshëm dhe i bazuar në standarde.</string>
<string name="InviteMenuEntry">Dërgoni ftesa</string>
<string name="InviteText">Tani përdor Delta Chat-in - %1$s - mund të dërgoni mesazh te %2$s</string>
<string name="AdvancedSettings">Rregullime të mëtejshme</string>
<string name="AskResetNotifications">Të kthehen te parazgjedhjet krejt rregullimet mbi njoftime dhe tinguj për faqen e tanishme, kontaktet dhe grupet?</string>
<string name="AttachFiles">Bashkëngjitni kartela</string>
<string name="ErrGroupNameEmpty">Ju lutemi, jepni një emër për grupin.</string>
<string name="MsgNewGroupDraftHint">Hartoni mesazhin e parë, duke u lejuar të tjerëve të përgjigjen brenda këtij grupi.\n\n• S\ka problem që Delta Chat-in s\e përdorin tërë anëtarët.\n\n• Dërgimi i mesazhit të parë mund të dojë pak kohë.</string>
<string name="MsgNewGroupDraft">Tungjatjeta, sapo krijova grupin \"%1$s\" për ne.</string>
<string name="MsgGroupNameChanged">Emri i grupit ndryshoi nga \"%1$s\" në \"%2$s\".</string>
<string name="MsgGroupImageChanged">Figura e grupit ndryshoi.</string>
<string name="MsgMemberAddedToGroup">U shtua anëtari %1$s.</string>
<string name="MsgMemberRemovedFromToGroup">U hoq anëtari %1$s.</string>
<string name="AskAddMemberToGroup">Të shtohet <![CDATA[<b>]]>%1$s<![CDATA[</b>]]> te grupi?</string>
<string name="AskRemoveMemberFromGroup">Të hiqet <![CDATA[<b>]]>%1$s<![CDATA[</b>]]> nga grupi?</string>
<string name="ErrSelfNotInGroup">Që të kryeni këtë veprim, duhet të jeni një anëtar i grupit.</string>
<string name="MsgGroupLeft">Grupi u la.</string>
<string name="NoMessagesHint">Dërgoje mesazhin te <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>:\n\n• S\ka problem nëse <![CDATA[<b>]]>%2$s<![CDATA[</b>]]> nuk përdor Delta Chat-in.\n\n• Dërgimi i mesazhit të parë mund të dojë pak kohë.</string>
<string name="SendNRcvReadReceipts">Merrni dhe dërgoni fatura kthimesh</string>
<string name="PreferE2EEncryption">Parapëlqe fshehtëzim skaj-më-skaj</string>
<string name="E2EManagePrivateKeys">Administroni kyçe privatë</string>
<string name="E2ECompareKeys">Krahasoni kyçe</string>
<string name="ForwardToTitle">Përcille te…</string>
<string name="SelectContact">Zgjidhni një kontakt</string>
<string name="DoneHint">U bë.</string>
<string name="FileNotFound">Su gjet dot %1$s.</string>
<string name="Error">Gabim: %1$s</string>
<string name="NoNetwork">Rrjet i pakapshëm.</string>
<string name="Audio">Audio</string>
<string name="PleaseCutVideoToMaxSize">Ju lutemi, prijeni videon në një madhësi më të vogël se %1$s.</string>
<string name="PermNotificationTitle">I lidhur te %1$s</string>
<string name="PermNotificationText">Po pritet për mesazhe…</string>
<string name="SettingsFor">Rregullime për %1$s</string>
<string name="AutoplayGifs">Vetëluaji GIF-et</string>
<string name="HelpUrl">https://delta.chat/en/help</string>
<string name="EncryptedMessage">Mesazh i fshehtëzuar</string>
<string name="Encryption">Fshehtëzim</string>
<string name="EncrinfoE2E">U aktivizua fshehtëzimi skaj-më-skaj.</string>
<string name="EncrinfoE2EExplain">Nëse te pajisja tjetër përputhen krejt shenjat e gishtave, lidhja është e parrezik.</string>
<string name="EncrinfoTransport">Shpërngulje-fshehtëzim të paktën deri te shërbyesi im.</string>
<string name="EncrinfoNone">Pa fshehtëzim te shërbyesi im.</string>
<string name="EncrinfoNoE2EExplain">Fshehtëzimi skaj-më-skaj do të përdoret kur edhe nga marrësi përdoret Delta Chat ose tjetër aplikacion Autocrypt.</string>
<string name="EncrinfoFingerprints">Shenja gishtash</string>
<string name="Backup">Kopjeruajtje</string>
<string name="ImportBackupExplain2">Që të importohet një kopjeruajtje, kopjojeni kopjeruajtjen te <![CDATA[<i>]]>%1$s<![CDATA[</i>]]> dhe ri-instaloni aplikacionin.</string>
<string name="ReadReceiptMailBody">Kjo është një faturë kthimi për mesazhin \"%1$s\".\n\nKjo faturë kthimi dëshmon vetëm se mesazhi u shfaq te pajisja e marrësit. S\ka garanci që marrësi ta ketë lexuar lëndën e mesazhit.</string>
<string name="ReadReceipt">Faturë kthimi</string>
<string name="NameAndStatus">Emër dhe gjendje</string>
<string name="MyStatus">Gjendja ime</string>
<string name="MyStatusExplain">Veç vendesh të tjera, gjendja tregohet edhe te poshtëshënime email-esh.</string>
<string name="MsgGroupImageDeleted">Figura e grupit u fshi.</string>
<string name="AskDeleteGroupImage">Jeni të sigurt se doni të fshihet figura e grupit?\n\nKjo do të prekë krejt pajisjet e krejt anëtarëve të grupit.</string>
<string name="ExportImportHeader">Eksportim dhe importim</string>
<string name="ImportExportExplain">Kartelat e eksportuara do të përmbajnë kyçe private! Mbajini në një vend të parrezik, ose fshijini sa më shpejt të jetë e mundur.</string>
<string name="EnterPasswordToContinue">Që të vazhdohet, jepni fjalëkalimin për %1$s:</string>
<string name="IncorrectPassword">Fjalëkalim i pasaktë.</string>
<string name="ImportBackupAsk">U gjet kopjeruajtje te <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>.\n\nDoni të importohet dhe të përdoren krejt të dhënat dhe rregullimet prej saj?</string>
<string name="ImportBackup">Importoje kopjeruajtjen</string>
<string name="NoBackupFound">S\u gjetën kopjeruajtje.\n\nKopjojeni kopjeruajtjen te <![CDATA[<i>]]>%1$s<![CDATA[</i>]]> dhe riprovoni. Ose, shtypni \"Nisni të shkëmbeni mesazhe\" që të ecni sipas procesit normal të rregullimit.</string>
<string name="FilesSuccessfullyExported">Kartelat u eksportuan te <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>.</string>
<string name="ExportBackup">Eksporto kopjeruajtje</string>
<string name="ExportPrivateKeys">Eksporto kyçe private</string>
<string name="ImportPrivateKeys">Importo kyçe private</string>
<string name="ImportPrivateKeysAsk2">Të importohen kyçe privatë prej <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>?\n\n• Kyçet private ekzistuese nuk do të fshihen\n\n• Si kyç i ri parazgjedhje do të përdoret kyçi i fundit i importuar</string>
<string name="NoRecentEmoji">Këtu do të shfaqen emoji-t e përdorura së fundi.</string>
<string name="E2eeOffBecauseOfUser">Për aktivizim të fshehtëzimit skaj-më-skaj, i vini shenjë mundësisë përkatëse te rregullimet tuaja.</string>
<string name="E2eeOffBecauseOfRecipient">Fshehtëzimi skaj-më-skaj do të përdoret nëse e aktivizon edhe pala tjetër.</string>
<string name="NotNow">Jo tani</string>
<string name="ArchiveChat">Arkivoje bisedën</string>
<string name="UnarchiveChat">Çarkivoje bisedën</string>
<string name="ArchivedChats">Biseda të arkivuara</string>
<string name="Archived">E arkivuar</string>
<string name="LeaveGroup">Braktiseni grupin</string>
<string name="AskLeaveGroup">Jeni i sigurt se doni ta braktisni grupin?</string>
<string name="Never">Kurrë</string>
</resources>
@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="AppName">Делта ћаскање</string>
<!--chats view-->
<string name="Settings">Поставке</string>
<string name="NewGroup">Нова група</string>
<string name="NoResult">Нема резултата.</string>
<string name="NoChats">Још нема ћаскања.</string>
<string name="DeleteChat">Обриши ћаскање</string>
<string name="SelectChat">Изаберите ћаскање…</string>
<string name="Search">Претрага</string>
<string name="MuteNotifications">Искључи обавештења</string>
<string name="MuteFor">Искључи %1$s</string>
<string name="Draft">Нацрт</string>
<!--documents view-->
<string name="SelectFile">Изабери фајл</string>
<string name="ErrorHint">Непозната грешка</string>
<string name="AccessError">Грешка приступа</string>
<string name="NoFiles">Још нема фајлова…</string>
<string name="NotMounted">Складиште није монтирано</string>
<string name="InternalStorage">Унутрашње складиште</string>
<string name="ExternalStorage">Спољашње складиште</string>
<string name="SdCard">СД картица</string>
<string name="Folder">Фасцикла</string>
<!--chat view-->
<string name="ChatGallery">Галерија</string>
<string name="ChatCamera">Камера</string>
<string name="NoMessages">Нема порука.</string>
<string name="ForwardedMessage">Прослеђена порука</string>
<string name="From">Од</string>
<string name="NoRecent">Нема недавних</string>
<string name="TypeMessage">Порука</string>
<string name="SlideToCancel">ПРЕВУЦИТЕ ЗА ОТКАЗИВАЊЕ</string>
<string name="SaveToDownloads">Сачувај у преузимања</string>
<string name="SaveToMusic">Сачувај у музику</string>
<string name="Share">Дели</string>
<string name="SendItems">Пошаљи %1$s</string>
<!--notification-->
<string name="Reply">Одговори</string>
<!--group info view-->
<string name="AddMember">Додај члана</string>
<string name="Notifications">Обавештења</string>
<string name="RemoveMember">Уклони члана</string>
<!--contact info view-->
<string name="NewContactTitle">Нови контакт</string>
<string name="BlockContact">Блокирај контакт</string>
<string name="DeleteContact">Обриши контакт</string>
<string name="Gallery">Галерија</string>
<string name="PermissionOpenSettings">Поставке</string>
<!--Intro view-->
<string name="Intro1Headline">Делта ћаскање</string>
</resources>
@@ -80,6 +80,7 @@
<string name="ResetAllNotifications">அனைத்து அறிவுப்புக்களையும் மீட்டமைக்கவும்</string>
<string name="NotificationsAndSounds">அறிவுப்புகள் மற்றும் ஓசைகள்</string>
<string name="BlockedContacts">தடுக்கபட்ட தொடர்புகள்</string>
<string name="Default">இயல்புநிலை</string>
<string name="OnlyIfSilent">அமைதியாக இருந்தால் மட்டும்</string>
<string name="ChatBackground">அரட்டை பின்புலம்</string>
<string name="SendByEnter">\"enter\" மூலம் அனுப்பவும் </string>
@@ -104,6 +105,7 @@
<string name="SmartNotificationsTimes">வேளைகள் </string>
<string name="Gallery">காட்சி கூடம் </string>
<string name="BlurOff">நிறுத்தவும்</string>
<string name="PermissionOpenSettings">அமைப்புகள் </string>
<!--Intro view-->
<string name="Intro1Headline">டெல்டா அரட்டை </string>
</resources>
@@ -195,13 +195,14 @@
<string name="NoHandleAppInstalled">మీ దగ్గర ఈ ఫైల్ \'%1$s\' రకాన్ని గుర్తించే అప్లికేషన్లు లేవు, దయచేసి గుర్తించేదాన్ని ఒకటి ఇంస్టాల్ చేసి కొనసాగండి </string>
<string name="ContactAlreadyInGroup">ఈ పరిచయం ఇప్పటికే ఈ సమూహం లో ఉంది.</string>
<string name="ForwardMessagesTo">సందేశాలు <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>ఫార్వర్డ్ చేయాలా?</string>
<string name="SendMessagesTo">సందేశాలు <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>కు పంపాలా?</string>
<string name="SendMessagesTo">సందేశాలు <![CDATA[ఛ్డాటా[<b>]]>%1$s<![CDATA[</b>]]>కు పంపాలా?</string>
<string name="AreYouSureDeleteThisChat">ఈ చాట్ ను తొలగించాలా? ఈ చాట్ ఇకమీదట చాట్ లిస్ట్ లో చూపించబడదు, సందేశాలు మాత్రం సర్వర్ లో ఉంటాయి.</string>
<string name="AreYouSureBlockContact">మీరు ఈ పరిచయాన్ని రద్దుచేయాలని నిర్ణయించుకున్నారా?</string>
<string name="AreYouSureDeleteContact">మీరు ఈ పరిచయాన్ని తొలగించాలని నిర్ణయించుకున్నారా?</string>
<!--permissions-->
<string name="PermissionContacts">డెల్టా చాట్ మీ స్నేహితులతో ఎల్లప్పుడూ కనెక్ట్ అయి ఉండడానికి మీ పరిచాయాల యాక్సస్ కు అనుమతించాలి. </string>
<string name="PermissionStorage">డెల్టా చాట్ లొ మీరు వీడియోలు, చిత్రాలు, సంగీతం, మరియు వేరే మీడియా పంపడానికి, భద్రపరుచుకోడానికి మీ డివైజ్ స్టొరేజ్ యాక్సస్ కావాలి.</string>
<string name="PermissionOpenSettings">సెట్టింగులు</string>
<!--Intro view-->
<string name="Intro1Headline">డెల్టా చాట్</string>
<string name="Password">పాస్వర్డ్</string>
@@ -13,6 +13,7 @@
<string name="SelectChat">Söyleşi seç ...</string>
<string name="Search">Arama</string>
<string name="MuteNotifications">Bildirimleri sessize al</string>
<string name="MuteFor">%1$s için sessiz</string>
<string name="UnmuteNotifications">Sessizden çıkarma</string>
<string name="Draft">Taslak</string>
<string name="AttachMusic">Müzik</string>
@@ -38,10 +39,15 @@
<string name="SaveToMusic">Müziğe kaydet</string>
<string name="Share">Paylaş</string>
<string name="SendItems">%1$sgönder</string>
<string name="ClearRecentEmoji">En son duygu simgeleri temizlensin mi?</string>
<string name="AddShortcut">Ana ekrana gereç ekleme</string>
<string name="ShortcutAdded">Gereç ana ekrana eklendi</string>
<!--notification-->
<string name="Reply">Yanıtlama</string>
<string name="ReplyToGroup">%1$se yanıt ver</string>
<string name="ReplyToContact">%1$se yanıt ver</string>
<!--contacts view-->
<string name="NoContacts">Henüz kişi yok.</string>
<string name="EnterGroupNamePlaceholder">Grup adı girin</string>
<!--group info view-->
<string name="AddMember">Üye ekle</string>
@@ -67,9 +73,11 @@
<string name="BlockedContacts">Engellenmiş kişiler</string>
<string name="Default">Öntanımlı</string>
<string name="OnlyIfSilent">Sadece sessizse</string>
<string name="ChatBackground">Söyleşi arkaplanı</string>
<string name="Help">Yardım</string>
<string name="Enabled"></string>
<string name="Disabled">Kapat</string>
<string name="LedColor">LED rengi</string>
<string name="Short">Kısa</string>
<string name="Long">Uzun</string>
<string name="EditName">Adı düzenle</string>
@@ -79,7 +87,9 @@
<string name="NotificationsPriorityMax">En yüksek öncelik</string>
<string name="RepeatNotifications">Bildirimleri yinele</string>
<string name="NotificationsOther">Diğer</string>
<string name="SmartNotifications">Sınır bildirimleri</string>
<string name="DirectShare">Doğrudan paylaşım</string>
<string name="DirectShareInfo">Son söyleşileri paylaşma menüsünde göster</string>
<!--cache view-->
<string name="CacheSettings">Depolama</string>
<string name="KeepMedia">Ortamı tut</string>
@@ -108,14 +118,18 @@
<string name="NoVideo">Henüz vidyo yok</string>
<string name="CropImage">Görüntüyü kırp</string>
<string name="EditImage">Görüntüyü düzenle</string>
<string name="Enhance">Artırma</string>
<string name="Highlights">Vurgulama</string>
<string name="Contrast">Keskinlik</string>
<string name="Exposure">Poz</string>
<string name="Warmth">Sıcaklık</string>
<string name="Saturation">Renk doygunluğu</string>
<string name="Vignette">Süsleme</string>
<string name="Shadows">Gölgeler</string>
<string name="Sharpen">Keskinleştirme</string>
<string name="Fade">Soldurma</string>
<string name="TintShadows">GÖLGELER</string>
<string name="TintShadows">Gölgeler</string>
<string name="TintHighlights">Vurgulamalar</string>
<string name="Curves">Eğriler</string>
<string name="CurvesAll">HEPSİ</string>
<string name="CurvesRed">KIRMIZI</string>
@@ -152,39 +166,117 @@
<string name="AttachGif">GİF</string>
<string name="AttachDocument">Dosya</string>
<string name="AttachVoiceMessage">Sesli ileti</string>
<string name="PermissionOpenSettings">Ayarları değiştir</string>
<string name="AreYouSureBlockContact">Bu kişiyi engellemek istediğinizden emin misiniz?</string>
<string name="AreYouSureDeleteContact">Bu kişiyi silmek istediğizden emin misiniz?</string>
<string name="PermissionOpenSettings">Ayarlar</string>
<!--Intro view-->
<string name="Intro1Headline">Delta Chat</string>
<string name="Intro2Headline">Bağımsız</string>
<string name="Intro3Headline">Hızlı</string>
<string name="Intro4Headline">Muhteşem</string>
<string name="Intro6Headline">Güvenli</string>
<string name="formatterYear">dd.MM.yyyy</string>
<string name="formatterDay24H">HH:mm</string>
<!--plural-->
<plurals name="Members">
<item quantity="one">%düye</item>
<item quantity="other">%d üye</item>
</plurals>
<plurals name="Contacts">
<item quantity="one">%d kişi</item>
<item quantity="other">%d kişi</item>
</plurals>
<plurals name="MeAndMembers">
<item quantity="one">%d üye ve ben</item>
<item quantity="other">%d üye ve ben</item>
</plurals>
<plurals name="NewMessages">
<item quantity="one">%d yeni ileti</item>
<item quantity="other">%dyeni ileti</item>
</plurals>
<plurals name="messages">
<item quantity="one">%dileti</item>
<item quantity="other">%dileti</item>
</plurals>
<plurals name="Chats">
<item quantity="one">%d söyleşi</item>
<item quantity="other">%dsöyleşi</item>
</plurals>
<plurals name="Minutes">
<item quantity="one">%d dakika</item>
<item quantity="other">%d dakika</item>
</plurals>
<plurals name="Hours">
<item quantity="one">%d saat</item>
<item quantity="other">%d saat</item>
</plurals>
<plurals name="Days">
<item quantity="one">%d gün</item>
<item quantity="other">%d gün</item>
</plurals>
<plurals name="Weeks">
<item quantity="one">%d hafta</item>
<item quantity="other">%d hafta</item>
</plurals>
<plurals name="Months">
<item quantity="one">%d ay</item>
<item quantity="other">%d ay</item>
</plurals>
<string name="formatterYear">gg.AA.yyyy</string>
<string name="formatterDay24H">SS:dd</string>
<string name="AccountSettings">Hesap ayarları</string>
<string name="MyAccount">Hesabım</string>
<string name="MyName">Adım</string>
<string name="Password">Parola</string>
<string name="SmtpPassword">STMP parolası</string>
<string name="FromAbove">Yukarıdan</string>
<string name="SmtpLoginname">STMP giriş adı</string>
<string name="SmtpPort">STMP bağlanma noktası</string>
<string name="Automatic">Otomatik</string>
<string name="ImapServer">İMAP sunucusu</string>
<string name="ImapLoginname">İMAP giriş adı</string>
<string name="SmtpServer">STMP sunucusu</string>
<string name="ImapPort">İMAP bağlanma noktası</string>
<string name="InboxHeadline">Gelen kutusu</string>
<string name="OutboxHeadline">Gönderilenler</string>
<string name="AccountNotConfigured">Hesap düzenlenmedi</string>
<string name="AboutThisProgram">Delta Chat Hakkında</string>
<string name="NewChat">Yeni söyleşi</string>
<string name="MuteAlways">Sürekli sessiz</string>
<string name="Name" >Ad</string>
<string name="EmailAddress">E-posta adresi</string>
<string name="ViewProfile">Profil görüntüsü</string>
<string name="InviteMenuEntry">Davetiye gönderin</string>
<string name="AdvancedSettings">Gelişmiş ayarlar</string>
<string name="AttachFiles">Dosyaları iliştir</string>
<string name="ErrGroupNameEmpty">Grup için bir ad girin</string>
<string name="MsgGroupImageChanged">Grup resmi değişti.</string>
<string name="MsgMemberAddedToGroup">%1$s üye eklendi</string>
<string name="MsgMemberRemovedFromToGroup">%1$s üye silindi.</string>
<string name="E2ECompareKeys">Anahtarları karşılaştır</string>
<string name="SelectContact">Bir kişi seçin</string>
<string name="DoneHint">Tamam.</string>
<string name="NoNetwork">Ağ kullanılamıyor.</string>
<string name="Audio">Ses</string>
<string name="PermNotificationText">İletiler bekliyor ...</string>
<string name="SettingsFor">%1$siçin ayarlar</string>
<string name="AutoplayGifs">GİFleri otomatik oynat</string>
<string name="HelpUrl">https://delta.chat/en/help</string>
<string name="EncryptedMessage">Şifrelenmiş ileti</string>
<string name="EncrinfoE2E">Uçtan uca şifreleme etkin</string>
<string name="EncrinfoFingerprints">Parmak izleri</string>
<string name="Backup">Yedekleme</string>
<string name="NameAndStatus">Ad ve durum</string>
<string name="MyStatus">Durumum</string>
<string name="MsgGroupImageDeleted">Grup resmi silindi</string>
<string name="ExportImportHeader">Dışa aktarım ve içe aktarım</string>
<string name="IncorrectPassword">Geçersiz parola</string>
<string name="ImportBackup">Yedeklemeyi içe aktar</string>
<string name="ExportBackup">Yedeklemeyi dışa aktar</string>
<string name="ExportPrivateKeys">Özel anahtarları dışa aktar</string>
<string name="ImportPrivateKeys">Özel anahtarları içe aktar</string>
<string name="NoRecentEmoji">Son kullanılan duygu simgeleri burada gösterilecek.</string>
<string name="NotNow">Şimdi değil</string>
<string name="ArchivedChats">Arşivlenmiş söyleşiler</string>
<string name="Archived">Arşivlenmiş</string>
<string name="LeaveGroup">Gruptan ayrıl</string>
<string name="Never">Asla</string>
</resources>
@@ -352,7 +352,7 @@
<string name="InviteMenuEntry">Надіслати запрошення</string>
<string name="InviteText">Я користаюся оповісником Delta Chat -%1$s- ви можети написати мені на%2$s</string>
<string name="AdvancedSettings">Просунуті налаштування</string>
<string name="AskResetNotifications" >Скинути всі налаштування оповіщень та звуки на цій сторінці, а також у контактах та спільнотах?</string>
<string name="AskResetNotifications">Скинути всі налаштування оповіщень та звуки на цій сторінці, а також у контактах та спільнотах?</string>
<string name="AttachFiles">Долучити файли</string>
<string name="ErrGroupNameEmpty">Упишіть назву спільноти</string>
<string name="MsgNewGroupDraftHint">Напишіть перше повідомлення аби інші змогли відповідати у спільноті.\n\n• Нічого страшного, якщо не всі учасники користаються Delta Chatом.\n\n• Доставлення першого повідомлення відбере лише мить.</string>
+77 -65
View File
@@ -17,22 +17,22 @@
<string name="UnmuteNotifications">Unmute</string>
<string name="Draft">Draft</string>
<!--audio view-->
<string name="NoAudio">Please add files to the music library on your device to see them here.</string>
<string name="NoAudio">Files added to the music library of your device will appear here.</string>
<string name="AttachMusic">Music</string>
<!--documents view-->
<string name="SelectFile">Select File</string>
<string name="FreeOfTotal">Free %1$s of %2$s</string>
<string name="FreeOfTotal">%1$s of %2$s free</string>
<string name="ErrorHint">Unknown error</string>
<string name="AccessError">Access error</string>
<string name="NoFiles">No files yet …</string>
<string name="NotMounted">Storage not mounted</string>
<string name="UsbActive">USB transfer active</string>
<string name="UsbActive">USB transfer in progress</string>
<string name="InternalStorage">Internal Storage</string>
<string name="ExternalStorage">External Storage</string>
<string name="SystemRoot">System Root</string>
<string name="SdCard">SD Card</string>
<string name="Folder">Folder</string>
<string name="GalleryInfo">To send images without compression</string>
<string name="GalleryInfo">To send uncompressed images</string>
<!--chat view-->
<string name="ChatGallery">Gallery</string>
<string name="ChatCamera">Camera</string>
@@ -41,9 +41,9 @@
<string name="From">From</string>
<string name="NoRecent">No recent</string>
<string name="TypeMessage">Message</string>
<string name="SlideToCancel">SLIDE TO CANCEL</string>
<string name="SaveToDownloads">Save to downloads</string>
<string name="SaveToMusic">Save to music</string>
<string name="SlideToCancel">Slide to cancel</string>
<string name="SaveToDownloads">Save to \"Downloads\"</string>
<string name="SaveToMusic">Save to \"Music\"</string>
<string name="Share">Share</string>
<string name="SendItems">Send %1$s</string>
<string name="ClearRecentEmoji">Clear recent emoji?</string>
@@ -68,11 +68,11 @@
<string name="DeleteContact">Delete contact</string>
<string name="Info">Info</string>
<!--settings view-->
<string name="TextSize">Messages font size</string>
<string name="TextSize">Font size of messages</string>
<string name="UnblockContact">Unblock contact</string>
<string name="NoBlocked">No blocked contacts yet</string>
<string name="DefaultForNormalMessages">Normal messages</string>
<string name="MessagePreview">Message preview</string>
<string name="MessagePreview">Preview message</string>
<string name="DefaultForGroupMessages">Group messages</string>
<string name="Sound">Sound</string>
<string name="InAppNotifications">In-app notifications</string>
@@ -81,14 +81,14 @@
<string name="NotificationsAndSounds">Notifications and sounds</string>
<string name="BlockedContacts">Blocked contacts</string>
<string name="Default">Default</string>
<string name="OnlyIfSilent">Only if silent</string>
<string name="OnlyIfSilent">Only when silent</string>
<string name="ChatBackground">Chat background</string>
<string name="SendByEnter">Send by "enter"</string>
<string name="SendByEnter">Send with Enter key</string>
<string name="Help">Help</string>
<string name="Enabled">On</string>
<string name="Disabled">Off</string>
<string name="LedColor">LED color</string>
<string name="BadgeNumber">Show count on icon if possible</string>
<string name="BadgeNumber">Use icon to keep count if possible</string>
<string name="Short">Short</string>
<string name="Long">Long</string>
<string name="RaiseToSpeak">Raise to speak</string>
@@ -101,7 +101,7 @@
<string name="NotificationsOther">Other</string>
<string name="InChatSound">In-chat sounds</string>
<string name="SmartNotifications">Limit notifications</string>
<string name="SmartNotificationsSoundAtMost">Sound at most</string>
<string name="SmartNotificationsSoundAtMost">Max.</string>
<string name="SmartNotificationsTimes">times</string>
<string name="SmartNotificationsWithin">within</string>
<string name="SmartNotificationsMinutes">minutes</string>
@@ -126,11 +126,11 @@
<string name="PasscodeDoNotMatch">Passcodes do not match</string>
<string name="AutoLock">Autolock</string>
<string name="AutoLockInfo">Require passcode if away for a time.</string>
<string name="UnlockFingerprint">Unlock with Fingerprint</string>
<string name="UnlockFingerprint">Unlock with fingerprint</string>
<string name="FingerprintInfo">Confirm fingerprint to continue</string>
<string name="FingerprintNotRecognized">Fingerprint not recognized. Try again</string>
<!--photo gallery view-->
<string name="SaveToGallery">Save to gallery</string>
<string name="SaveToGallery">Save to \"Gallery\"</string>
<string name="Of">%1$d of %2$d</string>
<string name="Gallery">Gallery</string>
<string name="AllPhotos">All Photos</string>
@@ -151,13 +151,13 @@
<string name="Sharpen">Sharpen</string>
<string name="Fade">Fade</string>
<string name="Tint">Tint</string>
<string name="TintShadows">SHADOWS</string>
<string name="TintHighlights">HIGHLIGHTS</string>
<string name="TintShadows">Shadows</string>
<string name="TintHighlights">Highlights</string>
<string name="Curves">Curves</string>
<string name="CurvesAll">ALL</string>
<string name="CurvesRed">RED</string>
<string name="CurvesGreen">GREEN</string>
<string name="CurvesBlue">BLUE</string>
<string name="CurvesAll">All</string>
<string name="CurvesRed">Red</string>
<string name="CurvesGreen">Green</string>
<string name="CurvesBlue">Blue</string>
<string name="Blur">Blur</string>
<string name="BlurOff">Off</string>
<string name="BlurLinear">Linear</string>
@@ -181,10 +181,10 @@
<string name="Delete">Delete</string>
<string name="Forward">Forward</string>
<string name="FromCamera">From camera</string>
<string name="FromGalley">From gallery</string>
<string name="FromGalley">From \"Gallery\"</string>
<string name="Set">Set</string>
<string name="OK">OK</string>
<string name="Crop">CROP</string>
<string name="Crop">Crop</string>
<!--messages-->
<string name="AttachPhoto">Photo</string>
<string name="AttachVideo">Video</string>
@@ -194,24 +194,24 @@
<string name="AttachVoiceMessage">Voice message</string>
<string name="FromSelf">Me</string>
<!--Alert messages-->
<string name="NoHandleAppInstalled">You don\'t have applications that can handle the file type \'%1$s\', please install one to continue</string>
<string name="ContactAlreadyInGroup">This contact is already in this group.</string>
<string name="NoHandleAppInstalled">No installed app could open the filetype \'%1$s\', please install one to continue.</string>
<string name="ContactAlreadyInGroup">The contact is already in this group.</string>
<string name="ForwardMessagesTo">Forward selected messages to <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="SendMessagesTo">Send messages to <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="AreYouSureDeleteThisChat">Delete this chat? The chat will no longer be shown in the chat list, the messages will stay on the server.</string>
<string name="AreYouSureDeleteThisChat">Delete this chat? It will no longer be shown in the chat list, it\'s messages will remain on the server.</string>
<string name="AreYouSureBlockContact">Are you sure you want to block this contact?</string>
<string name="AreYouSureDeleteContact">Are you sure you want to delete this contact?</string>
<!--permissions-->
<string name="PermissionContacts">Delta Chat needs access to your contacts so that you can connect with your friends across all your devices.</string>
<string name="PermissionStorage">Delta Chat needs access to your storage so that you can send and save photos, videos, music and other media.</string>
<string name="PermissionNoAudio">Delta Chat needs access to your microphone so that you can send voice messages.</string>
<string name="PermissionOpenSettings">Adapt settings</string>
<string name="PermissionContacts">Access to contacts needed to connect with your friends across all your devices.</string>
<string name="PermissionStorage">Storage access needed to send and save photos, videos, music, and other media.</string>
<string name="PermissionNoAudio">Microphone access needed to send voice messages.</string>
<string name="PermissionOpenSettings">Settings</string>
<!--Intro view-->
<string name="Intro1Headline">Delta Chat</string>
<string name="Intro1Message">The messenger with the <![CDATA[<b>largest range</b>]]> in the world.<![CDATA[<br/><b>Free</b>]]> and <![CDATA[<b>safe</b>]]>.</string>
<string name="Intro1Message">The messenger with the <![CDATA[<b>broadest audience</b>]]> in the world.<![CDATA[<br/><b>Free</b>]]> and <![CDATA[<b>independent</b>]]>.</string>
<string name="Intro2Headline">Independent</string>
<string name="Intro2Message"><![CDATA[<b>No dependencies</b>]]> on foreign computers or services. The app only uses your email-server.</string>
<string name="Intro2Message"><![CDATA[<b>Independent</b>]]> of foreign computers or services. The app only uses your email-server.</string>
<string name="Intro3Headline">Fast</string>
<string name="Intro3Message"><![CDATA[<b>Push-messages</b>]]> in seconds.<![CDATA[<br/>]]>Rapid interface.</string>
@@ -222,7 +222,7 @@
<string name="Intro5Headline">Free</string>
<string name="Intro5Message"><![CDATA[<b>Delta Chat</b>]]> is free forever.<![CDATA[<br/>]]>Open-source. No ads. No subscription. No vendor lock-in.</string>
<string name="Intro6Headline">Safe</string>
<string name="Intro6Headline">Encrypted</string>
<string name="Intro6Message"><![CDATA[<b>Encrypted</b>]]> with all common algorithms. Messages stay on your servers.</string>
<string name="Intro7Headline">Trustworthy</string>
@@ -238,8 +238,8 @@
<item quantity="other">%d contacts</item>
</plurals>
<plurals name="MeAndMembers">
<item quantity="one">Me and %d member</item>
<item quantity="other">Me and %d members</item>
<item quantity="one">%d member and me</item>
<item quantity="other">%d members and me</item>
</plurals>
<plurals name="NewMessages">
<item quantity="one">%d new message</item>
@@ -250,11 +250,11 @@
<item quantity="other">%d messages</item>
</plurals>
<plurals name="AreYouSureDeleteMessages">
<item quantity="one">Delete %d message? The message will also be deleted from the server.</item>
<item quantity="other">Delete %d messages? The messages will also be deleted from the server.</item>
<item quantity="one">Delete %d message? It will also be deleted from the server.</item>
<item quantity="other">Delete %d messages? These will also be deleted from the server.</item>
</plurals>
<plurals name="NewMessagesInChats">
<!-- Translators: the first string placeholder "%s" gets replaced with the
<!-- Translators: The first string placeholder "%s" gets replaced with the
text "%d new messages", so the complete sentence would be e.g.
"4 new messages in 2 chats". -->
<item quantity="one">%1$s in %2$d chat</item>
@@ -285,7 +285,7 @@
<item quantity="other">%d months</item>
</plurals>
<plurals name="MaxNotifications">
<!-- Translators: the second string placeholder "%s" gets replaced with the
<!-- Translators: The second string placeholder "%s" gets replaced with the
text "%d minutes", so the complete sentence would be e.g.
"At most 8 notifications within 3 minutes". -->
<item quantity="one">At most %1$d notification within %2$s</item>
@@ -304,21 +304,21 @@
<string name="AccountSettings">Account settings</string>
<string name="MyAccount">My account</string>
<string name="MyName">My name</string>
<string name="MyNameExplain">Your name, as shown to the receivers. If you do not enter a name here, the receivers will only get your email-address.</string>
<string name="MyNameExplain">Your name, as shown to the recipients. If left blank, only your email address will be sent.</string>
<string name="Password">Password</string>
<string name="SmtpPassword">SMTP password</string>
<string name="FromAbove">From above</string>
<string name="SmtpLoginname">SMTP loginname</string>
<string name="SmtpLoginname">SMTP login-name</string>
<string name="SmtpPort">SMTP port</string>
<string name="Automatic">Automatic</string>
<string name="ImapServer">IMAP server</string>
<string name="ImapLoginname">IMAP loginname</string>
<string name="ImapLoginname">IMAP login-name</string>
<string name="SmtpServer">SMTP server</string>
<string name="ImapPort">IMAP port</string>
<string name="InboxHeadline">Inbox</string>
<string name="OutboxHeadline">Outbox</string>
<string name="MyAccountExplain">For known email providers, additional settings are determinated automatically.</string>
<string name="MyAccountExplain2" >Sometimes, <![CDATA[<b>]]>IMAP needs to be enabled<![CDATA[</b>]]> in the email web frontend.\n\nOn problems, ask your email provider or your friends.</string>
<string name="MyAccountExplain2" >Sometimes, <![CDATA[<b>]]>IMAP needs to be enabled<![CDATA[</b>]]> in the email web frontend.\n\nConsult your email provider or friends if you run into problems.</string>
<string name="AccountNotConfigured">Account not configured</string>
<string name="AboutThisProgram">About Delta Chat</string>
<string name="NotSet">Not set</string>
@@ -326,28 +326,28 @@
<string name="Deaddrop">Contact requests</string>
<string name="DeaddropInChatlist">Show contact requests in chatlist</string>
<string name="MuteAlways">Always muted</string>
<string name="AskStartChatWith">Start a chat with <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="DeaddropHint">To start a chat, click on the reply-arrows.</string>
<string name="AskStartChatWith">Chat with <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="DeaddropHint">Tap the reply-arrows to start chatting.</string>
<string name="NotYetImplemented">This function is not available or incomplete.</string>
<string name="DefaultStatusText">Sent with my Delta Chat Messenger: https://delta.chat</string>
<string name="Name" >Name</string>
<string name="EmailAddress">Email address</string>
<string name="CannotDeleteContact">Cannot delete contacts in use, block contact instead.</string>
<string name="BadEmailAddress">Bad email address.</string>
<string name="CannotDeleteContact">Cannot delete contacts in use, block the contact instead.</string>
<string name="BadEmailAddress">Erroneous email address.</string>
<string name="ContactCreated">Contact created.</string>
<string name="ViewProfile">View profile</string>
<!-- Translators: please use a very short string here, it should not much longer than
the string needed for video time+size (0:00, 12,3 Mib) -->
<string name="OneMoment">One moment …</string>
<string name="NoChatsHelp">Start messaging by pressing the new chat button in the bottom right corner or tap the menu button for more options.</string>
<string name="NoChatsHelp">Start messaging by pressing the \"New chat\" button in the bottom right, or tap the \"Menu\" button for more options.</string>
<string name="Intro7Message"><![CDATA[<b>Delta Chat</b>]]> is safe for business use, compatible and standards-based.</string>
<string name="InviteMenuEntry">Send invitations</string>
<string name="InviteText">I\'m using Delta Chat messenger now - %1$s - you can text me at %2$s</string>
<string name="AdvancedSettings">Advanced settings</string>
<string name="AskResetNotifications" >Reset all notification settings and sounds of this page and of your contacts and groups?</string>
<string name="AskResetNotifications">Reset all notification settings and sounds of current page, contacts and groups?</string>
<string name="AttachFiles">Attach files</string>
<string name="ErrGroupNameEmpty">Please enter a name for the group.</string>
<string name="MsgNewGroupDraftHint">Write a first message to allow others to reply in this group.\n\n• It is okay if not all members use Delta Chat.\n\n• Delivering the first message may take a moment.</string>
<string name="MsgNewGroupDraftHint">Compose the first message, allowing others to reply within this group.\n\n• It is okay if not all members use Delta Chat.\n\n• Delivering the first message may take a while.</string>
<string name="MsgNewGroupDraft">Hello, I\'ve just created the group \"%1$s\" for us.</string>
<string name="MsgGroupNameChanged">Group name changed from \"%1$s\" to \"%2$s\".</string>
<string name="MsgGroupImageChanged">Group image changed.</string>
@@ -357,19 +357,19 @@
<string name="AskRemoveMemberFromGroup">Remove <![CDATA[<b>]]>%1$s<![CDATA[</b>]]> from group?</string>
<string name="ErrSelfNotInGroup">You must be a member of the group to perform this action.</string>
<string name="MsgGroupLeft">Group left.</string>
<string name="NoMessagesHint">Send message to <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>:\n\n• It is okay if <![CDATA[<b>]]>%2$s<![CDATA[</b>]]> does not use Delta Chat.\n\n• Delivering the first message may take a moment.</string>
<string name="NoMessagesHint">Send message to <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>:\n\n• It is okay if <![CDATA[<b>]]>%2$s<![CDATA[</b>]]> does not use Delta Chat.\n\n• Delivering the first message may take a while.</string>
<string name="SendNRcvReadReceipts">Receive and send return receipts</string>
<string name="PreferE2EEncryption">Prefer end-to-end encryption</string>
<string name="E2EManagePrivateKeys">Manage private keys</string>
<string name="E2EManagePrivateKeys">Manage secret keys</string>
<string name="E2ECompareKeys">Compare keys</string>
<string name="ForwardToTitle">Forward to …</string>
<string name="SelectContact">Choose a contact</string>
<string name="DoneHint">Done.</string>
<string name="FileNotFound">File %1$s not found.</string>
<string name="FileNotFound">Could not find %1$s.</string>
<string name="Error">Error: %1$s</string>
<string name="NoNetwork">Network not available.</string>
<string name="NoNetwork">Network unavailable.</string>
<string name="Audio">Audio</string>
<string name="PleaseCutVideoToMaxSize">Please cut video to a size of max. %1$s.</string>
<string name="PleaseCutVideoToMaxSize">Please cut video to a size less than %1$s.</string>
<string name="PermNotificationTitle">Connected to %1$s</string>
<string name="PermNotificationText">Waiting for messages …</string>
<string name="SettingsFor">Settings for %1$s</string>
@@ -381,7 +381,7 @@
<string name="EncrinfoE2EExplain">If all fingerprints match on the other device, the connection is safe.</string>
<string name="EncrinfoTransport">Transport-encryption at least up to my server.</string>
<string name="EncrinfoNone">No encryption to my server.</string>
<string name="EncrinfoNoE2EExplain">Encryption will switch to end-to-end automatically as soon as the contact uses Delta Chat or another Autocrypt-enabled app.</string>
<string name="EncrinfoNoE2EExplain">End-to-end encryption will be employed when Delta Chat or another Autocrypt app is also used by the recipient.</string>
<string name="EncrinfoFingerprints">Fingerprints</string>
<string name="Backup">Backup</string>
<string name="ImportBackupExplain2">To import a backup, copy a backup to <![CDATA[<i>]]>%1$s<![CDATA[</i>]]> and reinstall the app.</string>
@@ -389,24 +389,24 @@
<string name="ReadReceipt">Return receipt</string>
<string name="NameAndStatus">Name and status</string>
<string name="MyStatus">My status</string>
<string name="MyStatusExplain">The status is shown eg. in email footers.</string>
<string name="MyStatusExplain">The status is shown in email footers, among other places.</string>
<string name="MsgGroupImageDeleted">Group image deleted.</string>
<string name="AskDeleteGroupImage">Are you sure to delete the group image?\n\nThis will affect all devices of all group members.</string>
<string name="ExportImportHeader">Export and import</string>
<string name="ImportExportExplain">Exported files will contain private keys! Keep them in a safe place or delete them as soon as possible.</string>
<string name="ImportExportExplain">Exported files will contain secret keys! Keep them in a safe place or delete them as soon as possible.</string>
<string name="EnterPasswordToContinue">Enter the password for %1$s to continue:</string>
<string name="IncorrectPassword">Incorrect password.</string>
<string name="ImportBackupAsk">Delta Chat has found a backup at <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>.\n\nDo you want to import and use all data and settings from this backup?</string>
<string name="ImportBackupAsk">Backup found at <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>.\n\nDo you want to import and use all data and settings from it?</string>
<string name="ImportBackup">Import backup</string>
<string name="NoBackupFound">No backup to import found.\n\nCopy the backup to <![CDATA[<i>]]>%1$s<![CDATA[</i>]]> and try again. Alternatively, hit \"Start messaging\" for a normal setup process.</string>
<string name="FilesSuccessfullyExported">Files successfully exported to <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>.</string>
<string name="NoBackupFound">No backups found.\n\nCopy the backup to <![CDATA[<i>]]>%1$s<![CDATA[</i>]]> and try again. Alternatively, press \"Start messaging\" to go with the normal setup process.</string>
<string name="FilesSuccessfullyExported">Files exported to <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>.</string>
<string name="ExportBackup">Export backup</string>
<string name="ExportPrivateKeys">Export private keys</string>
<string name="ImportPrivateKeys">Import private keys</string>
<string name="ImportPrivateKeysAsk2">Import private keys from <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>?\n\n• Existing private keys are not deleted\n\n• The last imported key will be used as the new default key</string>
<string name="ExportPrivateKeys">Export secret keys</string>
<string name="ImportPrivateKeys">Import secret keys</string>
<string name="ImportPrivateKeysAsk2">Import secret keys from <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>?\n\n• Existing secret keys will not be deleted\n\n• The last imported key will be used as the new default key</string>
<string name="NoRecentEmoji">Recently used emoji will be shown here.</string>
<string name="E2eeOffBecauseOfUser">To enable end-to-end-encryption, check the corresponding option in your settings.</string>
<string name="E2eeOffBecauseOfRecipient">Encryption will switch to end-to-end if the contact enables the corresponding option.</string>
<string name="E2eeOffBecauseOfRecipient">End-to-end encryption will be employed if the other party enables the setting too.</string>
<string name="NotNow">Not now</string>
<string name="ArchiveChat">Archive chat</string>
<string name="UnarchiveChat">Unarchive chat</string>
@@ -415,4 +415,16 @@
<string name="LeaveGroup">Leave group</string>
<string name="AskLeaveGroup">Are you sure you want to leave this group?</string>
<string name="Never">Never</string>
<string name="AutocryptKeyTransferInitiate">Initiate Autocrypt Key Transfer</string>
<string name="AutocryptKeyTransfer">Autocrypt Key Transfer</string>
<string name="AutocryptKeyTransferMsgBeforeSend">The <![CDATA[<i>]]>Autocrypt Key Transfer<![CDATA[</i>]]> requires that the mail client on the other device is Autocrypt-compliant.\n\nYou can then send your secret key to yourself. The key will be encrypted by a setup code which is displayed here and must be typed on the other device.</string>
<string name="AutocryptKeyTransferMsgAfterSend">Your key has been sent to yourself. Switch to the other device and open the setup message. You should be prompted for a setup code. Type the following digits into the prompt:\n\n%1$s\n\nOnce you\'re done, your other device will be ready to use Autocrypt.</string>
<string name="AutocryptSetupMessageSubject">Autocrypt Setup Message</string>
<string name="AutocryptSetupMessageGeneralBody">This is the Autocrypt Setup Message used to transfer your key between clients.\n\nTo decrypt and use your key, open the message in an Autocrypt-compliant client and enter the setup code presented on the generating device.</string>
<string name="AutocryptSetupMessageTapBody">This is the Autocrypt Setup Message used to transfer your key between clients.\n\nTo decrypt and use your key, tap on this message.</string>
<string name="AutocryptKeyTransferPleaseEnterCode">Please enter the setup code that is displayed on the other device.</string>
<string name="AutocryptKeyTransferBadCode">Bad setup code. Please try again.\n\nIf you do not remember the setup code, just initiate the key transfer on the other device again.</string>
<string name="AutocryptKeyTransferSucceeded">Key transferred successfully. This device is now ready to use Autocrypt with the same key as the other device.</string>
<string name="Retry">Retry</string>
<string name="SelfTalkSubtitle">Messages I sent to myself</string>
</resources>
+1 -1
View File
@@ -5,6 +5,6 @@ buildscript {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'com.android.tools.build:gradle:3.0.1'
}
}
+2 -2
View File
@@ -1,6 +1,6 @@
#Fri Mar 03 14:17:13 CET 2017
#Thu Dec 14 21:54:25 CET 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
+45
View File
@@ -0,0 +1,45 @@
The following checklists are there not to forget things ... to be continued.
# Release new Core version
1. deltachat-core: bump version, commit, push
2. deltachat-core on Github: "Draft a new release" with the version form `v1.2.3`
# Release new Android version
Release core, if needed, then:
1. deltachat-android: check CHANGLOG.md, commit, push
2. deltachat-android/tools: `$ ./update-core.sh`, push
3. deltachat-android/tools: `$ ./txpull`, if there are changes: commit, push
4. deltachat-android: bump version, commit, push
5. deltachat-android on Github: "Draft a new release" with the version form `v1.2.3`
... some days later, F-Droid should be updated.
For an additional APK:
6. in Android Studio select "Build / Build APK"
7. rename the generated APK to `deltachat-v1.2.3.apk`
8. upload the APK to the created Github release
# Add language
1. add `MessengerProj/src/main/res/values-<LANG>/strings.xml`
2. add copy command to `tools/txpull.sh` and `tools/txpush.sh`
# Update source languges on Transifex
1. call `./txpull` to overwrite local translation files with the ones from Transifex, the source is not updated
2. modify source and translations as needed
3. call `./txpush` to push source and translations back to Transifex.
(the tx-tool uses on the _name-attribute_ to identify strings while the Transifex-UI uses the source _string_.
So, without pushing back, the translation of modified source would be lost.
For the same reason, we do not use the "Auto update resource" function in the Transifex-UI:
A change to a source string in values/strings.xml would break all translations)
+30
View File
@@ -0,0 +1,30 @@
# after pulling with txpull, this script pushes all local files back to transifex
# this is esp. useful as you can modifiy the english source strings in between - without breaking all translations afterwards.
rm -r translations
tx pull -a -s # -s fetches the source file, we do not copy it, but we need it for pushing back
TXPREFIX="translations/delta-chat-android.stringsxml/ " # yes, there are spaces. don't know why
SRCPREFIX="../MessengerProj/src/main/res/values"
cp "${TXPREFIX}ca.xml" "${SRCPREFIX}-ca/strings.xml"
cp "${TXPREFIX}de.xml" "${SRCPREFIX}-de/strings.xml"
# "${TXPREFIX}en.xml" "${SRCPREFIX}/strings.xml" # we do not copy the source as the source cannot be modified at Trasifex
cp "${TXPREFIX}es.xml" "${SRCPREFIX}-es/strings.xml"
cp "${TXPREFIX}fr.xml" "${SRCPREFIX}-fr/strings.xml"
cp "${TXPREFIX}hu.xml" "${SRCPREFIX}-hu/strings.xml"
cp "${TXPREFIX}it.xml" "${SRCPREFIX}-it/strings.xml"
cp "${TXPREFIX}ko.xml" "${SRCPREFIX}-ko/strings.xml"
cp "${TXPREFIX}nb_NO.xml" "${SRCPREFIX}-nb/strings.xml"
cp "${TXPREFIX}nl.xml" "${SRCPREFIX}-nl/strings.xml"
cp "${TXPREFIX}pl.xml" "${SRCPREFIX}-pl/strings.xml"
cp "${TXPREFIX}pt.xml" "${SRCPREFIX}-pt/strings.xml"
cp "${TXPREFIX}ru.xml" "${SRCPREFIX}-ru/strings.xml"
cp "${TXPREFIX}sq.xml" "${SRCPREFIX}-sq/strings.xml"
cp "${TXPREFIX}sr.xml" "${SRCPREFIX}-sr/strings.xml"
cp "${TXPREFIX}ta.xml" "${SRCPREFIX}-ta/strings.xml"
cp "${TXPREFIX}te.xml" "${SRCPREFIX}-te/strings.xml"
cp "${TXPREFIX}tr.xml" "${SRCPREFIX}-tr/strings.xml"
cp "${TXPREFIX}uk.xml" "${SRCPREFIX}-uk/strings.xml"
+38
View File
@@ -0,0 +1,38 @@
# this script pulls all files from transifex and copies them to the correct local directories
# before you can use this script, you have to initialize Transifex in this folder:
# tx init --user=api --pass=<your api token>
# tx set --auto-remote https://www.transifex.com/projects/p/delta-chat-android/
# common information about the Transifex CLI client can be found at:
# https://docs.transifex.com/client/
read -p "Push all translation files to Transifex? This will OVERWRITE all changes on Transifex since the last txpull!"
TXPREFIX="translations/delta-chat-android.stringsxml/ " # yes, there are spaces. don't know why
SRCPREFIX="../MessengerProj/src/main/res/values"
cp "${SRCPREFIX}-ca/strings.xml" "${TXPREFIX}ca.xml"
cp "${SRCPREFIX}-de/strings.xml" "${TXPREFIX}de.xml"
cp "${SRCPREFIX}/strings.xml" "${TXPREFIX}en.xml" # also copy back the source, this is the only way to update the english strings
cp "${SRCPREFIX}-es/strings.xml" "${TXPREFIX}es.xml"
cp "${SRCPREFIX}-fr/strings.xml" "${TXPREFIX}fr.xml"
cp "${SRCPREFIX}-hu/strings.xml" "${TXPREFIX}hu.xml"
cp "${SRCPREFIX}-it/strings.xml" "${TXPREFIX}it.xml"
cp "${SRCPREFIX}-ko/strings.xml" "${TXPREFIX}ko.xml"
cp "${SRCPREFIX}-nb/strings.xml" "${TXPREFIX}nb_NO.xml"
cp "${SRCPREFIX}-nl/strings.xml" "${TXPREFIX}nl.xml"
cp "${SRCPREFIX}-pl/strings.xml" "${TXPREFIX}pl.xml"
cp "${SRCPREFIX}-pt/strings.xml" "${TXPREFIX}pt.xml"
cp "${SRCPREFIX}-ru/strings.xml" "${TXPREFIX}ru.xml"
cp "${SRCPREFIX}-sq/strings.xml" "${TXPREFIX}sq.xml"
cp "${SRCPREFIX}-sr/strings.xml" "${TXPREFIX}sr.xml"
cp "${SRCPREFIX}-ta/strings.xml" "${TXPREFIX}ta.xml"
cp "${SRCPREFIX}-te/strings.xml" "${TXPREFIX}te.xml"
cp "${SRCPREFIX}-tr/strings.xml" "${TXPREFIX}tr.xml"
cp "${SRCPREFIX}-uk/strings.xml" "${TXPREFIX}uk.xml"
tx push -s -t # -s: push source, -t: push translations, -f: ignore timestamps; see https://docs.transifex.com/client/push
+5
View File
@@ -3,6 +3,9 @@
# - make sure, deltachat-core is committed successfull before calling this script
# - the script assumes, deltachat-core is placed in the same directory as deltachat-android
# get to main directory
cd ..
# remove links to the files
rm -r MessengerProj/jni/messenger-backend/*
rm -r MessengerProj/jni/messenger-backend/.??*
@@ -30,3 +33,5 @@ ln --symbolic `pwd`/deltachat-core/libs deltachat-android/MessengerProj/jni/m
ln --symbolic `pwd`/deltachat-core/cmdline deltachat-android/MessengerProj/jni/messenger-backend/cmdline
cd deltachat-android
# back to tools directory
cd tools