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...