#2154 merge with develop

This commit is contained in:
HissPirat 2020-07-20 09:43:02 +02:00
commit 8ed6eea0fa
88 changed files with 1701 additions and 569 deletions

View File

@ -15,7 +15,7 @@ jobs:
coverageReport:
strategy:
matrix:
api-level: [21, 29]
api-level: [21, 21]
fail-fast: false
runs-on: macOS-latest
steps:

View File

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

View File

@ -1,3 +1,27 @@
3.3.4
NEW: Updated translations
BUGFIX: Fullscreen videos were not displaying
BUGFIX: Urls containing "?" were not loading properly
BUGFIX: Notifications were erroneously allowing the user to pause a download
BUGFIX: Urls with "#" anchors now load to the correct portion of the page
BUGFIX: Save Media on long click was not working
+ Lots More
3.3.3
BUGFIX: Crash on older devices due to OKHTTP
3.3.2
NEW: Better flow for hosting books
NEW: Control text zoom for zim files
NEW: Bookmarks/History internals rewrite
NEW: Updated translations
BUGFIX: Search results were inaccurate when typing too quickly
BUGFIX: new zim scheme for addressing content
BUGFIX: Native memory leaks fixed
BUGFIX: fix crash on returning to webview from search result
BUGFIX: some zim files could not be found after downloading
+ Lots More
3.3.1
NEW: Send Diagnostic Reports
BUGFIX: Loading older zim files could fail

View File

@ -54,6 +54,14 @@ All branches should have distinct history and should be visually easy to follow,
If you wish to rebase you should be following the [Golden Rule](https://www.atlassian.com/git/tutorials/merging-vs-rebasing#the-golden-rule-of-rebasing) and ahere to the advice in the heading [Aside: Rebase as cleanup is awesome in the coding lifecycle](https://www.atlassian.com/git/articles/git-team-workflows-merge-or-rebase).
### Design and style
For an overview of how to make design changes to Kiwix Android, check out [DESIGN.md](https://github.com/kiwix/kiwix-android/edit/develop/DESIGN.md).
### Adding new string resources
To add a new string resource see [STRING_RESOURCES.md](https://github.com/kiwix/kiwix-android/edit/develop/STRING_RESOURCES.md).
### Building
The Kiwix app is split into 3 modules

72
DESIGN.md Normal file
View File

@ -0,0 +1,72 @@
# Design
This file intends to provide information on how to work with design in the Kiwix android applicaiton.
## Colors
<img src="https://user-images.githubusercontent.com/22193232/83739760-4ef07080-a656-11ea-8f87-344f48e76324.png" alt="drawing" width="300"/>
The Kiwix colors are black and white with different colored accents. For Kiwix Android, black is accented by different shades of blue:
- ![#000000](https://via.placeholder.com/15/000000/000000?text=+) `#000000`/`black`
- ![#1565c0](https://via.placeholder.com/15/1565c0/000000?text=+) `#1565c0`/`denim_blue800`
- ![#42a5f5](https://via.placeholder.com/15/42a5f5/000000?text=+) `#42a5f5`/`denim_blue400`
- ![#2196F3](https://via.placeholder.com/15/2196F3/000000?text=+) `#2196F3`/`dodger_blue`
> Color indicates which elements are interactive, how they relate to other elements, and their level of prominence. Important elements should stand out the most [1].
For a guide on how to apply colors to UI, see ["Applying color to UI - Material Design"](https://material.io/design/color/applying-color-to-ui.html#backdrop).
## Themes
Kiwix uses themes to apply styles to views. This means that instead of adding a specific color or style to each view in the application, a theme should be set.
Themes are defined in `res/values/themes.xml` or `res/values-night/themes.xml` depending on night/day.
The following steps should be followed to set a color or style of a view.
1. Define the color or style:
* Define the color in `core/colors.xml`. Use good naming (`denim_blue`, `mine_shaft_gray` etc..). Our recommended tool for color naming is [Chirag Mehta - Name that color](http://chir.ag/projects/name-that-color/#6195ED).
* Define the style in `core/styles.xml`. For our default styles, applied with theme attributes, the naming convention is `Widget.KiwixTheme.*` and these should ideally inherit from their `Widget.MaterialComponent.*`, should no such parent exist, it is generally advisable to google "how to style [Component]". When there are two or more of a view that differ stylistically from our default styling, but are identical to each other visually, it is appropriate to extract a style to keep the XML DRY. A non-default style should use a descriptive name. e.x. `list_item_title`.
2. Add the color or style to a specific theme attribute in `themes.xml`.
3. Make sure that the color or style works in both day and night mode. If it does not, add the dark mode compatible attribute to `values-night/themes.xml`.
For a video on how to work with themes, styles and colors, see [Developing Themes with Style (Android Dev Summit '19)](https://www.youtube.com/watch?v=Owkf8DhAOSo).
## Night Mode / Dark Theme
Night mode is a different theme that has many benefits such as saving battery and improving visibility in low light conditions [2]. When doing any design, make sure the new design works in dark mode. Night mode can be activated from the systems settings or from the kiwix app.
Whenever a resource exists in both `res/*-night` and `res/*` it will be used as such. For example: `kiwix_icon_with_title.png` exists in both `res/drawable` and `res/drawable-night` which means that the image in `res/drawable-night` will be used automagically in night mode. For further reading on development with dark mode, see [Material Design - Dark Theme](https://developer.android.com/guide/topics/ui/look-and-feel/darktheme).
## Typography
Text should contrast well, use the correct weight and size to present content as clearly and efficiently as possible.
Views using the same style often use different text style. Therefore text styles, and view styles are seperated and can be used simultaneously. To keep an android application consistent in style, thirteen text style attributes should be defined. These style attributes can be generated ([Material Design type scale generator](https://material.io/design/typography/the-type-system.html#type-scale)), or defined by editing `core/../values/type.xml`.
All text should have a text style to simplifiy appearance changes. To set a text style, simply set the `textAppearance` property using one of the thirteen text style attributes from `core/../values/type.xml`. Text can also be grouped if they are related and uses the same text style. This grouping can be done by creating a style that inherits, or sets a specific text appearance. E.x. `<style name="no_content_text" parent="TextAppearance.KiwixTheme.Headline5" />`.
Additional reading can be found at [Material Design - Type System](https://material.io/design/typography/the-type-system.html#type-scale).
## Resources
Following is a list of resources that can and should be used to support a design decision.
1. [Material Design](https://material.io/) - Googles design guide that should be followed to keep Android applications consistent.
2. [Design for Android](https://developer.android.com/design) - Another design guide by Google, this one is specifically for Android while Material Design is more general.
3. [Figma](https://www.figma.com) - A tool that can be used to mock design ideas.
## Accessibility
Accessibility is an important part of Android applications. Especially applications that are as widely used as Kiwix. As such, accessibility should be part of design decisions. This can include choices such as:
- Having text with a large font and good contrast ratio.
- Large simple controls.
- Consistent controls and navigation. (consistent to Kiwix, and other Android applications.)
Kiwix does not yet contain content descriptions for its UI elements. This can prohibit users with for example poor eyesight to use Kiwix successfully. Therefore, newly introduced interactive elements should contain content descriptions (boy scout rule applies here too!).
See ["Make apps more accessible"](https://developer.android.com/guide/topics/ui/accessibility/apps) for a more detailed guide on accessibility. [Firefox Fenix](https://github.com/mozilla-mobile/shared-docs/blob/master/android/accessibility_guide.md) also has a great concise description of accessibility. A third accessibility resource is googles [list of key steps](https://android-developers.googleblog.com/2012/04/accessibility-are-you-serving-all-your.html) for making sure an Android application is accessible.
<br/>
<br/>
<br/>
<br/>
[1] https://material.io/design/color/the-color-system.html 2020-06-04
[2] https://developer.android.com/guide/topics/ui/look-and-feel/darktheme 2020-07-02

20
STRING_RESOURCES.md Normal file
View File

@ -0,0 +1,20 @@
# String resources
All user visible strings in an Android application should be listed in strings.xml files to allow for easy translation, replacement and modification. Newly added string resources are imported by translatewiki and are then manually translated. After translations are complete the translations are merged with Kiwix Android.
## How do I add a new string resource?
Start by adding your new string resource `new_string` to `values/strings.xml` in English. That is:
```
...
<string name="new_string">New String</string>
...
```
You will now have to describe the string in `values-qq/strings.xml` with where and how the new string is used. E.x. for the string `<string name="on">On</string>`:
`values-qq/strings.xml:`
```
...
<string name="on">This is used in the settings screen to turn on the night mode.</string>
...
```
- The values in `values/strings.xml` are the strings that are going to be displayed in the Kiwix application to the user.
- The values in `values-qq/strings.xml` are only visible to the translator and are only there to help them make a correct translation.

View File

@ -11,7 +11,7 @@ apply(from = rootProject.file("jacoco.gradle"))
ext {
set("versionMajor", 3)
set("versionMinor", 3)
set("versionPatch", 1)
set("versionPatch", 4)
}
fun generateVersionName() = "${ext["versionMajor"]}.${ext["versionMinor"]}.${ext["versionPatch"]}"

View File

@ -7,6 +7,7 @@
<ID>EmptyFunctionBlock:ZimHostActivity.kt$ZimHostActivity.&lt;no name provided&gt;${}</ID>
<ID>ForbiddenComment:KiwixReaderFragment.kt$KiwixReaderFragment$// TODO: Show to user</ID>
<ID>LongParameterList:ZimManageViewModel.kt$ZimManageViewModel$( booksOnFileSystem: List&lt;BookOnDisk&gt;, activeDownloads: List&lt;DownloadModel&gt;, allLanguages: List&lt;Language&gt;, libraryNetworkEntity: LibraryNetworkEntity, filter: String, fileSystemState: FileSystemState )</ID>
<ID>LongParameterList:ZimManageViewModel.kt$ZimManageViewModel$( private val downloadDao: FetchDownloadDao, private val bookDao: NewBookDao, private val languageDao: NewLanguagesDao, private val storageObserver: StorageObserver, private val kiwixService: KiwixService, private val context: Application, private val connectivityBroadcastReceiver: ConnectivityBroadcastReceiver, private val bookUtils: BookUtils, private val fat32Checker: Fat32Checker, private val defaultLanguageProvider: DefaultLanguageProvider, private val dataSource: DataSource )</ID>
<ID>MagicNumber:LibraryListItem.kt$LibraryListItem.LibraryDownloadItem$1000L</ID>
<ID>MagicNumber:ShareFiles.kt$ShareFiles$24</ID>
<ID>MagicNumber:ZimManageViewModel.kt$ZimManageViewModel$5</ID>

View File

@ -28,7 +28,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/activity_vertical_margin"
app:ipi_currentPageIndicatorColor="@color/blue800"
app:ipi_currentPageIndicatorColor="@color/denim_blue800"
app:ipi_pageIndicatorColor="@color/blueTransparent"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -52,7 +52,7 @@
android:layout_height="2dp"
android:layout_marginStart="5dp"
android:layout_marginEnd="5dp"
android:background="@color/accent"
android:background="@color/dodger_blue"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/text_view_device_name" />
@ -113,7 +113,7 @@
android:layout_marginStart="5dp"
android:layout_marginTop="200dp"
android:layout_marginEnd="5dp"
android:background="@color/accent"
android:background="@color/dodger_blue"
app:layout_constraintBottom_toTopOf="@+id/text_view_files_for_transfer"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"

View File

@ -42,7 +42,7 @@
android:layout_marginBottom="8dp"
android:background="@color/greenTick"
android:text="@string/start_server_label"
android:textColor="@color/white"
android:textColor="@color/alabaster_white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />

View File

@ -48,7 +48,7 @@
style="@style/list_item_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/text_secondary"
android:textColor="?textSecondary"
android:layout_gravity="start"
tools:text="Description" />
@ -71,7 +71,7 @@
style="@style/list_item_body"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textColor="@color/text_tertiary"
android:textColor="?textTertiary"
android:layout_weight="1"
tools:text="In Progress" />
@ -80,7 +80,7 @@
style="@style/list_item_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/text_tertiary"
android:textColor="?textTertiary"
tools:text="1min 10secs" />
</LinearLayout>
</LinearLayout>

View File

@ -47,7 +47,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/activity_horizontal_margin"
android:textColor="@color/text_secondary"
android:textColor="?textSecondary"
android:maxLines="2"
android:ellipsize="end"
app:layout_constraintEnd_toEndOf="parent"
@ -60,7 +60,7 @@
style="@style/list_item_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/text_tertiary"
android:textColor="?textTertiary"
app:layout_constraintStart_toStartOf="@+id/libraryBookTitle"
app:layout_constraintTop_toBottomOf="@+id/libraryBookDescription"
tools:text="File Size" />
@ -70,7 +70,7 @@
style="@style/list_item_body"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textColor="@color/text_tertiary"
android:textColor="?textTertiary"
android:gravity="start"
android:layout_marginRight="10dp"
android:layout_marginEnd="10dp"
@ -84,7 +84,7 @@
style="@style/list_item_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/text_tertiary"
android:textColor="?textTertiary"
app:layout_constraintStart_toStartOf="@+id/libraryBookCreator"
app:layout_constraintTop_toBottomOf="@+id/libraryBookCreator"
tools:text="Publisher" />
@ -95,7 +95,7 @@
style="@style/list_item_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/text_tertiary"
android:textColor="?textTertiary"
android:layout_marginEnd="@dimen/activity_horizontal_margin"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/libraryBookSize"
@ -106,7 +106,7 @@
style="@style/list_item_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/text_tertiary"
android:textColor="?textTertiary"
android:layout_marginStart="50dp"
app:layout_constraintEnd_toEndOf="@+id/libraryBookDate"
app:layout_constraintTop_toBottomOf="@+id/libraryBookDate"
@ -117,7 +117,7 @@
style="@style/list_item_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/text_tertiary"
android:textColor="?textTertiary"
app:layout_constraintEnd_toEndOf="@+id/libraryBookLanguage"
app:layout_constraintTop_toBottomOf="@+id/libraryBookLanguage"
tools:text="File Name" />

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Authors:
* Joetaras
-->
<resources>
<string name="file_system_does_not_support_4gb">\'U file system tune non ge supporte le file cchiù granne de 4GB</string>
<string name="detecting_file_system">Stoche a condrolle ce \'u file system tune pò ccrejà le file cchiù granne de 4GB</string>
<string name="cannot_open_file">Aprture d\u fail sciute a male\nPe piacere pruève arrete a cercà stu fail jndr\’à Schede d\'u despositive d\'a libbreria toje.</string>
</resources>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Authors:
* Klaras
-->
<resources>
<string name="file_system_does_not_support_4gb">Váš souborový systém nepodporuje soubory větší než 4GB</string>
<string name="detecting_file_system">Zjišťování, zda souborový systém dokáže vytvořit 4GB soubory</string>
<string name="cannot_open_file">Nepodařilo se otevřít soubor\nZkuste prosím tento soubor vyhledat na kartě Zařízení ve Vaší knihovně</string>
</resources>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Authors:
* Susann Schweden
-->
<resources>
<string name="file_system_does_not_support_4gb">Ihr Dateisystem unterstützt keine Dateien über 4GB</string>
<string name="detecting_file_system">Untersuche, ob das Dateisystem Dateien mit 4GB erstellen kann</string>
<string name="cannot_open_file">Konnte Datei nicht öffnen\nBitte versuchen Sie, in der Geräteregisterkarte Ihrer Bibliothek nach dieser Datei zu suchen</string>
</resources>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Authors:
* Smavrina
-->
<resources>
<string name="file_system_does_not_support_4gb">Ваша файловая система не поддерживает файлы больше 4GB</string>
<string name="detecting_file_system">Проверка, поддерживает ли файловая система файлы больше 4GB</string>
<string name="cannot_open_file">Невозможно открыть файл\nПожалуйста, попытайтесь найти этот файл во вкладке “Устройство” в вашей библиотеке</string>
</resources>

View File

@ -16,7 +16,7 @@ dependencies {
implementation("com.hiya:jacoco-android:0.2")
implementation("org.jlleitschuh.gradle:ktlint-gradle:9.2.1")
implementation("com.google.apis:google-api-services-androidpublisher:v3-rev129-1.25.0")
implementation("io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.5.1")
implementation("io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.9.1")
implementation(gradleApi())
implementation(localGroovy())

View File

@ -12,13 +12,13 @@ import org.gradle.plugin.use.PluginDependencySpec
* YOU are responsible for updating manually the dependency version.
*/
object Versions {
const val androidx_test_espresso: String = "3.1.1" // available: "3.2.0"
const val androidx_test_espresso: String = "3.2.0"
const val com_squareup_retrofit2: String = "2.5.0" // available: "2.9.0"
const val org_jetbrains_kotlin: String = "1.3.72"
const val com_google_dagger: String = "2.26" // available: "2.28"
const val com_google_dagger: String = "2.26" // available: "2.28.1"
const val com_yahoo_squidb: String = "2.0.0" // available: "3.2.3"
@ -26,11 +26,11 @@ object Versions {
const val androidx_test: String = "1.2.0"
const val io_objectbox: String = "2.3.4" // available: "2.6.0"
const val io_objectbox: String = "2.6.0"
const val org_jacoco: String = "0.7.9"
const val io_mockk: String = "1.9.2" // available: "1.10.0"
const val io_mockk: String = "1.10.0"
const val android_arch_lifecycle_extensions: String = "1.1.1"
@ -38,17 +38,17 @@ object Versions {
const val de_fayard_buildsrcversions_gradle_plugin: String = "0.7.0"
const val com_github_triplet_play_gradle_plugin: String = "2.6.2" // available: "2.8.0"
const val com_github_triplet_play_gradle_plugin: String = "2.8.0"
const val multidex_instrumentation: String = "2.0.0"
const val javax_annotation_api: String = "1.3.2"
const val logging_interceptor: String = "3.12.1" // available: "4.7.2"
const val logging_interceptor: String = "3.6.0" // available: "4.7.2"
const val ink_page_indicator: String = "1.3.0"
const val leakcanary_android: String = "2.2" // available: "2.3"
const val leakcanary_android: String = "2.4"
const val constraintlayout: String = "1.1.3"
@ -56,23 +56,23 @@ object Versions {
const val preference_ktx: String = "1.1.1"
const val junit_jupiter: String = "5.4.2" // available: "5.6.2"
const val junit_jupiter: String = "5.6.2"
const val mockwebserver: String = "3.6.0" // available: "4.7.2"
const val xfetch2okhttp: String = "3.1.4"
const val assertj_core: String = "3.11.1" // available: "3.16.1"
const val assertj_core: String = "3.16.1"
const val core_testing: String = "2.1.0"
const val fragment_ktx: String = "1.2.1" // available: "1.2.4"
const val fragment_ktx: String = "1.2.5"
const val lint_gradle: String = "27.0.0"
const val testing_ktx: String = "1.1.1" // available: "1.1.2"
const val testing_ktx: String = "1.1.2"
const val threetenabp: String = "1.1.1" // available: "1.2.4"
const val threetenabp: String = "1.2.4"
const val uiautomator: String = "2.2.0"
@ -82,13 +82,13 @@ object Versions {
const val appcompat: String = "1.1.0"
const val rxandroid: String = "2.1.0" // available: "2.1.1"
const val rxandroid: String = "2.1.1"
const val core_ktx: String = "1.2.0" // available: "1.3.0"
const val core_ktx: String = "1.3.0"
const val kiwixlib: String = "9.1.2"
const val kiwixlib: String = "9.2.3"
const val material: String = "1.1.0-beta02" // available: "1.1.0"
const val material: String = "1.1.0"
const val multidex: String = "2.0.1"
@ -98,22 +98,22 @@ object Versions {
const val jsr305: String = "3.0.2"
const val ktlint: String = "0.36.0" // available: "0.37.1"
const val ktlint: String = "0.36.0" // available: "0.37.2"
const val okhttp: String = "3.12.1" // available: "4.7.2"
const val okhttp: String = "3.6.0" // available: "4.7.2"
const val rxjava: String = "2.2.5" // available: "2.2.19"
const val rxjava: String = "2.2.19"
const val aapt2: String = "4.0.0-6051327"
const val junit: String = "1.1.1"
/**
* Current version: "5.6.1"
* Current version: "6.1.1"
* See issue 19: How to update Gradle itself?
* https://github.com/jmfayard/buildSrcVersions/issues/19
*/
const val gradleLatestVersion: String = "6.5"
const val gradleLatestVersion: String = "6.5.1"
}
/**

View File

@ -5,12 +5,16 @@
<ID>EmptyFunctionBlock:BooksOnDiskViewHolder.kt$BookOnDiskViewHolder.BookViewHolder${ }</ID>
<ID>EmptyFunctionBlock:FetchDownloadMonitor.kt$FetchDownloadMonitor.&lt;no name provided&gt;${}</ID>
<ID>ForbiddenComment:JNIInitialiser.kt$JNIInitialiser$// TODO: Consider surfacing to user</ID>
<ID>LongParameterList:KiwixDialog.kt$KiwixDialog$( val title: Int?, val message: Int?, val positiveMessage: Int, val negativeMessage: Int?, val cancelable: Boolean = true, val icon: Int? = null, val neutralMessage: Int? = null, val getView: (() -&gt; View)? = null )</ID>
<ID>LongParameterList:MainMenu.kt$MainMenu$( private val activity: Activity, zimFileReader: ZimFileReader?, menu: Menu, webViews: MutableList&lt;KiwixWebView&gt;, urlIsValid: Boolean, disableReadAloud: Boolean = false, disableTabs: Boolean = false, private val menuClickListener: MenuClickListener )</ID>
<ID>LongParameterList:MainMenu.kt$MainMenu.Factory$( menu: Menu, webViews: MutableList&lt;KiwixWebView&gt;, urlIsValid: Boolean, menuClickListener: MenuClickListener, disableReadAloud: Boolean, disableTabs: Boolean )</ID>
<ID>LongParameterList:Repository.kt$Repository$( @param:IO private val io: Scheduler, @param:MainThread private val mainThread: Scheduler, private val bookDao: NewBookDao, private val bookmarksDao: NewBookmarksDao, private val historyDao: HistoryDao, private val languageDao: NewLanguagesDao, private val recentSearchDao: NewRecentSearchDao, private val zimReaderContainer: ZimReaderContainer )</ID>
<ID>MagicNumber:ArticleCount.kt$ArticleCount$1000.0</ID>
<ID>MagicNumber:ArticleCount.kt$ArticleCount$3</ID>
<ID>MagicNumber:CoreSplashActivity.kt$CoreSplashActivity$10</ID>
<ID>MagicNumber:DownloadItem.kt$DownloadItem$1000L</ID>
<ID>MagicNumber:DownloaderModule.kt$DownloaderModule$5</ID>
<ID>MagicNumber:FetchDownloadNotificationManager.kt$FetchDownloadNotificationManager$100</ID>
<ID>MagicNumber:FetchDownloadRequester.kt$10</ID>
<ID>MagicNumber:FileUtils.kt$FileUtils$3</ID>
<ID>MagicNumber:JNIInitialiser.kt$JNIInitialiser$1024</ID>

View File

@ -10,67 +10,84 @@
"properties": [
{
"id": "1:4248832782795400383",
"name": "id"
"name": "id",
"type": 6,
"flags": 1
},
{
"id": "2:2644395282642821815",
"name": "file"
"name": "file",
"type": 9
},
{
"id": "4:3145196313443812205",
"name": "bookId"
"name": "bookId",
"type": 9
},
{
"id": "5:597997298666253723",
"name": "title"
"name": "title",
"type": 9
},
{
"id": "6:8028706022307902131",
"name": "description"
"name": "description",
"type": 9
},
{
"id": "7:4257578632233656657",
"name": "language"
"name": "language",
"type": 9
},
{
"id": "8:7771231471515752814",
"name": "creator"
"name": "creator",
"type": 9
},
{
"id": "9:892859866782486178",
"name": "publisher"
"name": "publisher",
"type": 9
},
{
"id": "10:1925365063061602631",
"name": "date"
"name": "date",
"type": 9
},
{
"id": "11:1111395522977944209",
"name": "url"
"name": "url",
"type": 9
},
{
"id": "12:3765116904492031525",
"name": "articleCount"
"name": "articleCount",
"type": 9
},
{
"id": "13:5901922417972273396",
"name": "mediaCount"
"name": "mediaCount",
"type": 9
},
{
"id": "14:1229023184984372602",
"name": "size"
"name": "size",
"type": 9
},
{
"id": "15:6851856791814492874",
"name": "name"
"name": "name",
"type": 9
},
{
"id": "16:6142333908132117423",
"name": "favIcon"
"name": "favIcon",
"type": 9
},
{
"id": "17:2701677664876214591",
"name": "tags"
"name": "tags",
"type": 9
}
],
"relations": []
@ -82,19 +99,26 @@
"properties": [
{
"id": "1:7795244654012809404",
"name": "id"
"name": "id",
"type": 6,
"flags": 1
},
{
"id": "2:9116495537035444904",
"name": "locale"
"name": "locale",
"type": 9
},
{
"id": "3:452531964346972307",
"name": "active"
"name": "active",
"type": 1,
"flags": 4
},
{
"id": "4:8812214350305159407",
"name": "occurencesOfLanguage"
"name": "occurencesOfLanguage",
"type": 5,
"flags": 4
}
],
"relations": []
@ -106,39 +130,50 @@
"properties": [
{
"id": "1:4390013783965661495",
"name": "id"
"name": "id",
"type": 6,
"flags": 1
},
{
"id": "2:6814436941523306636",
"name": "zimId"
"name": "zimId",
"type": 9
},
{
"id": "3:3445023139891930306",
"name": "zimName"
"name": "zimName",
"type": 9
},
{
"id": "4:1707638909668210783",
"name": "zimFilePath"
"name": "zimFilePath",
"type": 9
},
{
"id": "5:7291321834337975178",
"name": "favicon"
"name": "favicon",
"type": 9
},
{
"id": "6:8790316103579116510",
"name": "historyUrl"
"name": "historyUrl",
"type": 9
},
{
"id": "7:6718164131929659510",
"name": "historyTitle"
"name": "historyTitle",
"type": 9
},
{
"id": "9:6094002746638656105",
"name": "timeStamp"
"name": "timeStamp",
"type": 6,
"flags": 4
},
{
"id": "10:8395372122440621469",
"name": "dateString"
"name": "dateString",
"type": 9
}
],
"relations": []
@ -150,31 +185,39 @@
"properties": [
{
"id": "1:6627309171741917147",
"name": "id"
"name": "id",
"type": 6,
"flags": 1
},
{
"id": "2:6862771806221961183",
"name": "zimId"
"name": "zimId",
"type": 9
},
{
"id": "3:4312769031500860715",
"name": "zimName"
"name": "zimName",
"type": 9
},
{
"id": "4:8187716343071473669",
"name": "zimFilePath"
"name": "zimFilePath",
"type": 9
},
{
"id": "5:5652763871458286201",
"name": "bookmarkUrl"
"name": "bookmarkUrl",
"type": 9
},
{
"id": "6:4537799665712767375",
"name": "bookmarkTitle"
"name": "bookmarkTitle",
"type": 9
},
{
"id": "7:3805929017981932900",
"name": "favicon"
"name": "favicon",
"type": 9
}
],
"relations": []
@ -186,15 +229,19 @@
"properties": [
{
"id": "1:7759655437795315973",
"name": "id"
"name": "id",
"type": 6,
"flags": 1
},
{
"id": "2:3924214186055484853",
"name": "searchTerm"
"name": "searchTerm",
"type": 9
},
{
"id": "3:3320858395373055542",
"name": "zimId"
"name": "zimId",
"type": 9
}
],
"relations": []
@ -206,95 +253,126 @@
"properties": [
{
"id": "1:7366957113003324901",
"name": "id"
"name": "id",
"type": 6,
"flags": 1
},
{
"id": "3:3174500111130052488",
"name": "bookId"
"name": "bookId",
"type": 9
},
{
"id": "4:3949362784963767166",
"name": "title"
"name": "title",
"type": 9
},
{
"id": "5:812546090900770347",
"name": "description"
"name": "description",
"type": 9
},
{
"id": "6:3129463483413863468",
"name": "language"
"name": "language",
"type": 9
},
{
"id": "7:3402286918039853548",
"name": "creator"
"name": "creator",
"type": 9
},
{
"id": "8:4732753967507809221",
"name": "publisher"
"name": "publisher",
"type": 9
},
{
"id": "9:3239042532048399134",
"name": "date"
"name": "date",
"type": 9
},
{
"id": "10:1136584919149973914",
"name": "url"
"name": "url",
"type": 9
},
{
"id": "11:4252749008345744598",
"name": "articleCount"
"name": "articleCount",
"type": 9
},
{
"id": "12:8625493380854102341",
"name": "mediaCount"
"name": "mediaCount",
"type": 9
},
{
"id": "13:2787210837560254021",
"name": "size"
"name": "size",
"type": 9
},
{
"id": "14:2052022387195277817",
"name": "name"
"name": "name",
"type": 9
},
{
"id": "15:1976493094677983679",
"name": "favIcon"
"name": "favIcon",
"type": 9
},
{
"id": "16:217454020763036675",
"name": "etaInMilliSeconds"
"name": "etaInMilliSeconds",
"type": 6,
"flags": 4
},
{
"id": "17:1136630637198901642",
"name": "bytesDownloaded"
"name": "bytesDownloaded",
"type": 6,
"flags": 4
},
{
"id": "18:8939019296899137627",
"name": "totalSizeOfDownload"
"name": "totalSizeOfDownload",
"type": 6,
"flags": 4
},
{
"id": "19:3378789699620971394",
"name": "status"
"name": "status",
"type": 5,
"flags": 2
},
{
"id": "20:6867355950440828062",
"name": "error"
"name": "error",
"type": 5,
"flags": 2
},
{
"id": "21:5555873126720275555",
"name": "file"
"name": "file",
"type": 9
},
{
"id": "22:2724607601244650879",
"name": "downloadId"
"name": "downloadId",
"type": 6,
"flags": 4
},
{
"id": "23:5485468735259326535",
"name": "progress"
"name": "progress",
"type": 5,
"flags": 4
},
{
"id": "24:4272820830206771469",
"name": "tags"
"name": "tags",
"type": 9
}
],
"relations": []
@ -304,8 +382,8 @@
"lastIndexId": "4:4868787482832538530",
"lastRelationId": "0:0",
"lastSequenceId": "0:0",
"modelVersion": 4,
"modelVersionParserMinimum": 4,
"modelVersion": 5,
"modelVersionParserMinimum": 5,
"retiredEntityUids": [
349148274283701276,
7257718270326155947

View File

@ -10,67 +10,84 @@
"properties": [
{
"id": "1:4248832782795400383",
"name": "id"
"name": "id",
"type": 6,
"flags": 1
},
{
"id": "2:2644395282642821815",
"name": "file"
"name": "file",
"type": 9
},
{
"id": "4:3145196313443812205",
"name": "bookId"
"name": "bookId",
"type": 9
},
{
"id": "5:597997298666253723",
"name": "title"
"name": "title",
"type": 9
},
{
"id": "6:8028706022307902131",
"name": "description"
"name": "description",
"type": 9
},
{
"id": "7:4257578632233656657",
"name": "language"
"name": "language",
"type": 9
},
{
"id": "8:7771231471515752814",
"name": "creator"
"name": "creator",
"type": 9
},
{
"id": "9:892859866782486178",
"name": "publisher"
"name": "publisher",
"type": 9
},
{
"id": "10:1925365063061602631",
"name": "date"
"name": "date",
"type": 9
},
{
"id": "11:1111395522977944209",
"name": "url"
"name": "url",
"type": 9
},
{
"id": "12:3765116904492031525",
"name": "articleCount"
"name": "articleCount",
"type": 9
},
{
"id": "13:5901922417972273396",
"name": "mediaCount"
"name": "mediaCount",
"type": 9
},
{
"id": "14:1229023184984372602",
"name": "size"
"name": "size",
"type": 9
},
{
"id": "15:6851856791814492874",
"name": "name"
"name": "name",
"type": 9
},
{
"id": "16:6142333908132117423",
"name": "favIcon"
"name": "favIcon",
"type": 9
},
{
"id": "17:2701677664876214591",
"name": "tags"
"name": "tags",
"type": 9
}
],
"relations": []
@ -82,19 +99,26 @@
"properties": [
{
"id": "1:7795244654012809404",
"name": "id"
"name": "id",
"type": 6,
"flags": 1
},
{
"id": "2:9116495537035444904",
"name": "locale"
"name": "locale",
"type": 9
},
{
"id": "3:452531964346972307",
"name": "active"
"name": "active",
"type": 1,
"flags": 4
},
{
"id": "4:8812214350305159407",
"name": "occurencesOfLanguage"
"name": "occurencesOfLanguage",
"type": 5,
"flags": 4
}
],
"relations": []
@ -106,39 +130,50 @@
"properties": [
{
"id": "1:4390013783965661495",
"name": "id"
"name": "id",
"type": 6,
"flags": 1
},
{
"id": "2:6814436941523306636",
"name": "zimId"
"name": "zimId",
"type": 9
},
{
"id": "3:3445023139891930306",
"name": "zimName"
"name": "zimName",
"type": 9
},
{
"id": "4:1707638909668210783",
"name": "zimFilePath"
"name": "zimFilePath",
"type": 9
},
{
"id": "5:7291321834337975178",
"name": "favicon"
"name": "favicon",
"type": 9
},
{
"id": "6:8790316103579116510",
"name": "historyUrl"
"name": "historyUrl",
"type": 9
},
{
"id": "7:6718164131929659510",
"name": "historyTitle"
"name": "historyTitle",
"type": 9
},
{
"id": "9:6094002746638656105",
"name": "timeStamp"
"name": "timeStamp",
"type": 6,
"flags": 4
},
{
"id": "10:8395372122440621469",
"name": "dateString"
"name": "dateString",
"type": 9
}
],
"relations": []
@ -150,31 +185,39 @@
"properties": [
{
"id": "1:6627309171741917147",
"name": "id"
"name": "id",
"type": 6,
"flags": 1
},
{
"id": "2:6862771806221961183",
"name": "zimId"
"name": "zimId",
"type": 9
},
{
"id": "3:4312769031500860715",
"name": "zimName"
"name": "zimName",
"type": 9
},
{
"id": "4:8187716343071473669",
"name": "zimFilePath"
"name": "zimFilePath",
"type": 9
},
{
"id": "5:5652763871458286201",
"name": "bookmarkUrl"
"name": "bookmarkUrl",
"type": 9
},
{
"id": "6:4537799665712767375",
"name": "bookmarkTitle"
"name": "bookmarkTitle",
"type": 9
},
{
"id": "7:3805929017981932900",
"name": "favicon"
"name": "favicon",
"type": 9
}
],
"relations": []
@ -186,15 +229,19 @@
"properties": [
{
"id": "1:7759655437795315973",
"name": "id"
"name": "id",
"type": 6,
"flags": 1
},
{
"id": "2:3924214186055484853",
"name": "searchTerm"
"name": "searchTerm",
"type": 9
},
{
"id": "3:3320858395373055542",
"name": "zimId"
"name": "zimId",
"type": 9
}
],
"relations": []
@ -206,95 +253,126 @@
"properties": [
{
"id": "1:7366957113003324901",
"name": "id"
"name": "id",
"type": 6,
"flags": 1
},
{
"id": "3:3174500111130052488",
"name": "bookId"
"name": "bookId",
"type": 9
},
{
"id": "4:3949362784963767166",
"name": "title"
"name": "title",
"type": 9
},
{
"id": "5:812546090900770347",
"name": "description"
"name": "description",
"type": 9
},
{
"id": "6:3129463483413863468",
"name": "language"
"name": "language",
"type": 9
},
{
"id": "7:3402286918039853548",
"name": "creator"
"name": "creator",
"type": 9
},
{
"id": "8:4732753967507809221",
"name": "publisher"
"name": "publisher",
"type": 9
},
{
"id": "9:3239042532048399134",
"name": "date"
"name": "date",
"type": 9
},
{
"id": "10:1136584919149973914",
"name": "url"
"name": "url",
"type": 9
},
{
"id": "11:4252749008345744598",
"name": "articleCount"
"name": "articleCount",
"type": 9
},
{
"id": "12:8625493380854102341",
"name": "mediaCount"
"name": "mediaCount",
"type": 9
},
{
"id": "13:2787210837560254021",
"name": "size"
"name": "size",
"type": 9
},
{
"id": "14:2052022387195277817",
"name": "name"
"name": "name",
"type": 9
},
{
"id": "15:1976493094677983679",
"name": "favIcon"
"name": "favIcon",
"type": 9
},
{
"id": "16:217454020763036675",
"name": "etaInMilliSeconds"
"name": "etaInMilliSeconds",
"type": 6,
"flags": 4
},
{
"id": "17:1136630637198901642",
"name": "bytesDownloaded"
"name": "bytesDownloaded",
"type": 6,
"flags": 4
},
{
"id": "18:8939019296899137627",
"name": "totalSizeOfDownload"
"name": "totalSizeOfDownload",
"type": 6,
"flags": 4
},
{
"id": "19:3378789699620971394",
"name": "status"
"name": "status",
"type": 5,
"flags": 2
},
{
"id": "20:6867355950440828062",
"name": "error"
"name": "error",
"type": 5,
"flags": 2
},
{
"id": "21:5555873126720275555",
"name": "file"
"name": "file",
"type": 9
},
{
"id": "22:2724607601244650879",
"name": "downloadId"
"name": "downloadId",
"type": 6,
"flags": 4
},
{
"id": "23:5485468735259326535",
"name": "progress"
"name": "progress",
"type": 5,
"flags": 4
},
{
"id": "24:4272820830206771469",
"name": "tags"
"name": "tags",
"type": 9
}
],
"relations": []
@ -304,8 +382,8 @@
"lastIndexId": "4:4868787482832538530",
"lastRelationId": "0:0",
"lastSequenceId": "0:0",
"modelVersion": 4,
"modelVersionParserMinimum": 4,
"modelVersion": 5,
"modelVersionParserMinimum": 5,
"retiredEntityUids": [
349148274283701276,
7257718270326155947

View File

@ -20,10 +20,10 @@ package org.kiwix.kiwixmobile.core
import android.app.Application
import android.content.Context
import android.os.Build
import android.os.Environment
import android.os.Environment.MEDIA_MOUNTED
import android.os.Environment.getExternalStorageState
import android.os.StrictMode
import android.os.StrictMode.VmPolicy
import android.util.Log
import androidx.appcompat.app.AppCompatDelegate
import androidx.multidex.MultiDex
import com.jakewharton.threetenabp.AndroidThreeTen
@ -31,8 +31,7 @@ import org.kiwix.kiwixmobile.core.data.local.KiwixDatabase
import org.kiwix.kiwixmobile.core.di.components.CoreComponent
import org.kiwix.kiwixmobile.core.di.components.DaggerCoreComponent
import org.kiwix.kiwixmobile.core.downloader.DownloadMonitor
import java.io.File
import java.io.IOException
import org.kiwix.kiwixmobile.core.utils.files.FileLogger
import javax.inject.Inject
abstract class CoreApp : Application() {
@ -64,6 +63,9 @@ abstract class CoreApp : Application() {
@Inject
internal lateinit var jniInitialiser: JNIInitialiser
@Inject
lateinit var fileLogger: FileLogger
override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
if (BuildConfig.DEBUG) {
@ -78,11 +80,11 @@ abstract class CoreApp : Application() {
.context(this)
.build()
AndroidThreeTen.init(this)
writeLogFile()
coreComponent.inject(this)
kiwixDatabase.forceMigration()
downloadMonitor.init()
nightModeConfig.init()
fileLogger.writeLogFile(this)
configureStrictMode()
}
@ -128,31 +130,7 @@ abstract class CoreApp : Application() {
}
}
private fun writeLogFile() {
if (isExternalStorageWritable) {
val appDirectory =
File(Environment.getExternalStorageDirectory().toString() + "/Kiwix")
val logFile = File(appDirectory, "logcat.txt")
Log.d("KIWIX", "Writing all logs into [" + logFile.path + "]")
// create app folder
if (!appDirectory.exists()) {
appDirectory.mkdir()
}
if (logFile.exists() && logFile.isFile) {
logFile.delete()
}
// clear the previous logcat and then write the new one to the file
try {
logFile.createNewFile()
Runtime.getRuntime().exec("logcat -c")
Runtime.getRuntime().exec("logcat -f " + logFile.path + " -s kiwix")
} catch (e: IOException) {
Log.e("KIWIX", "Error while writing logcat.txt", e)
}
}
}
/* Checks if external storage is available for read and write */
val isExternalStorageWritable: Boolean
get() = Environment.MEDIA_MOUNTED == Environment.getExternalStorageState()
get() = MEDIA_MOUNTED == getExternalStorageState()
}

View File

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

View File

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

View File

@ -23,7 +23,7 @@ import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.Button;
import android.widget.CheckBox;
import androidx.core.content.ContextCompat;
@ -42,10 +42,12 @@ import org.kiwix.kiwixmobile.core.dao.NewBookDao;
import org.kiwix.kiwixmobile.core.di.components.CoreComponent;
import org.kiwix.kiwixmobile.core.entity.LibraryNetworkEntity;
import org.kiwix.kiwixmobile.core.reader.ZimReaderContainer;
import org.kiwix.kiwixmobile.core.utils.files.FileLogger;
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDiskListItem.BookOnDisk;
import org.kiwix.kiwixmobile.zim_manager.MountInfo;
import org.kiwix.kiwixmobile.zim_manager.MountPointProducer;
import static androidx.core.content.FileProvider.getUriForFile;
import static org.kiwix.kiwixmobile.core.utils.LanguageUtils.getCurrentLocale;
public class ErrorActivity extends BaseActivity {
@ -58,6 +60,8 @@ public class ErrorActivity extends BaseActivity {
ZimReaderContainer zimReaderContainer;
@Inject
MountPointProducer mountPointProducer;
@Inject
FileLogger fileLogger;
@BindView(R2.id.reportButton)
Button reportButton;
@ -112,16 +116,10 @@ public class ErrorActivity extends BaseActivity {
String body = getBody();
if (allowLogsCheckbox.isChecked()) {
File appDirectory = new File(Environment.getExternalStorageDirectory() + "/Kiwix");
File logFile = new File(appDirectory, "logcat.txt");
if (logFile.exists()) {
Uri path =
FileProvider.getUriForFile(this,
getApplicationContext().getPackageName() + ".fileprovider",
logFile);
emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
emailIntent.putExtra(Intent.EXTRA_STREAM, path);
}
File file = fileLogger.writeLogFile(this);
Uri path = getUriForFile(this, getApplicationContext().getPackageName()+ ".fileprovider", file);
emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
emailIntent.putExtra(Intent.EXTRA_STREAM, path);
}
if (allowCrashCheckbox.isChecked() && exception != null) {

View File

@ -204,8 +204,8 @@ public abstract class CoreReaderFragment extends BaseFragment
CoordinatorLayout snackbarRoot;
@BindView(R2.id.fullscreen_video_container)
ViewGroup videoView;
View root;
@BindView(R2.id.activity_main_root)
View activityMainRoot;
@Inject
protected MainContract.Presenter presenter;
@ -290,7 +290,7 @@ public abstract class CoreReaderFragment extends BaseFragment
}
};
private Disposable bookmarkingDisposable;
private Boolean isBookmarked;
private boolean isBookmarked;
@NotNull @Override public Super onActionModeStarted(@NotNull ActionMode mode,
@NotNull AppCompatActivity activity) {
@ -333,7 +333,7 @@ public abstract class CoreReaderFragment extends BaseFragment
@Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
root = inflater.inflate(R.layout.fragment_main, container, false);
View root = inflater.inflate(R.layout.fragment_main, container, false);
ButterKnife.bind(this, root);
AppCompatActivity activity = (AppCompatActivity) getActivity();
presenter.attachView(this);
@ -430,7 +430,8 @@ public abstract class CoreReaderFragment extends BaseFragment
private void handleIntentExtras(Intent intent) {
if (intent.hasExtra(TAG_FILE_SEARCHED)) {
searchForTitle(intent.getStringExtra(TAG_FILE_SEARCHED), mainMenu.isInTabSwitcher());
searchForTitle(intent.getStringExtra(TAG_FILE_SEARCHED),
isInTabSwitcher());
selectTab(webViewList.size() - 1);
}
if (intent.hasExtra(EXTRA_CHOSE_X_URL)) {
@ -444,6 +445,10 @@ public abstract class CoreReaderFragment extends BaseFragment
handleNotificationIntent(intent);
}
private boolean isInTabSwitcher() {
return mainMenu != null && mainMenu.isInTabSwitcher();
}
private void handleNotificationIntent(Intent intent) {
if (intent.hasExtra(DOWNLOAD_NOTIFICATION_TITLE)) {
new Handler().postDelayed(() -> {
@ -461,20 +466,23 @@ public abstract class CoreReaderFragment extends BaseFragment
documentParser = new DocumentParser(new DocumentParser.SectionsListener() {
@Override
public void sectionsLoaded(String title, List<TableDrawerAdapter.DocumentSection> sections) {
for (TableDrawerAdapter.DocumentSection section : sections) {
if (section.title.contains("REPLACE_")) {
section.title = getResourceString(getActivity().getApplicationContext(), section.title);
if (isAdded()) {
for (TableDrawerAdapter.DocumentSection section : sections) {
if (section.title.contains("REPLACE_")) {
section.title =
getResourceString(getActivity().getApplicationContext(), section.title);
}
}
documentSections.addAll(sections);
if (title.contains("REPLACE_")) {
tableDrawerAdapter.setTitle(
getResourceString(getActivity().getApplicationContext(), title));
} else {
tableDrawerAdapter.setTitle(title);
}
tableDrawerAdapter.setSections(documentSections);
tableDrawerAdapter.notifyDataSetChanged();
}
documentSections.addAll(sections);
if (title.contains("REPLACE_")) {
tableDrawerAdapter.setTitle(
getResourceString(getActivity().getApplicationContext(), title));
} else {
tableDrawerAdapter.setTitle(title);
}
tableDrawerAdapter.setSections(documentSections);
tableDrawerAdapter.notifyDataSetChanged();
}
@Override
@ -706,13 +714,14 @@ public abstract class CoreReaderFragment extends BaseFragment
try {
startActivity(goToMarket);
} catch (ActivityNotFoundException e) {
startActivity(new Intent(Intent.ACTION_VIEW,
kiwixBrowserMarketUri));
startActivity(new Intent(Intent.ACTION_VIEW, kiwixBrowserMarketUri));
}
}
private void updateTitle() {
actionBar.setTitle(getValidTitle(zimReaderContainer.getZimFileTitle()));
if (isAdded()) {
actionBar.setTitle(getValidTitle(zimReaderContainer.getZimFileTitle()));
}
}
private String getValidTitle(String zimFileTitle) {
@ -827,12 +836,12 @@ public abstract class CoreReaderFragment extends BaseFragment
KiwixWebView webView;
if (!isHideToolbar) {
webView = new ToolbarScrollingKiwixWebView(
getActivity(), this, attrs, (ViewGroup) root, videoView,
getActivity(), this, attrs, (ViewGroup) activityMainRoot, videoView,
createWebClient(this, zimReaderContainer),
toolbarContainer, bottomToolbar, sharedPreferenceUtil);
} else {
webView = new ToolbarStaticKiwixWebView(
getActivity(), this, attrs, (ViewGroup) root, videoView,
getActivity(), this, attrs, (ViewGroup) activityMainRoot, videoView,
createWebClient(this, zimReaderContainer),
sharedPreferenceUtil);
}
@ -919,7 +928,7 @@ public abstract class CoreReaderFragment extends BaseFragment
@NotNull @Override public KiwixWebView getCurrentWebView() {
if (webViewList.size() == 0) return newMainPageTab();
if (currentWebViewIndex < webViewList.size()) {
if (currentWebViewIndex < webViewList.size() && currentWebViewIndex > 0) {
return webViewList.get(currentWebViewIndex);
} else {
return webViewList.get(0);
@ -1288,7 +1297,7 @@ public abstract class CoreReaderFragment extends BaseFragment
goToBookmarks();
return Unit.INSTANCE;
},
getResources().getColor(R.color.white)
getResources().getColor(R.color.alabaster_white)
);
} else {
ContextExtensionsKt.toast(getActivity(), R.string.unable_to_add_to_bookmarks,
@ -1485,7 +1494,7 @@ public abstract class CoreReaderFragment extends BaseFragment
switch (requestCode) {
case MainMenuKt.REQUEST_FILE_SEARCH:
if (resultCode == RESULT_OK) {
boolean wasFromTabSwitcher = mainMenu != null && mainMenu.isInTabSwitcher();
boolean wasFromTabSwitcher = isInTabSwitcher();
hideTabSwitcher();
String title =
data.getStringExtra(TAG_FILE_SEARCHED).replace("<b>", "").replace("</b>", "");
@ -1648,28 +1657,30 @@ public abstract class CoreReaderFragment extends BaseFragment
@Override
public void webViewUrlFinishedLoading() {
updateTableOfContents();
tabsAdapter.notifyDataSetChanged();
updateUrlProcessor();
updateBottomToolbarArrowsAlpha();
String url = getCurrentWebView().getUrl();
final ZimFileReader zimFileReader = zimReaderContainer.getZimFileReader();
if (hasValidFileAndUrl(url, zimFileReader)) {
final long timeStamp = System.currentTimeMillis();
SimpleDateFormat sdf =
new SimpleDateFormat("d MMM yyyy", LanguageUtils.getCurrentLocale(getActivity()));
HistoryItem history = new HistoryItem(
getCurrentWebView().getUrl(),
getCurrentWebView().getTitle(),
sdf.format(new Date(timeStamp)),
timeStamp,
zimFileReader
);
presenter.saveHistory(history);
if (isAdded()) {
updateTableOfContents();
tabsAdapter.notifyDataSetChanged();
updateUrlProcessor();
updateBottomToolbarArrowsAlpha();
String url = getCurrentWebView().getUrl();
final ZimFileReader zimFileReader = zimReaderContainer.getZimFileReader();
if (hasValidFileAndUrl(url, zimFileReader)) {
final long timeStamp = System.currentTimeMillis();
SimpleDateFormat sdf =
new SimpleDateFormat("d MMM yyyy", LanguageUtils.getCurrentLocale(getActivity()));
HistoryItem history = new HistoryItem(
getCurrentWebView().getUrl(),
getCurrentWebView().getTitle(),
sdf.format(new Date(timeStamp)),
timeStamp,
zimFileReader
);
presenter.saveHistory(history);
}
updateBottomToolbarVisibility();
openFullScreenIfEnabled();
updateNightMode();
}
updateBottomToolbarVisibility();
openFullScreenIfEnabled();
updateNightMode();
}
protected boolean hasValidFileAndUrl(String url, ZimFileReader zimFileReader) {
@ -1745,7 +1756,7 @@ public abstract class CoreReaderFragment extends BaseFragment
.setAction(getString(R.string.open), v -> {
if (webViewList.size() > 1) selectTab(webViewList.size() - 1);
})
.setActionTextColor(getResources().getColor(R.color.white))
.setActionTextColor(getResources().getColor(R.color.alabaster_white))
.show();
} else {
newTab(url);

View File

@ -49,6 +49,7 @@ public abstract class CoreWebViewClient extends WebViewClient {
private View home;
private static String LEGACY_CONTENT_PREFIX =
Uri.parse("content://" + CoreApp.getInstance().getPackageName() + ".zim.base/").toString();
private String urlWithAnchor;
public CoreWebViewClient(
WebViewCallback callback, ZimReaderContainer zimReaderContainer) {
@ -60,6 +61,7 @@ public abstract class CoreWebViewClient extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
callback.webViewUrlLoading();
url = convertLegacyUrl(url);
urlWithAnchor = url.contains("#") ? url : null;
if (zimReaderContainer.isRedirect(url)) {
if (handleEpubAndPdf(url)) {
return true;
@ -131,9 +133,22 @@ public abstract class CoreWebViewClient extends WebViewClient {
} else {
view.removeView(home);
}
jumpToAnchor(view, url);
callback.webViewUrlFinishedLoading();
}
/*
* If 2 urls are the same aside from the `#` component then calling load
* does not trigger our loading code and the webview will go to the anchor
* */
private void jumpToAnchor(WebView view, String loadedUrl) {
if (urlWithAnchor != null && urlWithAnchor.startsWith(loadedUrl)) {
view.loadUrl(urlWithAnchor);
urlWithAnchor = null;
}
}
protected abstract void onUrlEqualToHome(WebView view);
protected abstract void onInvalidUrl(WebView view);

View File

@ -116,7 +116,7 @@ public class KiwixWebView extends VideoEnabledWebView {
|| result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
MenuItem saveMenu = menu.add(0, 1, 0, getResources().getString(R.string.save_media));
saveMenu.setOnMenuItemClickListener(item -> {
Message msg = new SaveHandler().obtainMessage();
Message msg = new SaveHandler(zimReaderContainer).obtainMessage();
requestFocusNodeHref(msg);
return true;
});
@ -152,6 +152,12 @@ public class KiwixWebView extends VideoEnabledWebView {
}
static class SaveHandler extends Handler {
private final ZimReaderContainer zimReaderContainer;
public SaveHandler(ZimReaderContainer zimReaderContainer) {
this.zimReaderContainer = zimReaderContainer;
}
private String getDecodedFileName(String url, String src) {
String fileName = "";
if (url != null) {
@ -164,7 +170,7 @@ public class KiwixWebView extends VideoEnabledWebView {
return fileName.substring(fileName.indexOf("%3A") + 1);
}
@SuppressLint("StringFormatInvalid") @Override
@Override
public void handleMessage(Message msg) {
String url = (String) msg.getData().get("url");
String src = (String) msg.getData().get("src");
@ -192,7 +198,7 @@ public class KiwixWebView extends VideoEnabledWebView {
try {
InputStream input =
CoreApp.getInstance().getContentResolver().openInputStream(source);
zimReaderContainer.load(source.toString()).getData();
OutputStream output = new FileOutputStream(storageDir);
byte[] buffer = new byte[1024];

View File

@ -49,7 +49,7 @@ private const val TAG = "ZimFileReader"
class ZimFileReader constructor(
val zimFile: File,
val jniKiwixReader: JNIKiwixReader = JNIKiwixReader(zimFile.canonicalPath),
private val jniKiwixReader: JNIKiwixReader = JNIKiwixReader(zimFile.canonicalPath),
private val nightModeConfig: NightModeConfig
) {
interface Factory {
@ -125,7 +125,7 @@ class ZimFileReader constructor(
return loadContent(uri)
}
fun readMimeType(uri: String) = uri.removeArguments().let {
fun readMimeType(uri: String) = uri.filePath.let {
it.mimeType?.takeIf(String::isNotEmpty) ?: mimeTypeFromReader(it) ?: DEFAULT_MIME_TYPE
}.also { Log.d(TAG, "getting mimetype for $uri = $it") }
@ -192,7 +192,7 @@ class ZimFileReader constructor(
}
private fun getContentAndMimeType(uri: String) = with(JNIKiwixString()) {
getContent(url = JNIKiwixString(uri.filePath.removeArguments()), mime = this) to value
getContent(url = JNIKiwixString(uri.filePath), mime = this) to value
}
private fun getContent(
@ -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
@ -254,11 +258,10 @@ class ZimFileReader constructor(
}
}
private fun String.removeArguments() = substringBefore("?")
private val Uri.filePath: String
get() = toString().filePath
private val String.filePath: String
get() = substringAfter(CONTENT_PREFIX).substringBefore("#")
get() = substringAfter(CONTENT_PREFIX).substringBefore("#").substringBefore("?")
private val String.mimeType: String?
get() = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
MimeTypeMap.getFileExtensionFromUrl(this)

View File

@ -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<String>()
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) =

View File

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

View File

@ -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();
}

View File

@ -0,0 +1,66 @@
/*
* Kiwix Android
* Copyright (c) 2020 Kiwix <android.kiwix.org>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.kiwix.kiwixmobile.core.utils.files
import android.content.Context
import android.util.Log
import java.io.File
import java.io.IOException
import java.lang.System.currentTimeMillis
import javax.inject.Inject
import javax.inject.Singleton
/** Authored by s-ayush2903 on 19 June 2020 */
/** A class for writing logs to the file in the device */
@Singleton
class FileLogger @Inject constructor() {
fun writeLogFile(context: Context): File {
// Create a new folder in private storage with name: logs
val logDir = File(context.filesDir, "logs")
val logFile = File(logDir, fileName)
Log.d("KIWIX", "Writing all logs into [" + logDir.path + "]")
if (!logDir.exists()) {
logDir.mkdir()
}
// Delete the pre-existing file
if (logDir.exists() && logFile.isFile) {
Log.d(TAG, "writeLogFile: Deleting preExistingFile")
logFile.delete()
}
try {
logDir.createNewFile()
Runtime.getRuntime().exec("logcat -f $logFile")
Runtime.getRuntime().exec("logcat -b all -d")
} catch (e: IOException) {
Log.e("KIWIX", "Error while writing $fileName! ", e)
}
return logFile
}
companion object {
private const val TAG = "FileLogger"
private val fileName: String
get() = "logs" + currentTimeMillis() + ".txt"
}
}

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<!-- The background color, preferably the same as your normal theme -->
<item android:drawable="@color/mine_shaft_gray900" />
<item>
<bitmap
android:gravity="center"
android:src="@drawable/kiwix_icon_with_title" />
</item>
</layer-list>

View File

@ -2,7 +2,7 @@
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<!-- The background color, preferably the same as your normal theme -->
<item android:drawable="@color/color_surface" />
<item android:drawable="@color/alabaster_white" />
<item>
<bitmap
android:gravity="center"

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white" />
<solid android:color="@color/alabaster_white" />
<corners android:radius="3dip" />
<padding
android:bottom="0dip"

View File

@ -17,7 +17,7 @@
android:layout_marginEnd="8dp"
android:text="@string/crash_description"
android:textAlignment="center"
android:textColor="@color/white"
android:textColor="@color/alabaster_white"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
@ -30,7 +30,7 @@
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="32dp"
android:background="@color/white"
android:background="@color/alabaster_white"
android:text="@string/crash_button_confirm"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
@ -58,7 +58,7 @@
android:layout_marginTop="60dp"
android:layout_marginEnd="8dp"
android:text="@string/crash_title"
android:textColor="@color/white"
android:textColor="@color/alabaster_white"
android:textSize="24sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.505"
@ -101,7 +101,7 @@
android:layout_marginTop="8dp"
android:checked="true"
android:text="@string/crash_checkbox_language"
android:textColor="@color/white" />
android:textColor="@color/alabaster_white" />
<CheckBox
android:id="@+id/allowLogs"
@ -112,7 +112,7 @@
android:layout_marginTop="8dp"
android:checked="true"
android:text="@string/crash_checkbox_logs"
android:textColor="@color/white" />
android:textColor="@color/alabaster_white" />
<CheckBox
android:id="@+id/allowCrash"
@ -123,7 +123,7 @@
android:layout_marginTop="8dp"
android:checked="true"
android:text="@string/crash_checkbox_exception"
android:textColor="@color/white" />
android:textColor="@color/alabaster_white" />
<CheckBox
android:id="@+id/allowZims"
@ -134,7 +134,7 @@
android:layout_marginTop="8dp"
android:checked="true"
android:text="@string/crash_checkbox_zimfiles"
android:textColor="@color/white" />
android:textColor="@color/alabaster_white" />
<CheckBox
android:id="@+id/allowDeviceDetails"
@ -145,7 +145,7 @@
android:layout_marginTop="8dp"
android:checked="true"
android:text="@string/crash_checkbox_device"
android:textColor="@color/white" />
android:textColor="@color/alabaster_white" />
<CheckBox
android:id="@+id/allowFileSystemDetails"
@ -156,7 +156,7 @@
android:layout_marginTop="8dp"
android:checked="true"
android:text="@string/crash_checkbox_file_system"
android:textColor="@color/white" />
android:textColor="@color/alabaster_white" />
</LinearLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -65,7 +65,7 @@
android:layout_marginEnd="8dp"
android:ellipsize="end"
android:maxLines="2"
android:textColor="@color/text_secondary"
android:textColor="?textSecondary"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/item_book_title"
app:layout_constraintTop_toBottomOf="@id/item_book_title"
@ -76,7 +76,7 @@
style="@style/list_item_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/text_tertiary"
android:textColor="?textTertiary"
app:layout_constraintStart_toStartOf="@id/item_book_title"
app:layout_constraintTop_toBottomOf="@id/item_book_description"
tools:text="1 Jan 2018" />
@ -88,7 +88,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/activity_horizontal_margin"
android:layout_marginEnd="@dimen/activity_horizontal_margin"
android:textColor="@color/text_tertiary"
android:textColor="?textTertiary"
app:layout_constraintStart_toEndOf="@id/item_book_date"
app:layout_constraintTop_toTopOf="@id/item_book_date"
tools:text="20 GB" />
@ -100,7 +100,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/activity_horizontal_margin"
android:layout_marginEnd="@dimen/activity_horizontal_margin"
android:textColor="@color/text_tertiary"
android:textColor="?textTertiary"
app:layout_constraintStart_toEndOf="@id/item_book_size"
app:layout_constraintTop_toTopOf="@id/item_book_size"
tools:text="10.1 K articles" />

View File

@ -33,8 +33,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/activity_vertical_margin"
android:textColor="?textSecondary"
android:visibility="gone"
android:textColor="@color/text_secondary"
app:layout_constraintTop_toBottomOf="@id/item_help_title"
tools:text="@string/help_3"
tools:visibility="visible" />

View File

@ -23,7 +23,7 @@
android:layout_height="wrap_content"
android:layout_weight="0.7"
android:text="@string/search_widget_text"
android:textColor="@color/gray" />
android:textColor="@color/scorpion_gray" />
<ImageView
android:id="@+id/search_widget_star"

View File

@ -260,10 +260,11 @@
<string name="no_bookmarks">لا توجد إشارات مرجعية!</string>
<string name="no_history">لا تاريخ</string>
<string name="device_default">الجهاز الافتراضي</string>
<string name="delete_history">حذف التاريخ؟</string>
<string name="delete_bookmarks">أزل العلامات المرجعية؟</string>
<string name="delete_history" fuzzy="true">حذف التاريخ؟</string>
<string name="delete_bookmarks" fuzzy="true">أزل العلامات المرجعية؟</string>
<string name="on">تشغيل</string>
<string name="off">تعطيل</string>
<string name="auto">تلقائي</string>
<string name="crash_checkbox_file_system">تفاصيل نظام الملفات</string>
<string name="experimental_navigation">تصفح تجريبي</string>
</resources>

View File

@ -253,8 +253,8 @@
<string name="no_bookmarks">Nun hai marcadores</string>
<string name="no_history">Nun hai Historial</string>
<string name="device_default">Predeterminao del preséu</string>
<string name="delete_history">¿Desaniciar l\'Historial?</string>
<string name="delete_bookmarks">¿Desaniciar los Marcadores?</string>
<string name="delete_history" fuzzy="true">¿Desaniciar l\'Historial?</string>
<string name="delete_bookmarks" fuzzy="true">¿Desaniciar los Marcadores?</string>
<string name="on">Activáu</string>
<string name="off">Desactiváu</string>
<string name="auto">Auto</string>

View File

@ -0,0 +1,84 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Authors:
* Red Winged Duck
* Renessaince
-->
<resources>
<string name="menu_help">Дапамога</string>
<string name="menu_home">Галоўная</string>
<string name="menu_settings">Налады</string>
<string name="menu_search_in_text">Знайсьці на старонцы</string>
<string name="bookmarks">Закладкі</string>
<string name="menu_random_article">Выпадковы артыкул</string>
<string name="menu_full_screen">На ўвесь экран</string>
<string name="menu_exit_full_screen">Выйсьці з рэжыму поўнага экрану</string>
<string name="menu_read_aloud">Чытаць уголас</string>
<string name="menu_read_aloud_stop">Спыніць чытаньне ўголас</string>
<string name="menu_support_kiwix">Падтрымаць Kiwix</string>
<string name="save_media_error">Узьнікла памылка пры захаваньні мэдыяфайлу!</string>
<string name="save_media_saved">Мэдыя-файл захаваны як %s у Android/media/org.kiwix…/</string>
<string name="choose_file">Абярыце файл зьместу (*.zim)</string>
<string name="open_in_new_tab">Адкрыць спасылку ў новай укладцы?</string>
<string name="error_file_not_found">Памылка: абраны ZIM-файл ня знойдзены.</string>
<string name="error_file_invalid">Памылка: абраны файл не зьяўляецца слушным ZIM-файлам.</string>
<string name="error_article_url_not_found">Памылка: загрузка артыкула (Url: %1$s) не атрымалася.</string>
<string name="pref_info_title">Інфармацыя</string>
<string name="pref_info_version">Вэрсія</string>
<string name="pref_night_mode">Начны рэжым</string>
<string name="pref_night_mode_summary">Паказваць артыкулы ў інвэртаваных колерах</string>
<string name="pref_back_to_top">Вярнуцца ўгару</string>
<string name="pref_back_to_top_summary">Паказваць кнопку ў канцы старонкі для пракручваньня ўверх</string>
<string name="pref_language_title">Мова</string>
<string name="pref_language_chooser">Абярыце мову</string>
<string name="tts_lang_not_supported">Мова гэтай старонкі не падтрымліваецца або адпаведныя зьвесткі мовы не былі ўсталяваныя. Артыкул можа быць няправільна прачытаны.</string>
<string name="no_reader_application_installed">Ня знойдзеныя ўсталяваныя праграмы для гэтага тыпу файлу</string>
<string name="no_section_info">Ня знойдзеныя загалоўкі зьместу</string>
<string name="request_storage">Каб атрымаць доступ да зьместу оф-лайн, нам трэба мець доступ да вашага сховішча</string>
<string name="clear_recent_and_tabs_history_dialog">Вы сапраўды хочаце выдаліць гісторыю пошуку і скінуць усе актыўныя закладкі?</string>
<string name="delete_recent_search_item">Выдаліць гэты элемэнт?</string>
<string name="all_history_cleared">Уся гісторыя ачышчаная</string>
<string name="clear_all_history_dialog_title">Ачысьціць усю гісторыю?</string>
<string name="delete">Выдаліць</string>
<string name="delete_specific_search_toast">Нядаўні пошук выдалены</string>
<string name="got_it">Зразумела</string>
<string name="did_you_know">Ці ведалі вы?</string>
<string name="bookmark_added">Закладка дададзеная</string>
<string name="rate_dialog_title">Калі ласка, ацаніце нас</string>
<string name="rate_dialog_msg_1">Калі вам падабаецца карыстацца</string>
<string name="rate_dialog_msg_2">, калі ласка, знайдзіце час, каб ацаніць. Дзякуем за вашую падтрымку!</string>
<string name="rate_dialog_positive">Ацаніць!</string>
<string name="no_thanks">Не, дзякуй</string>
<string name="rate_dialog_neutral">Пазьней</string>
<string name="bookmark_removed">Закладка выдаленая</string>
<string name="pref_newtab_background_title">Адкрыць новую ўкладку на фоне</string>
<string name="pref_newtab_background_summary">Пры адкрыцьці новай укладкі, яна будзе адкрытая на заднім пляне</string>
<string name="pref_extras">Дадаткова</string>
<string name="local_zims">Прылада</string>
<string name="help_2">Што робіць Kiwix?</string>
<string name="help_5">Дзе зьмест?</string>
<string name="delete_zim_failed">Выбачайце, мы не змаглі выдаліць некаторыя файлы. Паспрабуйце скарыстацца файлавым кіраўніком.</string>
<string name="confirm_stop_download_title">Спыніць загрузку?</string>
<string name="confirm_stop_download_msg">Вы ўпэўненыя, што хочаце спыніць гэтую загрузку?</string>
<string name="external_link_popup_dialog_message">Вы ўводзіце вонкавую спасылку. Гэта можа прывесьці да зьняцьця грошай мабільным апэратарам ці проста не спрацаваць, калі вы знаходзіцеся ў офлайне. Хочаце працягнуць?</string>
<string name="do_not_ask_anymore">Болей не пытаць</string>
<string name="your_languages">Выбраныя мовы:</string>
<string name="other_languages">Іншыя мовы:</string>
<string name="crash_description">Падобна, што мы паламаліся.\n\nЦі можаце дапамагчы нам выправіць гэтую праблему, адаслаўшы наступную інфармацыю?</string>
<string name="crash_checkbox_language">Вашыя моўныя налады</string>
<string name="crash_checkbox_zimfiles">Сьпіс вашых zim-файлаў</string>
<string name="crash_checkbox_exception">Падрабязнасьці аварыі</string>
<string name="crash_checkbox_logs">Журналы праграмы</string>
<string name="crash_checkbox_device">Падрабязнасьці прылады</string>
<string name="shortcut_disabled_message">Скарот недаступны</string>
<string name="new_tab_shortcut_label">Новая ўкладка</string>
<string name="get_content_shortcut_label">Атрымаць зьмест</string>
<string name="fav_icon">Любімая іконка</string>
<string name="articleCount">%s артыкулаў</string>
<string name="get_started">Пачаць</string>
<string name="download_books">Скачвайце кнігі</string>
<string name="humankind_knowledge">Веды чалавецтва ў вашым тэлефоне.</string>
<string name="welcome_to_the_family">Вітаем у сям’і</string>
<string name="ext_storage_write_permission_denied_add_note">Нататкамі нельга карыстацца бяз доступу да сховішча</string>
<string name="permission_rationale_location">Android вымагае лякальнага дазволу на доступ праграмы да вызначэньня прыладаў</string>
<string name="no_bookmarks">Няма закладак</string>
</resources>

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Authors:
* Arya sarhan
* Cwtiyar
* Hzr115
* Kurd
* Sarchia
@ -158,6 +159,8 @@
<string name="no_results">هیچ ئەنجامێک نییە</string>
<string name="no_bookmarks">ھیچ نیشانکراوێک نییە</string>
<string name="no_history">ھیچ مێژوویەک نییە</string>
<string name="delete_history">مێژوو دەسڕیتەوە؟</string>
<string name="delete_bookmarks">کتێبە دەستنیشانکراوەکان دەسڕیتەوە؟</string>
<string name="delete_history" fuzzy="true">مێژوو دەسڕیتەوە؟</string>
<string name="delete_bookmarks" fuzzy="true">کتێبە دەستنیشانکراوەکان دەسڕیتەوە؟</string>
<string name="percentage">%d%%</string>
<string name="pref_text_zoom_title">زوومکردنی دەق</string>
</resources>

View File

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Authors:
<?xml version="1.0" encoding="utf-8"?><!-- Authors:
* Abijeet Patro
* Chmee2
* DemonioCZ
* Dvorapa
* Juandev
* Klaras
* Meliganai
* Mininis11
* Tchoř
@ -18,7 +18,7 @@
<string name="bookmarks">Záložky</string>
<string name="menu_random_article">Náhodný článek</string>
<string name="menu_full_screen">Celá obrazovka</string>
<string name="menu_exit_full_screen">Ukončit režim na celou obrazovku</string>
<string name="menu_exit_full_screen">Ukončit režim celé obrazovky</string>
<string name="menu_read_aloud">Číst nahlas</string>
<string name="menu_read_aloud_stop">Zastavit čtení nahlas</string>
<string name="menu_support_kiwix">Podpořte Kiwix</string>
@ -26,41 +26,46 @@
<string name="save_media">Uložit médium jako…</string>
<string name="save_media_error">Došlo k chybě při pokusu o uložení média!</string>
<string name="save_media_saved">Multimediální soubory uložené jako %s ve složce Android/media/org.kiwix…/</string>
<string name="search_label">Vyhledávání</string>
<string name="search_label">Hledat</string>
<string name="choose_file">Vyberte obsahový soubor (*.zim)</string>
<string name="open_in_new_tab">Otevřít odkaz v nové záložce?</string>
<string name="hotspot_service_channel_name">Servisní Kanál Hotspotu</string>
<string name="hotspot_failed_title">Selhal start hotspotu</string>
<string name="hotspot_failed_message">Zdá se, že Váš hotspot je již zapnutý. Vypněte svůj hotspot prosím, aby jste mohli pokračovat.</string>
<string name="hotspot_service_channel_name">Kanál služby Hotspot</string>
<string name="hotspot_failed_title">Spuštění hotspotu se nezdařilo</string>
<string name="hotspot_failed_message">Zdá se, že Váš hotspot je již zapnutý. Vypněte prosím svůj wifi hotspot, abyste mohli pokračovat.</string>
<string name="go_to_wifi_settings_label">Jít na nastavení WIFI</string>
<string name="hotspot_running">Spouštím Hotspot</string>
<string name="no_books_selected_toast_message">Vyberte nejprve knihy</string>
<string name="no_books_selected_toast_message">Vyberte prosím nejprve knihy</string>
<string name="server_failed_message">Nemohu spustit server. Zapněte prosím svůj hotspot</string>
<string name="server_failed_toast_message">Nelze spustit server.</string>
<string name="server_started_successfully_toast_message">Server úspěšně spuštěn.</string>
<string name="server_stopped_successfully_toast_message">Server byl úspěšně zastaven.</string>
<string name="hotspot_turned_on">Hotspot spuštěn</string>
<string name="hotspot_details_message">Následují podrobnosti vašeho hotspotu.\nSSID : %1$s \nPass : %2$s</string>
<string name="hotspot_details_message">Následují podrobnosti o vašem hotspotu.\nSSID : %1$s \nPass : %2$s</string>
<string name="server_textview_default_message">Vyberte soubory, které si přejete hostovat na svém serveru</string>
<string name="progress_dialog_starting_server">Server se spouští</string>
<string name="hotspot_dialog_title" fuzzy="true">Zapněte Váš WIFI hotspot</string>
<string name="hotspot_dialog_message" fuzzy="true">Aby tento nástroj fungoval je potřeba ručně nejprve zapnout Váš hotspot.</string>
<string name="hotspot_dialog_neutral_button" fuzzy="true">ANO, ZAPNUL/A JSEM HO</string>
<string name="hotspot_dialog_title">Pokyny k hostingu knih</string>
<string name="wifi_dialog_title">Zjištěno připojení WiFi</string>
<string name="wifi_dialog_body">Chcete-li zobrazit knihy na jiných zařízeních, zkontrolujte, zda jsou všechna zařízení připojena ke stejné síti WiFi.</string>
<string name="hotspot_dialog_message">Aby tato funkce fungovala, je třeba nejprve ručně zapnout Váš WiFi hotspot nebo se ujistit, že hostitelské a přijímací zařízení jsou připojeny na stejné síti WiFi.</string>
<string name="hotspot_dialog_neutral_button">POKRAČOVAT</string>
<string name="hotspot_channel_description">Update o stavu Vašeho hotspotu/serveru.</string>
<string name="hotspot_notification_content_title">Hotspot Kiwix</string>
<string name="start_server_label">Spustit server</string>
<string name="stop_server_label">Zastavit server</string>
<string name="server_started_message">Vložte tuto IP adresu do svého prohlížeče, aby jste se dostali na server %s</string>
<string name="server_started_message">Vložte tuto IP adresu do svého prohlížeče pro přístup na server %s</string>
<string name="error_file_not_found">Chyba: Nelze najít vybraný soubor ZIM.</string>
<string name="zim_not_opened">Nelze otevřít soubor zim</string>
<string name="error_file_invalid">Chyba: Vybraný soubor není platným souborem ZIM.</string>
<string name="error_article_url_not_found">Chyba: Načtení článku (Url: %1$s ) se nezdařilo.</string>
<string name="pref_display_title">Zobrazení</string>
<string name="pref_info_title">Informace</string>
<string name="pref_info_version">Verze</string>
<string name="pref_night_mode">Noční režim</string>
<string name="pref_night_mode_summary">Zobrazuje stránky v obrácených barvách.</string>
<string name="pref_night_mode_summary">Zobrazuje stránky v invertovaných barvách.</string>
<string name="pref_back_to_top">Zpět na začátek</string>
<string name="pref_back_to_top_summary">Zobrazit tlačítko “Zpět na začátek” na konci stránky</string>
<string name="pref_hide_toolbar">Ponechat viditelný panel nástrojů</string>
<string name="pref_hide_toolbar_summary">Zabraňuje odsunutí panelu nástrojů mimo obrazovku při prohlížení obsahu.</string>
<string name="pref_language_title">Jazyk</string>
<string name="pref_language_chooser">Vyberte jazyk</string>
<string name="pref_credits">Přispěvatelé a licence</string>
@ -71,15 +76,17 @@
<string name="request_storage">Pro přístup k obsahu offline potřebujeme přístup k vašemu úložišti.</string>
<string name="clear_recent_and_tabs_history_dialog">Jste si jistí, že chcete smazat svou historii vyhledávání a resetovat všechny aktivní záložky?</string>
<string name="delete_recent_search_item">Smazat tuto položku?</string>
<string name="pref_clear_all_history_title">Vyčistit historii</string>
<string name="pref_clear_all_history_summary">Vyčistit poslední hledání a tabulky historie</string>
<string name="pref_clear_all_history_title">Smazat historii</string>
<string name="pref_clear_all_history_summary">Smazat nedávná hledání a historii karet</string>
<string name="all_history_cleared">Všechna historie odstraněna</string>
<string name="clear_all_history_dialog_title">Vyčistit celou historii?</string>
<string name="pref_clear_all_bookmarks_title">Vymazat záložky</string>
<string name="clear_all_history_dialog_title">Smazat celou historii?</string>
<string name="share">Sdílet</string>
<string name="selected_file_cab_app_chooser_title">Sdílet soubory ZIM s:</string>
<string name="delete">Smazat</string>
<string name="cancel">Storno</string>
<string name="cancel">Zrušit</string>
<string name="delete_specific_search_toast">Nedávné hledání smazáno</string>
<string name="hint_contents_drawer_message">Chcete-li zobrazit obsah tohoto článku, přejeďte prstem doleva</string>
<string name="got_it">Rozumím!</string>
<string name="did_you_know">Věděli jste, že…?</string>
<string name="undo">Zpět</string>
@ -94,15 +101,16 @@
<string name="open">Otevřít</string>
<string name="bookmark_removed">Záložka odstraněna</string>
<string name="pref_newtab_background_title">Otevřít novou kartu na pozadí</string>
<string name="pref_newtab_background_summary">Otevře novou záložku na pozadí</string>
<string name="pref_extras">Další</string>
<string name="pref_newtab_background_summary">Nová karta bude otevřena na pozadí</string>
<string name="pref_extras">Doplňky</string>
<string name="new_tab_snack_bar">Článek otevřený na nové kartě</string>
<string name="search_widget_text">Prohledat Kiwix</string>
<string name="speech_prompt_text">Mluvte pro vyhledání %s</string>
<string name="speech_not_supported">Promiňte! Vaše zařízení nepodporuje hlasový vstup</string>
<string name="local_zims">Zařízení</string>
<string name="remote_zims">Online</string>
<string name="library">Knihovna</string>
<string name="delete_zim_body" fuzzy="true">Vymazat %s?</string>
<string name="delete_zim_body">Následující zim soubory budou smazány:\n\n%s</string>
<string name="delete_zims_toast">Soubor byl smazán</string>
<string name="no_files_here">Zde nejsou žádné soubory</string>
<string name="download_no_space">Nedostatečný prostor ke stažení.</string>
@ -112,14 +120,18 @@
<string name="zim_no_vid">Žádná Videa</string>
<string name="no_network_connection">Bez připojení k Internetu</string>
<string name="help_2">Co Kiwix dělá?</string>
<string name="help_3">Kiwix je offline čtečka obsahu. Funguje velmi podobně jako prohlížeč, ale místo přistupování k webovým stránkám online čte obsah ze souboru ve formátu ZIM.</string>
<string name="help_4">Přestože by Kiwix původně navržen k poskytování Wikipedie offline, umí číst také jiný obsah.</string>
<string name="help_5">Kde je obsah?</string>
<string name="help_6">Náš obsah se nachází na stránkách Kiwix.</string>
<string name="help_7">Jsou dostupné v ZIM souborech. Je jich mnoho:</string>
<string name="help_8">• Wikipedie je pro každý jazyk dostupná zvlášť</string>
<string name="help_9">• Další obsahy jako Wikileaks nebo Wikizdroje jsou také dostupné</string>
<string name="help_10">Soubory ZIM si můžete buď vybrat a stáhnout v aplikaci, nebo je můžete pečlivě vybrat a stáhnout na stolním počítači před přesunem ZIM souborů na Vaši SD kartu.</string>
<string name="help_11">ZIM soubory stažené v aplikaci jsou umístěny v externím paměťovém adresáři ve složce s názvem Kiwix.</string>
<string name="pref_storage">Úložiště</string>
<string name="pref_current_folder">Stávající Adresář</string>
<string name="delete_zim_failed" fuzzy="true">Omlouváme se, ale nebyli jsme schopni smazat tento soubor. Měli by jste na místo toho zkustit správce souborů.</string>
<string name="delete_zim_failed">Omlouváme se, ale nemohli jsme smazat některé soubory. Měli byste na místo toho zkusit použít správce souborů.</string>
<string name="tts_pause">Pozastavit</string>
<string name="tts_resume">Obnovit</string>
<string name="stop">stop</string>
@ -128,28 +140,34 @@
<string name="yes">Ano</string>
<string name="no">Ne</string>
<string name="confirm_stop_download_title">Zastavit stahování?</string>
<string name="confirm_stop_download_msg">Jste si jisti, že chcete zastavit toto nahrávání?</string>
<string name="confirm_stop_download_msg">Jste si jisti, že chcete zastavit toto stahování?</string>
<string name="download_change_storage">Nástroj výběru úloženého zařízení</string>
<string name="tts_not_enabled">Výstup textu na řeč není u tohoto ZIM souboru umožněn</string>
<string name="texttospeech_initialization_failed">Inicializace převodu textu na řeč selhala. Prosím zkuste to znovu.</string>
<string name="texttospeech_error">Neočekávaná chyba při převodu textu na řeč. Prosím zkuste to znovu.</string>
<string name="search_error">Neočekávaná chyba při vyhledávání. Prosím zkuste to znovu.</string>
<string name="next">Další</string>
<string name="previous">Předchozí</string>
<string name="wifi_only_title">Povolit stahování obsahu přes mobilní připojení?</string>
<string name="wifi_only_msg">Pokud zvolíte “Ano”, nebudete v budoucnu varováni. Můžete však toto vždy změnit v Nastavení.</string>
<string name="pref_wifi_only">Stahovat obsah pouze přes WiFi</string>
<string name="time_day">den</string>
<string name="time_hour">h</string>
<string name="time_minute">min</string>
<string name="time_second">s</string>
<string name="time_left">Vlevo</string>
<string name="time_left">zbývá</string>
<string name="time_today">Dnes</string>
<string name="time_yesterday">Včera</string>
<string name="pref_external_link_popup_title">Upozornit při vkládání externích odkazů</string>
<string name="pref_external_link_popup_summary">Zobrazit vyskakovací zprávu, které Vás upozorní na další možné finanční náklady nebo nefunkčnost offline odkazů.</string>
<string name="external_link_popup_dialog_title">Vkládám externí odkaz!</string>
<string name="external_link_popup_dialog_message">Když vkládáte externí odkaz. Může to vést k dodatečným nákladům na přenos dat, nebo to prostě nebude fungovat, když jste offline. Chcete pokračovat?</string>
<string name="external_link_popup_dialog_message">Vkládáte externí odkaz. Toto může vést k dodatečným nákladům na přenos dat, nebo to prostě nebude fungovat, když jste offline. Chcete pokračovat?</string>
<string name="do_not_ask_anymore">Neptat se příště</string>
<string name="your_languages">Vybrané jazyky:</string>
<string name="other_languages">Jiné jazyky:</string>
<string name="no_items_msg">Žádné dostupné položky</string>
<string name="crash_title">Inu…to je trapné</string>
<string name="crash_description">Nevadilo by Vám pomoci nám opravit tento problém zasláním následující informace?</string>
<string name="crash_description">Vypadá to, že aplikace selhala.\n\nNevadilo by Vám pomoci nám opravit tento problém zasláním následující informace?</string>
<string name="crash_checkbox_language">Vaše nastavení jazyka</string>
<string name="crash_checkbox_zimfiles">Seznam Vašich Zim souborů</string>
<string name="crash_checkbox_exception">Informace o výpadku</string>
@ -157,15 +175,17 @@
<string name="crash_checkbox_device">Informace o zařízení</string>
<string name="crash_button_confirm">POSLAT DETAILY</string>
<string name="shortcut_disabled_message">Klávesová zkratka není dostupná</string>
<string name="new_tab_shortcut_label">Nový panel</string>
<string name="get_content_shortcut_label">Získej obsah</string>
<string name="new_tab_shortcut_label">Nová karta</string>
<string name="get_content_shortcut_label">Získat obsah</string>
<string name="fav_icon">Favicon</string>
<string name="articleCount">%s článků</string>
<string name="get_started">Začít</string>
<string name="download_books">Stáhnout knihy</string>
<string name="humankind_knowledge">Znalosti lidstva na vašem telefonu.</string>
<string name="welcome_to_the_family">Vítejte do rodiny</string>
<string name="save_books_offline">Uložit knihy offline</string>
<string name="download_books_message">Stáhnout knihy a číst ať jste kdekoliv.</string>
<string name="unable_to_add_to_bookmarks">Nelze přidat do záložek</string>
<string name="go_to_previous_page">Jdi na předchozí stránku</string>
<string name="go_to_next_page">Přejít na následující stránku</string>
<string name="table_of_contents">Obsah</string>
@ -174,10 +194,14 @@
<string name="send_feedback">Pošlete zpětnou vazbu</string>
<string name="expand">Rozšířit</string>
<string name="history">Historie</string>
<string name="history_from_current_book">Zobrazit historii ze všech knih</string>
<string name="search_history">Historie vyhledávání</string>
<string name="bookmarks_from_current_book" fuzzy="true">Záložky z aktuální knihy</string>
<string name="selected_items">%1$d vybráno</string>
<string name="bookmarks_from_current_book">Zobrazit záložky ze všech knih</string>
<string name="search_bookmarks">Prohledat záložky</string>
<string name="switch_tabs">Přepnout panely</string>
<string name="close_all_tabs">Zavřít všechny záložky</string>
<string name="close_all_tabs">Zavřít všechny karty</string>
<string name="pending_state">Čekající</string>
<string name="running_state">Probíhá</string>
<string name="complete">Hotovo</string>
<string name="paused_state">Pozastaveno</string>
@ -186,23 +210,68 @@
<string name="note">Poznámka</string>
<string name="wiki_article_title">Název wiki článku</string>
<string name="ext_storage_permission_rationale_add_note">Poznámky vyžadují přístup do uložiště</string>
<string name="ext_storage_write_permission_denied_add_note">Poznámky mohou/nemohou být používány bez přístupu do uložiště</string>
<string name="ext_storage_write_permission_denied_add_note">Poznámky nemohou být používány bez přístupu do úložiště</string>
<string name="note_save_unsuccessful">Poznámka neuložena</string>
<string name="note_delete_successful">Poznámka úspěšně smazána</string>
<string name="note_delete_unsuccessful">Poznámka nebyla smazána</string>
<string name="note_save_successful">Poznámka uložena</string>
<string name="note_save_error_storage_not_writable">Chyba při ukládání poznámky: nelze zapisovat na uložiště</string>
<string name="note_share_error_file_missing">Soubor neexistuje</string>
<string name="note_share_error_file_missing">Poznámkový soubor neexistuje</string>
<string name="note_share_app_chooser_title">Sdílet poznámkový soubor s:</string>
<string name="confirmation_alert_dialog_message">Zahodit neuložené změny?</string>
<string name="delete_notes_confirmation_msg">Smazat všechny poznámky?</string>
<string name="ext_storage_permission_not_granted">Chyba: Oprávnění k úložišti nebyla přidělena</string>
<string name="ext_storage_permission_not_granted">Chyba: Oprávnění k úložišti nebyla udělena</string>
<string name="notes_deletion_successful">Celý poznámkový adresář smazán</string>
<string name="notes_deletion_unsuccessful">Některé soubory nebyly vymazány</string>
<string name="books_count">%d knih</string>
<string name="discovery_initiated">Objevování započato</string>
<string name="discovery_failed">Objevování selhalo</string>
<string name="severe_loss_error">Závažná chyba! Zkuste vypnout/znovu zapnout WiFi P2P</string>
<string name="connection_failed">Spojení selhalo</string>
<string name="permission_rationale_location">Systém Android vyžaduje povolení polohy, aby aplikace mohla detekovat zařízení v okolí</string>
<string name="permission_refused_location">Nelze nalézt zařízení v okolí bez přístupu k poloze</string>
<string name="permission_refused_storage">Nelze získat přístup k souborům zim bez povolení přístupu do úložiště</string>
<string name="request_enable_location">Povolit přístup k poloze a umožnit vyhledávání zařízení</string>
<string name="discovery_needs_location">Vyhledávání blízkých zařízení není možné bez přístupu k poloze</string>
<string name="request_enable_wifi">V nastavení systému povolte WiFi P2P</string>
<string name="discovery_needs_wifi">Hledání zařízení není možné bez zapnuté Wi-Fi</string>
<string name="transfer_to">Přesunout soubory do %s?</string>
<string name="device_not_cooperating">Vybrané zařízení nespolupracuje při přenosu</string>
<string name="file_transfer_complete">Přenos souborů dokončen</string>
<string name="error_during_transfer">Nastala chyba v průběhu přenosu</string>
<string name="get_content_from_nearby_device">Získet obsah ze zařízení v blízkosti</string>
<string name="pref_clear_all_notes_title" fuzzy="true">Vyčistit všechny poznámky</string>
<string name="error_transferring">Chyba při přesouvání souboru %s</string>
<string name="get_content_from_nearby_device">Získat obsah z blízkého zařízení</string>
<string name="search_for_peers">Hledat zařízení</string>
<string name="your_device">Vaše zařízení:</string>
<string name="nearby_devices">BLÍZKÁ ZAŘÍZENÍ</string>
<string name="no_devices_found">Žádná zařízení nebyla nalezena. Kliknutím na tlačítko hledat to zkuste znovu.</string>
<string name="files_for_transfer">SOUBORY K PŘENOSU</string>
<string name="preparing_files">Příprava souborů k přenosu…</string>
<string name="performing_handshake">Probíhá párování…</string>
<string name="status">Stav</string>
<string name="pref_clear_all_notes_summary">Vymazat všechny poznámky ke všem článkům</string>
<string name="pref_clear_all_notes_title">Vymazat všechny poznámky</string>
<string name="tag_pic">Obrázek</string>
<string name="tag_vid">Video</string>
<string name="tag_text_only">Pouze text</string>
<string name="tag_short_text">Krátký text</string>
<string name="storage_permission_denied">Přístup k úložišti zamítnut</string>
<string name="grant_read_storage_permission">Tato aplikace vyžaduje oprávnění ke čtení úložiště. Udělte prosím tato oprávnění v nastavení.</string>
<string name="go_to_settings">Přejít na nastavení hotspotu</string>
<string name="no_results">Žádné výsledky</string>
<string name="no_bookmarks">Žádné záložky</string>
<string name="no_history">Žádná historie</string>
<string name="device_default">Výchozí zařízení</string>
<string name="delete_history" fuzzy="true">Smazat historii?</string>
<string name="delete_bookmarks" fuzzy="true">Smazat záložky?</string>
<string name="on">Zapnout</string>
<string name="off">Vypnout</string>
<string name="auto">Automaticky</string>
<string name="send_report">Odeslat diagnostickou zprávu</string>
<string name="crash_checkbox_file_system">Podrobnosti o souborovém systému</string>
<string name="diagnostic_report">Diagnostická zpráva</string>
<string name="diagnostic_report_message">Zašlete prosím všechny následující podrobnosti, abychom mohli problém diagnostikovat</string>
<string name="percentage">%d%%</string>
<string name="pref_text_zoom_title">Zvětšit text</string>
<string name="experimental_navigation">Experimentální navigace</string>
</resources>

View File

@ -1,9 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Authors:
<?xml version="1.0" encoding="utf-8"?><!-- Authors:
* 1233qwer1234qwer4
* DraconicDark
* FF11
* Killarnee
* Metalhead64
* Stephane
* Susann Schweden
* Symposiarch
-->
<resources>
@ -17,25 +19,49 @@
<string name="menu_exit_full_screen">Vollbild beenden</string>
<string name="menu_read_aloud">Vorlesen</string>
<string name="menu_read_aloud_stop">Mit dem Vorlesen aufhören</string>
<string name="menu_support_kiwix">Spenden</string>
<string name="save_media">Medium speichern</string>
<string name="save_media_error">Beim Versuch, das Medium zu speichern, ist ein Fehler aufgetreten!</string>
<string name="save_media_saved">Medium als %s nach Android/media/org.kiwix…/ gespeichert</string>
<string name="search_label">Suchen</string>
<string name="choose_file">Wähle eine Inhaltsdatei aus (*.zim)</string>
<string name="open_in_new_tab">Link in neuer Registerkarte öffnen?</string>
<string name="hotspot_service_channel_name">Hotspot Servicekanal</string>
<string name="hotspot_failed_title">Hotspot konnte nicht gestartet werden</string>
<string name="hotspot_failed_message">Es scheint, Ihr Hotspot ist bereits aktiviert. Bitte deaktivieren Sie Ihren Wi-Fi Hotspot, um weiterzumachen.</string>
<string name="go_to_wifi_settings_label">Gehen Sie zu den Wi-Fi Einstellungen</string>
<string name="hotspot_running">Aktiver Hotspot</string>
<string name="no_books_selected_toast_message">Bitte zuerst Bücher aussuchen</string>
<string name="server_failed_message">Konnte den Server nicht starten. Bitte aktivieren Sie Ihren Hotspot</string>
<string name="server_failed_toast_message">Konnte den Server nicht starten.</string>
<string name="server_started_successfully_toast_message">Server erfolgreich gestartet.</string>
<string name="server_stopped_successfully_toast_message">Server erfolgreich gestoppt.</string>
<string name="hotspot_turned_on">Hotspot aktiviert</string>
<string name="hotspot_details_message">Angaben zu Ihrem lokalen Hotspot.\nSSID : %1$s \nPass : %2$s</string>
<string name="server_textview_default_message">Wählen Sie die Dateien aus, die Sie auf dem Server hosten möchten</string>
<string name="progress_dialog_starting_server">Starte den Server</string>
<string name="wifi_dialog_title">Wi-Fi-Verbindung festgestellt</string>
<string name="wifi_dialog_body">Um Bücher auf anderen Einheiten anzusehen, stellen Sie bitte sicher, dass alle Einheiten mit dem gleichen WiFi-Netzwerk verbunden sind.</string>
<string name="hotspot_dialog_message">Damit diese Funktion läuft, müssen Sie zuerst den Hotspot manuell aktivieren oder sicherstellen, dass Host und Empfangsgerät im gleichen Wi-Fi-Netzwerk angemeldet sind</string>
<string name="hotspot_dialog_neutral_button">WEITER</string>
<string name="hotspot_channel_description">Updates zum Status Ihres Hotspots/Servers.</string>
<string name="hotspot_notification_content_title">Kiwix-Hotspot</string>
<string name="start_server_label">Server starten</string>
<string name="stop_server_label">Server anhalten</string>
<string name="server_started_message">Geben Sie diese IP-Adresse in Ihren Browser ein, um auf den Server %s zuzugreifen</string>
<string name="error_file_not_found">Fehler: Die ausgewählte ZIM-Datei konnte nicht gefunden werden.</string>
<string name="zim_not_opened">Konnte die ZIM-Datei nicht öffnen</string>
<string name="error_file_invalid">Fehler: Die ausgewählte Datei ist keine gültige ZIM-Datei.</string>
<string name="error_article_url_not_found">Fehler: Das Laden des Artikels (URL: %1$s) ist fehlgeschlagen.</string>
<string name="pref_display_title">Anzeige</string>
<string name="pref_info_title">Information</string>
<string name="pref_info_version">Version</string>
<string name="pref_night_mode">Nachtmodus</string>
<string name="pref_night_mode_summary">Artikel mit umgekehrten Farben ansehen</string>
<string name="pref_night_mode_summary">Artikel mit umgekehrten Farben anzeigen</string>
<string name="pref_back_to_top">Zurück nach oben</string>
<string name="pref_back_to_top_summary">Zeigt einen Button am Seitenende an, um zum Anfang hochzuscrollen.</string>
<string name="pref_hide_toolbar">Werkzeugleiste beim Scrollen ausblenden</string>
<string name="pref_hide_toolbar_summary">Werkzeugleiste ausblenden, wenn auf der Seite heruntergescrollt wird.</string>
<string name="pref_hide_toolbar">Werkzeugleiste weiterhin anzeigen</string>
<string name="pref_hide_toolbar_summary">Verhindert, dass die Werkzeugleiste verschwindet, wenn auf der Seite im Inhalt gebrowst wird</string>
<string name="pref_language_title">Sprache</string>
<string name="pref_language_chooser">Eine Sprache auswählen</string>
<string name="pref_credits">Autoren und Lizenzen</string>
@ -44,25 +70,28 @@
<string name="no_reader_application_installed">Es konnte keine installierte Anwendung für diesen Dateityp gefunden werden</string>
<string name="no_section_info">Keine Inhaltsheader gefunden</string>
<string name="request_storage">Um auf Offlineinhalt zuzugreifen, müssen wir auf Ihren Speicher zugreifen.</string>
<string name="clear_recent_and_tabs_history_dialog">Sind Sie sicher, dass Sie Ihren Suchverlauf löschen und alle aktiven Reiter zurücksetzen möchten?</string>
<string name="clear_recent_and_tabs_history_dialog">Sind Sie sicher, dass Sie Ihren Suchverlauf löschen und alle aktiven Registerkarten zurücksetzen möchten?</string>
<string name="delete_recent_search_item">Dieses Element löschen?</string>
<string name="pref_clear_all_history_title">Verlauf löschen</string>
<string name="pref_clear_all_history_summary">Letzte Suchanfragen und Reiterverlauf löschen</string>
<string name="pref_clear_all_history_summary">Letzte Suchanfragen und Registerkartenverlauf löschen</string>
<string name="all_history_cleared">Gesamter Verlauf gelöscht</string>
<string name="pref_clear_all_bookmarks_title">Lesezeichen löschen</string>
<string name="clear_all_history_dialog_title">Gesamten Verlauf löschen?</string>
<string name="share">Teilen</string>
<string name="selected_file_cab_app_chooser_title">Teile ZIM-Dateien mit:</string>
<string name="delete">Löschen</string>
<string name="cancel">Abbrechen</string>
<string name="delete_specific_search_toast">Letzte Suche entfernt</string>
<string name="hint_contents_drawer_message">Sie können nach links wischen, um die Inhalte dieses Artikels anzusehen.</string>
<string name="got_it">Verstanden</string>
<string name="did_you_know">Schon gewusst?</string>
<string name="undo">Rückgängig</string>
<string name="tab_closed">Reiter geschlossen</string>
<string name="undo">Rückgängig machen</string>
<string name="tab_closed">Registerkarte geschlossen</string>
<string name="bookmark_added">Lesezeichen hinzugefügt</string>
<string name="rate_dialog_title">Bitte bewerte uns</string>
<string name="rate_dialog_msg_1">Wenn du</string>
<string name="rate_dialog_msg_2">magst, nimm dir zur Bewertung einen Moment Zeit. Vielen Dank für deine Unterstützung!</string>
<string name="rate_dialog_positive">Bewerten!</string>
<string name="rate_dialog_title">Bitte bewerten Sie uns</string>
<string name="rate_dialog_msg_1">Wenn Sie</string>
<string name="rate_dialog_msg_2">mögen, nehmen Sie sich zur Bewertung einen Moment Zeit. Vielen Dank für Ihre Unterstützung!</string>
<string name="rate_dialog_positive">Bewerten Sie!</string>
<string name="no_thanks">Nein danke</string>
<string name="rate_dialog_neutral">Später</string>
<string name="open">Öffnen</string>
@ -70,16 +99,17 @@
<string name="pref_newtab_background_title">Neue Registerkarte im Hintergrund öffnen</string>
<string name="pref_newtab_background_summary">Beim Öffnen einer neuen Registerkarte wird sie im Hintergrund geöffnet</string>
<string name="pref_extras">Extras</string>
<string name="new_tab_snack_bar">Artikel in neuem Reiter geöffnet</string>
<string name="new_tab_snack_bar">Artikel in neuer Registerkarte geöffnet</string>
<string name="search_widget_text">Kiwix durchsuchen</string>
<string name="speech_prompt_text">Sprechen, um %s zu suchen</string>
<string name="speech_not_supported">Leider unterstützt Ihr Gerät keine Spracheingabe!</string>
<string name="local_zims">Gerät</string>
<string name="remote_zims">Online</string>
<string name="library">Bibliothek</string>
<string name="delete_zims_toast">Datei gelöscht</string>
<string name="delete_zim_body">Die folgende(n) ZIM-Datei(en) werden gelöscht werden: %s</string>
<string name="delete_zims_toast">Dateien erfolgreich gelöscht</string>
<string name="no_files_here">Hier gibt es keine Dateien</string>
<string name="download_no_space">Nicht ausreichender Speicher um herunterzuladen.</string>
<string name="download_no_space">Unzureichender Speicherplatz für einen Download.</string>
<string name="space_available">Verfügbarer Speicher:</string>
<string name="zim_simple">Einfach</string>
<string name="zim_no_pic">Keine Bilder</string>
@ -87,17 +117,17 @@
<string name="no_network_connection">Keine Netzwerkverbindung</string>
<string name="help_2">Was macht Kiwix?</string>
<string name="help_3">Kiwix ist eine Lesesoftware für Offlineinhalte. Sie funktioniert wie ein Browser, aber anstatt auf Webseiten online zuzugreifen, liest sie Inhalte von einer Datei im ZIM-Format.</string>
<string name="help_4" fuzzy="true">Obwohl Kiwix ursprünglich entwickelt wurde, um Wikipedia offline zur Verfügung zu stellen, liest es auch andere Inhalte.</string>
<string name="help_4">Obwohl Kiwix ursprünglich entwickelt wurde, um Wikipedia offline zur Verfügung zu stellen, liest es auch andere Inhalte.</string>
<string name="help_5">Wo ist der Inhalt?</string>
<string name="help_6">Unser Inhalt wird auf der Kiwix-Website zur Verfügung gestellt.</string>
<string name="help_7">Sie sind verfügbar als ZIM-Dateien. Es gibt viele von ihnen:</string>
<string name="help_8">• Wikipedia ist für jede Sprache getrennt verfügbar</string>
<string name="help_9">• Andere Inhalte wie Wikileaks oder Wikisource sind ebenfalls verfügbar</string>
<string name="help_10" fuzzy="true">Sie können entweder Ihre ausgewählten ZIM-Dateien in der App herunterladen oder die gewünschten Datei(en) sorgsam auf einem Desktopcomputer auswählen und herunterladen, bevor Sie die ZIM-Dateien auf Ihre SD-Karte übertragen.</string>
<string name="help_10">Sie können entweder Ihre ausgewählten ZIM-Dateien in der App herunterladen oder die gewünschten Datei(en) sorgsam auf einem Desktopcomputer auswählen und herunterladen, bevor Sie die ZIM-Dateien auf Ihre SD-Karte übertragen.</string>
<string name="help_11">Heruntergeladene ZIM-Dateien in der App befinden sich im Verzeichnis des externen Speichers in einem Ordner namens Kiwix.</string>
<string name="pref_storage">Speicher</string>
<string name="pref_current_folder">Aktueller Ordner</string>
<string name="delete_zim_failed" fuzzy="true">Leider können wir diese Datei nicht löschen. Sie sollten versuchen, stattdessen einen Dateimanager zu verwenden.</string>
<string name="delete_zim_failed">Leider können wir diese Datei nicht löschen. Sie sollten versuchen, stattdessen einen Dateimanager zu verwenden.</string>
<string name="tts_pause">pausieren</string>
<string name="tts_resume">fortfahren</string>
<string name="stop">abbrechen</string>
@ -109,6 +139,9 @@
<string name="confirm_stop_download_msg">Sind Sie sicher, dass Sie diesen Download abbrechen möchten?</string>
<string name="download_change_storage">Speichergeräteauswahl</string>
<string name="tts_not_enabled">Text-to-Speech ist für diese ZIM-Datei nicht aktiviert</string>
<string name="texttospeech_initialization_failed">Die Initialisierung von Text-to-Speech ist fehlgeschlagen. Bitte versuchen Sie es noch einmal</string>
<string name="texttospeech_error">Unerwarteter Fehler bei Text-to-Speech. Bitte versuchen Sie es noch einmal</string>
<string name="search_error">Unerwarteter Fehler beim Suchen. Bitte versuchen Sie es noch einmal</string>
<string name="next">Nächste</string>
<string name="previous">Vorherige</string>
<string name="wifi_only_title">Herunterladen des Inhalts über das mobile Netzwerk erlauben?</string>
@ -119,6 +152,8 @@
<string name="time_minute">Minuten</string>
<string name="time_second">Sekunden</string>
<string name="time_left">verbleibend</string>
<string name="time_today">Heute</string>
<string name="time_yesterday">Gestern</string>
<string name="pref_external_link_popup_title">Beim Einfügen von externen Links warnen</string>
<string name="pref_external_link_popup_summary">Popups für Warnungen über zusätzliche Kosten oder das Nichtfunktionieren von Offlinelinks anzeigen.</string>
<string name="external_link_popup_dialog_title">Externen Link einfügen!</string>
@ -126,12 +161,115 @@
<string name="do_not_ask_anymore">Nicht mehr fragen</string>
<string name="your_languages">Ausgewählte Sprachen:</string>
<string name="other_languages">Weitere Sprachen:</string>
<string name="no_items_msg">Keine Objekte verfügbar</string>
<string name="crash_title">Also… Das ist peinlich.</string>
<string name="crash_description">Es sieht aus, als wären wir abgestürzt.\n\nWürde es Ihnen etwas ausmachen, uns bei der Behebung dieses Problems zu helfen, indem Sie uns die folgenden Informationen schicken?</string>
<string name="crash_checkbox_language">Ihre Spracheinstellungen</string>
<string name="crash_checkbox_zimfiles">Eine Liste Ihrer ZIM-Dateien</string>
<string name="crash_checkbox_exception">Einzelheiten zum Absturz</string>
<string name="crash_checkbox_logs">Anwendungsprotokolle</string>
<string name="crash_checkbox_device">Geräte-Details</string>
<string name="crash_button_confirm">DETAILS SCHICKEN</string>
<string name="shortcut_disabled_message">Abkürzung nicht verfügbar</string>
<string name="new_tab_shortcut_label">Neue Registerkarte</string>
<string name="get_content_shortcut_label">Inhalte abrufen</string>
<string name="fav_icon">Favicon</string>
<string name="articleCount">%s Artikel</string>
<string name="get_started">Anfangen</string>
<string name="download_books">Bücher herunterladen</string>
<string name="humankind_knowledge">Das Wissen der Menschheit, auf Ihrem Handy.</string>
<string name="welcome_to_the_family">Willkommen in der Familie</string>
<string name="save_books_offline">Bücher offline speichern</string>
<string name="download_books_message">Bücher herunterladen und lesen wo immer man ist</string>
<string name="unable_to_add_to_bookmarks">Konnte kein Lesezeichen hinzufügen</string>
<string name="go_to_previous_page">Zur vorherigen Seite gehen</string>
<string name="go_to_next_page">Zur nächsten Seite gehen</string>
<string name="table_of_contents">Inhaltsverzeichnis</string>
<string name="select_languages">Sprachen auswählen</string>
<string name="save_languages">Sprachen speichern</string>
<string name="send_feedback">Rückmeldung senden</string>
<string name="expand">Ausklappen</string>
<string name="history">Verlauf</string>
<string name="history_from_current_book">Zeige die Verlaufsgeschichte aller Bücher</string>
<string name="search_history">Suchverlauf</string>
<string name="selected_items">%1$d ausgewählt</string>
<string name="bookmarks_from_current_book">Zeige die Lesezeichen aller Bücher</string>
<string name="search_bookmarks">Lesezeichen durchsuchen</string>
<string name="switch_tabs">Registerkarten wechseln</string>
<string name="close_all_tabs">Alle Registerkarten schließen</string>
<string name="pending_state">Ausstehend</string>
<string name="running_state">In Bearbeitung</string>
<string name="complete">Vervollständigt</string>
<string name="paused_state">Pausiert</string>
<string name="failed_state">Fehlgeschlagen: %s</string>
<string name="save">Speichern</string>
<string name="note">Notiz</string>
<string name="wiki_article_title">Wiki-Artikel-Titel</string>
<string name="ext_storage_permission_rationale_add_note">Speicherzugriff ist für Notizen erforderlich</string>
<string name="ext_storage_write_permission_denied_add_note">Notizen können ohne Zugriff auf den Speicher nicht verwendet werden</string>
<string name="note_save_unsuccessful">Notiz Speichern erfolglos</string>
<string name="note_delete_successful">Notiz erfolgreich gelöscht</string>
<string name="note_delete_unsuccessful">Notiz wurde nicht gelöscht</string>
<string name="note_save_successful">Notiz gespeichert</string>
<string name="note_save_error_storage_not_writable">Fehler beim Speichern der Notiz: Speicher nicht beschreibbar</string>
<string name="note_share_error_file_missing">Notizdatei existiert nicht</string>
<string name="note_share_app_chooser_title">Teile Notizdatei mit:</string>
<string name="confirmation_alert_dialog_message">Nicht gespeicherte Änderungen verwerfen?</string>
<string name="delete_notes_confirmation_msg">Alle Notizen löschen?</string>
<string name="ext_storage_permission_not_granted">Fehler: Speicherberechtigungen nicht gewährt</string>
<string name="notes_deletion_successful">Gesamter Notizen-Ordner gelöscht</string>
<string name="notes_deletion_unsuccessful">Einige Dateien nicht gelöscht</string>
<string name="books_count">%d Buch/Bücher</string>
<string name="discovery_initiated">Erkennung eingeleitet</string>
<string name="discovery_failed">Erkennung fehlgeschlagen</string>
<string name="severe_loss_error">Schwerer Fehler! Versuchen Sie, Wi-Fi P2P auszuschalten und wieder einzuschalten</string>
<string name="connection_failed">Verbindung fehlgeschlagen</string>
<string name="permission_rationale_location">Android benötigt eine Standorterlaubnis, damit die App Peer-Geräte erkennen kann.</string>
<string name="permission_refused_location">Ohne Standortberechtigungen können Peer-Geräte nicht lokalisiert werden</string>
<string name="permission_refused_storage">Ohne Speichererlaubnis ist kein Zugriff auf ZIM-Dateien möglich</string>
<string name="request_enable_location">Standort aktivieren, um Peer-Geräte zu finden</string>
<string name="discovery_needs_location">Ohne standortbezogene Dienste können keine Peer-Geräte gefunden werden</string>
<string name="request_enable_wifi">Aktivieren Sie Wi-Fi P2P in den Systemeinstellungen</string>
<string name="discovery_needs_wifi">Kann ohne Wi-Fi ON keine Peer-Geräte finden</string>
<string name="transfer_to">Dateien an %s übertragen?</string>
<string name="device_not_cooperating">Das gewählte Gerät kooperiert nicht bei der Übertragung</string>
<string name="file_transfer_complete">Dateiübertragung abgeschlossen</string>
<string name="error_during_transfer">Bei der Übertragung wurde ein Fehler festgestellt</string>
<string name="error_transferring">Fehler beim Übertragen der Datei %s</string>
<string name="get_content_from_nearby_device">Inhalte von einem Gerät in der Nähe abrufen</string>
<string name="search_for_peers">Nach Peer-Geräten suchen</string>
<string name="your_device">Ihr Gerät:</string>
<string name="nearby_devices">GERÄTE IN DER NÄHE</string>
<string name="no_devices_found">Keine Geräte erkannt. Tippen Sie auf die Schaltfläche Suchen, um es erneut zu versuchen.</string>
<string name="files_for_transfer">DATEIEN ZUR ÜBERTRAGUNG</string>
<string name="preparing_files">Dateien für die Übertragung werden vorbereitet....</string>
<string name="performing_handshake">Führe Handshake durch....</string>
<string name="status">Status</string>
<string name="pref_clear_all_notes_summary">Löscht alle Notizen zu allen Artikeln</string>
<string name="pref_clear_all_notes_title">Alle Notizen löschen</string>
<string name="tag_pic">Bild</string>
<string name="tag_vid">Video</string>
<string name="tag_text_only">Nur Text</string>
<string name="tag_short_text">Kurzer Text</string>
<string name="storage_permission_denied">Speichergenehmigung verweigert</string>
<string name="grant_read_storage_permission">Diese Anwendung erfordert die Fähigkeit, Speicher zu lesen, um zu funktionieren. Bitte erteilen Sie die Erlaubnis in Ihren Einstellungen</string>
<string name="go_to_settings">Gehen Sie zu den Hotspot-Einstellungen</string>
<string name="no_results">Keine Ergebnisse</string>
<string name="no_bookmarks">Keine Lesezeichen</string>
<string name="delete_history">Verlauf löschen?</string>
<string name="delete_bookmarks">Lesezeichen löschen?</string>
<string name="no_history">Kein Verlauf</string>
<string name="device_default">Gerätevoreinstellung</string>
<string name="delete_history">Gesamten Verlauf löschen?</string>
<string name="delete_selected_history">Ausgewählter Verlauf löschen?</string>
<string name="delete_bookmarks">Alle Lesezeichen löschen?</string>
<string name="delete_selected_bookmarks">Ausgewählte Lesezeichen löschen?</string>
<string name="on">An</string>
<string name="off">Aus</string>
<string name="auto">Automatisch</string>
<string name="send_report">Übermittle das Untersuchungsergebnis</string>
<string name="crash_checkbox_file_system">Speichere System Details</string>
<string name="diagnostic_report">Untersuchungsergebnis</string>
<string name="diagnostic_report_message">Bitte übermittle alle nachfolgend aufgeführte Details, damit wir das Problem feststellen können</string>
<string name="percentage">%d%%</string>
<string name="pref_text_zoom_title">Text Zoom</string>
<string name="experimental_navigation">Experimentelle Navigation</string>
</resources>

View File

@ -197,8 +197,8 @@
<string name="no_bookmarks">Nişani çıniyê</string>
<string name="no_history">Veror Çıniyo</string>
<string name="device_default">Hesabyayey Cihazi</string>
<string name="delete_history">Veror wa Bıesterneyo?</string>
<string name="delete_bookmarks">Bookmarki wa Bıesterneyo?</string>
<string name="delete_history" fuzzy="true">Veror wa Bıesterneyo?</string>
<string name="delete_bookmarks" fuzzy="true">Bookmarki wa Bıesterneyo?</string>
<string name="on">Akerde</string>
<string name="off">Racınaye</string>
<string name="auto">Otomatik</string>

View File

@ -138,5 +138,9 @@
<string name="your_languages">Επιλεγμένες γλώσσες:</string>
<string name="other_languages">Άλλες γλώσσες:</string>
<string name="no_bookmarks">Χωρίς σελιδοδείκτες</string>
<string name="delete_history">Διαγραφή όλου του ιστορικού;</string>
<string name="delete_selected_history">Διαγραφή επιλεγμένου ιστορικού;</string>
<string name="delete_bookmarks">Διαγραφή όλων των σελιδοδεικτών;</string>
<string name="delete_selected_bookmarks">Διαγραφή επιλεγμένων σελιδοδεικτών;</string>
<string name="pref_text_zoom_title">Μεγέθυνση κειμένου</string>
</resources>

View File

@ -216,4 +216,5 @@
<string name="crash_checkbox_file_system">Datos del sistema operativo</string>
<string name="diagnostic_report">Informe de diagnóstico</string>
<string name="diagnostic_report_message">Envíe todos los detalles siguientes para que podamos diagnosticar el problema.</string>
<string name="experimental_navigation">Navegación experimental</string>
</resources>

View File

@ -155,8 +155,8 @@
<string name="no_results">بدون نتیجه</string>
<string name="no_bookmarks">نشانکی نیست</string>
<string name="no_history">تاریخچه‌ای نیست</string>
<string name="delete_history">تاریخچه حذف شود؟</string>
<string name="delete_bookmarks">نشانک‌ها حذف شوند؟</string>
<string name="delete_history" fuzzy="true">تاریخچه حذف شود؟</string>
<string name="delete_bookmarks" fuzzy="true">نشانک‌ها حذف شوند؟</string>
<string name="on">روشن</string>
<string name="off">خاموش</string>
<string name="auto">خودکار</string>

View File

@ -28,7 +28,7 @@
<string name="menu_read_aloud">Lire à haute voix</string>
<string name="menu_read_aloud_stop">Arrêter de lire à haute voix</string>
<string name="menu_support_kiwix">Soutenir Kiwix</string>
<string name="menu_host_books">Héberger des livres</string>
<string name="menu_host_books">Diffuser des contenus</string>
<string name="save_media">Enregistrer le média</string>
<string name="save_media_error">Une erreur sest produite en essayant denregistrer le média!</string>
<string name="save_media_saved">Média enregistré sous %s dans le dossier Android/media/org.kiwix…/</string>
@ -172,7 +172,7 @@
<string name="your_languages">Langues sélectionnées:</string>
<string name="other_languages">Autres langues:</string>
<string name="no_items_msg">Aucun élément disponible</string>
<string name="crash_title">Et bien… cest embarrassant</string>
<string name="crash_title">Eh bien… cest embarrassant</string>
<string name="crash_description">Il semble que nous ayons planté.\n\nPourriez-vous nous aider à corriger ce problème en envoyant linformation suivante?</string>
<string name="crash_checkbox_language">Vos paramètres de langue</string>
<string name="crash_checkbox_zimfiles">Une liste de vos fichiers ZIM</string>
@ -268,8 +268,10 @@
<string name="no_bookmarks">Aucun marque-page</string>
<string name="no_history">Aucun historique</string>
<string name="device_default">Appareil par défaut</string>
<string name="delete_history">Supprimer lhistorique ?</string>
<string name="delete_bookmarks">Supprimer les marque-pages ?</string>
<string name="delete_history">Supprimer tout lhistorique ?</string>
<string name="delete_selected_history">Supprimer lhistorique sélectionné?</string>
<string name="delete_bookmarks">Supprimer tous les signets ?</string>
<string name="delete_selected_bookmarks">Supprimer les marque-pages sélectionnés?</string>
<string name="on">Activé</string>
<string name="off">Désactivé</string>
<string name="auto">Automatique</string>
@ -278,5 +280,6 @@
<string name="diagnostic_report">Rapport de diagnostic</string>
<string name="diagnostic_report_message">Veuillez envoyer tous les détails suivants afin que nous puissions diagnostiquer le problème</string>
<string name="percentage">%d%%</string>
<string name="pref_text_zoom_title">Zoom du texte</string>
<string name="pref_text_zoom_title">Zoomer le texte</string>
<string name="experimental_navigation">Navigation expérimentale</string>
</resources>

View File

@ -0,0 +1,122 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Authors:
* Rschlegel
* 80686
-->
<resources>
<string name="menu_help">Hilf</string>
<string name="menu_settings">Yystellige</string>
<string name="menu_search_in_text">I de Syte finde</string>
<string name="bookmarks">Läsezeiche</string>
<string name="menu_random_article">Zuefälligi Syte</string>
<string name="menu_full_screen">Vollbildschirm</string>
<string name="menu_exit_full_screen">Vollbildmodus beende</string>
<string name="menu_read_aloud">Vorläse</string>
<string name="menu_read_aloud_stop">Ufhöre vorläse</string>
<string name="menu_support_kiwix">Kiwix unterstützä</string>
<string name="save_media">Medie spychere</string>
<string name="save_media_error">Bim Spychere vo de Medie isch ä Fähler passiert!</string>
<string name="save_media_saved">Medie als %s nach Android/media/org.kiwix…/ gspycheret</string>
<string name="search_label">Sueche</string>
<string name="choose_file">Inhaltedatei (*.zim) uswähle</string>
<string name="no_books_selected_toast_message">Bitte zersch Büecher uswähle</string>
<string name="server_failed_toast_message">Server het nid chönne gschtartät wärde.</string>
<string name="server_started_successfully_toast_message">Server erfolgriich gschtartät.</string>
<string name="server_stopped_successfully_toast_message">Server erfolgriich gschtopped.</string>
<string name="progress_dialog_starting_server">Server am Schtartä</string>
<string name="hotspot_dialog_title">Inschtruktionä um Büecher bereit z\'stellä</string>
<string name="hotspot_dialog_neutral_button">WIITERMACHE</string>
<string name="start_server_label">Server schtartä</string>
<string name="stop_server_label">Server schtoppe</string>
<string name="error_file_not_found">Fehler: Di usgwählti ZIM-Datei isch nit gfunde worde.</string>
<string name="zim_not_opened">Cha zim Datei nid uftue</string>
<string name="error_file_invalid">Fehler: Di usgwählti Datei isch chei gültigi ZIM-Datei.</string>
<string name="error_article_url_not_found">Fehler: S\' Lade vom Artikel (URL: %1$s) het nit gchlappt.</string>
<string name="pref_display_title">Azeig</string>
<string name="pref_info_title">Information</string>
<string name="pref_info_version">Version</string>
<string name="pref_night_mode">Nachtmodus</string>
<string name="pref_night_mode_summary">Zeig d\'Artikel mit umcherte Farbe</string>
<string name="pref_back_to_top">Zruck nach obe</string>
<string name="pref_back_to_top_summary">Zeig e Chnopf am End vo dr Syte zuem uffe rolle</string>
<string name="pref_hide_toolbar">Wärchzüglischte sichtbar bhaute</string>
<string name="pref_language_title">Sprach</string>
<string name="pref_language_chooser">E Sprach uswähle</string>
<string name="delete_recent_search_item">Das Elemänt löschä?</string>
<string name="pref_clear_all_history_title">Verlouf lösche</string>
<string name="all_history_cleared">Ganzä Verlouf glöscht</string>
<string name="clear_all_history_dialog_title">Ganzä Verlouf lösche?</string>
<string name="share">Teile</string>
<string name="selected_file_cab_app_chooser_title">ZIM Dateiä teilä mit:</string>
<string name="delete">Lösche</string>
<string name="cancel">Abbräche</string>
<string name="delete_specific_search_toast">Letschti Suech entfärnt</string>
<string name="hint_contents_drawer_message">Nach linggs wüsche um dr Inhaut vo däm Artikel aazluege</string>
<string name="got_it">Verschtande</string>
<string name="did_you_know">Scho gwüsst?</string>
<string name="undo">Rückgängig machä</string>
<string name="rate_dialog_title">Tuä üs bewärte</string>
<string name="rate_dialog_positive">Bewärte!</string>
<string name="no_thanks">Nei danke</string>
<string name="rate_dialog_neutral">Spääter</string>
<string name="open">Ufmache</string>
<string name="pref_extras">Äxtras</string>
<string name="search_widget_text">Kiwix dürsuechä</string>
<string name="local_zims">Grät</string>
<string name="library">Bibliothek</string>
<string name="delete_zims_toast">Dateiä erfolgriich glöscht</string>
<string name="no_files_here">Hie hets ke Dateiä</string>
<string name="download_no_space">Nid gnüegend Spiicherplatz um abezladä.</string>
<string name="space_available">Verfüegbaare Spiicherplatz:</string>
<string name="zim_simple">Eifach</string>
<string name="zim_no_pic">Ke Bilder</string>
<string name="zim_no_vid">Ke Videos</string>
<string name="no_network_connection">Keni Netzwärkverbindig</string>
<string name="help_5">Wo isch der Inhaut?</string>
<string name="pref_storage">Spiicher</string>
<string name="pref_current_folder">Aktuelle Ordnär</string>
<string name="tts_pause">pousiere</string>
<string name="tts_resume">wiitermache</string>
<string name="stop">schtoppe</string>
<string name="yes">Ja</string>
<string name="no">Nei</string>
<string name="confirm_stop_download_title">Abeladä schtoppä?</string>
<string name="next">Nächschti</string>
<string name="previous">Vorhärigi</string>
<string name="time_today">Hüt</string>
<string name="time_yesterday">Geschter</string>
<string name="do_not_ask_anymore">Nümme fraagä</string>
<string name="go_to_previous_page">Zur vorherigä Syte gah</string>
<string name="go_to_next_page">Zur nächschtä Syte gah</string>
<string name="select_languages">Spraach uswähle</string>
<string name="expand">Ufklappe</string>
<string name="search_history">Suechverläuf</string>
<string name="selected_items">%1$d usgwählt</string>
<string name="complete">Fertig</string>
<string name="paused_state">Pousiert</string>
<string name="failed_state">Fählgschlage: %s</string>
<string name="save">Spychere</string>
<string name="note">Notiz</string>
<string name="note_save_unsuccessful">Notiz spychere fählgschlage</string>
<string name="note_delete_successful">Notiz erfolgriich glöscht</string>
<string name="note_delete_unsuccessful">Notiz isch nid glöscht worde</string>
<string name="note_save_successful">Notiz gspycheret</string>
<string name="note_share_error_file_missing">Diä Notiz Datei gits nid</string>
<string name="delete_notes_confirmation_msg">Aui Notizä lösche?</string>
<string name="notes_deletion_unsuccessful">Gwüssi Dateiä si nid glöscht worde</string>
<string name="connection_failed">Verbindig fählgschlagä</string>
<string name="file_transfer_complete">Dateiübertragig abgschlossä</string>
<string name="error_during_transfer">Es isch ä Fähler passiert während dr Übertragig</string>
<string name="error_transferring">Fähler bim Übertrage vor Datei %s</string>
<string name="preparing_files">Dateiä am Vorbereitä für d\'Übertragig…</string>
<string name="status">Status</string>
<string name="pref_clear_all_notes_title">Alli Notizä lösche</string>
<string name="tag_text_only">Numä Texscht</string>
<string name="tag_short_text">Churzä Texscht</string>
<string name="no_results">Ke Ergäbnis</string>
<string name="no_history">Ke Verlouf</string>
<string name="delete_history" fuzzy="true">Verlouf lösche?</string>
<string name="on">Aa</string>
<string name="off">Uus</string>
<string name="percentage">%d%%</string>
</resources>

View File

@ -3,6 +3,7 @@
* Abijeet Patro
* Arifin.wijaya
* Arifpedia
* Esiahaan
* Iwan Novirion
* Kenrick95
* Relly Komaruzaman
@ -19,13 +20,28 @@
<string name="menu_exit_full_screen">Keluar dari modus layar penuh</string>
<string name="menu_read_aloud">Bacakan</string>
<string name="menu_read_aloud_stop">Hentikan pembacaan</string>
<string name="menu_support_kiwix">Dukung Kiwix</string>
<string name="save_media">Simpan Media</string>
<string name="save_media_error">Terjadi kesalahan saat menyimpan media!</string>
<string name="save_media_saved">Simpan media sebagai %s pada Android/media/org.kiwix…/</string>
<string name="search_label">Cari</string>
<string name="choose_file">Pilih Berkas Konten (*.zim)</string>
<string name="open_in_new_tab">Buka pranala di tab baru?</string>
<string name="hotspot_service_channel_name">Saluran Servis Hotspot</string>
<string name="hotspot_failed_title">Hotspot gagal dihidupkan</string>
<string name="hotspot_failed_message">Tampaknya hotspot Anda telah hidup. Silakan memutuskan koneksi hotspot wifi Anda untuk lanjut.</string>
<string name="go_to_wifi_settings_label">Ke pengaturan WIFI</string>
<string name="server_failed_message">Server tidak dapat dihidupkan. Silakan menyalakan hotspot Anda.</string>
<string name="server_failed_toast_message">Server tidak dapat dinyalakan.</string>
<string name="server_started_successfully_toast_message">Server berhasil dinyalakan.</string>
<string name="server_stopped_successfully_toast_message">Server berhasil dimatikan.</string>
<string name="hotspot_turned_on">Hotspot sudah menyala.</string>
<string name="hotspot_details_message">Berikut adalah detil hotspot lokal Anda.\nSSID : %1$s\nPass : %2$s</string>
<string name="progress_dialog_starting_server">Menyalakan server</string>
<string name="hotspot_dialog_neutral_button">LANJUT</string>
<string name="server_started_message">Masukkan alamat IP ini ke browser Anda untuk mengakses server %s</string>
<string name="error_file_not_found">Galat: Berkas ZIM yang dipilih tidak ditemukan.</string>
<string name="zim_not_opened">Zim file tidak dapat dibuka</string>
<string name="error_file_invalid">Galat: Berkas yang dipilih bukan berkas ZIM yang sah.</string>
<string name="error_article_url_not_found">Galat: Pemuatan artikel (Url: %1$s) gagal.</string>
<string name="pref_display_title">Tampilan</string>
@ -51,7 +67,10 @@
<string name="pref_clear_all_history_summary">Hapus riwayat penelusuran dan tab terakhir</string>
<string name="all_history_cleared">Semua Markah Telah Dibersihkan</string>
<string name="clear_all_history_dialog_title" fuzzy="true">Bersihkan Semua Markah</string>
<string name="share">Bagikan</string>
<string name="selected_file_cab_app_chooser_title">Bagikan ZIM file dengan:</string>
<string name="delete">Hapus</string>
<string name="cancel">Batalkan</string>
<string name="delete_specific_search_toast">Penelusuran terakhir telah dihapus</string>
<string name="hint_contents_drawer_message">Anda bisa menggulir ke kiri untuk melihat isi artikel ini</string>
<string name="got_it">Mengerti</string>
@ -77,9 +96,10 @@
<string name="local_zims">Perangkat</string>
<string name="remote_zims">Daring</string>
<string name="library">Perpustakaan</string>
<string name="delete_zim_body">Zim file berikut akan dihapus:\n\n%s</string>
<string name="delete_zims_toast">Berkas telah dihapus</string>
<string name="no_files_here">Tidak ada berkas disini</string>
<string name="download_no_space" fuzzy="true">Ruang tidak mencukupi untuk mengunduh berkas ini.</string>
<string name="download_no_space">Tidak tersedia cukup ruang data untuk mengunduh.</string>
<string name="space_available">Ruang yang Tersedia:</string>
<string name="zim_simple">Sederhana</string>
<string name="zim_no_pic">Tanpa Gambar</string>
@ -87,7 +107,7 @@
<string name="no_network_connection">Tidak ada sambungan jaringan</string>
<string name="help_2">Apa yang Kiwix lakukan?</string>
<string name="help_3">Kiwix adalah pembaca konten luring. Ini sangat mirip peramban tapi bukannya mengakses halaman web daring, Kiwix membaca konten dari sebuah berkas dalam format ZIM.</string>
<string name="help_4" fuzzy="true">Pada awalnya Kiwix dirancang untuk menyediakan Wikipedia luring, namun juga dapat membaca konten lainnya.</string>
<string name="help_4">Meskipun Kiwix awalnya dirancang untuk menyediakan Wikipedia secara offline, Kiwix juga dapat membaca konten lainnya.</string>
<string name="help_5">Dimana kontennya?</string>
<string name="help_6">Konten kami disimpan di situs web Kiwix.</string>
<string name="help_7">Mereka tersedia sebagai berkas ZIM. Ada banyak dari mereka:</string>
@ -127,6 +147,13 @@
<string name="your_languages">Bahasa terpilih:</string>
<string name="other_languages">Bahasa lain:</string>
<string name="humankind_knowledge">Humankind\'s knowledge, on your phone.</string>
<string name="go_to_previous_page">Ke halaman sebelumnya</string>
<string name="go_to_next_page">Ke halaman berikutnya</string>
<string name="select_languages">Pilih bahasa</string>
<string name="save_languages">Simpan bahasa</string>
<string name="send_feedback">Kirim masukan</string>
<string name="close_all_tabs">Tutup semua tab</string>
<string name="complete">Selesai</string>
<string name="ext_storage_write_permission_denied_add_note">Notes can\'t be used without access to storage</string>
<string name="note_share_error_file_missing">Note file doesn\'t exist</string>
<string name="no_bookmarks">Tidak Ada Markah</string>

View File

@ -4,6 +4,7 @@
* CloeRiva
* Einreiher
* G.garatti
* Gianfranco
* Matteocng
* Nivit
* Purodha
@ -100,6 +101,7 @@
<string name="go_to_settings">Vai alle impostazioni hotspot</string>
<string name="no_results">Nessun risultato</string>
<string name="no_bookmarks">Nessun segnalibro</string>
<string name="delete_history">Cancellare la cronologia?</string>
<string name="delete_bookmarks">Cancellare i segnalibri?</string>
<string name="delete_history">Cancellare tutta la cronologia?</string>
<string name="delete_bookmarks">Cancellare tutti i segnalibri?</string>
<string name="experimental_navigation">Navigazione sperimentale</string>
</resources>

View File

@ -260,8 +260,10 @@
<string name="no_bookmarks">אין סימניות</string>
<string name="no_history">אין היסטוריה</string>
<string name="device_default">ברירת המחדל של המכשיר</string>
<string name="delete_history">למחוק היסטוריה?</string>
<string name="delete_bookmarks">למחוק מועדפים?</string>
<string name="delete_history">למחוק את כל ההיסטוריה?</string>
<string name="delete_selected_history">למחוק את ההיסטוריה שנבחרה?</string>
<string name="delete_bookmarks">למחוק את כל המועדפים?</string>
<string name="delete_selected_bookmarks">למחוק את המועדפים שנבחרו?</string>
<string name="on">מופעל</string>
<string name="off">כבוי</string>
<string name="auto">אוטומטי</string>
@ -269,4 +271,5 @@
<string name="crash_checkbox_file_system">פרטי מערכת קבצים</string>
<string name="diagnostic_report">דוח אבחון</string>
<string name="diagnostic_report_message">נא לשלוח את כל הפרטים הבאים כדי שנוכל לאבחן את התקלה</string>
<string name="experimental_navigation">ניווט ניסיוני</string>
</resources>

View File

@ -4,6 +4,7 @@
* Alex00728
* CYAN
* Codenstory
* Ellif
* Gongsoonyee
* Jerrykim306
* Macofe
@ -41,7 +42,7 @@
<string name="server_failed_toast_message">서버를 시작하지 못했습니다.</string>
<string name="server_started_successfully_toast_message">서버가 성공적으로 시작되었습니다.</string>
<string name="server_stopped_successfully_toast_message">서버가 성공적으로 중단되었습니다.</string>
<string name="hotspot_turned_on">핫스팟이 켜져있습니다</string>
<string name="hotspot_turned_on">핫스팟이 켜져 있습니다</string>
<string name="hotspot_details_message">다음은 로컬 핫스팟의 상세 정보입니다.\nSSID : %1$s \nPass : %2$s</string>
<string name="server_textview_default_message">서버에 호스팅할 파일을 선택하십시오</string>
<string name="progress_dialog_starting_server">서버 시작 중</string>
@ -264,7 +265,9 @@
<string name="no_history">역사 없음</string>
<string name="device_default">장치 기본값</string>
<string name="delete_history">역사를 삭제할까요?</string>
<string name="delete_selected_history">선택한 역사를 지울까요?</string>
<string name="delete_bookmarks">북마크를 삭제할까요?</string>
<string name="delete_selected_bookmarks">선택한 북마크를 지울까요?</string>
<string name="on">켜기</string>
<string name="off">끄기</string>
<string name="auto">자동</string>
@ -272,4 +275,6 @@
<string name="crash_checkbox_file_system">파일 시스템 세부 정보</string>
<string name="diagnostic_report">진단 보고서</string>
<string name="diagnostic_report_message">저희가 문제를 진단할 수 있도록 다음의 자세한 정보를 모두 보내 주세요</string>
<string name="percentage">%d%%</string>
<string name="pref_text_zoom_title">글자 크기 조정</string>
</resources>

View File

@ -114,9 +114,10 @@
<string name="no_results">Keng Resultater</string>
<string name="no_bookmarks">Keng Lieszeechen!</string>
<string name="no_history">Keen Historique</string>
<string name="delete_history">Versioune läschen?</string>
<string name="delete_bookmarks">Lieszeeche läschen?</string>
<string name="delete_history" fuzzy="true">Versioune läschen?</string>
<string name="delete_bookmarks" fuzzy="true">Lieszeeche läschen?</string>
<string name="on">Un</string>
<string name="off">Aus</string>
<string name="auto">Automatesch</string>
<string name="experimental_navigation">Experimentell Naavigatioun</string>
</resources>

View File

@ -255,8 +255,10 @@
<string name="no_bookmarks">Нема обележувачи</string>
<string name="no_history">Нема историја</string>
<string name="device_default">Основно на уредот</string>
<string name="delete_history">Да ја избришам историјата?</string>
<string name="delete_bookmarks">Да ги избришам обележувачите?</string>
<string name="delete_history">Да ја избришам сета историја?</string>
<string name="delete_selected_history">Да ја избришам избраната историја?</string>
<string name="delete_bookmarks">Да ги избришам сите обележувачи?</string>
<string name="delete_selected_bookmarks">Да ги избришам избраните обележувачи?</string>
<string name="on">Вкл.</string>
<string name="off">Искл.</string>
<string name="auto">Авто</string>
@ -266,4 +268,5 @@
<string name="diagnostic_report_message">Испратете ги сите следни поединости за да можеме да го дијагностицираме проблемот</string>
<string name="percentage">%d%%</string>
<string name="pref_text_zoom_title">Приближување на текст</string>
<string name="experimental_navigation">Опитен прегледник</string>
</resources>

View File

@ -130,5 +130,5 @@
<string name="go_to_settings" fuzzy="true">സജ്ജീകരണങ്ങളിലേക്ക് പോവുക</string>
<string name="no_results">ഫലങ്ങൾ ഒന്നുമില്ല</string>
<string name="no_history">നാൾവഴിയില്ല</string>
<string name="delete_history">നാൾവഴി ഒഴിവാക്കട്ടെ?</string>
<string name="delete_history" fuzzy="true">നാൾവഴി ഒഴിവാക്കട്ടെ?</string>
</resources>

View File

@ -2,6 +2,7 @@
<!-- Authors:
* Ganesh Paudel
* Macofe
* Nirajan pant
* पर्वत सुबेदी
* राम प्रसाद जोशी
* सरोज कुमार ढकाल
@ -100,4 +101,9 @@
<string name="no_bookmarks">कुनै पनि पुस्तक चिनोहरू छैनन्</string>
<string name="no_history">कुनैपनि इतिहास छैन</string>
<string name="device_default">पुनर्निधारित उपकरण</string>
<string name="delete_history">सबै इतिहास मेटाउने?</string>
<string name="delete_selected_history">रोजिएको इतिहास मेटाउने?</string>
<string name="delete_bookmarks">सबै बुकमार्कहरू मेटाउने?</string>
<string name="delete_selected_bookmarks">रोजिएका बुकमार्कहरू मेटाउने?</string>
<string name="experimental_navigation">प्रयोगात्मक नेभिगेसन</string>
</resources>

View File

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--DARK COLOR THEME-->
<!--The same color values are defined for dark theme, but with values more appropriate for -->
<!--low-luminance UIs. These colors will be used by night/themes.xml.-->
<color name="color_primary">@color/blue400</color>
<color name="color_surface">@color/gray900</color>
<color name="color_error">@color/pink300</color>
<color name="color_on_primary">@color/white</color>
<color name="color_on_surface">@color/white</color>
<color name="color_on_error">@color/white</color>
<color name="text_secondary">@color/gray350</color>
<color name="text_tertiary">@color/gray500</color>
<color name="card_view_background">@color/gray850</color>
</resources>

View File

@ -1,9 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--Top level DayNight theme to be used in AndroidManifest.xml-->
<style name="KiwixTheme" parent="Base.KiwixTheme">
<!-- Dark theme customisations here-->
</style>
<item name="colorPrimary">@color/denim_blue400</item>
<item name="colorSurface">@color/mine_shaft_gray900</item>
<item name="colorError">@color/froly_pink300</item>
<item name="colorOnPrimary">@color/alabaster_white</item>
<item name="colorOnSurface">@color/alabaster_white</item>
<item name="colorOnError">@color/alabaster_white</item>
<item name="textSecondary">@color/mine_shaft_gray350</item>
<item name="textTertiary">@color/mine_shaft_gray500</item>
<item name="cardViewBackground">@color/mine_shaft_gray850</item>
</style>
</resources>

View File

@ -1,4 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="utf-8"?>
<!-- Authors:
* Elroy
* Festina90
* Jeleniccz
* Mainframe98
* PonkoSasuke
* Romaine
* Siebrand
-->
<resources>
<string name="menu_help">Hulp</string>
<string name="menu_home">Startpagina</string>
@ -11,10 +20,10 @@
<string name="menu_read_aloud">Voorlezen</string>
<string name="menu_read_aloud_stop">Stoppen met voorlezen</string>
<string name="save_media">Media opslaan als…</string>
<string name="save_media_error">Er is een fout opgetreden bij het opslaan van de media!</string>
<string name="save_media_saved">Het bestand is opgeslagen als %1$s in uw afbeeldingenmap</string>
<string name="save_media_error" fuzzy="true">Er is een fout opgetreden bij het opslaan van de media!</string>
<string name="save_media_saved" fuzzy="true">Het bestand is opgeslagen als %1$s in uw afbeeldingenmap</string>
<string name="search_label">Zoeken</string>
<string name="choose_file">Selecteer een ZIM inhoudsbestand (*.zim)</string>
<string name="choose_file" fuzzy="true">Selecteer een ZIM inhoudsbestand (*.zim)</string>
<string name="open_in_new_tab">Koppeling openen in nieuw tabblad?</string>
<string name="error_file_not_found">Fout: het geselecteerde ZIM-bestand kon niet gevonden worden.</string>
<string name="error_file_invalid">Fout: het geselecteerde bestand is geen geldig ZIM-bestand.</string>
@ -30,29 +39,68 @@
<string name="pref_language_chooser">Taal kiezen</string>
<string name="tts_lang_not_supported">De taak van deze pagina wordt niet ondersteund, of de juiste taalgegevens zijn niet geïnstalleerd. De pagina kan niet correct gelezen worden.</string>
<string name="no_reader_application_installed">Kon geen geïnstalleerde applicatie vinden voor dit type bestand</string>
<string name="no_section_info">Geen inhoudsheaders gevonden</string>
<string name="request_storage">Om toegang te krijgen tot ZIM-bestanden is toegang tot uw opslag nodig</string>
<string name="no_section_info" fuzzy="true">Geen inhoudsheaders gevonden</string>
<string name="request_storage" fuzzy="true">Om toegang te krijgen tot ZIM-bestanden is toegang tot uw opslag nodig</string>
<string name="delete_recent_search_item">Dit item verwijderen?</string>
<string name="delete">Verwijderen</string>
<string name="cancel">Annuleren</string>
<string name="did_you_know">Wist u dat?</string>
<string name="undo">Ongedaan maken</string>
<string name="bookmark_added">Bladwijzer toegevoegd</string>
<string name="rate_dialog_title">Beoordeel ons alstublieft</string>
<string name="rate_dialog_msg_1">Als u geniet van het gebruik van</string>
<string name="rate_dialog_msg_2">, geef dan even een beoordeling. Dank u wel voor uw steun!</string>
<string name="rate_dialog_positive">Beoordelen!</string>
<string name="no_thanks">Nee, bedankt</string>
<string name="rate_dialog_neutral">Later</string>
<string name="pref_newtab_background_title">Nieuw tabblab in de achtergrond openen</string>
<string name="pref_newtab_background_summary">Nieuwe tabbladen worden niet actief gemaakt</string>
<string name="local_zims">Apparaat</string>
<string name="library">Bibliotheek</string>
<string name="zim_simple">Eenvoudig</string>
<string name="zim_no_pic">Geen afbeeldingen</string>
<string name="zim_no_vid">Geen video\'s</string>
<string name="help_6">Onze inhoud is ondergebracht op de Kiwix website</string>
<string-array name="description_help_2">
<item>@string/help_3</item>
<item>@string/help_4</item>
</string-array>
<string-array name="description_help_5">
<item>@string/help_6</item>
<item>@string/help_7</item>
<item>@string/help_8</item>
<item>@string/help_9</item>
<item>@string/help_10</item>
<item>@string/help_11</item>
</string-array>
<string name="pref_storage">Opslag</string>
<string name="pref_current_folder">Huidige map</string>
<string name="tts_pause">pauzeren</string>
<string name="tts_resume">hervatten</string>
<string name="internal_storage">Intern</string>
<string name="external_storage">Extern</string>
<string name="yes">Ja</string>
<string name="no">Nee</string>
<string name="next">Volgende</string>
<string name="previous">Vorige</string>
<string name="time_day">dag</string>
<string name="time_hour">u</string>
<string name="time_minute">min</string>
<string name="time_second">s</string>
<string name="time_left">te gaan</string>
<string name="time_today">Vandaag</string>
<string name="time_yesterday">Gisteren</string>
<string name="your_languages">Geselecteerde talen:</string>
<string name="other_languages">Andere talen:</string>
<string name="new_tab_shortcut_label">Nieuw tabblad</string>
<string name="get_started">Aan de slag</string>
<string name="table_of_contents">Inhoudsopgave</string>
<string name="save_languages">Talen opslaan</string>
<string name="history">Geschiedenis</string>
<string name="search_history">Zoekgeschiedenis</string>
<string name="close_all_tabs">Alle tabbladen sluiten</string>
<string name="pending_state">In afwachting</string>
<string name="running_state">In behandeling</string>
<string name="complete">Afgerond</string>
<string name="paused_state">Gepauzeerd</string>
<string name="failed_state">Mislukt: %s</string>
<string name="save">Opslaan</string>
<string name="note">Opmerking</string>
<string name="file_transfer_complete">Bestandsoverdracht compleet</string>
<string name="your_device">Uw apparaat:</string>
<string name="tag_text_only">Alleen text</string>
<string name="no_results">Geen resultaten</string>
<string name="no_bookmarks">Geen bladwijzers</string>
<string name="no_history">Geen geschiedenis</string>
<string name="on">Aan</string>
<string name="off">Uit</string>
<string name="auto">Automatisch</string>
</resources>

View File

@ -265,8 +265,8 @@
<string name="no_bookmarks">Brak zakładek</string>
<string name="no_history">Nie ma Historii</string>
<string name="device_default">Domyślne urządzenie</string>
<string name="delete_history">Usunąć historię?</string>
<string name="delete_bookmarks">Usunąć zakładki?</string>
<string name="delete_history" fuzzy="true">Usunąć historię?</string>
<string name="delete_bookmarks" fuzzy="true">Usunąć zakładki?</string>
<string name="on">Włącz</string>
<string name="off">Wyłącz</string>
<string name="auto">Automatycznie</string>

View File

@ -261,8 +261,10 @@
<string name="no_bookmarks">Sem Favoritos</string>
<string name="no_history">Sem histórico</string>
<string name="device_default">Padrão do dispositivo</string>
<string name="delete_history">Apagar histórico?</string>
<string name="delete_bookmarks">Excluir marcadores?</string>
<string name="delete_history">Excluir todo o histórico?</string>
<string name="delete_selected_history">Excluir histórico selecionado?</string>
<string name="delete_bookmarks">Excluir todos os favoritos?</string>
<string name="delete_selected_bookmarks">Excluir favoritos selecionados?</string>
<string name="on">Lig</string>
<string name="off">Des</string>
<string name="auto">Auto</string>
@ -272,4 +274,5 @@
<string name="diagnostic_report_message">Envie todos os detalhes a seguir para que possamos diagnosticar o problema</string>
<string name="percentage">%d%%</string>
<string name="pref_text_zoom_title">Zoom de texto</string>
<string name="experimental_navigation">Navegação experimental</string>
</resources>

View File

@ -1,10 +1,12 @@
<?xml version="1.0" encoding="utf-8"?><!-- Authors:
<?xml version="1.0" encoding="utf-8"?>
<!-- Authors:
* Amire80
* Fitoschido
* Kelson
* Liuxinyu970226
* Robby
* Shirayuki
* Stephane
* The RedBurn
* Verdy p
-->
@ -15,6 +17,7 @@
<string name="bookmarks">{{Identical|Bookmark}}</string>
<string name="menu_random_article">{{Identical|Random article}}</string>
<string name="menu_full_screen">{{Identical|Full screen}}</string>
<string name="menu_host_books">Il s\'agit de la fonctionnalité hotspot - l\'anglais \"host books\" n\'est pas particulièrement satisfaisant à la base.</string>
<string name="search_label">{{Identical|Search}}</string>
<string name="hotspot_details_message">Do not change:\n* &lt;code&gt;%1$s&lt;/code&gt; (replaced by the “SSID” value identifying the WiFi hotspot identity for users)\n* &lt;code&gt;%2$s&lt;/code&gt; (replaced by the password or code configured in the hotspot to authorize the association and network connection)</string>
<string name="hotspot_dialog_title">This the title displayed when a user clicks wants to start the server in the host books section</string>
@ -28,8 +31,8 @@
<string name="pref_language_chooser">{{Identical|Choose language}}</string>
<string name="delete">{{Identical|Delete}}</string>
<string name="delete_history">Ask if the user wants to delete all history items.</string>
<string name="delete_bookmarks">Ask if the user wants to delete all bookmarks.</string>
<string name="delete_selected_history">Ask if the user wants to delete a number of selected history items.</string>
<string name="delete_bookmarks">Ask if the user wants to delete all bookmarks.</string>
<string name="delete_selected_bookmarks">Ask if the user wants to delete a number of selected bookmarks.</string>
<string name="cancel">{{identical|Cancel}}</string>
<string name="undo">{{Identical|Undo}}</string>
@ -49,8 +52,8 @@
<string name="save">{{Identical|Save}}</string>
<string name="go_to_settings">This is used in the start server dialog and leads the user to mobile hotspot settings when pressed</string>
<string name="no_bookmarks">This means \"there are no bookmarks\"</string>
<string name="experimental_navigation">This is a menu item that opens the applicaiton in a new experimental mode that uses different navigation.</string>
<string name="on">This is used in the settings screen to turn on the night mode.</string>
<string name="off">This is used in the settings screen to turn off the night mode.</string>
<string name="auto">This is used in the settings screen to turn the night mode on or off automatically depending upon the system settings of the phone.</string>
<string name="experimental_navigation">This is a menu item that opens the applicaiton in a new experimental mode that uses different navigation.</string>
</resources>

View File

@ -258,8 +258,8 @@
<string name="no_bookmarks">Nici un semn de carte</string>
<string name="no_history">Fără Istorie</string>
<string name="device_default">Dispozitiv prestabilit</string>
<string name="delete_history">Șterge istoricul?</string>
<string name="delete_bookmarks">Ștergeți semnele de carte?</string>
<string name="delete_history" fuzzy="true">Șterge istoricul?</string>
<string name="delete_bookmarks" fuzzy="true">Ștergeți semnele de carte?</string>
<string name="on">Pornit</string>
<string name="off">Oprit</string>
<string name="auto">Auto</string>
@ -267,4 +267,6 @@
<string name="crash_checkbox_file_system">Detalii Sistem Fișiere</string>
<string name="diagnostic_report">Raport Diagnostic</string>
<string name="diagnostic_report_message">Vă rugăm să trimiteți toate următoarele detalii, astfel încât să putem diagnostica problema</string>
<string name="percentage">%d%%</string>
<string name="pref_text_zoom_title">Mărește text</string>
</resources>

View File

@ -15,6 +15,8 @@
* Okras
* Pacha Tchernof
* Putnik
* Smavrina
* Teretalexev
-->
<resources>
<string name="menu_help">Помощь</string>
@ -24,18 +26,43 @@
<string name="bookmarks">Закладки</string>
<string name="menu_random_article">Случайная статья</string>
<string name="menu_full_screen">Полный экран</string>
<string name="menu_exit_full_screen">Выйти из режима полного экрана</string>
<string name="menu_exit_full_screen">Выйти из полноэкранного режима</string>
<string name="menu_read_aloud">Читать вслух</string>
<string name="menu_read_aloud_stop">Остановить чтение вслух</string>
<string name="menu_support_kiwix">Поддержать Kiwix</string>
<string name="menu_host_books">Разместить книги</string>
<string name="save_media">Сохранить Медиа-файлы</string>
<string name="save_media_error">Произошла ошибка при сохранении медиафайла!</string>
<string name="save_media_saved">Медиафайл сохранён как %s в Android/media/org.kiwix…/</string>
<string name="search_label">Поиск</string>
<string name="choose_file">Выберите файл содержимого (*.zim)</string>
<string name="open_in_new_tab">Открыть ссылку в новой вкладке?</string>
<string name="hotspot_service_channel_name">Сервисный канал Точки доступа</string>
<string name="hotspot_failed_title">Не удалось запустить точку доступа</string>
<string name="hotspot_failed_message">Кажется, ваша точка доступа уже включена. Пожалуйста, выключите точку доступа, чтобы продолжить.</string>
<string name="go_to_wifi_settings_label">Перейти к настройкам WIFI</string>
<string name="hotspot_running">Точка доступа работает</string>
<string name="no_books_selected_toast_message">Пожалуйста, сначала выберете книги</string>
<string name="server_failed_message">Невозможно запустить сервер. Пожалуйста, включите вашу точку доступа</string>
<string name="server_failed_toast_message">Невозможно запустить сервер.</string>
<string name="server_started_successfully_toast_message">Сервер успешно запущен</string>
<string name="server_stopped_successfully_toast_message">Сервер успешно остановлен.</string>
<string name="hotspot_turned_on">Точка доступа включена</string>
<string name="hotspot_details_message">Детали вашей точки доступа:\nSSID: %1$s \nПароль: %2$s</string>
<string name="server_textview_default_message">Выберете файлы, которые вы хотите разместить на сервере</string>
<string name="progress_dialog_starting_server">Запуск сервера</string>
<string name="hotspot_dialog_title">Инструкции по размещению книг</string>
<string name="wifi_dialog_title">Обнаружено Wi-Fi подключение</string>
<string name="wifi_dialog_body">Чтобы просматривать книги, размещённые на других устройствах, проверьте, что все устройства подсоединены к одной и той же сети WiFi.</string>
<string name="hotspot_dialog_message">Чтобы данная функция работала, вам нужно включить точку доступа WiFi или подключить устройства отправителя и получателя к одной и той же сети WiFi.</string>
<string name="hotspot_dialog_neutral_button">ПРОДОЛЖИТЬ</string>
<string name="hotspot_channel_description">Обновления о состоянии вашей точки доступа/сервера.</string>
<string name="hotspot_notification_content_title">Точка Доступа Kiwix</string>
<string name="start_server_label">Запустить сервер</string>
<string name="stop_server_label">Остановить сервер</string>
<string name="server_started_message">Введите этот IP адрес в ваш браузер чтобы получить доступ к серверу %s</string>
<string name="error_file_not_found">Ошибка: выбранный ZIM-файл не найден.</string>
<string name="zim_not_opened">Невозможно открыть файл zim</string>
<string name="error_file_invalid">Ошибка: Выбранный файл не является пригодным ZIM-файлом.</string>
<string name="error_article_url_not_found">Ошибка: Загрузка статьи (Url: %1$s) не удалась.</string>
<string name="pref_display_title">Экран</string>
@ -60,8 +87,12 @@
<string name="pref_clear_all_history_title">Очистить историю</string>
<string name="pref_clear_all_history_summary">Очистить недавние поисковые запросы и историю вкладок</string>
<string name="all_history_cleared">Вся история очищена</string>
<string name="clear_all_history_dialog_title" fuzzy="true">Очистить всю историю</string>
<string name="pref_clear_all_bookmarks_title">Очистить закладки</string>
<string name="clear_all_history_dialog_title">Очистить всю историю?</string>
<string name="share">Поделиться</string>
<string name="selected_file_cab_app_chooser_title">Поделиться файлами ZIM с:</string>
<string name="delete">Удалить</string>
<string name="cancel">Отменить</string>
<string name="delete_specific_search_toast">Последний поиск удалён</string>
<string name="hint_contents_drawer_message">Вы можете пролистнуть влево, чтобы увидеть содержание статьи</string>
<string name="got_it">Понятно</string>
@ -87,17 +118,18 @@
<string name="local_zims">Устройство</string>
<string name="remote_zims">Онлайн</string>
<string name="library">Библиотека</string>
<string name="delete_zim_body">Следующие файлы zim будут удалены:\n\n%s</string>
<string name="delete_zims_toast">Файл успешно удалён</string>
<string name="no_files_here">Файлы отсутствуют</string>
<string name="download_no_space" fuzzy="true">Недостаточно места для загрузки этого файла.</string>
<string name="download_no_space">Недостаточно места для загрузки.</string>
<string name="space_available">Доступно Места:</string>
<string name="zim_simple">Простой</string>
<string name="zim_no_pic">Без картинок</string>
<string name="zim_no_vid">Нет видео</string>
<string name="zim_no_vid">Без видео</string>
<string name="no_network_connection">Отсутствует сетевое подключение</string>
<string name="help_2">Что делает Kiwix?</string>
<string name="help_3">Kiwix - это автономный контент-ридер. Он действует схоже с браузером, но вместо обращения к онлайн страницам, он считывает содержимое из файла в формате ZIM.</string>
<string name="help_4">Хотя Kiwix и был изначально разработан, чтобы просматривать Wikipedia офлайн, он также пригоден и для другого содержимого.</string>
<string name="help_4">Хотя Kiwix и был изначально разработан, чтобы просматривать Wikipedia оффлайн, он также пригоден и для другого содержимого.</string>
<string name="help_5">Где содержимое?</string>
<string name="help_6">Наш контент размещён на сайте Kiwix.</string>
<string name="help_7">Они доступны как ZIM файлы. Их существует много:</string>
@ -120,43 +152,136 @@
<string name="download_change_storage">Выбор носителя информации</string>
<string name="tts_not_enabled">Перевод текста в речь не доступен для этого ZIM файла</string>
<string name="texttospeech_initialization_failed">Не удалось инициализировать текст в речь. Пожалуйста, попробуйте еще раз</string>
<string name="texttospeech_error">Непредвиденная ошибка при переводе текста в речь. Пожалуйста, попробуйте ещё раз.</string>
<string name="search_error">Неожиданная ошибка при поиске. Пожалуйста, попробуйте еще раз</string>
<string name="next">Далее</string>
<string name="previous">Предыдущий</string>
<string name="wifi_only_title">Разрешить загрузку контента через мобильную сеть?</string>
<string name="wifi_only_msg">При выборе “Да”, вы не будете предупреждаться в будущем. Однако, вы всегда можете поменять это в Настройках.</string>
<string name="pref_wifi_only">Загрузить контент только через WiFi</string>
<string name="pref_wifi_only">Загружать контент только через WiFi</string>
<string name="time_day">день</string>
<string name="time_hour">ч</string>
<string name="time_minute">м</string>
<string name="time_second">с</string>
<string name="time_left">осталось</string>
<string name="time_today">Сегодня</string>
<string name="time_yesterday">Вчера</string>
<string name="pref_external_link_popup_title">Предупреждать когда происходит ввод внешних ссылок</string>
<string name="pref_external_link_popup_summary">Показать всплывающее сообщение про снятие дополнительных средств мобильным оператором или невозможности работы ссылок в офлайне.</string>
<string name="external_link_popup_dialog_title" fuzzy="true">Ввод внешней ссылки</string>
<string name="external_link_popup_dialog_title">Ввод Внешней Ссылки!</string>
<string name="external_link_popup_dialog_message">Вы указали внешнюю ссылку. Её открытие может привести к снятию средств мобильным оператором или может не сработать, если вы офлайн. Хотите продолжить?</string>
<string name="do_not_ask_anymore">Больше не спрашивай</string>
<string name="do_not_ask_anymore">Больше не спрашивать</string>
<string name="your_languages">Выбранные языки:</string>
<string name="other_languages">Другие языки:</string>
<string name="no_items_msg">Нет доступных элементов</string>
<string name="crash_title">Хммм… Как неловко</string>
<string name="crash_description">Похоже, приложение вылетело.\n\nНе могли бы вы помочь нам исправить эту проблему, предоставив следующую информацию?</string>
<string name="crash_checkbox_language">Ваши Языковые Настройки</string>
<string name="crash_checkbox_zimfiles">Список Ваших Zim Файлов</string>
<string name="crash_checkbox_exception">Детали ошибки</string>
<string name="crash_checkbox_logs">Журнал Действий Приложения</string>
<string name="crash_checkbox_device">Подробности об Устройстве</string>
<string name="crash_button_confirm">ОТПРАВИТЬ ПОДРОБНОСТИ</string>
<string name="download_books">Скачивайте книги</string>
<string name="shortcut_disabled_message">Ярлык недоступен</string>
<string name="new_tab_shortcut_label">Новая вкладка</string>
<string name="get_content_shortcut_label">Получить содержимое</string>
<string name="fav_icon">Иконка</string>
<string name="articleCount">%s статей</string>
<string name="get_started">Начать</string>
<string name="download_books">Скачать книги</string>
<string name="humankind_knowledge">Знания человечества, на вашем телефоне.</string>
<string name="welcome_to_the_family">Добро пожаловать в семью</string>
<string name="save_books_offline">Сохранить книги в автономный режим</string>
<string name="download_books_message">Скачивайте книги и читайте, где бы вы ни были.</string>
<string name="unable_to_add_to_bookmarks">Не удалось добавить в закладки</string>
<string name="go_to_previous_page">Перейти к предыдущей странице</string>
<string name="go_to_next_page">Перейти к следующей странице</string>
<string name="table_of_contents">Содержание</string>
<string name="select_languages">Выбрать языки</string>
<string name="save_languages">Сохранить языки</string>
<string name="send_feedback">Отправить отзыв</string>
<string name="expand">Развернуть</string>
<string name="bookmarks_from_current_book" fuzzy="true">Закладки в текущей книге</string>
<string name="history">История</string>
<string name="history_from_current_book">Посмотреть историю из всех книг</string>
<string name="search_history">Поиск в истории</string>
<string name="selected_items">%1$d выбрано</string>
<string name="bookmarks_from_current_book">Показать Закладки Во Всех Книгах</string>
<string name="search_bookmarks">Искать в закладках</string>
<string name="switch_tabs">Переключить вкладки</string>
<string name="close_all_tabs">Закрыть все вкладки</string>
<string name="pending_state">В ожидании</string>
<string name="running_state">В процессе</string>
<string name="complete">Завершено</string>
<string name="paused_state">Приостановлено</string>
<string name="failed_state">Ошибка: %s</string>
<string name="save">Сохранить</string>
<string name="note">Заметка</string>
<string name="wiki_article_title">Заголовок Статьи Wiki</string>
<string name="ext_storage_permission_rationale_add_note">Разрешение на хранение необходимо для Заметок</string>
<string name="ext_storage_write_permission_denied_add_note">Заметки не могут быть использованы без разрешения на хранение</string>
<string name="note_save_unsuccessful">Заметка не сохранена</string>
<string name="note_delete_successful">Заметка успешно удалена</string>
<string name="note_delete_unsuccessful">Заметка не была удалена</string>
<string name="note_save_successful">Заметка сохранена</string>
<string name="note_save_error_storage_not_writable">Ошибка при сохранении заметки: запись в хранилище не разрешена</string>
<string name="note_share_error_file_missing">Файл заметок не существует</string>
<string name="note_share_app_chooser_title">Поделиться файлом заметок с:</string>
<string name="confirmation_alert_dialog_message">Отменить несохранённые изменения?</string>
<string name="delete_notes_confirmation_msg">Удалить все заметки?</string>
<string name="ext_storage_permission_not_granted">Ошибка: Отсутствует разрешение на хранение</string>
<string name="pref_clear_all_notes_title" fuzzy="true">Очистить Все Заметки</string>
<string name="notes_deletion_successful">Папка с заметками полностью удалена</string>
<string name="notes_deletion_unsuccessful">Некоторые файлы не были удалены</string>
<string name="books_count">%d книг</string>
<string name="discovery_initiated">Обнаружение начато</string>
<string name="discovery_failed">Обнаружение не удалось</string>
<string name="severe_loss_error">Серьёзная ошибка! Попробуйте выключить и снова включить WiFi P2P</string>
<string name="connection_failed">Не удалось установить соединение</string>
<string name="permission_rationale_location">Доступ к местонахождению требуется Android для поиска близлежащих устройств</string>
<string name="permission_refused_location">Невозможно обнаружить устройства без доступа к местоположению</string>
<string name="permission_refused_storage">Невозможно получить доступ к файлам zim без разрешения на доступ к хранилищу</string>
<string name="request_enable_location">Разрешите доступ к местоположению, чтобы позволить поиск устройств</string>
<string name="discovery_needs_location">Поиск близлежащих устройств невозможен без доступа к местоположению</string>
<string name="request_enable_wifi">Включите WiFi P2P в настройках системы</string>
<string name="discovery_needs_wifi">Поиск устройств невозможен без включённого WiFi</string>
<string name="transfer_to">Передать файлы на %s?</string>
<string name="device_not_cooperating">Выбранное устройство отказало в передаче</string>
<string name="file_transfer_complete">Передача файла завершена</string>
<string name="error_during_transfer">Произошла ошибка во время передачи файла</string>
<string name="error_transferring">Ошибка при передаче файла %s</string>
<string name="get_content_from_nearby_device">Получить контент с устройства рядом</string>
<string name="search_for_peers">Поиск устройств</string>
<string name="your_device">Ваше устройство:</string>
<string name="nearby_devices">УСТРОЙСТВА РЯДОМ</string>
<string name="no_devices_found">Устройства не найдены. Нажмите кнопку Поиск чтобы попробовать ещё раз.</string>
<string name="files_for_transfer">ФАЙЛЫ ДЛЯ ПЕРЕДАЧИ</string>
<string name="preparing_files">Подготовка файлов для передачи…</string>
<string name="performing_handshake">Производим “рукопожатие”…</string>
<string name="status">Статус</string>
<string name="pref_clear_all_notes_summary">Очистить все заметки во всех статьях</string>
<string name="pref_clear_all_notes_title">Очистить все заметки</string>
<string name="tag_pic">Изображение</string>
<string name="tag_vid">Видео</string>
<string name="tag_text_only">Только текст</string>
<string name="tag_short_text">Короткий текст</string>
<string name="storage_permission_denied">Доступ к хранилищу запрещён</string>
<string name="grant_read_storage_permission">Для работы этому приложению необходим доступ к хранилищу на чтение. Пожалуйста, разрешите доступ в ваших настройках</string>
<string name="go_to_settings">Перейти к Настройкам Точки Доступа</string>
<string name="no_results">Нет результатов</string>
<string name="no_bookmarks">Нет Закладок</string>
<string name="delete_history">Удалить историю?</string>
<string name="delete_bookmarks">Удалить закладки?</string>
<string name="no_history">История пуста</string>
<string name="device_default">Настройки устройства по умолчанию</string>
<string name="delete_history">Удалить всю историю?</string>
<string name="delete_selected_history">Очистить Выбранную историю?</string>
<string name="delete_bookmarks">Удалить все закладки?</string>
<string name="delete_selected_bookmarks">Удалить Выбранные Закладки?</string>
<string name="on">Вкл</string>
<string name="off">Выкл</string>
<string name="auto">Авто</string>
<string name="send_report">Отправить отчёт диагностики</string>
<string name="crash_checkbox_file_system">Информация о файловой системе</string>
<string name="diagnostic_report">Отчёт диагностики</string>
<string name="diagnostic_report_message">Пожалуйста, пришлите нам всю информацию ниже, чтобы мы смогли обнаружить проблему</string>
<string name="percentage">%d%%</string>
<string name="pref_text_zoom_title">Масштаб Текста</string>
<string name="experimental_navigation">Экспериментальная навигация</string>
</resources>

View File

@ -254,8 +254,8 @@
<string name="no_bookmarks">Perunu sinnalibru!</string>
<string name="no_history">Peruna cronologia</string>
<string name="device_default">Valore predefinidu de su dispositivu</string>
<string name="delete_history">Iscantzellare sa cronologia?</string>
<string name="delete_bookmarks">Iscantzellare sos sinnalibros?</string>
<string name="delete_history" fuzzy="true">Iscantzellare sa cronologia?</string>
<string name="delete_bookmarks" fuzzy="true">Iscantzellare sos sinnalibros?</string>
<string name="on">Alluta</string>
<string name="off">Istudada</string>
<string name="auto">Automàtica</string>

View File

@ -82,8 +82,10 @@
<string name="no_bookmarks">Нема обележивача</string>
<string name="no_history">Нема историјата</string>
<string name="device_default">Подразумеване вредности уређаја</string>
<string name="delete_history">Избрисати историјат?</string>
<string name="delete_bookmarks">Избрисати обележиваче?</string>
<string name="delete_history">Избрисати целу историју?</string>
<string name="delete_selected_history">Избрисати изабрану историју?</string>
<string name="delete_bookmarks">Избрисати све обележиваче?</string>
<string name="delete_selected_bookmarks">Избрисати изабране обележиваче?</string>
<string name="on">Укљ.</string>
<string name="off">Искљ.</string>
<string name="auto">Ауто</string>
@ -91,4 +93,5 @@
<string name="crash_checkbox_file_system">Детаљи о систему датотека</string>
<string name="diagnostic_report">Дијагностички извештај</string>
<string name="diagnostic_report_message">Пошаљите све детаље како бисмо могли да дијагностикујемо проблем</string>
<string name="experimental_navigation">Експериментална навигација</string>
</resources>

View File

@ -3,6 +3,7 @@
* Abijeet Patro
* Jopparn
* Skalman
* Susann Schweden
* Technic2
* WikiPhoenix
-->
@ -40,6 +41,8 @@
<string name="server_textview_default_message">Välj filerna du vill vara värd för på servern</string>
<string name="progress_dialog_starting_server">Startar server</string>
<string name="hotspot_dialog_title" fuzzy="true">Aktivera din WiFi-surfpunkt</string>
<string name="wifi_dialog_title">WiFi-förbindelse upptäckt</string>
<string name="wifi_dialog_body">För att kunna se böcker på andra enheter, måste säkerställas att alla enheter är anslutna till samma WiFi-nätverk.</string>
<string name="hotspot_dialog_message">För att denna funktion ska fungera måste du först aktivera din WiFi-surfpunkt manuellt eller se till att värdens enhet och mottagarens enhet är på samma nätverk.</string>
<string name="hotspot_dialog_neutral_button">FORTSÄTT</string>
<string name="hotspot_channel_description">Uppdateringar om tillståndet för din surfpunkt/server.</string>
@ -58,8 +61,8 @@
<string name="pref_night_mode_summary">Visa artiklar med inverterade färger</string>
<string name="pref_back_to_top">Tillbaka till toppen</string>
<string name="pref_back_to_top_summary">Visar en knapp i slutet på sidan för att rulla upp till toppen</string>
<string name="pref_hide_toolbar">Dölj verktygsfält vid rullning</string>
<string name="pref_hide_toolbar_summary">Dölj verktygsfältet när sidan rullar nedåt</string>
<string name="pref_hide_toolbar">Fortsätt visa verktygsfältet</string>
<string name="pref_hide_toolbar_summary">Skyddar verktygsfältet från att försvinna när du bläddrar i innehållet</string>
<string name="pref_language_title">Språk</string>
<string name="pref_language_chooser">Välj ett språk</string>
<string name="pref_credits">Bidragsgivare och licenser</string>
@ -220,6 +223,7 @@
<string name="books_count">%d bok/böcker</string>
<string name="connection_failed">Anslutning misslyckades</string>
<string name="permission_refused_storage">Kan inte komma åt zim-filer utan lagringsbehörighet</string>
<string name="request_enable_wifi">Aktivera WiFi P2P i systeminställningar</string>
<string name="transfer_to">Överför filer till %s?</string>
<string name="file_transfer_complete">Filöverföring slutfördes</string>
<string name="error_during_transfer">Ett fel uppstod under överförning</string>
@ -245,10 +249,14 @@
<string name="no_bookmarks">Inga bokmärken</string>
<string name="no_history">Ingen historik</string>
<string name="device_default">Enhetsstandard</string>
<string name="delete_history">Radera historik?</string>
<string name="delete_bookmarks">Radera bokmärken?</string>
<string name="delete_history">Radera all historik?</string>
<string name="delete_selected_history">Radera vald historik?</string>
<string name="delete_bookmarks">Radera alla bokmärken?</string>
<string name="delete_selected_bookmarks">Radera valda bokmärken?</string>
<string name="on"></string>
<string name="off">Av</string>
<string name="auto">Auto</string>
<string name="send_report">Skicka diagnostisk rapport</string>
<string name="crash_checkbox_file_system">Filsystemsdetaljer</string>
<string name="diagnostic_report">Diagnostisk rapport</string>
</resources>

View File

@ -257,7 +257,7 @@
<string name="pref_clear_all_notes_title">Tüm notları temizle</string>
<string name="tag_pic">Resim</string>
<string name="tag_vid">Video</string>
<string name="tag_text_only">Sadece Metin</string>
<string name="tag_text_only">Yalnızca Metin</string>
<string name="tag_short_text">Kısa Metin</string>
<string name="storage_permission_denied">Depolama İzni Reddedildi</string>
<string name="grant_read_storage_permission">Bu uygulama çalışması için depolama okuma yeteneği gerektirir. Lütfen ayarlarınızda izin verin</string>
@ -266,8 +266,10 @@
<string name="no_bookmarks">Yer İmi Yok</string>
<string name="no_history">Geçmiş Yok</string>
<string name="device_default">Cihaz Varsayılanı</string>
<string name="delete_history">Geçmiş Silinsin mi?</string>
<string name="delete_bookmarks">Yer İşaretleri Silinsin mi?</string>
<string name="delete_history">Tüm Geçmişi Silinsin mi?</string>
<string name="delete_selected_history">Seçilmiş Geçmişi Silinsin mi?</string>
<string name="delete_bookmarks">Tüm Yer İşaretleri Silinsin mi?</string>
<string name="delete_selected_bookmarks">Seçilmiş Yer İşaretleri Silinsin mi?</string>
<string name="on">ık</string>
<string name="off">Kapalı</string>
<string name="auto">Otomatik</string>
@ -275,4 +277,7 @@
<string name="crash_checkbox_file_system">Dosya Sistemi Ayrıntıları</string>
<string name="diagnostic_report">Teşhis Raporu</string>
<string name="diagnostic_report_message">Sorunu teşhis edebilmemiz için lütfen aşağıdaki tüm ayrıntıları gönderin</string>
<string name="percentage">%d%%</string>
<string name="pref_text_zoom_title">Metin Yakınlığı</string>
<string name="experimental_navigation">Deneysel Gezintisi</string>
</resources>

View File

@ -260,8 +260,10 @@
<string name="no_bookmarks">沒有書籤!</string>
<string name="no_history">沒有歷史</string>
<string name="device_default">設備預設</string>
<string name="delete_history">刪除歷史?</string>
<string name="delete_bookmarks">刪除書籤?</string>
<string name="delete_history">刪除所有歷史?</string>
<string name="delete_selected_history">刪除所選的歷史?</string>
<string name="delete_bookmarks">刪除所有書籤?</string>
<string name="delete_selected_bookmarks">刪除所選的書籤?</string>
<string name="on">開啟</string>
<string name="off">關閉</string>
<string name="auto">自動</string>
@ -271,4 +273,5 @@
<string name="diagnostic_report_message">請傳送所有以下詳細資訊,以讓我們可以方便診斷問題</string>
<string name="percentage">%d%%</string>
<string name="pref_text_zoom_title">文字縮放</string>
<string name="experimental_navigation">實現性導覽</string>
</resources>

View File

@ -3,6 +3,7 @@
* A Chinese Wikipedian
* Abijeet Patro
* Akagisoy
* Arthur2e5
* Josephine W.
* Liuxinyu970226
* SomeyaMako
@ -24,15 +25,38 @@
<string name="menu_exit_full_screen">退出全屏</string>
<string name="menu_read_aloud">朗读</string>
<string name="menu_read_aloud_stop">停止朗读</string>
<string name="menu_support_kiwix">支持Kiwix</string>
<string name="menu_host_books">成为服务器共享书籍</string>
<string name="save_media">保存媒体</string>
<string name="save_media_error">尝试保存该媒体时出错!</string>
<string name="save_media_saved">已将媒体作为%s保存至Android/media/org.kiwix…/</string>
<string name="search_label">搜索</string>
<string name="choose_file">选择一个内容文件(*.zim</string>
<string name="open_in_new_tab">在新标签页打开链接?</string>
<string name="hotspot_service_channel_name">热点服务频段</string>
<string name="hotspot_failed_title">未能启动热点</string>
<string name="hotspot_failed_message">你的热点好像已经打开了。请先关闭 Wi-Fi 热点再继续。</string>
<string name="go_to_wifi_settings_label">转到WIFI设置</string>
<string name="hotspot_running">运行热点</string>
<string name="no_books_selected_toast_message">请先选择书籍</string>
<string name="server_failed_message">未能启动服务器。请打开热点。</string>
<string name="server_failed_toast_message">未能启动服务器。</string>
<string name="server_started_successfully_toast_message">成功启动服务器。</string>
<string name="server_stopped_successfully_toast_message">成功停止服务器。</string>
<string name="hotspot_turned_on">热点已开启</string>
<string name="hotspot_details_message">以下为您的本地热点的信息。\nSSID%1$s \n密码%2$s</string>
<string name="server_textview_default_message">选择你想在服务器上共享的文件</string>
<string name="progress_dialog_starting_server">正在启动服务器</string>
<string name="hotspot_dialog_title">书籍共享说明</string>
<string name="wifi_dialog_title">检测到Wi-Fi连接</string>
<string name="wifi_dialog_body">要在其他设备上看书,就先要确认所有设备都连接到同一个 WiFi 网络。</string>
<string name="hotspot_dialog_message">要让此功能运作,你需要先手动启动 Wi-Fi 热点,或者确定主机和接受设备在同一个 Wi-Fi 网络上。</string>
<string name="hotspot_dialog_neutral_button">继续</string>
<string name="hotspot_notification_content_title">Kiwix 热点</string>
<string name="start_server_label">启动服务器</string>
<string name="stop_server_label">中止服务器</string>
<string name="error_file_not_found">错误找不到选定的ZIM文件。</string>
<string name="zim_not_opened">无法打开 zim 文件</string>
<string name="error_file_invalid">错误选定的文件不是有效ZIM文件。</string>
<string name="error_article_url_not_found">错误:加载条目(网址:%1$s失败。</string>
<string name="pref_display_title">显示</string>
@ -57,9 +81,11 @@
<string name="pref_clear_all_history_title">清空历史</string>
<string name="pref_clear_all_history_summary">清空最近搜索及标签历史</string>
<string name="all_history_cleared">已清空所有历史</string>
<string name="clear_all_history_dialog_title" fuzzy="true">清空所有历史</string>
<string name="pref_clear_all_bookmarks_title">清除书签</string>
<string name="clear_all_history_dialog_title">清空所有历史?</string>
<string name="share">分享</string>
<string name="delete">删除</string>
<string name="cancel">取消</string>
<string name="delete_specific_search_toast">已移除最近搜索</string>
<string name="hint_contents_drawer_message">您可以向左滑动来查看此条目的内容</string>
<string name="got_it">明白了</string>
@ -87,7 +113,7 @@
<string name="library">图书馆</string>
<string name="delete_zims_toast">文件已删除</string>
<string name="no_files_here">没有文件</string>
<string name="download_no_space" fuzzy="true">缺少下载此文件所需的空间。</string>
<string name="download_no_space">缺少下载所需的空间。</string>
<string name="space_available">可用空间:</string>
<string name="zim_simple">简单</string>
<string name="zim_no_pic">没有图片</string>
@ -95,17 +121,17 @@
<string name="no_network_connection">没有网络连接</string>
<string name="help_2">Kiwix可以做什么</string>
<string name="help_3">Kiwix是一个离线内容阅读器。它的功能就好像一个浏览器但它不需要访问在线网页而是从ZIM格式文件中读取内容。</string>
<string name="help_4" fuzzy="true">尽管Kiwix原本设计用于提供维基百科离线内容但它也可以阅读其他内容。</string>
<string name="help_4">尽管Kiwix原本设计用于提供维基百科离线内容但它也可以阅读其他内容。</string>
<string name="help_5">内容在哪里?</string>
<string name="help_6">我们的内容存储在Kiwix网站中。</string>
<string name="help_7">它们以ZIM格式的文件存在。这里是其中一些</string>
<string name="help_8">u2022维基百科分别提供每种语言版本</string>
<string name="help_9">u2022同样可用于例如维基解密或维基文库等其他内容</string>
<string name="help_10" fuzzy="true">您可以在应用中下载您选择的ZIM文件也可以在电脑端下载您想要的文件并在稍后将其转移至您的SD卡中。</string>
<string name="help_10">您可以在应用中下载您选择的ZIM文件也可以在电脑端下载您想要的文件并在稍后将其转移至您的SD卡中。</string>
<string name="help_11">在应用中下载的ZIM文件被存放于外部存储中一个名为Kiwix的文件夹内。</string>
<string name="pref_storage">存储</string>
<string name="pref_current_folder">当前文件夹</string>
<string name="delete_zim_failed" fuzzy="true">对不起,我们无法删除此文件。您应尝试改用文件管理器。</string>
<string name="delete_zim_failed">对不起,我们无法删除一些文件。您应尝试改用文件管理器。</string>
<string name="tts_pause">暂停</string>
<string name="tts_resume">恢复</string>
<string name="stop">停止</string>
@ -131,7 +157,7 @@
<string name="time_yesterday">昨天</string>
<string name="pref_external_link_popup_title">访问外部链接时警告</string>
<string name="pref_external_link_popup_summary">对额外费用或离线时链接不可用弹出警告</string>
<string name="external_link_popup_dialog_title" fuzzy="true">正在进入外部链接</string>
<string name="external_link_popup_dialog_title">正在进入外部链接</string>
<string name="external_link_popup_dialog_message">您正在输入外部链接。这可能导致额外数据转移费用,或当您离线时不能工作。您是否要继续?</string>
<string name="do_not_ask_anymore">不要再次询问</string>
<string name="your_languages">选择的语言:</string>
@ -143,6 +169,7 @@
<string name="crash_checkbox_logs">应用程序日志</string>
<string name="crash_checkbox_device">设备细节</string>
<string name="crash_button_confirm">发送详情</string>
<string name="new_tab_shortcut_label">新建标签页</string>
<string name="get_content_shortcut_label">获取内容</string>
<string name="articleCount">%s个条目</string>
<string name="get_started">入门</string>

View File

@ -4,5 +4,8 @@
<declare-styleable name="SliderPreference">
<attr name="android:summary" />
</declare-styleable>
<attr name="textSecondary" format="color" />
<attr name="textTertiary" format="color" />
<attr name="cardViewBackground" format="color" />
</resources>

View File

@ -1,32 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="white">#ffffff</color>
<color name="alabaster_white">#fafafa</color>
<color name="mine_shaft_gray350">#FFD6D6D6</color>
<color name="mine_shaft_gray500">#9E9E9E</color>
<color name="scorpion_gray">#5a5a5a</color>
<color name="mine_shaft_gray700">#616161</color>
<color name="mine_shaft_gray850">#303030</color>
<color name="mine_shaft_gray900">#212121</color>
<color name="black">#000000</color>
<color name="accent">#2196F3</color>
<color name="white">#fafafa</color>
<color name="gray">#5a5a5a</color>
<color name="gray900">#212121</color>
<color name="blue400">#42a5f5</color>
<color name="blue800">#1565c0</color>
<color name="pink300">#f06292</color>
<color name="actionModeBackground">#4285F4</color>
<color name="gray350">#FFD6D6D6</color>
<color name="gray500">#9E9E9E</color>
<color name="gray700">#616161</color>
<color name="gray850">#303030</color>
<color name="card_view_background">@color/white</color>
<color name="text_secondary">@color/gray700</color>
<color name="text_tertiary">@color/gray500</color>
<!--Material Components Colors-->
<color name="color_primary">@color/blue800</color>
<color name="color_surface">@color/white</color>
<color name="color_error">#b00020</color>
<color name="color_on_primary">#ffffff</color>
<color name="color_on_surface">@color/black</color>
<color name="color_on_error">@color/white</color>
<color name="denim_blue400">#42a5f5</color>
<color name="dodger_blue">#2196F3</color>
<color name="cornflower_blue">#4285F4</color>
<color name="denim_blue800">#1565c0</color>
<color name="froly_pink300">#f06292</color>
<color name="monza_red">#b00020</color>
</resources>

View File

@ -34,7 +34,7 @@
<style name="Widget.KiwixTheme.TabLayout" parent="Widget.MaterialComponents.TabLayout">
<item name="android:background">@color/black</item>
<item name="tabTextColor">@color/white</item>
<item name="tabTextColor">@color/alabaster_white</item>
</style>
<style name="Widget.KiwixTheme.Chip.Choice.Static" parent="Widget.MaterialComponents.Chip.Choice">
@ -57,11 +57,11 @@
</style>
<style name="Widget.KiwixTheme.CardView" parent="Widget.MaterialComponents.CardView">
<item name="cardBackgroundColor">@color/card_view_background</item>
<item name="cardBackgroundColor">?cardViewBackground</item>
</style>
<style name="ThemeOverlay.KiwixTheme.ProgressBar" parent="">
<item name="colorAccent">@color/blue400</item>
<item name="colorAccent">@color/denim_blue400</item>
</style>
</resources>

View File

@ -2,38 +2,50 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<!--Top level theme to be used in AndroidManifest.xml-->
<style name="KiwixTheme" parent="Base.KiwixTheme" />
<style name="KiwixTheme" parent="Base.KiwixTheme">
<!--colorPrimary colors map to components and elements, such as app bars and buttons. -->
<item name="colorPrimary">@color/denim_blue800</item>
<!--colorSurface is mapped to the surface of components such as cards, sheets-->
<!--and menus. colorError is used to indicate an error state for components such as-->
<!--text fields.-->
<item name="colorSurface">@color/alabaster_white</item>
<item name="colorError">@color/monza_red</item>
<!--"On" colors define how text, icons and strokes are colored in relation to the surface-->
<!--on which they appear.-->
<item name="colorOnPrimary">@color/white</item>
<item name="colorOnSurface">@color/black</item>
<item name="colorOnError">@color/alabaster_white</item>
<item name="textSecondary">@color/mine_shaft_gray700</item>
<item name="textTertiary">@color/mine_shaft_gray500</item>
<item name="cardViewBackground">@color/alabaster_white</item>
</style>
<!--Base custom theme which will be shared between both light and dark theme variants-->
<style name="Base.KiwixTheme" parent="Base.MaterialThemeBuilder">
<!--Material color attributes -->
<!--colorPrimary colors map to components and elements, such as app bars and buttons. -->
<item name="colorPrimaryVariant">?colorPrimary</item>
<!--colorSecondary colors are most often used as accents on components, such as FABs and -->
<!--selection controls.-->
<item name="colorPrimary">@color/color_primary</item>
<item name="colorPrimaryVariant">?colorPrimary</item>
<item name="colorSecondary">?colorPrimary</item>
<item name="colorSecondaryVariant">?colorPrimary</item>
<!--Material snackbar attributes-->
<item name="maxActionInlineWidth">128dp</item>
<!--colorBackground appears behind scrollable content and is used for the default window-->
<!--background. colorSurface is mapped to the surface of components such as cards, sheets-->
<!--and menus. colorError is used to indicate an error state for components such as-->
<!--text fields.-->
<item name="colorSurface">@color/color_surface</item>
<item name="android:colorBackground">?colorSurface</item>
<item name="colorError">@color/color_error</item>
<!--"On" colors define how text, icons and strokes are colored in relation to the surface-->
<!--on which they appear.-->
<item name="colorOnPrimary">@color/color_on_primary</item>
<!--colorBackground appears behind scrollable content and is used for the default window-->
<!--background.-->
<item name="android:colorBackground">?colorSurface</item>
<item name="colorOnSecondary">?colorOnPrimary</item>
<item name="colorOnSurface">@color/color_on_surface</item>
<item name="colorOnBackground">?colorOnSurface</item>
<item name="colorOnError">@color/color_on_error</item>
<!--Material type attributes-->
<item name="textAppearanceHeadline1">@style/TextAppearance.KiwixTheme.Headline1</item>
@ -71,7 +83,7 @@
<style name="Base.MaterialThemeBuilder" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="android:statusBarColor" tools:ignore="NewApi">@color/black</item>
<item name="actionModeBackground">@color/actionModeBackground</item>
<item name="actionModeBackground">@color/cornflower_blue</item>
<item name="windowActionModeOverlay">true</item>
<!--Remap legacy AppCompat attributes to MaterialComponent attributes-->

View File

@ -6,4 +6,7 @@
<root-path
name="external_files"
path="/storage/" />
<files-path
name="debug"
path="logs/" />
</paths>

View File

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

View File

@ -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<ZimSearchResultListItem>())
}
@Test
fun `full text results removes blanks`() {
val searchTerm = " "
every { sharedPreferenceUtil.prefFullTextSearch } returns true
val validItem = mockk<SearchResult>()
val filteredItem = mockk<SearchResult>()
val invalidTerminalItem = mockk<SearchResult>()
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<SearchResult>()
every { zimReaderContainer.getNextResult() } returnsMany listOf(null, searchResult)
every { searchResult.title } returns "title"
assertThat(zimSearchResultGenerator.generateSearchResults("searchTerm"))
.isEqualTo(emptyList<ZimSearchResultListItem>())
}
@Test
internal fun `suggestion results are distinct`() {
val validTitle = "title"
val searchTerm = " "
val item = mockk<SearchSuggestion>()
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()
}
}
}

View File

@ -1,6 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Authors:
* Juandev
* Klaras
-->
<resources>
<string name="retry">Zkusit znovu</string>
<string name="download">Stáhnout</string>
<string name="invalid_installation">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</string>
</resources>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Authors:
* Susann Schweden
-->
<resources>
<string name="retry">Erneut versuchen</string>
<string name="download">Herunterladen</string>
<string name="invalid_installation">Ungültige Installation. Bitte ZIM herunterladen.\nStellen Sie sicher, das Wi-Fi an ist und sie genügend Speicherplatz haben</string>
</resources>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Authors:
* Rschlegel
-->
<resources>
<string name="retry">Nomal probierä</string>
<string name="download">Abelade</string>
</resources>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Authors:
* Mainframe98
-->
<resources>
<string name="retry">Opnieuw proberen</string>
<string name="download">Downloaden</string>
</resources>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Authors:
* Smavrina
-->
<resources>
<string name="retry">Повторить</string>
<string name="download">Скачать</string>
<string name="invalid_installation">Проблема с установкой. Пожалуйста скачайте Zim.\n Проверьте, что WiFi включён и в хранилище достаточно места</string>
</resources>

View File

@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-all.zip