diff --git a/android/app/src/main/java/com/robosats/MainActivity.kt b/android/app/src/main/java/com/robosats/MainActivity.kt
index 41684a95..5927c71d 100644
--- a/android/app/src/main/java/com/robosats/MainActivity.kt
+++ b/android/app/src/main/java/com/robosats/MainActivity.kt
@@ -3,7 +3,10 @@ package com.robosats
import android.Manifest
import android.annotation.SuppressLint
import android.app.Application
+import android.content.Intent
import android.content.pm.ActivityInfo
+import android.content.pm.PackageManager
+import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.util.Log
@@ -20,9 +23,6 @@ import android.webkit.WebSettings
import android.webkit.WebStorage
import android.webkit.WebView
import android.webkit.WebViewClient
-import android.content.Intent
-import android.content.pm.PackageManager
-import android.net.Uri
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
@@ -31,6 +31,7 @@ import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import com.robosats.models.EncryptedStorage
+import com.robosats.models.LanguageManager
import com.robosats.services.NotificationsService
import com.robosats.tor.TorKmp
import com.robosats.tor.TorKmpManager
@@ -50,8 +51,12 @@ class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
+ // Initialize EncryptedStorage
EncryptedStorage.init(this)
+ // Initialize language manager with system language
+ LanguageManager.init(this)
+
// Lock the screen orientation to portrait mode
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
@@ -70,7 +75,7 @@ class MainActivity : AppCompatActivity() {
}
// Set initial status message
- updateStatus("Initializing Tor connection...")
+ updateStatus(getString(R.string.init_tor))
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU &&
ContextCompat.checkSelfPermission(
@@ -86,6 +91,7 @@ class MainActivity : AppCompatActivity() {
}
val intent = intent
+ intentData = ""
if (intent != null) {
val orderId = intent.getStringExtra("order_id")
if (orderId?.isNotEmpty() == true) {
@@ -93,13 +99,14 @@ class MainActivity : AppCompatActivity() {
}
}
- // Initialize Tor and setup WebView only after Tor is properly connected
- initializeTor()
val settingProxy = EncryptedStorage.getEncryptedStorage("settings_use_proxy")
if (settingProxy == "false") {
// Setup WebView to use Orbot if the user previously clicked
onUseOrbotButtonClicked()
+ } else {
+ // Initialize Tor and setup WebView only after Tor is properly connected
+ initializeTor()
}
}
@@ -126,7 +133,7 @@ class MainActivity : AppCompatActivity() {
// Show a message to the user
Toast.makeText(
this,
- "Using Orbot. Make sure it's running!",
+ getString(R.string.using_orbot),
Toast.LENGTH_LONG
).show()
@@ -181,7 +188,7 @@ class MainActivity : AppCompatActivity() {
// Show error message on the loading screen
runOnUiThread {
- updateStatus("Critical error: Tor initialization failed. App cannot proceed securely.")
+ updateStatus(getString(R.string.tor_init_error))
}
}
}
@@ -200,7 +207,7 @@ class MainActivity : AppCompatActivity() {
try {
// Display connecting message
runOnUiThread {
- updateStatus("Connecting to Tor network...")
+ updateStatus(getString(R.string.connecting_tor))
}
// Wait for Tor to connect with retry mechanism
@@ -214,7 +221,7 @@ class MainActivity : AppCompatActivity() {
// Update status on UI thread every few retries
if (retries % 3 == 0) {
runOnUiThread {
- updateStatus("Still connecting to Tor (attempt $retries/$maxRetries)...")
+ updateStatus(getString(R.string.still_connecting_tor))
}
}
}
@@ -225,7 +232,7 @@ class MainActivity : AppCompatActivity() {
// Show success message and proceed
runOnUiThread {
- updateStatus("Tor connected successfully. Setting up secure browser...")
+ updateStatus(getString(R.string.connected_tor))
HttpClientManager.setDefaultProxy(getTorKmpObject().proxy)
@@ -237,14 +244,14 @@ class MainActivity : AppCompatActivity() {
Log.e("TorInitialization", "Failed to connect to Tor after $maxRetries retries")
runOnUiThread {
- updateStatus("Failed to connect to Tor after multiple attempts. App cannot proceed securely.")
+ updateStatus(getString(R.string.fail_tor))
}
}
} catch (e: Exception) {
Log.e("TorInitialization", "Error during Tor connection: ${e.message}", e)
runOnUiThread {
- updateStatus("Error connecting to Tor: ${e.message}")
+ updateStatus(getString(R.string.error_tor) + "${e.message}")
}
}
}
@@ -283,7 +290,7 @@ class MainActivity : AppCompatActivity() {
// Show message that we're setting up secure browsing
runOnUiThread {
- updateStatus(if (useProxy) "Setting up secure Tor browsing..." else "Setting up Orbot browsing...")
+ updateStatus(if (useProxy) getString(R.string.setting_tor) else getString(R.string.setting_orbot))
}
// Configure proxy for WebView in a background thread to avoid NetworkOnMainThreadException
@@ -296,7 +303,7 @@ class MainActivity : AppCompatActivity() {
// Success - now configure WebViewClient and load URL on UI thread
runOnUiThread {
- updateStatus("Secure connection established. Loading app...")
+ updateStatus(getString(R.string.loading_app))
// Set up WebViewClient that allows external links and deep links to be opened
webView.webViewClient = object : WebViewClient() {
@@ -369,11 +376,13 @@ class MainActivity : AppCompatActivity() {
val notifications = EncryptedStorage.getEncryptedStorage("settings_notifications")
if (notifications != "false") initializeNotifications()
- webView.post {
- try {
- webView.evaluateJavascript("javascript:window.AndroidDataRobosats = { navigateToPage: '$intentData' }", null)
- } catch (e: Exception) {
- Log.e("NavigateToPage", "Error evaluating JavaScript: $e")
+ if (intentData != "") {
+ webView.post {
+ try {
+ webView.evaluateJavascript("javascript:window.AndroidDataRobosats = { navigateToPage: '$intentData' }", null)
+ } catch (e: Exception) {
+ Log.e("NavigateToPage", "Error evaluating JavaScript: $e")
+ }
}
}
}
@@ -441,9 +450,7 @@ class MainActivity : AppCompatActivity() {
cookieManager.setAcceptThirdPartyCookies(webView, false) // Block 3rd party cookies
// 10. Disable Service Workers (not needed for our local app)
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- ServiceWorkerController.getInstance().setServiceWorkerClient(null)
- }
+ ServiceWorkerController.getInstance().setServiceWorkerClient(null)
// --- USABILITY SETTINGS ---
@@ -458,6 +465,7 @@ class MainActivity : AppCompatActivity() {
webSettings.textZoom = 100
}
+
/**
* Clear all WebView data when activity is destroyed
*/
diff --git a/android/app/src/main/java/com/robosats/models/LanguageManager.kt b/android/app/src/main/java/com/robosats/models/LanguageManager.kt
new file mode 100644
index 00000000..5abfd3f0
--- /dev/null
+++ b/android/app/src/main/java/com/robosats/models/LanguageManager.kt
@@ -0,0 +1,103 @@
+package com.robosats.models
+
+import android.content.res.Configuration
+import android.content.res.Resources
+import android.os.Build
+import android.os.LocaleList
+import android.util.Log
+import com.robosats.MainActivity
+import java.util.Locale
+
+/**
+ * Manages the app's language settings
+ * Uses the system's default language if it's one of the supported languages,
+ * otherwise defaults to English
+ */
+object LanguageManager {
+ lateinit var resources: Resources
+ private val TAG = "LanguageManager"
+ private val SETTINGS_KEY = "settings_language"
+
+ // List of supported language codes based on the app's supported languages
+ private val SUPPORTED_LANGUAGES = setOf(
+ "en", // English
+ "es", // Spanish
+ "de", // German
+ "pl", // Polish
+ "fr", // French
+ "sw", // Swahili
+ "ru", // Russian
+ "ja", // Japanese
+ "it", // Italian
+ "pt", // Portuguese
+ "zh-si", // Simplified Chinese (special handling required)
+ "zh-tr", // Traditional Chinese (special handling required)
+ "sv", // Swedish
+ "cs", // Czech
+ "th", // Thai
+ "ca", // Catalan
+ "eu" // Basque
+ )
+
+ fun init(context: MainActivity) {
+ resources = context.resources
+ applySystemLanguage()
+ }
+
+ /**
+ * Apply the system's default language to the app if it's supported,
+ * otherwise use English as the default language
+ * This is called only once during app initialization
+ */
+ fun applySystemLanguage() {
+ // Get system locale
+ val systemLocale =
+ Resources.getSystem().configuration.locales.get(0)
+
+ // Determine the locale to use
+ val localeToUse = getValidatedLocale(systemLocale)
+ Log.d(TAG, "System locale: ${systemLocale.language}, Using locale: ${localeToUse.language}")
+
+ val lang = systemLocale.language
+ if (EncryptedStorage.getEncryptedStorage(SETTINGS_KEY) == "" && SUPPORTED_LANGUAGES.contains(lang)) {
+ EncryptedStorage.setEncryptedStorage(SETTINGS_KEY, lang)
+ }
+
+ // Create configuration with the validated locale
+ val config = Configuration(resources.configuration)
+
+ val localeList = LocaleList(localeToUse)
+ LocaleList.setDefault(localeList)
+ config.setLocales(localeList)
+
+ // Update the configuration
+ @Suppress("DEPRECATION")
+ resources.updateConfiguration(config, resources.displayMetrics)
+ }
+
+ /**
+ * Validates if the system locale is supported by the app
+ * If not, returns the English locale as default
+ */
+ private fun getValidatedLocale(systemLocale: Locale): Locale {
+ val languageCode = systemLocale.language
+
+ // Handle Chinese special cases
+ if (languageCode == "zh") {
+ val country = systemLocale.country
+ // Check if it's Simplified (China, Singapore) or Traditional (Taiwan, Hong Kong)
+ return when (country) {
+ "CN", "SG" -> Locale.SIMPLIFIED_CHINESE
+ "TW", "HK" -> Locale.TRADITIONAL_CHINESE
+ else -> Locale.ENGLISH // Default to English for other Chinese variants
+ }
+ }
+
+ // For other languages, check if they're in our supported list
+ return if (SUPPORTED_LANGUAGES.contains(languageCode.lowercase())) {
+ systemLocale
+ } else {
+ Locale.ENGLISH // Default to English if language not supported
+ }
+ }
+}
diff --git a/android/app/src/main/java/com/robosats/models/NostrClient.kt b/android/app/src/main/java/com/robosats/models/NostrClient.kt
index dfbd3727..9fda0962 100644
--- a/android/app/src/main/java/com/robosats/models/NostrClient.kt
+++ b/android/app/src/main/java/com/robosats/models/NostrClient.kt
@@ -15,9 +15,18 @@ import org.json.JSONObject
object NostrClient {
private var subscriptionNotificationId = "robosatsNotificationId"
private var authors = garagePubKeys()
+ private var initialized = false
fun init() {
- RelayPool.register(Client)
+ if (!initialized) {
+ try {
+ RelayPool.register(Client)
+ initialized = true
+ } catch (e: Exception) {
+ Log.e("NostrClient", "Error initializing NostrClient: ${e.message}", e)
+ // Don't set initialized to true if there was an error
+ }
+ }
}
fun stop() {
diff --git a/android/app/src/main/java/com/robosats/services/NotificationsService.kt b/android/app/src/main/java/com/robosats/services/NotificationsService.kt
index f0aad18f..1520850d 100644
--- a/android/app/src/main/java/com/robosats/services/NotificationsService.kt
+++ b/android/app/src/main/java/com/robosats/services/NotificationsService.kt
@@ -133,11 +133,20 @@ class NotificationsService : Service() {
}
override fun onCreate() {
- val connectivityManager =
- (getSystemService(ConnectivityManager::class.java) as ConnectivityManager)
- connectivityManager.registerDefaultNetworkCallback(networkCallback)
- NostrClient.init()
- super.onCreate()
+ try {
+ val connectivityManager =
+ (getSystemService(ConnectivityManager::class.java) as ConnectivityManager)
+ connectivityManager.registerDefaultNetworkCallback(networkCallback)
+
+ // Initialize NostrClient safely
+ NostrClient.init()
+
+ super.onCreate()
+ } catch (e: Exception) {
+ Log.e("NotificationsService", "Error in onCreate", e)
+ // Call super.onCreate() even if there's an error to ensure proper service lifecycle
+ super.onCreate()
+ }
}
@RequiresPermission(Manifest.permission.POST_NOTIFICATIONS)
diff --git a/android/app/src/main/res/values-ca/strings.xml b/android/app/src/main/res/values-ca/strings.xml
new file mode 100644
index 00000000..a9d6df3b
--- /dev/null
+++ b/android/app/src/main/res/values-ca/strings.xml
@@ -0,0 +1,20 @@
+
+ Robosats
+ Servei en segon pla
+ Connexió
+ Configuració
+ Robosats s\'està executant en segon pla cercant notificacions
+ Notificacions
+ Utilitzar Orbot
+ Inicialitzant connexió Tor...
+ Utilitzant Orbot. Assegureu-vos que està en execució!
+ Error crític: La inicialització de Tor ha fallat. L\'aplicació no pot continuar de manera segura.
+ Connectant a la xarxa Tor...
+ Encara connectant a Tor...
+ Tor connectat amb èxit. Configurant navegador segur...
+ No s\'ha pogut connectar a Tor després de diversos intents. L\'aplicació no pot continuar de manera segura.
+ "Error en connectar a Tor: "
+ Configurant navegació segura amb Tor...
+ Configurant navegació amb Orbot...
+ Connexió segura establerta. Carregant aplicació...
+
diff --git a/android/app/src/main/res/values-cs/strings.xml b/android/app/src/main/res/values-cs/strings.xml
new file mode 100644
index 00000000..b63b8340
--- /dev/null
+++ b/android/app/src/main/res/values-cs/strings.xml
@@ -0,0 +1,20 @@
+
+ Robosats
+ Služba na pozadí
+ Připojení
+ Konfigurace
+ Robosats běží na pozadí a vyhledává oznámení
+ Oznámení
+ Použít Orbot
+ Inicializace připojení Tor...
+ Používá se Orbot. Ujistěte se, že běží!
+ Kritická chyba: Inicializace Tor selhala. Aplikace nemůže bezpečně pokračovat.
+ Připojování k síti Tor...
+ Stále se připojuje k Tor...
+ Tor úspěšně připojen. Nastavování bezpečného prohlížeče...
+ Nepodařilo se připojit k Tor po několika pokusech. Aplikace nemůže bezpečně pokračovat.
+ "Chyba při připojování k Tor: "
+ Nastavování bezpečného prohlížení přes Tor...
+ Nastavování prohlížení přes Orbot...
+ Bezpečné připojení navázáno. Načítání aplikace...
+
diff --git a/android/app/src/main/res/values-de/strings.xml b/android/app/src/main/res/values-de/strings.xml
new file mode 100644
index 00000000..0815e98d
--- /dev/null
+++ b/android/app/src/main/res/values-de/strings.xml
@@ -0,0 +1,20 @@
+
+ Robosats
+ Hintergrunddienst
+ Verbindung
+ Konfiguration
+ Robosats läuft im Hintergrund und sucht nach Benachrichtigungen
+ Benachrichtigungen
+ Orbot verwenden
+ Tor-Verbindung wird initialisiert...
+ Orbot wird verwendet. Stellen Sie sicher, dass es läuft!
+ Kritischer Fehler: Tor-Initialisierung fehlgeschlagen. Die App kann nicht sicher fortfahren.
+ Verbindung zum Tor-Netzwerk wird hergestellt...
+ Verbindung zu Tor wird noch hergestellt...
+ Tor erfolgreich verbunden. Sicherer Browser wird eingerichtet...
+ Verbindung zu Tor nach mehreren Versuchen fehlgeschlagen. Die App kann nicht sicher fortfahren.
+ "Fehler bei der Verbindung zu Tor: "
+ Sichere Tor-Navigation wird eingerichtet...
+ Orbot-Navigation wird eingerichtet...
+ Sichere Verbindung hergestellt. App wird geladen...
+
diff --git a/android/app/src/main/res/values-es/strings.xml b/android/app/src/main/res/values-es/strings.xml
new file mode 100644
index 00000000..4b7dc5ea
--- /dev/null
+++ b/android/app/src/main/res/values-es/strings.xml
@@ -0,0 +1,20 @@
+
+ Robosats
+ Servicio en segundo plano
+ Conexión
+ Configuración
+ Robosats está ejecutándose en segundo plano buscando notificaciones
+ Notificaciones
+ Usar Orbot
+ Inicializando conexión Tor...
+ Usando Orbot. ¡Asegúrese de que esté ejecutándose!
+ Error crítico: Falló la inicialización de Tor. La aplicación no puede proceder de forma segura.
+ Conectando a la red Tor...
+ Todavía conectando a Tor...
+ Tor conectado exitosamente. Configurando navegador seguro...
+ No se pudo conectar a Tor después de múltiples intentos. La aplicación no puede proceder de forma segura.
+ "Error al conectar a Tor: "
+ Configurando navegación segura con Tor...
+ Configurando navegación con Orbot...
+ Conexión segura establecida. Cargando aplicación...
+
diff --git a/android/app/src/main/res/values-eu/strings.xml b/android/app/src/main/res/values-eu/strings.xml
new file mode 100644
index 00000000..b8664131
--- /dev/null
+++ b/android/app/src/main/res/values-eu/strings.xml
@@ -0,0 +1,20 @@
+
+ Robosats
+ Atzeko planoko zerbitzua
+ Konexioa
+ Konfigurazioa
+ Robosats atzeko planoan exekutatzen ari da jakinarazpenak bilatzen
+ Jakinarazpenak
+ Orbot erabili
+ Tor konexioa hasieratzen...
+ Orbot erabiltzen. Ziurtatu martxan dagoela!
+ Errore kritikoa: Tor hasieratzeak huts egin du. Aplikazioak ezin du modu seguruan jarraitu.
+ Tor sarera konektatzen...
+ Oraindik Tor-era konektatzen...
+ Tor arrakastaz konektatu da. Nabigatzaile segurua konfiguratzen...
+ Ezin izan da Tor-era konektatu hainbat saiakera eta gero. Aplikazioak ezin du modu seguruan jarraitu.
+ "Errorea Tor-era konektatzean: "
+ Tor-en bidezko nabigazio segurua konfiguratzen...
+ Orbot nabigazioa konfiguratzen...
+ Konexio segurua ezarri da. Aplikazioa kargatzen...
+
diff --git a/android/app/src/main/res/values-fr/strings.xml b/android/app/src/main/res/values-fr/strings.xml
new file mode 100644
index 00000000..d5f81e07
--- /dev/null
+++ b/android/app/src/main/res/values-fr/strings.xml
@@ -0,0 +1,20 @@
+
+ Robosats
+ Service en arrière-plan
+ Connexion
+ Configuration
+ Robosats fonctionne en arrière-plan et recherche des notifications
+ Notifications
+ Utiliser Orbot
+ Initialisation de la connexion Tor...
+ Utilisation d\'Orbot. Assurez-vous qu\'il est en cours d\'exécution !
+ Erreur critique : Échec de l\'initialisation de Tor. L\'application ne peut pas continuer en toute sécurité.
+ Connexion au réseau Tor...
+ Toujours en cours de connexion à Tor...
+ Tor connecté avec succès. Configuration du navigateur sécurisé...
+ Échec de la connexion à Tor après plusieurs tentatives. L\'application ne peut pas continuer en toute sécurité.
+ "Erreur lors de la connexion à Tor : "
+ Configuration de la navigation sécurisée avec Tor...
+ Configuration de la navigation avec Orbot...
+ Connexion sécurisée établie. Chargement de l\'application...
+
diff --git a/android/app/src/main/res/values-it/strings.xml b/android/app/src/main/res/values-it/strings.xml
new file mode 100644
index 00000000..062fab7a
--- /dev/null
+++ b/android/app/src/main/res/values-it/strings.xml
@@ -0,0 +1,20 @@
+
+ Robosats
+ Servizio in background
+ Connessione
+ Configurazione
+ Robosats è in esecuzione in background cercando notifiche
+ Notifiche
+ Usa Orbot
+ Inizializzazione connessione Tor...
+ Utilizzo di Orbot. Assicurati che sia in esecuzione!
+ Errore critico: Inizializzazione di Tor fallita. L\'app non può procedere in modo sicuro.
+ Connessione alla rete Tor...
+ Ancora in connessione a Tor...
+ Tor connesso con successo. Configurazione del browser sicuro...
+ Impossibile connettersi a Tor dopo diversi tentativi. L\'app non può procedere in modo sicuro.
+ "Errore durante la connessione a Tor: "
+ Configurazione della navigazione sicura con Tor...
+ Configurazione della navigazione con Orbot...
+ Connessione sicura stabilita. Caricamento dell\'app...
+
diff --git a/android/app/src/main/res/values-ja/strings.xml b/android/app/src/main/res/values-ja/strings.xml
new file mode 100644
index 00000000..1a0c73a2
--- /dev/null
+++ b/android/app/src/main/res/values-ja/strings.xml
@@ -0,0 +1,20 @@
+
+ Robosats
+ バックグラウンドサービス
+ 接続
+ 設定
+ Robosatsはバックグラウンドで通知を取得しています
+ 通知
+ Orbotを使用
+ Tor接続を初期化中...
+ Orbotを使用中。実行中であることを確認してください!
+ 重大なエラー:Torの初期化に失敗しました。アプリは安全に続行できません。
+ Torネットワークに接続中...
+ まだTorに接続中...
+ Torに正常に接続されました。セキュアなブラウザを設定中...
+ 複数回の試行後、Torに接続できませんでした。アプリは安全に続行できません。
+ "Torへの接続エラー: "
+ セキュアなTorブラウジングを設定中...
+ Orbotブラウジングを設定中...
+ セキュアな接続が確立されました。アプリを読み込み中...
+
diff --git a/android/app/src/main/res/values-pl/strings.xml b/android/app/src/main/res/values-pl/strings.xml
new file mode 100644
index 00000000..4c04d50d
--- /dev/null
+++ b/android/app/src/main/res/values-pl/strings.xml
@@ -0,0 +1,20 @@
+
+ Robosats
+ Usługa w tle
+ Połączenie
+ Konfiguracja
+ Robosats działa w tle, pobierając powiadomienia
+ Powiadomienia
+ Użyj Orbot
+ Inicjalizacja połączenia Tor...
+ Korzystanie z Orbot. Upewnij się, że jest uruchomiony!
+ Błąd krytyczny: Inicjalizacja Tor nie powiodła się. Aplikacja nie może bezpiecznie kontynuować.
+ Łączenie z siecią Tor...
+ Nadal łączenie z Tor...
+ Tor pomyślnie połączony. Konfigurowanie bezpiecznej przeglądarki...
+ Nie udało się połączyć z Tor po wielu próbach. Aplikacja nie może bezpiecznie kontynuować.
+ "Błąd podczas łączenia z Tor: "
+ Konfigurowanie bezpiecznego przeglądania przez Tor...
+ Konfigurowanie przeglądania przez Orbot...
+ Bezpieczne połączenie ustanowione. Ładowanie aplikacji...
+
diff --git a/android/app/src/main/res/values-pt/strings.xml b/android/app/src/main/res/values-pt/strings.xml
new file mode 100644
index 00000000..4860b3a1
--- /dev/null
+++ b/android/app/src/main/res/values-pt/strings.xml
@@ -0,0 +1,20 @@
+
+ Robosats
+ Serviço em segundo plano
+ Conexão
+ Configuração
+ Robosats está rodando em segundo plano buscando notificações
+ Notificações
+ Usar Orbot
+ Inicializando conexão Tor...
+ Usando Orbot. Certifique-se de que está rodando!
+ Erro crítico: Falha na inicialização do Tor. O aplicativo não pode prosseguir com segurança.
+ Conectando à rede Tor...
+ Ainda conectando ao Tor...
+ Tor conectado com sucesso. Configurando navegador seguro...
+ Falha ao conectar ao Tor após várias tentativas. O aplicativo não pode prosseguir com segurança.
+ "Erro ao conectar ao Tor: "
+ Configurando navegação segura com Tor...
+ Configurando navegação com Orbot...
+ Conexão segura estabelecida. Carregando aplicativo...
+
diff --git a/android/app/src/main/res/values-ru/strings.xml b/android/app/src/main/res/values-ru/strings.xml
new file mode 100644
index 00000000..a8a30c4e
--- /dev/null
+++ b/android/app/src/main/res/values-ru/strings.xml
@@ -0,0 +1,20 @@
+
+ Robosats
+ Фоновая служба
+ Соединение
+ Конфигурация
+ Robosats работает в фоновом режиме и ищет уведомления
+ Уведомления
+ Использовать Orbot
+ Инициализация соединения Tor...
+ Использование Orbot. Убедитесь, что он запущен!
+ Критическая ошибка: Не удалось инициализировать Tor. Приложение не может безопасно продолжить работу.
+ Подключение к сети Tor...
+ Всё ещё подключается к Tor...
+ Tor успешно подключен. Настройка безопасного браузера...
+ Не удалось подключиться к Tor после нескольких попыток. Приложение не может безопасно продолжить работу.
+ "Ошибка при подключении к Tor: "
+ Настройка безопасного просмотра через Tor...
+ Настройка просмотра через Orbot...
+ Безопасное соединение установлено. Загрузка приложения...
+
diff --git a/android/app/src/main/res/values-sv/strings.xml b/android/app/src/main/res/values-sv/strings.xml
new file mode 100644
index 00000000..627522d5
--- /dev/null
+++ b/android/app/src/main/res/values-sv/strings.xml
@@ -0,0 +1,20 @@
+
+ Robosats
+ Bakgrundstjänst
+ Anslutning
+ Konfiguration
+ Robosats körs i bakgrunden och söker efter meddelanden
+ Meddelanden
+ Använd Orbot
+ Initierar Tor-anslutning...
+ Använder Orbot. Se till att den körs!
+ Kritiskt fel: Initiering av Tor misslyckades. Appen kan inte fortsätta säkert.
+ Ansluter till Tor-nätverket...
+ Fortfarande ansluter till Tor...
+ Tor ansluten framgångsrikt. Konfigurerar säker webbläsare...
+ Det gick inte att ansluta till Tor efter flera försök. Appen kan inte fortsätta säkert.
+ "Fel vid anslutning till Tor: "
+ Konfigurerar säker Tor-surfning...
+ Konfigurerar Orbot-surfning...
+ Säker anslutning etablerad. Laddar app...
+
diff --git a/android/app/src/main/res/values-sw/strings.xml b/android/app/src/main/res/values-sw/strings.xml
new file mode 100644
index 00000000..ab0535bd
--- /dev/null
+++ b/android/app/src/main/res/values-sw/strings.xml
@@ -0,0 +1,20 @@
+
+ Robosats
+ Huduma ya Usuli
+ Muunganisho
+ Usanidi
+ Robosats inaendesha katika usuli ikitafuta arifa
+ Arifa
+ Tumia Orbot
+ Inaanzisha muunganisho wa Tor...
+ Inatumia Orbot. Hakikisha inafanya kazi!
+ Hitilafu muhimu: Kuanzisha Tor kumeshindwa. Programu haiwezi kuendelea kwa usalama.
+ Inaunganisha kwa mtandao wa Tor...
+ Bado inaunganisha na Tor...
+ Tor imeunganishwa kwa mafanikio. Inaunda kivinjari salama...
+ Imeshindwa kuunganisha na Tor baada ya majaribio mengi. Programu haiwezi kuendelea kwa usalama.
+ "Hitilafu wakati wa kuunganisha na Tor: "
+ Inaunda uvinjari salama wa Tor...
+ Inaunda uvinjari wa Orbot...
+ Muunganisho salama umeundwa. Inapakia programu...
+
diff --git a/android/app/src/main/res/values-th/strings.xml b/android/app/src/main/res/values-th/strings.xml
new file mode 100644
index 00000000..a660147e
--- /dev/null
+++ b/android/app/src/main/res/values-th/strings.xml
@@ -0,0 +1,20 @@
+
+ Robosats
+ บริการเบื้องหลัง
+ การเชื่อมต่อ
+ การตั้งค่า
+ Robosats กำลังทำงานในเบื้องหลังและค้นหาการแจ้งเตือน
+ การแจ้งเตือน
+ ใช้ Orbot
+ กำลังเริ่มต้นการเชื่อมต่อ Tor...
+ กำลังใช้ Orbot ตรวจสอบให้แน่ใจว่ากำลังทำงานอยู่!
+ ข้อผิดพลาดร้ายแรง: การเริ่มต้น Tor ล้มเหลว แอปพลิเคชันไม่สามารถดำเนินการต่อได้อย่างปลอดภัย
+ กำลังเชื่อมต่อกับเครือข่าย Tor...
+ ยังคงเชื่อมต่อกับ Tor...
+ เชื่อมต่อกับ Tor สำเร็จแล้ว กำลังตั้งค่าเบราว์เซอร์ที่ปลอดภัย...
+ ไม่สามารถเชื่อมต่อกับ Tor หลังจากพยายามหลายครั้ง แอปพลิเคชันไม่สามารถดำเนินการต่อได้อย่างปลอดภัย
+ "เกิดข้อผิดพลาดในการเชื่อมต่อกับ Tor: "
+ กำลังตั้งค่าการเบราว์ซิ่งที่ปลอดภัยด้วย Tor...
+ กำลังตั้งค่าการเบราว์ซิ่งด้วย Orbot...
+ การเชื่อมต่อที่ปลอดภัยถูกสร้างขึ้นแล้ว กำลังโหลดแอปพลิเคชัน...
+
diff --git a/android/app/src/main/res/values-zh-rCN/strings.xml b/android/app/src/main/res/values-zh-rCN/strings.xml
new file mode 100644
index 00000000..e759496c
--- /dev/null
+++ b/android/app/src/main/res/values-zh-rCN/strings.xml
@@ -0,0 +1,20 @@
+
+ Robosats
+ 后台服务
+ 连接
+ 配置
+ Robosats 正在后台运行获取通知
+ 通知
+ 使用 Orbot
+ 正在初始化 Tor 连接...
+ 正在使用 Orbot。请确保它正在运行!
+ 严重错误:Tor 初始化失败。应用无法安全地继续。
+ 正在连接到 Tor 网络...
+ 仍在连接到 Tor...
+ Tor 成功连接。正在设置安全浏览器...
+ 多次尝试后无法连接到 Tor。应用无法安全地继续。
+ "连接到 Tor 时出错: "
+ 正在设置安全的 Tor 浏览...
+ 正在设置 Orbot 浏览...
+ 安全连接已建立。正在加载应用...
+
diff --git a/android/app/src/main/res/values-zh-rTW/strings.xml b/android/app/src/main/res/values-zh-rTW/strings.xml
new file mode 100644
index 00000000..e6adb70e
--- /dev/null
+++ b/android/app/src/main/res/values-zh-rTW/strings.xml
@@ -0,0 +1,20 @@
+
+ Robosats
+ 背景服務
+ 連接
+ 配置
+ Robosats 正在背景執行獲取通知
+ 通知
+ 使用 Orbot
+ 正在初始化 Tor 連接...
+ 正在使用 Orbot。請確保它正在運行!
+ 嚴重錯誤:Tor 初始化失敗。應用無法安全地繼續。
+ 正在連接到 Tor 網絡...
+ 仍在連接到 Tor...
+ Tor 成功連接。正在設置安全瀏覽器...
+ 多次嘗試後無法連接到 Tor。應用無法安全地繼續。
+ "連接到 Tor 時出錯: "
+ 正在設置安全的 Tor 瀏覽...
+ 正在設置 Orbot 瀏覽...
+ 安全連接已建立。正在加載應用...
+
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index 7ef60516..a4b4dfad 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -6,4 +6,15 @@
Robosats is running in background fetching for notifications
Notifications
Use Orbot
+ Initializing Tor connection...
+ Using Orbot. Make sure it\'s running!
+ Critical error: Tor initialization failed. App cannot proceed securely.
+ Connecting to Tor network...
+ Still connecting to Tor...
+ Tor connected successfully. Setting up secure browser...
+ Failed to connect to Tor after multiple attempts. App cannot proceed securely.
+ "Error connecting to Tor: "
+ Setting up secure Tor browsing...
+ Setting up Orbot browsing...
+ Secure connection established. Loading app...