diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml
index ec88dfc8f..ad03fb40a 100644
--- a/.github/workflows/coverage.yml
+++ b/.github/workflows/coverage.yml
@@ -15,7 +15,7 @@ jobs:
coverageReport:
strategy:
matrix:
- api-level: [21, 29]
+ api-level: [21, 21]
fail-fast: false
runs-on: macOS-latest
steps:
diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
index cce791c36..7928f4b6d 100644
--- a/.github/workflows/nightly.yml
+++ b/.github/workflows/nightly.yml
@@ -10,7 +10,7 @@ jobs:
instrumentation_tests:
strategy:
matrix:
- api-level: [21, 22, 23, 24, 25, 27, 28, 29]
+ api-level: [21, 22, 23, 24, 25, 27, 28]
fail-fast: false
runs-on: macOS-latest
steps:
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
new file mode 100644
index 000000000..b1bd93d1a
--- /dev/null
+++ b/app/src/main/res/values-cs/strings.xml
@@ -0,0 +1,9 @@
+
+
+
+ Váš souborový systém nepodporuje soubory větší než 4GB
+ Zjišťování, zda souborový systém dokáže vytvořit 4GB soubory
+ Nepodařilo se otevřít soubor\nZkuste prosím tento soubor vyhledat na kartě Zařízení ve Vaší knihovně
+
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
new file mode 100644
index 000000000..e1a1b2c0e
--- /dev/null
+++ b/app/src/main/res/values-ru/strings.xml
@@ -0,0 +1,9 @@
+
+
+
+ Ваша файловая система не поддерживает файлы больше 4GB
+ Проверка, поддерживает ли файловая система файлы больше 4GB
+ Невозможно открыть файл\nПожалуйста, попытайтесь найти этот файл во вкладке \“Устройство\” в вашей библиотеке
+
diff --git a/core/detekt_baseline.xml b/core/detekt_baseline.xml
index 043c9f0fa..b277f6610 100644
--- a/core/detekt_baseline.xml
+++ b/core/detekt_baseline.xml
@@ -11,6 +11,7 @@
MagicNumber:CoreSplashActivity.kt$CoreSplashActivity$10
MagicNumber:DownloadItem.kt$DownloadItem$1000L
MagicNumber:DownloaderModule.kt$DownloaderModule$5
+ MagicNumber:FetchDownloadNotificationManager.kt$FetchDownloadNotificationManager$100
MagicNumber:FetchDownloadRequester.kt$10
MagicNumber:FileUtils.kt$FileUtils$3
MagicNumber:JNIInitialiser.kt$JNIInitialiser$1024
diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/StorageObserver.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/StorageObserver.kt
index fb50615fd..a92a178aa 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/StorageObserver.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/StorageObserver.kt
@@ -49,5 +49,6 @@ class StorageObserver @Inject constructor(
downloads.firstOrNull { file.absolutePath.endsWith(it.fileNameFromUrl) } == null
private fun convertToBookOnDisk(file: File) =
- zimReaderFactory.create(file)?.let { BookOnDisk(file, it) }
+ zimReaderFactory.create(file)
+ ?.let { zimFileReader -> BookOnDisk(file, zimFileReader).also { zimFileReader.dispose() } }
}
diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/fetch/FetchDownloadNotificationManager.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/fetch/FetchDownloadNotificationManager.kt
index 22cd1eff2..0a710eee0 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/fetch/FetchDownloadNotificationManager.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/fetch/FetchDownloadNotificationManager.kt
@@ -30,6 +30,7 @@ import androidx.core.app.NotificationCompat
import com.tonyodev.fetch2.DefaultFetchNotificationManager
import com.tonyodev.fetch2.DownloadNotification
import com.tonyodev.fetch2.Fetch
+import com.tonyodev.fetch2.util.DEFAULT_NOTIFICATION_TIMEOUT_AFTER_RESET
import org.kiwix.kiwixmobile.core.Intents
import org.kiwix.kiwixmobile.core.R
import org.kiwix.kiwixmobile.core.R.string
@@ -58,7 +59,59 @@ class FetchDownloadNotificationManager(context: Context) :
downloadNotification: DownloadNotification,
context: Context
) {
- super.updateNotification(notificationBuilder, downloadNotification, context)
+ // super method but with pause button removed
+ val smallIcon = if (downloadNotification.isDownloading) {
+ android.R.drawable.stat_sys_download
+ } else {
+ android.R.drawable.stat_sys_download_done
+ }
+ notificationBuilder.setPriority(NotificationCompat.PRIORITY_DEFAULT)
+ .setSmallIcon(smallIcon)
+ .setContentTitle(downloadNotification.title)
+ .setContentText(getSubtitleText(context, downloadNotification))
+ .setOngoing(downloadNotification.isOnGoingNotification)
+ .setGroup(downloadNotification.groupId.toString())
+ .setGroupSummary(false)
+ if (downloadNotification.isFailed || downloadNotification.isCompleted) {
+ notificationBuilder.setProgress(0, 0, false)
+ } else {
+ val progressIndeterminate = downloadNotification.progressIndeterminate
+ val maxProgress = if (downloadNotification.progressIndeterminate) 0 else 100
+ val progress = if (downloadNotification.progress < 0) 0 else downloadNotification.progress
+ notificationBuilder.setProgress(maxProgress, progress, progressIndeterminate)
+ }
+ when {
+ downloadNotification.isDownloading ->
+ notificationBuilder.setTimeoutAfter(getNotificationTimeOutMillis())
+ .addAction(
+ R.drawable.fetch_notification_cancel,
+ context.getString(R.string.fetch_notification_download_cancel),
+ getActionPendingIntent(downloadNotification, DownloadNotification.ActionType.CANCEL)
+ )
+ downloadNotification.isPaused ->
+ notificationBuilder.setTimeoutAfter(getNotificationTimeOutMillis())
+ .addAction(
+ R.drawable.fetch_notification_resume,
+ context.getString(R.string.fetch_notification_download_resume),
+ getActionPendingIntent(downloadNotification, DownloadNotification.ActionType.RESUME)
+ )
+ .addAction(
+ R.drawable.fetch_notification_cancel,
+ context.getString(R.string.fetch_notification_download_cancel),
+ getActionPendingIntent(downloadNotification, DownloadNotification.ActionType.CANCEL)
+ )
+ downloadNotification.isQueued ->
+ notificationBuilder.setTimeoutAfter(getNotificationTimeOutMillis())
+ else -> notificationBuilder.setTimeoutAfter(DEFAULT_NOTIFICATION_TIMEOUT_AFTER_RESET)
+ }
+ notificationCustomisation(downloadNotification, notificationBuilder, context)
+ }
+
+ private fun notificationCustomisation(
+ downloadNotification: DownloadNotification,
+ notificationBuilder: NotificationCompat.Builder,
+ context: Context
+ ) {
if (downloadNotification.isCompleted) {
val internal = Intents.internal(CoreMainActivity::class.java).apply {
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/DeleteBookmarkItems.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/DeleteBookmarkItems.kt
index 4c676bfc4..239b58d7c 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/DeleteBookmarkItems.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/DeleteBookmarkItems.kt
@@ -35,6 +35,7 @@ data class DeleteBookmarkItems(
override fun invokeWith(activity: AppCompatActivity) {
if (state.isInSelectionState) {
bookmarksDao.deleteBookmarks(state.pageItems.filter(BookmarkItem::isSelected))
+ effects.offer(ShowToast(R.string.selected_bookmarks_cleared))
} else {
bookmarksDao.deleteBookmarks(state.pageItems)
effects.offer(ShowToast(R.string.all_bookmarks_cleared))
diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/ShowDeleteBookmarksDialog.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/ShowDeleteBookmarksDialog.kt
index 86f1405ee..50e705f51 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/ShowDeleteBookmarksDialog.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/ShowDeleteBookmarksDialog.kt
@@ -25,7 +25,8 @@ import org.kiwix.kiwixmobile.core.dao.NewBookmarksDao
import org.kiwix.kiwixmobile.core.page.bookmark.BookmarksActivity
import org.kiwix.kiwixmobile.core.page.bookmark.viewmodel.BookmarkState
import org.kiwix.kiwixmobile.core.utils.DialogShower
-import org.kiwix.kiwixmobile.core.utils.KiwixDialog.DeleteBookmarks
+import org.kiwix.kiwixmobile.core.utils.KiwixDialog.DeleteAllBookmarks
+import org.kiwix.kiwixmobile.core.utils.KiwixDialog.DeleteSelectedBookmarks
import javax.inject.Inject
data class ShowDeleteBookmarksDialog(
@@ -36,8 +37,7 @@ data class ShowDeleteBookmarksDialog(
@Inject lateinit var dialogShower: DialogShower
override fun invokeWith(activity: AppCompatActivity) {
(activity as BookmarksActivity).activityComponent.inject(this)
- dialogShower.show(DeleteBookmarks, {
- effects.offer(DeleteBookmarkItems(effects, state, bookmarksDao))
- })
+ dialogShower.show(if (state.isInSelectionState) DeleteSelectedBookmarks else DeleteAllBookmarks,
+ { effects.offer(DeleteBookmarkItems(effects, state, bookmarksDao)) })
}
}
diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/effects/ShowDeleteHistoryDialog.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/effects/ShowDeleteHistoryDialog.kt
index 1e3c9194f..406a67dff 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/effects/ShowDeleteHistoryDialog.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/effects/ShowDeleteHistoryDialog.kt
@@ -26,6 +26,7 @@ import org.kiwix.kiwixmobile.core.page.history.HistoryActivity
import org.kiwix.kiwixmobile.core.page.history.viewmodel.HistoryState
import org.kiwix.kiwixmobile.core.utils.DialogShower
import org.kiwix.kiwixmobile.core.utils.KiwixDialog.DeleteAllHistory
+import org.kiwix.kiwixmobile.core.utils.KiwixDialog.DeleteSelectedHistory
import javax.inject.Inject
data class ShowDeleteHistoryDialog(
@@ -36,7 +37,7 @@ data class ShowDeleteHistoryDialog(
@Inject lateinit var dialogShower: DialogShower
override fun invokeWith(activity: AppCompatActivity) {
(activity as HistoryActivity).activityComponent.inject(this)
- dialogShower.show(DeleteAllHistory, {
+ dialogShower.show(if (state.isInSelectionState) DeleteSelectedHistory else DeleteAllHistory, {
effects.offer(DeleteHistoryItems(state, historyDao))
})
}
diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/reader/ZimFileReader.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/reader/ZimFileReader.kt
index da97d7837..6dff00b23 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/reader/ZimFileReader.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/reader/ZimFileReader.kt
@@ -224,6 +224,10 @@ class ZimFileReader constructor(
tags = this@ZimFileReader.tags
}
+ fun dispose() {
+ jniKiwixReader.dispose()
+ }
+
companion object {
/*
* these uris aren't actually nullable but unit tests fail to compile as
diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/reader/ZimReaderContainer.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/reader/ZimReaderContainer.kt
index c550a94e7..5b47c52a6 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/reader/ZimReaderContainer.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/reader/ZimReaderContainer.kt
@@ -18,7 +18,6 @@
package org.kiwix.kiwixmobile.core.reader
import android.webkit.WebResourceResponse
-import org.kiwix.kiwixlib.JNIKiwixSearcher
import org.kiwix.kiwixmobile.core.reader.ZimFileReader.Factory
import java.io.File
import javax.inject.Inject
@@ -26,17 +25,12 @@ import javax.inject.Singleton
@Singleton
class ZimReaderContainer @Inject constructor(
- private val zimFileReaderFactory: Factory,
- private val jniKiwixSearcher: JNIKiwixSearcher?
+ private val zimFileReaderFactory: Factory
) {
- private val listOfAddedReaderIds = mutableListOf()
var zimFileReader: ZimFileReader? = null
set(value) {
+ field?.dispose()
field = value
- if (value != null && !listOfAddedReaderIds.contains(value.id)) {
- listOfAddedReaderIds.add(value.id)
- jniKiwixSearcher?.addKiwixReader(value.jniKiwixReader)
- }
}
fun setZimFile(file: File?) {
@@ -48,19 +42,9 @@ class ZimReaderContainer @Inject constructor(
else null
}
- fun searchSuggestions(prefix: String, count: Int) =
- zimFileReader?.searchSuggestions(prefix, count) ?: false
-
- fun getNextSuggestion() = zimFileReader?.getNextSuggestion()
-
fun getPageUrlFromTitle(title: String) = zimFileReader?.getPageUrlFrom(title)
fun getRandomArticleUrl() = zimFileReader?.getRandomArticleUrl()
- fun search(query: String, count: Int) {
- jniKiwixSearcher?.search(query, count)
- }
-
- fun getNextResult() = jniKiwixSearcher?.nextResult?.let { SearchResult(it.title) }
fun isRedirect(url: String): Boolean = zimFileReader?.isRedirect(url) == true
fun getRedirect(url: String): String = zimFileReader?.getRedirect(url) ?: ""
fun load(url: String) =
diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/SearchResultGenerator.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/SearchResultGenerator.kt
index 7bd361cb7..dbf9a59f3 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/SearchResultGenerator.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/SearchResultGenerator.kt
@@ -22,7 +22,6 @@ import org.kiwix.kiwixmobile.core.reader.ZimFileReader
import org.kiwix.kiwixmobile.core.reader.ZimReaderContainer
import org.kiwix.kiwixmobile.core.search.adapter.SearchListItem
import org.kiwix.kiwixmobile.core.search.adapter.SearchListItem.ZimSearchResultListItem
-import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
import javax.inject.Inject
interface SearchResultGenerator {
@@ -30,7 +29,6 @@ interface SearchResultGenerator {
}
class ZimSearchResultGenerator @Inject constructor(
- private val sharedPreferenceUtil: SharedPreferenceUtil,
private val zimReaderContainer: ZimReaderContainer
) : SearchResultGenerator {
override fun generateSearchResults(searchTerm: String) =
@@ -41,19 +39,12 @@ class ZimSearchResultGenerator @Inject constructor(
it: String,
reader: ZimFileReader?
) =
- if (sharedPreferenceUtil.prefFullTextSearch)
- zimReaderContainer.search(it, 200).run { fullTextResults() }
- else
- reader?.searchSuggestions(it, 200).run { suggestionResults(reader) }
-
- private fun fullTextResults() = generateSequence {
- zimReaderContainer.getNextResult()?.title?.let(::ZimSearchResultListItem)
- }.filter { it.value.isNotBlank() }
- .toList()
+ reader?.searchSuggestions(it, 200).run { suggestionResults(reader) }
private fun suggestionResults(reader: ZimFileReader?) = generateSequence {
reader?.getNextSuggestion()?.let { ZimSearchResultListItem(it.title) }
}
.distinct()
.toList()
+ .also { reader?.dispose() }
}
diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/utils/KiwixDialog.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/utils/KiwixDialog.kt
index 42d0b9c56..b1131196c 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/utils/KiwixDialog.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/utils/KiwixDialog.kt
@@ -189,7 +189,7 @@ sealed class KiwixDialog(
}
object DeleteSelectedHistory : KiwixDialog(
- R.string.delete_history,
+ R.string.delete_selected_history,
null,
positiveMessage = R.string.delete,
negativeMessage = R.string.cancel
@@ -202,12 +202,19 @@ sealed class KiwixDialog(
negativeMessage = R.string.cancel
)
- object DeleteBookmarks : KiwixDialog(
+ object DeleteAllBookmarks : KiwixDialog(
R.string.delete_bookmarks,
null,
positiveMessage = R.string.delete,
negativeMessage = R.string.cancel
)
+
+ object DeleteSelectedBookmarks : KiwixDialog(
+ R.string.delete_selected_bookmarks,
+ null,
+ positiveMessage = R.string.delete,
+ negativeMessage = R.string.cancel
+ )
}
interface HasBodyFormatArgs {
diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/utils/SharedPreferenceUtil.java b/core/src/main/java/org/kiwix/kiwixmobile/core/utils/SharedPreferenceUtil.java
index ae4bd1859..d4fd58add 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/utils/SharedPreferenceUtil.java
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/utils/SharedPreferenceUtil.java
@@ -124,11 +124,6 @@ public class SharedPreferenceUtil {
return sharedPreferences.getString(PREF_STORAGE_TITLE, defaultTitle);
}
- public boolean getPrefFullTextSearch() {
- return false; // Temporarily disable multizim for 2.4
- //return sharedPreferences.getBoolean(PREF_FULL_TEXT_SEARCH, false);
- }
-
public void putPrefLanguage(String language) {
sharedPreferences.edit().putString(PREF_LANG, language).apply();
}
diff --git a/core/src/main/res/values-ar/strings.xml b/core/src/main/res/values-ar/strings.xml
index bf94f30ec..40ac7fdea 100644
--- a/core/src/main/res/values-ar/strings.xml
+++ b/core/src/main/res/values-ar/strings.xml
@@ -261,10 +261,11 @@
لا توجد إشارات مرجعية!
لا تاريخ
الجهاز الافتراضي
- حذف التاريخ؟
- أزل العلامات المرجعية؟
+ حذف التاريخ؟
+ أزل العلامات المرجعية؟
تشغيل
تعطيل
تلقائي
تفاصيل نظام الملفات
+ تصفح تجريبي
diff --git a/core/src/main/res/values-ast/strings.xml b/core/src/main/res/values-ast/strings.xml
index afd7245fd..57da9dfb9 100644
--- a/core/src/main/res/values-ast/strings.xml
+++ b/core/src/main/res/values-ast/strings.xml
@@ -254,8 +254,8 @@
Nun hai marcadores
Nun hai Historial
Predeterminao del preséu
- ¿Desaniciar l\'Historial?
- ¿Desaniciar los Marcadores?
+ ¿Desaniciar l\'Historial?
+ ¿Desaniciar los Marcadores?
Activáu
Desactiváu
Auto
diff --git a/core/src/main/res/values-b+be+tarask/strings.xml b/core/src/main/res/values-b+be+tarask/strings.xml
new file mode 100644
index 000000000..d5ad69ff3
--- /dev/null
+++ b/core/src/main/res/values-b+be+tarask/strings.xml
@@ -0,0 +1,84 @@
+
+
+
+ Дапамога
+ Галоўная
+ Налады
+ Знайсьці на старонцы
+ Закладкі
+ Выпадковы артыкул
+ На ўвесь экран
+ Выйсьці з рэжыму поўнага экрану
+ Чытаць уголас
+ Спыніць чытаньне ўголас
+ Падтрымаць Kiwix
+ Узьнікла памылка пры захаваньні мэдыяфайлу!
+ Мэдыя-файл захаваны як %s у Android/media/org.kiwix…/
+ Абярыце файл зьместу (*.zim)
+ Адкрыць спасылку ў новай укладцы?
+ Памылка: абраны ZIM-файл ня знойдзены.
+ Памылка: абраны файл не зьяўляецца слушным ZIM-файлам.
+ Памылка: загрузка артыкула (Url: %1$s) не атрымалася.
+ Інфармацыя
+ Вэрсія
+ Начны рэжым
+ Паказваць артыкулы ў інвэртаваных колерах
+ Вярнуцца ўгару
+ Паказваць кнопку ў канцы старонкі для пракручваньня ўверх
+ Мова
+ Абярыце мову
+ Мова гэтай старонкі не падтрымліваецца або адпаведныя зьвесткі мовы не былі ўсталяваныя. Артыкул можа быць няправільна прачытаны.
+ Ня знойдзеныя ўсталяваныя праграмы для гэтага тыпу файлу
+ Ня знойдзеныя загалоўкі зьместу
+ Каб атрымаць доступ да зьместу оф-лайн, нам трэба мець доступ да вашага сховішча
+ Вы сапраўды хочаце выдаліць гісторыю пошуку і скінуць усе актыўныя закладкі?
+ Выдаліць гэты элемэнт?
+ Уся гісторыя ачышчаная
+ Ачысьціць усю гісторыю?
+ Выдаліць
+ Нядаўні пошук выдалены
+ Зразумела
+ Ці ведалі вы?
+ Закладка дададзеная
+ Калі ласка, ацаніце нас
+ Калі вам падабаецца карыстацца
+ , калі ласка, знайдзіце час, каб ацаніць. Дзякуем за вашую падтрымку!
+ Ацаніць!
+ Не, дзякуй
+ Пазьней
+ Закладка выдаленая
+ Адкрыць новую ўкладку на фоне
+ Пры адкрыцьці новай укладкі, яна будзе адкрытая на заднім пляне
+ Дадаткова
+ Прылада
+ Што робіць Kiwix?
+ Дзе зьмест?
+ Выбачайце, мы не змаглі выдаліць некаторыя файлы. Паспрабуйце скарыстацца файлавым кіраўніком.
+ Спыніць загрузку?
+ Вы ўпэўненыя, што хочаце спыніць гэтую загрузку?
+ Вы ўводзіце вонкавую спасылку. Гэта можа прывесьці да зьняцьця грошай мабільным апэратарам ці проста не спрацаваць, калі вы знаходзіцеся ў офлайне. Хочаце працягнуць?
+ Болей не пытаць
+ Выбраныя мовы:
+ Іншыя мовы:
+ Падобна, што мы паламаліся.\n\nЦі можаце дапамагчы нам выправіць гэтую праблему, адаслаўшы наступную інфармацыю?
+ Вашыя моўныя налады
+ Сьпіс вашых zim-файлаў
+ Падрабязнасьці аварыі
+ Журналы праграмы
+ Падрабязнасьці прылады
+ Скарот недаступны
+ Новая ўкладка
+ Атрымаць зьмест
+ Любімая іконка
+ %s артыкулаў
+ Пачаць
+ Скачвайце кнігі
+ Веды чалавецтва ў вашым тэлефоне.
+ Вітаем у сям’і
+ Нататкамі нельга карыстацца бяз доступу да сховішча
+ Android вымагае лякальнага дазволу на доступ праграмы да вызначэньня прыладаў
+ Няма закладак
+
diff --git a/core/src/main/res/values-ckb/strings.xml b/core/src/main/res/values-ckb/strings.xml
index 194827a5b..80c4055e5 100644
--- a/core/src/main/res/values-ckb/strings.xml
+++ b/core/src/main/res/values-ckb/strings.xml
@@ -1,6 +1,7 @@
+
+ Hilf
+ Yystellige
+ I de Syte finde
+ Läsezeiche
+ Zuefälligi Syte
+ Vollbildschirm
+ Vollbildmodus beende
+ Vorläse
+ Ufhöre vorläse
+ Kiwix unterstützä
+ Medie spychere
+ Bim Spychere vo de Medie isch ä Fähler passiert!
+ Medie als %s nach Android/media/org.kiwix…/ gspycheret
+ Sueche
+ Inhaltedatei (*.zim) uswähle
+ Bitte zersch Büecher uswähle
+ Server het nid chönne gschtartät wärde.
+ Server erfolgriich gschtartät.
+ Server erfolgriich gschtopped.
+ Server am Schtartä
+ Inschtruktionä um Büecher bereit z\'stellä
+ WIITERMACHE
+ Server schtartä
+ Server schtoppe
+ Fehler: Di usgwählti ZIM-Datei isch nit gfunde worde.
+ Cha zim Datei nid uftue
+ Fehler: Di usgwählti Datei isch chei gültigi ZIM-Datei.
+ Fehler: S\' Lade vom Artikel (URL: %1$s) het nit gchlappt.
+ Azeig
+ Information
+ Version
+ Nachtmodus
+ Zeig d\'Artikel mit umcherte Farbe
+ Zruck nach obe
+ Zeig e Chnopf am End vo dr Syte zuem uffe rolle
+ Wärchzüglischte sichtbar bhaute
+ Sprach
+ E Sprach uswähle
+ Das Elemänt löschä?
+ Verlouf lösche
+ Ganzä Verlouf glöscht
+ Ganzä Verlouf lösche?
+ Teile
+ ZIM Dateiä teilä mit:
+ Lösche
+ Abbräche
+ Letschti Suech entfärnt
+ Nach linggs wüsche um dr Inhaut vo däm Artikel aazluege
+ Verschtande
+ Scho gwüsst?
+ Rückgängig machä
+ Tuä üs bewärte
+ Bewärte!
+ Nei danke
+ Spääter
+ Ufmache
+ Äxtras
+ Kiwix dürsuechä
+ Grät
+ Bibliothek
+ Dateiä erfolgriich glöscht
+ Hie hets ke Dateiä
+ Nid gnüegend Spiicherplatz um abezladä.
+ Verfüegbaare Spiicherplatz:
+ Eifach
+ Ke Bilder
+ Ke Videos
+ Keni Netzwärkverbindig
+ Wo isch der Inhaut?
+ Spiicher
+ Aktuelle Ordnär
+ pousiere
+ wiitermache
+ schtoppe
+ Ja
+ Nei
+ Abeladä schtoppä?
+ Nächschti
+ Vorhärigi
+ Hüt
+ Geschter
+ Nümme fraagä
+ Zur vorherigä Syte gah
+ Zur nächschtä Syte gah
+ Spraach uswähle
+ Ufklappe
+ Suechverläuf
+ %1$d usgwählt
+ Fertig
+ Pousiert
+ Fählgschlage: %s
+ Spychere
+ Notiz
+ Notiz spychere fählgschlage
+ Notiz erfolgriich glöscht
+ Notiz isch nid glöscht worde
+ Notiz gspycheret
+ Diä Notiz Datei gits nid
+ Aui Notizä lösche?
+ Gwüssi Dateiä si nid glöscht worde
+ Verbindig fählgschlagä
+ Dateiübertragig abgschlossä
+ Es isch ä Fähler passiert während dr Übertragig
+ Fähler bim Übertrage vor Datei %s
+ Dateiä am Vorbereitä für d\'Übertragig…
+ Status
+ Alli Notizä lösche
+ Numä Texscht
+ Churzä Texscht
+ Ke Ergäbnis
+ Ke Verlouf
+ Verlouf lösche?
+ Aa
+ Uus
+ %d%%
+
diff --git a/core/src/main/res/values-it/strings.xml b/core/src/main/res/values-it/strings.xml
index 6a064952f..eb8e6e5ab 100644
--- a/core/src/main/res/values-it/strings.xml
+++ b/core/src/main/res/values-it/strings.xml
@@ -100,6 +100,6 @@
Vai alle impostazioni hotspot
Nessun risultato
Nessun segnalibro
- Cancellare la cronologia?
- Cancellare i segnalibri?
+ Cancellare la cronologia?
+ Cancellare i segnalibri?
diff --git a/core/src/main/res/values-iw/strings.xml b/core/src/main/res/values-iw/strings.xml
index a66c565d2..8eeae71c2 100644
--- a/core/src/main/res/values-iw/strings.xml
+++ b/core/src/main/res/values-iw/strings.xml
@@ -261,8 +261,8 @@
אין סימניות
אין היסטוריה
ברירת המחדל של המכשיר
- למחוק היסטוריה?
- למחוק מועדפים?
+ למחוק היסטוריה?
+ למחוק מועדפים?
מופעל
כבוי
אוטומטי
diff --git a/core/src/main/res/values-ko/strings.xml b/core/src/main/res/values-ko/strings.xml
index 15e23eb30..47f7ec12d 100644
--- a/core/src/main/res/values-ko/strings.xml
+++ b/core/src/main/res/values-ko/strings.xml
@@ -264,8 +264,8 @@
북마크가 없습니다!
역사 없음
장치 기본값
- 역사를 삭제할까요?
- 북마크를 삭제할까요?
+ 역사를 삭제할까요?
+ 북마크를 삭제할까요?
켜기
끄기
자동
diff --git a/core/src/main/res/values-lb/strings.xml b/core/src/main/res/values-lb/strings.xml
index a5fda61de..3e0f0d404 100644
--- a/core/src/main/res/values-lb/strings.xml
+++ b/core/src/main/res/values-lb/strings.xml
@@ -114,9 +114,10 @@
Keng Resultater
Keng Lieszeechen!
Keen Historique
- Versioune läschen?
- Lieszeeche läschen?
+ Versioune läschen?
+ Lieszeeche läschen?
Un
Aus
Automatesch
+ Experimentell Naavigatioun
diff --git a/core/src/main/res/values-mk/strings.xml b/core/src/main/res/values-mk/strings.xml
index 285acb546..e02f3522f 100644
--- a/core/src/main/res/values-mk/strings.xml
+++ b/core/src/main/res/values-mk/strings.xml
@@ -256,8 +256,8 @@
Нема обележувачи
Нема историја
Основно на уредот
- Да ја избришам историјата?
- Да ги избришам обележувачите?
+ Да ја избришам историјата?
+ Да ги избришам обележувачите?
Вкл.
Искл.
Авто
@@ -267,4 +267,5 @@
Испратете ги сите следни поединости за да можеме да го дијагностицираме проблемот
%d%%
Приближување на текст
+ Опитен прегледник
diff --git a/core/src/main/res/values-ml/strings.xml b/core/src/main/res/values-ml/strings.xml
index e3e6d328e..92d32c5a9 100644
--- a/core/src/main/res/values-ml/strings.xml
+++ b/core/src/main/res/values-ml/strings.xml
@@ -130,5 +130,5 @@
സജ്ജീകരണങ്ങളിലേക്ക് പോവുക
ഫലങ്ങൾ ഒന്നുമില്ല
നാൾവഴിയില്ല
- നാൾവഴി ഒഴിവാക്കട്ടെ?
+ നാൾവഴി ഒഴിവാക്കട്ടെ?
diff --git a/core/src/main/res/values-nl/strings.xml b/core/src/main/res/values-nl/strings.xml
index 9895f4794..384680e32 100644
--- a/core/src/main/res/values-nl/strings.xml
+++ b/core/src/main/res/values-nl/strings.xml
@@ -1,4 +1,13 @@
-
+
+
Hulp
Startpagina
@@ -11,10 +20,10 @@
Voorlezen
Stoppen met voorlezen
Media opslaan als…
- Er is een fout opgetreden bij het opslaan van de media!
- Het bestand is opgeslagen als %1$s in uw afbeeldingenmap
+ Er is een fout opgetreden bij het opslaan van de media!
+ Het bestand is opgeslagen als %1$s in uw afbeeldingenmap
Zoeken
- Selecteer een ZIM inhoudsbestand (*.zim)
+ Selecteer een ZIM inhoudsbestand (*.zim)
Koppeling openen in nieuw tabblad?
Fout: het geselecteerde ZIM-bestand kon niet gevonden worden.
Fout: het geselecteerde bestand is geen geldig ZIM-bestand.
@@ -30,29 +39,68 @@
Taal kiezen
De taak van deze pagina wordt niet ondersteund, of de juiste taalgegevens zijn niet geïnstalleerd. De pagina kan niet correct gelezen worden.
Kon geen geïnstalleerde applicatie vinden voor dit type bestand
- Geen inhoudsheaders gevonden
- Om toegang te krijgen tot ZIM-bestanden is toegang tot uw opslag nodig
+ Geen inhoudsheaders gevonden
+ Om toegang te krijgen tot ZIM-bestanden is toegang tot uw opslag nodig
+ Dit item verwijderen?
+ Verwijderen
+ Annuleren
+ Wist u dat?
+ Ongedaan maken
Bladwijzer toegevoegd
Beoordeel ons alstublieft
Als u geniet van het gebruik van
, geef dan even een beoordeling. Dank u wel voor uw steun!
Beoordelen!
Nee, bedankt
+ Later
Nieuw tabblab in de achtergrond openen
Nieuwe tabbladen worden niet actief gemaakt
+ Apparaat
Bibliotheek
+ Eenvoudig
+ Geen afbeeldingen
Geen video\'s
Onze inhoud is ondergebracht op de Kiwix website
-
- - @string/help_3
- - @string/help_4
-
-
- - @string/help_6
- - @string/help_7
- - @string/help_8
- - @string/help_9
- - @string/help_10
- - @string/help_11
-
+ Opslag
+ Huidige map
+ pauzeren
+ hervatten
+ Intern
+ Extern
+ Ja
+ Nee
+ Volgende
+ Vorige
+ dag
+ u
+ min
+ s
+ te gaan
+ Vandaag
+ Gisteren
+ Geselecteerde talen:
+ Andere talen:
+ Nieuw tabblad
+ Aan de slag
+ Inhoudsopgave
+ Talen opslaan
+ Geschiedenis
+ Zoekgeschiedenis
+ Alle tabbladen sluiten
+ In afwachting
+ In behandeling
+ Afgerond
+ Gepauzeerd
+ Mislukt: %s
+ Opslaan
+ Opmerking
+ Bestandsoverdracht compleet
+ Uw apparaat:
+ Alleen text
+ Geen resultaten
+ Geen bladwijzers
+ Geen geschiedenis
+ Aan
+ Uit
+ Automatisch
diff --git a/core/src/main/res/values-pl/strings.xml b/core/src/main/res/values-pl/strings.xml
index 6999702b4..227e95b45 100644
--- a/core/src/main/res/values-pl/strings.xml
+++ b/core/src/main/res/values-pl/strings.xml
@@ -266,8 +266,8 @@
Brak zakładek
Nie ma Historii
Domyślne urządzenie
- Usunąć historię?
- Usunąć zakładki?
+ Usunąć historię?
+ Usunąć zakładki?
Włącz
Wyłącz
Automatycznie
diff --git a/core/src/main/res/values-pt-rBR/strings.xml b/core/src/main/res/values-pt-rBR/strings.xml
index 62735f474..a8e0cacf3 100644
--- a/core/src/main/res/values-pt-rBR/strings.xml
+++ b/core/src/main/res/values-pt-rBR/strings.xml
@@ -262,8 +262,8 @@
Sem Favoritos
Sem histórico
Padrão do dispositivo
- Apagar histórico?
- Excluir marcadores?
+ Apagar histórico?
+ Excluir marcadores?
Lig
Des
Auto
@@ -273,4 +273,5 @@
Envie todos os detalhes a seguir para que possamos diagnosticar o problema
%d%%
Zoom de texto
+ Navegação experimental
diff --git a/core/src/main/res/values-qq/strings.xml b/core/src/main/res/values-qq/strings.xml
index 2974d6357..6a604205e 100644
--- a/core/src/main/res/values-qq/strings.xml
+++ b/core/src/main/res/values-qq/strings.xml
@@ -6,6 +6,7 @@
* Liuxinyu970226
* Robby
* Shirayuki
+* Stephane
* The RedBurn
* Verdy p
-->
@@ -16,6 +17,7 @@
{{Identical|Bookmark}}
{{Identical|Random article}}
{{Identical|Full screen}}
+ Il s\'agit de la fonctionnalité hotspot - l\'anglais \"host books\" n\'est pas particulièrement satisfaisant à la base.
{{Identical|Search}}
Do not change:\n* <code>%1$s</code> (replaced by the “SSID” value identifying the WiFi hotspot identity for users)\n* <code>%2$s</code> (replaced by the password or code configured in the hotspot to authorize the association and network connection)
This the title displayed when a user clicks wants to start the server in the host books section
@@ -27,6 +29,7 @@
{{Identical|Back to top}}
{{Identical|Language}}
{{Identical|Choose language}}
+ Tell the user that the selected bookmarks has been deleted/cleared
{{Identical|Delete}}
{{identical|Cancel}}
{{Identical|Undo}}
@@ -46,8 +49,12 @@
{{Identical|Save}}
This is used in the start server dialog and leads the user to mobile hotspot settings when pressed
This means \"there are no bookmarks\"
- This is a menu item that opens the applicaiton in a new experimental mode that uses different navigation.
+ Ask if the user wants to delete all history items.
+ Ask if the user wants to delete a number of selected history items.
+ Ask if the user wants to delete all bookmarks.
+ Ask if the user wants to delete a number of selected bookmarks.
This is used in the settings screen to turn on the night mode.
This is used in the settings screen to turn off the night mode.
This is used in the settings screen to turn the night mode on or off automatically depending upon the system settings of the phone.
+ This is a menu item that opens the applicaiton in a new experimental mode that uses different navigation.
diff --git a/core/src/main/res/values-ro/strings.xml b/core/src/main/res/values-ro/strings.xml
index 31f8bcbcb..1fc517694 100644
--- a/core/src/main/res/values-ro/strings.xml
+++ b/core/src/main/res/values-ro/strings.xml
@@ -259,8 +259,8 @@
Nici un semn de carte
Fără Istorie
Dispozitiv prestabilit
- Șterge istoricul?
- Ștergeți semnele de carte?
+ Șterge istoricul?
+ Ștergeți semnele de carte?
Pornit
Oprit
Auto
@@ -268,4 +268,6 @@
Detalii Sistem Fișiere
Raport Diagnostic
Vă rugăm să trimiteți toate următoarele detalii, astfel încât să putem diagnostica problema
+ %d%%
+ Mărește text
diff --git a/core/src/main/res/values-ru/strings.xml b/core/src/main/res/values-ru/strings.xml
index 0fc94dbea..6bc7b1984 100644
--- a/core/src/main/res/values-ru/strings.xml
+++ b/core/src/main/res/values-ru/strings.xml
@@ -15,6 +15,8 @@
* Okras
* Pacha Tchernof
* Putnik
+* Smavrina
+* Teretalexev
-->
Помощь
@@ -24,18 +26,43 @@
Закладки
Случайная статья
Полный экран
- Выйти из режима полного экрана
+ Выйти из полноэкранного режима
Читать вслух
Остановить чтение вслух
+ Поддержать Kiwix
+ Разместить книги
Сохранить Медиа-файлы
Произошла ошибка при сохранении медиафайла!
Медиафайл сохранён как %s в Android/media/org.kiwix…/
Поиск
Выберите файл содержимого (*.zim)
Открыть ссылку в новой вкладке?
+ Сервисный канал Точки доступа
+ Не удалось запустить точку доступа
+ Кажется, ваша точка доступа уже включена. Пожалуйста, выключите точку доступа, чтобы продолжить.
+ Перейти к настройкам WIFI
+ Точка доступа работает
+ Пожалуйста, сначала выберете книги
+ Невозможно запустить сервер. Пожалуйста, включите вашу точку доступа
+ Невозможно запустить сервер.
+ Сервер успешно запущен
Сервер успешно остановлен.
+ Точка доступа включена
+ Детали вашей точки доступа:\nSSID: %1$s \nПароль: %2$s
+ Выберете файлы, которые вы хотите разместить на сервере
+ Запуск сервера
+ Инструкции по размещению книг
Обнаружено Wi-Fi подключение
+ Чтобы просматривать книги, размещённые на других устройствах, проверьте, что все устройства подсоединены к одной и той же сети WiFi.
+ Чтобы данная функция работала, вам нужно включить точку доступа WiFi или подключить устройства отправителя и получателя к одной и той же сети WiFi.
+ ПРОДОЛЖИТЬ
+ Обновления о состоянии вашей точки доступа/сервера.
+ Точка Доступа Kiwix
+ Запустить сервер
+ Остановить сервер
+ Введите этот IP адрес в ваш браузер чтобы получить доступ к серверу %s
Ошибка: выбранный ZIM-файл не найден.
+ Невозможно открыть файл zim
Ошибка: Выбранный файл не является пригодным ZIM-файлом.
Ошибка: Загрузка статьи (Url: %1$s) не удалась.
Экран
@@ -60,8 +87,13 @@
Очистить историю
Очистить недавние поисковые запросы и историю вкладок
Вся история очищена
- Очистить всю историю
+ Очистить закладки
+ Все закладки удалены
+ Очистить всю историю?
+ Поделиться
+ Поделиться файлами ZIM с:
Удалить
+ Отменить
Последний поиск удалён
Вы можете пролистнуть влево, чтобы увидеть содержание статьи
Понятно
@@ -87,17 +119,18 @@
Устройство
Онлайн
Библиотека
+ Следующие файлы zim будут удалены:\n\n%s
Файл успешно удалён
Файлы отсутствуют
- Недостаточно места для загрузки этого файла.
+ Недостаточно места для загрузки.
Доступно Места:
Простой
Без картинок
- Нет видео
+ Без видео
Отсутствует сетевое подключение
Что делает Kiwix?
Kiwix - это автономный контент-ридер. Он действует схоже с браузером, но вместо обращения к онлайн страницам, он считывает содержимое из файла в формате ZIM.
- Хотя Kiwix и был изначально разработан, чтобы просматривать Wikipedia офлайн, он также пригоден и для другого содержимого.
+ Хотя Kiwix и был изначально разработан, чтобы просматривать Wikipedia оффлайн, он также пригоден и для другого содержимого.
Где содержимое?
Наш контент размещён на сайте Kiwix.
Они доступны как ZIM файлы. Их существует много:
@@ -120,43 +153,134 @@
Выбор носителя информации
Перевод текста в речь не доступен для этого ZIM файла
Не удалось инициализировать текст в речь. Пожалуйста, попробуйте еще раз
+ Непредвиденная ошибка при переводе текста в речь. Пожалуйста, попробуйте ещё раз.
Неожиданная ошибка при поиске. Пожалуйста, попробуйте еще раз
Далее
Предыдущий
Разрешить загрузку контента через мобильную сеть?
При выборе “Да”, вы не будете предупреждаться в будущем. Однако, вы всегда можете поменять это в Настройках.
- Загрузить контент только через WiFi
+ Загружать контент только через WiFi
день
ч
м
с
осталось
+ Сегодня
+ Вчера
Предупреждать когда происходит ввод внешних ссылок
Показать всплывающее сообщение про снятие дополнительных средств мобильным оператором или невозможности работы ссылок в офлайне.
- Ввод внешней ссылки
+ Ввод Внешней Ссылки!
Вы указали внешнюю ссылку. Её открытие может привести к снятию средств мобильным оператором или может не сработать, если вы офлайн. Хотите продолжить?
- Больше не спрашивай
+ Больше не спрашивать
Выбранные языки:
Другие языки:
+ Нет доступных элементов
+ Хммм… Как неловко
Похоже, приложение вылетело.\n\nНе могли бы вы помочь нам исправить эту проблему, предоставив следующую информацию?
Ваши Языковые Настройки
Список Ваших Zim Файлов
+ Детали ошибки
Журнал Действий Приложения
Подробности об Устройстве
ОТПРАВИТЬ ПОДРОБНОСТИ
- Скачивайте книги
+ Ярлык недоступен
+ Новая вкладка
+ Получить содержимое
+ Иконка
+ %s статей
+ Начать
+ Скачать книги
+ Знания человечества, на вашем телефоне.
+ Добро пожаловать в семью
+ Сохранить книги в автономный режим
Скачивайте книги и читайте, где бы вы ни были.
+ Не удалось добавить в закладки
+ Перейти к предыдущей странице
+ Перейти к следующей странице
+ Содержание
+ Выбрать языки
+ Сохранить языки
+ Отправить отзыв
Развернуть
- Закладки в текущей книге
+ История
+ Посмотреть историю из всех книг
+ Поиск в истории
+ %1$d выбрано
+ Показать Закладки Во Всех Книгах
+ Искать в закладках
+ Переключить вкладки
Закрыть все вкладки
+ В ожидании
+ В процессе
+ Завершено
+ Приостановлено
Ошибка: %s
+ Сохранить
+ Заметка
+ Заголовок Статьи Wiki
Разрешение на хранение необходимо для Заметок
Заметки не могут быть использованы без разрешения на хранение
+ Заметка не сохранена
+ Заметка успешно удалена
+ Заметка не была удалена
+ Заметка сохранена
+ Ошибка при сохранении заметки: запись в хранилище не разрешена
+ Файл заметок не существует
+ Поделиться файлом заметок с:
Отменить несохранённые изменения?
Удалить все заметки?
Ошибка: Отсутствует разрешение на хранение
- Очистить Все Заметки
+ Папка с заметками полностью удалена
+ Некоторые файлы не были удалены
+ %d книг
+ Обнаружение начато
+ Обнаружение не удалось
+ Серьёзная ошибка! Попробуйте выключить и снова включить WiFi P2P
+ Не удалось установить соединение
+ Доступ к местонахождению требуется Android для поиска близлежащих устройств
+ Невозможно обнаружить устройства без доступа к местоположению
+ Невозможно получить доступ к файлам zim без разрешения на доступ к хранилищу
+ Разрешите доступ к местоположению, чтобы позволить поиск устройств
+ Поиск близлежащих устройств невозможен без доступа к местоположению
+ Включите WiFi P2P в настройках системы
+ Поиск устройств невозможен без включённого WiFi
+ Передать файлы на %s?
+ Выбранное устройство отказало в передаче
+ Передача файла завершена
+ Произошла ошибка во время передачи файла
+ Ошибка при передаче файла %s
+ Получить контент с устройства рядом
+ Поиск устройств
+ Ваше устройство:
+ УСТРОЙСТВА РЯДОМ
+ Устройства не найдены. Нажмите кнопку Поиск чтобы попробовать ещё раз.
+ ФАЙЛЫ ДЛЯ ПЕРЕДАЧИ
+ Подготовка файлов для передачи…
+ Производим \“рукопожатие\”…
+ Статус
+ Очистить все заметки во всех статьях
+ Очистить все заметки
+ Изображение
+ Видео
+ Только текст
+ Короткий текст
+ Доступ к хранилищу запрещён
+ Для работы этому приложению необходим доступ к хранилищу на чтение. Пожалуйста, разрешите доступ в ваших настройках
+ Перейти к Настройкам Точки Доступа
+ Нет результатов
Нет Закладок
- Удалить историю?
- Удалить закладки?
+ История пуста
+ Настройки устройства по умолчанию
+ Удалить историю?
+ Удалить закладки?
+ Вкл
+ Выкл
+ Авто
+ Отправить отчёт диагностики
+ Информация о файловой системе
+ Отчёт диагностики
+ Пожалуйста, пришлите нам всю информацию ниже, чтобы мы смогли обнаружить проблему
+ %d%%
+ Масштаб Текста
+ Экспериментальная навигация
diff --git a/core/src/main/res/values-sc/strings.xml b/core/src/main/res/values-sc/strings.xml
index c51a873a4..14b036c72 100644
--- a/core/src/main/res/values-sc/strings.xml
+++ b/core/src/main/res/values-sc/strings.xml
@@ -255,8 +255,8 @@
Perunu sinnalibru!
Peruna cronologia
Valore predefinidu de su dispositivu
- Iscantzellare sa cronologia?
- Iscantzellare sos sinnalibros?
+ Iscantzellare sa cronologia?
+ Iscantzellare sos sinnalibros?
Alluta
Istudada
Automàtica
diff --git a/core/src/main/res/values-sr/strings.xml b/core/src/main/res/values-sr/strings.xml
index bff0d593c..ceeb221d9 100644
--- a/core/src/main/res/values-sr/strings.xml
+++ b/core/src/main/res/values-sr/strings.xml
@@ -83,8 +83,8 @@
Нема обележивача
Нема историјата
Подразумеване вредности уређаја
- Избрисати историјат?
- Избрисати обележиваче?
+ Избрисати историјат?
+ Избрисати обележиваче?
Укљ.
Искљ.
Ауто
diff --git a/core/src/main/res/values-sv/strings.xml b/core/src/main/res/values-sv/strings.xml
index 8eae788d3..ba1025f82 100644
--- a/core/src/main/res/values-sv/strings.xml
+++ b/core/src/main/res/values-sv/strings.xml
@@ -246,8 +246,8 @@
Inga bokmärken
Ingen historik
Enhetsstandard
- Radera historik?
- Radera bokmärken?
+ Radera historik?
+ Radera bokmärken?
På
Av
Auto
diff --git a/core/src/main/res/values-tr/strings.xml b/core/src/main/res/values-tr/strings.xml
index 040cc44cb..82f02b1be 100644
--- a/core/src/main/res/values-tr/strings.xml
+++ b/core/src/main/res/values-tr/strings.xml
@@ -267,8 +267,8 @@
Yer İmi Yok
Geçmiş Yok
Cihaz Varsayılanı
- Geçmiş Silinsin mi?
- Yer İşaretleri Silinsin mi?
+ Geçmiş Silinsin mi?
+ Yer İşaretleri Silinsin mi?
Açık
Kapalı
Otomatik
@@ -276,4 +276,7 @@
Dosya Sistemi Ayrıntıları
Teşhis Raporu
Sorunu teşhis edebilmemiz için lütfen aşağıdaki tüm ayrıntıları gönderin
+ %%%d
+ Metin Yakınlığı
+ Deneysel Gezintisi
diff --git a/core/src/main/res/values-zh-rTW/strings.xml b/core/src/main/res/values-zh-rTW/strings.xml
index 6a40fea0a..f6ced3f06 100644
--- a/core/src/main/res/values-zh-rTW/strings.xml
+++ b/core/src/main/res/values-zh-rTW/strings.xml
@@ -261,8 +261,8 @@
沒有書籤!
沒有歷史
設備預設
- 刪除歷史?
- 刪除書籤?
+ 刪除歷史?
+ 刪除書籤?
開啟
關閉
自動
@@ -272,4 +272,5 @@
請傳送所有以下詳細資訊,以讓我們可以方便診斷問題
%d%%
文字縮放
+ 實現性導覽
diff --git a/core/src/main/res/values-zh/strings.xml b/core/src/main/res/values-zh/strings.xml
index aad89a977..6cafcb7e4 100644
--- a/core/src/main/res/values-zh/strings.xml
+++ b/core/src/main/res/values-zh/strings.xml
@@ -3,6 +3,7 @@
* A Chinese Wikipedian
* Abijeet Patro
* Akagisoy
+* Arthur2e5
* Josephine W.
* Liuxinyu970226
* SomeyaMako
@@ -24,15 +25,38 @@
退出全屏
朗读
停止朗读
+ 支持Kiwix
+ 成为服务器共享书籍
保存媒体
尝试保存该媒体时出错!
已将媒体作为%s保存至Android/media/org.kiwix…/
搜索
选择一个内容文件(*.zim)
在新标签页打开链接?
+ 热点服务频段
+ 未能启动热点
+ 你的热点好像已经打开了。请先关闭 Wi-Fi 热点再继续。
转到WIFI设置
+ 运行热点
+ 请先选择书籍
+ 未能启动服务器。请打开热点。
+ 未能启动服务器。
+ 成功启动服务器。
+ 成功停止服务器。
+ 热点已开启
+ 以下为您的本地热点的信息。\nSSID:%1$s \n密码:%2$s
+ 选择你想在服务器上共享的文件
+ 正在启动服务器
+ 书籍共享说明
检测到Wi-Fi连接
+ 要在其他设备上看书,就先要确认所有设备都连接到同一个 WiFi 网络。
+ 要让此功能运作,你需要先手动启动 Wi-Fi 热点,或者确定主机和接受设备在同一个 Wi-Fi 网络上。
+ 继续
+ Kiwix 热点
+ 启动服务器
+ 中止服务器
错误:找不到选定的ZIM文件。
+ 无法打开 zim 文件
错误:选定的文件不是有效ZIM文件。
错误:加载条目(网址:%1$s)失败。
显示
@@ -57,9 +81,11 @@
清空历史
清空最近搜索及标签历史
已清空所有历史
- 清空所有历史
+ 清除书签
+ 清空所有历史?
分享
删除
+ 取消
已移除最近搜索
您可以向左滑动来查看此条目的内容
明白了
@@ -87,7 +113,7 @@
图书馆
文件已删除
没有文件
- 缺少下载此文件所需的空间。
+ 缺少下载所需的空间。
可用空间:
简单
没有图片
@@ -95,17 +121,17 @@
没有网络连接
Kiwix可以做什么?
Kiwix是一个离线内容阅读器。它的功能就好像一个浏览器,但它不需要访问在线网页,而是从ZIM格式文件中读取内容。
- 尽管Kiwix原本设计用于提供维基百科离线内容,但它也可以阅读其他内容。
+ 尽管Kiwix原本设计用于提供维基百科离线内容,但它也可以阅读其他内容。
内容在哪里?
我们的内容存储在Kiwix网站中。
它们以ZIM格式的文件存在。这里是其中一些:
u2022维基百科分别提供每种语言版本
u2022同样可用于例如维基解密或维基文库等其他内容
- 您可以在应用中下载您选择的ZIM文件,也可以在电脑端下载您想要的文件,并在稍后将其转移至您的SD卡中。
+ 您可以在应用中下载您选择的ZIM文件,也可以在电脑端下载您想要的文件,并在稍后将其转移至您的SD卡中。
在应用中下载的ZIM文件被存放于外部存储中一个名为Kiwix的文件夹内。
存储
当前文件夹
- 对不起,我们无法删除此文件。您应尝试改用文件管理器。
+ 对不起,我们无法删除一些文件。您应尝试改用文件管理器。
暂停
恢复
停止
@@ -131,7 +157,7 @@
昨天
访问外部链接时警告
对额外费用或离线时链接不可用弹出警告
- 正在进入外部链接
+ 正在进入外部链接!
您正在输入外部链接。这可能导致额外数据转移费用,或当您离线时不能工作。您是否要继续?
不要再次询问
选择的语言:
@@ -143,6 +169,7 @@
应用程序日志
设备细节
发送详情
+ 新建标签页
获取内容
%s个条目
入门
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
index e4870988e..5c1a6cd21 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -70,6 +70,7 @@
All History Cleared
Clear bookmarks
All Bookmarks Cleared
+ Selected Bookmarks Cleared
Clear All History?
Share
Share ZIM files with:
@@ -264,8 +265,10 @@
No Bookmarks
No History
Device Default
- Delete History?
- Delete Bookmarks?
+ Delete All History?
+ Delete Selected History?
+ Delete All Bookmarks?
+ Delete Selected Bookmarks?
On
Off
Auto
diff --git a/core/src/test/java/org/kiwix/kiwixmobile/core/StorageObserverTest.kt b/core/src/test/java/org/kiwix/kiwixmobile/core/StorageObserverTest.kt
index 33cfdc22b..bc85ba3fb 100644
--- a/core/src/test/java/org/kiwix/kiwixmobile/core/StorageObserverTest.kt
+++ b/core/src/test/java/org/kiwix/kiwixmobile/core/StorageObserverTest.kt
@@ -21,6 +21,7 @@ package org.kiwix.kiwixmobile.core
import io.mockk.clearAllMocks
import io.mockk.every
import io.mockk.mockk
+import io.mockk.verify
import io.reactivex.processors.PublishProcessor
import io.reactivex.schedulers.Schedulers
import org.junit.jupiter.api.AfterAll
@@ -68,11 +69,7 @@ class StorageObserverTest {
every { fileSearch.scan() } returns files
every { downloadDao.downloads() } returns downloads
every { readerFactory.create(file) } returns zimFileReader
- storageObserver = StorageObserver(
- downloadDao,
- fileSearch,
- readerFactory
- )
+ storageObserver = StorageObserver(downloadDao, fileSearch, readerFactory)
}
@Test
@@ -92,6 +89,7 @@ class StorageObserverTest {
booksOnFileSystem().assertValues(
listOf(bookOnDisk(book = expectedBook, file = file))
)
+ verify { zimFileReader.dispose() }
}
private fun booksOnFileSystem() = storageObserver.booksOnFileSystem
diff --git a/core/src/test/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/DeleteBookmarkItemsTest.kt b/core/src/test/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/DeleteBookmarkItemsTest.kt
index d2325e5ce..f7df458fb 100644
--- a/core/src/test/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/DeleteBookmarkItemsTest.kt
+++ b/core/src/test/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/DeleteBookmarkItemsTest.kt
@@ -63,4 +63,13 @@ internal class DeleteBookmarkItemsTest {
)
verify { effects.offer(ShowToast(R.string.all_bookmarks_cleared)) }
}
+
+ @Test
+ fun `delete with selected items shows toast with message selected bookmarks cleared`() {
+ item1.isSelected = true
+ DeleteBookmarkItems(effects, bookmarkState(listOf(item1, item2)), bookmarksDao).invokeWith(
+ activity
+ )
+ verify { effects.offer(ShowToast(R.string.selected_bookmarks_cleared)) }
+ }
}
diff --git a/core/src/test/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/ShowDeleteBookmarksDialogTest.kt b/core/src/test/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/ShowDeleteBookmarksDialogTest.kt
index 98a4450f2..8d6d7d78d 100644
--- a/core/src/test/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/ShowDeleteBookmarksDialogTest.kt
+++ b/core/src/test/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/ShowDeleteBookmarksDialogTest.kt
@@ -26,29 +26,61 @@ import io.reactivex.processors.PublishProcessor
import org.junit.jupiter.api.Test
import org.kiwix.kiwixmobile.core.base.SideEffect
import org.kiwix.kiwixmobile.core.dao.NewBookmarksDao
+import org.kiwix.kiwixmobile.core.page.bookmark
import org.kiwix.kiwixmobile.core.page.bookmark.BookmarksActivity
import org.kiwix.kiwixmobile.core.page.bookmarkState
import org.kiwix.kiwixmobile.core.utils.DialogShower
-import org.kiwix.kiwixmobile.core.utils.KiwixDialog
+import org.kiwix.kiwixmobile.core.utils.KiwixDialog.DeleteAllBookmarks
+import org.kiwix.kiwixmobile.core.utils.KiwixDialog.DeleteSelectedBookmarks
internal class ShowDeleteBookmarksDialogTest {
+ val effects = mockk>>(relaxed = true)
+ private val newBookmarksDao = mockk()
+ val activity = mockk()
+ private val dialogShower = mockk(relaxed = true)
@Test
fun `invoke with shows dialog that offers ConfirmDelete action`() {
- val effects = mockk>>(relaxed = true)
- val newBookmarksDao = mockk()
- val activity = mockk()
val showDeleteBookmarksDialog =
ShowDeleteBookmarksDialog(effects, bookmarkState(), newBookmarksDao)
- val dialogShower = mockk()
+ mockkActivityInjection(showDeleteBookmarksDialog)
+ val lambdaSlot = slot<() -> Unit>()
+ showDeleteBookmarksDialog.invokeWith(activity)
+ verify { dialogShower.show(any(), capture(lambdaSlot)) }
+ lambdaSlot.captured.invoke()
+ verify { effects.offer(DeleteBookmarkItems(effects, bookmarkState(), newBookmarksDao)) }
+ }
+
+ private fun mockkActivityInjection(showDeleteBookmarksDialog: ShowDeleteBookmarksDialog) {
every { activity.activityComponent.inject(showDeleteBookmarksDialog) } answers {
showDeleteBookmarksDialog.dialogShower = dialogShower
Unit
}
- val lambdaSlot = slot<() -> Unit>()
+ }
+
+ @Test
+ fun `invoke with selected items shows dialog with DeleteSelectedBookmarks title`() {
+ val showDeleteBookmarksDialog =
+ ShowDeleteBookmarksDialog(
+ effects,
+ bookmarkState(listOf(bookmark(isSelected = true))),
+ newBookmarksDao
+ )
+ mockkActivityInjection(showDeleteBookmarksDialog)
showDeleteBookmarksDialog.invokeWith(activity)
- verify { dialogShower.show(KiwixDialog.DeleteBookmarks, capture(lambdaSlot)) }
- lambdaSlot.captured.invoke()
- verify { effects.offer(DeleteBookmarkItems(effects, bookmarkState(), newBookmarksDao)) }
+ verify { dialogShower.show(DeleteSelectedBookmarks, any()) }
+ }
+
+ @Test
+ fun `invoke with no selected items shows dialog with DeleteAllBookmarks title`() {
+ val showDeleteBookmarksDialog =
+ ShowDeleteBookmarksDialog(
+ effects,
+ bookmarkState(listOf(bookmark())),
+ newBookmarksDao
+ )
+ mockkActivityInjection(showDeleteBookmarksDialog)
+ showDeleteBookmarksDialog.invokeWith(activity)
+ verify { dialogShower.show(DeleteAllBookmarks, any()) }
}
}
diff --git a/core/src/test/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/effects/ShowDeleteHistoryDialogTest.kt b/core/src/test/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/effects/ShowDeleteHistoryDialogTest.kt
index f1469a51f..5c0dbcad7 100644
--- a/core/src/test/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/effects/ShowDeleteHistoryDialogTest.kt
+++ b/core/src/test/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/effects/ShowDeleteHistoryDialogTest.kt
@@ -9,27 +9,53 @@ import org.junit.jupiter.api.Test
import org.kiwix.kiwixmobile.core.base.SideEffect
import org.kiwix.kiwixmobile.core.dao.HistoryDao
import org.kiwix.kiwixmobile.core.page.history.HistoryActivity
+import org.kiwix.kiwixmobile.core.page.historyItem
import org.kiwix.kiwixmobile.core.page.historyState
import org.kiwix.kiwixmobile.core.utils.DialogShower
import org.kiwix.kiwixmobile.core.utils.KiwixDialog.DeleteAllHistory
+import org.kiwix.kiwixmobile.core.utils.KiwixDialog.DeleteSelectedHistory
internal class ShowDeleteHistoryDialogTest {
+ val effects = mockk>>(relaxed = true)
+ private val historyDao = mockk()
+ val activity = mockk()
+ private val dialogShower = mockk(relaxed = true)
@Test
fun `invoke with shows dialog that offers ConfirmDelete action`() {
- val effects = mockk>>(relaxed = true)
- val historyDao = mockk()
- val activity = mockk()
val showDeleteHistoryDialog = ShowDeleteHistoryDialog(effects, historyState(), historyDao)
- val dialogShower = mockk()
+ mockkActivityInjection(showDeleteHistoryDialog)
+ val lambdaSlot = slot<() -> Unit>()
+ showDeleteHistoryDialog.invokeWith(activity)
+ verify { dialogShower.show(any(), capture(lambdaSlot)) }
+ lambdaSlot.captured.invoke()
+ verify { effects.offer(DeleteHistoryItems(historyState(), historyDao)) }
+ }
+
+ @Test
+ fun `invoke with selected item shows dialog with delete selected items title`() {
+ val showDeleteHistoryDialog = ShowDeleteHistoryDialog(
+ effects,
+ historyState(listOf(historyItem(isSelected = true))),
+ historyDao
+ )
+ mockkActivityInjection(showDeleteHistoryDialog)
+ showDeleteHistoryDialog.invokeWith(activity)
+ verify { dialogShower.show(DeleteSelectedHistory, any()) }
+ }
+
+ @Test
+ fun `invoke with no selected items shows dialog with delete all items title`() {
+ val showDeleteHistoryDialog = ShowDeleteHistoryDialog(effects, historyState(), historyDao)
+ mockkActivityInjection(showDeleteHistoryDialog)
+ showDeleteHistoryDialog.invokeWith(activity)
+ verify { dialogShower.show(DeleteAllHistory, any()) }
+ }
+
+ private fun mockkActivityInjection(showDeleteHistoryDialog: ShowDeleteHistoryDialog) {
every { activity.activityComponent.inject(showDeleteHistoryDialog) } answers {
showDeleteHistoryDialog.dialogShower = dialogShower
Unit
}
- val lambdaSlot = slot<() -> Unit>()
- showDeleteHistoryDialog.invokeWith(activity)
- verify { dialogShower.show(DeleteAllHistory, capture(lambdaSlot)) }
- lambdaSlot.captured.invoke()
- verify { effects.offer(DeleteHistoryItems(historyState(), historyDao)) }
}
}
diff --git a/core/src/test/java/org/kiwix/kiwixmobile/core/search/viewmodel/ZimSearchResultGeneratorTest.kt b/core/src/test/java/org/kiwix/kiwixmobile/core/search/viewmodel/ZimSearchResultGeneratorTest.kt
index 6cd6b1ef7..39949fca5 100644
--- a/core/src/test/java/org/kiwix/kiwixmobile/core/search/viewmodel/ZimSearchResultGeneratorTest.kt
+++ b/core/src/test/java/org/kiwix/kiwixmobile/core/search/viewmodel/ZimSearchResultGeneratorTest.kt
@@ -24,7 +24,6 @@ import io.mockk.verify
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
-import org.kiwix.kiwixmobile.core.reader.SearchResult
import org.kiwix.kiwixmobile.core.reader.ZimFileReader
import org.kiwix.kiwixmobile.core.reader.ZimReaderContainer
import org.kiwix.kiwixmobile.core.search.SearchSuggestion
@@ -38,7 +37,7 @@ internal class ZimSearchResultGeneratorTest {
private val zimFileReader: ZimFileReader = mockk()
private val zimSearchResultGenerator: ZimSearchResultGenerator =
- ZimSearchResultGenerator(sharedPreferenceUtil, zimReaderContainer)
+ ZimSearchResultGenerator(zimReaderContainer)
@BeforeEach
internal fun setUp() {
@@ -51,48 +50,19 @@ internal class ZimSearchResultGeneratorTest {
.isEqualTo(emptyList())
}
- @Test
- fun `full text results removes blanks`() {
- val searchTerm = " "
- every { sharedPreferenceUtil.prefFullTextSearch } returns true
- val validItem = mockk()
- val filteredItem = mockk()
- val invalidTerminalItem = mockk()
- every { zimReaderContainer.getNextResult() } returnsMany listOf(
- validItem,
- filteredItem,
- invalidTerminalItem
- )
- val validItemTitle = "title"
- every { validItem.title } returns validItemTitle
- every { filteredItem.title } returns " "
- every { invalidTerminalItem.title } returns null
- assertThat(zimSearchResultGenerator.generateSearchResults(searchTerm))
- .isEqualTo(listOf(ZimSearchResultListItem(validItemTitle)))
- verify { zimReaderContainer.search(searchTerm, 200) }
- }
-
- @Test
- internal fun `null search result terminates full text result sequence`() {
- every { sharedPreferenceUtil.prefFullTextSearch } returns true
- val searchResult = mockk()
- every { zimReaderContainer.getNextResult() } returnsMany listOf(null, searchResult)
- every { searchResult.title } returns "title"
- assertThat(zimSearchResultGenerator.generateSearchResults("searchTerm"))
- .isEqualTo(emptyList())
- }
-
@Test
internal fun `suggestion results are distinct`() {
val validTitle = "title"
val searchTerm = " "
val item = mockk()
- every { sharedPreferenceUtil.prefFullTextSearch } returns false
every { zimFileReader.searchSuggestions(" ", 200) } returns true
every { zimFileReader.getNextSuggestion() } returnsMany listOf(item, item, null)
every { item.title } returns validTitle
assertThat(zimSearchResultGenerator.generateSearchResults(searchTerm))
.isEqualTo(listOf(ZimSearchResultListItem(validTitle)))
- verify { zimFileReader.searchSuggestions(searchTerm, 200) }
+ verify {
+ zimFileReader.searchSuggestions(searchTerm, 200)
+ zimFileReader.dispose()
+ }
}
}
diff --git a/custom/src/main/res/values-cs/strings.xml b/custom/src/main/res/values-cs/strings.xml
index a4785c3e1..b896b76b9 100644
--- a/custom/src/main/res/values-cs/strings.xml
+++ b/custom/src/main/res/values-cs/strings.xml
@@ -1,6 +1,10 @@
+ Zkusit znovu
+ Stáhnout
+ Neplatná instalace. Stáhněte si prosím Zim.\nZkontrolujte, zda je zapnuto WiFi a zda máte v úložišti dostatek místa
diff --git a/custom/src/main/res/values-gsw/strings.xml b/custom/src/main/res/values-gsw/strings.xml
new file mode 100644
index 000000000..81c66cfff
--- /dev/null
+++ b/custom/src/main/res/values-gsw/strings.xml
@@ -0,0 +1,8 @@
+
+
+
+ Nomal probierä
+ Abelade
+
diff --git a/custom/src/main/res/values-nl/strings.xml b/custom/src/main/res/values-nl/strings.xml
new file mode 100644
index 000000000..ae35f8e7d
--- /dev/null
+++ b/custom/src/main/res/values-nl/strings.xml
@@ -0,0 +1,8 @@
+
+
+
+ Opnieuw proberen
+ Downloaden
+
diff --git a/custom/src/main/res/values-ru/strings.xml b/custom/src/main/res/values-ru/strings.xml
new file mode 100644
index 000000000..1a2933127
--- /dev/null
+++ b/custom/src/main/res/values-ru/strings.xml
@@ -0,0 +1,9 @@
+
+
+
+ Повторить
+ Скачать
+ Проблема с установкой. Пожалуйста скачайте Zim.\n Проверьте, что WiFi включён и в хранилище достаточно места
+