mirror of
https://github.com/tachiyomiorg/tachiyomi.git
synced 2025-12-10 13:42:02 +01:00
Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8a8362203f | ||
|
|
f3336fc5c3 | ||
|
|
727289c8eb | ||
|
|
9c91ddd4e3 | ||
|
|
3ea026e311 | ||
|
|
36f307e3bb | ||
|
|
89678ebb17 | ||
|
|
80b7d14af1 | ||
|
|
bbd8098a61 | ||
|
|
f8ef0f143b |
2
.github/ISSUE_TEMPLATE.md
vendored
2
.github/ISSUE_TEMPLATE.md
vendored
@@ -3,7 +3,7 @@
|
||||
I acknowledge that:
|
||||
|
||||
- I have updated:
|
||||
- To the latest version of the app (stable is v0.15.0)
|
||||
- To the latest version of the app (stable is v0.15.1)
|
||||
- All extensions
|
||||
- I have gone through the FAQ (https://tachiyomi.org/docs/faq/general) and troubleshooting guide (https://tachiyomi.org/docs/guides/troubleshooting/)
|
||||
- If this is an issue with an extension, that I should be opening an issue in https://github.com/tachiyomiorg/tachiyomi-extensions
|
||||
|
||||
4
.github/ISSUE_TEMPLATE/report_issue.yml
vendored
4
.github/ISSUE_TEMPLATE/report_issue.yml
vendored
@@ -53,7 +53,7 @@ body:
|
||||
label: Tachiyomi version
|
||||
description: You can find your Tachiyomi version in **More → About**.
|
||||
placeholder: |
|
||||
Example: "0.15.0"
|
||||
Example: "0.15.1"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
@@ -98,7 +98,7 @@ body:
|
||||
required: true
|
||||
- label: I have gone through the [FAQ](https://tachiyomi.org/docs/faq/general) and [troubleshooting guide](https://tachiyomi.org/docs/guides/troubleshooting/).
|
||||
required: true
|
||||
- label: I have updated the app to version **[0.15.0](https://github.com/tachiyomiorg/tachiyomi/releases/latest)**.
|
||||
- label: I have updated the app to version **[0.15.1](https://github.com/tachiyomiorg/tachiyomi/releases/latest)**.
|
||||
required: true
|
||||
- label: I have updated all installed extensions.
|
||||
required: true
|
||||
|
||||
2
.github/ISSUE_TEMPLATE/request_feature.yml
vendored
2
.github/ISSUE_TEMPLATE/request_feature.yml
vendored
@@ -33,7 +33,7 @@ body:
|
||||
required: true
|
||||
- label: If this is an issue with an extension, I should be opening an issue in the [extensions repository](https://github.com/tachiyomiorg/tachiyomi-extensions/issues/new/choose).
|
||||
required: true
|
||||
- label: I have updated the app to version **[0.15.0](https://github.com/tachiyomiorg/tachiyomi/releases/latest)**.
|
||||
- label: I have updated the app to version **[0.15.1](https://github.com/tachiyomiorg/tachiyomi/releases/latest)**.
|
||||
required: true
|
||||
- label: I will fill out all of the requested information in this form.
|
||||
required: true
|
||||
|
||||
@@ -22,8 +22,8 @@ android {
|
||||
defaultConfig {
|
||||
applicationId = "eu.kanade.tachiyomi"
|
||||
|
||||
versionCode = 115
|
||||
versionName = "0.15.0"
|
||||
versionCode = 116
|
||||
versionName = "0.15.1"
|
||||
|
||||
buildConfigField("String", "COMMIT_COUNT", "\"${getCommitCount()}\"")
|
||||
buildConfigField("String", "COMMIT_SHA", "\"${getGitSha()}\"")
|
||||
|
||||
@@ -59,6 +59,33 @@
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data android:scheme="file" />
|
||||
<data android:scheme="content" />
|
||||
<data android:host="*" />
|
||||
<data android:mimeType="*/*" />
|
||||
|
||||
<!--
|
||||
Work around Android's ugly primitive PatternMatcher
|
||||
implementation that can't cope with finding a . early in
|
||||
the path unless it's explicitly matched.
|
||||
|
||||
See https://stackoverflow.com/a/31028507
|
||||
-->
|
||||
<data android:pathPattern=".*\\.tachibk" />
|
||||
<data android:pathPattern=".*\\..*\\.tachibk" />
|
||||
<data android:pathPattern=".*\\..*\\..*\\.tachibk" />
|
||||
<data android:pathPattern=".*\\..*\\..*\\..*\\.tachibk" />
|
||||
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.tachibk" />
|
||||
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.tachibk" />
|
||||
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\.tachibk" />
|
||||
</intent-filter>
|
||||
|
||||
<!--suppress AndroidDomInspection -->
|
||||
<meta-data
|
||||
android:name="android.app.shortcuts"
|
||||
|
||||
@@ -77,7 +77,7 @@ internal fun GlobalSearchContent(
|
||||
title = fromSourceId?.let {
|
||||
"▶ ${source.name}".takeIf { source.id == fromSourceId }
|
||||
} ?: source.name,
|
||||
subtitle = LocaleHelper.getDisplayName(source.lang),
|
||||
subtitle = LocaleHelper.getLocalizedDisplayName(source.lang),
|
||||
onClick = { onClickSource(source) },
|
||||
) {
|
||||
when (result) {
|
||||
|
||||
@@ -41,6 +41,7 @@ internal class GuidesStep(
|
||||
}
|
||||
|
||||
HorizontalDivider(
|
||||
modifier = Modifier.padding(vertical = 8.dp),
|
||||
color = MaterialTheme.colorScheme.onPrimaryContainer,
|
||||
)
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
@@ -14,6 +15,7 @@ import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalUriHandler
|
||||
import androidx.compose.ui.unit.dp
|
||||
import eu.kanade.presentation.more.settings.screen.SettingsDataScreen
|
||||
import eu.kanade.tachiyomi.util.system.toast
|
||||
@@ -38,6 +40,8 @@ internal class StorageStep : OnboardingStep {
|
||||
@Composable
|
||||
override fun Content() {
|
||||
val context = LocalContext.current
|
||||
val handler = LocalUriHandler.current
|
||||
|
||||
val pickStorageLocation = SettingsDataScreen.storageLocationPicker(storagePref)
|
||||
|
||||
Column(
|
||||
@@ -64,6 +68,19 @@ internal class StorageStep : OnboardingStep {
|
||||
) {
|
||||
Text(stringResource(MR.strings.onboarding_storage_action_select))
|
||||
}
|
||||
|
||||
HorizontalDivider(
|
||||
modifier = Modifier.padding(vertical = 8.dp),
|
||||
color = MaterialTheme.colorScheme.onPrimaryContainer,
|
||||
)
|
||||
|
||||
Text(stringResource(MR.strings.onboarding_storage_help_info, stringResource(MR.strings.app_name)))
|
||||
Button(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
onClick = { handler.openUri(SettingsDataScreen.HELP_URL) },
|
||||
) {
|
||||
Text(stringResource(MR.strings.onboarding_storage_help_action))
|
||||
}
|
||||
}
|
||||
|
||||
LaunchedEffect(Unit) {
|
||||
|
||||
@@ -1,34 +1,26 @@
|
||||
package eu.kanade.presentation.more.settings.screen
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.ReadOnlyComposable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.os.LocaleListCompat
|
||||
import cafe.adriel.voyager.navigator.LocalNavigator
|
||||
import cafe.adriel.voyager.navigator.currentOrThrow
|
||||
import eu.kanade.domain.ui.UiPreferences
|
||||
import eu.kanade.domain.ui.model.TabletUiMode
|
||||
import eu.kanade.domain.ui.model.ThemeMode
|
||||
import eu.kanade.domain.ui.model.setAppCompatDelegateThemeMode
|
||||
import eu.kanade.presentation.more.settings.Preference
|
||||
import eu.kanade.presentation.more.settings.screen.appearance.AppLanguageScreen
|
||||
import eu.kanade.presentation.more.settings.widget.AppThemeModePreferenceWidget
|
||||
import eu.kanade.presentation.more.settings.widget.AppThemePreferenceWidget
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
||||
import eu.kanade.tachiyomi.util.system.toast
|
||||
import kotlinx.collections.immutable.ImmutableMap
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
import kotlinx.collections.immutable.toImmutableMap
|
||||
import org.xmlpull.v1.XmlPullParser
|
||||
import tachiyomi.core.i18n.stringResource
|
||||
import tachiyomi.i18n.MR
|
||||
import tachiyomi.presentation.core.i18n.stringResource
|
||||
import tachiyomi.presentation.core.util.collectAsState
|
||||
@@ -107,11 +99,8 @@ object SettingsAppearanceScreen : SearchableSettings {
|
||||
uiPreferences: UiPreferences,
|
||||
): Preference.PreferenceGroup {
|
||||
val context = LocalContext.current
|
||||
val navigator = LocalNavigator.currentOrThrow
|
||||
|
||||
val langs = remember { getLangs(context) }
|
||||
var currentLanguage by remember {
|
||||
mutableStateOf(AppCompatDelegate.getApplicationLocales().get(0)?.toLanguageTag() ?: "")
|
||||
}
|
||||
val now = remember { Instant.now().toEpochMilli() }
|
||||
|
||||
val dateFormat by uiPreferences.dateFormat().collectAsState()
|
||||
@@ -119,26 +108,12 @@ object SettingsAppearanceScreen : SearchableSettings {
|
||||
UiPreferences.dateFormat(dateFormat).format(now)
|
||||
}
|
||||
|
||||
LaunchedEffect(currentLanguage) {
|
||||
val locale = if (currentLanguage.isEmpty()) {
|
||||
LocaleListCompat.getEmptyLocaleList()
|
||||
} else {
|
||||
LocaleListCompat.forLanguageTags(currentLanguage)
|
||||
}
|
||||
AppCompatDelegate.setApplicationLocales(locale)
|
||||
}
|
||||
|
||||
return Preference.PreferenceGroup(
|
||||
title = stringResource(MR.strings.pref_category_display),
|
||||
preferenceItems = persistentListOf(
|
||||
Preference.PreferenceItem.BasicListPreference(
|
||||
value = currentLanguage,
|
||||
Preference.PreferenceItem.TextPreference(
|
||||
title = stringResource(MR.strings.pref_app_language),
|
||||
entries = langs,
|
||||
onValueChanged = { newValue ->
|
||||
currentLanguage = newValue
|
||||
true
|
||||
},
|
||||
onClick = { navigator.push(AppLanguageScreen()) },
|
||||
),
|
||||
Preference.PreferenceItem.ListPreference(
|
||||
pref = uiPreferences.tabletUiMode(),
|
||||
@@ -173,30 +148,6 @@ object SettingsAppearanceScreen : SearchableSettings {
|
||||
),
|
||||
)
|
||||
}
|
||||
private fun getLangs(context: Context): ImmutableMap<String, String> {
|
||||
val langs = mutableListOf<Pair<String, String>>()
|
||||
val parser = context.resources.getXml(R.xml.locales_config)
|
||||
var eventType = parser.eventType
|
||||
while (eventType != XmlPullParser.END_DOCUMENT) {
|
||||
if (eventType == XmlPullParser.START_TAG && parser.name == "locale") {
|
||||
for (i in 0..<parser.attributeCount) {
|
||||
if (parser.getAttributeName(i) == "name") {
|
||||
val langTag = parser.getAttributeValue(i)
|
||||
val displayName = LocaleHelper.getDisplayName(langTag)
|
||||
if (displayName.isNotEmpty()) {
|
||||
langs.add(Pair(langTag, displayName))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
eventType = parser.next()
|
||||
}
|
||||
|
||||
langs.sortBy { it.second }
|
||||
langs.add(0, Pair("", context.stringResource(MR.strings.label_default)))
|
||||
|
||||
return langs.toMap().toImmutableMap()
|
||||
}
|
||||
}
|
||||
|
||||
private val DateFormats = listOf(
|
||||
|
||||
@@ -7,8 +7,13 @@ import android.net.Uri
|
||||
import androidx.activity.compose.ManagedActivityResultLauncher
|
||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.compose.foundation.layout.RowScope
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.outlined.HelpOutline
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MultiChoiceSegmentedButtonRow
|
||||
import androidx.compose.material3.SegmentedButton
|
||||
import androidx.compose.material3.SegmentedButtonDefaults
|
||||
@@ -22,6 +27,7 @@ import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalUriHandler
|
||||
import androidx.core.net.toUri
|
||||
import cafe.adriel.voyager.navigator.LocalNavigator
|
||||
import cafe.adriel.voyager.navigator.currentOrThrow
|
||||
@@ -58,11 +64,23 @@ import uy.kohesive.injekt.api.get
|
||||
object SettingsDataScreen : SearchableSettings {
|
||||
|
||||
val restorePreferenceKeyString = MR.strings.label_backup
|
||||
const val HELP_URL = "https://tachiyomi.org/docs/faq/storage"
|
||||
|
||||
@ReadOnlyComposable
|
||||
@Composable
|
||||
override fun getTitleRes() = MR.strings.label_data_storage
|
||||
|
||||
@Composable
|
||||
override fun RowScope.AppBarAction() {
|
||||
val uriHandler = LocalUriHandler.current
|
||||
IconButton(onClick = { uriHandler.openUri(HELP_URL) }) {
|
||||
Icon(
|
||||
imageVector = Icons.AutoMirrored.Outlined.HelpOutline,
|
||||
contentDescription = stringResource(MR.strings.tracking_guide),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
override fun getPreferences(): List<Preference> {
|
||||
val backupPreferences = Injekt.get<BackupPreferences>()
|
||||
|
||||
@@ -0,0 +1,127 @@
|
||||
package eu.kanade.presentation.more.settings.screen.appearance
|
||||
|
||||
import android.content.Context
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Check
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.ListItem
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.core.os.LocaleListCompat
|
||||
import cafe.adriel.voyager.navigator.LocalNavigator
|
||||
import cafe.adriel.voyager.navigator.currentOrThrow
|
||||
import eu.kanade.presentation.components.AppBar
|
||||
import eu.kanade.presentation.util.Screen
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import org.xmlpull.v1.XmlPullParser
|
||||
import tachiyomi.core.i18n.stringResource
|
||||
import tachiyomi.i18n.MR
|
||||
import tachiyomi.presentation.core.components.material.Scaffold
|
||||
import tachiyomi.presentation.core.i18n.stringResource
|
||||
|
||||
class AppLanguageScreen : Screen() {
|
||||
|
||||
@Composable
|
||||
override fun Content() {
|
||||
val context = LocalContext.current
|
||||
val navigator = LocalNavigator.currentOrThrow
|
||||
|
||||
val langs = remember { getLangs(context) }
|
||||
var currentLanguage by remember {
|
||||
mutableStateOf(AppCompatDelegate.getApplicationLocales().get(0)?.toLanguageTag() ?: "")
|
||||
}
|
||||
|
||||
LaunchedEffect(currentLanguage) {
|
||||
val locale = if (currentLanguage.isEmpty()) {
|
||||
LocaleListCompat.getEmptyLocaleList()
|
||||
} else {
|
||||
LocaleListCompat.forLanguageTags(currentLanguage)
|
||||
}
|
||||
AppCompatDelegate.setApplicationLocales(locale)
|
||||
}
|
||||
|
||||
Scaffold(
|
||||
topBar = { scrollBehavior ->
|
||||
AppBar(
|
||||
title = stringResource(MR.strings.pref_app_language),
|
||||
navigateUp = navigator::pop,
|
||||
scrollBehavior = scrollBehavior,
|
||||
)
|
||||
},
|
||||
) { contentPadding ->
|
||||
LazyColumn(
|
||||
modifier = Modifier.padding(contentPadding),
|
||||
) {
|
||||
items(langs) {
|
||||
ListItem(
|
||||
modifier = Modifier.clickable {
|
||||
currentLanguage = it.langTag
|
||||
},
|
||||
headlineContent = { Text(it.displayName) },
|
||||
supportingContent = {
|
||||
it.localizedDisplayName?.let {
|
||||
Text(it)
|
||||
}
|
||||
},
|
||||
trailingContent = {
|
||||
if (currentLanguage == it.langTag) {
|
||||
Icon(
|
||||
imageVector = Icons.Default.Check,
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.primary,
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getLangs(context: Context): ImmutableList<Language> {
|
||||
val langs = mutableListOf<Language>()
|
||||
val parser = context.resources.getXml(R.xml.locales_config)
|
||||
var eventType = parser.eventType
|
||||
while (eventType != XmlPullParser.END_DOCUMENT) {
|
||||
if (eventType == XmlPullParser.START_TAG && parser.name == "locale") {
|
||||
for (i in 0..<parser.attributeCount) {
|
||||
if (parser.getAttributeName(i) == "name") {
|
||||
val langTag = parser.getAttributeValue(i)
|
||||
val displayName = LocaleHelper.getLocalizedDisplayName(langTag)
|
||||
if (displayName.isNotEmpty()) {
|
||||
langs.add(Language(langTag, displayName, LocaleHelper.getDisplayName(langTag)))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
eventType = parser.next()
|
||||
}
|
||||
|
||||
langs.sortBy { it.displayName }
|
||||
langs.add(0, Language("", context.stringResource(MR.strings.label_default), null))
|
||||
|
||||
return langs.toImmutableList()
|
||||
}
|
||||
|
||||
private data class Language(
|
||||
val langTag: String,
|
||||
val displayName: String,
|
||||
val localizedDisplayName: String?,
|
||||
)
|
||||
}
|
||||
@@ -374,13 +374,6 @@ object Migrations {
|
||||
uiPreferences.relativeTime().set(false)
|
||||
}
|
||||
}
|
||||
if (oldVersion < 107) {
|
||||
replacePreferences(
|
||||
preferenceStore = preferenceStore,
|
||||
filterPredicate = { it.key.startsWith("pref_mangasync_") || it.key.startsWith("track_token_") },
|
||||
newKey = { Preference.privateKey(it) },
|
||||
)
|
||||
}
|
||||
if (oldVersion < 113) {
|
||||
val prefsToReplace = listOf(
|
||||
"pref_download_only",
|
||||
@@ -407,9 +400,16 @@ object Migrations {
|
||||
}
|
||||
if (oldVersion < 114) {
|
||||
sourcePreferences.extensionRepos().getAndSet {
|
||||
it.map { "https://raw.githubusercontent.com/$it/repo" }.toSet()
|
||||
it.map { repo -> "https://raw.githubusercontent.com/$repo/repo" }.toSet()
|
||||
}
|
||||
}
|
||||
if (oldVersion < 116) {
|
||||
replacePreferences(
|
||||
preferenceStore = preferenceStore,
|
||||
filterPredicate = { it.key.startsWith("pref_mangasync_") || it.key.startsWith("track_token_") },
|
||||
newKey = { Preference.privateKey(it) },
|
||||
)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
@@ -56,6 +56,7 @@ import eu.kanade.presentation.components.AppStateBanners
|
||||
import eu.kanade.presentation.components.DownloadedOnlyBannerBackgroundColor
|
||||
import eu.kanade.presentation.components.IncognitoModeBannerBackgroundColor
|
||||
import eu.kanade.presentation.components.IndexingBannerBackgroundColor
|
||||
import eu.kanade.presentation.more.settings.screen.data.RestoreBackupScreen
|
||||
import eu.kanade.presentation.util.AssistContentScreen
|
||||
import eu.kanade.presentation.util.DefaultNavigatorScreenTransition
|
||||
import eu.kanade.tachiyomi.BuildConfig
|
||||
@@ -444,6 +445,13 @@ class MainActivity : BaseActivity() {
|
||||
}
|
||||
null
|
||||
}
|
||||
Intent.ACTION_VIEW -> {
|
||||
if (intent.data.toString().endsWith(".tachibk")) {
|
||||
navigator.popUntilRoot()
|
||||
navigator.push(RestoreBackupScreen(intent.data.toString()))
|
||||
}
|
||||
null
|
||||
}
|
||||
else -> return false
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ import java.io.File
|
||||
import java.io.InputStream
|
||||
import java.io.PipedInputStream
|
||||
import java.io.PipedOutputStream
|
||||
import java.util.concurrent.Executors
|
||||
|
||||
/**
|
||||
* Loader used to load a chapter from a .rar or .cbr file.
|
||||
@@ -20,13 +21,18 @@ internal class RarPageLoader(file: File) : PageLoader() {
|
||||
|
||||
override var isLocal: Boolean = true
|
||||
|
||||
/**
|
||||
* Pool for copying compressed files to an input stream.
|
||||
*/
|
||||
private val pool = Executors.newFixedThreadPool(1)
|
||||
|
||||
override suspend fun getPages(): List<ReaderPage> {
|
||||
return rar.fileHeaders.asSequence()
|
||||
.filter { !it.isDirectory && ImageUtil.isImage(it.fileName) { rar.getInputStream(it) } }
|
||||
.sortedWith { f1, f2 -> f1.fileName.compareToCaseInsensitiveNaturalOrder(f2.fileName) }
|
||||
.mapIndexed { i, header ->
|
||||
ReaderPage(i).apply {
|
||||
stream = { getStream(rar, header) }
|
||||
stream = { getStream(header) }
|
||||
status = Page.State.READY
|
||||
}
|
||||
}
|
||||
@@ -40,15 +46,16 @@ internal class RarPageLoader(file: File) : PageLoader() {
|
||||
override fun recycle() {
|
||||
super.recycle()
|
||||
rar.close()
|
||||
pool.shutdown()
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an input stream for the given [header].
|
||||
*/
|
||||
private fun getStream(rar: Archive, header: FileHeader): InputStream {
|
||||
private fun getStream(header: FileHeader): InputStream {
|
||||
val pipeIn = PipedInputStream()
|
||||
val pipeOut = PipedOutputStream(pipeIn)
|
||||
synchronized(this) {
|
||||
pool.execute {
|
||||
try {
|
||||
pipeOut.use {
|
||||
rar.extractFile(header, it)
|
||||
|
||||
@@ -17,10 +17,12 @@ import kotlinx.coroutines.MainScope
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.supervisorScope
|
||||
import logcat.LogPriority
|
||||
import tachiyomi.core.util.lang.launchIO
|
||||
import tachiyomi.core.util.lang.withIOContext
|
||||
import tachiyomi.core.util.lang.withUIContext
|
||||
import tachiyomi.core.util.system.ImageUtil
|
||||
import tachiyomi.core.util.system.logcat
|
||||
import java.io.BufferedInputStream
|
||||
import java.io.ByteArrayInputStream
|
||||
import java.io.InputStream
|
||||
@@ -136,40 +138,47 @@ class PagerPageHolder(
|
||||
|
||||
val streamFn = page.stream ?: return
|
||||
|
||||
val (bais, isAnimated, background) = withIOContext {
|
||||
streamFn().buffered(16).use { stream ->
|
||||
process(item, stream).use { itemStream ->
|
||||
val bais = ByteArrayInputStream(itemStream.readBytes())
|
||||
val isAnimated = ImageUtil.isAnimatedAndSupported(bais)
|
||||
bais.reset()
|
||||
val background = if (!isAnimated && viewer.config.automaticBackground) {
|
||||
ImageUtil.chooseBackground(context, bais)
|
||||
} else {
|
||||
null
|
||||
try {
|
||||
val (bais, isAnimated, background) = withIOContext {
|
||||
streamFn().buffered(16).use { stream ->
|
||||
process(item, stream).use { itemStream ->
|
||||
val bais = ByteArrayInputStream(itemStream.readBytes())
|
||||
val isAnimated = ImageUtil.isAnimatedAndSupported(bais)
|
||||
bais.reset()
|
||||
val background = if (!isAnimated && viewer.config.automaticBackground) {
|
||||
ImageUtil.chooseBackground(context, bais)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
bais.reset()
|
||||
Triple(bais, isAnimated, background)
|
||||
}
|
||||
bais.reset()
|
||||
Triple(bais, isAnimated, background)
|
||||
}
|
||||
}
|
||||
}
|
||||
withUIContext {
|
||||
bais.use {
|
||||
setImage(
|
||||
it,
|
||||
isAnimated,
|
||||
Config(
|
||||
zoomDuration = viewer.config.doubleTapAnimDuration,
|
||||
minimumScaleType = viewer.config.imageScaleType,
|
||||
cropBorders = viewer.config.imageCropBorders,
|
||||
zoomStartPosition = viewer.config.imageZoomType,
|
||||
landscapeZoom = viewer.config.landscapeZoom,
|
||||
),
|
||||
)
|
||||
if (!isAnimated) {
|
||||
pageBackground = background
|
||||
withUIContext {
|
||||
bais.use {
|
||||
setImage(
|
||||
it,
|
||||
isAnimated,
|
||||
Config(
|
||||
zoomDuration = viewer.config.doubleTapAnimDuration,
|
||||
minimumScaleType = viewer.config.imageScaleType,
|
||||
cropBorders = viewer.config.imageCropBorders,
|
||||
zoomStartPosition = viewer.config.imageZoomType,
|
||||
landscapeZoom = viewer.config.landscapeZoom,
|
||||
),
|
||||
)
|
||||
if (!isAnimated) {
|
||||
pageBackground = background
|
||||
}
|
||||
}
|
||||
removeErrorLayout()
|
||||
}
|
||||
} catch (e: Throwable) {
|
||||
logcat(LogPriority.ERROR, e)
|
||||
withUIContext {
|
||||
setError()
|
||||
}
|
||||
removeErrorLayout()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -235,7 +244,7 @@ class PagerPageHolder(
|
||||
*/
|
||||
private fun setError() {
|
||||
progressIndicator.hide()
|
||||
showErrorLayout(withOpenInWebView = false)
|
||||
showErrorLayout()
|
||||
}
|
||||
|
||||
override fun onImageLoaded() {
|
||||
@@ -248,8 +257,7 @@ class PagerPageHolder(
|
||||
*/
|
||||
override fun onImageLoadError() {
|
||||
super.onImageLoadError()
|
||||
progressIndicator.hide()
|
||||
showErrorLayout(withOpenInWebView = true)
|
||||
setError()
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -260,23 +268,27 @@ class PagerPageHolder(
|
||||
viewer.activity.hideMenu()
|
||||
}
|
||||
|
||||
private fun showErrorLayout(withOpenInWebView: Boolean): ReaderErrorBinding {
|
||||
private fun showErrorLayout(): ReaderErrorBinding {
|
||||
if (errorLayout == null) {
|
||||
errorLayout = ReaderErrorBinding.inflate(LayoutInflater.from(context), this, true)
|
||||
errorLayout?.actionRetry?.viewer = viewer
|
||||
errorLayout?.actionRetry?.setOnClickListener {
|
||||
page.chapter.pageLoader?.retryPage(page)
|
||||
}
|
||||
val imageUrl = page.imageUrl
|
||||
if (imageUrl.orEmpty().startsWith("http", true)) {
|
||||
}
|
||||
|
||||
val imageUrl = page.imageUrl
|
||||
errorLayout?.actionOpenInWebView?.isVisible = imageUrl != null
|
||||
if (imageUrl != null) {
|
||||
if (imageUrl.startsWith("http", true)) {
|
||||
errorLayout?.actionOpenInWebView?.viewer = viewer
|
||||
errorLayout?.actionOpenInWebView?.setOnClickListener {
|
||||
val intent = WebViewActivity.newIntent(context, imageUrl!!)
|
||||
val intent = WebViewActivity.newIntent(context, imageUrl)
|
||||
context.startActivity(intent)
|
||||
}
|
||||
}
|
||||
}
|
||||
errorLayout?.actionOpenInWebView?.isVisible = withOpenInWebView
|
||||
|
||||
errorLayout?.root?.isVisible = true
|
||||
return errorLayout!!
|
||||
}
|
||||
|
||||
@@ -23,10 +23,12 @@ import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.supervisorScope
|
||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||
import logcat.LogPriority
|
||||
import tachiyomi.core.util.lang.launchIO
|
||||
import tachiyomi.core.util.lang.withIOContext
|
||||
import tachiyomi.core.util.lang.withUIContext
|
||||
import tachiyomi.core.util.system.ImageUtil
|
||||
import tachiyomi.core.util.system.logcat
|
||||
import java.io.BufferedInputStream
|
||||
import java.io.InputStream
|
||||
|
||||
@@ -80,7 +82,7 @@ class WebtoonPageHolder(
|
||||
refreshLayoutParams()
|
||||
|
||||
frame.onImageLoaded = { onImageDecoded() }
|
||||
frame.onImageLoadError = { onImageDecodeError() }
|
||||
frame.onImageLoadError = { setError() }
|
||||
frame.onScaleChanged = { viewer.activity.hideMenu() }
|
||||
}
|
||||
|
||||
@@ -184,28 +186,35 @@ class WebtoonPageHolder(
|
||||
|
||||
val streamFn = page?.stream ?: return
|
||||
|
||||
val (openStream, isAnimated) = withIOContext {
|
||||
val stream = streamFn().buffered(16)
|
||||
val openStream = process(stream)
|
||||
try {
|
||||
val (openStream, isAnimated) = withIOContext {
|
||||
val stream = streamFn().buffered(16)
|
||||
val openStream = process(stream)
|
||||
|
||||
val isAnimated = ImageUtil.isAnimatedAndSupported(stream)
|
||||
Pair(openStream, isAnimated)
|
||||
}
|
||||
withUIContext {
|
||||
frame.setImage(
|
||||
openStream,
|
||||
isAnimated,
|
||||
ReaderPageImageView.Config(
|
||||
zoomDuration = viewer.config.doubleTapAnimDuration,
|
||||
minimumScaleType = SubsamplingScaleImageView.SCALE_TYPE_FIT_WIDTH,
|
||||
cropBorders = viewer.config.imageCropBorders,
|
||||
),
|
||||
)
|
||||
removeErrorLayout()
|
||||
}
|
||||
// Suspend the coroutine to close the input stream only when the WebtoonPageHolder is recycled
|
||||
suspendCancellableCoroutine<Nothing> { continuation ->
|
||||
continuation.invokeOnCancellation { openStream.close() }
|
||||
val isAnimated = ImageUtil.isAnimatedAndSupported(stream)
|
||||
Pair(openStream, isAnimated)
|
||||
}
|
||||
withUIContext {
|
||||
frame.setImage(
|
||||
openStream,
|
||||
isAnimated,
|
||||
ReaderPageImageView.Config(
|
||||
zoomDuration = viewer.config.doubleTapAnimDuration,
|
||||
minimumScaleType = SubsamplingScaleImageView.SCALE_TYPE_FIT_WIDTH,
|
||||
cropBorders = viewer.config.imageCropBorders,
|
||||
),
|
||||
)
|
||||
removeErrorLayout()
|
||||
}
|
||||
// Suspend the coroutine to close the input stream only when the WebtoonPageHolder is recycled
|
||||
suspendCancellableCoroutine<Nothing> { continuation ->
|
||||
continuation.invokeOnCancellation { openStream.close() }
|
||||
}
|
||||
} catch (e: Throwable) {
|
||||
logcat(LogPriority.ERROR, e)
|
||||
withUIContext {
|
||||
setError()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -240,7 +249,7 @@ class WebtoonPageHolder(
|
||||
*/
|
||||
private fun setError() {
|
||||
progressContainer.isVisible = false
|
||||
initErrorLayout(withOpenInWebView = false)
|
||||
initErrorLayout()
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -251,14 +260,6 @@ class WebtoonPageHolder(
|
||||
removeErrorLayout()
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the image fails to decode.
|
||||
*/
|
||||
private fun onImageDecodeError() {
|
||||
progressContainer.isVisible = false
|
||||
initErrorLayout(withOpenInWebView = true)
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new progress bar.
|
||||
*/
|
||||
@@ -278,22 +279,26 @@ class WebtoonPageHolder(
|
||||
/**
|
||||
* Initializes a button to retry pages.
|
||||
*/
|
||||
private fun initErrorLayout(withOpenInWebView: Boolean): ReaderErrorBinding {
|
||||
private fun initErrorLayout(): ReaderErrorBinding {
|
||||
if (errorLayout == null) {
|
||||
errorLayout = ReaderErrorBinding.inflate(LayoutInflater.from(context), frame, true)
|
||||
errorLayout?.root?.layoutParams = FrameLayout.LayoutParams(MATCH_PARENT, (parentHeight * 0.8).toInt())
|
||||
errorLayout?.actionRetry?.setOnClickListener {
|
||||
page?.let { it.chapter.pageLoader?.retryPage(it) }
|
||||
}
|
||||
val imageUrl = page?.imageUrl
|
||||
if (imageUrl.orEmpty().startsWith("http", true)) {
|
||||
}
|
||||
|
||||
val imageUrl = page?.imageUrl
|
||||
errorLayout?.actionOpenInWebView?.isVisible = imageUrl != null
|
||||
if (imageUrl != null) {
|
||||
if (imageUrl.startsWith("http", true)) {
|
||||
errorLayout?.actionOpenInWebView?.setOnClickListener {
|
||||
val intent = WebViewActivity.newIntent(context, imageUrl!!)
|
||||
val intent = WebViewActivity.newIntent(context, imageUrl)
|
||||
context.startActivity(intent)
|
||||
}
|
||||
}
|
||||
}
|
||||
errorLayout?.actionOpenInWebView?.isVisible = withOpenInWebView
|
||||
|
||||
return errorLayout!!
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ object LocaleHelper {
|
||||
} else if (b == "all") {
|
||||
1
|
||||
} else {
|
||||
getDisplayName(a).compareTo(getDisplayName(b))
|
||||
getLocalizedDisplayName(a).compareTo(getLocalizedDisplayName(b))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,16 +34,26 @@ object LocaleHelper {
|
||||
SourcesScreenModel.PINNED_KEY -> context.stringResource(MR.strings.pinned_sources)
|
||||
"other" -> context.stringResource(MR.strings.other_source)
|
||||
"all" -> context.stringResource(MR.strings.multi_lang)
|
||||
else -> getDisplayName(lang)
|
||||
else -> getLocalizedDisplayName(lang)
|
||||
}
|
||||
}
|
||||
|
||||
fun getDisplayName(lang: String): String {
|
||||
val normalizedLang = when (lang) {
|
||||
"zh-CN" -> "zh-Hans"
|
||||
"zh-TW" -> "zh-Hant"
|
||||
else -> lang
|
||||
}
|
||||
|
||||
return Locale.forLanguageTag(normalizedLang).displayName
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns display name of a string language code.
|
||||
*
|
||||
* @param lang empty for system language
|
||||
*/
|
||||
fun getDisplayName(lang: String?): String {
|
||||
fun getLocalizedDisplayName(lang: String?): String {
|
||||
if (lang == null) {
|
||||
return ""
|
||||
}
|
||||
|
||||
@@ -182,6 +182,8 @@
|
||||
<string name="onboarding_storage_info">Select a folder where %1$s will store chapter downloads, backups, and more.\n\nA dedicated folder is recommended.\n\nSelected folder: %2$s</string>
|
||||
<string name="onboarding_storage_action_select">Select a folder</string>
|
||||
<string name="onboarding_storage_selection_required">A folder must be selected</string>
|
||||
<string name="onboarding_storage_help_info">Updating from an older version and not sure what to select? Refer to the storage guide for more information.</string>
|
||||
<string name="onboarding_storage_help_action">Storage guide</string>
|
||||
<string name="onboarding_permission_install_apps">Install apps permission</string>
|
||||
<string name="onboarding_permission_install_apps_description">To install source extensions.</string>
|
||||
<string name="onboarding_permission_notifications">Notification permission</string>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<string name="label_backup">Copia de seguridad y restauración</string>
|
||||
<string name="action_settings">Ajustes</string>
|
||||
<string name="action_filter">Filtrar</string>
|
||||
<string name="action_filter_unread">Sin leer</string>
|
||||
<string name="action_filter_unread">Con capítulos sin leer</string>
|
||||
<string name="action_filter_empty">Quitar filtro</string>
|
||||
<string name="action_search">Buscar</string>
|
||||
<string name="action_select_all">Seleccionar todo</string>
|
||||
@@ -54,7 +54,7 @@
|
||||
<string name="update_48hour">Cada 2 días</string>
|
||||
<string name="pref_library_update_restriction">Restricciones de actualización automática del dispositivo</string>
|
||||
<string name="charging">Mientras se carga la batería</string>
|
||||
<string name="pref_update_only_non_completed">Omitir entradas marcadas como \"Completado\"</string>
|
||||
<string name="pref_update_only_non_completed">Saltarse títulos cuya publicación haya concluido</string>
|
||||
<string name="pref_auto_update_manga_sync">Actualizar progreso al terminar un capítulo</string>
|
||||
<string name="pref_fullscreen">Pantalla completa</string>
|
||||
<string name="pref_page_transitions">Transiciones de página animadas</string>
|
||||
@@ -98,8 +98,8 @@
|
||||
<string name="cookies_cleared">Cookies borradas</string>
|
||||
<string name="pref_clear_database">Borrar la base de datos</string>
|
||||
<string name="pref_clear_database_summary">Borrar el historial de los elementos que no estén guardados en tu biblioteca</string>
|
||||
<string name="clear_database_confirmation">¿Está seguro\? Se perderán los capítulos leídos y el progreso de las entradas que no pertenezcan a la biblioteca</string>
|
||||
<string name="clear_database_completed">Entradas eliminadas</string>
|
||||
<string name="clear_database_confirmation">¿Seguro? Perderás los capítulos leídos y el progreso de los títulos que no pertenezcan a la biblioteca</string>
|
||||
<string name="clear_database_completed">Elementos borrados</string>
|
||||
<string name="version">Versión</string>
|
||||
<string name="pref_enable_acra">Enviar informes de fallos</string>
|
||||
<string name="pref_acra_summary">Ayuda a corregir cualquier error. No se enviará ninguna información personal</string>
|
||||
@@ -126,7 +126,7 @@
|
||||
<string name="download_unread">Sin leer</string>
|
||||
<string name="confirm_delete_chapters">¿Seguro que quieres eliminar los capítulos seleccionados\?</string>
|
||||
<string name="reading">Leyendo</string>
|
||||
<string name="completed">Completado</string>
|
||||
<string name="completed">Concluido</string>
|
||||
<string name="dropped">Abandonado</string>
|
||||
<string name="on_hold">En espera</string>
|
||||
<string name="plan_to_read">Para leer luego</string>
|
||||
@@ -141,7 +141,7 @@
|
||||
<string name="decode_image_error">No se pudo cargar la imagen</string>
|
||||
<string name="download_queue_error">No se pudieron descargar los capítulos. Puedes volver a intentarlo en la sección de descargas</string>
|
||||
<string name="notification_new_chapters">Nuevos capítulos encontrados</string>
|
||||
<string name="notification_first_add_to_library">Primero tienes que añadir el manga a tu biblioteca</string>
|
||||
<string name="notification_first_add_to_library">Primero tienes que añadir el título a tu biblioteca</string>
|
||||
<string name="file_select_cover">Elige una imagen de portada</string>
|
||||
<string name="file_select_backup">Elige una copia de respaldo</string>
|
||||
<string name="update_check_confirm">Descargar</string>
|
||||
@@ -158,7 +158,7 @@
|
||||
<string name="download_notifier_unknown_error">No se ha podido descargar el capítulo debido a un error inesperado</string>
|
||||
<string name="download_notifier_text_only_wifi">No estás conectado a ninguna red Wi-Fi</string>
|
||||
<string name="categories">Categorías</string>
|
||||
<string name="manga">Entradas en la biblioteca</string>
|
||||
<string name="manga">Títulos en la biblioteca</string>
|
||||
<string name="track">Seguimiento</string>
|
||||
<string name="history">Historial</string>
|
||||
<string name="action_filter_bookmarked">Favoritos</string>
|
||||
@@ -211,7 +211,7 @@
|
||||
<string name="creating_backup">Creando copia de seguridad</string>
|
||||
<string name="no_more_results">No hay más resultados</string>
|
||||
<string name="local_source">Fuente local</string>
|
||||
<string name="delete_downloads_for_manga">¿Eliminar los capítulos descargados\?</string>
|
||||
<string name="delete_downloads_for_manga">¿Quieres borrar los capítulos descargados?</string>
|
||||
<string name="chapter_paused">Pausado</string>
|
||||
<string name="manga_tracking_tab">Seguimiento</string>
|
||||
<string name="error_category_exists">¡Ya existe una categoría con este nombre!</string>
|
||||
@@ -240,7 +240,7 @@
|
||||
<string name="ext_downloading">Descargando</string>
|
||||
<string name="ext_installing">Instalando</string>
|
||||
<string name="ext_installed">Instalado</string>
|
||||
<string name="ext_trust">Confiable</string>
|
||||
<string name="ext_trust">Confiar</string>
|
||||
<string name="ext_untrusted">No confiable</string>
|
||||
<string name="ext_uninstall">Desinstalar</string>
|
||||
<string name="untrusted_extension">Extensión no confiable</string>
|
||||
@@ -252,11 +252,11 @@
|
||||
<string name="transition_no_previous">No hay ningún capítulo anterior</string>
|
||||
<string name="migrate">Migrar</string>
|
||||
<string name="copy">Copiar</string>
|
||||
<string name="untrusted_extension_message">Esta extensión fue firmada por un autor desconocido y no fue cargada.
|
||||
<string name="untrusted_extension_message">Esta extensión tiene una firma de un autor desconocido y no se ha podido cargar.
|
||||
\n
|
||||
\nLas extensiones maliciosas pueden leer cualquier credencial de inicio de sesión almacenada o ejecutar código arbitrario.
|
||||
\nUna extensión maliciosa puede leer credenciales de inicio guardadas o ejecutar cualquier tipo de código en tu dispositivo.
|
||||
\n
|
||||
\nAl confiar en el certificado de esta extensión, aceptas estos riesgos.</string>
|
||||
\nAl confiar en este certificado aceptas estos riesgos.</string>
|
||||
<string name="double_tap_anim_speed_0">Sin animación</string>
|
||||
<string name="manga_added_library">Añadido a biblioteca</string>
|
||||
<string name="manga_removed_library">Quitado de biblioteca</string>
|
||||
@@ -302,9 +302,9 @@
|
||||
<string name="action_sort_latest_chapter">Por capítulo más reciente</string>
|
||||
<string name="action_view_chapters">Ver capítulos</string>
|
||||
<string name="action_cancel_all">Cancelar todo</string>
|
||||
<string name="theme_light">Colores claros</string>
|
||||
<string name="theme_dark">Colores oscuros</string>
|
||||
<string name="theme_system">Colores del sistema</string>
|
||||
<string name="theme_light">Claros</string>
|
||||
<string name="theme_dark">Oscuros</string>
|
||||
<string name="theme_system">Del sistema</string>
|
||||
<string name="pref_manage_notifications">Gestionar notificaciones</string>
|
||||
<string name="pref_category_security">Seguridad y privacidad</string>
|
||||
<string name="lock_with_biometrics">Desbloqueo biométrico</string>
|
||||
@@ -376,7 +376,7 @@
|
||||
<string name="label_data">Datos</string>
|
||||
<string name="backup_restore_missing_sources">Fuentes que faltan:</string>
|
||||
<string name="invalid_backup_file_missing_manga">La copia de seguridad no contiene ningun elemento; la biblioteca está vacía.</string>
|
||||
<string name="invalid_backup_file">El archivo de copia de seguridad es inválido:</string>
|
||||
<string name="invalid_backup_file">El archivo de copia de seguridad no parece estar bien:</string>
|
||||
<string name="pref_library_update_refresh_metadata_summary">Comprueba si hay una nueva portada, información y descripción al actualizar la biblioteca</string>
|
||||
<string name="pref_library_update_refresh_metadata">Actualizar automáticamente los metadatos</string>
|
||||
<string name="action_display_comfortable_grid">Cuadrícula amplia</string>
|
||||
@@ -405,7 +405,7 @@
|
||||
<string name="download_insufficient_space">No se pudo descargar ningún capítulo, queda muy poco espacio</string>
|
||||
<string name="action_global_search_query">Buscar por «%1$s» en todas las fuentes</string>
|
||||
<string name="pref_category_reading_mode">Modo de lectura</string>
|
||||
<string name="pref_category_theme">Tema de colores</string>
|
||||
<string name="pref_category_theme">Esquema de colores</string>
|
||||
<string name="action_sort_date_added">Por fecha en la biblioteca</string>
|
||||
<string name="no_pinned_sources">Todavía no has anclado ninguna fuente</string>
|
||||
<string name="channel_complete">Terminadas</string>
|
||||
@@ -554,22 +554,22 @@
|
||||
<string name="channel_app_updates">Actualizaciones de la aplicación</string>
|
||||
<string name="pref_auto_clear_chapter_cache">Limpiar la caché de capítulos al abrir la aplicación</string>
|
||||
<string name="database_clean">Base de datos limpia</string>
|
||||
<string name="clear_database_source_item_count">%1$d entradas que no pertenecen a la biblioteca en la base de datos</string>
|
||||
<string name="clear_database_source_item_count">%1$d títulos que no pertenecen a la biblioteca en la base de datos</string>
|
||||
<string name="extension_api_error">No se pudo descargar el listado de extensiones</string>
|
||||
<string name="privacy_policy">Política de privacidad</string>
|
||||
<string name="pref_update_only_completely_read">Omitir entradas con capítulos no leídos</string>
|
||||
<string name="pref_update_only_completely_read">Saltarse títulos con capítulos por leer</string>
|
||||
<string name="library_errors_help">Si necesitas ayuda para resolver los errores de actualización de la biblioteca mira en %1$s</string>
|
||||
<string name="save_chapter_as_cbz">Guardar como archivo CBZ</string>
|
||||
<string name="on_hiatus">En pausa</string>
|
||||
<string name="publishing_finished">Serie terminada</string>
|
||||
<string name="publishing_finished">Publicación finalizada</string>
|
||||
<string name="cancelled">Cancelada</string>
|
||||
<string name="action_show_manga">Mostrar el elemento</string>
|
||||
<string name="pref_navigate_pan">Desplazarse por el resto de la página antes de cambiar</string>
|
||||
<string name="action_display_cover_only_grid">Cuadrícula sólo de portadas</string>
|
||||
<string name="pref_landscape_zoom">Acercar la vista en horizontal</string>
|
||||
<string name="pref_update_only_started">Omitir entradas sin lectura iniciada</string>
|
||||
<string name="pref_update_only_started">Saltarse títulos sin empezar</string>
|
||||
<string name="skipped_reason_completed">Omitido, ya que su publicación ha terminado</string>
|
||||
<string name="skipped_reason_not_caught_up">Omitido porque hay capítulos sin leer</string>
|
||||
<string name="skipped_reason_not_caught_up">Omitido porque todavía hay capítulos sin leer</string>
|
||||
<string name="skipped_reason_not_started">Omitido porque no hay capítulos leídos</string>
|
||||
<string name="learn_more">Ver más detalles</string>
|
||||
<string name="notification_update_error">Actualizaciones fallidas: %1$d</string>
|
||||
@@ -600,7 +600,7 @@
|
||||
<string name="ext_info_age_rating">Clasificación por edades</string>
|
||||
<string name="reading_list">Leyendo</string>
|
||||
<string name="wish_list">A leer en un futuro</string>
|
||||
<string name="complete_list">Manga terminado</string>
|
||||
<string name="complete_list">Leídos del todo</string>
|
||||
<string name="on_hold_list">En pausa</string>
|
||||
<string name="unfinished_list">Sin terminar</string>
|
||||
<string name="network_not_metered">Solo en conexiones no medidas</string>
|
||||
@@ -613,15 +613,15 @@
|
||||
<string name="delete_category">Borrar categoría</string>
|
||||
<string name="delete_category_confirmation">¿Quieres borrar la categoría «%s»\?</string>
|
||||
<string name="internal_error">ErrorInterno: Mira el registro de depuración para más información</string>
|
||||
<string name="pref_user_agent_string">User agent predeterminado</string>
|
||||
<string name="pref_reset_user_agent_string">Restablecer user agent predeterminado</string>
|
||||
<string name="pref_user_agent_string">Identificarse como otro navegador web («user agent»)</string>
|
||||
<string name="pref_reset_user_agent_string">Volver a la identificación de navegador («user agent») original</string>
|
||||
<string name="action_remove_everything">Quitar todo</string>
|
||||
<string name="loader_rar5_error">La app no soporta el formato RARv5</string>
|
||||
<string name="appwidget_updates_description">Aquí aparecerá el contenido más reciente de tu biblioteca</string>
|
||||
<string name="appwidget_unavailable_locked">El widget no está disponible cuando el bloqueo de aplicación está activo</string>
|
||||
<string name="update_already_running">Ya se está actualizando</string>
|
||||
<string name="theme_tidalwave">Marea</string>
|
||||
<string name="error_user_agent_string_blank">El valor del user agent no puede estar en blanco</string>
|
||||
<string name="error_user_agent_string_blank">La cadena con el agente de usuario («user agent») no puede estar vacía</string>
|
||||
<string name="download_ahead_info">Solo funciona si el capítulo actual y el que va después ya están descargados.</string>
|
||||
<string name="download_ahead">Descargar por adelantado</string>
|
||||
<string name="auto_download_while_reading">Descarga los capítulos siguientes mientras lees</string>
|
||||
@@ -648,7 +648,7 @@
|
||||
<string name="unknown_title">Título desconocido</string>
|
||||
<string name="invalid_location">Ubicación incorrecta: %s</string>
|
||||
<string name="updates_last_update_info_just_now">Ahora mismo</string>
|
||||
<string name="error_user_agent_string_invalid">Valor de user agent inválido</string>
|
||||
<string name="error_user_agent_string_invalid">La cadena con el agente de usuario («user agent») no parece ser correcta</string>
|
||||
<string name="download_notifier_cache_renewal">Reindexando descargas</string>
|
||||
<string name="action_open_random_manga">Abrir un elemento al azar</string>
|
||||
<string name="information_no_entries_found">Parece que esta categoría está vacía</string>
|
||||
@@ -662,7 +662,7 @@
|
||||
<string name="pref_invalidate_download_cache_summary">Forzar a la aplicación a volver a comprobar los capítulos descargados</string>
|
||||
<string name="label_started">Empezados</string>
|
||||
<string name="label_local">En el dispositivo</string>
|
||||
<string name="label_completed_titles">Manga completado</string>
|
||||
<string name="label_completed_titles">Leídos del todo</string>
|
||||
<string name="label_read_duration">Tiempo de lectura</string>
|
||||
<string name="label_read_chapters">Leídos</string>
|
||||
<string name="label_tracker_section">Con seguimiento</string>
|
||||
@@ -674,15 +674,15 @@
|
||||
<string name="minute_short">%dm</string>
|
||||
<string name="label_used">En uso</string>
|
||||
<string name="not_applicable">No disponible</string>
|
||||
<string name="label_tracked_titles">Manga en servicios de seguimiento</string>
|
||||
<string name="label_tracked_titles">En servicios de seguimiento</string>
|
||||
<string name="label_downloaded">Descargados</string>
|
||||
<string name="label_stats">Estadísticas</string>
|
||||
<string name="label_overview_section">Resumen</string>
|
||||
<string name="label_titles_section">Manga</string>
|
||||
<string name="label_titles_section">Títulos</string>
|
||||
<string name="seconds_short">%ds</string>
|
||||
<string name="action_not_now">Ahora no</string>
|
||||
<string name="information_no_manga_category">La categoría está vacía</string>
|
||||
<string name="pref_library_update_show_tab_badge">Mostrar el número de capítulos por leer en el icono de actualizaciones</string>
|
||||
<string name="pref_library_update_show_tab_badge">Ver número de capítulos por leer en el icono de actualizaciones</string>
|
||||
<string name="copied_to_clipboard_plain">Se ha copiado al portapapeles</string>
|
||||
<string name="pref_skip_dupe_chapters">Saltarse los capítulos repetidos</string>
|
||||
<string name="enhanced_services_not_installed">Está disponible, pero la fuente todavía no se ha instalado: %s</string>
|
||||
@@ -698,7 +698,7 @@
|
||||
<string name="overlay_header">Superposición</string>
|
||||
<string name="pref_page_rotate">Girar las páginas anchas para adaptarlas a la pantalla</string>
|
||||
<string name="pref_page_rotate_invert">Girar las páginas anchas en la dirección opuesta</string>
|
||||
<string name="pref_debug_info">Información sobre la depuración</string>
|
||||
<string name="pref_debug_info">Información de depuración</string>
|
||||
<string name="pref_chapter_swipe">Deslizamiento de dedo en capítulos</string>
|
||||
<string name="pref_chapter_swipe_start">Deslizar a la izquierda</string>
|
||||
<string name="pref_chapter_swipe_end">Deslizar a la derecha</string>
|
||||
@@ -706,7 +706,7 @@
|
||||
<string name="pref_library_columns_per_row">%d por fila</string>
|
||||
<string name="action_filter_interval_late">Tras 10 o más días</string>
|
||||
<string name="action_sort_next_updated">Próxima actualización prevista</string>
|
||||
<string name="pref_update_only_in_release_period">Prever la fecha del próximo lanzamiento</string>
|
||||
<string name="pref_update_only_in_release_period">Intentar predecir cuándo sale el siguiente número</string>
|
||||
<string name="intervals_header">Intervalos</string>
|
||||
<string name="action_filter_interval_passed">Ha pasado el período de comprobación</string>
|
||||
<string name="manga_display_interval_title">Estimar cada</string>
|
||||
@@ -770,15 +770,15 @@
|
||||
<string name="onboarding_guides_returning_user">¿No es la primera vez que instalas %s?</string>
|
||||
<string name="onboarding_action_skip">Saltar</string>
|
||||
<string name="onboarding_action_next">Siguiente</string>
|
||||
<string name="onboarding_description">Lo primero de todo es poner las cosas a tu gusto. Siempre puedes volver a cambiarlas más tarde en los ajustes.</string>
|
||||
<string name="no_location_set">Todavía no has proporcionado una ubicación de almacenamiento</string>
|
||||
<string name="onboarding_description">Lo primero de todo es dejar las cosas a tu gusto. Siempre puedes volver a cambiarlas más tarde en los ajustes.</string>
|
||||
<string name="no_location_set">Todavía no has proporcionado ninguna carpeta</string>
|
||||
<string name="onboarding_storage_info">Selecciona una carpeta donde %1$s almacenará las descargas de capítulos, copias de seguridad y otras cosas.
|
||||
\n
|
||||
\nTe recomendamos que sea solo para %1$s.
|
||||
\n
|
||||
\nCarpeta seleccionada: %2$s</string>
|
||||
<string name="onboarding_permission_install_apps">Permiso para instalar aplicaciones</string>
|
||||
<string name="onboarding_permission_notifications">Permiso de notificación</string>
|
||||
<string name="onboarding_permission_notifications">Permiso para mostrar notificaciones</string>
|
||||
<string name="onboarding_permission_ignore_battery_opts_description">Previene cortes y retrasos al procesar tareas en segundo plano que tarden un poco; como al buscar y descargar contenido nuevo, así como al restaurar copias de respaldo.</string>
|
||||
<string name="onboarding_permission_ignore_battery_opts">Uso de batería en segundo plano</string>
|
||||
<string name="onboarding_permission_install_apps_description">Para instalar extensiones que te permiten buscar y descargar contenido.</string>
|
||||
@@ -787,19 +787,21 @@
|
||||
<string name="available_disk_space_info">Disponible: %1$s / Total: %2$s</string>
|
||||
<string name="ext_permission_install_apps_warning">Toca aquí para conceder los permisos necesarios para instalar extensiones.</string>
|
||||
<string name="private_settings">Incluir datos privados, como las claves de inicio de sesión en plataformas de seguimiento</string>
|
||||
<string name="invalid_backup_file_error">Error completo:</string>
|
||||
<string name="invalid_backup_file_error">Descripción completa del problema:</string>
|
||||
<string name="manga_interval_expected_update">Próxima actualización prevista en torno a %1$s, revisando cada %2$s</string>
|
||||
<string name="repo_extension_message">Esta extensión proviene de un repositorio externo. Toca para ver el repositorio.</string>
|
||||
<string name="repo_extension_message">Esta extensión proviene de un repositorio externo. Toca para verlo.</string>
|
||||
<string name="manga_interval_custom_amount">Frecuencia de actualización personalizada:</string>
|
||||
<string name="error_repo_exists">¡Este repositorio ya existe!</string>
|
||||
<string name="pref_library_update_smart_update">Actualización inteligente</string>
|
||||
<string name="invalid_repo_name">URL de repositorio inválida</string>
|
||||
<string name="action_add_repo_message">Agregar repositorios adicionales a Tachiyomi. La URL debe terminar con \"index.min.json\".</string>
|
||||
<string name="delete_repo_confirmation">¿Deseas eliminar el repositorio \"%s\"?</string>
|
||||
<string name="action_delete_repo">Eliminar repositorio</string>
|
||||
<string name="error_repo_exists">El repositorio ya existe</string>
|
||||
<string name="pref_library_update_smart_update">Actualizaciones inteligentes</string>
|
||||
<string name="invalid_repo_name">La dirección URL del repositorio no parece ser correcta</string>
|
||||
<string name="action_add_repo_message">Añade más repositorios a Tachiyomi; la dirección URL tiene que terminar en «index.min.json».</string>
|
||||
<string name="delete_repo_confirmation">¿Seguro que quieres borrar el repositorio «%s»?</string>
|
||||
<string name="action_delete_repo">Borrar repositorio</string>
|
||||
<string name="manga_interval_header">Próxima actualización</string>
|
||||
<string name="action_add_repo">Agregar repositorio</string>
|
||||
<string name="information_empty_repos">No tienes repositorios agregados.</string>
|
||||
<string name="action_add_repo">Añadir un repositorio</string>
|
||||
<string name="information_empty_repos">Todavía no has añadido ningún repositorio.</string>
|
||||
<string name="label_extension_repos">Repositorios de extensiones</string>
|
||||
<string name="label_add_repo_input">URL del repositorio</string>
|
||||
<string name="label_add_repo_input">Dirección URL del repositorio</string>
|
||||
<string name="onboarding_storage_help_info">¿Acabas de actualizar desde una versión más antigua y no sabes qué hacer? Échale un vistazo a la guía de almacenamiento.</string>
|
||||
<string name="onboarding_storage_help_action">Guía de almacenamiento</string>
|
||||
</resources>
|
||||
@@ -180,11 +180,11 @@
|
||||
<string name="pref_fullscreen">Naka-fullscreen</string>
|
||||
<string name="unofficial_extension_message">Wala sa opisyal na listahan ang extension na ito.</string>
|
||||
<string name="obsolete_extension_message">Hindi na available ang extension na ito. Maaaring hindi ito gumana nang maayos at maaaring magdulot ng mga isyu sa app. Inirerekomenda ang pag-uninstall nito.</string>
|
||||
<string name="untrusted_extension_message">Pinirmahan ang extension na ito gamit ang isang kaduda-dudang certificate at hindi muna pinagana.
|
||||
<string name="untrusted_extension_message">Ang extension na ito ay nilagdaan ng sinumang hindi kilalang author at hindi na-load.
|
||||
\n
|
||||
\nMaaaring mabasa ng isang kaduda-dudang extension ang kahit anong nakatagong credentials sa pag-login o di kaya nama\'y magsimula ng delikadong code.
|
||||
\nMaaaring basahin ng mga nakakahamak na extension ang anumang nakatagong kredensyal sa pag-log in o magsagawa ng arbitrary code.
|
||||
\n
|
||||
\nTinatanggap mo ang mga bantang ito sa pagtiwala sa certificate na ito.</string>
|
||||
\nSa pamamagitan ng pagtitiwala sa certificate ng extension na ito, tinatanggap mo ang mga panganib na ito.</string>
|
||||
<string name="untrusted_extension">Di-pinagkakatiwalaang extension</string>
|
||||
<string name="ext_uninstall">I-uninstall</string>
|
||||
<string name="ext_trust">Tiwala</string>
|
||||
@@ -203,7 +203,7 @@
|
||||
<string name="default_category">Default na kategorya</string>
|
||||
<string name="pref_library_update_refresh_metadata_summary">Maghanap ng mga bagong cover at detalye kapag nag-a-update ng Aklatan</string>
|
||||
<string name="pref_library_update_refresh_metadata">Awtomatikong i-refresh ang metadata</string>
|
||||
<string name="pref_update_only_non_completed">May \"Kumpleto\" na estado</string>
|
||||
<string name="pref_update_only_non_completed">Laktawan ang mga entry na may katayuang \"Nakumpleto\"</string>
|
||||
<string name="charging">Kapag naka-charge</string>
|
||||
<string name="pref_library_update_restriction">Awtomatikong ina-update ang mga paghihigpit sa device</string>
|
||||
<string name="update_weekly">Linggo-linggo</string>
|
||||
@@ -223,8 +223,8 @@
|
||||
<string name="secure_screen">Bantayan ang screen</string>
|
||||
<string name="pref_read_with_tapping_inverted">Baligtarin ang mga tap zone</string>
|
||||
<string name="backup_restore_missing_sources">Nawawalang mga source:</string>
|
||||
<string name="invalid_backup_file_missing_manga">Hindi naglalaman ang backup ng kahit anong mga entry sa Aklatan.</string>
|
||||
<string name="invalid_backup_file">Invalid na backup</string>
|
||||
<string name="invalid_backup_file_missing_manga">Hindi naglalaman ang backup ng kahit anong mga entry sa aklatan.</string>
|
||||
<string name="invalid_backup_file">Imbalidong backup file:</string>
|
||||
<string name="backup_created">Nai-backup na</string>
|
||||
<string name="pref_backup_interval">Awtomatikong dalas ng pag-backup</string>
|
||||
<string name="pref_restore_backup_summ">I-restore ang Aklatan mula sa backup</string>
|
||||
@@ -389,7 +389,7 @@
|
||||
<string name="pref_clear_database_summary">Burahin ang nakaraan ng mga entry na hindi naka-save sa aklatan mo</string>
|
||||
<string name="pref_clear_database">Linisin ang database</string>
|
||||
<string name="cache_delete_error">Nagka-error habang nililinis</string>
|
||||
<string name="cache_deleted">Nalinis na ang cache. Binura ang %1$d (na) file</string>
|
||||
<string name="cache_deleted">Na-clear ang cache, na-delete ang %1$d na file</string>
|
||||
<string name="used_cache">Nagamit: %1$s</string>
|
||||
<string name="pref_clear_chapter_cache">Linisin ang cache ng kabanata</string>
|
||||
<string name="label_data">Data</string>
|
||||
@@ -457,9 +457,7 @@
|
||||
<string name="action_display_show_number_of_items">Ipakita ang bilang ng mga item</string>
|
||||
<string name="pref_dual_page_invert_summary">Kung sakaling hindi sumasakto sa direksyon ng pagbabasa ang paghahati sa malalapad na pahina</string>
|
||||
<string name="pref_dual_page_invert">Baligtarin ang paghahati sa pahina</string>
|
||||
<string name="backup_restore_content_full">Ire-restore ang mga datos mula sa backup file.
|
||||
\n
|
||||
\nKailangan mong i-install muli ang mga nawawalang extension at mag-login muli sa mga tracker pagkatapos para magamit ang mga ito.</string>
|
||||
<string name="backup_restore_content_full">Kailangan mong i-install muli ang mga nawawalang extension at mag-login muli sa mga tracker pagkatapos para magamit ang mga ito.</string>
|
||||
<string name="pref_dns_over_https">DNS kesa HTTPS (DoH)</string>
|
||||
<string name="pref_download_new_categories_details">Ang mga entry sa mga ibinukod na kategorya ay hindi mada-download kahit na sila ay kasama rin sa mga kategoryang kasama.</string>
|
||||
<string name="pref_category_auto_download">Kusang pag-download</string>
|
||||
@@ -491,7 +489,7 @@
|
||||
<string name="restrictions">Restriksyon: %s</string>
|
||||
<string name="error_no_match">Walang nahanap na kapares</string>
|
||||
<string name="date">Petsa</string>
|
||||
<string name="local_invalid_format">Invalid na format ng kabanata</string>
|
||||
<string name="local_invalid_format">Imbalidong format ng kabanata</string>
|
||||
<string name="chapter_not_found">Hindi makita ang kabanata</string>
|
||||
<string name="source_unsupported">Di suportado ang source</string>
|
||||
<string name="unread">Di pa nabasa</string>
|
||||
@@ -560,7 +558,7 @@
|
||||
<string name="extension_api_error">Bigong makuha ang listahan ng mga extension</string>
|
||||
<string name="privacy_policy">Patakaran sa Pagkapribado</string>
|
||||
<string name="library_errors_help">Para sa tulong sa pag-aayos ng mga error sa pag-update ng aklatan, tingnan ang %1$s</string>
|
||||
<string name="pref_update_only_completely_read">May di pa nababasang kabanata</string>
|
||||
<string name="pref_update_only_completely_read">Laktawan ang mga entry na hindi pa nababasang kabanata</string>
|
||||
<string name="save_chapter_as_cbz">I-save bilang CBZ archive</string>
|
||||
<string name="publishing_finished">Tapos na\'ng mailathala</string>
|
||||
<string name="on_hiatus">Naka-hiatus</string>
|
||||
@@ -568,7 +566,7 @@
|
||||
<string name="action_show_manga">Ipakita ang entry</string>
|
||||
<string name="action_display_cover_only_grid">Pabalat lang</string>
|
||||
<string name="skipped_reason_completed">Nilaktawan dahil kumpleto na ang serye</string>
|
||||
<string name="pref_update_only_started">Hindi pa nasisimulan</string>
|
||||
<string name="pref_update_only_started">Laktawan ang hindi nasimulang mga entry</string>
|
||||
<string name="skipped_reason_not_caught_up">Nilaktawan dahil may di pa nabasang mga kabanata</string>
|
||||
<string name="skipped_reason_not_started">Nilaktawan dahil wala pang nabasang mga kabanata</string>
|
||||
<string name="pref_landscape_zoom">Awtomatikong mag-zoom sa mga malalawak na larawan</string>
|
||||
@@ -649,7 +647,7 @@
|
||||
<string name="crash_screen_restart_application">Buksan muli ang app</string>
|
||||
<string name="invalid_location">Invalid na lugar: %s</string>
|
||||
<string name="unknown_title">Di alam na pamagat</string>
|
||||
<string name="error_user_agent_string_invalid">Invalid na string ng user agent</string>
|
||||
<string name="error_user_agent_string_invalid">Di-wastong string ng user agent</string>
|
||||
<string name="updates_last_update_info_just_now">Ngayon lang</string>
|
||||
<string name="download_notifier_cache_renewal">Tinitignan ang mga download</string>
|
||||
<string name="information_no_entries_found">Walang mga entry ang nahanap sa kategoryang ito</string>
|
||||
@@ -715,7 +713,7 @@
|
||||
<string name="action_filter_interval_long">Kunin kada buwan (kada ika-28 na araw)</string>
|
||||
<string name="manga_display_interval_title">Tantyahin bawat</string>
|
||||
<string name="manga_display_modified_interval_title">Itakdang i-update bawat</string>
|
||||
<string name="pref_update_only_in_release_period">Sa labas ng inaasahang release period</string>
|
||||
<string name="pref_update_only_in_release_period">Hulaan ang susunod na oras ng release</string>
|
||||
<string name="intervals_header">Mga pagitan</string>
|
||||
<string name="skipped_reason_not_in_release_period">Nilaktawan dahil walang inaasahang release ngayong araw</string>
|
||||
<string name="has_results">May mga resulta</string>
|
||||
@@ -746,7 +744,7 @@
|
||||
<string name="file_null_uri_error">Ang file picker ay nabigo na ibalik ang file sa app</string>
|
||||
<string name="label_data_storage">Data at storage</string>
|
||||
<string name="pref_flash_page_summ">Binabawasan ang ghosting sa mga e-ink na display</string>
|
||||
<string name="pref_flash_page">Mag-flash ng puti kada pagbabago ng pahina</string>
|
||||
<string name="pref_flash_page">Mag-flash kada pumalit ng pahina</string>
|
||||
<string name="relative_time_span_never">Hindi kailanman</string>
|
||||
<string name="last_auto_backup_info">Huling awtomatikong na-back up: %s</string>
|
||||
<string name="pref_storage_usage">Paggamit ng storage</string>
|
||||
@@ -769,7 +767,7 @@
|
||||
<string name="onboarding_action_finish">Magsimula</string>
|
||||
<string name="onboarding_storage_selection_required">Dapat pumili ng isang folder</string>
|
||||
<string name="onboarding_heading">Maligayang pagdating!</string>
|
||||
<string name="onboarding_guides_returning_user">Gumagamit ba ng %s dati?</string>
|
||||
<string name="onboarding_guides_returning_user">Muling pag-install ng %s?</string>
|
||||
<string name="onboarding_action_skip">Laktawan</string>
|
||||
<string name="onboarding_action_next">Susunod</string>
|
||||
<string name="onboarding_description">Mag-set up muna tayo ng ilang bagay. Maaari mo ring baguhin ang mga ito anumang oras sa mga setting sa ibang pagkakataon.</string>
|
||||
@@ -787,8 +785,23 @@
|
||||
<string name="onboarding_permission_notifications_description">Maabisuhan para sa mga update sa aklatan at higit pa.</string>
|
||||
<string name="onboarding_permission_action_grant">Payagan</string>
|
||||
<string name="available_disk_space_info">Na magagamit: %1$s / Kabuuan: %2$s</string>
|
||||
<string name="manga_interval_expected_update">Inaasahan ang susunod na update sa humigit-kumulang %s</string>
|
||||
<string name="manga_interval_expected_update">Inaasahan ang susunod na update sa humigit-kumulang %1$s, na tumitingin sa bawat %2$s</string>
|
||||
<string name="invalid_backup_file_error">Buong error:</string>
|
||||
<string name="ext_permission_install_apps_warning">Kinakailangan ng permiso para mag-install ng mga extension. I-tap upang mapayagan ito.</string>
|
||||
<string name="private_settings">Kasali ang mga sensitibong setting (hal., mga tracker login token)</string>
|
||||
<string name="onboarding_storage_help_info">Nag-a-update mula sa isang mas lumang bersyon at hindi sigurado kung ano ang pipiliin? Sumangguni sa gabay sa storage para sa higit pang impormasyon.</string>
|
||||
<string name="pref_library_update_smart_update">Matalas na pag-update</string>
|
||||
<string name="information_empty_repos">Wala kang na-set na repo.</string>
|
||||
<string name="action_add_repo">Magdagdag ng repo</string>
|
||||
<string name="label_extension_repos">Mga repo ng extension</string>
|
||||
<string name="onboarding_storage_help_action">Gabay sa storage</string>
|
||||
<string name="error_repo_exists">Umiiral na ang repo na ito!</string>
|
||||
<string name="action_delete_repo">Tanggalin ang repo</string>
|
||||
<string name="label_add_repo_input">URL ng repo</string>
|
||||
<string name="action_add_repo_message">Magdagdag ng mga karagdagang repo sa Tachiyomi. Dapat ito ay isang URL na nagtatapos sa \"index.min.json\".</string>
|
||||
<string name="repo_extension_message">Ang extension na ito ay nagmula sa isang external na repo. I-tap para tignan ang repo.</string>
|
||||
<string name="invalid_repo_name">Di-wastong URL ng repo</string>
|
||||
<string name="manga_interval_header">Susunod na update</string>
|
||||
<string name="delete_repo_confirmation">Gusto mo bang tanggalin ang repo na \"%s\"?</string>
|
||||
<string name="manga_interval_custom_amount">Ipasadya ang update frequency:</string>
|
||||
</resources>
|
||||
@@ -80,4 +80,9 @@
|
||||
<item quantity="many">%d jours</item>
|
||||
<item quantity="other">%d jours</item>
|
||||
</plurals>
|
||||
<plurals name="num_repos">
|
||||
<item quantity="one">%d dépôt</item>
|
||||
<item quantity="many">%d dépôts</item>
|
||||
<item quantity="other">%d dépôts</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -557,7 +557,7 @@
|
||||
<string name="database_clean">Rien à effacer</string>
|
||||
<string name="extension_api_error">Échec de la récupération de la liste des extensions</string>
|
||||
<string name="privacy_policy">Politique de confidentialité</string>
|
||||
<string name="pref_update_only_completely_read">Avec des chapitres non lus</string>
|
||||
<string name="pref_update_only_completely_read">Avec chapitre(s) non lu(s)</string>
|
||||
<string name="save_chapter_as_cbz">Enregistrer comme archive CBZ</string>
|
||||
<string name="library_errors_help">Pour savoir comment corriger les erreurs de mise à jour de la bibliothèque, voir %1$s</string>
|
||||
<string name="on_hiatus">En pause</string>
|
||||
@@ -709,7 +709,7 @@
|
||||
<string name="action_filter_interval_dropped">Abandonné \? En retard de 20+ et 2 mois</string>
|
||||
<string name="action_filter_interval_passed">Période de contrôle réussie</string>
|
||||
<string name="action_sort_next_updated">Prochaine mise à jour prévue</string>
|
||||
<string name="pref_update_only_in_release_period">Période de diffusion prévue</string>
|
||||
<string name="pref_update_only_in_release_period">Prochaine sortie prévue dans :</string>
|
||||
<string name="action_set_interval">Définir l\'intervalle</string>
|
||||
<string name="action_ok">Valider</string>
|
||||
<string name="action_filter_interval_custom">Intervalle de recherche personnalisé</string>
|
||||
@@ -758,4 +758,21 @@
|
||||
<string name="ext_permission_install_apps_warning">Des permissions sont nécessaires pour installer des extensions. Appuyer ici pour les accorder.</string>
|
||||
<string name="onboarding_permission_action_grant">Accorder</string>
|
||||
<string name="pref_relative_format">Durées relatives</string>
|
||||
<string name="onboarding_permission_notifications">Permission de notifications</string>
|
||||
<string name="onboarding_permission_ignore_battery_opts">Utilisation de la batterie en arrière-plan</string>
|
||||
<string name="onboarding_permission_install_apps_description">Pour installer des extensions de source.</string>
|
||||
<string name="onboarding_permission_ignore_battery_opts_description">Évite les interruptions des longues mises à jour de bibliothèque, téléchargements de chapitres et restaurations de sauvegardes.</string>
|
||||
<string name="onboarding_permission_install_apps">Permission d\'installer des applications</string>
|
||||
<string name="onboarding_storage_help_info">Mise à jour depuis une ancienne version et pas sûr de quoi choisir ? Consultez le guide de stockage pour plus d\'informations.</string>
|
||||
<string name="onboarding_storage_help_action">Guide de stockage</string>
|
||||
<string name="onboarding_permission_notifications_description">Soyez notifié des mises à jour de la bibliothèque et autre.</string>
|
||||
<string name="pref_library_update_smart_update">Mise à jour intelligente</string>
|
||||
<string name="pref_onboarding_guide">Guide de démarrage</string>
|
||||
<string name="onboarding_description">Commençons par paramétrer certaines choses. Vous pouvez toujours changer ces paramètres plus tard.</string>
|
||||
<string name="onboarding_storage_info">Sélectionnez un dossier où %1$s stockera les chapitres téléchargés, les sauvegardes et plus encore.
|
||||
\n
|
||||
\nUn dossier dédié est recommandé.
|
||||
\n
|
||||
\nDossier sélectionné : %2$s</string>
|
||||
<string name="onboarding_storage_action_select">Sélectionnez un dossier</string>
|
||||
</resources>
|
||||
@@ -48,4 +48,7 @@
|
||||
<plurals name="day">
|
||||
<item quantity="other">%d hari</item>
|
||||
</plurals>
|
||||
<plurals name="num_repos">
|
||||
<item quantity="other">%d repo</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -78,7 +78,7 @@
|
||||
<string name="all">Semua</string>
|
||||
<string name="pref_library_update_restriction">Pembatasan pembaruan otomatis</string>
|
||||
<string name="charging">Saat mengisi daya</string>
|
||||
<string name="pref_update_only_non_completed">Dengan status \"Selesai\"</string>
|
||||
<string name="pref_update_only_non_completed">Lewati daftar dengan status \"Selesai\"</string>
|
||||
<string name="pref_auto_update_manga_sync">Perbarui kemajuan setelah membaca</string>
|
||||
<string name="default_category">Kategori bawaan</string>
|
||||
<string name="default_category_summary">Selalu tanya</string>
|
||||
@@ -241,11 +241,11 @@
|
||||
<string name="ext_untrusted">Tidak terpercaya</string>
|
||||
<string name="ext_uninstall">Lepas</string>
|
||||
<string name="untrusted_extension">Ekstensi tidak terpercaya</string>
|
||||
<string name="untrusted_extension_message">Ekstensi ini ditandatangani dengan sertifikat tidak tepercaya dan tidak diaktifkan.
|
||||
<string name="untrusted_extension_message">Ekstensi ini ditandatangani oleh author yang tidak dikenal dan tidak dimuat.
|
||||
\n
|
||||
\nEkstensi berbahaya dapat membaca kredensial login apa pun yang disimpan atau mengeksekusi kode arbitrer.
|
||||
\nEkstensi berbahaya dapat membaca semua kredensial login yang disimpan atau menjalankan kode berbahaya.
|
||||
\n
|
||||
\nDengan mempercayai sertifikat ini, Anda menerima risiko ini.</string>
|
||||
\nDengan mempercayai sertifikat ekstensi ini, Anda menerima risiko ini.</string>
|
||||
<string name="pref_double_tap_anim_speed">Kecepatan animasi ketukan dua kali</string>
|
||||
<string name="double_tap_anim_speed_0">Tanpa animasi</string>
|
||||
<string name="double_tap_anim_speed_normal">Normal</string>
|
||||
@@ -376,7 +376,7 @@
|
||||
<string name="label_data">Data</string>
|
||||
<string name="backup_restore_missing_sources">Sumber yang hilang:</string>
|
||||
<string name="invalid_backup_file_missing_manga">Cadangan tidak berisi entri perpustakaan apa pun.</string>
|
||||
<string name="invalid_backup_file">Berkas cadangan tidak valid</string>
|
||||
<string name="invalid_backup_file">File cadangan tidak valid:</string>
|
||||
<string name="sort_by_upload_date">Menurut tanggal pengunggahan</string>
|
||||
<string name="action_display_comfortable_grid">Grid nyaman</string>
|
||||
<string name="tabs_header">Tab</string>
|
||||
@@ -471,9 +471,7 @@
|
||||
<string name="pref_dns_over_https">DNS melalui HTTPS (DoH)</string>
|
||||
<string name="kindlish_nav">semacam Kindle</string>
|
||||
<string name="pref_category_auto_download">Unduh otomatis</string>
|
||||
<string name="backup_restore_content_full">Data dari berkas cadangan akan dipulihkan.
|
||||
\n
|
||||
\nAnda perlu memasang ekstensi yang hilang dan masuk ke layanan pelacakan setelahnya untuk menggunakannya.</string>
|
||||
<string name="backup_restore_content_full">Anda mungkin perlu memasang ulang ekstensi yang hilang dan log in ke layanan pelacakan setelahnya untuk menggunakannya.</string>
|
||||
<string name="notification_incognito_text">Matikan mode penyamaran</string>
|
||||
<string name="source_unsupported">Sumber tidak didukung</string>
|
||||
<string name="error_no_match">Tidak ditemukan kecocokan</string>
|
||||
@@ -558,7 +556,7 @@
|
||||
<string name="database_clean">Tidak ada yang perlu dibersihkan</string>
|
||||
<string name="clear_database_source_item_count">%1$d entri non-perpustakaan dalam database</string>
|
||||
<string name="extension_api_error">Gagal mendapatkan daftar ekstensi</string>
|
||||
<string name="pref_update_only_completely_read">Dengan bab yang belum dibaca</string>
|
||||
<string name="pref_update_only_completely_read">Lewati daftar dengan chapter yang belum dibaca</string>
|
||||
<string name="privacy_policy">Kebijakan privasi</string>
|
||||
<string name="publishing_finished">Penerbitan selesai</string>
|
||||
<string name="cancelled">Dibatalkan</string>
|
||||
@@ -567,7 +565,7 @@
|
||||
<string name="save_chapter_as_cbz">Simpan sebagai arsip CBZ</string>
|
||||
<string name="action_show_manga">Lihat entri</string>
|
||||
<string name="action_display_cover_only_grid">Grid sampul saja</string>
|
||||
<string name="pref_update_only_started">Yang belum dibaca</string>
|
||||
<string name="pref_update_only_started">Lewati dafter yang belum mulai dibaca</string>
|
||||
<string name="skipped_reason_completed">Dilewati karena seri telah selesai</string>
|
||||
<string name="skipped_reason_not_caught_up">Dilewati karena ada bab yang belum dibaca</string>
|
||||
<string name="skipped_reason_not_started">Dilewati karena tidak ada bab yang dibaca</string>
|
||||
@@ -715,7 +713,7 @@
|
||||
<string name="action_filter_interval_passed">Melewati periode pemeriksaan</string>
|
||||
<string name="action_sort_next_updated">Pembaruan yang diharapkan berikutnya</string>
|
||||
<string name="intervals_header">Interval</string>
|
||||
<string name="pref_update_only_in_release_period">Di luar periode rilis yang diharapkan</string>
|
||||
<string name="pref_update_only_in_release_period">Prediksikan waktu rilis selanjutnya</string>
|
||||
<string name="manga_display_interval_title">Perkirakan setiap</string>
|
||||
<string name="manga_display_modified_interval_title">Atur untuk memperbarui setiap</string>
|
||||
<string name="track_delete_title">Hapus %s pelacakan\?</string>
|
||||
@@ -752,7 +750,7 @@
|
||||
<string name="last_auto_backup_info">Terakhir dicadangkan secara otomatis: %s</string>
|
||||
<string name="no_scanlators_found">Tidak ditemukan pemindai</string>
|
||||
<string name="scanlator">Pemindai</string>
|
||||
<string name="pref_flash_page">Berkedip putih pada perubahan halaman</string>
|
||||
<string name="pref_flash_page">Perlihatkan kilatan saat halaman berubah</string>
|
||||
<string name="pref_storage_usage">Penggunaan penyimpanan</string>
|
||||
<string name="action_sort_tracker_score">Skor pelacak</string>
|
||||
<string name="label_data_storage">Data dan penyimpanan</string>
|
||||
@@ -771,7 +769,7 @@
|
||||
<string name="onboarding_permission_notifications">Izin notifikasi</string>
|
||||
<string name="onboarding_permission_install_apps">Izin pasang aplikasi</string>
|
||||
<string name="onboarding_heading">Selamat Datang!</string>
|
||||
<string name="onboarding_guides_returning_user">Sudah pernah menggunakan %s sebelumnya?</string>
|
||||
<string name="onboarding_guides_returning_user">Install ulang %s?</string>
|
||||
<string name="onboarding_action_skip">Lewati</string>
|
||||
<string name="onboarding_permission_ignore_battery_opts_description">Hindari gangguan pada pembaruan pustaka, pengunduhan, dan pemulihan cadangan yang berlangsung lama.</string>
|
||||
<string name="onboarding_action_next">Selanjutnya</string>
|
||||
@@ -786,4 +784,24 @@
|
||||
\nSebaiknya menggunakan direktori terpisah.
|
||||
\n
|
||||
\nDirektori yang dipilih: %2$s</string>
|
||||
<string name="onboarding_storage_help_action">Panduan penyimpanan</string>
|
||||
<string name="pref_library_update_smart_update">Pembauan pintar</string>
|
||||
<string name="onboarding_storage_help_info">Memperbarui dari versi lama dan tak yakin harus pilih mana? lihat panduan penyimpanan untuk informasi lebih lanjut.</string>
|
||||
<string name="action_add_repo">Tambahkan repo</string>
|
||||
<string name="action_add_repo_message">Tambahkan repo lain ke Tachiyomi. Seharusnya URL yang memiliki akhiran \"index.min.json\".</string>
|
||||
<string name="label_extension_repos">Repositori ekstensi</string>
|
||||
<string name="information_empty_repos">Anda tidak memiliki repositori yang ditetapkan.</string>
|
||||
<string name="invalid_backup_file_error">Keseluruhan eror:</string>
|
||||
<string name="error_repo_exists">Repositori ini sudah ada!</string>
|
||||
<string name="manga_interval_header">Update selanjutnya</string>
|
||||
<string name="label_add_repo_input">URL Repo</string>
|
||||
<string name="invalid_repo_name">URL repo tidak valid</string>
|
||||
<string name="repo_extension_message">Ekstensi ini dari repo eksternal. ketuk untuk lihat repo.</string>
|
||||
<string name="private_settings">Sertakan pengaturan sensitif (contohnya, token login pelacak)</string>
|
||||
<string name="ext_permission_install_apps_warning">Izin diperlukan untuk memasang ekstensi. Klik disini untuk memberi izin.</string>
|
||||
<string name="action_delete_repo">Hapus repo</string>
|
||||
<string name="delete_repo_confirmation">Apa Anda yakin ingin menghapus repo \"%s\"?</string>
|
||||
<string name="manga_interval_expected_update">Update selanjutnya diperkirakan sekitar %1$s, memeriksa setiap sekitar %2$s</string>
|
||||
<string name="available_disk_space_info">Tersedia:%1$s/Total:%2$s</string>
|
||||
<string name="manga_interval_custom_amount">Keseringan pembaruan yang di kostumisasi:</string>
|
||||
</resources>
|
||||
@@ -48,4 +48,7 @@
|
||||
<plurals name="day">
|
||||
<item quantity="other">%d일</item>
|
||||
</plurals>
|
||||
<plurals name="num_repos">
|
||||
<item quantity="other">%d 저장소</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -767,7 +767,7 @@
|
||||
<string name="onboarding_action_finish">Kom i gang</string>
|
||||
<string name="onboarding_storage_selection_required">En mappe må velges</string>
|
||||
<string name="onboarding_heading">Velkommen!</string>
|
||||
<string name="onboarding_guides_returning_user">Allerede brukt %s før?</string>
|
||||
<string name="onboarding_guides_returning_user">Reinstallerer du %s?</string>
|
||||
<string name="onboarding_action_skip">Hopp over</string>
|
||||
<string name="onboarding_action_next">Neste</string>
|
||||
<string name="onboarding_description">La oss sette opp noen ting først. Du kan alltid endre disse i innstillingene senere også.</string>
|
||||
|
||||
@@ -766,7 +766,7 @@
|
||||
<string name="onboarding_guides_new_user">Novo no %s? Recomendamos dar uma olhada no guia de introdução.</string>
|
||||
<string name="onboarding_action_finish">Começar</string>
|
||||
<string name="onboarding_heading">Bem-vindo(a)!</string>
|
||||
<string name="onboarding_guides_returning_user">Já utilizou o %s antes?</string>
|
||||
<string name="onboarding_guides_returning_user">Reinstalando o %s?</string>
|
||||
<string name="onboarding_action_skip">Pular</string>
|
||||
<string name="onboarding_action_next">Próximo</string>
|
||||
<string name="onboarding_description">Vamos definir algumas coisas primeiro. Você sempre pode fazer alterações nas configurações depois também.</string>
|
||||
@@ -793,12 +793,15 @@
|
||||
<string name="invalid_backup_file_error">Erro completo:</string>
|
||||
<string name="error_repo_exists">Este repositório já existe!</string>
|
||||
<string name="pref_library_update_smart_update">Atualização inteligente</string>
|
||||
<string name="invalid_repo_name">Nome de repositório inválido</string>
|
||||
<string name="action_add_repo_message">Adiciona repositórios adicionais ao Tachiyomi. O formato de um repositório é \"usuário/repositório\", onde \"usuário\" é o dono do repositório e \"repositório\" é o nome do repositório.</string>
|
||||
<string name="invalid_repo_name">URL do repositório inválido</string>
|
||||
<string name="action_add_repo_message">Adiciona repositórios adicionais ao Tachiyomi. Deve ser uma URL que termine com \"index.min.json\".</string>
|
||||
<string name="delete_repo_confirmation">Você deseja deletar o repositório \"%s\"?</string>
|
||||
<string name="action_delete_repo">Deletar repositório</string>
|
||||
<string name="manga_interval_header">Próxima atualização</string>
|
||||
<string name="action_add_repo">Adicionar repositório</string>
|
||||
<string name="information_empty_repos">Você não tem repositórios definidos.</string>
|
||||
<string name="label_extension_repos">Repositórios de extensões</string>
|
||||
<string name="label_add_repo_input">URL do repositório</string>
|
||||
<string name="onboarding_storage_help_action">Guia de armazenamento</string>
|
||||
<string name="onboarding_storage_help_info">Atualizando de uma versão anterior e não tem certeza do que selecionar? Consulte o guia de armazenamento para mais informações.</string>
|
||||
</resources>
|
||||
@@ -716,4 +716,10 @@
|
||||
<string name="manga_display_modified_interval_title">Definido para atualizar a cada</string>
|
||||
<string name="skipped_reason_not_in_release_period">Pulado, pois nenhum lançamento é esperado para hoje</string>
|
||||
<string name="delete_downloaded">Deletar dowloand</string>
|
||||
<string name="selected">Selecionado</string>
|
||||
<string name="not_selected">Não selecionado</string>
|
||||
<string name="action_menu_overflow_description">Mais opções</string>
|
||||
<string name="action_bar_up_description">Rolar para cima</string>
|
||||
<string name="unlock_app_title">Desbloquear %s</string>
|
||||
<string name="label_data_storage">Dados e armazenamento</string>
|
||||
</resources>
|
||||
@@ -767,7 +767,7 @@
|
||||
<string name="onboarding_action_finish">Начать</string>
|
||||
<string name="onboarding_storage_selection_required">Необходимо выбрать папку</string>
|
||||
<string name="onboarding_heading">Добро пожаловать!</string>
|
||||
<string name="onboarding_guides_returning_user">Уже использовали %s раньше?</string>
|
||||
<string name="onboarding_guides_returning_user">Переустанавливаете %s?</string>
|
||||
<string name="onboarding_action_skip">Пропустить</string>
|
||||
<string name="onboarding_action_next">Следующее</string>
|
||||
<string name="onboarding_description">Давайте настроем парочку вещей. Вы всегда можете их поменять позже в настройках.</string>
|
||||
@@ -802,4 +802,6 @@
|
||||
<string name="information_empty_repos">У вас нет репозиториев.</string>
|
||||
<string name="label_extension_repos">Репозитории расширений</string>
|
||||
<string name="label_add_repo_input">URL-адрес репозитория</string>
|
||||
<string name="onboarding_storage_help_action">Руководство по хранению</string>
|
||||
<string name="onboarding_storage_help_info">Обновляетесь со старой версии и не знаете, что выбрать? Обратите внимание на руководство по хранению для большей информации.</string>
|
||||
</resources>
|
||||
@@ -48,4 +48,7 @@
|
||||
<plurals name="day">
|
||||
<item quantity="other">%d 天</item>
|
||||
</plurals>
|
||||
<plurals name="num_repos">
|
||||
<item quantity="other">%d 仓库</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -83,7 +83,7 @@
|
||||
<string name="all">全部</string>
|
||||
<string name="pref_library_update_restriction">设备自动更新限制</string>
|
||||
<string name="charging">充电时</string>
|
||||
<string name="pref_update_only_non_completed">已完结</string>
|
||||
<string name="pref_update_only_non_completed">跳过状态为“已完结”的作品</string>
|
||||
<string name="pref_auto_update_manga_sync">阅读后更新进度</string>
|
||||
<string name="default_category">默认分类</string>
|
||||
<string name="default_category_summary">始终询问</string>
|
||||
@@ -97,11 +97,11 @@
|
||||
<string name="ext_untrusted">不可信</string>
|
||||
<string name="ext_uninstall">卸载</string>
|
||||
<string name="untrusted_extension">不可信的插件</string>
|
||||
<string name="untrusted_extension_message">此插件使用不受信任的证书签名且尚未激活。
|
||||
<string name="untrusted_extension_message">此插件由未知作者签名且尚未加载。
|
||||
\n
|
||||
\n恶意插件可以读取任何存储的登录凭据或执行任意代码。
|
||||
\n
|
||||
\n信任此证书即代表你愿意承担上述风险。</string>
|
||||
\n信任此插件证书即代表你愿意承担上述风险。</string>
|
||||
<string name="pref_fullscreen">全屏</string>
|
||||
<string name="pref_page_transitions">页面过渡动画</string>
|
||||
<string name="pref_double_tap_anim_speed">双击动画速度</string>
|
||||
@@ -167,7 +167,7 @@
|
||||
<string name="creating_backup">正在创建备份</string>
|
||||
<string name="pref_clear_chapter_cache">清除章节缓存</string>
|
||||
<string name="used_cache">已使用空间:%1$s</string>
|
||||
<string name="cache_deleted">缓存已清除。%1$d 个文件已被删除</string>
|
||||
<string name="cache_deleted">缓存已清除,%1$d个文件已被删除</string>
|
||||
<string name="cache_delete_error">清除时出现错误</string>
|
||||
<string name="pref_clear_cookies">清除 Cookie</string>
|
||||
<string name="cookies_cleared">Cookie 已清除</string>
|
||||
@@ -301,8 +301,8 @@
|
||||
<string name="action_sort_latest_chapter">作品更新时间</string>
|
||||
<string name="action_view_chapters">查看章节</string>
|
||||
<string name="action_cancel_all">全部取消</string>
|
||||
<string name="theme_light">关闭</string>
|
||||
<string name="theme_dark">开启</string>
|
||||
<string name="theme_light">浅色</string>
|
||||
<string name="theme_dark">深色</string>
|
||||
<string name="theme_system">跟随系统</string>
|
||||
<string name="pref_manage_notifications">通知管理</string>
|
||||
<string name="pref_category_security">隐私</string>
|
||||
@@ -376,7 +376,7 @@
|
||||
<string name="label_data">数据</string>
|
||||
<string name="backup_restore_missing_sources">缺少图源:</string>
|
||||
<string name="invalid_backup_file_missing_manga">备份不包含任何作品。</string>
|
||||
<string name="invalid_backup_file">无效的备份文件</string>
|
||||
<string name="invalid_backup_file">无效的备份文件:</string>
|
||||
<string name="pref_library_update_refresh_metadata_summary">更新书架时一并检查封面和简介是否有变动</string>
|
||||
<string name="pref_library_update_refresh_metadata">自动刷新元数据</string>
|
||||
<string name="action_migrate">迁移</string>
|
||||
@@ -457,9 +457,7 @@
|
||||
<string name="pref_dual_page_split">拆分双页</string>
|
||||
<string name="pref_dual_page_invert">拆分双页时交换顺序</string>
|
||||
<string name="pref_dual_page_invert_summary">拆分双页的顺序与阅读方向不符时可以开启</string>
|
||||
<string name="backup_restore_content_full">即将还原备份文件中的数据。
|
||||
\n
|
||||
\n随后请重新安装所有缺失的插件并重新登录进度记录平台。</string>
|
||||
<string name="backup_restore_content_full">您可能需要安装缺失的插件并登录进度记录平台才能正常使用。</string>
|
||||
<string name="nav_zone_right">右</string>
|
||||
<string name="nav_zone_left">左</string>
|
||||
<string name="nav_zone_next">下一页</string>
|
||||
@@ -559,7 +557,7 @@
|
||||
<string name="clear_database_source_item_count">数据库中有 %1$d 部作品未添加到书架</string>
|
||||
<string name="extension_api_error">无法获取插件列表</string>
|
||||
<string name="privacy_policy">隐私声明</string>
|
||||
<string name="pref_update_only_completely_read">有未读章节</string>
|
||||
<string name="pref_update_only_completely_read">跳过有未读章节的作品</string>
|
||||
<string name="library_errors_help">关于书架更新出错的解决方法,请参阅 %1$s</string>
|
||||
<string name="save_chapter_as_cbz">保存为 CBZ 压缩包</string>
|
||||
<string name="publishing_finished">出版完毕</string>
|
||||
@@ -569,7 +567,7 @@
|
||||
<string name="action_display_cover_only_grid">封面网格</string>
|
||||
<string name="pref_landscape_zoom">自动放大横向图片</string>
|
||||
<string name="pref_navigate_pan">图片放大时先平移再翻页</string>
|
||||
<string name="pref_update_only_started">尚未开始阅读</string>
|
||||
<string name="pref_update_only_started">跳过还未开始阅读的作品</string>
|
||||
<string name="skipped_reason_completed">已跳过,因为作品已完结</string>
|
||||
<string name="skipped_reason_not_caught_up">已跳过,因为有未读章节</string>
|
||||
<string name="skipped_reason_not_started">已跳过,因为尚未开始阅读</string>
|
||||
@@ -579,8 +577,8 @@
|
||||
<string name="action_move_to_top_all_for_series">将作品移到顶部</string>
|
||||
<string name="disabled_nav">关闭</string>
|
||||
<string name="error_saving_picture">保存图片出错</string>
|
||||
<string name="update_check_fdroid_migration_info">新版本可从官方版本中获得。 轻按以了解如何从非官方 F-Droid 版本迁移。</string>
|
||||
<string name="empty_backup_error">没有要备份的库条目</string>
|
||||
<string name="update_check_fdroid_migration_info">官方发布了新版本。 轻按以了解如何从非官方 F-Droid 版本迁移。</string>
|
||||
<string name="empty_backup_error">书架没有可备份的作品</string>
|
||||
<string name="update_check_open">打开 GitHub 页面</string>
|
||||
<string name="webview_data_deleted">已清除 WebView 数据</string>
|
||||
<string name="pref_clear_webview_data">清除 WebView 数据</string>
|
||||
@@ -706,7 +704,7 @@
|
||||
<string name="pref_chapter_swipe_start">向左滑动操作</string>
|
||||
<string name="pref_double_tap_zoom">双击放大</string>
|
||||
<string name="pref_library_columns_per_row">每行 %d 个</string>
|
||||
<string name="pref_update_only_in_release_period">未到预计更新时间</string>
|
||||
<string name="pref_update_only_in_release_period">预计下次更新时间</string>
|
||||
<string name="action_ok">确定</string>
|
||||
<string name="track_delete_title">要删除 %s 的记录吗?</string>
|
||||
<string name="track_delete_remote_text">同时删除 %s 上的数据</string>
|
||||
@@ -747,7 +745,7 @@
|
||||
<string name="relative_time_span_never">从不</string>
|
||||
<string name="pref_flash_page_summ">减少电子墨水屏上的重影</string>
|
||||
<string name="last_auto_backup_info">上次自动备份:%s</string>
|
||||
<string name="pref_flash_page">切页时闪烁白屏</string>
|
||||
<string name="pref_flash_page">切页时闪烁</string>
|
||||
<string name="label_data_storage">数据与存储</string>
|
||||
<string name="pref_storage_usage">存储占用</string>
|
||||
<string name="action_create">创建</string>
|
||||
@@ -766,5 +764,44 @@
|
||||
<string name="onboarding_action_skip">跳过</string>
|
||||
<string name="onboarding_action_next">下一步</string>
|
||||
<string name="action_bar_up_description">向上浏览</string>
|
||||
<string name="onboarding_description">让我们先设置一些东西。你也可以稍后在设置中更改这些。</string>
|
||||
<string name="onboarding_description">让我们先进行一些设置。您也可以稍后在设置中更改这些选项。</string>
|
||||
<string name="onboarding_permission_ignore_battery_opts_description">避免长时间运行的书架更新、下载和备份恢复被中断。</string>
|
||||
<string name="onboarding_permission_action_grant">授权</string>
|
||||
<string name="no_location_set">未设置存储位置</string>
|
||||
<string name="invalid_backup_file_error">完整错误:</string>
|
||||
<string name="onboarding_permission_ignore_battery_opts">后台电池配置</string>
|
||||
<string name="ext_permission_install_apps_warning">需要权限安装插件。点击此处授权。</string>
|
||||
<string name="action_add_repo">添加仓库</string>
|
||||
<string name="private_settings">包含敏感设置(例如进度记录平台的登录令牌)</string>
|
||||
<string name="delete_repo_confirmation">您希望删除仓库\"%s\"吗?</string>
|
||||
<string name="repo_extension_message">此插件来自外部仓库。点击查看该仓库。</string>
|
||||
<string name="error_repo_exists">此仓库已存在!</string>
|
||||
<string name="action_delete_repo">删除仓库</string>
|
||||
<string name="invalid_repo_name">无效的仓库URL</string>
|
||||
<string name="pref_storage_location_info">用于自动备份、章节下载和本地图源。</string>
|
||||
<string name="manga_interval_expected_update">下次更新预计在%1$s天后,每隔%2$s检查一次</string>
|
||||
<string name="manga_interval_custom_amount">自定义更新频率:</string>
|
||||
<string name="onboarding_permission_install_apps">应用安装权限</string>
|
||||
<string name="onboarding_permission_install_apps_description">用以安装图源插件。</string>
|
||||
<string name="onboarding_permission_notifications">通知权限</string>
|
||||
<string name="onboarding_guides_new_user">%s新手?我们建议您查阅入门指南。</string>
|
||||
<string name="onboarding_guides_returning_user">重新安装%s?</string>
|
||||
<string name="pref_library_update_smart_update">智能更新</string>
|
||||
<string name="onboarding_permission_notifications_description">获取书架更新及其他通知。</string>
|
||||
<string name="label_extension_repos">插件仓库</string>
|
||||
<string name="information_empty_repos">您没有设置仓库。</string>
|
||||
<string name="label_add_repo_input">仓库URL</string>
|
||||
<string name="action_add_repo_message">向 Tachiyomi 添加额外仓库。注意是以“index.min.json”结尾的 URL。</string>
|
||||
<string name="manga_interval_header">下次更新</string>
|
||||
<string name="onboarding_storage_help_info">从旧版本升级而来不知如何选择?请参阅存储指南获取更多信息。</string>
|
||||
<string name="onboarding_storage_help_action">存储指南</string>
|
||||
<string name="pref_storage_location">存储位置</string>
|
||||
<string name="onboarding_storage_action_select">选择一个文件夹</string>
|
||||
<string name="onboarding_storage_info">选择文件夹%1$s用以存储下载章节、备份文件及其他。
|
||||
\n
|
||||
\n推荐使用专用文件夹。
|
||||
\n
|
||||
\n已选文件夹:%2$s</string>
|
||||
<string name="onboarding_storage_selection_required">必须选择一个文件夹</string>
|
||||
<string name="available_disk_space_info">可用:%1$s / 全部:%2$s</string>
|
||||
</resources>
|
||||
@@ -80,7 +80,7 @@
|
||||
<string name="all">全部</string>
|
||||
<string name="pref_library_update_restriction">自動更新的裝置限制</string>
|
||||
<string name="charging">充電時</string>
|
||||
<string name="pref_update_only_non_completed">連載已完結</string>
|
||||
<string name="pref_update_only_non_completed">略過已完結的作品</string>
|
||||
<string name="default_category">預設類別</string>
|
||||
<string name="default_category_summary">總是詢問</string>
|
||||
<string name="ext_update">更新</string>
|
||||
@@ -557,7 +557,7 @@
|
||||
<string name="database_clean">無須清理</string>
|
||||
<string name="extension_api_error">擴充套件清單取得失敗</string>
|
||||
<string name="privacy_policy">隱私權政策</string>
|
||||
<string name="pref_update_only_completely_read">有未讀章節</string>
|
||||
<string name="pref_update_only_completely_read">略過有未讀章節的作品</string>
|
||||
<string name="library_errors_help">如欲瞭解如何修復書櫃更新錯誤,請參閱 %1$s</string>
|
||||
<string name="save_chapter_as_cbz">以 CBZ 封存檔格式儲存</string>
|
||||
<string name="on_hiatus">休刊中</string>
|
||||
@@ -567,7 +567,7 @@
|
||||
<string name="pref_landscape_zoom">自動縮放寬頁</string>
|
||||
<string name="pref_navigate_pan">導覽寬頁時先平移後翻頁</string>
|
||||
<string name="action_display_cover_only_grid">純封面格狀</string>
|
||||
<string name="pref_update_only_started">無已讀章節</string>
|
||||
<string name="pref_update_only_started">略過無已讀章節的作品</string>
|
||||
<string name="skipped_reason_completed">由於連載已完結,因此略過</string>
|
||||
<string name="skipped_reason_not_caught_up">由於有未讀章節,因此略過</string>
|
||||
<string name="skipped_reason_not_started">由於無已讀章節,因此略過</string>
|
||||
@@ -718,7 +718,7 @@
|
||||
<string name="action_sort_next_updated">下次預期更新</string>
|
||||
<string name="intervals_header">刊期</string>
|
||||
<string name="manga_display_interval_title">預計每個</string>
|
||||
<string name="pref_update_only_in_release_period">未臨出刊日</string>
|
||||
<string name="pref_update_only_in_release_period">預估出刊日</string>
|
||||
<string name="manga_display_modified_interval_title">設定為每個</string>
|
||||
<string name="skipped_reason_not_in_release_period">由於未臨出刊日,因此略過</string>
|
||||
<string name="has_results">有結果</string>
|
||||
@@ -767,7 +767,7 @@
|
||||
<string name="onboarding_action_finish">開始使用</string>
|
||||
<string name="onboarding_storage_selection_required">必須選擇一個資料夾</string>
|
||||
<string name="onboarding_heading">歡迎!</string>
|
||||
<string name="onboarding_guides_returning_user">已是 %s 的既有使用者?</string>
|
||||
<string name="onboarding_guides_returning_user">重新安裝 %s?</string>
|
||||
<string name="onboarding_action_skip">略過</string>
|
||||
<string name="onboarding_action_next">下一步</string>
|
||||
<string name="onboarding_description">讓我們先設定一些東西。稍後你隨時可至設定中變更這些選項。</string>
|
||||
@@ -787,7 +787,7 @@
|
||||
<string name="available_disk_space_info">可用:%1$s / 總計:%2$s</string>
|
||||
<string name="ext_permission_install_apps_warning">缺少安裝擴充套件所需的權限。輕觸此處以授予。</string>
|
||||
<string name="private_settings">包含敏感設定 (如:歷程平台登入權杖)</string>
|
||||
<string name="manga_interval_expected_update">預計再 %s左右出刊</string>
|
||||
<string name="manga_interval_expected_update">預計 %1$s後出刊,每 %2$s檢查一次</string>
|
||||
<string name="invalid_backup_file_error">完整錯誤訊息:</string>
|
||||
<string name="repo_extension_message">此擴充套件來自外部儲存庫,輕觸以檢視該儲存庫。</string>
|
||||
<string name="manga_interval_custom_amount">自訂更新頻率:</string>
|
||||
@@ -801,4 +801,6 @@
|
||||
<string name="action_add_repo">新增儲存庫</string>
|
||||
<string name="information_empty_repos">尚未新增任何儲存庫</string>
|
||||
<string name="label_extension_repos">擴充套件儲存庫</string>
|
||||
<string name="onboarding_storage_help_action">儲存空間指南</string>
|
||||
<string name="onboarding_storage_help_info">從舊版升級而不確定該如何選擇嗎?請參閱儲存空間指南以取得更多資訊。</string>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user