Add the German string translations, credit Petra Mirelli

https://gitlab.com/divested-mobile/hypatia/-/issues/1
This commit is contained in:
Tad 2021-02-02 09:00:44 -05:00
parent 415ff8d25e
commit a85f812d04
14 changed files with 150 additions and 24 deletions

Binary file not shown.

6
.idea/compiler.xml generated Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="1.8" />
</component>
</project>

12
.idea/gradle.xml generated
View file

@ -1,14 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<compositeConfiguration>
<compositeBuild compositeDefinitionSource="SCRIPT" />
</compositeConfiguration>
<option name="testRunner" value="PLATFORM" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
<option name="useQualifiedModuleNames" value="true" />
</GradleProjectSettings>
</option>
</component>

25
.idea/jarRepositories.xml generated Normal file
View file

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="BintrayJCenter" />
<option name="name" value="BintrayJCenter" />
<option name="url" value="https://jcenter.bintray.com/" />
</remote-repository>
<remote-repository>
<option name="id" value="Google" />
<option name="name" value="Google" />
<option name="url" value="https://dl.google.com/dl/android/maven2/" />
</remote-repository>
</component>
</project>

2
.idea/misc.xml generated
View file

@ -5,7 +5,7 @@
<configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" />
</configurations>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="JDK" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="JDK" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">

2
.idea/modules.xml generated
View file

@ -3,7 +3,7 @@
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/Veritas.iml" filepath="$PROJECT_DIR$/Veritas.iml" />
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/app/Veritas.app.iml" filepath="$PROJECT_DIR$/.idea/modules/app/Veritas.app.iml" />
</modules>
</component>
</project>

View file

@ -6,7 +6,7 @@ android {
applicationId "us.spotco.malwarescanner"
minSdkVersion 16
targetSdkVersion 26
versionCode 41
versionCode 42
versionName "3.0"
resConfigs "en"
vectorDrawables.useSupportLibrary = true

View file

@ -13,7 +13,6 @@
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:requestLegacyExternalStorage="true"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"

View file

@ -29,7 +29,7 @@ public class DownloaderTask extends AsyncTask<Object, String, String> {
protected String doInBackground(Object... objects) {
String url = (String) objects[0];
File out = new File((String) objects[1]);
publishProgress("Downloading " + url);
publishProgress(Utils.getContext().getString(R.string.main_database_downloading, url));
try {
HttpURLConnection connection = Utils.getConnection(url);
if (out.exists()) {
@ -51,18 +51,18 @@ public class DownloaderTask extends AsyncTask<Object, String, String> {
}
fileOutputStream.close();
publishProgress("Successfully downloaded\n");
publishProgress(Utils.getContext().getString(R.string.main_database_download_success) + "\n");
} else {
publishProgress("File not downloaded, response code " + res + "\n");
publishProgress(Utils.getContext().getString(R.string.main_database_download_error, res + "") + "\n");
}
} else {
publishProgress("File not changed\n");
publishProgress(Utils.getContext().getString(R.string.main_database_not_changed) + "\n");
}
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
out.delete();
publishProgress("Failed to download, check logcat\n");
publishProgress(Utils.getContext().getString(R.string.main_database_download_error_logcat) + "\n");
}
return null;
}

View file

@ -52,7 +52,7 @@ class MalwareScanner extends AsyncTask<Set<File>, Object, String> {
@Override
protected final void onPreExecute() {
scanTime = SystemClock.elapsedRealtime();
returnResult("Starting scan...", true);
returnResult(Utils.getContext().getString(R.string.main_starting_scan), true);
}
@Override
@ -62,18 +62,18 @@ class MalwareScanner extends AsyncTask<Set<File>, Object, String> {
fileHashesSHA1.clear();
fileHashesSHA256.clear();
publishProgress(filesToScan[0].size() + " files pending scan\n", true);
publishProgress( Utils.getContext().getString(R.string.main_files_pending_scan, filesToScan[0].size() + "") + "\n", true);
DatabaseManager.loadAllAvailableDatabases(false);
if (Signatures.getSignatureCount() >= 0) {
publishProgress("Loaded database with " + Signatures.getSignatureCount() + " signatures\n", true);
publishProgress(Utils.getContext().getString(R.string.main_database_loaded, Signatures.getSignatureCount() + "") + "\n", true);
//Get file hashes
publishProgress("Hashing files...", true);
publishProgress(Utils.getContext().getString(R.string.main_hashing_files), true);
for (File file : filesToScan[0]) {
getFileHashes(file);
}
publishProgress("Calculated MD5/SHA-1/SHA-256 hashes for all files\n", true);
publishProgress(Utils.getContext().getString(R.string.main_hash_scan_done) + "\n", true);
//Check the hashes
checkSignature("MD5", fileHashesMD5, Signatures.MD5);
@ -86,9 +86,9 @@ class MalwareScanner extends AsyncTask<Set<File>, Object, String> {
fileHashesSHA256.clear();
System.gc();
Utils.amtFilesScanned += filesToScan[0].size();
publishProgress("Scan completed in " + ((SystemClock.elapsedRealtime() - scanTime) / 1000) + " seconds!\n\n\n\n", true);
publishProgress(Utils.getContext().getString(R.string.main_scanning_done, ((SystemClock.elapsedRealtime() - scanTime) / 1000) + "") + "\n\n\n\n", true);
} else {
publishProgress("No database available, not scanning...", true);
publishProgress(Utils.getContext().getString(R.string.main_no_database_available), true);
}
return null;
}
@ -106,9 +106,9 @@ class MalwareScanner extends AsyncTask<Set<File>, Object, String> {
publishProgress(result + " in " + file.getValue().toString().replaceAll(Environment.getExternalStorageDirectory().toString(), "~"), false);
}
}
publishProgress("Checked all " + hashType + " hashes against signature databases\n", true);
publishProgress(Utils.getContext().getString(R.string.main_hash_scan_done, hashType) + "\n", true);
} else {
publishProgress("No " + hashType + " signatures available\n", true);
publishProgress(Utils.getContext().getString(R.string.main_no_hashes_available, hashType) + "\n", true);
}
}

View file

@ -114,7 +114,7 @@ public class MalwareScannerService extends Service {
}
malwareMonitors.clear();
System.gc();
//Toast.makeText(this, "Hypatia: Realtime Scanning Stopped", Toast.LENGTH_SHORT).show();
//Toast.makeText(this, "Hypatia: Realtime Scanning Stopped", Toast.LENGTH_SHORT).show(); //TODO: Move to strings.xml
}
private void setForeground() {
@ -134,7 +134,7 @@ public class MalwareScannerService extends Service {
}
private void updateForegroundNotification() {
foregroundNotification.setSubText(Utils.amtFilesScanned + " files scanned");
foregroundNotification.setSubText(Utils.amtFilesScanned + " files scanned"); //TODO: Move to strings.xml
notificationManager.notify(-1, foregroundNotification.build());
}

View file

@ -44,6 +44,10 @@ public class Utils {
Utils.context = context;
}
public static Context getContext() {
return context;
}
public static SharedPreferences getPrefs(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context);
}

View file

@ -0,0 +1,69 @@
<resources>
<string name="app_name">Hypatia V3</string>
<!-- START MainActivity -->
<string name="title_scanner">Scanner</string>
<string name="title_log">Verlauf</string>
<string name="title_databases">Datenbanken</string>
<string name="title_settings">Einstellungen</string>
<string name="main_database_updating">Update der %s Datenbank...</string>
<string name="main_database_downloading">Download von %s</string>
<string name="main_database_download_success">Erfolgreich heruntergeladen</string>
<string name="main_database_download_error">Datei wurde nicht heruntergeladen. Fehlercode %s</string>
<string name="main_no_database_available">Keine Datenbank verfügbar. Scan wird abgebrochen...</string>
<string name="main_database_not_changed">Datei wurd nicht geändert</string>
<string name="main_database_download_error_logcat">Download ist fehlgeschlagen. Für weitere Details bitte in logcat nachsehen</string>
<string name="main_starting_scan">Scan startet...</string>
<string name="main_files_pending_scan">%s Dateien, die zur Überprüfung vorgesehen sind</string>
<string name="main_database_loaded">Datenbank mit %s Signaturen geladen</string>
<string name="main_hashing_files">Generiere Hashes für Dateien...</string>
<string name="main_hashing_done">Hashes für alle Dateien generiert</string>
<string name="main_hash_scan_done">Alle %s Hashes wurden mit den Signatur-Datenbanken abgeglichen</string>
<string name="main_no_hashes_available">Keine %s Hash-Signaturen verfügbar</string>
<string name="main_scanning_done">Scan nach %s Sekunden abgeschlossen!</string>
<!-- END MainActivity -->
<!-- START NOTIFICATIONS -->
<string name="notif_scanner_realtime">Malware-Erkennung</string>
<string name="notif_scanner_realtime_channel">Dient zur Warnung in Echtzeit wenn Malware erkannt wird</string>
<string name="notif_scanner_realtime_context">Bekannte Malware wird in Echtzeit erkannt</string>
<!-- END NOTIFICATIONS -->
<!-- START TOASTS -->
<string name="toast_orbot_unavailable">Für dieses Feature wird Orbot benöntigt</string>
<!-- END TOASTS -->
<!-- START SettingsFragment -->
<string name="settings_category_scanner_realtime">Echtzeit-Scanner</string>
<string name="settings_pref_scanner_realtime_enabled">Echtzeit-Scannen</string>
<string name="settings_pref_scanner_realtime_enabled_summary">Überwachung auf Bedrohungen in Echtzeit mit den folgenden Einstellungen</string>
<string name="settings_pref_scanner_realtime_path_apps">Apps scannen</string>
<string name="settings_pref_scanner_realtime_path_apps_summary">Apps während der Installation scannen</string>
<string name="settings_pref_scanner_realtime_path_internal">Internen Speicher überwachen</string>
<string name="settings_pref_scanner_realtime_path_internal_summary">Rekursive Überwachung des internen Speichers</string>
<string name="settings_pref_scanner_realtime_path_external">Externen Speicher überwachen</string>
<string name="settings_pref_scanner_realtime_path_external_summary">Rekursive Überwachung des externen Speichers</string>
<string name="settings_pref_scanner_realtime_path_system">System überwachen</string>
<string name="settings_pref_scanner_realtime_path_system_summary">Warnung bei Änderungen an /system</string>
<string name="settings_category_optimizations">Optimierungen</string>
<string name="settings_pref_optimizations_scanner_max_size">Maximale Datei-Größe</string>
<string name="settings_pref_optimizations_scanner_max_size_summary">Dateien, die größer als diese Angabe in Megabyte sind, werden nicht gescannt</string>
<string name="settings_pref_optimizations_database_hash_length">Maximale Hash-Länge</string>
<string name="settings_pref_optimizations_database_hash_length_summary">Geringerer Belegung des Arbeitsspeicher bei Gefahr von vermehrten Fehlalarmen (false positives)</string>
<string name="settings_pref_optimizations_database_trim">Variantennamen abkürzen</string>
<string name="settings_pref_optimizations_database_trim_summary">Geringere Belastung des Arbeitsspeichers auf Kosten von detaillierten Erkennungsmeldungen</string>
<string name="settings_category_network">Netzwerk</string>
<string name="settings_pref_network_tor">Onion-Routing</string>
<string name="settings_pref_network_tor_summary">Alle Netzwerk-Requests über Tor leiten</string>
<string name="settings_category_other">Sonstiges</string>
<string name="settings_pref_other_third_party">Dritt-Anbieter-Zugriff erlauben</string>
<string name="settings_pref_other_third_party_summary">Anderen Apps erlauben das Scannen von Objekten aufzurufen</string>
<string name="settings_pref_network_database_repo">Datenbank-Repository</string>
<string name="settings_pref_network_database_repo_summary">API von der die Datenbanken bezogen werden sollen</string>
<!-- END SettingsFragment -->
</resources>

View file

@ -6,6 +6,23 @@
<string name="title_log">History</string>
<string name="title_databases">Databases</string>
<string name="title_settings">Settings</string>
<string name="main_database_updating">Updating %s databases...</string>
<string name="main_database_downloading">Downloading %s</string>
<string name="main_database_download_success">Successfully downloaded</string>
<string name="main_database_download_error">File not downloaded, response code %s</string>
<string name="main_no_database_available">No database available, not scanning...</string>
<string name="main_database_not_changed">File not changed</string>
<string name="main_database_download_error_logcat">Failed to download, check logcat</string>
<string name="main_starting_scan">Starting scan...</string>
<string name="main_files_pending_scan">%s files pending scan</string>
<string name="main_database_loaded">Loaded database with %s signatures</string>
<string name="main_hashing_files">Hashing files...</string>
<string name="main_hashing_done">Calculated hashes for all files</string>
<string name="main_hash_scan_done">Checked all %s hashes against signature databases</string>
<string name="main_no_hashes_available">No %s hashes signatures available</string>
<string name="main_scanning_done">Scan completed in %s seconds!</string>
<!-- END MainActivity -->
<!-- START NOTIFICATIONS -->