Commit 5af7bbb2 authored by akwizgran's avatar akwizgran

Merge branch 'master' into '1636-compression-failure'

# Conflicts:
#   bramble-android/src/main/java/org/briarproject/bramble/util/AndroidUtils.java
parents 26144c18 dd3c909b
Pipeline #4034 passed with stage
in 21 minutes and 18 seconds
......@@ -6,15 +6,25 @@ import android.content.Context;
import android.os.Build;
import android.provider.Settings;
import org.briarproject.bramble.api.Pair;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.annotation.Nullable;
import static android.content.Context.MODE_PRIVATE;
import static android.os.Build.VERSION.SDK_INT;
import static java.util.Arrays.asList;
import static org.briarproject.bramble.api.nullsafety.NullSafety.requireNonNull;
@NotNullByDefault
public class AndroidUtils {
// Fake Bluetooth address returned by BluetoothAdapter on API 23 and later
......@@ -22,7 +32,6 @@ public class AndroidUtils {
private static final String STORED_REPORTS = "dev-reports";
@SuppressWarnings("deprecation")
public static Collection<String> getSupportedArchitectures() {
List<String> abis = new ArrayList<>();
if (SDK_INT >= 21) {
......@@ -36,24 +45,64 @@ public class AndroidUtils {
public static String getBluetoothAddress(Context ctx,
BluetoothAdapter adapter) {
return getBluetoothAddressAndMethod(ctx, adapter).getFirst();
}
public static Pair<String, String> getBluetoothAddressAndMethod(Context ctx,
BluetoothAdapter adapter) {
// Return the adapter's address if it's valid and not fake
@SuppressLint("HardwareIds")
String address = adapter.getAddress();
if (isValidBluetoothAddress(address)) return address;
if (isValidBluetoothAddress(address)) {
return new Pair<>(address, "adapter");
}
// Return the address from settings if it's valid and not fake
address = Settings.Secure.getString(ctx.getContentResolver(),
"bluetooth_address");
if (isValidBluetoothAddress(address)) return address;
if (isValidBluetoothAddress(address)) {
return new Pair<>(address, "settings");
}
// Try to get the address via reflection
address = getBluetoothAddressByReflection(adapter);
if (isValidBluetoothAddress(address)) {
return new Pair<>(requireNonNull(address), "reflection");
}
// Let the caller know we can't find the address
return "";
return new Pair<>("", "");
}
private static boolean isValidBluetoothAddress(String address) {
private static boolean isValidBluetoothAddress(@Nullable String address) {
return !StringUtils.isNullOrEmpty(address)
&& BluetoothAdapter.checkBluetoothAddress(address)
&& !address.equals(FAKE_BLUETOOTH_ADDRESS);
}
@Nullable
private static String getBluetoothAddressByReflection(
BluetoothAdapter adapter) {
try {
Field mServiceField =
adapter.getClass().getDeclaredField("mService");
mServiceField.setAccessible(true);
Object mService = mServiceField.get(adapter);
// mService may be null when Bluetooth is disabled
if (mService == null) throw new NoSuchFieldException();
Method getAddressMethod =
mService.getClass().getMethod("getAddress");
return (String) getAddressMethod.invoke(mService);
} catch (NoSuchFieldException e) {
return null;
} catch (IllegalAccessException e) {
return null;
} catch (NoSuchMethodException e) {
return null;
} catch (InvocationTargetException e) {
return null;
} catch (SecurityException e) {
return null;
}
}
public static File getReportDir(Context ctx) {
return ctx.getDir(STORED_REPORTS, MODE_PRIVATE);
}
......
......@@ -6,6 +6,4 @@ package org.briarproject.bramble.api;
public interface FeatureFlags {
boolean shouldEnableImageAttachments();
boolean shouldEnablePrivateMessageDeletion();
}
......@@ -18,17 +18,6 @@ public class BrambleCoreIntegrationTestModule {
@Provides
FeatureFlags provideFeatureFlags() {
return new FeatureFlags() {
@Override
public boolean shouldEnableImageAttachments() {
return true;
}
@Override
public boolean shouldEnablePrivateMessageDeletion() {
return true;
}
};
return () -> true;
}
}
......@@ -235,17 +235,6 @@ public class AppModule {
@Provides
FeatureFlags provideFeatureFlags() {
return new FeatureFlags() {
@Override
public boolean shouldEnableImageAttachments() {
return IS_DEBUG_BUILD;
}
@Override
public boolean shouldEnablePrivateMessageDeletion() {
return IS_DEBUG_BUILD;
}
};
return () -> IS_DEBUG_BUILD;
}
}
......@@ -270,9 +270,7 @@ public class ConversationActivity extends BriarActivity
ConversationScrollListener scrollListener =
new ConversationScrollListener(adapter, viewModel);
list.getRecyclerView().addOnScrollListener(scrollListener);
if (featureFlags.shouldEnablePrivateMessageDeletion()) {
addSelectionTracker();
}
addSelectionTracker();
textInputView = findViewById(R.id.text_input_container);
if (featureFlags.shouldEnableImageAttachments()) {
......@@ -378,11 +376,6 @@ public class ConversationActivity extends BriarActivity
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.conversation_actions, menu);
// Hide private message deletion action if feature is not enabled
if (!featureFlags.shouldEnablePrivateMessageDeletion()) {
menu.removeItem(R.id.action_delete_all_messages);
}
// enable introduction action if available
observeOnce(viewModel.showIntroductionAction(), this, enable -> {
if (enable != null && enable) {
......
......@@ -7,15 +7,13 @@ import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
import android.provider.Settings;
import org.acra.builder.ReportBuilder;
import org.acra.builder.ReportPrimer;
import org.briarproject.bramble.util.StringUtils;
import org.briarproject.bramble.api.Pair;
import org.briarproject.briar.BuildConfig;
import org.briarproject.briar.android.BriarApplication;
import org.briarproject.briar.android.logging.BriefLogFormatter;
......@@ -23,7 +21,6 @@ import org.briarproject.briar.android.logging.BriefLogFormatter;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.Callable;
......@@ -43,8 +40,12 @@ import static android.content.Context.WIFI_SERVICE;
import static android.net.ConnectivityManager.TYPE_MOBILE;
import static android.net.ConnectivityManager.TYPE_WIFI;
import static android.net.wifi.WifiManager.WIFI_STATE_ENABLED;
import static android.os.Build.VERSION.SDK_INT;
import static java.util.Collections.unmodifiableMap;
import static org.briarproject.bramble.util.AndroidUtils.getBluetoothAddressAndMethod;
import static org.briarproject.bramble.util.PrivacyUtils.scrubInetAddress;
import static org.briarproject.bramble.util.PrivacyUtils.scrubMacAddress;
import static org.briarproject.bramble.util.StringUtils.isNullOrEmpty;
public class BriarReportPrimer implements ReportPrimer {
......@@ -195,63 +196,53 @@ public class BriarReportPrimer implements ReportPrimer {
// Is Bluetooth available?
BluetoothAdapter bt = BluetoothAdapter.getDefaultAdapter();
boolean btAvailable = bt != null;
// Is Bluetooth enabled?
boolean btEnabled = bt != null && bt.isEnabled() &&
!StringUtils.isNullOrEmpty(bt.getAddress());
// Is Bluetooth connectable?
boolean btConnectable = bt != null &&
(bt.getScanMode() == SCAN_MODE_CONNECTABLE ||
bt.getScanMode() ==
SCAN_MODE_CONNECTABLE_DISCOVERABLE);
// Is Bluetooth discoverable?
boolean btDiscoverable = bt != null &&
bt.getScanMode() == SCAN_MODE_CONNECTABLE_DISCOVERABLE;
// Is Bluetooth LE scanning and advertising supported?
boolean btLeApi = false, btLeScan = false, btLeAdvertise = false;
if (bt != null && Build.VERSION.SDK_INT >= 21) {
btLeApi = true;
btLeScan = bt.getBluetoothLeScanner() != null;
btLeAdvertise = bt.getBluetoothLeAdvertiser() != null;
}
if (bt == null) {
customData.put("Bluetooth status", "Not available");
} else {
// Is Bluetooth enabled?
boolean btEnabled = bt.isEnabled()
&& !isNullOrEmpty(bt.getAddress());
// Is Bluetooth connectable?
int scanMode = bt.getScanMode();
boolean btConnectable = scanMode == SCAN_MODE_CONNECTABLE ||
scanMode == SCAN_MODE_CONNECTABLE_DISCOVERABLE;
// Is Bluetooth discoverable?
boolean btDiscoverable =
scanMode == SCAN_MODE_CONNECTABLE_DISCOVERABLE;
String btStatus;
if (btAvailable) btStatus = "Available, ";
else btStatus = "Not available, ";
if (btEnabled) btStatus += "enabled, ";
else btStatus += "not enabled, ";
if (btConnectable) btStatus += "connectable, ";
else btStatus += "not connectable, ";
if (btDiscoverable) btStatus += "discoverable";
else btStatus += "not discoverable";
customData.put("Bluetooth status", btStatus);
if (btLeApi) {
String btLeStatus;
if (btLeScan) btLeStatus = "Scanning, ";
else btLeStatus = "No scanning, ";
if (btLeAdvertise) btLeStatus += "advertising";
else btLeStatus += "no advertising";
customData.put("Bluetooth LE status", btLeStatus);
}
String btStatus;
if (btEnabled) btStatus = "Available, enabled, ";
else btStatus = "Available, not enabled, ";
if (btConnectable) btStatus += "connectable, ";
else btStatus += "not connectable, ";
if (btDiscoverable) btStatus += "discoverable";
else btStatus += "not discoverable";
customData.put("Bluetooth status", btStatus);
if (bt != null) {
customData.put("Bluetooth address",
scrubMacAddress(bt.getAddress()));
}
String btSettingsAddr;
try {
btSettingsAddr = Settings.Secure.getString(
ctx.getContentResolver(), "bluetooth_address");
} catch (SecurityException e) {
btSettingsAddr = "Could not get address from settings";
if (SDK_INT >= 21) {
// Is Bluetooth LE scanning and advertising supported?
boolean btLeScan = bt.getBluetoothLeScanner() != null;
boolean btLeAdvertise =
bt.getBluetoothLeAdvertiser() != null;
String btLeStatus;
if (btLeScan) btLeStatus = "Scanning, ";
else btLeStatus = "No scanning, ";
if (btLeAdvertise) btLeStatus += "advertising";
else btLeStatus += "no advertising";
customData.put("Bluetooth LE status", btLeStatus);
}
Pair<String, String> p = getBluetoothAddressAndMethod(ctx, bt);
String address = p.getFirst();
String method = p.getSecond();
customData.put("Bluetooth address", scrubMacAddress(address));
customData.put("Bluetooth address method", method);
}
customData.put("Bluetooth address from settings",
scrubMacAddress(btSettingsAddr));
// Git commit ID
customData.put("Commit ID", BuildConfig.GitHash);
return Collections.unmodifiableMap(customData);
return unmodifiableMap(customData);
}
}
......
......@@ -41,11 +41,10 @@
<item quantity="one">Bu Briar\'ın test versiyasıdır. Hesabınız %dgün ərzində sona çatacaq və yeniləmə mümkün deyil.</item>
<item quantity="other">Bu Briar\'ın test versiyasıdır. Hesabınız %dgün ərzində sona çatacaq və yeniləmə mümkün deyil.</item>
</plurals>
<string name="expiry_update">Testin sona çatma tarixi uzadıldı. Hesabınız testi %d gün ərzində sona çatacaq.</string>
<string name="expiry_date_reached">Bu proqram sona çatdı. Test üçün təşəkkür edirik!</string>
<string name="download_briar">Briar istifadə etməyə davam etmək üçün, 1.0 versiyasını yükləyin.</string>
<string name="download_briar">Briar-dan istifadə etməyə davam etmək üçün ən son versiyanı yükləyin.</string>
<string name="create_new_account">Yeni bir hesab yaratmaq lazımdır, lakin eyni ləqəbi istifadə edə bilərsiniz.</string>
<string name="download_briar_button">Briar 1.0 yükləyin</string>
<string name="download_briar_button">Son versiyasını yükləyin </string>
<string name="startup_open_database">Məlumatlar şifrədən açılması...</string>
<string name="startup_migrate_database">Məlumatların təzələnməsi...</string>
<string name="startup_compact_database">Məlumatın sıxılması...</string>
......@@ -110,6 +109,7 @@
<string name="fix">Düzəliş</string>
<string name="help">Yardım</string>
<string name="sorry">Bağışlayın</string>
<string name="error_start_activity">Sizin sistemdə ələçatmazdır. </string>
<!--Contacts and Private Conversations-->
<string name="no_contacts">Göstərmək üçün əlaqə yoxdur</string>
<string name="no_contacts_action">Kontakt əlavə etmək üçün + işarəsinə toxunun</string>
......@@ -124,6 +124,10 @@
<string name="set_contact_alias">Kontakt adı dəyişdirin</string>
<string name="set_contact_alias_hint">Əlaqə adı</string>
<string name="set_alias_button">Dəyiş</string>
<string name="delete_all_messages">Bütün mesajları sil</string>
<string name="dialog_title_delete_all_messages">Silməyi təsdiq et</string>
<string name="dialog_message_delete_all_messages">Bütün mesajları silmək istədiyinizə əminsinizmi? </string>
<string name="dialog_title_not_all_messages_deleted">Bütün mesajları silmək alınmadı</string>
<string name="delete_contact">Kontakt silin</string>
<string name="dialog_title_delete_contact">Kontaktın silinməsini təsdiqləyin</string>
<string name="dialog_message_delete_contact">Bu kontaktı və bu kontaktla əvəzlənən bütün mesajları silmək istədiyinizə əminsinizmi?</string>
......@@ -139,6 +143,7 @@
<string name="dialog_message_no_image_support">Sizin Briar kontaktınız hələlik şəkillər dəstəkləmir. Təkmilləşmədən sonra fərqli bir simvol görürsünüz.</string>
<string name="dialog_title_image_support">İndi bu kontakta şəkilləri göndərə bilərsiniz</string>
<string name="dialog_message_image_support">Şəkilləri əlavə etmək üçün bu simvola toxunun.</string>
<string name="messaging_too_many_attachments_toast">Yalnız %d ilk şəkil göndəriləcək</string>
<!--Adding Contacts-->
<string name="add_contact_title">Yaxında kontakt əlavə etmək</string>
<string name="face_to_face">Kontakta əlavə etmək istədiyiniz şəxslə tanış olmalısınız. Bu, hər kəsin kimliyinizi və ya mesajlarınızı gələcəkdə oxumasını maneə törədir.</string>
......@@ -156,7 +161,7 @@
<string name="authenticating_with_device">Cihazla təsdiqlənir \u2026</string>
<string name="connection_error_title">Kontaktınıza qoşula bilmədi</string>
<string name="connection_error_explanation">Həmin Wi-Fi şəbəkəsinə qoşulduğunuzu yoxlayın.</string>
<string name="connection_error_feedback">Bu problem davam edərsə, tətbiqin təkmilləşdirilməsinə kömək etmək üçün rəy göndərin.</string>
<string name="connection_error_feedback"><a href="feedback">Bu problem davam edərsə, tətbiqin təkmilləşdirilməsinə kömək etmək üçün rəy göndərin.</a></string>
<!--Adding Contacts Remotely-->
<string name="add_contact_remotely_title_case">Məsafədə kontakt əlavə etmək </string>
<string name="add_contact_nearby_title">Yaxında kontakt əlavə etmək </string>
......@@ -196,6 +201,13 @@
<string name="step_1">1</string>
<!--This is a numeral indicating the second step in a series of screens-->
<string name="step_2">2</string>
<plurals name="contact_added_notification_text">
<item quantity="one">New contact added.</item>
<item quantity="other">%d yeni kontakt əlavə olundu. </item>
</plurals>
<string name="adding_contact_slow_warning">Bu kontaktın əlavə edilməsi adi haldan daha uzun sürür</string>
<string name="adding_contact_slow_title">Kontakta qoşula bilmir</string>
<string name="adding_contact_slow_text">Bu kontaktın əlavə edilməsi normaldan daha çox vaxt tələb edir.\n\nYoxlayın ki kontakt sizin linkinizi qəbul edib və sizi əlavə etdi: </string>
<string name="offline_state">İnternet bağlantısı yoxdur</string>
<string name="duplicate_link_dialog_title">Dublikat Link</string>
<!--This is a question asking whether two nicknames refer to the same person-->
......@@ -270,7 +282,7 @@
<string name="groups_reveal_contacts">Kontaktları aşkar edin</string>
<string name="groups_reveal_dialog_message">Bu qrupun bütün mövcud və gələcək üzvlərinə kontaktların aşkarlanıb veriləcəyini seçə bilərsiniz. \n\n Kontaktları geri götürmək, qrupun yaradıcısı olsa da, aşkar əlaqələrlə ünsiyyət qura biləcəyiniz üçün qrupla əlaqənizi daha sürətli və daha etibarlı edir.</string>
<string name="groups_reveal_visible">Kontakt qrupda görünə bilər</string>
<string name="groups_reveal_visible_revealed_by_us">Kontakt əlaqəsi qrupda görür</string>
<string name="groups_reveal_visible_revealed_by_us">Kontakt əlaqəsi qrupda görür (sizin üçün görsənir)</string>
<string name="groups_reveal_invisible">Kontakt əlaqəsi qrup üçün görünmür</string>
<!--Forums-->
<string name="no_forums">Göstərmək üçün forum yoxdur</string>
......@@ -353,7 +365,7 @@
<!--Settings Display-->
<string name="pref_language_title">Dil və region</string>
<string name="pref_language_changed">Briar-ı yenidən başlatdığınızda bu parametr qüvvəyə minir. Lütfən çıxın və Briar-ı yenidən başladın.</string>
<string name="pref_language_default">System default</string>
<string name="pref_language_default">Sistemdə olduğu kimi </string>
<string name="display_settings_title">Görüntü</string>
<string name="pref_theme_title">Tema</string>
<string name="pref_theme_light"></string>
......@@ -381,6 +393,7 @@
<string name="pref_lock_disabled_summary">Bundan istifadə etmək üçün ekran kilidini quraşdırın. </string>
<string name="pref_lock_timeout_title">Tətbiq kilidinin hərəkətsizlik müddəti</string>
<!--The %s placeholder is replaced with the following time spans, e.g. 5 Minutes, 1 Hour-->
<string name="pref_lock_timeout_summary">Briar-ı istifadə etməsəniz, onu avtomatik olaraq %s dəqiqədən sonra kilidləyin</string>
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
<string name="pref_lock_timeout_1">1 dəqiqə</string>
<!--Will be shown in a list of lock times. Should fit into the %s of "automatically lock it after %s"-->
......@@ -465,8 +478,10 @@
<string name="screen_filter_allow">Bu tətbiqlərin yuxarı çəkilməsinə icazə verin</string>
<!--Permission Requests-->
<string name="permission_camera_title">Camera izni</string>
<string name="permission_camera_request_body">QR kodunu skan etmək üçün Briar-a kameraya icazə lazımdır.</string>
<string name="permission_location_title">Mövqe icazəsi</string>
<string name="permission_camera_location_title">Kamera və mövqe</string>
<string name="permission_camera_denied_body">Kameraya daxil olmağı rədd etdiniz, lakin əlaqə əlavə etmək kameradan istifadə etməyi tələb edir. \n\nİcazə verilməsini düşünün.</string>
<string name="qr_code">QR kodu</string>
<string name="show_qr_code_fullscreen">QR kodu tam ekranda göstər</string>
<!--App Locking-->
......@@ -486,7 +501,7 @@
<!--This is a message to be used in screenshots. Please use the same translation for Bob!-->
<string name="screenshot_message_1">Salam Bob!</string>
<!--This is a message to be used in screenshots. Please use the same translation for Alice!-->
<string name="screenshot_message_2">Salam Alice! Briar haqqında danışdığınız üçün təşəkkür edirik!</string>
<string name="screenshot_message_2">Salam Elis! Briar haqqında danışdığınız üçün təşəkkür edirik!</string>
<!--This is a message to be used in screenshots.-->
<string name="screenshot_message_3">Problem yoxdur, bunu ümüd edirəm 😀</string>
</resources>
......@@ -37,11 +37,8 @@
<string name="startup_failed_data_too_old_error">Vaš račun je napravljen sa starom verzijom aplikacije i nemože se otvoriti novom verzijom. Morate reinstalirati staru verziju ili podesiti novi račun tako što ćete izabrati opciju \'ZaboraviIi ste lozinku?\' kod unosa lozinke.</string>
<string name="startup_failed_data_too_new_error">Ova verzija aplikacije je stara. Molim vas da aplikaciju ažurirate na posljednju verziju a zatim pokušate ponovo.</string>
<string name="startup_failed_service_error">Briar nije mogao da pokrene potreban plugin-dodatak. Reinstaliranje Briara obično riješi problem. Međutim, imajte na umu da ćete izgubiti vaš račun i sve podatke vezane za njega pošto Briar ne koristi centralne servere da sačuva vaše podatke.</string>
<string name="expiry_update">Krajnji datum testiranja je pomjeren. Vaš račun će sada isteći za %d dana.</string>
<string name="expiry_date_reached">Ovaj softver nije više aktuelan.\nHvala na testiranju!</string>
<string name="download_briar">Da bi nastavili koristiti Briar, molimo preuzmite verziju 1.0</string>
<string name="create_new_account">Morate kreirati novi račun, ali možete koristiti isto korisničko ime.</string>
<string name="download_briar_button">Preuzmite Briar 1.0</string>
<string name="startup_open_database">Dekriptujem bazu...</string>
<string name="startup_migrate_database">Ažuriram bazu...</string>
<string name="startup_compact_database">Baza se kompaktuje...</string>
......
......@@ -41,11 +41,10 @@
<item quantity="one">Aquesta és una versió de prova de Briar. El vostre compte expira en %d dia i no es pot renovar.</item>
<item quantity="other">Aquesta és una versió de prova de Briar. El vostre compte caducarà en %d dies i no es podrà renovar.</item>
</plurals>
<string name="expiry_update">S\'ha allargat la data de caducitat d\'aquesta versió de test de Briar. Ara el vostre compte caducarà d\'aquí a %d dies.</string>
<string name="expiry_date_reached">Aquesta versió de Briar ha caducat.\nGràcies per haver-lo provat!</string>
<string name="download_briar">Per continuar fent servir Briar, descarregueu-vos la versió 1.0.</string>
<string name="download_briar">Per continuar utilitzant el Briar, baixeu la darrera versió.</string>
<string name="create_new_account">Haureu de crear un compte nou, però podeu utilitzar el mateix sobrenom.</string>
<string name="download_briar_button">Descarrega Briar 1.0</string>
<string name="download_briar_button">Baixa l\'última versió</string>
<string name="startup_open_database">S\'està desxifrant la base de dades...</string>
<string name="startup_migrate_database">S\'està actualitzant la base de dades...</string>
<string name="startup_compact_database">S\'està compactant la base de dades...</string>
......@@ -110,6 +109,7 @@
<string name="fix">Corregeix</string>
<string name="help">Ajuda</string>
<string name="sorry">Ens sap greu</string>
<string name="error_start_activity">No disponible al vostre sistema</string>
<!--Contacts and Private Conversations-->
<string name="no_contacts">No hi ha cap contacte per mostrar</string>
<string name="no_contacts_action">Toqueu la icona + per afegir un contacte</string>
......@@ -124,6 +124,10 @@
<string name="set_contact_alias">Canvia el nom del contacte</string>
<string name="set_contact_alias_hint">Nom del contacte</string>
<string name="set_alias_button">Canvia</string>
<string name="delete_all_messages">Suprimeix tots els missatges</string>
<string name="dialog_title_delete_all_messages">Confirmeu la supressió dels missatges</string>
<string name="dialog_message_delete_all_messages">Esteu segur que voleu suprimir tots els missatges?</string>
<string name="dialog_title_not_all_messages_deleted">No s\'ha pogut suprimir tots els missatges</string>
<string name="delete_contact">Suprimeix aquest contacte</string>
<string name="dialog_title_delete_contact">Confirmeu la supressió del contacte</string>
<string name="dialog_message_delete_contact">Segur que voleu suprimir aquest contacte i tots els missatges que us heu intercanviat?</string>
......@@ -140,6 +144,7 @@
Així que l\'actualitzi li veureu una icona diferent .</string>
<string name="dialog_title_image_support">Ara ja podeu enviar imatges a aquest contacte</string>
<string name="dialog_message_image_support">Premeu aquesta icona per afegir imatges.</string>
<string name="messaging_too_many_attachments_toast">Només s\'enviaran les %d primeres imatges</string>
<!--Adding Contacts-->
<string name="add_contact_title">Afegeix un contacte proper</string>
<string name="face_to_face">Heu de coincidir en el mateix lloc amb la persona que voleu afegir com a contacte.\n\nD\'aquesta manera evitareu que algú suplanti les vostres identitats o pugui llegir els vostres missatges en el futur.</string>
......@@ -207,6 +212,7 @@ Així que l\'actualitzi li veureu una icona diferent .</string>
<string name="offline_state">No hi ha connexió a Internet</string>
<string name="duplicate_link_dialog_title">Enllaç duplicat</string>
<string name="duplicate_link_dialog_text_1">Teniu una sol·licitud de contacte pendent amb l\'enllaç %s</string>
<string name="duplicate_link_dialog_text_1_contact">Ja teniu un contacte amb aquest enllaç: %s</string>
<!--This is a question asking whether two nicknames refer to the same person-->
<string name="duplicate_link_dialog_text_2">%s i %s són la mateixa persona?</string>
<!--This is a button for answering that two nicknames do indeed refer to the same person. This
......
......@@ -41,11 +41,10 @@
<item quantity="one">Dies ist eine Testversion von Briar. Dein Konto läuft in %d Tag ab und kann nicht verlängert werden.</item>
<item quantity="other">Dies ist eine Testversion von Briar. Dein Konto läuft in %d Tagen ab und kann nicht verlängert werden.</item>
</plurals>
<string name="expiry_update">Das Ablaufdatum des Tests wurde verlängert. Dein Konto läuft nun in %d Tagen ab.</string>
<string name="expiry_date_reached">Diese Software ist abgelaufen.\nDanke, dass du Briar getestet hast!</string>
<string name="download_briar">Lade bitte Version 1.0 herunter, um Briar weiterhin zu nutzen.</string>
<string name="download_briar">Bitte lade die aktuelle Version von Briar herunter, um es weiter zu benutzen.</string>
<string name="create_new_account">Du wirst ein neues Konto erstellen müssen, wobei du jedoch wieder denselben Benutzernamen verwenden kannst.</string>
<string name="download_briar_button">Lade Briar 1.0 herunter</string>
<string name="download_briar_button">Lade die aktuelle Version herunter</string>
<string name="startup_open_database">Datenbank wird entschlüsselt...</string>
<string name="startup_migrate_database">Datenbank wird aktualisiert...</string>
<string name="startup_compact_database">Datenbank wird komprimiert ...</string>
......@@ -110,6 +109,7 @@
<string name="fix">Behoben</string>
<string name="help">Hilfe</string>
<string name="sorry">Entschuldigung</string>
<string name="error_start_activity">Nicht Verfügbar auf deinem Gerät</string>
<!--Contacts and Private Conversations-->
<string name="no_contacts">Keine Kontakte vorhanden</string>
<string name="no_contacts_action">Tippe auf das + Symbol, um einen Kontakt hinzuzufügen</string>
......@@ -128,7 +128,6 @@
<string name="dialog_title_delete_all_messages">Löschen der Nachrichten bestätigen</string>
<string name="dialog_message_delete_all_messages">Bist Du sicher, dass Du alle Nachrichten löschen willst?</string>
<string name="dialog_title_not_all_messages_deleted">Konnte nicht alle Nachrichten löschen</string>
<string name="dialog_message_not_all_messages_deleted">Nachrichten mit Bezug auf offene Kontaktempfehlungen oder Einladungen können erst nach Abschluss dieser gelöscht werden.</string>
<string name="delete_contact">Kontakt löschen</string>
<string name="dialog_title_delete_contact">Löschen des Kontakts bestätigen</string>
<string name="dialog_message_delete_contact">Bist du sicher, dass du diesen Kontakt und alle dazugehörigen Nachrichten löschen möchtest?</string>
......@@ -168,7 +167,7 @@
<string name="add_contact_nearby_title">Kontakt in der Nähe hinzufügen</string>
<string name="add_contact_remotely_title">Kontakt aus der Ferne hinzufügen</string>
<string name="contact_name_hint">Gib dem Kontakt einen Spitznamen</string>
<string name="contact_link_intro">Hier den Link deines Kontakts einfügen</string>
<string name="contact_link_intro">Füge hier den Link des Kontakts ein, den du hinzufügen möchtest:</string>
<string name="contact_link_hint">Kontakt Link</string>
<string name="paste_button">Einfügen</string>
<string name="add_contact_button">Kontakt hinzufügen</string>
......@@ -178,7 +177,7 @@
<string name="add_contact_choose_nickname">Wähle einen Spitznamen</string>
<string name="add_contact_choose_a_nickname">Gib einen Spitznamen ein</string>
<string name="nickname_intro">Gib deinem Kontakt einen Spitznamen. Nur du kannst ihn sehen.</string>
<string name="your_link">Gebe diesen Link zu dem Kontakt den du hinzufügen möchtest</string>
<string name="your_link">Gebe diesen Link dem Kontakt, den du hinzufügen möchtest:</string>
<string name="link_clip_label">Briar Link</string>
<string name="link_copied_toast">Link kopiert</string>
<string name="adding_contact_error">Es gab einen Fehler beim Hinzufügen des Kontaktes.</string>
......@@ -196,7 +195,7 @@
<string name="nickname_missing">Bitte gib einen Spitznamen an</string>
<string name="invalid_link">Ungültiger Link</string>
<string name="unsupported_link">Dieser Link kommt von einer neueren Version von Briar. Bitte führe eine Aktualisierung auf die aktuelle Version durch und versuche es dann nochmal. </string>
<string name="intent_own_link">Du hast deinen eigenen Link aufgerufen. Nutze einen Link von deinen Kontakten, die du hinzufügen möchtest!</string>
<string name="intent_own_link">Du hast deinen eigenen Link aufgerufen. Nutze den Link des Kontaktes, den du hinzufügen möchtest!</string>
<string name="missing_link">Bitte gebe einen Link ein</string>
<!--This is a numeral indicating the first step in a series of screens-->
<string name="step_1">1</string>
......
......@@ -41,11 +41,10 @@
<item quantity="one">Esta es una versión de prueba de Briar. Su cuenta expirará en %d día y no podrá ser renovada.</item>
<item quantity="other">Esta es una versión de prueba de Briar. Tu cuenta expirará en %d días y no podrá ser renovada.</item>
</plurals>
<string name="expiry_update">La fecha de caducidad de las pruebas se ha ampliado. Tu cuenta expirará en %d días.</string>
<string name="expiry_date_reached">Este programa ha caducado.\n¡Gracias por probarlo!</string>
<string name="download_briar">Para continuar usando Briar, por favor descarga la versión 1.0.</string>
<string name="download_briar">Para continuar usando Briar, por favor descarga la versión mas reciente.</string>
<string name="create_new_account">Necesitarás crear una nueva cuenta, pero puedes usar el mismo nombre de usuario.</string>
<string name="download_briar_button">Descargar Briar 1.0</string>
<string name="download_briar_button">Descargar la última versión.</string>
<string name="startup_open_database">Descifrando la base de datos...</string>
<string name="startup_migrate_database">Actualizando la base de datos...</string>
<string name="startup_compact_database">Compactando base de datos...</string>
......@@ -110,6 +109,7 @@
<string name="fix">Reparar</string>
<string name="help">Ayuda</string>
<string name="sorry">Disculpa</string>
<string name="error_start_activity">No disponible en tu sistema</string>
<!--Contacts and Private Conversations-->
<string name="no_contacts">No hay contactos para mostrar</string>
<string name="no_contacts_action">Golpear el icono + para añadir un contacto</string>
......@@ -128,7 +128,6 @@
<string name="dialog_title_delete_all_messages">Confirmar la eliminación del mensaje</string>
<string name="dialog_message_delete_all_messages">¿Estás seguro de que deseas eliminar todos los mensajes?</string>
<string name="dialog_title_not_all_messages_deleted">No se pudieron eliminar todos los mensajes.</string>
<string name="dialog_message_not_all_messages_deleted">Los mensajes relacionados con presentaciones o invitaciones en curso no se pueden eliminar hasta que finalicen.</string>
<string name="delete_contact">Eliminar contacto</string>
<string name="dialog_title_delete_contact">Confirmar eliminación de contacto</string>
<string name="dialog_message_delete_contact">¿Seguro que quieres eliminar este contacto y todos los mensajes intercambiados entre vosotros?</string>
......
......@@ -41,11 +41,10 @@
<item quantity="one">Hau Briar-en probetarako bertsio bat da. Zure kontua egun %d barru iraungituko da eta ezin da berriztu.</item>
<item quantity="other">Hau Briar-en probetarako bertsio bat da. Zure kontua %d egun barru iraungituko da eta ezin da berriztu.</item>
</plurals>
<string name="expiry_update">Probetarako iraungitze data luzatu da. Zure kontua %d egun barru iraungituko da.</string>
<string name="expiry_date_reached">Programa hau iraungitu da.\nEskerrik asko probatzeagatik!</string>
<string name="download_briar">Briar erabiltzen jarraitzeko, deskargatu 1.0 bertsioa.</string>
<string name="download_briar">Briar erabiltzen jarraitzeko, deskargatu azken bertsioa.</string>
<string name="create_new_account">Kontu berri bat sortu beharko duzu, baina erabiltzaile-izen bera erabili dezakezu.</string>
<string name="download_briar_button">Deskargatu Briar 1.0</string>
<string name="download_briar_button">Deskargatu azken bertsioa</string>
<string name="startup_open_database">Datu-basea deszifratzen...</string>
<string name="startup_migrate_database">Datu-basea eguneratzen...</string>
<string name="startup_compact_database">Datu-basea trinkotzen…</string>
......@@ -110,6 +109,7 @@
<string name="fix">Konpondu</string>
<string name="help">Laguntza</string>
<string name="sorry">Sentitzen dugu</string>
<string name="error_start_activity">Ez dago eskuragarri zure sistemarako</string>
<!--Contacts and Private Conversations-->
<string name="no_contacts">Ez dago erakusteko kontakturik</string>
<string name="no_contacts_action">Sakatu + ikonoa kontaktua gehitzeko</string>
......@@ -128,7 +128,13 @@
<string name="dialog_title_delete_all_messages">Baieztatu mezuak ezabatzea</string>
<string name="dialog_message_delete_all_messages">Ziur mezu guztiak ezabatu nahi dituzula?</string>
<string name="dialog_title_not_all_messages_deleted">Ezin izan dira mezu guztiak ezabatu</string>
<string name="dialog_message_not_all_messages_deleted">Abian diren aurkezpenen edo gonbidapenen mezuak ezin dira ezabatu hauek amaitu arte.</string>
<string name="dialog_message_not_deleted_ongoing_both">Abian diren gonbidapenen edo aurkezpenen mezuak ezin dira ezabatu hauek amaitu arte.</string>
<string name="dialog_message_not_deleted_ongoing_introductions">Abian diren aurkezpenen mezuak ezin dira ezabatu hauek amaitu arte.</string>
<string name="dialog_message_not_deleted_ongoing_invitations">Abian diren gonbidapenen mezuak ezin dira ezabatu hauek amaitu arte.</string>
<string name="dialog_message_not_deleted_partly_downloaded">Erdizka deskargatutako mezuak ezin dira ezabatu deskargatzen amaitu arte.</string>
<string name="dialog_message_not_deleted_not_all_selected_both">Gonbidapen edo aurkezpen bat ezabatzeko eskaria eta erantzuna hautatu behar dituzu.</string>
<string name="dialog_message_not_deleted_not_all_selected_introductions">Aurkezpen bat ezabatzeko eskaria eta erantzuna hautatu behar dituzu.</string>
<string name="dialog_message_not_deleted_not_all_selected_invitations">Gonbidapen bat ezabatzeko eskaria eta erantzuna hautatu behar dituzu.</string>
<string name="delete_contact">Ezabatu kontaktua</string>
<string name="dialog_title_delete_contact">Baieztatu kontaktua ezabatzea</string>
<string name="dialog_message_delete_contact">Ziur zaude kontaktu hau eta berarekin trukatutako mezu guztiak kendu nahi dituzula?</string>
......
......@@ -45,13 +45,12 @@
<item quantity="one">این یک نسخه آزمایشی از Briar (برایر) می باشد. حساب کاربری شما در %d روز آینده به پایان می رسد و امکان تمدید آن وجود نخواهد داشت.</item>
<item quantity="other">این یک نسخه آزمایشی از Briar (برایر) می باشد. حساب کاربری شما در %d روز آینده به پایان می رسد و امکان تمدید آن وجود نخواهد داشت.</item>
</plurals>
<string name="expiry_update">تاریخ اتمام آزمایش افزایش یافته است. حساب کاربری شما در %d روز آینده به پایان می رسد.</string>
<string name="expiry_date_reached">این نرم افزار منقضی شده است.
بابت تست از شما سپاسگزاریم.</string>
<string name="download_briar">برای اینکه به استفاده خود از Briar (برایر) ادامه دهید، لطفا نسخه ۱.۰ را دانلود کنید.</string>
<string name="download_briar">برای ادامه استفاده از Briar، لطفا آخرین نسخه را دانلود کنید.</string>
<string name="create_new_account">لازم است تا یک حساب کاربری جدید ایجاد کنید، ولی می توانید از همان نام مستعار استفاده کنید.</string>
<string name="download_briar_button">دانلود Briar (برایر) 1.0</string>
<string name="download_briar_button">دانلود آخرین نسخه</string>
<string name="startup_open_database">در حال رمزگشایی سیستم ...</string>
<string name="startup_migrate_database">در حال ارتقا سیستم ...</string>
<string name="startup_compact_database">درحال فشرده‌ سازی پایگاه داده...</string>
......@@ -116,6 +115,7 @@
<string name="fix">اصلاح</string>
<string name="help">راهنما</string>
<string name="sorry">پوزش</string>
<string name="error_start_activity">برای سیستم شما موجود نمی باشد</string>
<!--Contacts and Private Conversations-->
<string name="no_contacts">هیچ مخاطبی برای نمایش وجود ندارد</string>
<string name="no_contacts_action">برای افزودن مخاطب روی + کلیک کنید</string>
......@@ -130,6 +130,17 @@
<string name="set_contact_alias">تغییر نام مخاطب</string>
<string name="set_contact_alias_hint">نام مخاطب</string>
<string name="set_alias_button">تغییر</string>
<string name="delete_all_messages">حذف تمام پیام ها</string>
<string name="dialog_title_delete_all_messages">تایید حذف پیام</string>
<string name="dialog_message_delete_all_messages">آیا از حذف تمام پیام‌ ها اطمینان دارید؟</string>
<string name="dialog_title_not_all_messages_deleted">حذف تمام پیام‌ ها امکان پذیر نیست</string>
<string name="dialog_message_not_deleted_ongoing_both">پیام های مرتبط با دعوت ها و معرفی های جاری نمی توانند حذف شوند تا زمانی که به نتیجه برسند.</string>
<string name="dialog_message_not_deleted_ongoing_introductions">پیام های مرتبط با معرفی های جاری نمی توانند حذف شوند تا زمانی که به نتیجه برسند.</string>
<string name="dialog_message_not_deleted_ongoing_invitations">پیام های مرتبط با دعوت نامه های جاری نمی توانند حذف شوند تا زمانی که به نتیجه برسند.</string>
<string name="dialog_message_not_deleted_partly_downloaded">پیام‌های نیمه دانلود شده تا زمانی که دانلود آن ها پایان نیافته است قابل حذف نیستند.</string>
<string name="dialog_message_not_deleted_not_all_selected_both">برای حذف یک دعوت نامه یا معرفی، باید درخواست و پاسخ را انتخاب کنید.</string>
<string name="dialog_message_not_deleted_not_all_selected_introductions">برای حذف یک معرفی، باید درخواست و پاسخ را انتخاب کنید.</string>
<string name="dialog_message_not_deleted_not_all_selected_invitations">برای حذف یک دعوت نامه، باید درخواست و پاسخ آن را انتخاب کنید.</string>
<string name="delete_contact">حذف مخاطب</string>
<string name="dialog_title_delete_contact">تایید حذف مخاطب</string>
<string name="dialog_message_delete_contact">آیا مطمئن هستید که میخواهید این مخاطب و تمام پیام های تبادل شده با آن را حذف کنید؟</string>
......@@ -147,6 +158,7 @@
<string name="dialog_message_no_image_support">Briar (برایر) مخاطب شما هنوز از پیوست‌ های تصویری پشتیبانی نمی‌کند. هنگامی که آنها ارتقا دادند یک آیکون متفاوت خواهید دید.</string>
<string name="dialog_title_image_support">شما هم اکنون می‌توانید به این مخاطب تصاویر ارسال کنید</string>
<string name="dialog_message_image_support">برای پیوست کردن تصاویر به روی آیکون ضربه بزنید.</string>
<string name="messaging_too_many_attachments_toast">فقط %d تصویر آغازین ارسال خواهند شد</string>
<!--Adding Contacts-->
<string name="add_contact_title">افزودن مخاطب از نزدیک</string>
<string name="face_to_face">برای اضافه کردن فرد به عنوان مخاطب باید با او به صورت حضوری ملاقات کنید.
......@@ -222,6 +234,7 @@
<string name="offline_state">ارتباط با اینترنت برقرار نیست</string>
<string name="duplicate_link_dialog_title">پیوند تکراری</string>
<string name="duplicate_link_dialog_text_1">شما هم اکنون یک مخاطب معلق با این پیوند دارید: %s</string>
<string name="duplicate_link_dialog_text_1_contact">شما هم اکنون یک مخاطب با این پیوند دارید: %s</string>
<!--This is a question asking whether two nicknames refer to the same person-->
<string name="duplicate_link_dialog_text_2">آیا %s و %s یک شخص می باشند؟</string>
<!--This is a button for answering that two nicknames do indeed refer to the same person. This
......
......@@ -41,11 +41,8 @@
<item quantity="one">Tämä on Briarin testiversio. Sinun tilisi tulee vanhentumaan %d päivän päästä eikä sitä voi uusia.</item>
<item quantity="other">Tämä on Briarin testiversio. Sinun tilisi tulee vanhentumaan %d päivän päästä eikä sitä voi uusia.</item>
</plurals>
<string name="expiry_update">Testiaikaa on pidennetty. Tilisi tulee nyt vanhentumaan %d päivän kuluttua.</string>
<string name="expiry_date_reached">Tämä sovellus on vanhentunut.\nKiitos testaamisesta!</string>