Compare commits

..

9 Commits

10 changed files with 380 additions and 365 deletions

View File

@ -9,6 +9,8 @@ import android.system.Os
import android.util.Log import android.util.Log
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import sushi.hardcore.droidfs.filesystems.EncryptedVolume import sushi.hardcore.droidfs.filesystems.EncryptedVolume
import sushi.hardcore.droidfs.util.Compat import sushi.hardcore.droidfs.util.Compat
@ -86,7 +88,9 @@ class EncryptedFileProvider(context: Context) {
} }
override fun free() { override fun free() {
Wiper.wipe(file) GlobalScope.launch(Dispatchers.IO) {
Wiper.wipe(file)
}
} }
} }
@ -160,8 +164,10 @@ class EncryptedFileProvider(context: Context) {
exportedFile: ExportedFile, exportedFile: ExportedFile,
encryptedVolume: EncryptedVolume, encryptedVolume: EncryptedVolume,
): Boolean { ): Boolean {
val fd = exportedFile.open(ParcelFileDescriptor.MODE_WRITE_ONLY, false).fileDescriptor val pfd = exportedFile.open(ParcelFileDescriptor.MODE_WRITE_ONLY, false)
return encryptedVolume.exportFile(exportedFile.path, FileOutputStream(fd)) return encryptedVolume.exportFile(exportedFile.path, FileOutputStream(pfd.fileDescriptor)).also {
pfd.close()
}
} }
enum class Error { enum class Error {

View File

@ -4,8 +4,8 @@ import java.io.File
object FileTypes { object FileTypes {
private val FILE_EXTENSIONS = mapOf( private val FILE_EXTENSIONS = mapOf(
Pair("image", listOf("png", "jpg", "jpeg", "gif", "webp", "bmp", "heic")), Pair("image", listOf("png", "jpg", "jpeg", "gif", "avif", "webp", "bmp", "heic")),
Pair("video", listOf("mp4", "webm", "mkv", "mov")), Pair("video", listOf("mp4", "webm", "mkv", "mov", "m4v")),
Pair("audio", listOf("mp3", "ogg", "m4a", "wav", "flac", "opus")), Pair("audio", listOf("mp3", "ogg", "m4a", "wav", "flac", "opus")),
Pair("pdf", listOf("pdf")), Pair("pdf", listOf("pdf")),
Pair("text", listOf( Pair("text", listOf(

View File

@ -328,8 +328,8 @@ class ExplorerActivity : BaseExplorerActivity() {
activityScope.launch { activityScope.launch {
onTaskResult( onTaskResult(
fileOperationService.moveElements(volumeId, toMove, toClean), fileOperationService.moveElements(volumeId, toMove, toClean),
R.string.move_success,
R.string.move_failed, R.string.move_failed,
R.string.move_success,
) )
setCurrentPath(currentDirectoryPath) setCurrentPath(currentDirectoryPath)
} }

View File

@ -104,7 +104,9 @@ class FileOperationService : Service() {
activity.lifecycle.addObserver(object : DefaultLifecycleObserver { activity.lifecycle.addObserver(object : DefaultLifecycleObserver {
override fun onDestroy(owner: LifecycleOwner) { override fun onDestroy(owner: LifecycleOwner) {
activity.unbindService(serviceConnection) activity.unbindService(serviceConnection)
service.notificationPermissionHelpers.removeLast() // Could have been more efficient with a LinkedHashMap but the JDK implementation doesn't allow
// to access the latest element in O(1) unless using reflection
service.notificationPermissionHelpers.removeAll { it.activity == activity }
} }
}) })
activity.bindService( activity.bindService(

View File

@ -14,6 +14,8 @@ import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import sushi.hardcore.droidfs.BaseActivity import sushi.hardcore.droidfs.BaseActivity
import sushi.hardcore.droidfs.FileTypes import sushi.hardcore.droidfs.FileTypes
@ -21,7 +23,6 @@ import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.VolumeManagerApp import sushi.hardcore.droidfs.VolumeManagerApp
import sushi.hardcore.droidfs.explorers.ExplorerElement import sushi.hardcore.droidfs.explorers.ExplorerElement
import sushi.hardcore.droidfs.filesystems.EncryptedVolume import sushi.hardcore.droidfs.filesystems.EncryptedVolume
import sushi.hardcore.droidfs.util.IntentUtils
import sushi.hardcore.droidfs.util.PathUtils import sushi.hardcore.droidfs.util.PathUtils
import sushi.hardcore.droidfs.util.finishOnClose import sushi.hardcore.droidfs.util.finishOnClose
import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
@ -32,9 +33,8 @@ abstract class FileViewerActivity: BaseActivity() {
private lateinit var originalParentPath: String private lateinit var originalParentPath: String
private lateinit var windowInsetsController: WindowInsetsControllerCompat private lateinit var windowInsetsController: WindowInsetsControllerCompat
private var windowTypeMask = 0 private var windowTypeMask = 0
private var foldersFirst = true protected val playlist = mutableListOf<ExplorerElement>()
private var wasMapped = false private val playlistMutex = Mutex()
protected val mappedPlaylist = mutableListOf<ExplorerElement>()
protected var currentPlaylistIndex = -1 protected var currentPlaylistIndex = -1
private val isLegacyFullscreen = Build.VERSION.SDK_INT <= Build.VERSION_CODES.R private val isLegacyFullscreen = Build.VERSION.SDK_INT <= Build.VERSION_CODES.R
@ -46,7 +46,6 @@ abstract class FileViewerActivity: BaseActivity() {
intent.getIntExtra("volumeId", -1) intent.getIntExtra("volumeId", -1)
)!! )!!
finishOnClose(encryptedVolume) finishOnClose(encryptedVolume)
foldersFirst = sharedPrefs.getBoolean("folders_first", true)
windowInsetsController = WindowInsetsControllerCompat(window, window.decorView) windowInsetsController = WindowInsetsControllerCompat(window, window.decorView)
windowInsetsController.addOnControllableInsetsChangedListener { _, typeMask -> windowInsetsController.addOnControllableInsetsChangedListener { _, typeMask ->
windowTypeMask = typeMask windowTypeMask = typeMask
@ -131,48 +130,57 @@ abstract class FileViewerActivity: BaseActivity() {
} }
} }
protected fun createPlaylist() { protected suspend fun createPlaylist() {
if (!wasMapped){ playlistMutex.withLock {
encryptedVolume.recursiveMapFiles(originalParentPath)?.let { elements -> if (currentPlaylistIndex != -1) {
for (e in elements) { // playlist already initialized
if (e.isRegularFile) { return
if (FileTypes.isExtensionType(getFileType(), e.name) || filePath == e.fullPath) {
mappedPlaylist.add(e)
}
}
}
} }
val sortOrder = intent.getStringExtra("sortOrder") ?: "name" withContext(Dispatchers.IO) {
ExplorerElement.sortBy(sortOrder, foldersFirst, mappedPlaylist) if (sharedPrefs.getBoolean("map_folders", true)) {
//find current index encryptedVolume.recursiveMapFiles(originalParentPath)
for ((i, e) in mappedPlaylist.withIndex()){ } else {
if (filePath == e.fullPath){ encryptedVolume.readDir(originalParentPath)
currentPlaylistIndex = i }?.filterTo(playlist) { e ->
break e.isRegularFile && (FileTypes.isExtensionType(getFileType(), e.name) || filePath == e.fullPath)
} }
val sortOrder = intent.getStringExtra("sortOrder") ?: "name"
val foldersFirst = sharedPrefs.getBoolean("folders_first", true)
ExplorerElement.sortBy(sortOrder, foldersFirst, playlist)
currentPlaylistIndex = playlist.indexOfFirst { it.fullPath == filePath }
} }
wasMapped = true
} }
} }
protected fun playlistNext(forward: Boolean) { private fun updateCurrentItem() {
filePath = playlist[currentPlaylistIndex].fullPath
}
protected suspend fun playlistNext(forward: Boolean) {
createPlaylist() createPlaylist()
currentPlaylistIndex = if (forward) { currentPlaylistIndex = if (forward) {
(currentPlaylistIndex+1)%mappedPlaylist.size (currentPlaylistIndex + 1).mod(playlist.size)
} else { } else {
var x = (currentPlaylistIndex-1)%mappedPlaylist.size (currentPlaylistIndex - 1).mod(playlist.size)
if (x < 0) {
x += mappedPlaylist.size
}
x
} }
filePath = mappedPlaylist[currentPlaylistIndex].fullPath updateCurrentItem()
} }
protected fun refreshPlaylist() { protected suspend fun deleteCurrentFile(): Boolean {
mappedPlaylist.clear() createPlaylist() // ensure we know the current position in the playlist
wasMapped = false return if (encryptedVolume.deleteFile(filePath)) {
createPlaylist() playlist.removeAt(currentPlaylistIndex)
if (playlist.size != 0) {
if (currentPlaylistIndex == playlist.size) {
// deleted the last element of the playlist, go back to the first
currentPlaylistIndex = 0
}
updateCurrentItem()
}
true
} else {
false
}
} }
protected fun goBackToExplorer() { protected fun goBackToExplorer() {

View File

@ -12,10 +12,12 @@ import android.widget.Toast
import androidx.activity.addCallback import androidx.activity.addCallback
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.lifecycleScope
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.bumptech.glide.RequestBuilder import com.bumptech.glide.RequestBuilder
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation import com.bumptech.glide.load.resource.bitmap.BitmapTransformation
import kotlinx.coroutines.launch
import sushi.hardcore.droidfs.Constants import sushi.hardcore.droidfs.Constants
import sushi.hardcore.droidfs.R import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.databinding.ActivityImageViewerBinding import sushi.hardcore.droidfs.databinding.ActivityImageViewerBinding
@ -105,22 +107,21 @@ class ImageViewer: FileViewerActivity() {
.keepFullScreen() .keepFullScreen()
.setTitle(R.string.warning) .setTitle(R.string.warning)
.setPositiveButton(R.string.ok) { _, _ -> .setPositiveButton(R.string.ok) { _, _ ->
createPlaylist() //be sure the playlist is created before deleting if there is only one image lifecycleScope.launch {
if (encryptedVolume.deleteFile(filePath)) { if (deleteCurrentFile()) {
playlistNext(true) if (playlist.size == 0) { // no more image left
refreshPlaylist() goBackToExplorer()
if (mappedPlaylist.size == 0) { //deleted all images of the playlist } else {
goBackToExplorer() loadImage(true)
}
} else { } else {
loadImage(true) CustomAlertDialogBuilder(this@ImageViewer, theme)
.keepFullScreen()
.setTitle(R.string.error)
.setMessage(getString(R.string.remove_failed, fileName))
.setPositiveButton(R.string.ok, null)
.show()
} }
} else {
CustomAlertDialogBuilder(this, theme)
.keepFullScreen()
.setTitle(R.string.error)
.setMessage(getString(R.string.remove_failed, fileName))
.setPositiveButton(R.string.ok, null)
.show()
} }
} }
.setNegativeButton(R.string.cancel, null) .setNegativeButton(R.string.cancel, null)
@ -198,14 +199,16 @@ class ImageViewer: FileViewerActivity() {
rotateImage() rotateImage()
} }
private fun swipeImage(deltaX: Float, slideshowSwipe: Boolean = false){ private fun swipeImage(deltaX: Float, slideshowSwipe: Boolean = false) {
playlistNext(deltaX < 0) lifecycleScope.launch {
loadImage(true) playlistNext(deltaX < 0)
if (slideshowActive) { loadImage(true)
if (!slideshowSwipe) { //reset slideshow delay if user swipes if (slideshowActive) {
handler.removeCallbacks(slideshowNext) if (!slideshowSwipe) { // reset slideshow delay if user swipes
handler.removeCallbacks(slideshowNext)
}
handler.postDelayed(slideshowNext, Constants.SLIDESHOW_DELAY)
} }
handler.postDelayed(slideshowNext, Constants.SLIDESHOW_DELAY)
} }
} }

View File

@ -2,6 +2,7 @@ package sushi.hardcore.droidfs.file_viewers
import android.view.WindowManager import android.view.WindowManager
import androidx.annotation.OptIn import androidx.annotation.OptIn
import androidx.lifecycle.lifecycleScope
import androidx.media3.common.MediaItem import androidx.media3.common.MediaItem
import androidx.media3.common.PlaybackException import androidx.media3.common.PlaybackException
import androidx.media3.common.Player import androidx.media3.common.Player
@ -11,6 +12,7 @@ import androidx.media3.exoplayer.ExoPlayer
import androidx.media3.exoplayer.source.MediaSource import androidx.media3.exoplayer.source.MediaSource
import androidx.media3.exoplayer.source.ProgressiveMediaSource import androidx.media3.exoplayer.source.ProgressiveMediaSource
import androidx.media3.extractor.DefaultExtractorsFactory import androidx.media3.extractor.DefaultExtractorsFactory
import kotlinx.coroutines.launch
import sushi.hardcore.droidfs.Constants import sushi.hardcore.droidfs.Constants
import sushi.hardcore.droidfs.R import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
@ -39,12 +41,16 @@ abstract class MediaPlayer: FileViewerActivity() {
private fun initializePlayer(){ private fun initializePlayer(){
player = ExoPlayer.Builder(this).setSeekForwardIncrementMs(5000).build() player = ExoPlayer.Builder(this).setSeekForwardIncrementMs(5000).build()
bindPlayer(player) bindPlayer(player)
createPlaylist() player.addMediaSource(createMediaSource(filePath))
for (e in mappedPlaylist) { lifecycleScope.launch {
player.addMediaSource(createMediaSource(e.fullPath)) createPlaylist()
playlist.forEachIndexed { index, e ->
if (index != currentPlaylistIndex) {
player.addMediaSource(index, createMediaSource(e.fullPath))
}
}
} }
player.repeatMode = Player.REPEAT_MODE_ALL player.repeatMode = Player.REPEAT_MODE_ALL
player.seekToDefaultPosition(currentPlaylistIndex)
player.playWhenReady = true player.playWhenReady = true
player.addListener(object : Player.Listener{ player.addListener(object : Player.Listener{
override fun onVideoSizeChanged(videoSize: VideoSize) { override fun onVideoSizeChanged(videoSize: VideoSize) {
@ -67,9 +73,11 @@ abstract class MediaPlayer: FileViewerActivity() {
} }
override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) { override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) {
if (player.repeatMode != Player.REPEAT_MODE_ONE) { if (player.repeatMode != Player.REPEAT_MODE_ONE && currentPlaylistIndex != -1) {
playlistNext(player.currentMediaItemIndex == (currentPlaylistIndex + 1) % mappedPlaylist.size) lifecycleScope.launch {
refreshFileName() playlistNext(player.currentMediaItemIndex == (currentPlaylistIndex + 1) % player.mediaItemCount)
refreshFileName()
}
} }
} }
}) })

View File

@ -28,7 +28,7 @@ object AndroidUtils {
/** /**
* A [Manifest.permission.POST_NOTIFICATIONS] permission helper. * A [Manifest.permission.POST_NOTIFICATIONS] permission helper.
* *
* Must be initialized before [Activity.onCreate]. * Must be initialized before [Activity.onCreate] finishes.
*/ */
class NotificationPermissionHelper<out A: AppCompatActivity>(val activity: A) { class NotificationPermissionHelper<out A: AppCompatActivity>(val activity: A) {
private var listener: ((Boolean) -> Unit)? = null private var listener: ((Boolean) -> Unit)? = null

View File

@ -196,6 +196,7 @@ Java_sushi_hardcore_droidfs_filesystems_GocryptfsVolume_native_1list_1dir(JNIEnv
jint sessionID, jstring jplain_dir) { jint sessionID, jstring jplain_dir) {
const char* plain_dir = (*env)->GetStringUTFChars(env, jplain_dir, NULL); const char* plain_dir = (*env)->GetStringUTFChars(env, jplain_dir, NULL);
const size_t plain_dir_len = strlen(plain_dir); const size_t plain_dir_len = strlen(plain_dir);
const char append_slash = plain_dir[plain_dir_len-1] != '/';
GoString go_plain_dir = {plain_dir, plain_dir_len}; GoString go_plain_dir = {plain_dir, plain_dir_len};
struct gcf_list_dir_return elements = gcf_list_dir(sessionID, go_plain_dir); struct gcf_list_dir_return elements = gcf_list_dir(sessionID, go_plain_dir);
@ -216,7 +217,7 @@ Java_sushi_hardcore_droidfs_filesystems_GocryptfsVolume_native_1list_1dir(JNIEnv
char* fullPath = malloc(sizeof(char) * (plain_dir_len + nameLen + 2)); char* fullPath = malloc(sizeof(char) * (plain_dir_len + nameLen + 2));
strcpy(fullPath, plain_dir); strcpy(fullPath, plain_dir);
if (plain_dir[-2] != '/') { if (append_slash) {
strcat(fullPath, "/"); strcat(fullPath, "/");
} }
strcat(fullPath, name); strcat(fullPath, name);

View File

@ -1,295 +1,282 @@
<resources> <resources>
<string name="app_name">DroidFS</string> <string name="app_name">DroidFS</string>
<string name="create_volume">צור אמצעי אחסון</string> <string name="create_volume">צור אמצעי אחסון</string>
<string name="open">פתח</string> <string name="open">פתח</string>
<string name="create">צור</string> <string name="create">צור</string>
<string name="change_password">שנה סיסמא</string> <string name="change_password">שנה סיסמא</string>
<string name="password">סיסמא</string> <string name="password">סיסמא</string>
<string name="import_files">ייבוא/להצפין קבצים</string> <string name="import_files">ייבוא/להצפין קבצים</string>
<string name="import_folder">ייבוא/להצפין תיקיות</string> <string name="import_folder">ייבוא/להצפין תיקיות</string>
<string name="discovering_files">סורק קבצים..</string> <string name="discovering_files">סורק קבצים..</string>
<string name="mkdir">צור תיקייה</string> <string name="mkdir">צור תיקייה</string>
<string name="dir_empty">ספריה ריקה</string> <string name="dir_empty">ספריה ריקה</string>
<string name="warning">אזהרה !</string> <string name="warning">אזהרה !</string>
<string name="ask_lock_volume">האם אתה בטוח שברצונך לנעול אמצעי אחסון זה?</string> <string name="ask_lock_volume">האם אתה בטוח שברצונך לנעול אמצעי אחסון זה?</string>
<string name="ok">בסדר</string> <string name="ok">בסדר</string>
<string name="cancel">ביטול</string> <string name="cancel">ביטול</string>
<string name="enter_folder_name">שם תיקייה:</string> <string name="enter_folder_name">שם תיקייה:</string>
<string name="error">שגיאה</string> <string name="error">שגיאה</string>
<string name="error_filename_empty">.נא להזין שם</string> <string name="error_filename_empty">.נא להזין שם</string>
<string name="error_mkdir">יצירת תיקייה נכשלה.</string> <string name="error_mkdir">יצירת תיקייה נכשלה.</string>
<string name="success_import">יובא בהצלחה!</string> <string name="success_import">יובא בהצלחה!</string>
<string name="success_import_msg">הקבצים שנבחרו יובאו בהצלחה.</string> <string name="success_import_msg">הקבצים שנבחרו יובאו בהצלחה.</string>
<string name="import_failed">ייבוא של %s נכשל.</string> <string name="import_failed">ייבוא של %s נכשל.</string>
<string name="export_failed">ייצוא של %s נכשל.</string> <string name="export_failed">ייצוא של %s נכשל.</string>
<string name="success_export">יוצא בהצלחה!</string> <string name="success_export">יוצא בהצלחה!</string>
<string name="remove_failed">המחיקה של %s נכשלה.</string> <string name="remove_failed">המחיקה של %s נכשלה.</string>
<string name="passwords_mismatch">סיסמאות לא תואמות</string> <string name="passwords_mismatch">סיסמאות לא תואמות</string>
<string name="dir_not_empty">הספריה שנבחרה אינה ריקה</string> <string name="dir_not_empty">הספריה שנבחרה אינה ריקה</string>
<string name="create_volume_failed">יצירת אמצעי אחסון נכשלה</string> <string name="create_volume_failed">יצירת אמצעי אחסון נכשלה</string>
<string name="open_volume_failed">פתיחה נכשלה</string> <string name="open_volume_failed">פתיחה נכשלה</string>
<string name="share_chooser">שתף קובץ</string> <string name="share_chooser">שתף קובץ</string>
<string name="storage_perm_denied">הרשאת אחסון נדחתה</string> <string name="storage_perm_denied">הרשאת אחסון נדחתה</string>
<string name="storage_perm_denied_msg">DroidFS לא יכול לעבוד ללא הרשאת אחסון.</string> <string name="storage_perm_denied_msg">DroidFS לא יכול לעבוד ללא הרשאת אחסון.</string>
<string name="get_size_failed">אחזור גודל הקובץ נכשל.</string> <string name="get_size_failed">אחזור גודל הקובץ נכשל.</string>
<string name="parent_folder">תיקיית אב</string> <string name="parent_folder">תיקיית אב</string>
<string name="empty_volume_path">אנא הזן נתיב לאמצעי אחסון</string> <string name="empty_volume_path">אנא הזן נתיב לאמצעי אחסון</string>
<string name="empty_volume_name">הזן שם לאמצעי אחסון</string> <string name="empty_volume_name">הזן שם לאמצעי אחסון</string>
<string name="external_open">פתח עם אפליקציה חיצונית</string> <string name="external_open">פתח עם אפליקציה חיצונית</string>
<string name="single_delete_confirm">האם אתה בטוח שברצונך למחוק %s ?</string> <string name="single_delete_confirm">האם אתה בטוח שברצונך למחוק %s ?</string>
<string name="multiple_delete_confirm">האם אתה בטוח שברצנך למחוק פריטים אלה? %s </string> <string name="multiple_delete_confirm">האם אתה בטוח שברצנך למחוק פריטים אלה? %s </string>
<string name="location">מיקום: %s</string> <string name="location">מיקום: %s</string>
<string name="total_size">משקל כולל: %s</string> <string name="total_size">משקל כולל: %s</string>
<string name="import_from_other_volume">ייבא מאמצעי אחסון אחר</string> <string name="import_from_other_volume">ייבא מאמצעי אחסון אחר</string>
<string name="read_file_failed">נכשל לפתוח את הקובץ הזה.</string> <string name="read_file_failed">נכשל לפתוח את הקובץ הזה.</string>
<string name="volume">אמצעי אחסון: %s</string> <string name="volume">אמצעי אחסון: %s</string>
<string name="yes">כן</string> <string name="yes">כן</string>
<string name="no">לא</string> <string name="no">לא</string>
<string name="ask_for_wipe">האם ברצונך למחוק את הקבצים המקוריים?</string> <string name="ask_for_wipe">האם ברצונך למחוק את הקבצים המקוריים?</string>
<string name="wipe_failed">המחיקה נכשלה: %s</string> <string name="wipe_failed">המחיקה נכשלה: %s</string>
<string name="wipe_successful">הקבצים נמחקו בהצלחה!</string> <string name="wipe_successful">הקבצים נמחקו בהצלחה!</string>
<string name="rename">שנה שם</string> <string name="rename">שנה שם</string>
<string name="rename_title">שם חדש:</string> <string name="rename_title">שם חדש:</string>
<string name="rename_failed">שינוי השם נכשל</string> <string name="rename_failed">שינוי השם נכשל</string>
<string name="sort_order">מיין לפי:</string> <string name="sort_order">מיין לפי:</string>
<string name="change_password_failed">הפעולה נכשלה. אנא בדוק את הסיסמה הישנה שלך.</string> <string name="change_password_failed">הפעולה נכשלה. אנא בדוק את הסיסמה הישנה שלך.</string>
<string name="share_menu_label">הצפן עם DroidFS</string> <string name="share_menu_label">הצפן עם DroidFS</string>
<string name="share_intent_parsing_failed">בקשת השיתוף נכשלה</string> <string name="share_intent_parsing_failed">בקשת השיתוף נכשלה</string>
<string name="listdir_null_error_msg">אין אפשרות לגשת לספריה זו</string> <string name="listdir_null_error_msg">אין אפשרות לגשת לספריה זו</string>
<string name="fingerprint_save_checkbox_text">שמור גיבוב של הסיסמא באמצעות טביעת אצבע</string> <string name="fingerprint_save_checkbox_text">שמור גיבוב של הסיסמא באמצעות טביעת אצבע</string>
<string name="fingerprint_instruction">אנא גע בחיישן טביעת האצבע</string> <string name="fingerprint_instruction">אנא גע בחיישן טביעת האצבע</string>
<string name="illegal_block_size_exception">הרחבת גודל בלוק לא חוקית</string> <string name="illegal_block_size_exception">הרחבת גודל בלוק לא חוקית</string>
<string name="illegal_block_size_exception_msg">זה יכול לקרות אם הוספת טביעת אצבע חדשה, איפוס אחסון מגובב יכול לפתור את זה.</string> <string name="illegal_block_size_exception_msg">זה יכול לקרות אם הוספת טביעת אצבע חדשה, איפוס אחסון מגובב יכול לפתור את זה.</string>
<string name="reset_hash_storage">אפס אחסון מגובב</string> <string name="reset_hash_storage">אפס אחסון מגובב</string>
<string name="MAC_verification_failed">חתימה/אימות מאק נכשל. חנות המפתחות של אנדרואיד או הקוד המגובב שנשמר השתנו. איפוס אחסון מגובב יכול לפתור את זה.</string> <string name="MAC_verification_failed">חתימה/אימות מאק נכשל. חנות המפתחות של אנדרואיד או הקוד המגובב שנשמר השתנו. איפוס אחסון מגובב יכול לפתור את זה.</string>
<string name="hash_storage_reset">אפס אחסון מגובב</string> <string name="hash_storage_reset">אפס אחסון מגובב</string>
<string name="encrypt_action_description">מצפין ושומר גיבוב של הסיסמא</string> <string name="encrypt_action_description">מצפין ושומר גיבוב של הסיסמא</string>
<string name="decrypt_action_description">מפענח גיבוב סיסמא.</string> <string name="decrypt_action_description">מפענח גיבוב סיסמא.</string>
<string name="title_activity_settings">DroidFS הגדרות</string> <string name="title_activity_settings">DroidFS הגדרות</string>
<string name="explorer">גלה</string> <string name="explorer">גלה</string>
<string name="settings_title_sort_order">מיון ברירת המחדל</string> <string name="settings_title_sort_order">מיון ברירת המחדל</string>
<string name="usf_decrypt">אפשר ייצוא קבצים/פענוח</string> <string name="usf_decrypt">אפשר ייצוא קבצים/פענוח</string>
<string name="usf_share"> אפשר שיתוף קבצים דרך תפריט השיתוף של אנדרואיד </string> <string name="usf_share"> אפשר שיתוף קבצים דרך תפריט השיתוף של אנדרואיד </string>
<string name="usf_open">אפשר פתיחת קבצים עם יישומים אחרים </string> <string name="usf_open">אפשר פתיחת קבצים עם יישומים אחרים </string>
<string name="usf_screenshot">אפשר צילומי מסך</string> <string name="usf_screenshot">אפשר צילומי מסך</string>
<string name="usf_fingerprint">אפשר שימרת גיבוב של הסיסמא באמצעות טביעת אצבע</string> <string name="usf_fingerprint">אפשר שימרת גיבוב של הסיסמא באמצעות טביעת אצבע</string>
<string name="usf_volume_management">הגדרת אמצעי אחסון</string> <string name="usf_volume_management">הגדרת אמצעי אחסון</string>
<string name="unsafe_features">פיצ'רים לא בטוחים</string> <string name="usf_keep_open">השאר את האמצעי אחסון פתוח כשהאפליקציה רצה ברקע</string>
<string name="manage_unsafe_features">נהל פיצ'רים לא בטוחים</string> <string name="unsafe_features">פיצרים לא בטוחים</string>
<string name="manage_unsafe_features_summary">אפשר/מנע פיצ'רים לא בטוחים</string> <string name="manage_unsafe_features">נהל פיצרים לא בטוחים</string>
<string name="usf_home_warning_msg">DroidFS מנסה להיות מאובטח ככל האפשר,עם זאת אבטחה כרוכה לעיתים קרובת בחוסר נוחות. זה הסיבה ש DroidFS מציע פיצרים לא בטוחים שאתה יכול להפעיל /להשבית בהתאם לצרכים שלך .\n\n אזהרה: פיצרים אלה יכולים להיות לא בטוחים. אל תשתמש בהם אלא אם כן אתה יודע בידיוק מה אתה עושה. מומלץ מאוד לקרוא את הקובץ דוקמנטציה לפני שמפעילים אותם.</string> <string name="manage_unsafe_features_summary">אפשר/מנע פיצרים לא בטוחים</string>
<string name="see_unsafe_features">הראה פיצ'רים לא בטוחים</string> <string name="usf_home_warning_msg">DroidFS מנסה להיות מאובטח ככל האפשר,עם זאת אבטחה כרוכה לעיתים קרובת בחוסר נוחות. זה הסיבה ש DroidFS מציע פיצרים לא בטוחים שאתה יכול להפעיל /להשבית בהתאם לצרכים שלך .\n\n אזהרה: פיצרים אלה יכולים להיות לא בטוחים. אל תשתמש בהם אלא אם כן אתה יודע בידיוק מה אתה עושה. מומלץ מאוד לקרוא את הקובץ דוקמנטציה לפני שמפעילים אותם.</string>
<string name="open_as">פתח כ</string> <string name="see_unsafe_features">הראה פיצרים לא בטוחים</string>
<string name="image">תמונה</string> <string name="open_as">פתח כ</string>
<string name="video">וידאו</string> <string name="image">תמונה</string>
<string name="audio">שמע</string> <string name="video">וידאו</string>
<string name="playing_failed">נכשל לנגן את הקובץ הזה: %s</string> <string name="audio">שמע</string>
<string name="text">טקסט</string> <string name="playing_failed">נכשל לנגן את הקובץ הזה: %s</string>
<string name="save_failed">השמירה נכשלה</string> <string name="text">טקסט</string>
<string name="file_saved">קובץ נשמר!</string> <string name="save_failed">השמירה נכשלה</string>
<string name="ask_save">הקובץ מכיל שינויים שלא נשמרו. האם ברצונך לשמור אותם לפני היציאה?</string> <string name="file_saved">קובץ נשמר!</string>
<string name="save">שמור</string> <string name="ask_save">הקובץ מכיל שינויים שלא נשמרו. האם ברצונך לשמור אותם לפני היציאה?</string>
<string name="discard">אל תשמור</string> <string name="save">שמור</string>
<string name="word_wrap">התחל שורה משמאל לשפה האנגלית</string> <string name="discard">אל תשמור</string>
<string name="outofmemoryerror_msg">OutOfMemoryError: הקובץ גדול מדי כדי לטעון אותו בזכרון.</string> <string name="word_wrap">התחל שורה משמאל לשפה האנגלית</string>
<string name="new_file">צור קובץ חדש</string> <string name="outofmemoryerror_msg">OutOfMemoryError: הקובץ גדול מדי כדי לטעון אותו בזכרון.</string>
<string name="enter_file_name">שם הקובץ:</string> <string name="new_file">צור קובץ חדש</string>
<string name="file_creation_failed">נכשל ליצור קובץ חדש.</string> <string name="enter_file_name">שם הקובץ:</string>
<string name="loading">טוען</string> <string name="file_creation_failed">נכשל ליצור קובץ חדש.</string>
<string name="loading_msg_create">יוצר אמצעי אחסון…</string> <string name="loading">טוען</string>
<string name="loading_msg_change_password">משנה סיסמא…</string> <string name="loading_msg_create">יוצר אמצעי אחסון…</string>
<string name="loading_msg_open">פותח אמצעי אחסון…</string> <string name="loading_msg_change_password">משנה סיסמא…</string>
<string name="loading_msg_export">מייצא קבצים…</string> <string name="loading_msg_open">פותח אמצעי אחסון…</string>
<string name="query_cursor_null_error_msg">לא הצלחתי לגשת לקובץ הזה.</string> <string name="loading_msg_export">מייצא קבצים…</string>
<string name="about">אודות</string> <string name="query_cursor_null_error_msg">לא הצלחתי לגשת לקובץ הזה.</string>
<string name="github">GitHub</string> <string name="about">אודות</string>
<string name="github_summary">מאגר DroidFS ב- GitHub. קוד מקור, תיעוד, מעקב אחר באגים…</string> <string name="github">GitHub</string>
<string name="gitea">Gitea</string> <string name="github_summary">מאגר DroidFS ב- GitHub. קוד מקור, תיעוד, מעקב אחר באגים…</string>
<string name="gitea_summary">מאגר DroidFS בChapril Gitea. שלא כמו GitHub, Gitea היא תוכנה חינמית לחלוטין ומתארחת בעצמה. קוד מקור, תיעוד, מעקב אחר באגים…</string> <string name="gitea">Gitea</string>
<string name="share">שתף</string> <string name="gitea_summary">מאגר DroidFS בChapril Gitea. שלא כמו GitHub, Gitea היא תוכנה חינמית לחלוטין ומתארחת בעצמה. קוד מקור, תיעוד, מעקב אחר באגים…</string>
<string name="decrypt_files">ייצא/פענח</string> <string name="share">שתף</string>
<string name="copy_failed">העתקת %s נכשלה.</string> <string name="decrypt_files">ייצא/פענח</string>
<string name="copy_success">העתקה בוצע בהצלחה.</string> <string name="copy_failed">העתקת %s נכשלה.</string>
<string name="add">הוסף</string> <string name="copy_success">העתקה בוצע בהצלחה.</string>
<string name="camera">מצלמה</string> <string name="add">הוסף</string>
<string name="picture_save_success">התמונה נשמרה ל %s</string> <string name="camera">מצלמה</string>
<string name="picture_save_failed">נכשל לשמור את התמונה הזאת.</string> <string name="picture_save_success">התמונה נשמרה ל %s</string>
<string name="video_save_success">הסרטון נשמר ל %s</string> <string name="picture_save_failed">נכשל לשמור את התמונה הזאת.</string>
<string name="file_overwrite_question">%s כבר קיים, האם ברצונך להחליף אותו?</string> <string name="video_save_success">הסרטון נשמר ל %s</string>
<string name="dir_overwrite_question">%s כבר קיים, האם ברצונך למזג את התוכן שלו ?</string> <string name="file_overwrite_question">%s כבר קיים, האם ברצונך להחליף אותו?</string>
<string name="enter_new_name">הזן שם חדש</string> <string name="dir_overwrite_question">%s כבר קיים, האם ברצונך למזג את התוכן שלו ?</string>
<string name="copy_menu_title">העתק</string> <string name="enter_new_name">הזן שם חדש</string>
<string name="move_failed">העברת %s נכשלה.</string> <string name="copy_menu_title">העתק</string>
<string name="move_success">העברה בוצעה בהצלחה!</string> <string name="move_failed">העברת %s נכשלה.</string>
<string name="enter_timer_duration">הזן את משך זמן הטיימר (בשניות)</string> <string name="move_success">העברה בוצעה בהצלחה!</string>
<string name="path_error">לא הצלחתי לגשת לנתיב הזה.</string> <string name="enter_timer_duration">הזן את משך זמן הטיימר (בשניות)</string>
<string name="create_cant_write_error_msg">לDroidFS אין הרשאת כתיבה במיקום הזה, תנסה מיקום אחר</string> <string name="path_error">לא הצלחתי לגשת לנתיב הזה.</string>
<string name="add_cant_write_warning">ל- DroidFS אין הרשאת כתיבה לנתיב זה. מוסיף אמצעי אחסון עם הרשאת קריאה בלבד.</string> <string name="create_cant_write_error_msg">לDroidFS אין הרשאת כתיבה במיקום הזה, תנסה מיקום אחר</string>
<string name="sdcard_error_header">DroidFS יכול לכתוב רק לכרטיסי SD נשלפים תחת:</string> <string name="add_cant_write_warning">ל- DroidFS אין הרשאת כתיבה לנתיב זה. מוסיף אמצעי אחסון עם הרשאת קריאה בלבד.</string>
<string name="sdcard_error_add_footer">מוסיף אמצעי אחסון עם הרשאת קריאה בלבד.</string> <string name="sdcard_error_header">DroidFS יכול לכתוב רק לכרטיסי SD נשלפים תחת:</string>
<string name="sdcard_error_create_footer">אנא השתמש בספריית משנה של נתיב זה או באחסון פנימי.</string> <string name="sdcard_error_add_footer">מוסיף אמצעי אחסון עם הרשאת קריאה בלבד.</string>
<string name="slideshow_stopped">הצגת השקופיות הופסקה</string> <string name="sdcard_error_create_footer">אנא השתמש בספריית משנה של נתיב זה או באחסון פנימי.</string>
<string name="slideshow_started">התחל מצגת</string> <string name="slideshow_stopped">הצגת השקופיות הופסקה</string>
<string name="ask_save_img_rotated">התמונה סובבה. האם ברצונך לשמור את השינויים הללו ולדרוס את התמונה המקורית?</string> <string name="slideshow_started">התחל מצגת</string>
<string name="image_saved_successfully">השינויים בתמונה נשמרו בהצלחה.</string> <string name="ask_save_img_rotated">התמונה סובבה. האם ברצונך לשמור את השינויים הללו ולדרוס את התמונה המקורית?</string>
<string name="bitmap_compress_failed">דחיסת מפת הסיביות נכשלה.</string> <string name="image_saved_successfully">השינויים בתמונה נשמרו בהצלחה.</string>
<string name="file_write_failed">כתיבת הקובץ נכשלה.</string> <string name="bitmap_compress_failed">דחיסת מפת הסיביות נכשלה.</string>
<string name="error_not_a_volume">אמצעי אחסון מוצפן לא זוהה. אנא בדוק את הנתיב שנבחר.</string> <string name="file_write_failed">כתיבת הקובץ נכשלה.</string>
<string name="version">גרסא</string> <string name="error_not_a_volume">אמצעי אחסון מוצפן לא זוהה. אנא בדוק את הנתיב שנבחר.</string>
<string name="error_cipher_null">שגיאה: הסיסמא ריקה.</string> <string name="version">גרסא</string>
<string name="key_permanently_invalidated_exception">KeyPermanentlyInvalidatedException</string> <string name="error_cipher_null">שגיאה: הסיסמא ריקה.</string>
<string name="key_permanently_invalidated_exception_msg">נראה שהוספת טביעת אצבע חדשה. הגיבוב של סיסמאות שמורות הפך לבלתי שמיש.</string> <string name="key_permanently_invalidated_exception">KeyPermanentlyInvalidatedException</string>
<string name="usf_read_doc">עליך לקרוא אותו בעיון לפני הפעלת כל אחת מהאפשרויות הללו.</string> <string name="key_permanently_invalidated_exception_msg">נראה שהוספת טביעת אצבע חדשה. הגיבוב של סיסמאות שמורות הפך לבלתי שמיש.</string>
<string name="usf_doc">דוקמנטציה של פיצ'רים לא בטוחים</string> <string name="usf_read_doc">עליך לקרוא אותו בעיון לפני הפעלת כל אחת מהאפשרויות הללו.</string>
<string name="error_retrieving_filename">לא ניתן לאחזר את שם הקובץ עבור הקישור: %s</string> <string name="usf_doc">דוקמנטציה של פיצרים לא בטוחים</string>
<string name="hidden_volume">אמצעי אחסון נסתר</string> <string name="error_retrieving_filename">לא ניתן לאחזר את שם הקובץ עבור הקישור: %s</string>
<string name="error_slash_in_name">שם האמצעי אחסון לא יכול להכיל סלאשים</string> <string name="hidden_volume">אמצעי אחסון נסתר</string>
<string name="hidden_volume_warning">אמצעי אחסון נסתרים מאוחסנים באחסון הפנימי של האפליקציה. אפליקציות אחרות לא יכולות לראות את אמצעי האחסון האלה ללא גישת שורש. עם זאת, אם תסיר את ההתקנה של DroidFS או תנקה את נתוני האפליקציה, כל אמצעי האחסון הנסתרים שלך יאבדו. הקפד לבצע גיבויים!</string> <string name="error_slash_in_name">שם האמצעי אחסון לא יכול להכיל סלאשים</string>
<string name="camera_perm_needed">הרשאת מצלמה נדרשת כדי לצלם תמונות</string> <string name="hidden_volume_warning">אמצעי אחסון נסתרים מאוחסנים באחסון הפנימי של האפליקציה. אפליקציות אחרות לא יכולות לראות את אמצעי האחסון האלה ללא גישת שורש. עם זאת, אם תסיר את ההתקנה של DroidFS או תנקה את נתוני האפליקציה, כל אמצעי האחסון הנסתרים שלך יאבדו. הקפד לבצע גיבויים!</string>
<string name="choose_resolution">בחר רזולוציה</string> <string name="camera_perm_needed">הרשאת מצלמה נדרשת כדי לצלם תמונות</string>
<string name="file_operations">פעולות קובץ</string> <string name="choose_resolution">בחר רזולוציה</string>
<string name="file_op_copy_msg">מעתיק קבצים…</string> <string name="file_operations">פעולות קובץ</string>
<string name="file_op_import_msg">מייבא קבצים…</string> <string name="file_op_copy_msg">מעתיק קבצים…</string>
<string name="file_op_export_msg">מייצא קבצים…</string> <string name="file_op_import_msg">מייבא קבצים…</string>
<string name="file_op_move_msg">מעביר קבצים…</string> <string name="file_op_export_msg">מייצא קבצים…</string>
<string name="file_op_wiping_msg">מוחק קבצים…</string> <string name="file_op_move_msg">מעביר קבצים…</string>
<string name="folders_first">תיקיות קודם</string> <string name="file_op_wiping_msg">מוחק קבצים…</string>
<string name="folders_first_summary">הראה תיקיות בתחילת הרשימה</string> <string name="folders_first">תיקיות קודם</string>
<string name="auto_fit_title">סיבוב אוטומטי של מסך נגן מדיה</string> <string name="folders_first_summary">הראה תיקיות בתחילת הרשימה</string>
<string name="auto_fit_summary">סובב אוטומטית את המסך כך שיתאים למידות הווידאו</string> <string name="auto_fit_title">סיבוב אוטומטי של מסך נגן מדיה</string>
<string name="open_tree_failed">לא נמצא סייר קבצים. אנא התקן אחד ונסה שוב.</string> <string name="auto_fit_summary">סובב אוטומטית את המסך כך שיתאים למידות הווידאו</string>
<string name="close_volume">סגור אמצעי אחסון</string> <string name="open_tree_failed">לא נמצא סייר קבצים. אנא התקן אחד ונסה שוב.</string>
<string name="sort_by">מיין לפי</string> <string name="close_volume">סגור אמצעי אחסון</string>
<string name="cut">גזור</string> <string name="sort_by">מיין לפי</string>
<string name="map_folders">מפה תיקיות</string> <string name="cut">גזור</string>
<string name="map_folders_summary">מפה באופן רקורסיבי תיקיות כדי לחשב את הגדלים שלהן (עליך להשבית זאת בעת פתיחת אמצעי אחסון גדולים)</string> <string name="map_folders">מפה תיקיות</string>
<string name="camera_optimization">אופטימיזציה של מצלמה</string> <string name="map_folders_summary">מפה באופן רקורסיבי תיקיות כדי לחשב את הגדלים שלהן (עליך להשבית זאת בעת פתיחת אמצעי אחסון גדולים)</string>
<string name="maximize_quality">איכות מקסימלית</string> <string name="camera_optimization">אופטימיזציה של מצלמה</string>
<string name="minimize_latency">איכות מינימלית</string> <string name="maximize_quality">איכות מקסימלית</string>
<string name="auto">אוטומטי</string> <string name="minimize_latency">איכות מינימלית</string>
<string name="encryption_cipher_label">הצפנת צופן:</string> <string name="auto">אוטומטי</string>
<string name="theme">ערכת נושא</string> <string name="encryption_cipher_label">הצפנת צופן:</string>
<string name="thumbnails">תמונות ממוזערות</string> <string name="theme">ערכת נושא</string>
<string name="thumbnails_summary">הצג תמונות וסרטונים ממוזערים</string> <string name="thumbnails">תמונות ממוזערות</string>
<string name="seek_seconds_forward">+%d שניות</string> <string name="thumbnails_summary">הצג תמונות וסרטונים ממוזערים</string>
<string name="seek_seconds_backward">-%d שניות</string> <string name="seek_seconds_forward">+%d שניות</string>
<string name="add_volume">הוסף אמצעי אחסון</string> <string name="seek_seconds_backward">-%d שניות</string>
<string name="pick_directory">בחר ספרייה</string> <string name="add_volume">הוסף אמצעי אחסון</string>
<string name="volume_alread_saved">אמצעי אחסון כבר נשמר</string> <string name="pick_directory">בחר ספרייה</string>
<string name="open_dialog_title">פותח %s:</string> <string name="volume_alread_saved">אמצעי אחסון כבר נשמר</string>
<string name="remove">הסר</string> <string name="open_dialog_title">פותח %s:</string>
<string name="settings">הגדרות</string> <string name="remove">הסר</string>
<string name="select_all">בחר הכל</string> <string name="settings">הגדרות</string>
<string name="remove_fingerprint">הסר טביעת אצבע</string> <string name="select_all">בחר הכל</string>
<string name="unrecoverable_key_exception_msg">%s. לא מצליח לטעון מפתח הצפנה</string> <string name="remove_fingerprint">הסר טביעת אצבע</string>
<string name="unrecoverable_key_exception">UnrecoverableKeyException</string> <string name="unrecoverable_key_exception_msg">%s. לא מצליח לטעון מפתח הצפנה</string>
<string name="delete_hidden_volume_question">%s מוסתר, האם אתה רק רוצה לשכוח את הנתיב של האמצעי אחסון או גם למחוק את כל התוכן שלו?</string> <string name="unrecoverable_key_exception">UnrecoverableKeyException</string>
<string name="forget_only">שכח בלבד</string> <string name="delete_hidden_volume_question">%s מוסתר, האם אתה רק רוצה לשכוח את הנתיב של האמצעי אחסון או גם למחוק את כל התוכן שלו?</string>
<string name="delete_volume">מחק אמצעי אחסון</string> <string name="forget_only">שכח בלבד</string>
<string name="hidden_volume_description">אחסן את אמצעי האחסון באחסון הפנימי של DroidFS</string> <string name="delete_volume">מחק אמצעי אחסון</string>
<string name="error_is_file">שגיאה: קובץ בשם זה כבר קיים</string> <string name="hidden_volume_description">אחסן את אמצעי האחסון באחסון הפנימי של DroidFS</string>
<string name="volume_path_label">הזן נתיב לאמצעי אחסון:</string> <string name="error_is_file">שגיאה: קובץ בשם זה כבר קיים</string>
<string name="volume_name_label">הזן שם לאמצעי אחסון:</string> <string name="volume_path_label">הזן נתיב לאמצעי אחסון:</string>
<string name="volume_path_hint">נתיב אמצעי אחסון</string> <string name="volume_name_label">הזן שם לאמצעי אחסון:</string>
<string name="volume_name_hint">שם אמצעי אחסון</string> <string name="volume_path_hint">נתיב אמצעי אחסון</string>
<string name="password_label">הזן את הסיסמא של האמצעי אחסון:</string> <string name="volume_name_hint">שם אמצעי אחסון</string>
<string name="password_confirmation_label">חזור שנית על הסיסמא:</string> <string name="password_label">הזן את הסיסמא של האמצעי אחסון:</string>
<string name="password_confirmation_hint">אישור סיסמא</string> <string name="password_confirmation_label">חזור שנית על הסיסמא:</string>
<string name="password_hash_saved">הגיבוב של הסיסמא נשמר</string> <string name="password_confirmation_hint">אישור סיסמא</string>
<string name="no_volumes_text">אין אמצעי אחסון שמורים, הוסף ע\"י לחציה על הסימן +</string> <string name="password_hash_saved">הגיבוב של הסיסמא נשמר</string>
<string name="fingerprint_error_msg">לא ניתן להשתמש באימות טביעת אצבע: %s.</string> <string name="no_volumes_text">אין אמצעי אחסון שמורים, הוסף ע"י לחציה על הסימן +</string>
<string name="keyguard_not_secure">מגן מקשים לא מאובטח</string> <string name="fingerprint_error_msg">לא ניתן להשתמש באימות טביעת אצבע: %s.</string>
<string name="no_hardware">לא נמצאה חומרה מתאימה</string> <string name="keyguard_not_secure">מגן מקשים לא מאובטח</string>
<string name="hardware_unavailable">החומרה אינה זמינה</string> <string name="no_hardware">לא נמצאה חומרה מתאימה</string>
<string name="no_fingerprint">אין טביעת אצבע שמורה</string> <string name="hardware_unavailable">החומרה אינה זמינה</string>
<string name="unknown_error">שגיאה לא ידועה</string> <string name="no_fingerprint">אין טביעת אצבע שמורה</string>
<string name="biometric_error">שגיאה ביומטרית: %s</string> <string name="unknown_error">שגיאה לא ידועה</string>
<string name="apply_to_all">החל את הבחירה הזו על כל אמצעי האחסון הנסתרים</string> <string name="biometric_error">שגיאה ביומטרית: %s</string>
<string name="select_volume">בחר אמצעי אחסון</string> <string name="apply_to_all">החל את הבחירה הזו על כל אמצעי האחסון הנסתרים</string>
<string name="current_password_label">הזן את סיסמאת אמצעי אחסון הנוכחי:</string> <string name="select_volume">בחר אמצעי אחסון</string>
<string name="current_password_hint">סיסמא נוכחית</string> <string name="current_password_label">הזן את סיסמאת אמצעי אחסון הנוכחי:</string>
<string name="new_password_label">הזן את הסיסמא החדשה לאמצעי אחסון:</string> <string name="current_password_hint">סיסמא נוכחית</string>
<string name="new_password_hint">סיסמא חדשה</string> <string name="new_password_label">הזן את הסיסמא החדשה לאמצעי אחסון:</string>
<string name="new_password_confirmation_label">חזור שנית על הסיסמא החדשה:</string> <string name="new_password_hint">סיסמא חדשה</string>
<string name="error_marshmallow_required">הפיצ'ר הזה זמין רק למשתמשי אנדרואיד 6 (מרשמלו) ומעלה</string> <string name="new_password_confirmation_label">חזור שנית על הסיסמא החדשה:</string>
<string name="copy_hidden_volume">העתק לאחסון משותף</string> <string name="error_marshmallow_required">הפיצר הזה זמין רק למשתמשי אנדרואיד 6 (מרשמלו) ומעלה</string>
<string name="copy_external_volume">צור עותק נסתר</string> <string name="copy_hidden_volume">העתק לאחסון משותף</string>
<string name="copy_volume_notification">מעתיק אמצעי אחסון…</string> <string name="copy_external_volume">צור עותק נסתר</string>
<string name="hidden_volume_already_exists">אמצעי אחסון נסתר עם אותו שם כבר קיים.</string> <string name="copy_volume_notification">מעתיק אמצעי אחסון…</string>
<string name="pdf_document">מסמך PDF</string> <string name="hidden_volume_already_exists">אמצעי אחסון נסתר עם אותו שם כבר קיים.</string>
<string name="thumbnail_max_size">גודל מקסימלי עבור תמונות ממוזערות</string> <string name="pdf_document">מסמך PDF</string>
<string name="thumbnail_max_size_summary">גודל קובץ מקסימלי לטעינת תמונה ממוזערת. ערך נוכחי: %s</string> <string name="thumbnail_max_size">גודל מקסימלי עבור תמונות ממוזערות</string>
<string name="size_hint">גודל (בקילו בייט)</string> <string name="thumbnail_max_size_summary">גודל קובץ מקסימלי לטעינת תמונה ממוזערת. ערך נוכחי: %s</string>
<string name="invalid_number">מספר לא תקין</string> <string name="size_hint">גודל (בקילו בייט)</string>
<string name="new_volume_name">שם אמצעי אחסון חדש:</string> <string name="invalid_number">מספר לא תקין</string>
<string name="volume_rename_failed">שינוי שם אמצעי אחסון נכשל</string> <string name="new_volume_name">שם אמצעי אחסון חדש:</string>
<string name="switch_display_layout">החלף פריסת תצוגה</string> <string name="volume_rename_failed">שינוי שם אמצעי אחסון נכשל</string>
<string name="one_file">קובץ 1</string> <string name="switch_display_layout">החלף פריסת תצוגה</string>
<string name="multiple_files">%d קבצים</string> <string name="one_file">קובץ 1</string>
<string name="one_folder">1 תיקייה</string> <string name="multiple_files">%d קבצים</string>
<string name="multiple_folders">%d תיקיות</string> <string name="one_folder">1 תיקייה</string>
<string name="default_open">פתח אמצעי אחסון זה בעת הפעלת היישום</string> <string name="multiple_folders">%d תיקיות</string>
<string name="remove_default_open">אל תפתח כברירת מחדל</string> <string name="default_open">פתח אמצעי אחסון זה בעת הפעלת היישום</string>
<string name="elements_selected" formatted="false">%d/%d נבחרו</string> <string name="remove_default_open">אל תפתח כברירת מחדל</string>
<string name="pin_passwords_title">פריסת מקלדת מספרים</string> <string name="elements_selected">%d/%d נבחרו</string>
<string name="pin_passwords_summary">שימוש בפריסת מקלדת מספרים בעת הזנת סיסמאות אמצעי אחסון</string> <string name="pin_passwords_title">פריסת מקלדת מספרים</string>
<string name="volume_type_label">סוג אמצעי אחסון:</string> <string name="pin_passwords_summary">שימוש בפריסת מקלדת מספרים בעת הזנת סיסמאות אמצעי אחסון</string>
<string name="gocryptfs">Gocryptfs</string> <string name="volume_type_label">סוג אמצעי אחסון:</string>
<string name="cryfs">CryFS</string> <string name="gocryptfs">Gocryptfs</string>
<string name="gocryptfs_disabled">תמיכת Gocryptfs הושבתה</string> <string name="cryfs">CryFS</string>
<string name="cryfs_disabled">תמיכת CryFS הושבתה</string> <string name="gocryptfs_disabled">תמיכת Gocryptfs הושבתה</string>
<string name="file_op_delete_msg">מוחק קבצים…</string> <string name="cryfs_disabled">תמיכת CryFS הושבתה</string>
<string name="volume_type">(%s)</string> <string name="file_op_delete_msg">מוחק קבצים…</string>
<string name="volume_type_read_only">(%s, קריאה בלבד)</string> <string name="volume_type">(%s)</string>
<string name="volume_type_inaccessible">(%s, לא נגיש)</string> <string name="volume_type_read_only">(%s, קריאה בלבד)</string>
<string name="io_error">שגיאת קלט/פלט.</string> <string name="volume_type_inaccessible">(%s, לא נגיש)</string>
<string name="use_fingerprint">השתמש בטביעת אצבע במקום בסיסמה הנוכחית</string> <string name="io_error">שגיאת קלט/פלט.</string>
<string name="remember_volume">זכור אמצעי אחסון</string> <string name="use_fingerprint">השתמש בטביעת אצבע במקום בסיסמה הנוכחית</string>
<string name="open_volume">פתח אמצעי אחסון</string> <string name="remember_volume">זכור אמצעי אחסון</string>
<string name="choose_existing_volume">אנא בחר אמצעי אחסון קיים</string> <string name="open_volume">פתח אמצעי אחסון</string>
<string name="volume_unlocked">אמצעי אחסון פתוח</string> <string name="choose_existing_volume">אנא בחר אמצעי אחסון קיים</string>
<string name="lock_volume">נעל אמצעי אחסון</string> <string name="volume_unlocked">אמצעי אחסון פתוח</string>
<string name="lock">נעל</string> <string name="lock_volume">נעל אמצעי אחסון</string>
<string name="ux">חוויית משתמש</string> <string name="lock">נעל</string>
<string name="theme_color">צבע ערכת נושא</string> <string name="ux">חוויית משתמש</string>
<string name="theme_color_summary">שנה את צבע הערכת נושא של היישום</string> <string name="theme_color">צבע ערכת נושא</string>
<string name="black_theme">שחור</string> <string name="theme_color_summary">שנה את צבע הערכת נושא של היישום</string>
<string name="password_fallback">חזרה לסיסמא</string> <string name="black_theme">שחור</string>
<string name="password_fallback_summary">בקש סיסמה כאשר אימות טביעת האצבע מבוטל</string> <string name="password_fallback">חזרה לסיסמא</string>
<string name="unknown_error_code">קוד שגיאה לא ידוע: %d</string> <string name="password_fallback_summary">בקש סיסמה כאשר אימות טביעת האצבע מבוטל</string>
<string name="config_load_error">לא ניתן לטעון את קובץ התצורה. ודא שיש גישה לאמצעי אחסון.</string> <string name="unknown_error_code">קוד שגיאה לא ידוע: %d</string>
<string name="wrong_password">לא ניתן לפענח את קובץ התצורה. אנא בדוק את הסיסמה שלך.</string> <string name="config_load_error">לא ניתן לטעון את קובץ התצורה. ודא שיש גישה לאמצעי אחסון.</string>
<string name="filesystem_id_changed">מזהה מערכת הקבצים בקובץ התצורה שונה מהפעם האחרונה שפתחנו אמצעי אחסון זה. פירוש הדבר יכול להיות מפני שתוקף החליף את מערכת הקבצים במערכת אחרת.</string> <string name="wrong_password">לא ניתן לפענח את קובץ התצורה. אנא בדוק את הסיסמה שלך.</string>
<string name="inaccessible_base_dir">אמצעי האחסון לא קיים או שאינו נגיש.</string> <string name="filesystem_id_changed">מזהה מערכת הקבצים בקובץ התצורה שונה מהפעם האחרונה שפתחנו אמצעי אחסון זה. פירוש הדבר יכול להיות מפני שתוקף החליף את מערכת הקבצים במערכת אחרת.</string>
<string name="task_failed">המשימה נכשלה: %s</string> <string name="inaccessible_base_dir">אמצעי האחסון לא קיים או שאינו נגיש.</string>
<string name="usf_expose">חשוף אמצעי אחסון פתוחים</string> <string name="task_failed">המשימה נכשלה: %s</string>
<string name="usf_expose_summary">אפשר ליישומים אחרים לעיין באמצעי אחסון פתוחים כספקי מסמכים</string> <string name="usf_expose">חשוף אמצעי אחסון פתוחים</string>
<string name="usf_saf_write">הענק הרשאת כתיבה</string> <string name="usf_expose_summary">אפשר ליישומים אחרים לעיין באמצעי אחסון פתוחים כספקי מסמכים</string>
<string name="usf_saf_write_summary">הענק הרשאת כתיבה בעת פתיחת קבצים עם יישומים אחרים</string> <string name="usf_saf_write">הענק הרשאת כתיבה</string>
<string name="saf">גישה לאחסון Framework</string> <string name="usf_saf_write_summary">הענק הרשאת כתיבה בעת פתיחת קבצים עם יישומים אחרים</string>
<string name="tmp_export_failed">הייצוא נכשל: %s</string> <string name="saf">גישה לאחסון Framework</string>
<string name="export_failed_create">לא הצלחתי ליצור קובץ ייצוא</string> <string name="tmp_export_failed">הייצוא נכשל: %s</string>
<string name="export_failed_export">ייצוא הקובץ נכשל</string> <string name="export_failed_create">לא הצלחתי ליצור קובץ ייצוא</string>
<string name="export_mem">מייצא לזיכרון…</string> <string name="export_failed_export">ייצוא הקובץ נכשל</string>
<string name="export_disk">מייצא לאחסון פנימי…</string> <string name="export_mem">מייצא לזיכרון…</string>
<string name="memfd_create_unsupported">הקרנל הנוכחי שלך לא תומכת ב-memfd_create(). תכונה זו דורשת גרסת קרנל מינימלי של %s.</string> <string name="export_disk">מייצא לאחסון פנימי…</string>
<string name="export_method">שיטת ייצוא</string> <string name="memfd_create_unsupported">הקרנל הנוכחי שלך לא תומכת ב-memfd_create(). תכונה זו דורשת גרסת קרנל מינימלי של %s.</string>
<string name="export_method_summary">שיטת ייצוא קבצים. משמש לשיתוף, פתיחה חיצונית וגישה לקבצים חשופים.</string> <string name="export_method">שיטת ייצוא</string>
<string name="debug">דיבאג</string> <string name="export_method_summary">שיטת ייצוא קבצים. משמש לשיתוף, פתיחה חיצונית וגישה לקבצים חשופים.</string>
<string name="logcat_title">DroidFS Logcat</string> <string name="debug">דיבאג</string>
<string name="logcat_saved">Logcat נשמר</string> <string name="logcat_title">DroidFS Logcat</string>
<string name="later">אחר כך</string> <string name="logcat_saved">Logcat נשמר</string>
<string name="notification_denied_msg">הרשאת ההתראות נדחתה. פעולות קובץ ברקע לא יהיו נראות. אתה יכול לשנות זאת בהגדרות ההרשאות של האפליקציה.</string>
<string name="keep_alive_notification_title">שומר על האפליקציה שתרוץ ברקע</string>
<string name="keep_alive_notification_text">אמצעי אחסון אחד או יותר נשמרים פתוחים.</string>
<string name="close_all">סגור הכל</string>
<string name="usf_background">בטל נעילה אוטומטית לאמצעי אחסון</string>
<string name="usf_background_summary">אל תנעל את האמצעי אחסון כשהאפליקציה רצה ברקע</string>
<string name="usf_keep_open">השאר את האמצעי אחסון פתוח כשהאפליקציה רצה ברקע</string>
<string name="usf_keep_open_summary">השאר את האפליקציה רצה תמיד ברקע כדי לשמור על אמצעי אחסון פתוחים</string>
<string name="gocryptfs_details">מהיר, אבל לא מסתיר את גדול הקבצים ומבנה התיקיות.</string>
<string name="cryfs_details">איטי יותר, אבל מגן על מטא נתונים (גודל קבצים ומבנה תיקיות)
ומונע מתקפה של החלפת קבצים.</string>
<string name="or">או</string>
<string name="enter_volume_path">הכנס מתיב תיקייה</string>
</resources> </resources>