Some fixes and translations

pull/1/head
Zakhar Timoshenko 3 years ago
parent a59c286c6b
commit 108d24a1c8

@ -1,6 +1,5 @@
import type { DefaultTheme, LocaleConfig } from 'vitepress'
import type { Theme } from '../theme/types'
import { components } from '../theme/plugins/component'
import 'dotenv/config'
export const SITE_NAME = 'Kotatsu Website'
@ -65,8 +64,6 @@ export const config: LocaleConfig<Theme.Config> = {
message: "<a href=\"https://www.gnu.org/licenses/gpl-3.0.en.html\" target=\"_blank\">GPL-3.0 Licensed</a> <span class=\"divider\">|</span> <a href=\"/privacy/\">Privacy policy</a>",
copyright: `Copyright © 2020 - ${new Date().getFullYear()} Kotatsu Developers`,
},
components: components.filter(component => component.path.startsWith('components/')),
},
}
}
@ -80,10 +77,10 @@ function defaultSidebar(): DefaultTheme.SidebarItem[] {
text: "Download",
link: "/download/",
},
{
/* {
text: "Parsers",
link: "/parsers/",
},
}, */
{
text: "Changelogs",
link: "/changelogs/",
@ -209,7 +206,7 @@ function getNav(): DefaultTheme.NavItem[] {
link: "/manuals/guides/getting-started",
activeMatch: "/manuals/",
},
{
/* {
text: "News",
link: "/news/",
activeMatch: "/news/",
@ -218,6 +215,6 @@ function getNav(): DefaultTheme.NavItem[] {
text: "Account",
link: "/account/",
activeMatch: "/account/"
}
} */
]
}

@ -1,5 +1,5 @@
import type { HeadConfig, TransformContext } from "vitepress"
import type { DocsPageData } from '../../theme/plugins/component'
import type { DocsPageData } from '../../theme/plugins/section'
function generateMeta(context: TransformContext, hostname: string) {
const head: HeadConfig[] = []

@ -1,15 +1,13 @@
import type { Theme } from '../theme/types'
import type { DocsPageData } from '../theme/plugins/component'
import { type HeadConfig, defineConfigWithTheme } from 'vitepress'
import { defineConfigWithTheme } from 'vitepress'
import { config as ru, searchLocale as searchLocaleRu } from './ru'
import { config as root, searchLocale as searchLocaleEn } from './en'
import { config as ua, searchLocale as searchLocaleUa } from './ua'
import { addPlugins } from '../theme/plugins/markdown'
import { components, prepareData } from '../theme/plugins/component'
import { sections, prepareData } from '../theme/plugins/section'
import { slugify } from 'transliteration'
import { fileURLToPath, URL } from 'node:url'
import { telegram } from '../../website/icons'
import { normalize } from 'vitepress/dist/client/shared'
import { tabsMarkdownPlugin } from "vitepress-plugin-tabs"
import pluginRewriteAll from 'vite-plugin-rewrite-all';
@ -63,7 +61,7 @@ export default defineConfigWithTheme<Theme.Config>({
['link', { rel: 'stylesheet', href: 'https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,400;0,500;0,700;1,400;1,500;1,700&display=swap' }],
['link', { rel: 'icon', href: '/favicon.ico?v=2', sizes: 'any' }],
['link', { rel: 'icon', href: '/icon.svg?v=2', type: 'image/svg+xml' }],
['link', { rel: 'icon', href: '/logo.svg?v=2', type: 'image/svg+xml' }],
['link', { rel: 'apple-touch-icon', href: '/apple-touch-icon.png?v=2' }],
['link', { rel: 'manifest', href: '/site.webmanifest' }],
],
@ -87,9 +85,16 @@ export default defineConfigWithTheme<Theme.Config>({
search: {
provider: 'local',
options: {
locales: {
...searchLocaleEn,
...searchLocaleRu,
...searchLocaleUa,
},
},
},
components,
sections,
},
locales: {

@ -1,6 +1,5 @@
import type { DefaultTheme, LocaleConfig } from 'vitepress'
import type { Theme } from '../theme/types'
import { components } from '../theme/plugins/component'
import 'dotenv/config'
export const SITE_NAME = 'Kotatsu Website'
@ -75,8 +74,6 @@ export const config: LocaleConfig<Theme.Config> = {
message: "<a href=\"https://www.gnu.org/licenses/gpl-3.0.en.html\" target=\"_blank\">Лицензия GPL-3.0</a> <span class=\"divider\">|</span> <a href=\"/privacy/\">Политика конфиденциальности</a>",
copyright: `Copyright © 2020 - ${new Date().getFullYear()} Kotatsu Developers`,
},
components: components.filter(component => component.path.startsWith('ru/components/')),
},
}
}

@ -1,3 +1,10 @@
import { type Ref, computed } from 'vue'
import { type PageData, useData } from 'vitepress'
export interface Data {
lang: Ref<string>
}
const iconMappings = {
about: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>information-outline</title><path d="M11,9H13V7H11M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M11,17H13V11H11V17Z" /></svg>',
bookmark: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>bookmark-outline</title><path d="M17,18L12,15.82L7,18V5H17M17,3H7A2,2 0 0,0 5,5V21L12,18L19,21V5C19,3.89 18.1,3 17,3Z" /></svg>',

@ -1,6 +1,6 @@
import type { DefaultTheme, LocaleConfig } from 'vitepress'
import type { Theme } from '../theme/types'
import { components } from '../theme/plugins/component'
import { sections } from '../theme/plugins/section'
export const SITE_NAME = 'Kotatsu Website'
export const META_DESCRIPTION = 'Проста і зручна читалка манги з відкритим вихідним кодом від спільноти і для спільноти, де ви можете знайти і читати вашу улюблену мангу простіше як ніколи.'
@ -73,8 +73,6 @@ export const config: LocaleConfig<Theme.Config> = {
message: "<a href=\"https://www.gnu.org/licenses/gpl-3.0.en.html\" target=\"_blank\">Ліцензія GPL-3.0</a> <span class=\"divider\">|</span> <a href=\"/privacy/\">Політика конфіденційності</a>",
copyright: `Copyright © 2020 - ${new Date().getFullYear()} Kotatsu Developers`,
},
components: components.filter(component => component.path.startsWith('ru/components/')),
}
}
}

@ -1,7 +1,7 @@
<script setup lang="ts">
import { Ref } from 'vue'
import { useData, withBase, useRoute } from 'vitepress'
import type { DocsPageData } from '../plugins/component'
import type { DocsPageData } from '../plugins/section'
import VPLink from 'vitepress/dist/client/theme-default/components/VPLink.vue'

@ -3,7 +3,7 @@ import DefaultTheme from 'vitepress/theme-without-fonts'
import Home from './Home.vue'
import TranslatorWidget from './TranslatorWidget.vue'
import ScreenAuthorWidget from './ScreenAuthorWidget.vue'
import ScreenTranslatorWidget from './ScreenTranslatorWidget.vue'
import Breadcrumbs from './Breadcrumbs.vue'
import NotFound from './NotFound.vue'
@ -22,7 +22,7 @@ const { Layout } = DefaultTheme
<Breadcrumbs />
</template>
<template #doc-footer-before>
<ScreenAuthorWidget />
<ScreenTranslatorWidget />
</template>
<template #not-found>
<NotFound />

@ -1,7 +1,7 @@
<script setup lang="ts">
import { type Ref, computed } from 'vue'
import { type PageData, useData } from 'vitepress'
import type { DocsPageData } from '../plugins/component'
import type { DocsPageData } from '../plugins/section'
import { type Translator, translators } from '../../../website/translators'
import { VPImage } from 'vitepress/theme-without-fonts'
@ -15,9 +15,10 @@ export interface Data {
const { page, frontmatter, lang }: Data = useData()
const translatorLabel = computed<string>(() => lang.value === 'ru' ? 'Переводчик' : 'Translator')
const translatorLabel = computed<string>(() => (lang.value === 'ru') ? ('Переводчик') : ((lang.value === 'ua') ? ('Перекладач') : ('Translator')))
const translator = computed<Translator>(() => {
const data = page.value?.component?.translator || translators[frontmatter.value.translator]
const data = page.value?.section?.translator || translators[frontmatter.value.translator]
if (!data) {
return
@ -33,7 +34,7 @@ const translator = computed<Translator>(() => {
<template>
<article
v-if="translator"
class="ScreenAuthorWidget"
class="ScreenTranslatorWidget"
>
<VPLink
:href="translator.github"
@ -55,12 +56,12 @@ const translator = computed<Translator>(() => {
<style scoped>
.ScreenAuthorWidget {
.ScreenTranslatorWidget {
margin-bottom: 20px;
}
@media (min-width: 1280px) {
.ScreenAuthorWidget {
.ScreenTranslatorWidget {
display: none;
}
}

@ -1,7 +1,7 @@
<script setup lang="ts">
import { type Ref, computed } from 'vue'
import { type PageData, useData } from 'vitepress'
import type { DocsPageData } from '../plugins/component'
import type { DocsPageData } from '../plugins/section'
import { type Translator, translators } from '../../../website/translators'
import { VPImage } from 'vitepress/theme-without-fonts'
@ -15,9 +15,9 @@ export interface Data {
const { page, frontmatter, lang }: Data = useData()
const translatorLabel = computed<string>(() => lang.value === 'en' ? 'Translator' : 'Переводчик')
const translatorLabel = computed<string>(() => (lang.value === 'ru') ? ('Переводчик') : ((lang.value === 'ua') ? ('Перекладач') : ('Translator')))
const translator = computed<Translator>(() => {
const data = page.value?.component?.translator || translators[frontmatter.value.author]
const data = page.value?.section?.translator || translators[frontmatter.value.translator]
if (!data) {
return

@ -1,6 +1,6 @@
import { Ref, computed } from 'vue'
import type { DefaultTheme, SiteData } from 'vitepress'
import type { DocsPageData } from '../plugins/component'
import type { DocsPageData } from '../plugins/section'
import { useData } from 'vitepress'
import { ensureStartingSlash } from '../utils'
import { getFlatSideBarLinks } from 'vitepress/dist/client/theme-default/support/sidebar'
@ -74,15 +74,15 @@ export function useLangs({
}
}
if (!page.value.component) {
if (!page.value.section) {
return {
text: value.label,
link: rootLink,
}
}
const component = themeConfig.components.find(component => component.title === page.value.component.title)
if (!component) {
const section = themeConfig.sections.find(section => section.title === page.value.section.title)
if (!section) {
return {
text: value.label,
link: rootLink,
@ -91,7 +91,7 @@ export function useLangs({
return {
text,
link: component.link
link: section.link
}
}
))

@ -1,6 +1,6 @@
import { computed } from 'vue'
import type { ComputedRef, Ref } from 'vue'
import type { DocsPageData } from '../plugins/component'
import type { DocsPageData } from '../plugins/section'
import { useData } from 'vitepress'
import { isActive } from 'vitepress/dist/client/shared'
import { getFlatSideBarLinks } from 'vitepress/dist/client/theme-default/support/sidebar'
@ -15,13 +15,13 @@ export function usePrevNext(): ComputedRef {
const { page, theme, frontmatter }: Data = useData()
return computed(() => {
const component = page.value.component
const section = page.value.section
if (!component) {
if (!section) {
return ''
}
const candidates = getFlatSideBarLinks([component])
const candidates = getFlatSideBarLinks([section])
const index = candidates.findIndex((link) => isActive(page.value.relativePath, link.link))
const hidePrev =

@ -12,7 +12,7 @@ import { generateSidebarItem, getTitleFromContent } from './sidebar'
import type { Translator } from '../../../website/translators'
import { findPath } from '../utils'
export interface ComponentData {
export interface SectionData {
path: string
link: string
title: string
@ -31,14 +31,26 @@ export interface ComponentData {
}
export interface DocsPageData extends PageData {
component?: ComponentData
section?: SectionData
breadcrumbs?: DefaultTheme.SidebarItem[]
}
export const components: ComponentData[] = fg
export const sections: SectionData[] = fg
.sync([
'website/manuals/faq/explore/*.md',
'!website/manuals/faq/explore/index.md',
'website/manuals/*.md',
'!website/manuals/index.md',
'!website/manuals/faq/*/index.md',
'!website/manuals/guides/*/index.md',
'website/ua/manuals/*.md',
'!website/ua/manuals/index.md',
'!website/ua/manuals/faq/*/index.md',
'!website/ua/manuals/guides/*/index.md',
'website/ru/manuals/*.md',
'!website/ru/manuals/index.md',
'!website/ru/manuals/faq/*/index.md',
'!website/ru/manuals/guides/*/index.md',
])
.map(file => {
const content = readFileSync(file, 'utf-8')
@ -55,7 +67,7 @@ export const components: ComponentData[] = fg
} = data
const filePath = file.substring(file.indexOf('/') + 1)
const component: ComponentData = {
const section: SectionData = {
path: filePath,
link: ensureStartingSlash(normalize(filePath)),
repository,
@ -68,24 +80,24 @@ export const components: ComponentData[] = fg
categories: Array.isArray(categories) ? categories : Array(categories),
}
component.translator = getTranslator(translator)
section.translator = getTranslator(translator)
if (items) {
component.items = generateSidebarItem(items, component.link)
section.items = generateSidebarItem(items, section.link)
}
return component
return section
})
.sort((a, b) => (a.text && b.text) ? a.text.localeCompare(b.text) : 0)
export default class DocsComponent {
export default class DocsSection {
static prepareData(
pageData: DocsPageData,
siteConfig: SiteConfig,
): DocsPageData {
const component = components.find(component => pageData.relativePath.startsWith(component.path.replace(/index\.md$/, '')))
const section = sections.find(section => pageData.relativePath.startsWith(section.path.replace(/index\.md$/, '')))
pageData.component = component
pageData.section = section
pageData.breadcrumbs = findPath(pageData, siteConfig.userConfig)
pageData.title = !pageData.frontmatter.title && pageData.breadcrumbs.length
@ -93,17 +105,17 @@ export default class DocsComponent {
: pageData.title
if (
component
section
&& !pageData.description
&& pageData.component.description
&& pageData.section.description
) {
pageData.description = pageData.component.description
pageData.description = pageData.section.description
}
return pageData
}
}
export { DocsComponent }
export { DocsSection }
export const { prepareData } = DocsComponent
export const { prepareData } = DocsSection

@ -69,6 +69,10 @@
--vp-code-copy-copied-text-content: 'Скопировано';
}
[lang|="ua"] {
--vp-code-copy-copied-text-content: 'Скопійовано';
}
.dark {
--vp-c-blue-1: #7da1e9;
--vp-c-blue-2: #6382c2;

@ -1,5 +1,5 @@
import { DefaultTheme } from 'vitepress'
import type { ComponentData } from '../plugins/component'
import type { SectionData } from '../plugins/section'
export namespace Theme {
export interface Sponsor {
@ -10,11 +10,7 @@ export namespace Theme {
export interface Config extends DefaultTheme.Config {
titleSeparator?: string
components?: Array<ComponentData>
teamSectionTitle?: string
sponsorLink?: string
sponsor?: Sponsor
sections?: Array<SectionData>
}
export interface TeamMember extends Omit<DefaultTheme.TeamMember, 'name'> {

@ -1,5 +1,5 @@
import type { DefaultTheme, UserConfig } from 'vitepress'
import type { ComponentData, DocsPageData } from './plugins/component'
import type { SectionData, DocsPageData } from './plugins/section'
import { normalize } from 'vitepress/dist/client/shared'
import { type Translator, translators } from '../../website/translators'
@ -29,11 +29,11 @@ export function findPath(
path.push({ text: root.text, link: root.link })
}
let tree: DefaultTheme.SidebarItem | ComponentData
let tree: DefaultTheme.SidebarItem | SectionData
if (pageData.component) {
const { title, link, items } = pageData.component
tree = pageData.component
if (pageData.section) {
const { title, link, items } = pageData.section
tree = pageData.section
path.push({ text: title, link, items })
} else {
const sidebar = Object.entries(localeConfig.sidebar).find(([link]) => searchable.startsWith(link))

@ -25,7 +25,7 @@ Learn more in this [Wikipedia article](https://en.wikipedia.org/wiki/Scanlation)
Check the removed [parsers list](https://github.com/KotatsuApp/kotatsu-parsers/issues/39) first.
## Why was a source removed?
Extensions can be removed due to several reasons:
Sources can be removed due to several reasons:
* Frequent website changes.
* Image scrambling.

@ -52,7 +52,7 @@ These are general guidelines as each site has its specific undisclosed limits an
:::
## Widespread issue
When everyone experiences a problem, it could be with the extension or app:
When everyone experiences a problem, it could be with the source or app:
1. Check open issues [for the app](https://github.com/KotatsuApp/Kotatsu/issues) and/or [**parsers**](https://github.com/KotatsuApp/kotatsu-parsers/issues).
1. Check closed issues ([app](https://github.com/KotatsuApp/Kotatsu/issues?q=is%3Aissue+is%3Aclosed)/[parsers](https://github.com/KotatsuApp/kotatsu-parsers/issues?q=is%3Aissue+is%3Aclosed)) in case it's resolved but not yet released.

@ -1,7 +1,6 @@
---
title: Зробити свій внесок
description: Дізнайтеся, як допомогти у перекладі або створенні програми та парсерів.
translator: CakesTwix
lastUpdated: false
editLink: false
prev: false

@ -3,7 +3,7 @@ title: Завантаження
description: Поширені запитання про завантаження.
---
# Downloads
# Завантаження
Поширені запитання про завантаження.
## Чому мої завантаження зупинилися на середині?

@ -1,6 +1,6 @@
---
title: Explore
description: Help center of Explore section.
title: Огляд
description: Довідковий центр розділу Огляд.
lastUpdated: false
editLink: false
prev: false

@ -1,4 +1,4 @@
---
title: Local storage
description: Frequently Asked Questions about Local storage.
title: Локальне сховище
description: Поширені запитання про локальне сховище.
---

@ -1,4 +1,4 @@
---
title: Random
description: Frequently Asked Questions about Random.
title: Випадкові серії
description: Часті запитання про випадкові серії.
---

@ -1,37 +1,37 @@
---
title: Sources
description: Frequently Asked Questions about Sources.
title: Джерела
description: Поширені запитання про джерела.
---
# Sources
Frequently Asked Questions about Sources.
# Джерела
Поширені запитання про джерела.
## What are some recommended sources?
**Kotatsu** does not endorse or recommend any source, and there is no best source.
## Які джерела рекомендується використовувати?
**Kotatsu** не схвалює і не рекомендує жодне джерело, і найкращого джерела не існує.
Instead, we encourage users to spend some time trying out a few sources themselves and discover what sources work best for them.
What works well for somebody else might not work well for you.
Натомість ми заохочуємо користувачів витратити деякий час на самостійне випробування декількох джерел і виявити, які з них найкраще підходять для них.
Те, що добре працює для когось іншого, може не працювати добре для вас.
::: info Disclaimer
**Kotatsu** isn't responsible for slow, down, missing chapters, or subpar image quality of sources as it doesn't host content.
::: info Відмова від відповідальності
**Kotatsu** не несе відповідальності за повільну роботу, відсутність розділів або низьку якість зображення джерел, оскільки не є хостером контенту.
:::
## What is a scanlator source?
Non-officially licensed series are translated by scanlators, often found on their websites or [MangaDex](https://mangadex.org/).
Learn more in this [Wikipedia article](https://en.wikipedia.org/wiki/Scanlation).
## Що таке джерело сканлятора?
Неофіційно ліцензовані серії перекладають сканлятори, часто їх можна знайти на їхніх сайтах або на [MangaDex](https://mangadex.org/).
Дізнайтеся більше в цій [статті Вікіпедії] (https://en.wikipedia.org/wiki/Scanlation).
## How do I request new sources?
[Open an issue](https://github.com/KotatsuApp/kotatsu-parsers/issues) on **GitHub** if not already there.
Check the removed [parsers list](https://github.com/KotatsuApp/kotatsu-parsers/issues/39) first.
## Як запросити нові джерела?
[Створіть проблему](https://github.com/KotatsuApp/kotatsu-parsers/issues) на **GitHub**, якщо вона ще не створена.
Спочатку перевірте [список вилучених парсерів](https://github.com/KotatsuApp/kotatsu-parsers/issues/39).
## Why was a source removed?
Extensions can be removed due to several reasons:
## Чому було видалено джерело?
Парсери можуть бути видалені з кількох причин:
* Frequent website changes.
* Image scrambling.
* Scanlator removal request.
* Paywall implementation.
* Reverse engineering needs.
* Site shutdown.
* Часті зміни на сайті.
* Шифрування зображень.
* Запит на видалення.
* Реалізація платного входу.
* Потреби в реінжинірингу.
* Закриття сайту.
Find the list of removed sources [here](https://github.com/KotatsuApp/kotatsu-parsers/issues/39), excluding offline sites.
Список вилучених джерел можна знайти [тут](https://github.com/KotatsuApp/kotatsu-parsers/issues/39).

@ -1,4 +1,4 @@
---
title: Suggestions
description: Frequently Asked Questions about Suggestions.
title: Рекомендації
description: Поширені запитання про рекомендації.
---

@ -1,15 +1,14 @@
---
title: Feed
titleTemplate: Frequently Asked Questions
description: Frequently Asked Questions about the Feed.
title: Стрічка
description: Поширені запитання про стрічку.
---
# Feed
Frequently Asked Questions about the Feed.
# Стрічка
Поширені запитання про стрічку.
## Why aren't series updates working?
Some Android skins (e.g., **MIUI**) aggressively save battery, potentially shutting down apps in the background.
## Чому не працюють оновлення серій?
Деякі скіни Android (наприклад, **MIUI**) агресивно економлять заряд акумулятора, потенційно закриваючи програми у фоновому режимі.
Whitelist **Kotatsu** from your battery saver by going to <nav to="checking"> and tapping **Disable battery optimization**.
Вилучіть **Kotatsu** з екрана економії заряду батареї, перейшовши до <nav to="checking"> і натиснувши **Вимкнути оптимізацію заряду батареї**.
If unsuccessful, refer to [Don't Kill My App](https://dontkillmyapp.com/) for how to disable specific battery-saving options for your device.
Якщо це не вдасться, зверніться до [Don't Kill My App](https://dontkillmyapp.com/), щоб дізнатися, як вимкнути певні опції економії заряду акумулятора для вашого пристрою.

@ -1,19 +1,20 @@
---
title: General
description: Frequently Asked Questions
title: Загальне
description: Поширені запитання
translator: CakesTwix
---
# General
Frequently Asked Questions
# Загальне
Поширені запитання
## Why isn't Kotatsu on the Google Play Store?
**Kotatsu** won't be on the **Google Play Store**. **Google** might take down the app due to certain content, which the developers wishes to avoid.
## Чому Kotatsu немає в Google Play Маркеті?
**Kotatsu** не буде в магазині **Google Play**. **Google** може видалити додаток через певний контент, якого розробники хотіли б уникнути.
To report **Kotatsu** copycats on the **Google Play Store**, fill out [this form](https://support.google.com/googleplay/android-developer/contact/takedown) following the steps below.
Щоб повідомити про підробки **Kotatsu** в **Google Play Store**, заповніть [цю форму](https://support.google.com/googleplay/android-developer/contact/takedown) дотримуючись наведених нижче інструкцій.
:::details Steps to report Kotatsu copycats
1. Go to the page -> three dots menu -> Flag as inappropriate -> Other objection.
1. After choosing "Other objection", you may choose to put down any or all of the following:
:::details Кроки для повідомлення про копії Kotatsu
1. Перейдіть на сторінку -> меню з трьома крапками -> Позначити як недоречне -> Інше заперечення.
1. Вибравши "Інше заперечення", ви можете вказати будь-яке або всі наступні заперечення:
The app infringes on the Google Play Developer Policy by
@ -34,16 +35,16 @@ To report **Kotatsu** copycats on the **Google Play Store**, fill out [this form
> - Apps that are improperly categorized.
:::
## Is Kotatsu available for iOS/iPadOS?
There is no iOS or iPadOS version and neither are there plans for one.
Porting is difficult due to the separate codebases of iOS and Android apps.
## Чи є Kotatsu на iOS/iPadOS?
Версії для iOS чи iPadOS не існує і не планується.
Портування ускладнене через окремі кодові бази додатків для iOS та Android.
Any app proclaiming to be "**Kotatsu for iOS**" is not by us and should be treated as a scam.
Будь-який додаток, що проголошує себе "**Kotatsu для iOS**", не створений нами, і його слід розглядати як шахрайство.
## Can I read light novels?
**Kotatsu** can't read light novels; it's an image parser, not a text parser.
## Чи можна читати ранобе?
**Kotatsu** не може читати ранобе; це аналізатор зображень, а не тексту.
## Can I stream anime?
**Kotatsu** isn't designed for anime streaming.
## Чи можна дивитися аніме?
**Kotatsu** не призначений для показу аніме.
Projects using the **Kotatsu** name for anime streaming aren't affiliated with the main project.
Проекти, що використовують ім'я **Kotatsu** для показу аніме, не пов'язані з основним проектом.

@ -1,18 +1,17 @@
---
title: Reader
titleTemplate: Frequently Asked Questions
description: Frequently Asked Questions about the Reader.
title: Читання
description: Поширені запитання про читання.
---
# Reader
Frequently Asked Questions about the Reader.
# Читання
Поширені запитання про читання.
## Why didn't the page load?
Besides network-related problems, **Kotatsu** may occasionally fail to recognize certain images.
To address this, simply exit and re-enter the reader or click **Try again** button, often resolving the issue.
## Чому сторінка не завантажилася?
Окрім проблем, пов'язаних з мережею, **Kotatsu** іноді може не розпізнавати певні зображення.
Щоб вирішити цю проблему, просто вийдіть і знову увійдіть у програму або натисніть кнопку **Повторити**, що часто вирішує проблему.
## Can I see two pages at once?
Not currently. Creating an effective dual-page reader that accommodates scanlator page inconsistencies and other complexities poses challenges. This feature may be added in the future.
## Чи можу я бачити дві сторінки одночасно?
Створення ефективної програми для читання двох сторінок, яка враховує невідповідність сторінок та інші складнощі, є складним завданням. Ця функція може бути додана в майбутньому.
## What do all the settings do?
For detailed instructions, please consult the guides section on the website here.
## Що роблять всі налаштування?
Для отримання детальних інструкцій, будь ласка, зверніться до розділу гайдів на сайті тут.

@ -1,14 +1,14 @@
---
title: Settings
description: Frequently Asked Questions about various app settings.
title: Налаштування
description: Поширені запитання щодо різних налаштувань програми.
---
# Settings
Frequently Asked Questions about various app settings.
# Налаштування
Поширені запитання щодо різних налаштувань програми.
## Why is taking screenshots blocked?
Turn off **Screenshot policy** in <nav to="reader">.
## Чому заблоковано створення скріншотів?
Вимкніть **Політику скріншотів** у <nav to="reader">.
## What is DNS over HTTPS?
**DNS over HTTPS** (in <nav to="network">) offers secure DNS resolution through HTTPS, preventing attacks.
Learn more [here](https://www.cloudflare.com/learning/dns/dns-over-tls/). This may help bypass some basic website blocking.
## Що таке DNS через HTTPS?
**DNS через HTTPS** (у <nav to="network">) пропонує безпечне вирішення DNS через HTTPS, запобігаючи атакам.
Дізнайтеся більше [тут](https://www.cloudflare.com/learning/dns/dns-over-tls/). Це може допомогти обійти деякі основні блокування веб-сайтів.

@ -1,74 +1,73 @@
---
title: Common issues
description: Facing issues with a source or the app? Here's how to tackle common challenges.
title: Загальні проблеми
description: Виникли проблеми з джерелом або додатком? Ось як вирішити найпоширеніші проблеми.
---
# Common issues
# Загальні проблеми
Facing issues with a source or the app?
Here's how to tackle common challenges.
Виникли проблеми з джерелом або додатком? Ось як вирішити найпоширеніші проблеми.
## Basic issues
## Базові проблеми
### Slow loading
Sources being slow could stem from site slowness, your internet, or source-imposed rate limits/IP bans.
### Повільне завантаження
Повільна робота джерел може бути пов'язана з повільною роботою сайту, вашого інтернету або обмеженнями швидкості, встановленими джерелом, чи заборонами на IP-адреси.
## Advanced errors
## Розширені помилки
### `Unable to resolve host` / `Connection failed` / `Failed to connect to` / `timeout` / `connection reset`
These errors indicate connection issues. Possible causes include:
Ці помилки вказують на проблеми зі з'єднанням. Можливі причини включають:
* Weak internet connection.
* App lacks internet access.
* Your ISP has blocked the site.
* The site is down.
* Слабке з'єднання з Інтернетом.
* Додаток не має доступу до Інтернету.
* Ваш провайдер заблокував сайт.
* Сайт не працює.
Try these solutions:
Спробуйте ці рішення:
* Enable **DNS over HTTPS**.
* Change network (Wi-Fi, mobile data, VPN).
* Reboot router.
* Увімкніть **DNS через HTTPS**.
* Змініть мережу (Wi-Fi, мобільна передача даних, VPN).
* Перезавантажте роутер.
### `java.security.cert.CertPathValidatorException` / `Chain validation failed`
Validation issue with source's certificate.
Проблема з валідацією сертифіката джерела.
Try these solutions:
Спробуйте ці рішення:
* Check expired certificate, use SSL checker.
* Set correct device date and time.
* Change network (Wi-Fi, mobile data, VPN).
* Enable **Ignore SSL errors** in <nav to="network"/>
* Reboot device.
* Перевірте прострочений сертифікат, скористайтеся перевіркою SSL.
* Встановіть правильну дату та час на пристрої.
* Змініть мережу (Wi-Fi, мобільна передача даних, VPN).
* Увімкніть **Ігнорувати помилки SSL** у <nav to="network"/>.
* Перезавантажте пристрій.
## HTTP errors
Encountering HTTP errors? Here's what they mean and how to address them.
## Помилки HTTP
Виникли помилки HTTP? Ось що вони означають і як їх усунути.
### `HTTP Error: 403` - Forbidden
Possible reasons for this error:
* The selected source has Cloudflare protection. Check the [Cloudflare guide](/manuals/guides/troubleshooting/#cloudflare) for solutions.
* The source might be down, removed the series, or banned your IP.
> Open WebView to confirm.
Можливі причини цієї помилки:
* Вибране джерело має захист Cloudflare. Зверніться до [Посібника з Cloudflare] (/ua/manuals/guides/troubleshooting/#cloudflare) для вирішення проблеми.
* Джерело може не працювати, видалити серію або забанити вашу IP-адресу.
> Відкрийте WebView, щоб перевірити.
### `HTTP Error: 404` - Not Found
This error likely indicates a down source or removed series.
* Use **WebView** to verify.
> Consider switching to a different source for the series.
Ця помилка, ймовірно, вказує на непрацююче джерело або видалену серію.
* Використовуйте **WebView** для перевірки.
> Спробуйте переключитися на інше джерело для цієї серії.
### `HTTP Error: 429` - Too Many Requests
This error suggests the source temporarily banned your IP due to fast downloads/reads.
Ця помилка означає, що джерело тимчасово заблокувало ваш IP через швидке завантаження/читання.
### `HTTP Error: 5xx`
Errors like `500`, `502`, etc., indicate server-side issues on the source's end.
Помилки типу `500`, `502` і т.д. вказують на проблеми на стороні сервера на стороні джерела.
[Check the source in WebView](/manuals/guides/troubleshooting/#accessing-websites-via-webview) to confirm if it's down.
[Перевірте джерело у WebView](/ua/manuals/guides/troubleshooting/#accessing-websites-via-webview), щоб переконатися, що воно не працює.
### `HTTP Error: 1006`
This error means a temporary IP ban by the source.
Ця помилка означає тимчасову заборону IP-адреси джерелом.
### `HTTP Error: 1020`
This error points to violating a firewall rule set by the site owner.
The owner might raise Cloudflare protection or block IPs from outside their country.
Ця помилка вказує на порушення правил брандмауера, встановлених власником сайту.
Власник може підвищити рівень захисту Cloudflare або заблокувати IP-адреси з-за меж своєї країни.
::: warning
For unlisted errors or if instructions don't help, refer to [Diagnosis](/manuals/guides/troubleshooting/diagnosis).
::: warning Попередження
Якщо помилки не вказані в списку або якщо інструкції не допомагають, зверніться до розділу [Діагностика](/ua/manuals/guides/troubleshooting/diagnosis).
:::

@ -1,63 +1,62 @@
---
title: Diagnosis
description: Facing issues with a source or the app? Follow these steps to troubleshoot and find solutions.
title: Діагностика
description: Виникли проблеми з джерелом або додатком? Виконайте ці кроки, щоб усунути несправності та знайти рішення.
---
# Diagnosis
Facing issues with a source or the app?
Follow these steps to troubleshoot and find solutions.
## Primary diagnosis
1. **Update app**: Go to <nav to="about"> and tap **Check for updates**.
1. **Manual series refresh**: Go to <nav to="main_feed"> and drag down to manually refresh problematic series.
1. **Test other series**: Try different series from the same source.
1. **Update WebView**: Ensure your WebView is current.
1. **Public WebView**: Attempt opening series in public WebView. Solve for CAPTCHA or Cloudflare protection if needed.
1. **Change connection**: Switch networks (Wi-Fi, mobile data, VPN) and confirm IP change.
1. **Collaborative check**: Get others to replicate the error.
1. **Source status**: Verify the source's status in a browser.
1. **Retry button**: Look for a retry button on the series page.
1. **Advanced settings**: Under <nav to="data">, try these options:
- Clear thumbnails cache
- Clear page cache
- Clear network cache
- Clear cookies
- Under <nav to="network">, try to enable DNS over HTTPS
1. **Download issues**: Delete the queue and retry downloads.
1. **Restart Kotatsu**: Force close and reopen the app.
If any of these solutions help, go to [Personalized Issue](#personalized-issue).
If it is not just you, go to [Widespread Issue](#widespread-issue).
If none of these solutions help, try asking in our [Telegram group](https://t.me/kotatsuapp).
State your app version and the source, series, and chapter with the problem.
::: tip An app update may fix your issue
Wait or check for an app update if you have not already.
There are no ETAs for updates.
# Діагностика
Виникли проблеми з джерелом або додатком? Виконайте ці кроки, щоб усунути несправності та знайти рішення.
## Первинний діагноз
1. **Оновити програму**: Перейдіть до <nav to="about"> і натисніть **Перевірити наявність оновлень**.
1. **Оновлення серій вручну**: Перейдіть до <nav to="main_feed"> і перетягніть вниз, щоб вручну оновити проблемні серії.
1. **Перевірити інші серії**: Спробуйте інші серії з того самого джерела.
1. **Оновити WebView**: Переконайтеся, що ваш WebView актуальний.
1. **Публічний WebView**: Спробуйте відкрити серію у загальнодоступному WebView. Вирішіть проблему за допомогою CAPTCHA або захисту Cloudflare, якщо це необхідно.
1. **Змінити з'єднання**: Переключити мережі (Wi-Fi, мобільні дані, VPN) і підтвердити зміну IP-адреси.
1. **Спільна перевірка**: Попросіть інших повторити помилку.
1. **Статус джерела**: Перевірте статус джерела у браузері.
1. **Кнопка повтору**: Натисніть кнопку повтору на сторінці серії.
1. **Розширені налаштування**: У розділі <nav to="data"> спробуйте ці параметри:
- Очистити кеш мініатюр
- Очистити кеш сторінок
- Очистити кеш мережі
- Очистити файли cookie
- У розділі <nav to="network"> спробуйте увімкнути DNS через HTTPS
1. **Проблеми із завантаженням**: Видаліть чергу та повторіть завантаження.
1. **Перезапустіть Kotatsu**: Примусово закрити та перезапустити програму.
Якщо будь-яке з цих рішень допоможе, перейдіть до [Персоналізована проблема](#personalized-issue).
Якщо проблема не лише у вас, перейдіть до [Поширена проблема](#widespread-issue).
Якщо жодне з цих рішень не допомогло, спробуйте запитати в нашій [Telegram-групі](https://t.me/kotatsuapp).
Вкажіть версію програми, а також джерело, серію та розділ, в якому виникла проблема.
::: tip Оновлення програми може вирішити вашу проблему
Зачекайте або перевірте оновлення додатку, якщо ви ще не зробили цього.
Очікуваних дат для оновлень немає.
:::
## Personalized issue
If you're the only one facing a problem, you might be encountering an IP ban, or other countermeasures set by website owners against programs like **Kotatsu**.
## Персоналізована проблема
Якщо ви єдиний, хто зіткнувся з проблемою, можливо, ви зіткнулися з забороною IP-адреси або іншими контрзаходами, встановленими власниками веб-сайтів проти таких програм, як **Kotatsu**.
**To minimize future issues:**
- Avoid using downloads with the source.
- Reduce the number of series in your favourites/history from that source.
**Щоб мінімізувати майбутні проблеми:**
- Уникайте завантажень з джерела.
- Зменшіть кількість серії у вибраному/історії з цього джерела.
::: warning
These are general guidelines as each site has its specific undisclosed limits and triggers.
::: warning Попередження
Це загальні рекомендації, оскільки кожен сайт має свої специфічні нерозкриті ліміти та тригери.
:::
## Widespread issue
When everyone experiences a problem, it could be with the extension or app:
## Поширена проблема
Коли у всіх виникають проблеми, це може бути пов'язано з джерелом або додатком:
1. Check open issues [for the app](https://github.com/KotatsuApp/Kotatsu/issues) and/or [**parsers**](https://github.com/KotatsuApp/kotatsu-parsers/issues).
1. Check closed issues ([app](https://github.com/KotatsuApp/Kotatsu/issues?q=is%3Aissue+is%3Aclosed)/[parsers](https://github.com/KotatsuApp/kotatsu-parsers/issues?q=is%3Aissue+is%3Aclosed)) in case it's resolved but not yet released.
1. If not found, create a new issue.
1. Перевірте відкриті проблеми [для додатку](https://github.com/KotatsuApp/Kotatsu/issues) та/або [**парсерів**](https://github.com/KotatsuApp/kotatsu-parsers/issues).
1. Перевірте закриті проблеми ([додаток](https://github.com/KotatsuApp/Kotatsu/issues?q=is%3Aissue+is%3Aclosed)/[парсери](https://github.com/KotatsuApp/kotatsu-parsers/issues?q=is%3Aissue+is%3Aclosed)), якщо вони вирішені, але ще не випущені.
1. Якщо не знайдено, створіть нову проблему.
::: warning
If the site itself is problematic, patience is the only solution until it becomes functional again.
::: warning Попередження
Якщо сайт сам по собі проблематичний, терпіння - єдине рішення, поки він не стане функціональним.
:::
Loading…
Cancel
Save