Currently translated at 100.0% (896 of 896 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (894 of 894 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (893 of 893 strings)
Co-authored-by: Максим Горпиніч <gorpinicmaksim0@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/uk/
Translation: Kotatsu/Strings
Currently translated at 100.0% (893 of 893 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (889 of 889 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (882 of 882 strings)
Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/tr/
Translation: Kotatsu/Strings
Currently translated at 100.0% (889 of 889 strings)
Translated using Weblate (Vietnamese)
Currently translated at 100.0% (880 of 880 strings)
Co-authored-by: Draken <premieregirl26@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/vi/
Translation: Kotatsu/Strings
Currently translated at 100.0% (889 of 889 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (9 of 9 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (880 of 880 strings)
Co-authored-by: MuhamadSyabitHidayattulloh <tebepc@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/plurals/id/
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/id/
Translation: Kotatsu/Strings
Translation: Kotatsu/plurals
Currently translated at 4.0% (36 of 880 strings)
Translated using Weblate (Dutch)
Currently translated at 88.8% (8 of 9 strings)
Added translation using Weblate (Dutch)
Added translation using Weblate (Dutch)
Co-authored-by: Hecker_01 <jesseflantua@icloud.com>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/plurals/nl/
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/nl/
Translation: Kotatsu/Strings
Translation: Kotatsu/plurals
Currently translated at 100.0% (889 of 889 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (882 of 882 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (880 of 880 strings)
Co-authored-by: Максим Горпиніч <gorpinicmaksim0@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/uk/
Translation: Kotatsu/Strings
Currently translated at 100.0% (889 of 889 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (882 of 882 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (876 of 876 strings)
Co-authored-by: Nicola Bortoletto <nicola.bortoletto@live.com>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/it/
Translation: Kotatsu/Strings
Adds a new "Every 6 hours" frequency option to the periodic backup settings.
To maintain consistency with the existing preference values, which are stored in days, this new option is represented internally as a fractional value of `0.25` days.
The implementation includes:
- Adding the new string resource and updating the preference arrays.
- Changing the preference type in `AppSettings.kt` from `Long` to `Float` to accommodate the fractional value.
- Updating the millisecond conversion logic to correctly calculate the interval from a float value in days.
This approach avoids a complex data migration and is simpler and safer than changing the base unit for all values from days to hours.
This commit adds support for backing up and restoring saved filters.
- Added a new `SAVED_FILTERS` section to the backup process.
- Implemented the logic to read filters from SharedPreferences during backup and write them back during restore.
- Fixed compilation errors in `AppBackupAgent` and `BackupSectionModel`.
This commit adds support for backing up and restoring saved filters.
- Added a new `SAVED_FILTERS` section to the backup process.
- Implemented the logic to read filters from SharedPreferences during backup and write them back during restore.
Currently translated at 76.4% (669 of 875 strings)
Co-authored-by: kota fujimi <urakids@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/ja/
Translation: Kotatsu/Strings
When an image in the webtoon reader is shorter than the screen height, it was being incorrectly scaled, causing it to appear zoomed in or cropped.
This was caused by the `scrollTo` function in `WebtoonImageView.kt` calling `resetScaleAndCenter()` for images with a scroll range of zero. This method, from the underlying SubsamplingScaleImageView library, resets the image to a default scale instead of using the custom logic required by the reader.
The fix replaces the call to `resetScaleAndCenter()` with `scrollToInternal(0)`. This ensures that the custom scaling logic, which fits the image to the screen width, is applied consistently to all images, regardless of their height.
Currently translated at 76.0% (665 of 875 strings)
Co-authored-by: kota fujimi <urakids@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/ja/
Translation: Kotatsu/Strings
Currently translated at 100.0% (875 of 875 strings)
Translated using Weblate (Croatian)
Currently translated at 100.0% (875 of 875 strings)
Translated using Weblate (Croatian)
Currently translated at 100.0% (9 of 9 strings)
Co-authored-by: Milo Ivir <mail@milotype.de>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/plurals/hr/
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/hr/
Translation: Kotatsu/Strings
Translation: Kotatsu/plurals
Currently translated at 15.4% (135 of 875 strings)
Translated using Weblate (Telugu)
Currently translated at 100.0% (9 of 9 strings)
Added translation using Weblate (Telugu)
Added translation using Weblate (Telugu)
Co-authored-by: Ruthwik <rtwk03@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/plurals/te/
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/te/
Translation: Kotatsu/Strings
Translation: Kotatsu/plurals
Currently translated at 100.0% (875 of 875 strings)
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (875 of 875 strings)
Co-authored-by: return_null <demolang@dismail.de>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/zh_Hans/
Translation: Kotatsu/Strings
- Compare content.state with getCurrentState() to detect configuration changes vs intentional updates
- Use content.state when they match (mode switch case) to preserve explicit state updates
- Use getCurrentState() when they differ (rotation case) to restore saved position
- This ensures both screen rotation and mode switching work correctly
Co-authored-by: NathanBap <101987516+NathanBap@users.noreply.github.com>
- Modified BaseReaderFragment to always use getCurrentState() when available
- getCurrentState() contains the most recent reading position saved in onPause/onDestroyView
- content.state may contain the initial state from when content was first loaded
- This ensures the current page position is preserved across configuration changes like screen rotation
Co-authored-by: NathanBap <101987516+NathanBap@users.noreply.github.com>
Currently translated at 100.0% (875 of 875 strings)
Translated using Weblate (Vietnamese)
Currently translated at 100.0% (869 of 869 strings)
Co-authored-by: Draken <premieregirl26@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/vi/
Translation: Kotatsu/Strings
Currently translated at 100.0% (875 of 875 strings)
Translated using Weblate (Italian)
Currently translated at 100.0% (869 of 869 strings)
Co-authored-by: Nicola Bortoletto <nicola.bortoletto@live.com>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/it/
Translation: Kotatsu/Strings
Currently translated at 100.0% (875 of 875 strings)
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (869 of 869 strings)
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 99.5% (865 of 869 strings)
Co-authored-by: return_null <demolang@dismail.de>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/zh_Hans/
Translation: Kotatsu/Strings
Currently translated at 51.7% (453 of 875 strings)
Translated using Weblate (Malay)
Currently translated at 51.6% (452 of 875 strings)
Translated using Weblate (Malay)
Currently translated at 49.5% (431 of 869 strings)
Translated using Weblate (Javanese)
Currently translated at 9.4% (82 of 869 strings)
Translated using Weblate (Javanese)
Currently translated at 100.0% (9 of 9 strings)
Translated using Weblate (Malay)
Currently translated at 40.5% (352 of 869 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (869 of 869 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (9 of 9 strings)
Added translation using Weblate (Javanese)
Added translation using Weblate (Javanese)
Translated using Weblate (Malay)
Currently translated at 38.4% (334 of 869 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (869 of 869 strings)
Translated using Weblate (Indonesian)
Currently translated at 100.0% (9 of 9 strings)
Co-authored-by: Nataniel Dika Kurniawan <hikawaart2@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/plurals/id/
Translate-URL: https://hosted.weblate.org/projects/kotatsu/plurals/jv/
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/id/
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/jv/
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/ms/
Translation: Kotatsu/Strings
Translation: Kotatsu/plurals
Currently translated at 100.0% (875 of 875 strings)
Translated using Weblate (Turkish)
Currently translated at 100.0% (869 of 869 strings)
Co-authored-by: Frosted <frosted@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/tr/
Translation: Kotatsu/Strings
Currently translated at 2.8% (25 of 869 strings)
Translated using Weblate (Gothic)
Currently translated at 44.4% (4 of 9 strings)
Added translation using Weblate (Gothic)
Added translation using Weblate (Gothic)
Co-authored-by: Roel v <roel11112@live.nl>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/plurals/got/
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/got/
Translation: Kotatsu/Strings
Translation: Kotatsu/plurals
Currently translated at 100.0% (875 of 875 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (869 of 869 strings)
Co-authored-by: Максим Горпиніч <gorpinicmaksim0@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/kotatsu/strings/uk/
Translation: Kotatsu/Strings
This commit introduces a new setting to control the scroll sensitivity of the double-page reader mode.
- A SeekBar has been added to the reader configuration sheet to adjust the sensitivity.
- The DoublePageSnapHelper now uses this setting to calculate the scroll distance.
- The setting is stored in AppSettings.
8 months ago
248 changed files with 11512 additions and 7724 deletions
> In light of recent challenges — including threating actions from Kakao Entertainment Corp and upcoming Google’s
<ahref="https://kotatsu.app">
> [new sideloading policy](https://f-droid.org/ru/2025/10/28/sideloading.html) — we’ve made the difficult decision to shut down Kotatsu and end its support. We’re deeply grateful
* **Recommended:** Download and install APK from [GitHub Releases](https://github.com/KotatsuApp/Kotatsu/releases/latest). Application has a built-in self-updating feature.
**[Kotatsu](https://github.com/KotatsuApp/Kotatsu) is a free and open-source manga reader for Android with built-in
* Get it on [F-Droid](https://f-droid.org/packages/org.koitharu.kotatsu). The F-Droid build may be a bit outdated and some fixes might be missing.
online content sources.**
* Also [nightly builds](https://github.com/KotatsuApp/Kotatsu-nightly/releases) are available (Unstable, use at your own risk). Application has a built-in self-updating feature.
* Integration with manga tracking services: Shikimori, AniList, MyAnimeList, Kitsu
* Integration with manga tracking services: Shikimori, AniList, MyAnimeList, Kitsu
* Password / fingerprint-protected access to the app
* Password / fingerprint-protected access to the app
* Automatically sync app data with other devices on the same account
* Automatically sync app data with other devices on the same account
* Support for older devices running Android 5.0+
* Support for older devices running Android 6.0+
</div>
</div>
@ -86,7 +78,8 @@ please head over to the [Weblate project page](https://hosted.weblate.org/engage
</br>
</br>
**📌 Pull requests are welcome, if you want: See [CONTRIBUTING.md](https://github.com/KotatsuApp/Kotatsu/blob/devel/CONTRIBUTING.md) for the guidelines**
**📌 Pull requests are welcome, if you want:
See [CONTRIBUTING.md](https://github.com/KotatsuApp/Kotatsu/blob/devel/CONTRIBUTING.md) for the guidelines**
### Certificate fingerprints
### Certificate fingerprints
@ -104,7 +97,9 @@ please head over to the [Weblate project page](https://hosted.weblate.org/engage
<divalign="left">
<divalign="left">
You may copy, distribute and modify the software as long as you track changes/dates in source files. Any modifications to or software including (via compiler) GPL-licensed code must also be made available under the GPL along with build & install instructions.
You may copy, distribute and modify the software as long as you track changes/dates in source files. Any modifications
to or software including (via compiler) GPL-licensed code must also be made available under the GPL along with build &
install instructions.
</div>
</div>
@ -112,6 +107,9 @@ You may copy, distribute and modify the software as long as you track changes/da
<divalign="left">
<divalign="left">
The developers of this application do not have any affiliation with the content available in the app. It collects content from sources that are freely available through any web browser.
The developers of this application do not have any affiliation with the content available in the app and does not store
or distribute any content. This application should be considered a web browser, all content that can be found using this
application is freely available on the Internet. All DMCA takedown requests should be sent to the owners of the website
@Query("SELECT author FROM manga WHERE manga.source = :source AND author IS NOT NULL AND author != '' GROUP BY author ORDER BY COUNT(author) DESC LIMIT :limit")
@Query("SELECT * FROM manga WHERE (title LIKE :query OR alt_title LIKE :query) AND manga_id IN (SELECT manga_id FROM favourites UNION SELECT manga_id FROM history) LIMIT :limit")
@Query("SELECT * FROM manga WHERE (title LIKE :query OR alt_title LIKE :query) AND manga_id IN (SELECT manga_id FROM favourites UNION SELECT manga_id FROM history) LIMIT :limit")