Compare commits

..

21 Commits

Author SHA1 Message Date
adbenitez 2a54867724 improve welcome message and intro graphic 2025-12-10 16:10:48 +01:00
adbenitez 210e5c7fbc Merge remote-tracking branch 'upstream/main' 2025-12-10 13:32:40 +01:00
adb a5818c7cba Merge pull request #4110 from deltachat/prep-2.33.1
prepare 2.33.1
2025-12-10 13:29:32 +01:00
adbenitez 059d517d0d update build.gradle 2025-12-10 12:51:05 +01:00
adbenitez 5c3eb0ac82 update changelog 2025-12-10 12:48:20 +01:00
adbenitez efa04fce18 update translations 2025-12-10 12:48:15 +01:00
adb fb9771adde Merge pull request #4106 from deltachat/adb/issue-4104
remove unnecessary lock
2025-12-10 12:44:42 +01:00
adb 2930d0dc2d Merge branch 'main' into adb/issue-4104 2025-12-10 12:18:39 +01:00
adb e6e85ed812 Merge pull request #4109 from deltachat/adb/add-missing-padding-conversationactivity
fix ConversationActivity on Android <11
2025-12-10 12:16:52 +01:00
adbenitez 7837a99e7b fix ConversationActivity on Android <11 2025-12-10 12:13:46 +01:00
adb 8c546dc358 Merge pull request #4107 from deltachat/adb/improve-add-relay-workflow
improve UX of adding new relays via QR or clicking links
2025-12-10 11:37:18 +01:00
adb f0c75ec3c6 Merge pull request #4108 from deltachat/adb/allow-dcaccount-in_webview
add dcaccount and dclogin to schema whitelist
2025-12-10 11:36:58 +01:00
adbenitez 658283c4e8 add dcaccount and dclogin to schema whitelist 2025-12-10 11:06:15 +01:00
adbenitez 0ef4d645df allow to add relays via link 2025-12-10 10:57:55 +01:00
adbenitez 91713911ee improve UX of adding new relays via QR 2025-12-10 09:58:56 +01:00
adbenitez 1c0a54d75e remove unnecessary lock 2025-12-09 18:39:55 +01:00
B. Petersen 0f82b3ca93 deprecate strings used to create profiles from main scanner
instead, one should be asked whether to add a transport.

- it is very probably the more wanted action -
  when one wants a new profile, it is better to learn first,
  that one has to go over "switch profil"

- less can go wrong -
  if ppl play around,
  adding a transport is less harmful than a new profile
  where they do not know how to switch, send from different ones etc.
2025-12-09 18:27:47 +01:00
adb 1a80187c07 Merge pull request #4103 from deltachat/adb/issue-4102
avoid NPE in WebxdcGarbageCollectionWorker
2025-12-09 18:25:34 +01:00
adbenitez e315d0505c fix startWork 2025-12-09 15:05:42 +01:00
adbenitez 10b966a7c8 store context and get Rpc on startWork 2025-12-09 12:34:39 +01:00
adbenitez 3c65408f25 avoid NPE in WebxdcGarbageCollectionWorker 2025-12-09 11:36:20 +01:00
22 changed files with 160 additions and 119 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
# Delta Chat Android Changelog
## v2.33.0
## v2.33.1
2025-12
* Target Android 16
+2 -2
View File
@@ -33,8 +33,8 @@ android {
useLibrary 'org.apache.http.legacy'
defaultConfig {
versionCode 30000733
versionName "2.33.0"
versionCode 30000734
versionName "2.33.1"
applicationId "chat.delta.lite"
multiDexEnabled true
+35 -29
View File
@@ -55,10 +55,10 @@
<li><a href="#advanced">Advanced</a>
<ul>
<li><a href="#experimental-features">Experimental Features</a></li>
<li><a href="#statssending">What is “Send statistics to Delta Chats developers”?</a></li>
<li><a href="#can-i-use-a-classic-email-address-with-delta-chat">Can I use a classic email address with Delta Chat?</a></li>
<li><a href="#classic-email">How can I configure a chat profile with a classic email address as relay?</a></li>
<li><a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">I want to manage my own server for Delta Chat. What do you recommend?</a></li>
<li><a href="#statssending">What is “Send statistics to Delta Chats developers”?</a></li>
<li><a href="#im-interested-in-the-technical-details-can-you-tell-me-more">Im interested in the technical details. Can you tell me more?</a></li>
</ul>
</li>
@@ -1009,34 +1009,6 @@ you can try out features we are working on.</p>
<p>You can find more information
and give feedback in the <a href="https://support.delta.chat">Forum</a>.</p>
<h3 id="statssending">
What is “Send statistics to Delta Chats developers”? <a href="#statssending" class="anchor"></a>
</h3>
<p>We would like to improve Delta Chat with your help,
which is why Delta Chat for Android asks whether you want
to send anonymous usage statistics.</p>
<p>You can turn it on and off at
<strong>Settings → Advanced → Send statistics to Delta Chats developers</strong>.</p>
<p>When you turn it on,
weekly statistics will be automatically sent to a bot.</p>
<p>We are interested e.g. in statistics like:</p>
<ul>
<li>How many contacts are introduced by personally scanning a QR code?</li>
<li>Which versions of Delta Chat are being used?</li>
<li>How many messages are unencrypted?</li>
</ul>
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
<h3 id="can-i-use-a-classic-email-address-with-delta-chat">
@@ -1102,6 +1074,40 @@ except if your users devices require Google/Apple <a href="#instant-delivery"
and <a href="https://github.com/chatmail/core">core Rust developments</a>
that power <a href="https://chatmail.at/clients">chatmail clients</a> of which Delta Chat is the most well known.</p>
<h3 id="statssending">
What is “Send statistics to Delta Chats developers”? <a href="#statssending" class="anchor"></a>
</h3>
<p>We would like to improve Delta Chat with your help,
which is why Delta Chat for Android asks whether you want
to send anonymous usage statistics.</p>
<p>You can turn it on and off at
<strong>Settings → Advanced → Send statistics to Delta Chats developers</strong>.</p>
<p>When you turn it on,
weekly statistics will be automatically sent to a bot.</p>
<p>We are interested e.g. in statistics like:</p>
<ul>
<li>
<p>How many contacts are introduced by personally scanning a QR code?</p>
</li>
<li>
<p>Which versions of Delta Chat are being used?</p>
</li>
<li>
<p>What errors occur for users?</p>
</li>
</ul>
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
<h3 id="im-interested-in-the-technical-details-can-you-tell-me-more">
@@ -37,8 +37,8 @@ public abstract class BaseActionBarActivity extends AppCompatActivity {
onPreCreate();
super.onCreate(savedInstanceState);
// Only enable Edge-to-Edge on API 30+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
// Only enable Edge-to-Edge if it is well supported
if (ViewUtil.isEdgeToEdgeSupported()) {
// docs says to use: WindowCompat.enableEdgeToEdge(getWindow());
// but it actually makes things worse, the next takes care of setting the 3-buttons navigation bar background
EdgeToEdge.enable(this);
@@ -880,6 +880,13 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
ImageButton quickCameraToggle = ViewUtil.findById(this, R.id.quick_camera_toggle);
if (!ViewUtil.isEdgeToEdgeSupported()) {
// since insets will not be applied, we need to set top padding to avoid drawing behind toolbar
try (TypedArray typedArray = obtainStyledAttributes(new int[]{android.R.attr.actionBarSize})) {
int paddingTop = typedArray.getDimensionPixelSize(0, 0);
container.setPadding(container.getPaddingLeft(), paddingTop, container.getPaddingRight() , container.getPaddingBottom());
}
}
// apply padding top to avoid drawing behind top bar
ViewUtil.applyWindowInsets(findViewById(R.id.fragment_content), false, true, false, false);
// apply padding to root to avoid collision with system bars
@@ -118,7 +118,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
// it is not needed to keep all past update messages, however, when deleted, also the strings should be deleted.
try {
DcContext dcContext = DcHelper.getContext(this);
final String deviceMsgLabel = "update_2_25_0_android-b";
final String deviceMsgLabel = "update_2_33_1_android";
if (!dcContext.wasDeviceMsgEverAdded(deviceMsgLabel)) {
DcMsg msg = null;
if (!getIntent().getBooleanExtra(FROM_WELCOME, false)) {
@@ -129,7 +129,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
// Util.copy(inputStream, new FileOutputStream(outputFile));
// msg.setFile(outputFile, "image/jpeg");
msg.setText(getString(R.string.update_2_25, "https://i.delta.chat/#0A45953086F0C166D3BAF1D4BB2025496E4C2704&x=MVPi07rQBEmHO4FRb3brpwDe&j=n8mkKqu42WAKKUCx1bQOVh23&s=RxuXoa0vhvTs0QLsWM45Ues0&a=adb%40arcanechat.me&n=adb&b=ArcaneChat+Channel", "https://arcanechat.me/#contribute"));
msg.setText(getString(R.string.update_2_33, "https://arcanechat.me/#contribute"));
}
dcContext.addDeviceMsg(deviceMsgLabel, msg);
@@ -52,6 +52,7 @@ import org.thoughtcrime.securesms.profiles.AvatarHelper;
import org.thoughtcrime.securesms.proxy.ProxySettingsActivity;
import org.thoughtcrime.securesms.qr.RegistrationQrActivity;
import org.thoughtcrime.securesms.relay.EditRelayActivity;
import org.thoughtcrime.securesms.relay.RelayListActivity;
import org.thoughtcrime.securesms.scribbles.ScribbleActivity;
import org.thoughtcrime.securesms.util.IntentUtils;
import org.thoughtcrime.securesms.util.Prefs;
@@ -108,11 +109,18 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
boolean fromWelcome = getIntent().getBooleanExtra(FROM_WELCOME, false);
if (DcHelper.getContext(this).isConfigured() == 1) {
// if account is configured it means we didn't come from Welcome screen nor from QR scanner,
// instead, user clicked a dcaccount:// URI directly, so we need to switch to a new account:
AccountManager.getInstance().beginAccountCreation(this);
// instead, user clicked a dcaccount:// URI directly, so we need to just offer to add a new relay
Intent intent = new Intent(this, RelayListActivity.class);
String qrData = getIntent().getData().toString();
intent.putExtra(RelayListActivity.EXTRA_QR_DATA, qrData);
startActivity(intent);
finish();
return;
}
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(!fromWelcome) {
@Override
public void handleOnBackPressed() {
@@ -102,6 +102,8 @@ public class WebViewActivity extends PassphraseRequiredActionBarActivity
case "mailto":
case "openpgp4fpr":
case "geo":
case "dcaccount":
case "dclogin":
return openOnlineUrl(url);
}
}
@@ -131,7 +131,7 @@ public class DcHelper {
dcContext.setStockTranslation(68, context.getString(R.string.device_talk));
dcContext.setStockTranslation(69, context.getString(R.string.saved_messages));
dcContext.setStockTranslation(70, context.getString(R.string.device_talk_explain));
dcContext.setStockTranslation(71, context.getString(R.string.device_talk_welcome_message2));
dcContext.setStockTranslation(71, context.getString(R.string.device_welcome_message, "https://i.delta.chat/#0A45953086F0C166D3BAF1D4BB2025496E4C2704&x=MVPi07rQBEmHO4FRb3brpwDe&j=n8mkKqu42WAKKUCx1bQOVh23&s=RxuXoa0vhvTs0QLsWM45Ues0&a=adb%40arcanechat.me&n=adb&b=ArcaneChat+Channel"));
dcContext.setStockTranslation(73, context.getString(R.string.systemmsg_subject_for_new_contact));
dcContext.setStockTranslation(74, context.getString(R.string.systemmsg_failed_sending_to));
dcContext.setStockTranslation(84, context.getString(R.string.configuration_failed_with_error));
@@ -31,7 +31,6 @@ import org.thoughtcrime.securesms.relay.RelayListActivity;
import org.thoughtcrime.securesms.connect.DcEventCenter;
import org.thoughtcrime.securesms.proxy.ProxySettingsActivity;
import org.thoughtcrime.securesms.util.Prefs;
import org.thoughtcrime.securesms.util.ScreenLockUtil;
import org.thoughtcrime.securesms.util.StreamUtil;
import org.thoughtcrime.securesms.util.Util;
@@ -149,10 +148,7 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment
Preference relayListBtn = this.findPreference("pref_relay_list_button");
if (relayListBtn != null) {
relayListBtn.setOnPreferenceClickListener(((preference) -> {
boolean result = ScreenLockUtil.applyScreenLock(requireActivity(), getString(R.string.transports), getString(R.string.enter_system_secret_to_continue), REQUEST_CODE_CONFIRM_CREDENTIALS_ACCOUNT);
if (!result) {
openRelayListActivity();
}
openRelayListActivity();
return true;
}));
}
@@ -17,6 +17,7 @@ import org.thoughtcrime.securesms.ConversationActivity;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.connect.AccountManager;
import org.thoughtcrime.securesms.connect.DcHelper;
import org.thoughtcrime.securesms.relay.RelayListActivity;
import org.thoughtcrime.securesms.util.IntentUtils;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.views.ProgressDialog;
@@ -282,7 +283,16 @@ public class QrCodeHandler {
Util.runOnMain(() -> {
if (!progressDialog.isShowing()) return; // canceled dialog, nothing to do
if (finalError != null) {
Toast.makeText(activity, finalError, Toast.LENGTH_LONG).show();
new AlertDialog.Builder(activity)
.setTitle(R.string.error)
.setMessage(finalError)
.setPositiveButton(R.string.ok, null)
.show();
} else {
showDoneToast(activity);
if (!(activity instanceof RelayListActivity)) {
activity.startActivity(new Intent(activity, RelayListActivity.class));
}
}
try {
progressDialog.dismiss();
@@ -37,6 +37,7 @@ public class RelayListActivity extends BaseActionBarActivity
implements RelayListAdapter.OnRelayClickListener, DcEventCenter.DcEventDelegate {
private static final String TAG = RelayListActivity.class.getSimpleName();
public static final String EXTRA_QR_DATA = "qr_data";
private RelayListAdapter adapter;
private Rpc rpc;
@@ -83,6 +84,12 @@ public class RelayListActivity extends BaseActionBarActivity
DcEventCenter eventCenter = DcHelper.getEventCenter(this);
eventCenter.addObserver(DcContext.DC_EVENT_CONFIGURE_PROGRESS, this);
String qrdata = getIntent().getStringExtra(EXTRA_QR_DATA);
if (qrdata != null) {
QrCodeHandler qrCodeHandler = new QrCodeHandler(this);
qrCodeHandler.handleQrData(qrdata);
}
}
@Override
@@ -299,6 +299,11 @@ public class ViewUtil {
return selection;
}
/** Return true if the system supports edge-to-edge properly */
public static boolean isEdgeToEdgeSupported() {
return Build.VERSION.SDK_INT >= VERSION_CODES.R;
}
/**
* Get combined insets from status bar, navigation bar and display cutout areas.
*
@@ -335,7 +340,7 @@ public class ViewUtil {
*/
public static void applyWindowInsetsAsMargin(@NonNull View view, boolean left, boolean top, boolean right, boolean bottom) {
// Only enable on API 30+ where WindowInsets APIs work correctly
if (Build.VERSION.SDK_INT < VERSION_CODES.R) return;
if (!isEdgeToEdgeSupported()) return;
// Store the original margin as a tag only if not already stored
// This prevents losing the true original margin on subsequent calls
@@ -406,7 +411,7 @@ public class ViewUtil {
*/
public static void applyWindowInsets(@NonNull View view, boolean left, boolean top, boolean right, boolean bottom) {
// Only enable on API 30+ where WindowInsets APIs work correctly
if (Build.VERSION.SDK_INT < VERSION_CODES.R) return;
if (!isEdgeToEdgeSupported()) return;
// Store the original padding as a tag only if not already stored
// This prevents losing the true original padding on subsequent calls
@@ -475,7 +480,7 @@ public class ViewUtil {
*/
public static void adjustToolbarForE2E(@NonNull AppCompatActivity activity) {
// Only enable on API 30+ where WindowInsets APIs work correctly
if (Build.VERSION.SDK_INT < VERSION_CODES.R) return;
if (!isEdgeToEdgeSupported()) return;
// The toolbar/app bar should extend behind the status bar with padding applied
View toolbar = activity.findViewById(R.id.toolbar);
@@ -18,11 +18,11 @@ import org.thoughtcrime.securesms.connect.DcHelper;
public class WebxdcGarbageCollectionWorker extends ListenableWorker {
private static final String TAG = WebxdcGarbageCollectionWorker.class.getSimpleName();
private Rpc rpc;
private Context context;
public WebxdcGarbageCollectionWorker(Context context, WorkerParameters params) {
super(context, params);
rpc = DcHelper.getRpc(context);
this.context = context;
}
@Override
@@ -42,6 +42,13 @@ public class WebxdcGarbageCollectionWorker extends ListenableWorker {
return;
}
Rpc rpc = DcHelper.getRpc(context);
if (rpc == null) {
Log.e(TAG, "Failed to get access to RPC, Webxdc storage garbage collection aborted.");
completer.set(Result.failure());
return;
}
for (Object key : origins.keySet()) {
String url = (String)key;
Matcher m = WEBXDC_URL_PATTERN.matcher(url);
Binary file not shown.

Before

Width:  |  Height:  |  Size: 630 KiB

After

Width:  |  Height:  |  Size: 621 KiB

+1 -19
View File
@@ -1,16 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<!-- custom strings -->
<string name="description">Descripción</string>
<string name="or_separator">o</string>
<string name="online">en línea</string>
<string name="pink">Rosa</string>
<string name="gray">Gris</string>
<string name="share_location_for_12_hours">Por 12 horas</string>
<string name="force_e2ee">Forzar el cifrado de extremo a extremo</string>
<string name="disable_force_e2ee_warning">⚠️ Si desactivas esta opción, no estarás protegido contra el envío accidental de mensajes no cifrados. Desactiva esta opción únicamente si quieres enviar correos electrónicos no cifrados con tu cuenta de correo electrónico clásica.</string>
<!-- End of custom strings -->
<!-- common strings without special context -->
<string name="app_name">Delta Chat</string>
<string name="ok">OK</string>
@@ -1202,12 +1191,5 @@ Desactiva este ajuste solo si has eliminado este perfil de todos tus demás disp
<string name="perm_enable_bg_already_done">Ya has permitido que Delta Chat reciba mensajes en segundo plano.\n\nSi los mensajes aún no llegan en segundo plano, compruebe también la configuración de su sistema.</string>
<!-- device messages for updates -->
<string name="update_2_25">🔮 ¿Qué hay de nuevo?\n\n★ Ahora es posible crear canales con enlace de invitación. Únete al canal oficial (en inglés) de Delta Chat aquí: %1$s\n\n★ Ahorro de datos: reducido el tamaño de las notificaciones de lectura\n\n★ Ahora es posible guardar en el almacenamiento archivos compartidos por mini-apps\n\n★ Más protección de metadatos\n\n★ La creación de grupos se sincroniza immediatamente en todos tus dispositivos\n\n★ Arreglado el ordenamiento de multimedia en la galería del chat\n\n★ Varios otros arreglos y pequeñas mejoras\n\n\n💜 Dona para ayudarnos a mantener nuestra independencia y seguir mejorando: %1$s</string>
<string name="update_2_0">🔮 ¿Qué hay de nuevo?\n\n★ El cifrado del chat es ahora más confiable, no puede degradarse, por lo que los candados 🔒 en los mensajes ya no son necesarios.\n\n★ Los correos sin cifrado aparecerán en su propio chat y marcados con un símbolo de correo ✉️\n\n★ Nueva pantalla de perfil mejorado\n\n★ Nuevo botón para acceder rápidamente a las mini-apps del chat\n\n\n💜 Dona para ayudarnos a mantener nuestra independencia y seguir mejorando: %1$s</string>
<!-- deprecated -->
<string name="update_1_50_android">¿Qué hay de nuevo?\n\n❤️‍🔥 Nuevo selector de emojis con más emojis\n\n🎮 Aplicaciones de chat mejoradas: recibe notificaciones y abre aplicaciones en contexto, por ejemplo, abre una entrada de calendario agregada directamente\n\n👍 Recibe notificaciones sobre las reacciones a tus mensajes\n\n... 🛠️ CORRECCIONES y AÚN MÁS en %1$s</string>
<!-- deprecated -->
<string name="update_switch_profile_placement">️ Se movió la opción \"Cambiar perfil\": toca tu imagen de perfil en la esquina superior de la pantalla principal para agregar o cambiar perfiles 💡</string>
<string name="update_2_0">¿Qué hay de nuevo?\n\n💯 El cifrado de extremo a extremo es fiable y para siempre. ¡Se acabaron los candados 🔒!\n\n✉️ El correo electrónico clásico sin cifrado de extremo a extremo es marcado con un símbolo de carta.\n\n😻 Nueva pantalla de perfil mejorada para todos tus contactos.\n\n🔲 Nuevo botón para acceder rápidamente a las apps usadas en el chat.\n\n❤️ Dona para ayudarnos a mantener nuestra independencia y seguir mejorando: %1$s</string>
</resources>
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="description">Descripción</string>
<string name="or_separator">o</string>
<string name="online">en línea</string>
<string name="pink">Rosa</string>
<string name="gray">Gris</string>
<string name="share_location_for_12_hours">Por 12 horas</string>
<!-- device messages for updates -->
<string name="device_welcome_message">🔮 Bienvenido a ArcaneChat✨\n\nPara ponerte en contacto con amigos:\n\n🤳🏻 Toca \"Código QR\" en la pantalla principal de ambos dispositivos. Elije \"Escanear código QR\" en un dispositivo y apúnta la cámara hacia el otro\n\n🔗 Si no estás en la misma habitación, comparte tu enlace de invitación usando \"Invitar amigos\" en el menú\n\n📢 Únete al [Canal Oficial de ArcaneChat](%1$s) para noticias sobre el desarrollo de la aplicación.</string>
<string name="update_2_33">🔮 ¿Qué hay de nuevo?\n\n★ Soporte para Android 16\n\n★ Mejorado el diseño para hacer mejor uso del espacio en pantalla\n\n★ Añadido color a los enlaces en las burbujas del chat\n\n★ Más protección de metadatos de los mensajes\n\n★ Arreglado problema con fallos inesperados de la aplicación\n\n★ Varios otros arreglos y pequeñas mejoras\n\n\n💜 Dona para ayudarnos a mantener nuestra independencia y seguir mejorando: %1$s</string>
</resources>
+10 -10
View File
@@ -368,7 +368,7 @@
<string name="device_talk">Сообщения устройства</string>
<string name="device_talk_subtitle">Сообщения, созданные устройством</string>
<string name="device_talk_explain">Сообщения в этом чате создаются локально на вашем устройстве для уведомления о обновлениях и проблемах при использовании приложения.</string>
<string name="device_talk_welcome_message2">Оставайтесь на связи!\n\n🙌 Нажмите \"QR-код\" на главном экране обоих устройств. Выберите \"Сканировать QR-код\" на одном устройстве и покажите его на другом.\n\n🌍 Если вы не находитесь в одном помещении, отсканируйте код с помощью видеозвонка или поделитесь ссылкой-приглашением из раздела \"Сканировать QR-код\"\n\nЗатем: наслаждайтесь работой мессенджера через самую крупную децентрализованную сеть, которая когда-либо существовала — электронную почту. И, в отличие от других популярных приложений, без централизованного контроля, отслеживания или продажи вас, ваших друзей, коллег или семьи крупным организациям.</string>
<string name="device_talk_welcome_message2">Оставайтесь на связи!\n\n🙌 Нажмите \"QR-код\" на главном экране обоих устройств. Выберите \"Сканировать QR-код\" на одном устройстве и покажите его на другом.\n\n🌍 Если вы не находитесь в одном помещении, отсканируйте код с помощью видеозвонка или поделитесь ссылкой-приглашением из раздела \"Сканировать QR-код\"\n\nЗатем: Наслаждайтесь децентрализованным мессенджером. В отличие от других популярных приложений, он работает без центрального управления, отслеживания и продажи ваших данных, а также данных ваших друзей, коллег или семьи крупным организациям.</string>
<string name="edit_contact">Редактировать контакт</string>
<!-- Verb "to pin", making something sticky, not a noun or abbreviation for "pin number". -->
<string name="pin_chat">Закрепить чат</string>
@@ -648,7 +648,7 @@
<!-- Secondary button on the welcome screen, allows to "Add as Second Device", "Restore from Backup" -->
<string name="onboarding_alternative_logins">У меня уже есть профиль</string>
<!-- This is a button and a title, allowing to log in to existing, classic email accounts, setting ports, passwords and so on -->
<string name="manual_account_setup_option">Использовать электронную почту как транспорт</string>
<string name="manual_account_setup_option">Использовать электронную почту как релей</string>
<!-- Instant onboarding title (there is not more to do than to set name and avatar) -->
<string name="instant_onboarding_title">Ваш профиль</string>
<!-- The placeholder will be replaced by the default onboarding server -->
@@ -700,15 +700,15 @@
<string name="proxy_enabled">Прокси включен</string>
<string name="proxy_enabled_hint">Вы используете прокси. При проблемах с подключением, попробуйте другой прокси.</string>
<!-- "Relay" refers to the relay servers used; please chose a common term in your language, no need to be literal. If in doubt, stay with "Relay" -->
<string name="transports">Транспорты</string>
<string name="add_transport">Добавить транспорт</string>
<string name="remove_transport">Удалить транспорт</string>
<string name="edit_transport">Редактировать транспорт</string>
<string name="transports">Релеи</string>
<string name="add_transport">Добавить релей</string>
<string name="remove_transport">Удалить релей</string>
<string name="edit_transport">Редактировать релей</string>
<!-- shown if a QR code was scanned that can be used as a relay -->
<string name="confirm_add_transport">Добавить этот транспорт?</string>
<string name="invalid_transport_qr">Отсканированный QR-код не содержит корректный транспорт.</string>
<string name="confirm_add_transport">Добавить этот релей?</string>
<string name="invalid_transport_qr">Отсканированный QR-код не содержит корректный релей.</string>
<!-- placeholder will be replaced by a relay server name -->
<string name="confirm_remove_transport">Удалить транспорт \"%1$s\"?\n\nВаши контакты смогут связаться с вами, только если вы ранее связывались с ними через другой транспорт.\n\nЕсли сомневаетесь, удалите транспорт позже.</string>
<string name="confirm_remove_transport">Удалить транспорт \"%1$s\"?\n\nВаши контакты смогут связаться с вами, только если вы ранее связывались с ними через другой релей.\n\nЕсли сомневаетесь, удалите релей позже.</string>
<string name="login_certificate_checks">Проверки сертификатов</string>
<string name="login_error_mail">Введите корректный адрес электронной почты</string>
@@ -981,7 +981,7 @@
<string name="ephemeral_timer_weeks_by_other">%2$s включает автоудаление сообщений через %1$s недель.</string>
<string name="chat_unencrypted_explanation">Сообщения в этом чате используют обычную электронную почту и не зашифрованы сквозным шифрованием.</string>
<string name="chat_protection_enabled_tap_to_learn_more">Сообщения защищены сквозным шифрованием. Нажмите, чтобы узнать больше.</string>
<string name="chat_protection_enabled_explanation">Все сообщения в этом чате защищены сквозным шифрованием.\n\nСквозное шифрование гарантирует, что сообщения остаются конфиденциальными между вами и вашими собеседниками. Ни серверы, ни провайдеры, ни ретрансляторы не смогут их прочитать.</string>
<string name="chat_protection_enabled_explanation">Все сообщения в этом чате зашифрованы сквозным шифрованием.\n\nСквозное шифрование обеспечивает конфиденциальность переписки между вами и вашими собеседниками. Ни серверы, ни провайдеры, ни релеи не смогут прочитать сообщения.</string>
<string name="invalid_unencrypted_tap_to_learn_more">⚠️ %1$s требуется сквозное шифрование, которое ещё не настроено для данного чата. Нажмите, чтобы узнать больше.</string>
<string name="invalid_unencrypted_explanation">Чтобы установить сквозное шифрование, вы можете встретиться с контактами лично и отсканировать их QR-код, чтобы подтвердить их личность.</string>
<string name="learn_more">Узнать больше</string>
+8 -8
View File
@@ -612,7 +612,7 @@
<!-- Secondary button on the welcome screen, allows to "Add as Second Device", "Restore from Backup" -->
<string name="onboarding_alternative_logins">Zaten Bir Profilim Var</string>
<!-- This is a button and a title, allowing to log in to existing, classic email accounts, setting ports, passwords and so on -->
<string name="manual_account_setup_option">Taşıma Aracı Olarak Klasik E-Posta Kullan</string>
<string name="manual_account_setup_option">Aktarıcı Olarak Klasik E-Posta Kullan</string>
<!-- Instant onboarding title (there is not more to do than to set name and avatar) -->
<string name="instant_onboarding_title">Profiliniz</string>
<!-- The placeholder will be replaced by the default onboarding server -->
@@ -664,15 +664,15 @@
<string name="proxy_enabled">Proxy Etkinleştirildi</string>
<string name="proxy_enabled_hint">Bir proxy kullanıyorsunuz. Bağlanmakta sorun yaşıyorsanız başka bir proxy deneyin.</string>
<!-- "Relay" refers to the relay servers used; please chose a common term in your language, no need to be literal. If in doubt, stay with "Relay" -->
<string name="transports">Taşıma Araçları</string>
<string name="add_transport">Taşıma Aracı Ekle</string>
<string name="remove_transport">Taşıma Aracını Kaldır</string>
<string name="edit_transport">Taşıma Aracını Düzenle</string>
<string name="transports">Aktarıcılar</string>
<string name="add_transport">Aktarıcı Ekle</string>
<string name="remove_transport">Aktarıcıyı Kaldır</string>
<string name="edit_transport">Aktarıcıyı Düzenle</string>
<!-- shown if a QR code was scanned that can be used as a relay -->
<string name="confirm_add_transport">Bu taşıma aracı eklensin mi?</string>
<string name="invalid_transport_qr">Taranan QR kodu, geçerli bir taşıma aracı içermiyor.</string>
<string name="confirm_add_transport">Bu aktarıcı eklensin mi?</string>
<string name="invalid_transport_qr">Taranan QR kodu, geçerli bir aktarıcı içermiyor.</string>
<!-- placeholder will be replaced by a relay server name -->
<string name="confirm_remove_transport">“%1$s” taşıma aracı kaldırılsın mı?\n\nKişileriniz yalnızca onlara önceden ulaştığınız başka bir taşıma aracı üzerinden size ulaşabilir.\n\nKuşkuluysanız taşıma aracını daha sonra kaldırın.</string>
<string name="confirm_remove_transport">“%1$s” aktarıcısı kaldırılsın mı?\n\nKişileriniz yalnızca onlara önceden ulaştığınız başka bir aktarıcı üzerinden size ulaşabilir.\n\nKuşkuluysanız aktarıcıyı daha sonra kaldırın.</string>
<string name="login_certificate_checks">Sertifika Denetimleri</string>
<string name="login_error_mail">Lütfen geçerli bir e-posta adresi girin</string>
+9 -9
View File
@@ -335,7 +335,7 @@
<string name="device_talk">设备消息</string>
<string name="device_talk_subtitle">本地生成的消息</string>
<string name="device_talk_explain">此聊天中的消息是由 Delta Chat 应用本地生成的。 它的制作者使用它来通知应用更新和使用过程中出现的问题。</string>
<string name="device_talk_welcome_message2">取得联系!\n\n🙌 轻按两台设备主屏上的“二维码”。 在其中一台设备上选择“扫描二维码”,将其对准另一台设备上显示的二维码\n\n🌍 如果双方不在同一个房间内,可以通过视频通话进行扫描,或“扫描二维码”那里分享一个邀请链接\n\n接下来: 通过有史以来存在的最大去中心化网络:电子邮件来享受收发消息。和其他流行的即时聊天应用相比,DeltaChat 没有中央控制,不跟踪您本人、您的友、同事或家人,也不售卖你们的数据给大型组织。</string>
<string name="device_talk_welcome_message2">取得联系!\n\n🙌 两台设备主屏幕上点击“二维码”。一台设备上选择“扫描二维码”,然后将其对准另一台设备\n\n🌍 如果双方不在同一个房间内,可以通过视频通话进行扫描,或分享“扫描二维码”中的邀请链接\n\n然后:尽情享受去中心化的即时通讯应用的体验。与其他流行应用不同,我们不会进行中心化控制、追踪或将您、您的友、同事或家人的数据出售给大型组织。</string>
<string name="edit_contact">编辑联系人</string>
<!-- Verb "to pin", making something sticky, not a noun or abbreviation for "pin number". -->
<string name="pin_chat">固定聊天</string>
@@ -594,7 +594,7 @@
<!-- Secondary button on the welcome screen, allows to "Add as Second Device", "Restore from Backup" -->
<string name="onboarding_alternative_logins">我已有账号</string>
<!-- This is a button and a title, allowing to log in to existing, classic email accounts, setting ports, passwords and so on -->
<string name="manual_account_setup_option">使用传统电子邮件作为传输</string>
<string name="manual_account_setup_option">使用传统电子邮件作为中继</string>
<!-- Instant onboarding title (there is not more to do than to set name and avatar) -->
<string name="instant_onboarding_title">个人资料</string>
<!-- The placeholder will be replaced by the default onboarding server -->
@@ -646,15 +646,15 @@
<string name="proxy_enabled">代理已启用</string>
<string name="proxy_enabled_hint">您正在使用代理。如果您在连接时遇到问题,请尝试其他代理。</string>
<!-- "Relay" refers to the relay servers used; please chose a common term in your language, no need to be literal. If in doubt, stay with "Relay" -->
<string name="transports">传输</string>
<string name="add_transport">添加传输</string>
<string name="remove_transport">移除传输</string>
<string name="edit_transport">编辑传输</string>
<string name="transports">中继</string>
<string name="add_transport">添加中继</string>
<string name="remove_transport">移除中继</string>
<string name="edit_transport">编辑中继</string>
<!-- shown if a QR code was scanned that can be used as a relay -->
<string name="confirm_add_transport">添加此传输</string>
<string name="invalid_transport_qr">扫描的二维码不包含有效的传输</string>
<string name="confirm_add_transport">添加此中继</string>
<string name="invalid_transport_qr">扫描的二维码不包含有效的中继</string>
<!-- placeholder will be replaced by a relay server name -->
<string name="confirm_remove_transport">移除传输“%1$s”?\n\n只有您之前通过其他传输联系过您的联系人,他们才能联系到您。\n\n如有疑问,请稍后移除传输</string>
<string name="confirm_remove_transport">移除中继“%1$s”?\n\n只有您之前通过其他中继联系过您的联系人,他们才能联系到您。\n\n如有疑问,请稍后移除中继</string>
<string name="login_certificate_checks">证书检查</string>
<string name="login_error_mail">请输入有效的电子邮件地址</string>
+3 -23
View File
@@ -1,19 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<!-- custom strings -->
<string name="description">Description</string>
<string name="could_not_open_file">Could not open file</string>
<string name="menu_export_image">Export Image</string>
<!-- the word "or" to separate blocks in the user interface that are mutually exclusive -->
<string name="or_separator">or</string>
<string name="online">online</string>
<string name="pink">Pink</string>
<string name="gray">Gray</string>
<string name="share_location_for_12_hours">For 12 hours</string>
<string name="force_e2ee">Force End-To-End Encryption</string>
<string name="disable_force_e2ee_warning">⚠️ If you disable this option, you will not be protected against sending unencrypted messages by accident. Only disable this if you want to send unencrypted e-mails with your classic e-mail account.</string>
<!-- End of custom strings -->
<!-- common strings without special context -->
<string name="app_name">ArcaneChat</string>
<string name="ok">OK</string>
@@ -1007,13 +993,14 @@
<string name="qrshow_join_contact_hint">Scan to chat with %1$s</string>
<string name="qrshow_join_contact_no_connection_toast">No internet connection, can\'t perform QR code setup.</string>
<string name="qraccount_ask_create_and_login">Create new profile on \"%1$s\" and log in there?</string>
<!-- deprecated, use confirm_add_transport when scanning such a QR code from the main scanner -->
<string name="qraccount_ask_create_and_login_another">Create new profile on \"%1$s\" and log in there?\n\nYour existing profile will not be deleted. Use the \"Switch Profile\" item to switch between your profiles.</string>
<string name="set_name_and_avatar_explain">Set a name that your contacts will recognize. You can also set a profile image.</string>
<string name="please_enter_name">Please enter a name.</string>
<string name="qraccount_qr_code_cannot_be_used">The scanned QR code cannot be used to set up a new profile.</string>
<!-- the placeholder will be replaced by the address of the profile -->
<string name="qrlogin_ask_login">Log into \"%1$s\"?</string>
<!-- the placeholder will be replaced by the address of the profile -->
<!-- deprecated, use confirm_add_transport when scanning such a QR code from the main scanner -->
<string name="qrlogin_ask_login_another">Log into \"%1$s\"?\n\nYour existing profile will not be deleted. Use the \"Switch Profile\" item to switch between your profiles.</string>
<!-- first placeholder will be replaced by name of the inviter, second placeholder will be replaced by the name of the inviter. -->
<string name="secure_join_started">%1$s invited you to join this group.\n\nWaiting for the device of %2$s to reply…</string>
@@ -1192,12 +1179,5 @@
<string name="perm_enable_bg_already_done">You already allowed Delta Chat to receive messages in the background.\n\nIf messages still do not arrive in background, please also check your system settings.</string>
<!-- device messages for updates -->
<string name="update_2_25">🔮 What\'s new?\n\n★ Now it is possible to create channels that have invite links! Join the official Delta Chat channel here: %1$s\n\n★ More metadata protection\n\n★ Better multi-device: synchronize group creation across devices\n\n★ Data saving: reduce size of read receipts\n\n★ Improved onboarding speed\n\n★ Now it is possible to save to storage files shared from inside in-chat apps\n\n★ Fixed sorting of old media in the chat\'s gallery\n\n★ Several other fixes and small improvements\n\n\n💜 Please donate to help us remain independent and continue to bring improvements: %2$s</string>
<string name="update_2_0">🔮 What\'s new?\n\n★ End-to-end encryption is reliable and forever now so padlocks 🔒 are not needed anymore.\n\n★ Classic email without end-to-end encryption is marked with a letter symbol ✉️\n\n★ New enhanced profile screen for all your contacts\n\n★ New button for quick access to apps used in a chat\n\n\n💜 Please donate to help us remain independent and continue to bring improvements: %1$s</string>
<!-- deprecated -->
<string name="update_1_50_android">What\'s new?\n\n❤️‍🔥 New emojis picker with more emoji\n\n🎮 Enhanced in-chat apps: Get notifications and open supporting apps in context, i.e. open an added calendar entry directly\n\n👍 Get notified about reactions to your messages\n\n... 🛠️ FIXES and EVEN MORE at %1$s</string>
<!-- deprecated -->
<string name="update_switch_profile_placement">️ \"Switch Profile\" option moved: Tap your profile image in the upper corner of the main screen to add or switch profiles 💡</string>
<string name="update_2_0">What\'s new?\n\n💯 End-to-end encryption is reliable and forever now. Padlocks 🔒 are gone!\n\n✉️ Classic email without end-to-end encryption is marked with a letter symbol\n\n😻 New enhanced profile screen for all your contacts\n\n🔲 New button for quick access to apps used in a chat\n\n❤️ Please donate to help us remain independent and continue to bring improvements: %1$s</string>
</resources>
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="description">Description</string>
<string name="could_not_open_file">Could not open file</string>
<string name="menu_export_image">Export Image</string>
<!-- the word "or" to separate blocks in the user interface that are mutually exclusive -->
<string name="or_separator">or</string>
<string name="online">online</string>
<string name="pink">Pink</string>
<string name="gray">Gray</string>
<string name="share_location_for_12_hours">For 12 hours</string>
<!-- device messages for updates -->
<string name="device_welcome_message">🔮 Welcome to ArcaneChat✨\n\nTo get in contact with friends:\n\n🤳🏻 Tap \"QR code\" on the main screen of both devices. Choose \"Scan QR Code\" on one device, and point it at the other\n\n🔗 If not in the same room, you can share your invite link from \"Invite friends\" in the menu\n\n📢 Join the [Official ArcaneChat Channel](%1$s) to keep updated about the development status.</string>
<string name="update_2_33">🔮 What\'s new?\n\n★ Target Android 16\n\n★ Improve edge-to-edge support\n\n★ Change color of links in text messages\n\n★ Metadata protection: protect message recipients\n\n★ Fix: avoid freezing in background\n\n★ Improve handling of video recoding\n\n★ Several other fixes and small improvements\n\n\n💜 Please donate to help us remain independent and continue to bring improvements: %1$s</string>
</resources>