Compare commits

...

50 Commits

Author SHA1 Message Date
B. Petersen ce37da0084 Changelog 2017-12-19 18:17:39 +01:00
B. Petersen fb874d5359 Update messenger-backend submodule. 2017-12-19 18:16:16 +01:00
B. Petersen bdc86b0285 revert gradle changes, this should fix #219 2017-12-19 18:15:59 +01:00
B. Petersen a6d8386b08 take more care on JavaArray<->CArray conversions 2017-12-19 13:11:23 +01:00
B. Petersen b69ca46485 protecting c-pointer-handles from being freed twice. 2017-12-18 17:49:49 +01:00
B. Petersen cb30257b83 Update Albanian, Portuguese, Russian, Turkish and Ukrainian translations 2017-12-18 08:31:06 +01:00
B. Petersen 9123210f69 bump version 2017-12-15 17:27:07 +01:00
B. Petersen 630a259a5a add missing MrLotUnref() function, fixes #218 2017-12-15 17:26:54 +01:00
B. Petersen f0183064ed show a 'not yet implemented' message when trying to enter the setup code 2017-12-15 17:08:28 +01:00
B. Petersen 11bca87a47 update gradle 2017-12-15 08:22:56 +01:00
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
34 changed files with 1015 additions and 86 deletions
+8
View File
@@ -1,5 +1,13 @@
# Delta Chat Changelog
## v0.11.3
2017-12-17
* Add option to initiate Autocrypt Key Transfer
* Connect after importing a backup
* Add Albanian translation
* Update Albanian, German, Italian, Polish, Portuguese, Russian, Turkish and Ukrainian translations
## v0.10.0
2017-11-29
+10 -8
View File
@@ -31,8 +31,8 @@ dependencies {
}
android {
compileSdkVersion 25
buildToolsVersion '25.0.2'
compileSdkVersion 25 // should be ...
buildToolsVersion '25.0.2' // ... in sync unless you know exactly what you're doing
useLibrary 'org.apache.http.legacy'
defaultConfig.applicationId = "com.b44t.messenger"
@@ -79,13 +79,12 @@ android {
}
}
defaultConfig.versionCode = 50
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.10.0" // do NOT forget to increase defaultConfig.versionCode!
versionName "0.11.3" // do NOT forget to increase defaultConfig.versionCode!
versionCode 508
}
}
+1
View File
@@ -1638,6 +1638,7 @@ LOCAL_SRC_FILES += \
./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 \
+64 -8
View File
@@ -117,8 +117,10 @@ void mrosnative_unsetup_thread(mrmailbox_t* mailbox)
/* tools */
static jintArray mrarray2jintArray_n_mrarray_unref(JNIEnv *env, const mrarray_t* ca)
static jintArray mrarray2jintArray_n_mrarray_unref(JNIEnv *env, mrarray_t* ca)
{
/* takes a C-array of type mrarray_t and converts it it a Java-Array.
then the C-array is freed and the Java-Array is returned. */
int i, icnt = ca? mrarray_get_cnt(ca) : 0;
jintArray ret = (*env)->NewIntArray(env, icnt); if (ret == NULL) { return NULL; }
@@ -146,7 +148,10 @@ static jintArray mrarray2jintArray_n_mrarray_unref(JNIEnv *env, const mrarray_t*
static uint32_t* jintArray2uint32Pointer(JNIEnv* env, jintArray ja, int* ret_icnt)
{
/* takes a Java-Array and converts it to a C-Array. */
uint32_t* ret = NULL;
if( ret_icnt ) { *ret_icnt = 0; }
if( env && ja && ret_icnt )
{
int i, icnt = (*env)->GetArrayLength(env, ja);
@@ -167,6 +172,7 @@ static uint32_t* jintArray2uint32Pointer(JNIEnv* env, jintArray ja, int* ret_icn
}
}
}
return ret;
}
@@ -258,9 +264,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));
}
@@ -366,7 +372,7 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_getChatIdByContactId(JNIEnv *en
JNIEXPORT void Java_com_b44t_messenger_MrMailbox_markseenMsgs(JNIEnv *env, jclass cls, jintArray msg_ids)
{
int msg_ids_cnt;
int msg_ids_cnt = 0;
const uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt);
mrmailbox_markseen_msgs(get_mrmailbox_t(env, cls), msg_ids_ptr, msg_ids_cnt);
free(msg_ids_ptr);
@@ -474,7 +480,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_MrMailboxGetMsgInfo(JNIEnv *
JNIEXPORT void Java_com_b44t_messenger_MrMailbox_deleteMsgs(JNIEnv *env, jclass cls, jintArray msg_ids)
{
int msg_ids_cnt;
int msg_ids_cnt = 0;
const uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt);
mrmailbox_delete_msgs(get_mrmailbox_t(env, cls), msg_ids_ptr, msg_ids_cnt);
free(msg_ids_ptr);
@@ -483,7 +489,7 @@ JNIEXPORT void Java_com_b44t_messenger_MrMailbox_deleteMsgs(JNIEnv *env, jclass
JNIEXPORT void Java_com_b44t_messenger_MrMailbox_forwardMsgs(JNIEnv *env, jclass cls, jintArray msg_ids, jint chat_id)
{
int msg_ids_cnt;
int msg_ids_cnt = 0;
const uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt);
mrmailbox_forward_msgs(get_mrmailbox_t(env, cls), msg_ids_ptr, msg_ids_cnt, chat_id);
free(msg_ids_ptr);
@@ -603,11 +609,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;
}
@@ -764,6 +792,12 @@ JNIEXPORT jboolean Java_com_b44t_messenger_MrChat_isUnpromoted(JNIEnv *env, jobj
}
JNIEXPORT jboolean Java_com_b44t_messenger_MrChat_isSelfTalk(JNIEnv *env, jobject obj)
{
return mrchat_is_self_talk(get_mrchat_t(env, obj)) != 0;
}
JNIEXPORT jstring Java_com_b44t_messenger_MrChat_MrChatGetDraft(JNIEnv *env, jclass c, jlong hChat) /* returns NULL for "no draft" */
{
mrchat_t* ths = (mrchat_t*)hChat;
@@ -1025,6 +1059,22 @@ JNIEXPORT jboolean Java_com_b44t_messenger_MrMsg_isSystemcmd(JNIEnv *env, jobjec
}
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
******************************************************************************/
@@ -1153,6 +1203,12 @@ JNIEXPORT jint Java_com_b44t_messenger_MrLot_getState(JNIEnv *env, jobject obj)
}
JNIEXPORT void Java_com_b44t_messenger_MrLot_MrLotUnref(JNIEnv *env, jclass c, jlong hLot)
{
mrlot_unref((mrlot_t*)hLot);
}
/*******************************************************************************
* Tools
******************************************************************************/
@@ -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) {
@@ -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;
@@ -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;
@@ -852,7 +854,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
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);
@@ -2667,6 +2669,12 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
}
}
@Override
public void didPressedSetupMessage(ChatMessageCell cell) {
Toast.makeText(getParentActivity(), ApplicationLoader.applicationContext.getString(R.string.NotYetImplemented), Toast.LENGTH_SHORT).show();
querySetupCode(cell.getMessageObject().getId(), null);
}
@Override
public boolean canPerformActions() {
return actionBar != null && !actionBar.isActionModeShowed();
@@ -2905,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());
}
}
@@ -46,6 +46,7 @@ public class MrChat {
@Override protected void finalize() throws Throwable {
super.finalize();
MrChatUnref(m_hChat);
m_hChat = 0;
}
public native int getId();
@@ -56,6 +57,7 @@ public class MrChat {
public native String getProfileImage();
public native boolean isUnpromoted();
public native boolean isSelfTalk();
public String getDraft() {
return MrChatGetDraft(m_hChat);
@@ -36,6 +36,7 @@ public class MrChatlist {
@Override protected void finalize() throws Throwable {
super.finalize();
MrChatlistUnref(m_hChatlist);
m_hChatlist = 0;
}
public int getCnt() {
@@ -40,6 +40,7 @@ public class MrContact {
@Override protected void finalize() throws Throwable {
super.finalize();
MrContactUnref(m_hContact);
m_hContact = 0;
}
public native String getName();
@@ -41,6 +41,7 @@ public class MrLot {
@Override protected void finalize() throws Throwable {
super.finalize();
MrLotUnref(m_hLot);
m_hLot = 0;
}
public native String getText1();
@@ -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);
@@ -200,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;
@@ -228,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
@@ -334,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;
@@ -370,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);
@@ -64,6 +64,7 @@ public class MrMsg {
@Override protected void finalize() throws Throwable {
super.finalize();
MrMsgUnref(m_hMsg);
m_hMsg = 0;
}
public int getId() {
@@ -112,6 +113,8 @@ public class MrMsg {
public native String getFilename();
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"
@@ -157,10 +160,15 @@ public class MrMsg {
ret.created_by_mr = true;
ret.show_padlock = showPadlock()!=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 = getFile();
TLRPC.TL_photo photo = null;
@@ -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++;
}
@@ -918,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);
}
@@ -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>
@@ -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>
@@ -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>
@@ -409,4 +409,15 @@
<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>
@@ -410,4 +410,4 @@ La dernière clé importée sera utilisée comme nouvelle clé par défaut</stri
<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>
</resources>
@@ -409,4 +409,15 @@
<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>
@@ -116,7 +116,7 @@
<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="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>
@@ -358,4 +358,4 @@
<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>
</resources>
@@ -437,4 +437,15 @@
<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>
@@ -151,13 +151,13 @@
<string name="Sharpen">Nitidez</string>
<string name="Fade">Desbotar</string>
<string name="Tint">Matiz</string>
<string name="TintShadows">SOMBRAS</string>
<string name="TintHighlights">LUZES</string>
<string name="TintShadows">Sombras</string>
<string name="TintHighlights">Luzes</string>
<string name="Curves">Curvas</string>
<string name="CurvesAll">TUDO</string>
<string name="CurvesRed">VERMELHO</string>
<string name="CurvesGreen">VERDE</string>
<string name="CurvesBlue">AZUL</string>
<string name="CurvesAll">Tudo</string>
<string name="CurvesRed">Vermelho</string>
<string name="CurvesGreen">Verde</string>
<string name="CurvesBlue">Azul</string>
<string name="Blur">Desfoque</string>
<string name="BlurOff">Desativado</string>
<string name="BlurLinear">Linear</string>
@@ -184,7 +184,7 @@
<string name="FromGalley">Da galeria</string>
<string name="Set">Aplicar</string>
<string name="OK">OK</string>
<string name="Crop">CORTAR</string>
<string name="Crop">Cortar</string>
<!--messages-->
<string name="AttachPhoto">Foto</string>
<string name="AttachVideo">Vídeo</string>
@@ -409,4 +409,15 @@
<string name="LeaveGroup">Sair do grupo</string>
<string name="AskLeaveGroup">Tem certeza que deseja sair do grupo?</string>
<string name="Never">Jamais</string>
<string name="AutocryptKeyTransferInitiate">Começar transferência de chaves</string>
<string name="AutocryptKeyTransfer">Transferência de chaves</string>
<string name="AutocryptKeyTransferMsgBeforeSend">Para funcionar, a <![CDATA[<i>]]>transferência de chaves <![CDATA[</i>]]> é necessário que o cliente de e-mail do outro dispositivo seja compatível com o Autocrypt.\n\nEnvie sua chave secreta para você mesmo. A chave será cifrada com o código exibido aqui, o qual precisará ser digitado no outro dispositivo.</string>
<string name="AutocryptKeyTransferMsgAfterSend">Sua chave foi enviada para você mesmo. Abra a mensagem de configuração no seu outro dispositivo. Lá será exibido uma solicitação de código. Digite-o lá:\n\n%1$s\n\nDepois disso, seu dispositivo estará pronto para usar o Autocrypt.</string>
<string name="AutocryptSetupMessageSubject">Mensagem de configuração do Autocrypt</string>
<string name="AutocryptSetupMessageGeneralBody">Esta é uma mensagem de configuração do Autocrypt que serve para transferir suas chaves entre dispositivos diferentes.\n\nPara descriptografar sua chave abra esta mensagem num cliente de e-mail compatível e digite o código exibido no dispositivo de origem.</string>
<string name="AutocryptSetupMessageTapBody">Esta é uma mensagem de configuração do Autocrypt que serve para a transferência de chaves.\n\nPara completá-la toque nesta mensagem.</string>
<string name="AutocryptKeyTransferPleaseEnterCode">Por favor, digite o código exibido no outro dispositivo.</string>
<string name="AutocryptKeyTransferBadCode">Código errado. Tente novamente.\n\nSe você não se lembra do código recomece a transferência de chaves no dispositivo original.</string>
<string name="AutocryptKeyTransferSucceeded">Chaves transferidas. Agora você está pronto para usar o Autocrypt neste dispositivo com as mesmas chaves do outro.</string>
<string name="Retry">Repetir</string>
</resources>
@@ -43,7 +43,7 @@
<string name="TypeMessage">Сообщение</string>
<string name="SlideToCancel">СДВИНЬТЕ ДЛЯ ОТМЕНЫ</string>
<string name="SaveToDownloads">Сохранить в папку Загрузки</string>
<string name="SaveToMusic">Сохранить в музыку</string>
<string name="SaveToMusic">Сохранить в музыкальную коллекцию</string>
<string name="Share">Поделиться</string>
<string name="SendItems">Отправить %1$s</string>
<string name="ClearRecentEmoji">Очистить недавние смайлики?</string>
@@ -81,7 +81,7 @@
<string name="NotificationsAndSounds">Уведомления и звуки</string>
<string name="BlockedContacts">Заблокированные контакты</string>
<string name="Default">По умолчанию</string>
<string name="OnlyIfSilent">Только если тишина</string>
<string name="OnlyIfSilent">Только при выключенном звуке</string>
<string name="ChatBackground">Фон чата</string>
<string name="SendByEnter">Отправить нажав "Ввод"</string>
<string name="Help">Помощь</string>
@@ -101,7 +101,7 @@
<string name="NotificationsOther">Другие</string>
<string name="InChatSound">Звуки в чате</string>
<string name="SmartNotifications">Ограничение уведомлений</string>
<string name="SmartNotificationsSoundAtMost">Звук не более</string>
<string name="SmartNotificationsSoundAtMost">не более</string>
<string name="SmartNotificationsTimes">раз</string>
<string name="SmartNotificationsWithin">в пределах</string>
<string name="SmartNotificationsMinutes">минут</string>
@@ -211,7 +211,7 @@
<string name="Intro1Message">Мессенджер с <![CDATA[<b>самым большим диапазоном охвата</b>]]> в мире. <![CDATA[<br/><b>Бесплатный</b>]]> и <![CDATA[<b>безопасный</b>]]>.</string>
<string name="Intro2Headline">Независимый</string>
<string name="Intro2Message"><![CDATA[<b>Независимость</b>]]> от иностранных компьютеров или сервисов. Приложение использует только ваш почтовый сервер.</string>
<string name="Intro2Message"><![CDATA[<b>Независимость</b>]]> от неконтролируемых вами компьютеров или сервисов. Приложение использует только ваш почтовый сервер.</string>
<string name="Intro3Headline">Быстрый</string>
<string name="Intro3Message"><![CDATA[<b>Push-сообщения</b>]]> за секунды.<![CDATA[<br/>]]>Быстрый интерфейс.</string>
@@ -415,7 +415,7 @@
<string name="MsgGroupImageDeleted">Изображение группы удалено.</string>
<string name="AskDeleteGroupImage">Вы действительно хотите удалить изображение группы?\n\nИзменение вступит в силу на всех устройствах участников группы.</string>
<string name="ExportImportHeader">Экспорт и импорт</string>
<string name="ImportExportExplain">Файлы экспорта будут содержать закрытые ключи! Храните их в защищенном месте или удалите их по первой возможности.</string>
<string name="ImportExportExplain">Файлы экспорта будут содержать закрытые ключи! Храните их в защищенном месте или удалите их при первой возможности.</string>
<string name="EnterPasswordToContinue">Введите пароль для %1$s, чтобы продолжить:</string>
<string name="IncorrectPassword">Неверный пароль.</string>
<string name="ImportBackupAsk">Delta Chat нашел резервную копию в <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>.\n\nИмпортировать и использовать все данные и настройки из резервной копии?</string>
@@ -430,11 +430,22 @@
<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="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,408 @@
<?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="ClearRecentEmoji">Të hiqen emoji-t e përdorur së fundi?</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="InAppNotifications">Njoftime nga aplikacioni</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="InChatSound">Tinguj nga aplikacioni</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="Of">%1$d nga %2$d gjithsej</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>
<string name="AutocryptKeyTransferInitiate">Përgatit Transferim Kyçi Autocrypt</string>
<string name="AutocryptKeyTransfer">Transferim Kyçi Autocrypt</string>
<string name="AutocryptKeyTransferMsgBeforeSend"><![CDATA[<i>]]>Transferimi i Kyçit Autocrypt<![CDATA[</i>]]> lyp që klienti i postës në pajisjen tjetër të mund të përdorë protokolle Autocrypt.\n\nMandej mund ti dërgoni vetes kyçin tuaj të fshehtë. Kyçi do të fshehtëzohet nga një kod rregullimi që shfaqet këtu dhe duhet të shytpet te pajisja tjetër.</string>
<string name="AutocryptKeyTransferMsgAfterSend">Kyçi juaj u dërgua te ju. Kaloni te pajisja tjetër dhe hapni mesazhin e rregullimit. Do tju kërkohet një kod rregullimi. Shtypni këto shifra:\n\n%1$s\n\nPasi të keni mbaruar, pajisja tjetër e juaja do të jetë gati të përdorë Autocrypt-in.</string>
<string name="AutocryptSetupMessageSubject">Mesazh Rregullimi Autocrypt</string>
<string name="AutocryptSetupMessageGeneralBody">Ky është Mesazhi i Rregullimit të Autocrypt-it i përdorur për të transferuar kyçin tuaj nga një klient në tjetrin.\n\nQë të shfshehtëzoni dhe përdorni kyçin tuaj, hapeni mesazhin në një klient qtë aftë për Autocrypt dhe jepni kodin e rregullimit të shfaqur te pajisja që e prodhoi.</string>
<string name="AutocryptSetupMessageTapBody">Ky është Mesazhi i Rregullimit të Autocrypt-it i përdorur për të transferuar kyçin tuaj nga një klient në tjetrin.\n\nQë të shfshehtëzoni dhe përdorni kyçin tuaj, prekeni këtë mesazh.</string>
<string name="AutocryptKeyTransferPleaseEnterCode">Ju lutemi, jepni kodin e rregullimit që është shfaqur te pajisja tjetër.</string>
<string name="AutocryptKeyTransferBadCode">Kod rregullimi i gabuar. Ju lutemi, riprovoni.\n\nNëse se mbani mend kodin e rregullimit, thjesht rinisni transferimin e kyçit që nga pajisja tjetër.</string>
<string name="AutocryptKeyTransferSucceeded">Kyçi u transferua me sukses. Tani kjo pajisje është gati të përdorë Autocrypt-in me të njëjtin kyç si pajisja tjetër.</string>
<string name="Retry">Riprovoni</string>
</resources>
@@ -243,7 +243,11 @@
<string name="MuteAlways">Sürekli sessiz</string>
<string name="Name" >Ad</string>
<string name="EmailAddress">E-posta adresi</string>
<string name="ContactCreated">Kişi oluşturuldu.</string>
<string name="ViewProfile">Profil görüntüsü</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">Bir dakika ...</string>
<string name="InviteMenuEntry">Davetiye gönderin</string>
<string name="AdvancedSettings">Gelişmiş ayarlar</string>
<string name="AttachFiles">Dosyaları iliştir</string>
@@ -251,9 +255,14 @@
<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="MsgGroupLeft">Grup ayrıldı.</string>
<string name="SendNRcvReadReceipts">İletim raporlarını al ve gönder</string>
<string name="PreferE2EEncryption">Uçtan uca şifrelemeyi yeğle</string>
<string name="E2EManagePrivateKeys">Özel anahtarları yönet</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="Error">Hata: %1$s</string>
<string name="NoNetwork">Ağ kullanılamıyor.</string>
<string name="Audio">Ses</string>
<string name="PermNotificationText">İletiler bekliyor ...</string>
@@ -261,9 +270,11 @@
<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="Encryption">Şifreleme</string>
<string name="EncrinfoE2E">Uçtan uca şifreleme etkin</string>
<string name="EncrinfoFingerprints">Parmak izleri</string>
<string name="Backup">Yedekleme</string>
<string name="ReadReceipt">İletim raporu</string>
<string name="NameAndStatus">Ad ve durum</string>
<string name="MyStatus">Durumum</string>
<string name="MsgGroupImageDeleted">Grup resmi silindi</string>
@@ -278,5 +289,7 @@
<string name="ArchivedChats">Arşivlenmiş söyleşiler</string>
<string name="Archived">Arşivlenmiş</string>
<string name="LeaveGroup">Gruptan ayrıl</string>
<string name="AskLeaveGroup">Bu gruptan ayrılmak istediğinize emin misiniz?</string>
<string name="Never">Asla</string>
<string name="Retry">Yeniden dene</string>
</resources>
@@ -412,4 +412,14 @@
<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="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="Retry">Спробувати ще раз</string>
</resources>
+21 -9
View File
@@ -42,8 +42,8 @@
<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="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>
@@ -83,7 +83,7 @@
<string name="Default">Default</string>
<string name="OnlyIfSilent">Only when silent</string>
<string name="ChatBackground">Chat background</string>
<string name="SendByEnter">Send with \"⏎\"</string>
<string name="SendByEnter">Send with Enter key</string>
<string name="Help">Help</string>
<string name="Enabled">On</string>
<string name="Disabled">Off</string>
@@ -339,7 +339,7 @@
<!-- 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, 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>
@@ -360,7 +360,7 @@
<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>
@@ -393,7 +393,7 @@
<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">Backup found at <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>.\n\nDo you want to import and use all data and settings from it?</string>
@@ -401,9 +401,9 @@
<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 will not be 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">End-to-end encryption will be employed if the other party enables the setting too.</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>
+23 -6
View File
@@ -1,21 +1,38 @@
The following checklists are there not to forget things ... to be continued.
# Add Release on F-Droid
1. deltachat-core: "draft a new release", if required
2. deltachat-android: check CHANGES.md against core and android commit list from last release
3. deltachat-android/tools: `$ ./update-core.sh` followed by a `git push`
4. deltachat-android/tools: `$ ./txpull` followed by a `git commit` and a `git push` if there are changes
5. deltachat-android: "Draft a new release" using a version number in for Form v1.2.3
# 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
+1
View File
@@ -21,6 +21,7 @@ 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"
+1
View File
@@ -27,6 +27,7 @@ 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"