Compare commits
3 Commits
v2.0.0-beta.0
...
v1.1.15
| Author | SHA1 | Date | |
|---|---|---|---|
| 49e4d78c92 | |||
| c88b2e5d2a | |||
| be2dab5b5d |
@@ -8,6 +8,7 @@ import android.os.Bundle;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.widget.ScrollView;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import com.facebook.react.ReactActivity;
|
||||
@@ -60,7 +61,7 @@ public class MainActivity extends ReactActivity {
|
||||
case KeyEvent.KEYCODE_VOLUME_UP:
|
||||
if (action == KeyEvent.ACTION_DOWN) {
|
||||
// volup
|
||||
VolumeButtonListener.up();
|
||||
VolumeButtonListener.up(VolumeButtonListener.getScrollAmount());
|
||||
if (!VolumeButtonListener.prevent)
|
||||
return super.dispatchKeyEvent(event);
|
||||
}
|
||||
@@ -68,7 +69,7 @@ public class MainActivity extends ReactActivity {
|
||||
case KeyEvent.KEYCODE_VOLUME_DOWN:
|
||||
if (action == KeyEvent.ACTION_DOWN) {
|
||||
// voldown
|
||||
VolumeButtonListener.down();
|
||||
VolumeButtonListener.down(VolumeButtonListener.getScrollAmount());
|
||||
if (!VolumeButtonListener.prevent)
|
||||
return super.dispatchKeyEvent(event);
|
||||
}
|
||||
@@ -79,7 +80,6 @@ public class MainActivity extends ReactActivity {
|
||||
}
|
||||
return super.dispatchKeyEvent(event);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the main component registered from JavaScript.
|
||||
* This is used to schedule rendering of the component.
|
||||
@@ -99,4 +99,4 @@ public class MainActivity extends ReactActivity {
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
+28
-7
@@ -1,11 +1,11 @@
|
||||
package com.rajarsheechatterjee.VolumeButtonListener;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.facebook.react.bridge.Arguments;
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
||||
import com.facebook.react.bridge.ReactMethod;
|
||||
import com.facebook.react.bridge.Promise;
|
||||
import com.facebook.react.bridge.WritableMap;
|
||||
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
||||
|
||||
@@ -27,9 +27,10 @@ public class VolumeButtonListener extends ReactContextBaseJavaModule {
|
||||
|
||||
public static boolean prevent = false;
|
||||
|
||||
public static void sendEvent(boolean up) {
|
||||
public static void sendEvent(boolean up, int amount) {
|
||||
if (active) {
|
||||
WritableMap args = Arguments.createMap();
|
||||
args.putInt("scrollAmount", amount); // add scroll amount to event data
|
||||
if (up)
|
||||
appContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit("VolumeUp", args);
|
||||
else
|
||||
@@ -37,12 +38,22 @@ public class VolumeButtonListener extends ReactContextBaseJavaModule {
|
||||
}
|
||||
}
|
||||
|
||||
public static void down() {
|
||||
sendEvent(false);
|
||||
public static void down(int amount) {
|
||||
sendEvent(false, amount);
|
||||
}
|
||||
|
||||
public static void up() {
|
||||
sendEvent(true);
|
||||
public static void up(int amount) {
|
||||
sendEvent(true, amount);
|
||||
}
|
||||
|
||||
private static int scrollAmount = 100;
|
||||
|
||||
public static void setScrollAmount(int amount) {
|
||||
scrollAmount = amount;
|
||||
}
|
||||
|
||||
public static int getScrollAmount() {
|
||||
return scrollAmount;
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
@@ -90,4 +101,14 @@ public class VolumeButtonListener extends ReactContextBaseJavaModule {
|
||||
public void removeListeners(Integer count) {
|
||||
// Keep: Required for RN built in Event Emitter Calls.
|
||||
}
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
public void setVolumeButtonScrollAmount(int amount) {
|
||||
setScrollAmount(amount);
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
public void getVolumeButtonScrollAmount(Promise promise) {
|
||||
promise.resolve(getScrollAmount());
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
import CookieManager from '@react-native-cookies/cookies';
|
||||
import { useMMKVObject } from 'react-native-mmkv';
|
||||
import { MMKVStorage } from '@utils/mmkv/mmkv';
|
||||
import { showToast } from './showToast';
|
||||
@@ -38,7 +39,8 @@ const useSourceStorage = ({ sourceId = -1 }: { sourceId?: number }) => {
|
||||
// }),
|
||||
// );
|
||||
// }
|
||||
|
||||
CookieManager.clearAll();
|
||||
CookieManager.clearAll(true); //clears cookies in webkit
|
||||
setValues({});
|
||||
showToast('Cookies cleared');
|
||||
};
|
||||
|
||||
@@ -64,6 +64,7 @@ export const initialState = {
|
||||
swipeGestures: false,
|
||||
showScrollPercentage: true,
|
||||
useVolumeButtons: false,
|
||||
scrollAmount: 200,
|
||||
showBatteryAndTime: false,
|
||||
autoScroll: false,
|
||||
autoScrollInterval: 10,
|
||||
|
||||
@@ -88,6 +88,7 @@ const ChapterContent = ({ route, navigation }) => {
|
||||
useVolumeButtons = false,
|
||||
autoScroll = false,
|
||||
autoScrollInterval = 10,
|
||||
scrollAmount = 200,
|
||||
autoScrollOffset = null,
|
||||
verticalSeekbar = true,
|
||||
removeExtraParagraphSpacing = false,
|
||||
@@ -117,16 +118,13 @@ const ChapterContent = ({ route, navigation }) => {
|
||||
VolumeButtonListener.preventDefault();
|
||||
emmiter.current.addListener('VolumeUp', e => {
|
||||
webViewRef.current?.injectJavaScript(`(()=>{
|
||||
window.scrollBy({top:${-Dimensions.get('window')
|
||||
.height},behavior:'smooth',})
|
||||
})()`);
|
||||
window.scrollBy({top:${-scrollAmount},behavior:'smooth',})
|
||||
})()`);
|
||||
});
|
||||
emmiter.current.addListener('VolumeDown', e => {
|
||||
webViewRef.current?.injectJavaScript(`(()=>{
|
||||
window.scrollBy({top:${
|
||||
Dimensions.get('window').height
|
||||
},behavior:'smooth',})
|
||||
})()`);
|
||||
window.scrollBy({top:${scrollAmount},behavior:'smooth',})
|
||||
})()`);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -144,7 +142,7 @@ const ChapterContent = ({ route, navigation }) => {
|
||||
emmiter.current.removeAllListeners('VolumeUp');
|
||||
emmiter.current.removeAllListeners('VolumeDown');
|
||||
};
|
||||
}, [useVolumeButtons, chapter]);
|
||||
}, [useVolumeButtons, scrollAmount]);
|
||||
|
||||
const onLayout = useCallback(e => {
|
||||
setTimeout(() => connectVolumeButton());
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
import { StyleSheet, Text, useWindowDimensions, View } from 'react-native';
|
||||
import {
|
||||
StyleSheet,
|
||||
Text,
|
||||
useWindowDimensions,
|
||||
View,
|
||||
TextInput,
|
||||
} from 'react-native';
|
||||
import React, { Ref, useMemo, useState } from 'react';
|
||||
import color from 'color';
|
||||
|
||||
@@ -6,6 +12,8 @@ import {
|
||||
default as BottomSheetType,
|
||||
BottomSheetView,
|
||||
} from '@gorhom/bottom-sheet';
|
||||
|
||||
import { defaultTo } from 'lodash-es';
|
||||
import BottomSheet from '@components/BottomSheet/BottomSheet';
|
||||
import { useAppDispatch, useSettingsV1 } from '../../../../redux/hooks';
|
||||
import { useTheme } from '@hooks/useTheme';
|
||||
@@ -43,6 +51,7 @@ const GeneralTab: React.FC = () => {
|
||||
showBatteryAndTime,
|
||||
showScrollPercentage,
|
||||
useVolumeButtons = false,
|
||||
scrollAmount = 200,
|
||||
swipeGestures = false,
|
||||
removeExtraParagraphSpacing = false,
|
||||
} = useSettingsV1();
|
||||
@@ -118,10 +127,26 @@ const GeneralTab: React.FC = () => {
|
||||
value={useVolumeButtons}
|
||||
theme={theme}
|
||||
/>
|
||||
{useVolumeButtons ? (
|
||||
<View style={styles.textFieldContainer}>
|
||||
<Text style={[styles.paddingRightM]} numberOfLines={2}>
|
||||
{getString('readerScreen.bottomSheet.scrollAmount')}
|
||||
</Text>
|
||||
<TextInput
|
||||
style={styles.textField}
|
||||
defaultValue={defaultTo(scrollAmount, 200).toString()}
|
||||
keyboardType="numeric"
|
||||
onChangeText={text => {
|
||||
if (text) {
|
||||
dispatch(setAppSettings('scrollAmount', Number(text)));
|
||||
}
|
||||
}}
|
||||
/>
|
||||
</View>
|
||||
) : null}
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
interface ReaderBottomSheetV2Props {
|
||||
bottomSheetRef: Ref<BottomSheetType> | null;
|
||||
}
|
||||
@@ -218,4 +243,23 @@ const styles = StyleSheet.create({
|
||||
readerTab: {
|
||||
paddingVertical: 8,
|
||||
},
|
||||
textFieldContainer: {
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'space-between',
|
||||
paddingHorizontal: 16,
|
||||
paddingVertical: 8,
|
||||
},
|
||||
textField: {
|
||||
borderWidth: 1,
|
||||
borderRadius: 4,
|
||||
paddingHorizontal: 8,
|
||||
paddingVertical: 4,
|
||||
width: 100,
|
||||
textAlign: 'right',
|
||||
},
|
||||
paddingRightM: {
|
||||
flex: 1,
|
||||
paddingRight: 16,
|
||||
},
|
||||
});
|
||||
|
||||
@@ -7,7 +7,6 @@ import {
|
||||
useWindowDimensions,
|
||||
} from 'react-native';
|
||||
import React, { useState } from 'react';
|
||||
|
||||
import { useNavigation } from '@react-navigation/native';
|
||||
import { defaultTo } from 'lodash-es';
|
||||
import WebView from 'react-native-webview';
|
||||
@@ -69,6 +68,7 @@ const SettingsReaderScreen = () => {
|
||||
const readerSettings = useReaderSettings();
|
||||
const {
|
||||
useVolumeButtons = false,
|
||||
scrollAmount = 200,
|
||||
verticalSeekbar = true,
|
||||
swipeGestures = false,
|
||||
autoScroll = false,
|
||||
@@ -195,6 +195,28 @@ const SettingsReaderScreen = () => {
|
||||
}
|
||||
theme={theme}
|
||||
/>
|
||||
{useVolumeButtons ? (
|
||||
<View style={styles.scrollAmount}>
|
||||
<Text style={[labelStyle, styles.paddingRightM]} numberOfLines={2}>
|
||||
{getString('readerScreen.bottomSheet.scrollAmount')}
|
||||
</Text>
|
||||
<TextInput
|
||||
style={{
|
||||
paddingHorizontal: 16,
|
||||
paddingBottom: 8,
|
||||
flexDirection: 'row',
|
||||
}}
|
||||
defaultValue={defaultTo(scrollAmount, 100).toString()}
|
||||
keyboardType="numeric"
|
||||
onChangeText={text => {
|
||||
if (text) {
|
||||
dispatch(setAppSettings('scrollAmount', Number(text)));
|
||||
}
|
||||
}}
|
||||
/>
|
||||
</View>
|
||||
) : null}
|
||||
|
||||
<SwitchItem
|
||||
label={getString('readerScreen.bottomSheet.swipeGestures')}
|
||||
value={swipeGestures}
|
||||
@@ -510,4 +532,11 @@ const styles = StyleSheet.create({
|
||||
flex: 1,
|
||||
paddingRight: 16,
|
||||
},
|
||||
scrollAmount: {
|
||||
paddingHorizontal: 16,
|
||||
paddingBottom: 8,
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'space-between',
|
||||
},
|
||||
});
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,230 @@
|
||||
import dayjs from 'dayjs';
|
||||
import * as cheerio from 'cheerio';
|
||||
import { htmlToText } from '../../helpers/htmlToText';
|
||||
import { Status, defaultCoverUri } from '../../helpers/constants';
|
||||
|
||||
class NovelTlScraper {
|
||||
constructor(sourceId, baseUrl, sourceName, filter) {
|
||||
this.sourceId = sourceId;
|
||||
this.baseUrl = baseUrl;
|
||||
this.domain = baseUrl.split('//')[1];
|
||||
this.sourceName = sourceName;
|
||||
|
||||
this.filters = filter || null;
|
||||
}
|
||||
|
||||
async popularNovels(page, { filters }) {
|
||||
const result = await fetch('https://api.novel.tl/api/site/v2/graphql', {
|
||||
method: 'post',
|
||||
headers: {
|
||||
'User-Agent':
|
||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0',
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
|
||||
'Content-Type': 'application/json',
|
||||
'Alt-Used': 'api.novel.tl',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
},
|
||||
referrer: this.baseUrl,
|
||||
body: JSON.stringify({
|
||||
operationName: 'Projects',
|
||||
query:
|
||||
'query Projects($hostname:String! $filter:SearchFilter $page:Int $limit:Int){projects(section:{fullUrl:$hostname}filter:$filter page:{pageSize:$limit,pageNumber:$page}){content{title url covers{url}}}}',
|
||||
variables: {
|
||||
filter: filters?.tags?.length > 0 ? { tags: filters.tags } : {},
|
||||
hostname: this.domain,
|
||||
limit: 40,
|
||||
page,
|
||||
},
|
||||
}),
|
||||
});
|
||||
|
||||
const json = await result.json();
|
||||
let novels = json?.data?.projects?.content?.map(novel => ({
|
||||
novelName: novel.title,
|
||||
novelUrl: novel.url,
|
||||
sourceId: this.sourceId,
|
||||
novelCover: novel.covers[0]?.url
|
||||
? this.baseUrl + novel.covers[0].url
|
||||
: defaultCoverUri,
|
||||
}));
|
||||
|
||||
return { novels };
|
||||
}
|
||||
|
||||
async parseNovelAndChapters(novelUrl) {
|
||||
const result = await fetch('https://api.novel.tl/api/site/v2/graphql', {
|
||||
method: 'post',
|
||||
headers: {
|
||||
'User-Agent':
|
||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0',
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
|
||||
'Content-Type': 'application/json',
|
||||
'Alt-Used': 'api.novel.tl',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
},
|
||||
referrer: this.baseUrl,
|
||||
body: JSON.stringify({
|
||||
operationName: 'Book',
|
||||
query:
|
||||
'query Book($url:String){project(project:{fullUrl:$url}){title translationStatus url covers{url}persons(langs:["ru","en","*"]roles:["author","illustrator","original_story","original_design"]){role name{firstName lastName}}genres{nameRu nameEng}tags{nameRu nameEng}annotation{text}subprojects{content{title volumes{content{url shortName chapters{title publishDate url published}}}}}}}',
|
||||
variables: {
|
||||
hostname: this.domain,
|
||||
project: novelUrl,
|
||||
url: this.domain + '/r/' + novelUrl,
|
||||
},
|
||||
}),
|
||||
});
|
||||
const json = await result.json();
|
||||
|
||||
let novel = {
|
||||
sourceId: this.sourceId,
|
||||
sourceName: this.sourceName,
|
||||
url: this.baseUrl + '/r/' + novelUrl,
|
||||
novelUrl,
|
||||
novelName: json.data.project.title,
|
||||
novelCover: json.data.project.covers[0]?.url
|
||||
? this.baseUrl + json.data.project.covers[0].url
|
||||
: defaultCoverUri,
|
||||
summary: htmlToText(json.data.project.annotation?.text),
|
||||
author:
|
||||
json.data.project.persons[0].name.firstName +
|
||||
' ' +
|
||||
json.data.project.persons[0].name.lastName,
|
||||
status:
|
||||
json.data.project.translationStatus === 'active'
|
||||
? Status.ONGOING
|
||||
: Status.COMPLETED,
|
||||
};
|
||||
|
||||
let genres = []
|
||||
.concat(json.data.project.tags, json.data.project.genres)
|
||||
.map(item => item?.nameRu || item?.nameEng)
|
||||
.filter(item => item);
|
||||
|
||||
if (genres.length > 0) {
|
||||
novel.genre = genres.join(',');
|
||||
}
|
||||
|
||||
let novelChapters = [];
|
||||
json.data.project.subprojects.content.forEach(work =>
|
||||
work.volumes.content.forEach(volume =>
|
||||
volume.chapters.forEach(
|
||||
chapter =>
|
||||
chapter?.published &&
|
||||
novelChapters.push({
|
||||
chapterName: volume.shortName + ' ' + chapter.title,
|
||||
chapterUrl: volume.url + '/' + chapter.url,
|
||||
releaseDate: dayjs(chapter.publishDate).format('LLL'),
|
||||
}),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
novel.chapters = novelChapters;
|
||||
return novel;
|
||||
}
|
||||
|
||||
async parseChapter(novelUrl, chapterUrl) {
|
||||
const baseUrl = this.baseUrl;
|
||||
const sourceId = this.sourceId;
|
||||
const result = await fetch('https://api.novel.tl/api/site/v2/graphql', {
|
||||
method: 'post',
|
||||
headers: {
|
||||
'User-Agent':
|
||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0',
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
|
||||
'Content-Type': 'application/json',
|
||||
'Alt-Used': 'api.novel.tl',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
},
|
||||
referrer: baseUrl,
|
||||
body: JSON.stringify({
|
||||
operationName: 'EReaderData',
|
||||
query:
|
||||
'query EReaderData($url:String!,$chapterSelector:Selector!){project(project:{fullUrl:$url}){title url}chapter(chapter:$chapterSelector){title text{text}}}',
|
||||
variables: {
|
||||
chapterSelector: {
|
||||
fullUrl: this.domain + '/r/' + novelUrl + '/' + chapterUrl,
|
||||
},
|
||||
url: this.domain + '/r/' + novelUrl + '/' + chapterUrl,
|
||||
},
|
||||
}),
|
||||
});
|
||||
const json = await result.json();
|
||||
|
||||
const loadedCheerio = cheerio.load(json.data.chapter.text.text);
|
||||
loadedCheerio('img').each(function () {
|
||||
if (!loadedCheerio(this).attr('src')?.startsWith('http')) {
|
||||
let src = loadedCheerio(this).attr('src');
|
||||
loadedCheerio(this).attr('src', baseUrl + src);
|
||||
}
|
||||
});
|
||||
|
||||
const chapter = {
|
||||
sourceId,
|
||||
novelUrl,
|
||||
chapterUrl,
|
||||
chapterName: json.data.chapter.title,
|
||||
chapterText: loadedCheerio.html(),
|
||||
};
|
||||
|
||||
return chapter;
|
||||
}
|
||||
|
||||
async searchNovels(searchTerm) {
|
||||
const result = await fetch('https://api.novel.tl/api/site/v2/graphql', {
|
||||
method: 'post',
|
||||
headers: {
|
||||
'User-Agent':
|
||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0',
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
|
||||
'Content-Type': 'application/json',
|
||||
'Alt-Used': 'api.novel.tl',
|
||||
'Sec-Fetch-Dest': 'empty',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Site': 'cross-site',
|
||||
},
|
||||
referrer: this.baseUrl,
|
||||
body: JSON.stringify({
|
||||
operationName: 'Projects',
|
||||
query:
|
||||
'query Projects($hostname:String! $filter:SearchFilter $page:Int $limit:Int){projects(section:{fullUrl:$hostname}filter:$filter page:{pageSize:$limit,pageNumber:$page}){content{title url covers{url}}}}',
|
||||
variables: {
|
||||
filter: {
|
||||
query: searchTerm,
|
||||
},
|
||||
hostname: this.domain,
|
||||
limit: 40,
|
||||
page: 1,
|
||||
},
|
||||
}),
|
||||
});
|
||||
const json = await result.json();
|
||||
|
||||
let novels = [];
|
||||
json?.data?.projects?.content?.forEach(novel =>
|
||||
novels.push({
|
||||
novelName: novel.title,
|
||||
novelUrl: novel.url,
|
||||
sourceId: this.sourceId,
|
||||
novelCover: novel.covers[0]?.url
|
||||
? this.baseUrl + novel.covers[0].url
|
||||
: defaultCoverUri,
|
||||
}),
|
||||
);
|
||||
|
||||
return novels;
|
||||
}
|
||||
}
|
||||
|
||||
export default NovelTlScraper;
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,282 @@
|
||||
import { FilterInputs } from '../../types/filterTypes';
|
||||
import { htmlToText } from '../../helpers/htmlToText';
|
||||
import { Status } from '../../helpers/constants';
|
||||
import * as cheerio from 'cheerio';
|
||||
import { defaultTo } from 'lodash-es';
|
||||
|
||||
class RulateScraper {
|
||||
constructor(sourceId, baseUrl, sourceName, filter) {
|
||||
this.sourceId = sourceId;
|
||||
this.baseUrl = baseUrl;
|
||||
this.sourceName = sourceName;
|
||||
this.filters = [
|
||||
{
|
||||
key: 'sort',
|
||||
label: 'Сортировка',
|
||||
values: [
|
||||
{ label: 'По рейтингу', value: '6' },
|
||||
{ label: 'По степени готовности', value: '0' },
|
||||
{ label: 'По названию на языке оригинала', value: '1' },
|
||||
{ label: 'По названию на языке перевода', value: '2' },
|
||||
{ label: 'По дате создания', value: '3' },
|
||||
{ label: 'По дате последней активности', value: '4' },
|
||||
{ label: 'По просмотрам', value: '5' },
|
||||
{ label: 'По кол-ву переведённых глав', value: '7' },
|
||||
{ label: 'По кол-ву лайков', value: '8' },
|
||||
{ label: 'По кол-ву страниц', value: '10' },
|
||||
{ label: 'По кол-ву бесплатных глав', value: '11' },
|
||||
{ label: 'По кол-ву рецензий', value: '12' },
|
||||
{ label: 'По кол-ву в закладках', value: '13' },
|
||||
{ label: 'По кол-ву в избранном', value: '14' },
|
||||
],
|
||||
inputType: FilterInputs.Picker,
|
||||
},
|
||||
{
|
||||
key: 'type',
|
||||
label: 'Тип',
|
||||
values: [
|
||||
{ label: 'Неважно', value: '0' },
|
||||
{ label: 'Только переводы', value: '1' },
|
||||
{ label: 'Только авторские', value: '2' },
|
||||
],
|
||||
inputType: FilterInputs.Picker,
|
||||
},
|
||||
{
|
||||
key: 'atmosphere',
|
||||
label: 'Атмосфера',
|
||||
values: [
|
||||
{ label: 'Неважно', value: '0' },
|
||||
{ label: 'Позитивная', value: '1' },
|
||||
{ label: 'Dark', value: '2' },
|
||||
],
|
||||
inputType: FilterInputs.Picker,
|
||||
},
|
||||
{
|
||||
key: 'trash',
|
||||
label: 'Другое',
|
||||
values: [
|
||||
{ label: 'Готовые на 100%', value: 'ready' },
|
||||
{ label: 'Доступные для перевода', value: 'tr' },
|
||||
{ label: 'Доступные для скачивания', value: 'gen' },
|
||||
{ label: 'Завершённые проекты', value: 'wealth' },
|
||||
{ label: 'Распродажа', value: 'discount' },
|
||||
{ label: 'Только онгоинги', value: 'ongoings' },
|
||||
{ label: 'Убрать машинный', value: 'remove_machinelate' },
|
||||
],
|
||||
inputType: FilterInputs.Checkbox,
|
||||
},
|
||||
...filter,
|
||||
{
|
||||
key: 'adult',
|
||||
label: 'Возрастные ограничения',
|
||||
values: [
|
||||
{ label: 'Все', value: '0' },
|
||||
{ label: 'Убрать 18+', value: '1' },
|
||||
{ label: 'Только 18+', value: '2' },
|
||||
],
|
||||
inputType: FilterInputs.Picker,
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
async popularNovels(page, { showLatestNovels, filters }) {
|
||||
const baseUrl = this.baseUrl;
|
||||
const sourceId = this.sourceId;
|
||||
let url = baseUrl + '/search?t=&cat=2';
|
||||
url += '&sort=' + defaultTo(filters?.sort, showLatestNovels ? '4' : '6');
|
||||
url += '&type=' + defaultTo(filters?.type, '0');
|
||||
url += '&atmosphere=' + defaultTo(filters?.atmosphere, '0');
|
||||
url += '&adult=' + defaultTo(filters?.adult, '0');
|
||||
|
||||
if (filters?.genres?.length) {
|
||||
url += filters.genres.map(i => `&genres[]=${i}`).join('');
|
||||
}
|
||||
|
||||
if (filters?.tags?.length) {
|
||||
url += filters.tags.map(i => `&tags[]=${i}`).join('');
|
||||
}
|
||||
|
||||
if (filters?.trash?.length) {
|
||||
url += filters.trash.map(i => `&${i}=1`);
|
||||
}
|
||||
|
||||
url += `&Book_page=${page}`;
|
||||
|
||||
const result = await fetch(url);
|
||||
const body = await result.text();
|
||||
const loadedCheerio = cheerio.load(body);
|
||||
|
||||
let novels = [];
|
||||
|
||||
loadedCheerio(
|
||||
'ul[class="search-results"] > li:not([class="ad_type_catalog"])',
|
||||
).each(function () {
|
||||
novels.push({
|
||||
sourceId,
|
||||
novelName: loadedCheerio(this).find('p > a').text(),
|
||||
novelCover: baseUrl + loadedCheerio(this).find('img').attr('src'),
|
||||
novelUrl: loadedCheerio(this).find('p > a').attr('href'),
|
||||
});
|
||||
});
|
||||
|
||||
return { novels };
|
||||
}
|
||||
|
||||
async parseNovelAndChapters(novelUrl) {
|
||||
let result = await fetch(this.baseUrl + novelUrl);
|
||||
if (result.url.includes('mature?path=')) {
|
||||
const formData = new FormData();
|
||||
formData.append('path', novelUrl);
|
||||
formData.append('ok', 'Да');
|
||||
|
||||
await fetch(result.url, {
|
||||
method: 'POST',
|
||||
body: formData,
|
||||
});
|
||||
|
||||
result = await fetch(this.baseUrl + novelUrl);
|
||||
}
|
||||
const body = await result.text();
|
||||
const loadedCheerio = cheerio.load(body);
|
||||
|
||||
let novel = {
|
||||
sourceId: this.sourceId,
|
||||
sourceName: this.sourceName,
|
||||
url: this.baseUrl + novelUrl,
|
||||
novelUrl,
|
||||
};
|
||||
|
||||
novel.novelName = loadedCheerio('div[class="container"] > div > div > h1')
|
||||
.text()
|
||||
.trim();
|
||||
novel.novelCover =
|
||||
this.baseUrl + loadedCheerio('div[class="images"] > div img').attr('src');
|
||||
novel.summary = loadedCheerio('#Info > div:nth-child(3)').html();
|
||||
let genre = [];
|
||||
|
||||
if (novel?.summary) {
|
||||
novel.summary = htmlToText(novel.summary);
|
||||
}
|
||||
|
||||
loadedCheerio('div[class="span5"] > p').each(function () {
|
||||
switch (loadedCheerio(this).find('strong').text()) {
|
||||
case 'Автор:':
|
||||
novel.author = loadedCheerio(this).find('em > a').text().trim();
|
||||
break;
|
||||
case 'Выпуск:':
|
||||
novel.status =
|
||||
loadedCheerio(this).find('em').text().trim() === 'продолжается'
|
||||
? Status.ONGOING
|
||||
: Status.COMPLETED;
|
||||
break;
|
||||
case 'Тэги:':
|
||||
loadedCheerio(this)
|
||||
.find('em > a')
|
||||
.each(function () {
|
||||
genre.push(loadedCheerio(this).text());
|
||||
});
|
||||
break;
|
||||
case 'Жанры:':
|
||||
loadedCheerio(this)
|
||||
.find('em > a')
|
||||
.each(function () {
|
||||
genre.push(loadedCheerio(this).text());
|
||||
});
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
if (genre.length > 0) {
|
||||
novel.genre = genre.reverse().join(',');
|
||||
}
|
||||
|
||||
let chapters = [];
|
||||
loadedCheerio('table > tbody > tr.chapter_row').each(function () {
|
||||
const chapterName = loadedCheerio(this)
|
||||
.find('td[class="t"] > a')
|
||||
.text()
|
||||
.trim();
|
||||
const releaseDate = loadedCheerio(this)
|
||||
.find('td > span')
|
||||
.attr('title')
|
||||
?.trim();
|
||||
const chapterUrl = loadedCheerio(this)
|
||||
.find('td[class="t"] > a')
|
||||
.attr('href');
|
||||
|
||||
if (
|
||||
loadedCheerio(this).find('td > span[class="disabled"]').length < 1 &&
|
||||
releaseDate
|
||||
) {
|
||||
chapters.push({ chapterName, releaseDate, chapterUrl });
|
||||
}
|
||||
});
|
||||
|
||||
novel.chapters = chapters;
|
||||
return novel;
|
||||
}
|
||||
|
||||
async parseChapter(novelUrl, chapterUrl) {
|
||||
const baseUrl = this.baseUrl;
|
||||
const sourceId = this.sourceId;
|
||||
let result = await fetch(baseUrl + chapterUrl);
|
||||
if (result.url.includes('mature?path=')) {
|
||||
const formData = new FormData();
|
||||
formData.append('path', novelUrl);
|
||||
formData.append('ok', 'Да');
|
||||
|
||||
await fetch(result.url, {
|
||||
method: 'POST',
|
||||
body: formData,
|
||||
});
|
||||
|
||||
result = await fetch(baseUrl + chapterUrl);
|
||||
}
|
||||
const body = await result.text();
|
||||
const loadedCheerio = cheerio.load(body);
|
||||
|
||||
loadedCheerio('.content-text img').each(function () {
|
||||
if (!loadedCheerio(this).attr('src')?.startsWith('http')) {
|
||||
let src = loadedCheerio(this).attr('src');
|
||||
loadedCheerio(this).attr('src', baseUrl + src);
|
||||
}
|
||||
});
|
||||
|
||||
const chapterName = loadedCheerio(
|
||||
'.chapter_select > select > option[selected]',
|
||||
)
|
||||
.text()
|
||||
.trim();
|
||||
const chapterText = loadedCheerio('.content-text').html();
|
||||
|
||||
const chapter = {
|
||||
sourceId,
|
||||
novelUrl,
|
||||
chapterUrl,
|
||||
chapterName,
|
||||
chapterText,
|
||||
};
|
||||
|
||||
return chapter;
|
||||
}
|
||||
|
||||
async searchNovels(searchTerm) {
|
||||
const result = await fetch(
|
||||
this.baseUrl + '/search/autocomplete?query=' + searchTerm,
|
||||
);
|
||||
let json = await result.json();
|
||||
let novels = [];
|
||||
|
||||
json.forEach(item => {
|
||||
const novelName = item.title_one + ' / ' + item.title_two;
|
||||
const novelCover = this.baseUrl + item.img;
|
||||
const novelUrl = item.url;
|
||||
|
||||
novels.push({ sourceId: this.sourceId, novelName, novelCover, novelUrl });
|
||||
});
|
||||
|
||||
return novels;
|
||||
}
|
||||
}
|
||||
|
||||
export default RulateScraper;
|
||||
@@ -9,7 +9,7 @@ const sourceName = 'Jaomix';
|
||||
const baseUrl = 'https://jaomix.ru';
|
||||
|
||||
const popularNovels = async (page, { showLatestNovels, filters }) => {
|
||||
let url = baseUrl + '/?search=&sortby=';
|
||||
let url = baseUrl + '/?searchrn&sortby=';
|
||||
url += defaultTo(filters?.sort, showLatestNovels ? 'upd' : 'count');
|
||||
|
||||
if (filters?.type?.length) {
|
||||
@@ -110,7 +110,7 @@ const parseChapter = async (novelUrl, chapterUrl) => {
|
||||
};
|
||||
|
||||
const searchNovels = async searchTerm => {
|
||||
const url = `${baseUrl}/?search=${searchTerm}&but=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%BF%D0%BE+%D0%BD%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D1%8E&sortby=new`;
|
||||
const url = `${baseUrl}/?searchrn=${searchTerm}&but=Поиск по названию&sortby=upd`;
|
||||
const result = await fetch(url);
|
||||
let body = await result.text();
|
||||
const loadedCheerio = cheerio.load(body);
|
||||
|
||||
@@ -85,8 +85,8 @@ const parseNovelAndChapters = async novelUrl => {
|
||||
const chaptersRaw = await fetch(fetchChaptersUrl);
|
||||
const chaptersJSON = await chaptersRaw.json();
|
||||
|
||||
chaptersJSON.volumes.map(volume =>
|
||||
volume.chapters.map(chapter =>
|
||||
chaptersJSON.volumes.forEach(volume =>
|
||||
volume.chapters.forEach(chapter =>
|
||||
novelChapters.push({
|
||||
chapterName: chapter.name,
|
||||
chapterUrl: chapter.url,
|
||||
@@ -153,7 +153,7 @@ const searchNovels = async searchTerm => {
|
||||
|
||||
data
|
||||
.find(item => item.meta.key === 'ranobe')
|
||||
?.data.map(novel =>
|
||||
?.data.forEach(novel =>
|
||||
novels.push({
|
||||
sourceId,
|
||||
novelName: novel.names.rus,
|
||||
|
||||
+16
-12
@@ -8,6 +8,7 @@ const sourceId = 93;
|
||||
const sourceName = 'RanobeLib';
|
||||
|
||||
const baseUrl = 'https://ranobelib.me';
|
||||
var ui = null;
|
||||
|
||||
const popularNovels = async (page, { showLatestNovels, filters }) => {
|
||||
let url = `${baseUrl}/manga-list?sort=`;
|
||||
@@ -46,6 +47,9 @@ const popularNovels = async (page, { showLatestNovels, filters }) => {
|
||||
const body = await result.text();
|
||||
|
||||
const loadedCheerio = cheerio.load(body);
|
||||
ui = loadedCheerio('a.header-right-menu__item')
|
||||
.attr('href')
|
||||
?.replace?.(/[^0-9]/g, '');
|
||||
|
||||
let novels = [];
|
||||
|
||||
@@ -122,25 +126,25 @@ const parseNovelAndChapters = async novelUrl => {
|
||||
?.slice(0, -1);
|
||||
|
||||
chaptersJson = JSON.parse(chaptersJson);
|
||||
ui = chaptersJson?.user?.id;
|
||||
|
||||
const novelSlug = chaptersJson.manga.slug;
|
||||
|
||||
chaptersJson.chapters.list.map(item => {
|
||||
const chapterName =
|
||||
`Том ${item.chapter_volume} Глава ${item.chapter_number} ${item.chapter_name}`?.trim();
|
||||
const releaseDate = dayjs(item.chapter_created_at).format('LLL');
|
||||
const chapterUrl = `${baseUrl}/${novelSlug}/v${item.chapter_volume}/c${item.chapter_number}`;
|
||||
|
||||
chapters.push({ chapterName, releaseDate, chapterUrl });
|
||||
chaptersJson.chapters.list.forEach(chapter => {
|
||||
chapters.push({
|
||||
chapterName:
|
||||
`Том ${chapter.chapter_volume} Глава ${chapter.chapter_number} ${chapter.chapter_name}`?.trim(),
|
||||
releaseDate: dayjs(chapter.chapter_created_at).format('LLL'),
|
||||
chapterUrl:
|
||||
`${baseUrl}/${chaptersJson.manga.slug}/v${chapter.chapter_volume}/c${chapter.chapter_number}?bid=` +
|
||||
(chapter?.branch_id || ''),
|
||||
});
|
||||
});
|
||||
|
||||
novel.chapters = chapters.reverse();
|
||||
|
||||
return novel;
|
||||
};
|
||||
|
||||
const parseChapter = async (novelUrl, chapterUrl) => {
|
||||
const result = await fetch(chapterUrl);
|
||||
const result = await fetch(chapterUrl + (ui ? `&ui=${ui}` : ''));
|
||||
const body = await result.text();
|
||||
|
||||
const loadedCheerio = cheerio.load(body);
|
||||
@@ -179,7 +183,7 @@ const searchNovels = async searchTerm => {
|
||||
const body = await result.json();
|
||||
let novels = [];
|
||||
|
||||
body.map(novel => {
|
||||
body.forEach(novel => {
|
||||
const novelName = novel?.rus_name || novel.name;
|
||||
const novelUrl = novel?.href || baseUrl + '/' + novel.slug;
|
||||
const novelCover = novel.coverImage;
|
||||
|
||||
@@ -26,7 +26,7 @@ const popularNovels = async (page, { showLatestNovels, filters }) => {
|
||||
json = JSON.parse(json);
|
||||
let novels = [];
|
||||
|
||||
json.props.pageProps.totalData.items.map(item => {
|
||||
json.props.pageProps.totalData.items.forEach(item => {
|
||||
const novelName = item.title;
|
||||
const novelUrl = baseUrl + '/' + item.slug;
|
||||
const novelCover = item?.verticalImage?.url
|
||||
@@ -65,7 +65,7 @@ const parseNovelAndChapters = async novelUrl => {
|
||||
|
||||
let chapters = [];
|
||||
|
||||
json.props.pageProps.book.chapters.map(item => {
|
||||
json.props.pageProps.book.chapters.forEach(item => {
|
||||
const chapterName = item.title;
|
||||
const releaseDate = dayjs(item.publishedAt).format('LLL');
|
||||
const chapterUrl = baseUrl + item.url;
|
||||
@@ -115,7 +115,7 @@ const searchNovels = async searchTerm => {
|
||||
const body = await result.json();
|
||||
let novels = [];
|
||||
|
||||
body.items.map(item => {
|
||||
body.items.forEach(item => {
|
||||
const novelName = item.title;
|
||||
const novelUrl = baseUrl + '/' + item.slug;
|
||||
const novelCover = item?.verticalImage?.url
|
||||
|
||||
@@ -37,7 +37,7 @@ const popularNovels = async (page, { showLatestNovels, filters }) => {
|
||||
|
||||
let novels = [];
|
||||
|
||||
body.content.map(item => {
|
||||
body.content.forEach(item => {
|
||||
const novelName = item.rus_name;
|
||||
const novelUrl = item.dir;
|
||||
const novelCover =
|
||||
@@ -89,7 +89,7 @@ const parseNovelAndChapters = async novelUrl => {
|
||||
);
|
||||
let volumes = await chapterResult.json();
|
||||
|
||||
volumes.content.map(item => {
|
||||
volumes.content.forEach(item => {
|
||||
const chapterName =
|
||||
`Том ${item.tome} Глава ${item.chapter} ${item.name}`?.trim();
|
||||
const releaseDate = dayjs(item.upload_date).format('LLL');
|
||||
@@ -126,7 +126,7 @@ const searchNovels = async searchTerm => {
|
||||
let body = await result.json();
|
||||
let novels = [];
|
||||
|
||||
body.content.map(item => {
|
||||
body.content.forEach(item => {
|
||||
const novelName = item.rus_name;
|
||||
const novelUrl = item.dir;
|
||||
const novelCover =
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -91,7 +91,6 @@ import RanobeHubScraper from './ru/ranobehub';
|
||||
import RanobeLibScraper from './ru/ranobelib';
|
||||
import RanobeRFScraper from './ru/ranoberf';
|
||||
import RenovelsScraper from './ru/renovels';
|
||||
import RulateScraper from './ru/rulate';
|
||||
import FicbookScraper from './ru/ficbook';
|
||||
import DivineDaoLibraryScraper from './en/divinedaolibrary';
|
||||
import NovelOnlineFullScraper from './en/novelonlinefull';
|
||||
@@ -135,6 +134,26 @@ import {
|
||||
} from './multisrc/wqmangastream/WQMangaStreamGenerator';
|
||||
import AgitoonScraper from './kr/Agitoon';
|
||||
import PawReadScraper from './en/pawread';
|
||||
import {
|
||||
RulateScraper,
|
||||
ErolateScraper,
|
||||
} from './multisrc/rulate/RulateGenerator';
|
||||
import {
|
||||
RuRanobeScraper,
|
||||
UkrRanobeScraper,
|
||||
NightnovelScraper,
|
||||
KgRanobeScraper,
|
||||
AxelScraper,
|
||||
SferdrakonScraper,
|
||||
OriginalScraper,
|
||||
SnailulitkaScraper,
|
||||
TsundokuScraper,
|
||||
JapitScraper,
|
||||
BelScraper,
|
||||
RedScraper,
|
||||
SiScraper,
|
||||
KodScraper,
|
||||
} from './multisrc/noveltl/NovelTlGenerator';
|
||||
|
||||
interface PopularNovelsResponse {
|
||||
novels: SourceNovelItem[];
|
||||
@@ -288,6 +307,21 @@ export const sourceManager = (sourceId: number): Scraper => {
|
||||
145: AgitoonScraper, // @ts-ignore
|
||||
146: PandaMtlScraper, // @ts-ignore
|
||||
147: PawReadScraper, // @ts-ignore
|
||||
148: ErolateScraper, // @ts-ignore
|
||||
149: RuRanobeScraper, // @ts-ignore
|
||||
150: UkrRanobeScraper, // @ts-ignore
|
||||
151: NightnovelScraper, // @ts-ignore
|
||||
152: KgRanobeScraper, // @ts-ignore
|
||||
153: AxelScraper, // @ts-ignore
|
||||
154: SferdrakonScraper, // @ts-ignore
|
||||
155: OriginalScraper, // @ts-ignore
|
||||
156: SnailulitkaScraper, // @ts-ignore
|
||||
157: TsundokuScraper, // @ts-ignore
|
||||
158: JapitScraper, // @ts-ignore
|
||||
159: BelScraper, // @ts-ignore
|
||||
160: RedScraper, // @ts-ignore
|
||||
161: SiScraper, // @ts-ignore
|
||||
162: KodScraper, // @ts-ignore
|
||||
};
|
||||
|
||||
return scrapers[sourceId];
|
||||
|
||||
@@ -880,5 +880,110 @@
|
||||
"icon": "https://www.pawread.com/favicon.ico",
|
||||
"url": "https://pawread.com/",
|
||||
"lang": "English"
|
||||
},
|
||||
{
|
||||
"sourceId": 148,
|
||||
"sourceName": "Erolate",
|
||||
"url": "https://erolate.com",
|
||||
"lang": "Russian",
|
||||
"icon": "https://erolate.com/i/logo/erolate.png"
|
||||
},
|
||||
{
|
||||
"sourceId": 149,
|
||||
"sourceName": "РуРанобэ",
|
||||
"url": "https://ruranobe.ru",
|
||||
"lang": "Russian",
|
||||
"icon": "https://ruranobe.ru/logo.png"
|
||||
},
|
||||
{
|
||||
"sourceId": 150,
|
||||
"sourceName": "Переклади українською мовою",
|
||||
"url": "https://ukr.novel.tl",
|
||||
"lang": "Ukraine",
|
||||
"icon": "https://ukr.novel.tl/logo.png"
|
||||
},
|
||||
{
|
||||
"sourceId": 151,
|
||||
"sourceName": "Nightnovel",
|
||||
"url": "https://nightnovel.online",
|
||||
"lang": "Russian",
|
||||
"icon": "https://nightnovel.online/logo.png"
|
||||
},
|
||||
{
|
||||
"sourceId": 152,
|
||||
"sourceName": "Карманная галактика",
|
||||
"url": "https://kg.novel.tl",
|
||||
"lang": "Russian",
|
||||
"icon": "https://kg.novel.tl/logo.png"
|
||||
},
|
||||
{
|
||||
"sourceId": 153,
|
||||
"sourceName": "Аксел",
|
||||
"url": "https://axel.znovel.space",
|
||||
"lang": "Russian",
|
||||
"icon": "https://axel.znovel.space/logo.png"
|
||||
},
|
||||
{
|
||||
"sourceId": 154,
|
||||
"sourceName": "Уголок дракона",
|
||||
"url": "https://sferdrakon.novel.tl",
|
||||
"lang": "Russian",
|
||||
"icon": "https://sferdrakon.novel.tl/logo.png"
|
||||
},
|
||||
{
|
||||
"sourceId": 155,
|
||||
"sourceName": "Авторские работы",
|
||||
"url": "https://original.novel.tl",
|
||||
"lang": "Russian",
|
||||
"icon": "https://original.novel.tl/logo.png"
|
||||
},
|
||||
{
|
||||
"sourceId": 156,
|
||||
"sourceName": "Snailulitka",
|
||||
"url": "https://snailulitka.novel.tl",
|
||||
"lang": "Russian",
|
||||
"icon": "https://snailulitka.novel.tl/logo.png"
|
||||
},
|
||||
{
|
||||
"sourceId": 157,
|
||||
"sourceName": "TsundokuTrans",
|
||||
"url": "https://tsundoku.novel.tl",
|
||||
"lang": "Russian",
|
||||
"icon": "https://tsundoku.novel.tl/logo.png"
|
||||
},
|
||||
{
|
||||
"sourceId": 158,
|
||||
"sourceName": "Japit Comics",
|
||||
"url": "https://japit.novel.tl",
|
||||
"lang": "Russian",
|
||||
"icon": "https://japit.novel.tl/logo.png"
|
||||
},
|
||||
{
|
||||
"sourceId": 159,
|
||||
"sourceName": "Белманга",
|
||||
"url": "https://bel.novel.tl",
|
||||
"lang": "Belarus",
|
||||
"icon": "https://bel.novel.tl/logo.png"
|
||||
},
|
||||
{
|
||||
"sourceId": 160,
|
||||
"sourceName": "Север и Юг",
|
||||
"url": "https://red.novel.tl",
|
||||
"lang": "Russian",
|
||||
"icon": "https://red.novel.tl/logo.png"
|
||||
},
|
||||
{
|
||||
"sourceId": 161,
|
||||
"sourceName": "Сказочные истории",
|
||||
"url": "https://si.novel.tl",
|
||||
"lang": "Russian",
|
||||
"icon": "https://si.novel.tl/logo.png"
|
||||
},
|
||||
{
|
||||
"sourceId": 162,
|
||||
"sourceName": "K.O.D.",
|
||||
"url": "https://kod.novel.tl",
|
||||
"lang": "Russian",
|
||||
"icon": "https://kod.novel.tl/logo.png"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
export const languages = [
|
||||
'Arabic',
|
||||
'Belarus',
|
||||
'Chinese',
|
||||
'English',
|
||||
'French',
|
||||
@@ -10,5 +11,6 @@ export const languages = [
|
||||
'Russian',
|
||||
'Spanish',
|
||||
'Turkish',
|
||||
'Ukraine',
|
||||
'Vietnamese',
|
||||
];
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Total chapters",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Display mode",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Search updates",
|
||||
"lastUpdatedAt": "Library last updated:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "History",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "مجموع الفصول",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "نمط العرض",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "البحث في التحديثات",
|
||||
"lastUpdatedAt": "آخر تحديث للمكتبة:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "السجل",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Total chapters",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Display mode",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Search updates",
|
||||
"lastUpdatedAt": "Library last updated:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "History",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Total chapters",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Display mode",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Search updates",
|
||||
"lastUpdatedAt": "Library last updated:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "History",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Total chapters",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Display mode",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Search updates",
|
||||
"lastUpdatedAt": "Library last updated:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "History",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"searchResults": "Suchergebnisse",
|
||||
"chapters": "Kapitel",
|
||||
"submit": "Bestätigen",
|
||||
"retry": "Retry"
|
||||
"retry": "Erneut versuchen"
|
||||
},
|
||||
"library": "Bibliothek",
|
||||
"libraryScreen": {
|
||||
@@ -34,9 +34,10 @@
|
||||
"dateAdded": "Hinzugefügt am",
|
||||
"alphabetically": "Alphabetisch",
|
||||
"totalChapters": "Gesamte Kapitel",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"download": "Heruntergeladen",
|
||||
"unread": "Ungelesen",
|
||||
"lastRead": "Zuletzt gelesen",
|
||||
"lastUpdated": "Zuletzt aktualisiert"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Anzeigemodus",
|
||||
@@ -55,8 +56,9 @@
|
||||
"updatesScreen": {
|
||||
"searchbar": "Nach Updates suchen",
|
||||
"lastUpdatedAt": "Bibliothek zuletzt aktualisiert:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"newChapters": "Neue Kapitel",
|
||||
"emptyView": "Keine kürzlichen Aktualisierungen",
|
||||
"updatesLower": "Aktualisierungen"
|
||||
},
|
||||
"history": "Verlauf",
|
||||
"historyScreen": {
|
||||
@@ -93,15 +95,15 @@
|
||||
"showProgressPercentage": "Zeige Fortschritt in Prozent",
|
||||
"swipeGestures": "Nach links oder rechts wischen, um zwischen den Kapiteln zu wechseln",
|
||||
"allowTextSelection": "Textauswahl erlauben",
|
||||
"useChapterDrawerSwipeNavigation": "Swipe right to open drawer",
|
||||
"removeExtraSpacing": "Remove extra paragraph spacing",
|
||||
"volumeButtonsScroll": "Volume buttons scroll",
|
||||
"useChapterDrawerSwipeNavigation": "Wische nach rechts, um Seitenleiste zu öffnen",
|
||||
"removeExtraSpacing": "Extra Absatzabstand entfernen",
|
||||
"volumeButtonsScroll": "Scrollen mit Lautstärkeregler",
|
||||
"showSwipeMargins": "Show swipe margins"
|
||||
},
|
||||
"drawer": {
|
||||
"scrollToCurrentChapter": "Scroll to current chapter",
|
||||
"scrollToTop": "Scroll to top",
|
||||
"scrollToBottom": "Scroll to bottom"
|
||||
"scrollToCurrentChapter": "Zum aktuellen Kapitel springen",
|
||||
"scrollToTop": "Zum Anfang springen",
|
||||
"scrollToBottom": "Zum Ende springen"
|
||||
}
|
||||
},
|
||||
"novelScreen": {
|
||||
@@ -117,13 +119,13 @@
|
||||
"display": "Darstellung"
|
||||
},
|
||||
"jumpToChapterModal": {
|
||||
"jumpToChapter": "Jump to Chapter",
|
||||
"openChapter": "Open Chapter",
|
||||
"chapterName": "Chapter Name",
|
||||
"chapterNumber": "Chapter Number",
|
||||
"jumpToChapter": "Zum Kapitel springen",
|
||||
"openChapter": "Kapitel öffnen",
|
||||
"chapterName": "Kapitelname",
|
||||
"chapterNumber": "Kapitelnummer",
|
||||
"error": {
|
||||
"validChapterName": "Enter a valid chapter name",
|
||||
"validChapterNumber": "Enter a valid chapter number"
|
||||
"validChapterName": "Geben Sie einen gültigen Kapitelnamen ein",
|
||||
"validChapterNumber": "Geben Sie eine gültige Kapitelnummer ein"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -133,27 +135,27 @@
|
||||
"settingsScreen": {
|
||||
"generalSettings": "Allgemein",
|
||||
"generalSettingsScreen": {
|
||||
"display": "Display",
|
||||
"displayMode": "Display Mode",
|
||||
"itemsPerRow": "Items per row",
|
||||
"itemsPerRowLibrary": "Items per row in library",
|
||||
"novelBadges": "Novel Badges",
|
||||
"novelSort": "Novel Sort",
|
||||
"updateLibrary": "Update library on launch",
|
||||
"useFAB": "Use FAB in Library",
|
||||
"novel": "Novel",
|
||||
"chapterSort": "Default chapter sort",
|
||||
"bySource": "By source",
|
||||
"asc": "(Ascending)",
|
||||
"desc": "(Descending)",
|
||||
"globalUpdate": "Global update",
|
||||
"updateOngoing": "Only update ongoing novels",
|
||||
"refreshMetadata": "Automatically refresh metadata",
|
||||
"refreshMetadataDescription": "Check for new cover and details when updating library",
|
||||
"updateTime": "Show last update time",
|
||||
"autoDownload": "Auto-download",
|
||||
"downloadNewChapters": "Download new chapters",
|
||||
"disableHapticFeedback": "Disable haptic feedback"
|
||||
"display": "Darstellung",
|
||||
"displayMode": "Anzeigemodus",
|
||||
"itemsPerRow": "Bücher pro Reihe",
|
||||
"itemsPerRowLibrary": "Bücher pro Reihe in der Bibliothek",
|
||||
"novelBadges": "Bücher Markierungen",
|
||||
"novelSort": "Bücher Sortierung",
|
||||
"updateLibrary": "Bibliothek beim Starten aktualisieren",
|
||||
"useFAB": "FAB in der Bibliothek verwenden",
|
||||
"novel": "Buch",
|
||||
"chapterSort": "Standard Kapitel-Sortierung",
|
||||
"bySource": "Nach Quelle",
|
||||
"asc": "(Aufsteigend)",
|
||||
"desc": "(Absteigend)",
|
||||
"globalUpdate": "Globale Aktualisierung",
|
||||
"updateOngoing": "Nur laufende Bücher aktualisieren",
|
||||
"refreshMetadata": "Metadaten automatisch aktualisieren",
|
||||
"refreshMetadataDescription": "Suche nach neuen Cover und Details beim Aktualisieren der Bibliothek",
|
||||
"updateTime": "Zeige den Zeitpunkt der letzten Aktualisierung",
|
||||
"autoDownload": "Automatisch herunterladen",
|
||||
"downloadNewChapters": "Neue Kapitel herunterladen",
|
||||
"disableHapticFeedback": "Haptisches Feedback deaktivieren"
|
||||
},
|
||||
"readerSettings": {
|
||||
"title": "Reader",
|
||||
@@ -185,7 +187,7 @@
|
||||
"statsScreen": {
|
||||
"title": "Statistiken",
|
||||
"titlesInLibrary": "Bücher in der Bibliothek",
|
||||
"totalChapters": "Total chapters",
|
||||
"totalChapters": "Gesamte Kapitel",
|
||||
"readChapters": "Gelesene Kapitel",
|
||||
"unreadChapters": "Ungelesene Kapitel",
|
||||
"downloadedChapters": "Heruntergeladene Kapitel",
|
||||
@@ -194,12 +196,12 @@
|
||||
},
|
||||
"globalSearch": {
|
||||
"searchIn": "Suche ein Buch in",
|
||||
"allSources": "all sources",
|
||||
"pinnedSources": "pinned sources"
|
||||
"allSources": "Alle Quellen",
|
||||
"pinnedSources": "Angepinnte Quellen"
|
||||
},
|
||||
"advancedSettings": {
|
||||
"deleteReadChapters": "Delete read chapters",
|
||||
"deleteReadChaptersDialogTitle": "Are you sure? All chapters marked as read will be deleted."
|
||||
"deleteReadChapters": "Gelesene Kapitel löschen",
|
||||
"deleteReadChaptersDialogTitle": "Sind Sie sicher? Alle als gelesen markierten Kapitel werden gelöscht."
|
||||
},
|
||||
"date": {
|
||||
"calendar": {
|
||||
@@ -210,26 +212,27 @@
|
||||
}
|
||||
},
|
||||
"categories": {
|
||||
"addCategories": "Add category",
|
||||
"editCategories": "Rename category",
|
||||
"setCategories": "Set categories",
|
||||
"header": "Edit categories",
|
||||
"emptyMsg": "You have no categories. Tap the plus button to create one for organizing your library",
|
||||
"setModalEmptyMsg": "You have no categories. Tap the Edit button to create one for organizing your library",
|
||||
"addCategories": "Kategorie hinzufügen",
|
||||
"editCategories": "Kategorie umbenennen",
|
||||
"setCategories": "Kategorien festlegen",
|
||||
"header": "Kategorien bearbeiten",
|
||||
"emptyMsg": "Sie haben keine Kategorien. Tippen Sie auf die Plus-Schaltfläche, um eine für die Organisation Ihrer Bibliothek zu erstellen",
|
||||
"setModalEmptyMsg": "Sie haben keine Kategorien. Tippen Sie auf die Plus-Schaltfläche, um eine für die Organisation Ihrer Bibliothek zu erstellen",
|
||||
"deleteModal": {
|
||||
"header": "Delete category",
|
||||
"desc": "Do you wish to delete category"
|
||||
"header": "Kategorie löschen",
|
||||
"desc": "Möchten Sie diese Kategorie löschen?"
|
||||
},
|
||||
"duplicateError": "A category with this name already exists!",
|
||||
"defaultCategory": "Default category"
|
||||
"duplicateError": "Eine Kategorie mit diesem Namen existiert bereits!",
|
||||
"defaultCategory": "Standard-Kategorie"
|
||||
},
|
||||
"settings": {
|
||||
"icognitoMode": "Incognito mode",
|
||||
"downloadedOnly": "Downloaded only"
|
||||
"icognitoMode": "Inkognito-Modus",
|
||||
"downloadedOnly": "Nur Downloads"
|
||||
},
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"dbInfo": "Downloads werden in einer SQLite-Datenbank gespeichert.",
|
||||
"downloadChapters": "Heruntergeladene Kapitel",
|
||||
"noDownloads": "Keine Downloads",
|
||||
"downloadsLower": "Downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Total chapters",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Display mode",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Search updates",
|
||||
"lastUpdatedAt": "Library last updated:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "History",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,6 +98,7 @@
|
||||
"useChapterDrawerSwipeNavigation": "Swipe right to open drawer",
|
||||
"removeExtraSpacing": "Remove extra paragraph spacing",
|
||||
"volumeButtonsScroll": "Volume buttons scroll",
|
||||
"scrollAmount": "Scroll amount:",
|
||||
"showSwipeMargins": "Show swipe margins"
|
||||
},
|
||||
"drawer": {
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Capítulos totales",
|
||||
"download": "Descargado",
|
||||
"unread": "No leído",
|
||||
"lastRead": "Último leído"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Display mode",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Search updates",
|
||||
"lastUpdatedAt": "Library last updated:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "History",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Total chapters",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Display mode",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Search updates",
|
||||
"lastUpdatedAt": "Library last updated:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "History",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Nombre total de chapitres",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Mode d'affichage",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Rechercher des mises à jour",
|
||||
"lastUpdatedAt": "Dernière mise à jour de la bibliothèque :",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "Historique",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Total chapters",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Display mode",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Search updates",
|
||||
"lastUpdatedAt": "Library last updated:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "History",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Total chapters",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Display mode",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Search updates",
|
||||
"lastUpdatedAt": "Library last updated:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "History",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Total chapters",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Display mode",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Search updates",
|
||||
"lastUpdatedAt": "Library last updated:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "History",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Jumlah bab",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Mode tampilan",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Search updates",
|
||||
"lastUpdatedAt": "Library last updated:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "History",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,70 +3,72 @@
|
||||
"cancel": "Annulla",
|
||||
"ok": "Ok",
|
||||
"save": "Salva",
|
||||
"clear": "Clear",
|
||||
"clear": "Svuota",
|
||||
"reset": "Reset",
|
||||
"search": "Search",
|
||||
"install": "Install",
|
||||
"newUpdateAvailable": "New update available",
|
||||
"categories": "Categories",
|
||||
"add": "Add",
|
||||
"edit": "Edit",
|
||||
"name": "Name",
|
||||
"searchFor": "Search for",
|
||||
"globally": "globally",
|
||||
"searchResults": "Search results",
|
||||
"chapters": "Chapters",
|
||||
"submit": "Submit",
|
||||
"retry": "Retry"
|
||||
"search": "Cerca",
|
||||
"install": "Installa",
|
||||
"newUpdateAvailable": "Nuovo aggiornamento disponibile",
|
||||
"categories": "Categorie",
|
||||
"add": "Aggiungi",
|
||||
"edit": "Modifica",
|
||||
"name": "Nome",
|
||||
"searchFor": "Cerca per",
|
||||
"globally": "globale",
|
||||
"searchResults": "Risultati della ricerca",
|
||||
"chapters": "Capitoli",
|
||||
"submit": "Invia",
|
||||
"retry": "Riprova"
|
||||
},
|
||||
"library": "Library",
|
||||
"library": "Libreria",
|
||||
"libraryScreen": {
|
||||
"searchbar": "Search library",
|
||||
"empty": "Your library is empty. Add series to your library from Browse.",
|
||||
"searchbar": "Cerca nella libreria",
|
||||
"empty": "La tua libreria è vuota. Aggiungi delle serie alla tua libreria da Esplora.",
|
||||
"bottomSheet": {
|
||||
"filters": {
|
||||
"downloaded": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"completed": "Completed",
|
||||
"started": "Started"
|
||||
"downloaded": "Scaricati",
|
||||
"unread": "Non letti",
|
||||
"completed": "Completati",
|
||||
"started": "Iniziati"
|
||||
},
|
||||
"sortOrders": {
|
||||
"dateAdded": "Date added",
|
||||
"alphabetically": "Alphabetically",
|
||||
"totalChapters": "Total chapters",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"dateAdded": "Data d'inserimento",
|
||||
"alphabetically": "Ordine Alfabetico",
|
||||
"totalChapters": "Capitoli totali",
|
||||
"download": "Scaricati",
|
||||
"unread": "Non letti",
|
||||
"lastRead": "Ultima lettura",
|
||||
"lastUpdated": "Ultimo aggiornamento"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Display mode",
|
||||
"compact": "Compact grid",
|
||||
"comfortable": "Comfortable grid",
|
||||
"noTitle": "Cover only grid",
|
||||
"list": "List",
|
||||
"badges": "Badges",
|
||||
"downloadBadges": "Download badges",
|
||||
"unreadBadges": "Unread badges",
|
||||
"showNoOfItems": "Show number of items"
|
||||
"displayMode": "Modalità di visualizzazione",
|
||||
"compact": "Griglia compatta",
|
||||
"comfortable": "Griglia comoda",
|
||||
"noTitle": "Griglia solo copertina",
|
||||
"list": "Lista",
|
||||
"badges": "Badge",
|
||||
"downloadBadges": "Scarica il badge",
|
||||
"unreadBadges": "Badge non letti",
|
||||
"showNoOfItems": "Mostra il numero di elementi"
|
||||
}
|
||||
}
|
||||
},
|
||||
"updates": "Updates",
|
||||
"updates": "Aggiornamenti",
|
||||
"updatesScreen": {
|
||||
"searchbar": "Search updates",
|
||||
"lastUpdatedAt": "Library last updated:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"searchbar": "Cerca aggiornamenti",
|
||||
"lastUpdatedAt": "Aggiornamento Libreria:",
|
||||
"newChapters": "Nuovi capitoli",
|
||||
"emptyView": "Nessun aggiornamento recente",
|
||||
"updatesLower": "aggiornamenti"
|
||||
},
|
||||
"history": "History",
|
||||
"history": "Cronologia",
|
||||
"historyScreen": {
|
||||
"searchbar": "Search history",
|
||||
"clearHistorWarning": "Are you sure? All history will be lost."
|
||||
"searchbar": "Cerca nella cronologia",
|
||||
"clearHistorWarning": "Sei sicuro? Tutta la cronologia sarà persa."
|
||||
},
|
||||
"browse": "Browse",
|
||||
"browse": "Esplora",
|
||||
"browseScreen": {
|
||||
"discover": "Discover",
|
||||
"searchbar": "Search sources",
|
||||
"discover": "Scopri",
|
||||
"searchbar": "Cerca fonti",
|
||||
"globalSearch": "Global search",
|
||||
"listEmpty": "Enable languages from settings",
|
||||
"lastUsed": "Last used",
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "合計章数",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "表示モード",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "更新を検索",
|
||||
"lastUpdatedAt": "ライブラリの最終更新日",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "履歴",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Total chapters",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Display mode",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Search updates",
|
||||
"lastUpdatedAt": "Library last updated:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "History",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Totaal aantal hoofdstukken",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Weergavemodus",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Updates zoeken",
|
||||
"lastUpdatedAt": "Bibliotheek laatst bijgewerkt:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "Geschiedenis",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Total chapters",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Display mode",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Search updates",
|
||||
"lastUpdatedAt": "Library last updated:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "History",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Total chapters",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Display mode",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Search updates",
|
||||
"lastUpdatedAt": "Library last updated:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "History",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Total de capítulos",
|
||||
"download": "Baixado",
|
||||
"unread": "Não lido",
|
||||
"lastRead": "Última leitura"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Últimas atualizações"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Modo de exibição",
|
||||
@@ -55,8 +56,9 @@
|
||||
"updatesScreen": {
|
||||
"searchbar": "Procurar por atualizações",
|
||||
"lastUpdatedAt": "Biblioteca atualizada pela última vez:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"newChapters": "novo Capítulos",
|
||||
"emptyView": "Sem atualizações recentes",
|
||||
"updatesLower": "atualizações"
|
||||
},
|
||||
"history": "Histórico",
|
||||
"historyScreen": {
|
||||
@@ -228,8 +230,9 @@
|
||||
"downloadedOnly": "Apenas baixados"
|
||||
},
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"dbInfo": "Transferências são salvos em banco de dados SQLite.",
|
||||
"downloadChapters": "Capítulos baixados",
|
||||
"noDownloads": "Sem transferências",
|
||||
"downloadsLower": "baixados"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Total chapters",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Display mode",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Search updates",
|
||||
"lastUpdatedAt": "Library last updated:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "History",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Total chapters",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Display mode",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Search updates",
|
||||
"lastUpdatedAt": "Library last updated:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "History",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Всего глав",
|
||||
"download": "Загружено",
|
||||
"unread": "Непрочитанные",
|
||||
"lastRead": "Последнее прочитанное"
|
||||
"lastRead": "Последнее прочитанное",
|
||||
"lastUpdated": "Последнее обновление"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Режим отображения",
|
||||
@@ -55,8 +56,9 @@
|
||||
"updatesScreen": {
|
||||
"searchbar": "Поиск в обновлениях",
|
||||
"lastUpdatedAt": "Последнее обновление библиотеки:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"newChapters": "новые главы",
|
||||
"emptyView": "Нет последних обновлений",
|
||||
"updatesLower": "обновлено"
|
||||
},
|
||||
"history": "История",
|
||||
"historyScreen": {
|
||||
@@ -228,8 +230,9 @@
|
||||
"downloadedOnly": "Только загруженные главы"
|
||||
},
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"dbInfo": "Загрузки сохраняются в базе данных SQLite.",
|
||||
"downloadChapters": "загруженные главы",
|
||||
"noDownloads": "Ничего не загружено",
|
||||
"downloadsLower": "Загруженное"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Total chapters",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Display mode",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Search updates",
|
||||
"lastUpdatedAt": "Library last updated:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "History",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Total chapters",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Display mode",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Search updates",
|
||||
"lastUpdatedAt": "Library last updated:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "History",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Total chapters",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Display mode",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Search updates",
|
||||
"lastUpdatedAt": "Library last updated:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "History",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Toplam bölüm",
|
||||
"download": "İndirilenler",
|
||||
"unread": "Okunmamışlar",
|
||||
"lastRead": "Son Okunanlar"
|
||||
"lastRead": "Son okunma",
|
||||
"lastUpdated": "Son güncellenme"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Görüntüleme modu",
|
||||
@@ -55,8 +56,9 @@
|
||||
"updatesScreen": {
|
||||
"searchbar": "Güncellemelerde ara",
|
||||
"lastUpdatedAt": "Kitaplık son güncelleme:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"newChapters": "Yeni bölüm",
|
||||
"emptyView": "Güncelleme yok",
|
||||
"updatesLower": "güncellemeler"
|
||||
},
|
||||
"history": "Geçmiş",
|
||||
"historyScreen": {
|
||||
@@ -228,8 +230,9 @@
|
||||
"downloadedOnly": "Yalnızca indirilenler"
|
||||
},
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"dbInfo": "İndirilenler bir SQLite Veritabanında kaydedilmektedir.",
|
||||
"downloadChapters": "İndirilen bölümler",
|
||||
"noDownloads": "İndirme yok",
|
||||
"downloadsLower": "İndirilenler"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "За загальною кількістю розділів",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Режим відображення",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Пошук оновлень",
|
||||
"lastUpdatedAt": "Останнє оновлення бібліотеки:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "Історія",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "Toàn bộ chương",
|
||||
"download": "Đã tải xuống",
|
||||
"unread": "Chưa đọc",
|
||||
"lastRead": "Lần đọc cuối"
|
||||
"lastRead": "Lần đọc trước",
|
||||
"lastUpdated": "Lân cập nhật trước"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "Chế độ Hiển thị",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "Tìm kiếm bản cập nhật",
|
||||
"lastUpdatedAt": "Lần cập nhật thư viện gần nhất:",
|
||||
"newChapters": "chương mới",
|
||||
"emptyView": "Chưa cập nhật mới"
|
||||
"emptyView": "Chưa cập nhật mới",
|
||||
"updatesLower": "cập nhập"
|
||||
},
|
||||
"history": "Lịch sử",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Các chương tải về sẽ được lưu trong cơ sở dữ liệu SQLite.",
|
||||
"downloadChapters": "chương đã tải về",
|
||||
"noDownloads": "Không có tải xuống"
|
||||
"noDownloads": "Không có tải xuống",
|
||||
"downloadsLower": "tải xuống"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "章节总数",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "显示模式",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "搜索更新",
|
||||
"lastUpdatedAt": "最近更新的库:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "历史",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
"totalChapters": "章节总数",
|
||||
"download": "Downloaded",
|
||||
"unread": "Unread",
|
||||
"lastRead": "Last Read"
|
||||
"lastRead": "Last read",
|
||||
"lastUpdated": "Last updated"
|
||||
},
|
||||
"display": {
|
||||
"displayMode": "显示模式",
|
||||
@@ -56,7 +57,8 @@
|
||||
"searchbar": "搜索更新",
|
||||
"lastUpdatedAt": "最近更新的库:",
|
||||
"newChapters": "new Chapters",
|
||||
"emptyView": "No recent updates"
|
||||
"emptyView": "No recent updates",
|
||||
"updatesLower": "updates"
|
||||
},
|
||||
"history": "历史",
|
||||
"historyScreen": {
|
||||
@@ -230,6 +232,7 @@
|
||||
"downloadScreen": {
|
||||
"dbInfo": "Downloads are saved in a SQLite Database.",
|
||||
"downloadChapters": "downloaded Chapters",
|
||||
"noDownloads": "No downloads"
|
||||
"noDownloads": "No downloads",
|
||||
"downloadsLower": "downloads"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,6 +82,7 @@ export interface StringMap {
|
||||
'readerScreen.bottomSheet.useChapterDrawerSwipeNavigation': 'string';
|
||||
'readerScreen.bottomSheet.removeExtraSpacing': 'string';
|
||||
'readerScreen.bottomSheet.volumeButtonsScroll': 'string';
|
||||
'readerScreen.bottomSheet.scrollAmount': 'string';
|
||||
'readerScreen.bottomSheet.showSwipeMargins': 'string';
|
||||
'readerScreen.drawer.scrollToCurrentChapter': 'string';
|
||||
'readerScreen.drawer.scrollToTop': 'string';
|
||||
|
||||
Reference in New Issue
Block a user