From 6ae5f3fd04bd7c9c9c5e65c262d64d255fe9d2b0 Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Tue, 23 Mar 2021 19:26:15 +0100 Subject: [PATCH] Add initial language switch support Also add italian translation --- .../com/emanuelef/remote_capture/Utils.java | 10 ++ .../activities/AboutActivity.java | 4 +- .../activities/AppsActivity.java | 4 +- .../activities/BaseActivity.java | 24 ++++ .../activities/ConnectionDetailsActivity.java | 3 +- .../activities/MainActivity.java | 8 +- .../activities/SettingsActivity.java | 4 +- .../activities/StatsActivity.java | 3 +- .../emanuelef/remote_capture/model/Prefs.java | 1 + app/src/main/res/values-it/strings.xml | 110 ++++++++++++++++++ app/src/main/res/values-zh-rCN/strings.xml | 1 - app/src/main/res/values/arrays.xml | 10 ++ app/src/main/res/values/strings.xml | 5 +- app/src/main/res/xml/root_preferences.xml | 13 ++- 14 files changed, 176 insertions(+), 24 deletions(-) create mode 100644 app/src/main/java/com/emanuelef/remote_capture/activities/BaseActivity.java create mode 100644 app/src/main/res/values-it/strings.xml diff --git a/app/src/main/java/com/emanuelef/remote_capture/Utils.java b/app/src/main/java/com/emanuelef/remote_capture/Utils.java index 723a6bb8..edfe47dd 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/Utils.java +++ b/app/src/main/java/com/emanuelef/remote_capture/Utils.java @@ -129,6 +129,16 @@ public class Utils { return fmt.format(new Date(epoch * 1000)); } + public static void setAppLanguage(Context context, String language) { + Locale locale = new Locale(language); + Configuration config = new Configuration(); + + Locale.setDefault(locale); + config.locale = locale; + context.getResources().updateConfiguration(config, + context.getResources().getDisplayMetrics()); + } + public static String proto2str(int proto) { switch(proto) { case 6: return "TCP"; diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/AboutActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/AboutActivity.java index 7e4a0c0d..65b8c327 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/AboutActivity.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/AboutActivity.java @@ -24,12 +24,10 @@ import android.text.Html; import android.text.method.LinkMovementMethod; import android.widget.TextView; -import androidx.appcompat.app.AppCompatActivity; - import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.Utils; -public class AboutActivity extends AppCompatActivity { +public class AboutActivity extends BaseActivity { private static final String TAG = "AboutActivity"; @Override diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/AppsActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/AppsActivity.java index eeca385c..d160b77a 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/AppsActivity.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/AppsActivity.java @@ -21,11 +21,9 @@ package com.emanuelef.remote_capture.activities; import android.os.Bundle; -import androidx.appcompat.app.AppCompatActivity; - import com.emanuelef.remote_capture.R; -public class AppsActivity extends AppCompatActivity { +public class AppsActivity extends BaseActivity { private static final String TAG = "AppsActivity"; @Override diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/BaseActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/BaseActivity.java new file mode 100644 index 00000000..23586931 --- /dev/null +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/BaseActivity.java @@ -0,0 +1,24 @@ +package com.emanuelef.remote_capture.activities; + +import android.content.SharedPreferences; +import android.os.Bundle; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.preference.PreferenceManager; + +import com.emanuelef.remote_capture.Utils; +import com.emanuelef.remote_capture.model.Prefs; + +class BaseActivity extends AppCompatActivity { + protected SharedPreferences mPrefs; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + mPrefs = PreferenceManager.getDefaultSharedPreferences(this); + + if(!Prefs.useSystemLanguage(mPrefs)) + Utils.setAppLanguage(this, "en"); + } +} diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/ConnectionDetailsActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/ConnectionDetailsActivity.java index ef233c0e..6e88720c 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/ConnectionDetailsActivity.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/ConnectionDetailsActivity.java @@ -20,7 +20,6 @@ package com.emanuelef.remote_capture.activities; import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; import android.content.ClipData; import android.content.ClipboardManager; @@ -37,7 +36,7 @@ import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.Utils; import com.emanuelef.remote_capture.model.ConnectionDescriptor; -public class ConnectionDetailsActivity extends AppCompatActivity { +public class ConnectionDetailsActivity extends BaseActivity { private static final String TAG = "ConnectionDetails"; public static final String CONN_EXTRA_KEY = "conn_descriptor"; public static final String APP_NAME_EXTRA_KEY = "app_name"; diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java index 337c55df..23088fb7 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java @@ -23,7 +23,6 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.content.SharedPreferences; import android.database.Cursor; import android.net.Uri; import android.net.VpnService; @@ -31,14 +30,12 @@ import android.net.VpnService; import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.core.view.GravityCompat; import androidx.drawerlayout.widget.DrawerLayout; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.localbroadcastmanager.content.LocalBroadcastManager; -import androidx.preference.PreferenceManager; import androidx.viewpager2.adapter.FragmentStateAdapter; import androidx.viewpager2.widget.ViewPager2; @@ -68,8 +65,7 @@ import java.io.FileNotFoundException; import cat.ereza.customactivityoncrash.config.CaocConfig; -public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { - private SharedPreferences mPrefs; +public class MainActivity extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener { private ViewPager2 mPager; private TabLayout mTabLayout; private AppState mState; @@ -113,8 +109,6 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On setupTabs(); - mPrefs = PreferenceManager.getDefaultSharedPreferences(this); - /* Register for service status */ mReceiver = new BroadcastReceiver() { @Override diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/SettingsActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/SettingsActivity.java index c7307a40..b039e939 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/SettingsActivity.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/SettingsActivity.java @@ -24,9 +24,7 @@ import android.text.InputType; import android.util.Patterns; import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; import androidx.preference.EditTextPreference; -import androidx.preference.ListPreference; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; import androidx.preference.SwitchPreference; @@ -36,7 +34,7 @@ import com.emanuelef.remote_capture.R; import java.util.regex.Matcher; -public class SettingsActivity extends AppCompatActivity { +public class SettingsActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/StatsActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/StatsActivity.java index b8938767..4e026220 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/StatsActivity.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/StatsActivity.java @@ -21,7 +21,6 @@ package com.emanuelef.remote_capture.activities; import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; import androidx.localbroadcastmanager.content.LocalBroadcastManager; import android.content.BroadcastReceiver; @@ -43,7 +42,7 @@ import com.emanuelef.remote_capture.R; import com.emanuelef.remote_capture.Utils; import com.emanuelef.remote_capture.model.VPNStats; -public class StatsActivity extends AppCompatActivity { +public class StatsActivity extends BaseActivity { private BroadcastReceiver mReceiver; private TextView mBytesSent; private TextView mBytesRcvd; diff --git a/app/src/main/java/com/emanuelef/remote_capture/model/Prefs.java b/app/src/main/java/com/emanuelef/remote_capture/model/Prefs.java index 438047e5..a99a3106 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/model/Prefs.java +++ b/app/src/main/java/com/emanuelef/remote_capture/model/Prefs.java @@ -65,4 +65,5 @@ public class Prefs { public static int getTlsProxyPort(SharedPreferences p) { return(Integer.parseInt(p.getString(Prefs.PREF_TLS_PROXY_PORT_KEY, "8080"))); } public static String getAppFilter(SharedPreferences p) { return(p.getString(PREF_APP_FILTER, "")); } public static boolean getIPv6Enabled(SharedPreferences p) { return(p.getBoolean(PREF_IPV6_ENABLED, false)); } + public static boolean useSystemLanguage(SharedPreferences p) { return("system".equals(p.getString("app_language", "system")));} } diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml new file mode 100644 index 00000000..ff7cac9a --- /dev/null +++ b/app/src/main/res/values-it/strings.xml @@ -0,0 +1,110 @@ + + Avvia + Ferma + Impostazioni + Nessun Filtro + Collettore UDP: %1$s:%2$d + Server HTTP: http://%1$s:%2$d + %1$s ricevuti — %2$s inviati + Query + Host + La cattura non è in esecuzione! + La cattura non è stata avviata! + Filtro App + Pronto + Informazioni + Stato + Connessioni + Nessuna connessione + Dettagli Connessione + App + Protocollo + Sorgente + Destinazione + Bytes + Pacchetti + Durata + Server HTTP + Esportatore UDP + Nessun Dump + Il PCAP non sarà dumpato + Avvia un server HTTP per il download del PCAP + Invia il PCAP a un collettore UDP remoto + Porta del Server HTTP + IP del Collettore + Porta del Collettore + Modalità di Dump + IP del mitmproxy + Porta del mitmproxy + Abilita Decrittazione TLS + Quando abilitata, tutto il traffico TLS sarà rediretto a un\'istanza mitmproxy remota per la decrittazione. + Decrittazione TLS + Guida Utente + Valuta + Gruppo Telegram + Codice Sorgente + SI + NO + L\'app di VPN attualmente in esecuzione verrà disconnessa. Vuoi procedere? + Setup della VPN fallito + L\'app "%1$s" non è stata trovata + Caricamento delle app in corso, attendere + Statistiche + Connessioni Attive + Connessioni Droppate + Connessioni Totali + Socket Aperti + FD Massimo + Bytes Inviati + Bytes Ricevuti + Pacchetti Inviati + Pacchetti Ricevuti + Query DNS + Cerca App + Nessuna app + Server DNS + App + Rimuovi il filtro app + Imposta il filtro app + Apri Drawer + Chiudi Drawer + File PCAP + Crea un file PCAP nella memoria del dispositivo + Impossibile scrivere il file PCAP + Impossibile scrivere il file + Condividi + Elimina + Ok + Traffico salvato nel file %1$s (%2$s). + Impossibile eliminare il file + Cattura in esecuzione + %1$s catturati, %2$s connessioni + Nessun filtro app impostato + %1$s, %2$d + Aperta + Inizio + Fine + Chiusa + Copia negli appunti + Copiato negli appunti! + IPProto,SrcIP,SrcPort,DstIp,DstPort,Uid,App,Proto,Status,Info,BytesSent,BytesRcvd,PktsSent,PktsRcvd,FirstSeen,LastSeen + Esporta in un file + File salvato correttamente + %1$d connessioni precedenti nascoste + PCAPdroid è un software libero per la cattura e il monitoraggio di rete che funziona senza privilegi di root. + PCAPdroid è distribuito nella speranza che sia utile, ma SENZA ALCUNA GARANZIA; senza neanche la garanzia implicita di COMMERCIABILITÀ o IDONEITÀ PER UNO SCOPO PARTICOLARE. Fare riferimento alla GNU General Public License per ulteriori dettagli. + Licenza GPLv3 + Scaricala: + Come impostare la Decrittazione TLS + Sconosciuta + VPN + Abilita IPv6 + Permetti connessioni internet IPv6. Da abilitare soltanto in reti con gateway IPv6. + Errore + Irraggiungibile + Altro + Lingua dell\'App + Inglese + Predefinita del sistema + + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index a93d4fb2..faccf157 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -48,7 +48,6 @@ mitmproxy 端口 启用 TLS 解密 启用后,所有 TLS 通信都将被重定向到远程 mitmproxy 实例进行解密。 - 8080 TLS 解密 用户指南 评分 diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index bb498353..fbd32ccc 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -20,4 +20,14 @@ @string/pcap_file_info @string/udp_exporter_info + + + system + english + + + + @string/lang_system_default + @string/lang_english + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6c2eaa21..173650ba 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -48,7 +48,6 @@ mitmproxy Port Enable TLS Decryption When enabled, all the TLS traffic will be redirected to a remote mitmproxy instance for decryption. - 8080 TLS Decryption User Guide Rate @@ -113,5 +112,9 @@ Allow IPv6 internet connections. This should only be enabled on networks with an IPv6 gateway. Error Unreachable + Other + App Language + English + System default diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 038f0c7c..a07253aa 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -70,16 +70,25 @@ app:key="tls_proxy_port" app:title="@string/tls_proxy_port" app:iconSpaceReserved="false" - app:defaultValue="@string/default_proxy_port" + app:defaultValue="8080" app:useSimpleSummaryProvider="true" /> - + + +