Apply system locale

This commit is contained in:
koalasat
2025-07-28 11:47:47 +02:00
parent 6e5107b2d0
commit d47ad9e303
22 changed files with 297 additions and 77 deletions

View File

@ -3,8 +3,6 @@ package com.robosats
import android.Manifest
import android.annotation.SuppressLint
import android.app.Application
import android.content.Context
import android.content.ContextWrapper
import android.content.Intent
import android.content.pm.ActivityInfo
import android.content.pm.PackageManager
@ -34,10 +32,7 @@ import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import com.robosats.models.EncryptedStorage
import com.robosats.models.LanguageManager
import com.robosats.models.LanguageManager.LANGUAGE_KEY
import com.robosats.models.LanguageManager.applyLanguage
import com.robosats.services.NotificationsService
import java.util.Locale
import com.robosats.tor.TorKmp
import com.robosats.tor.TorKmpManager
import com.robosats.tor.TorKmpManager.getTorKmpObject
@ -59,10 +54,8 @@ class MainActivity : AppCompatActivity() {
// Initialize EncryptedStorage
EncryptedStorage.init(this)
// Initialize language manager and apply saved language setting
// Initialize language manager with system language
LanguageManager.init(this)
val languageCode = EncryptedStorage.getEncryptedStorage(LANGUAGE_KEY)
changeAppLanguage(languageCode)
// Lock the screen orientation to portrait mode
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
@ -82,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(
@ -140,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()
@ -148,8 +141,8 @@ class MainActivity : AppCompatActivity() {
}
/**
* Initialize Notifications service
*/
* Initialize Notifications service
*/
fun initializeNotifications() {
startForegroundService(
Intent(
@ -195,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))
}
}
}
@ -214,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
@ -228,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))
}
}
}
@ -239,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)
@ -251,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}")
}
}
}
@ -297,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
@ -310,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() {
@ -457,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 ---
@ -474,17 +465,6 @@ class MainActivity : AppCompatActivity() {
webSettings.textZoom = 100
}
/**
* Change the app's language and recreate the activity
* @param languageCode The language code to switch to (e.g., "en", "es", "fr")
*/
fun changeAppLanguage(languageCode: String) {
// Apply the language change
if (LanguageManager.applyLanguage(languageCode)) {
// Restart the activity to apply changes
recreate()
}
}
/**
* Clear all WebView data when activity is destroyed

View File

@ -8,7 +8,6 @@ import android.webkit.JavascriptInterface
import android.webkit.WebView
import android.widget.Toast
import com.robosats.models.EncryptedStorage
import com.robosats.models.LanguageManager
import com.robosats.models.NostrClient
import com.robosats.services.NotificationsService
import com.robosats.tor.TorKmpManager.getTorKmpObject
@ -368,12 +367,6 @@ class WebAppInterface(private val context: MainActivity, private val webView: We
EncryptedStorage.setEncryptedStorage(sanitizedKey, sanitizedValue)
if (key == "garage_slots") NostrClient.refresh()
if (key == "settings_language") {
context.changeAppLanguage(value)
// Return immediately as recreate() will be called
resolvePromise(uuid, key)
return
}
if (key == "settings_notifications") {
val serviceIntent = Intent(context, NotificationsService::class.java)
if (value == "true") {

View File

@ -4,58 +4,100 @@ 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"
val LANGUAGE_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 selected language to the app
* @param languageCode The language code to apply, or "system" for system default
* @return true if language was changed, false otherwise
* 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 applyLanguage(languageCode: String): Boolean {
val locale = when {
languageCode == "system" -> {
// Use system default
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Resources.getSystem().configuration.locales.get(0)
} else {
@Suppress("DEPRECATION")
Resources.getSystem().configuration.locale
}
}
languageCode == "zh-si" -> Locale.SIMPLIFIED_CHINESE
languageCode == "zh-tr" -> Locale.TRADITIONAL_CHINESE
else -> Locale(languageCode)
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 selected locale
// Create configuration with the validated locale
val config = Configuration(resources.configuration)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
val localeList = LocaleList(locale)
LocaleList.setDefault(localeList)
config.setLocales(localeList)
} else {
config.locale = locale
@Suppress("DEPRECATION")
Locale.setDefault(locale)
}
val localeList = LocaleList(localeToUse)
LocaleList.setDefault(localeList)
config.setLocales(localeList)
// Update the configuration
@Suppress("DEPRECATION")
resources.updateConfiguration(config, resources.displayMetrics)
}
EncryptedStorage.setEncryptedStorage(LANGUAGE_KEY, languageCode)
/**
* 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
return true
// 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
}
}
}

View File

@ -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() {

View File

@ -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)

View File

@ -6,4 +6,15 @@
<string name="robosats_is_running_in_background">Robosats s\'està executant en segon pla cercant notificacions</string>
<string name="notifications">Notificacions</string>
<string name="useOrbotButton">Utilitzar Orbot</string>
<string name="init_tor">Inicialitzant connexió Tor...</string>
<string name="using_orbot">Utilitzant Orbot. Assegureu-vos que està en execució!</string>
<string name="tor_init_error">Error crític: La inicialització de Tor ha fallat. L\'aplicació no pot continuar de manera segura.</string>
<string name="connecting_tor">Connectant a la xarxa Tor...</string>
<string name="still_connecting_tor">Encara connectant a Tor...</string>
<string name="connected_tor">Tor connectat amb èxit. Configurant navegador segur...</string>
<string name="fail_tor">No s\'ha pogut connectar a Tor després de diversos intents. L\'aplicació no pot continuar de manera segura.</string>
<string name="error_tor">"Error en connectar a Tor: "</string>
<string name="setting_tor">Configurant navegació segura amb Tor...</string>
<string name="setting_orbot">Configurant navegació amb Orbot...</string>
<string name="loading_app">Connexió segura establerta. Carregant aplicació...</string>
</resources>

View File

@ -6,4 +6,15 @@
<string name="robosats_is_running_in_background">Robosats běží na pozadí a vyhledává oznámení</string>
<string name="notifications">Oznámení</string>
<string name="useOrbotButton">Použít Orbot</string>
<string name="init_tor">Inicializace připojení Tor...</string>
<string name="using_orbot">Používá se Orbot. Ujistěte se, že běží!</string>
<string name="tor_init_error">Kritická chyba: Inicializace Tor selhala. Aplikace nemůže bezpečně pokračovat.</string>
<string name="connecting_tor">Připojování k síti Tor...</string>
<string name="still_connecting_tor">Stále se připojuje k Tor...</string>
<string name="connected_tor">Tor úspěšně připojen. Nastavování bezpečného prohlížeče...</string>
<string name="fail_tor">Nepodařilo se připojit k Tor po několika pokusech. Aplikace nemůže bezpečně pokračovat.</string>
<string name="error_tor">"Chyba při připojování k Tor: "</string>
<string name="setting_tor">Nastavování bezpečného prohlížení přes Tor...</string>
<string name="setting_orbot">Nastavování prohlížení přes Orbot...</string>
<string name="loading_app">Bezpečné připojení navázáno. Načítání aplikace...</string>
</resources>

View File

@ -6,4 +6,15 @@
<string name="robosats_is_running_in_background">Robosats läuft im Hintergrund und sucht nach Benachrichtigungen</string>
<string name="notifications">Benachrichtigungen</string>
<string name="useOrbotButton">Orbot verwenden</string>
<string name="init_tor">Tor-Verbindung wird initialisiert...</string>
<string name="using_orbot">Orbot wird verwendet. Stellen Sie sicher, dass es läuft!</string>
<string name="tor_init_error">Kritischer Fehler: Tor-Initialisierung fehlgeschlagen. Die App kann nicht sicher fortfahren.</string>
<string name="connecting_tor">Verbindung zum Tor-Netzwerk wird hergestellt...</string>
<string name="still_connecting_tor">Verbindung zu Tor wird noch hergestellt...</string>
<string name="connected_tor">Tor erfolgreich verbunden. Sicherer Browser wird eingerichtet...</string>
<string name="fail_tor">Verbindung zu Tor nach mehreren Versuchen fehlgeschlagen. Die App kann nicht sicher fortfahren.</string>
<string name="error_tor">"Fehler bei der Verbindung zu Tor: "</string>
<string name="setting_tor">Sichere Tor-Navigation wird eingerichtet...</string>
<string name="setting_orbot">Orbot-Navigation wird eingerichtet...</string>
<string name="loading_app">Sichere Verbindung hergestellt. App wird geladen...</string>
</resources>

View File

@ -6,4 +6,15 @@
<string name="robosats_is_running_in_background">Robosats está ejecutándose en segundo plano buscando notificaciones</string>
<string name="notifications">Notificaciones</string>
<string name="useOrbotButton">Usar Orbot</string>
<string name="init_tor">Inicializando conexión Tor...</string>
<string name="using_orbot">Usando Orbot. ¡Asegúrese de que esté ejecutándose!</string>
<string name="tor_init_error">Error crítico: Falló la inicialización de Tor. La aplicación no puede proceder de forma segura.</string>
<string name="connecting_tor">Conectando a la red Tor...</string>
<string name="still_connecting_tor">Todavía conectando a Tor...</string>
<string name="connected_tor">Tor conectado exitosamente. Configurando navegador seguro...</string>
<string name="fail_tor">No se pudo conectar a Tor después de múltiples intentos. La aplicación no puede proceder de forma segura.</string>
<string name="error_tor">"Error al conectar a Tor: "</string>
<string name="setting_tor">Configurando navegación segura con Tor...</string>
<string name="setting_orbot">Configurando navegación con Orbot...</string>
<string name="loading_app">Conexión segura establecida. Cargando aplicación...</string>
</resources>

View File

@ -6,4 +6,15 @@
<string name="robosats_is_running_in_background">Robosats atzeko planoan exekutatzen ari da jakinarazpenak bilatzen</string>
<string name="notifications">Jakinarazpenak</string>
<string name="useOrbotButton">Orbot erabili</string>
<string name="init_tor">Tor konexioa hasieratzen...</string>
<string name="using_orbot">Orbot erabiltzen. Ziurtatu martxan dagoela!</string>
<string name="tor_init_error">Errore kritikoa: Tor hasieratzeak huts egin du. Aplikazioak ezin du modu seguruan jarraitu.</string>
<string name="connecting_tor">Tor sarera konektatzen...</string>
<string name="still_connecting_tor">Oraindik Tor-era konektatzen...</string>
<string name="connected_tor">Tor arrakastaz konektatu da. Nabigatzaile segurua konfiguratzen...</string>
<string name="fail_tor">Ezin izan da Tor-era konektatu hainbat saiakera eta gero. Aplikazioak ezin du modu seguruan jarraitu.</string>
<string name="error_tor">"Errorea Tor-era konektatzean: "</string>
<string name="setting_tor">Tor-en bidezko nabigazio segurua konfiguratzen...</string>
<string name="setting_orbot">Orbot nabigazioa konfiguratzen...</string>
<string name="loading_app">Konexio segurua ezarri da. Aplikazioa kargatzen...</string>
</resources>

View File

@ -6,4 +6,15 @@
<string name="robosats_is_running_in_background">Robosats fonctionne en arrière-plan et recherche des notifications</string>
<string name="notifications">Notifications</string>
<string name="useOrbotButton">Utiliser Orbot</string>
<string name="init_tor">Initialisation de la connexion Tor...</string>
<string name="using_orbot">Utilisation d\'Orbot. Assurez-vous qu\'il est en cours d\'exécution !</string>
<string name="tor_init_error">Erreur critique : Échec de l\'initialisation de Tor. L\'application ne peut pas continuer en toute sécurité.</string>
<string name="connecting_tor">Connexion au réseau Tor...</string>
<string name="still_connecting_tor">Toujours en cours de connexion à Tor...</string>
<string name="connected_tor">Tor connecté avec succès. Configuration du navigateur sécurisé...</string>
<string name="fail_tor">Échec de la connexion à Tor après plusieurs tentatives. L\'application ne peut pas continuer en toute sécurité.</string>
<string name="error_tor">"Erreur lors de la connexion à Tor : "</string>
<string name="setting_tor">Configuration de la navigation sécurisée avec Tor...</string>
<string name="setting_orbot">Configuration de la navigation avec Orbot...</string>
<string name="loading_app">Connexion sécurisée établie. Chargement de l\'application...</string>
</resources>

View File

@ -6,4 +6,15 @@
<string name="robosats_is_running_in_background">Robosats è in esecuzione in background cercando notifiche</string>
<string name="notifications">Notifiche</string>
<string name="useOrbotButton">Usa Orbot</string>
<string name="init_tor">Inizializzazione connessione Tor...</string>
<string name="using_orbot">Utilizzo di Orbot. Assicurati che sia in esecuzione!</string>
<string name="tor_init_error">Errore critico: Inizializzazione di Tor fallita. L\'app non può procedere in modo sicuro.</string>
<string name="connecting_tor">Connessione alla rete Tor...</string>
<string name="still_connecting_tor">Ancora in connessione a Tor...</string>
<string name="connected_tor">Tor connesso con successo. Configurazione del browser sicuro...</string>
<string name="fail_tor">Impossibile connettersi a Tor dopo diversi tentativi. L\'app non può procedere in modo sicuro.</string>
<string name="error_tor">"Errore durante la connessione a Tor: "</string>
<string name="setting_tor">Configurazione della navigazione sicura con Tor...</string>
<string name="setting_orbot">Configurazione della navigazione con Orbot...</string>
<string name="loading_app">Connessione sicura stabilita. Caricamento dell\'app...</string>
</resources>

View File

@ -6,4 +6,15 @@
<string name="robosats_is_running_in_background">Robosatsはバックグラウンドで通知を取得しています</string>
<string name="notifications">通知</string>
<string name="useOrbotButton">Orbotを使用</string>
<string name="init_tor">Tor接続を初期化中...</string>
<string name="using_orbot">Orbotを使用中。実行中であることを確認してください</string>
<string name="tor_init_error">重大なエラーTorの初期化に失敗しました。アプリは安全に続行できません。</string>
<string name="connecting_tor">Torネットワークに接続中...</string>
<string name="still_connecting_tor">まだTorに接続中...</string>
<string name="connected_tor">Torに正常に接続されました。セキュアなブラウザを設定中...</string>
<string name="fail_tor">複数回の試行後、Torに接続できませんでした。アプリは安全に続行できません。</string>
<string name="error_tor">"Torへの接続エラー: "</string>
<string name="setting_tor">セキュアなTorブラウジングを設定中...</string>
<string name="setting_orbot">Orbotブラウジングを設定中...</string>
<string name="loading_app">セキュアな接続が確立されました。アプリを読み込み中...</string>
</resources>

View File

@ -6,4 +6,15 @@
<string name="robosats_is_running_in_background">Robosats działa w tle, pobierając powiadomienia</string>
<string name="notifications">Powiadomienia</string>
<string name="useOrbotButton">Użyj Orbot</string>
<string name="init_tor">Inicjalizacja połączenia Tor...</string>
<string name="using_orbot">Korzystanie z Orbot. Upewnij się, że jest uruchomiony!</string>
<string name="tor_init_error">Błąd krytyczny: Inicjalizacja Tor nie powiodła się. Aplikacja nie może bezpiecznie kontynuować.</string>
<string name="connecting_tor">Łączenie z siecią Tor...</string>
<string name="still_connecting_tor">Nadal łączenie z Tor...</string>
<string name="connected_tor">Tor pomyślnie połączony. Konfigurowanie bezpiecznej przeglądarki...</string>
<string name="fail_tor">Nie udało się połączyć z Tor po wielu próbach. Aplikacja nie może bezpiecznie kontynuować.</string>
<string name="error_tor">"Błąd podczas łączenia z Tor: "</string>
<string name="setting_tor">Konfigurowanie bezpiecznego przeglądania przez Tor...</string>
<string name="setting_orbot">Konfigurowanie przeglądania przez Orbot...</string>
<string name="loading_app">Bezpieczne połączenie ustanowione. Ładowanie aplikacji...</string>
</resources>

View File

@ -6,4 +6,15 @@
<string name="robosats_is_running_in_background">Robosats está rodando em segundo plano buscando notificações</string>
<string name="notifications">Notificações</string>
<string name="useOrbotButton">Usar Orbot</string>
<string name="init_tor">Inicializando conexão Tor...</string>
<string name="using_orbot">Usando Orbot. Certifique-se de que está rodando!</string>
<string name="tor_init_error">Erro crítico: Falha na inicialização do Tor. O aplicativo não pode prosseguir com segurança.</string>
<string name="connecting_tor">Conectando à rede Tor...</string>
<string name="still_connecting_tor">Ainda conectando ao Tor...</string>
<string name="connected_tor">Tor conectado com sucesso. Configurando navegador seguro...</string>
<string name="fail_tor">Falha ao conectar ao Tor após várias tentativas. O aplicativo não pode prosseguir com segurança.</string>
<string name="error_tor">"Erro ao conectar ao Tor: "</string>
<string name="setting_tor">Configurando navegação segura com Tor...</string>
<string name="setting_orbot">Configurando navegação com Orbot...</string>
<string name="loading_app">Conexão segura estabelecida. Carregando aplicativo...</string>
</resources>

View File

@ -6,4 +6,15 @@
<string name="robosats_is_running_in_background">Robosats работает в фоновом режиме и ищет уведомления</string>
<string name="notifications">Уведомления</string>
<string name="useOrbotButton">Использовать Orbot</string>
<string name="init_tor">Инициализация соединения Tor...</string>
<string name="using_orbot">Использование Orbot. Убедитесь, что он запущен!</string>
<string name="tor_init_error">Критическая ошибка: Не удалось инициализировать Tor. Приложение не может безопасно продолжить работу.</string>
<string name="connecting_tor">Подключение к сети Tor...</string>
<string name="still_connecting_tor">Всё ещё подключается к Tor...</string>
<string name="connected_tor">Tor успешно подключен. Настройка безопасного браузера...</string>
<string name="fail_tor">Не удалось подключиться к Tor после нескольких попыток. Приложение не может безопасно продолжить работу.</string>
<string name="error_tor">"Ошибка при подключении к Tor: "</string>
<string name="setting_tor">Настройка безопасного просмотра через Tor...</string>
<string name="setting_orbot">Настройка просмотра через Orbot...</string>
<string name="loading_app">Безопасное соединение установлено. Загрузка приложения...</string>
</resources>

View File

@ -6,4 +6,15 @@
<string name="robosats_is_running_in_background">Robosats körs i bakgrunden och söker efter meddelanden</string>
<string name="notifications">Meddelanden</string>
<string name="useOrbotButton">Använd Orbot</string>
<string name="init_tor">Initierar Tor-anslutning...</string>
<string name="using_orbot">Använder Orbot. Se till att den körs!</string>
<string name="tor_init_error">Kritiskt fel: Initiering av Tor misslyckades. Appen kan inte fortsätta säkert.</string>
<string name="connecting_tor">Ansluter till Tor-nätverket...</string>
<string name="still_connecting_tor">Fortfarande ansluter till Tor...</string>
<string name="connected_tor">Tor ansluten framgångsrikt. Konfigurerar säker webbläsare...</string>
<string name="fail_tor">Det gick inte att ansluta till Tor efter flera försök. Appen kan inte fortsätta säkert.</string>
<string name="error_tor">"Fel vid anslutning till Tor: "</string>
<string name="setting_tor">Konfigurerar säker Tor-surfning...</string>
<string name="setting_orbot">Konfigurerar Orbot-surfning...</string>
<string name="loading_app">Säker anslutning etablerad. Laddar app...</string>
</resources>

View File

@ -6,4 +6,15 @@
<string name="robosats_is_running_in_background">Robosats inaendesha katika usuli ikitafuta arifa</string>
<string name="notifications">Arifa</string>
<string name="useOrbotButton">Tumia Orbot</string>
<string name="init_tor">Inaanzisha muunganisho wa Tor...</string>
<string name="using_orbot">Inatumia Orbot. Hakikisha inafanya kazi!</string>
<string name="tor_init_error">Hitilafu muhimu: Kuanzisha Tor kumeshindwa. Programu haiwezi kuendelea kwa usalama.</string>
<string name="connecting_tor">Inaunganisha kwa mtandao wa Tor...</string>
<string name="still_connecting_tor">Bado inaunganisha na Tor...</string>
<string name="connected_tor">Tor imeunganishwa kwa mafanikio. Inaunda kivinjari salama...</string>
<string name="fail_tor">Imeshindwa kuunganisha na Tor baada ya majaribio mengi. Programu haiwezi kuendelea kwa usalama.</string>
<string name="error_tor">"Hitilafu wakati wa kuunganisha na Tor: "</string>
<string name="setting_tor">Inaunda uvinjari salama wa Tor...</string>
<string name="setting_orbot">Inaunda uvinjari wa Orbot...</string>
<string name="loading_app">Muunganisho salama umeundwa. Inapakia programu...</string>
</resources>

View File

@ -6,4 +6,15 @@
<string name="robosats_is_running_in_background">Robosats กำลังทำงานในเบื้องหลังและค้นหาการแจ้งเตือน</string>
<string name="notifications">การแจ้งเตือน</string>
<string name="useOrbotButton">ใช้ Orbot</string>
<string name="init_tor">กำลังเริ่มต้นการเชื่อมต่อ Tor...</string>
<string name="using_orbot">กำลังใช้ Orbot ตรวจสอบให้แน่ใจว่ากำลังทำงานอยู่!</string>
<string name="tor_init_error">ข้อผิดพลาดร้ายแรง: การเริ่มต้น Tor ล้มเหลว แอปพลิเคชันไม่สามารถดำเนินการต่อได้อย่างปลอดภัย</string>
<string name="connecting_tor">กำลังเชื่อมต่อกับเครือข่าย Tor...</string>
<string name="still_connecting_tor">ยังคงเชื่อมต่อกับ Tor...</string>
<string name="connected_tor">เชื่อมต่อกับ Tor สำเร็จแล้ว กำลังตั้งค่าเบราว์เซอร์ที่ปลอดภัย...</string>
<string name="fail_tor">ไม่สามารถเชื่อมต่อกับ Tor หลังจากพยายามหลายครั้ง แอปพลิเคชันไม่สามารถดำเนินการต่อได้อย่างปลอดภัย</string>
<string name="error_tor">"เกิดข้อผิดพลาดในการเชื่อมต่อกับ Tor: "</string>
<string name="setting_tor">กำลังตั้งค่าการเบราว์ซิ่งที่ปลอดภัยด้วย Tor...</string>
<string name="setting_orbot">กำลังตั้งค่าการเบราว์ซิ่งด้วย Orbot...</string>
<string name="loading_app">การเชื่อมต่อที่ปลอดภัยถูกสร้างขึ้นแล้ว กำลังโหลดแอปพลิเคชัน...</string>
</resources>

View File

@ -6,4 +6,15 @@
<string name="robosats_is_running_in_background">Robosats 正在后台运行获取通知</string>
<string name="notifications">通知</string>
<string name="useOrbotButton">使用 Orbot</string>
<string name="init_tor">正在初始化 Tor 连接...</string>
<string name="using_orbot">正在使用 Orbot。请确保它正在运行</string>
<string name="tor_init_error">严重错误Tor 初始化失败。应用无法安全地继续。</string>
<string name="connecting_tor">正在连接到 Tor 网络...</string>
<string name="still_connecting_tor">仍在连接到 Tor...</string>
<string name="connected_tor">Tor 成功连接。正在设置安全浏览器...</string>
<string name="fail_tor">多次尝试后无法连接到 Tor。应用无法安全地继续。</string>
<string name="error_tor">"连接到 Tor 时出错: "</string>
<string name="setting_tor">正在设置安全的 Tor 浏览...</string>
<string name="setting_orbot">正在设置 Orbot 浏览...</string>
<string name="loading_app">安全连接已建立。正在加载应用...</string>
</resources>

View File

@ -6,4 +6,15 @@
<string name="robosats_is_running_in_background">Robosats 正在背景執行獲取通知</string>
<string name="notifications">通知</string>
<string name="useOrbotButton">使用 Orbot</string>
<string name="init_tor">正在初始化 Tor 連接...</string>
<string name="using_orbot">正在使用 Orbot。請確保它正在運行</string>
<string name="tor_init_error">嚴重錯誤Tor 初始化失敗。應用無法安全地繼續。</string>
<string name="connecting_tor">正在連接到 Tor 網絡...</string>
<string name="still_connecting_tor">仍在連接到 Tor...</string>
<string name="connected_tor">Tor 成功連接。正在設置安全瀏覽器...</string>
<string name="fail_tor">多次嘗試後無法連接到 Tor。應用無法安全地繼續。</string>
<string name="error_tor">"連接到 Tor 時出錯: "</string>
<string name="setting_tor">正在設置安全的 Tor 瀏覽...</string>
<string name="setting_orbot">正在設置 Orbot 瀏覽...</string>
<string name="loading_app">安全連接已建立。正在加載應用...</string>
</resources>

View File

@ -6,4 +6,15 @@
<string name="robosats_is_running_in_background">Robosats is running in background fetching for notifications</string>
<string name="notifications">Notifications</string>
<string name="useOrbotButton">Use Orbot</string>
<string name="init_tor">Initializing Tor connection...</string>
<string name="using_orbot">Using Orbot. Make sure it\'s running!</string>
<string name="tor_init_error">Critical error: Tor initialization failed. App cannot proceed securely.</string>
<string name="connecting_tor">Connecting to Tor network...</string>
<string name="still_connecting_tor">Still connecting to Tor...</string>
<string name="connected_tor">Tor connected successfully. Setting up secure browser...</string>
<string name="fail_tor">Failed to connect to Tor after multiple attempts. App cannot proceed securely.</string>
<string name="error_tor">"Error connecting to Tor: "</string>
<string name="setting_tor">Setting up secure Tor browsing...</string>
<string name="setting_orbot">Setting up Orbot browsing...</string>
<string name="loading_app">Secure connection established. Loading app...</string>
</resources>