diff --git a/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt index 1b8b48a1e..8e6c7913b 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt @@ -40,11 +40,14 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp +import cafe.adriel.voyager.navigator.LocalNavigator +import cafe.adriel.voyager.navigator.currentOrThrow import dev.icerock.moko.resources.StringResource import eu.kanade.presentation.browse.components.BaseBrowseItem import eu.kanade.presentation.browse.components.ExtensionIcon import eu.kanade.presentation.components.WarningBanner import eu.kanade.presentation.manga.components.DotSeparatorNoSpaceText +import eu.kanade.presentation.more.settings.screen.browse.ExtensionReposScreen import eu.kanade.presentation.util.rememberRequestPackageInstallsPermissionState import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.model.InstallStep @@ -52,6 +55,7 @@ import eu.kanade.tachiyomi.ui.browse.extension.ExtensionUiModel import eu.kanade.tachiyomi.ui.browse.extension.ExtensionsScreenModel import eu.kanade.tachiyomi.util.system.LocaleHelper import eu.kanade.tachiyomi.util.system.launchRequestPackageInstallsPermission +import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.material.PullRefresh @@ -59,6 +63,7 @@ import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.components.material.topSmallPaddingValues import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen +import tachiyomi.presentation.core.screens.EmptyScreenAction import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.presentation.core.theme.header import tachiyomi.presentation.core.util.plus @@ -80,6 +85,8 @@ fun ExtensionScreen( onClickUpdateAll: () -> Unit, onRefresh: () -> Unit, ) { + val navigator = LocalNavigator.currentOrThrow + PullRefresh( refreshing = state.isRefreshing, onRefresh = onRefresh, @@ -96,6 +103,13 @@ fun ExtensionScreen( EmptyScreen( stringRes = msg, modifier = Modifier.padding(contentPadding), + actions = persistentListOf( + EmptyScreenAction( + stringRes = MR.strings.label_extension_repos, + icon = Icons.Outlined.Settings, + onClick = { navigator.push(ExtensionReposScreen()) }, + ), + ), ) } else -> { diff --git a/app/src/main/java/eu/kanade/presentation/components/EmptyScreen.kt b/app/src/main/java/eu/kanade/presentation/components/EmptyScreen.kt index ddcf22cb4..5355318a9 100644 --- a/app/src/main/java/eu/kanade/presentation/components/EmptyScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/components/EmptyScreen.kt @@ -6,7 +6,7 @@ import androidx.compose.material.icons.outlined.Refresh import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.PreviewLightDark -import eu.kanade.presentation.theme.TachiyomiTheme +import eu.kanade.presentation.theme.TachiyomiPreviewTheme import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR import tachiyomi.presentation.core.screens.EmptyScreen @@ -15,7 +15,7 @@ import tachiyomi.presentation.core.screens.EmptyScreenAction @PreviewLightDark @Composable private fun NoActionPreview() { - TachiyomiTheme { + TachiyomiPreviewTheme { Surface { EmptyScreen( stringRes = MR.strings.empty_screen, @@ -27,7 +27,7 @@ private fun NoActionPreview() { @PreviewLightDark @Composable private fun WithActionPreview() { - TachiyomiTheme { + TachiyomiPreviewTheme { Surface { EmptyScreen( stringRes = MR.strings.empty_screen, diff --git a/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt b/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt index 81ad61f2a..9dae3de14 100644 --- a/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt @@ -101,6 +101,6 @@ data class TabContent( val titleRes: StringResource, val badgeNumber: Int? = null, val searchEnabled: Boolean = false, - val actions: ImmutableList = persistentListOf(), + val actions: ImmutableList = persistentListOf(), val content: @Composable (contentPadding: PaddingValues, snackbarHostState: SnackbarHostState) -> Unit, ) diff --git a/app/src/main/java/eu/kanade/presentation/crash/CrashScreen.kt b/app/src/main/java/eu/kanade/presentation/crash/CrashScreen.kt index 5504f13cc..fd8b27030 100644 --- a/app/src/main/java/eu/kanade/presentation/crash/CrashScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/crash/CrashScreen.kt @@ -14,7 +14,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.tooling.preview.PreviewLightDark -import eu.kanade.presentation.theme.TachiyomiTheme +import eu.kanade.presentation.theme.TachiyomiPreviewTheme import eu.kanade.tachiyomi.util.CrashLogUtil import kotlinx.coroutines.launch import tachiyomi.i18n.MR @@ -63,7 +63,7 @@ fun CrashScreen( @PreviewLightDark @Composable private fun CrashScreenPreview() { - TachiyomiTheme { + TachiyomiPreviewTheme { CrashScreen(exception = RuntimeException("Dummy")) {} } } diff --git a/app/src/main/java/eu/kanade/presentation/history/HistoryScreen.kt b/app/src/main/java/eu/kanade/presentation/history/HistoryScreen.kt index a4c47af5e..ec25769dc 100644 --- a/app/src/main/java/eu/kanade/presentation/history/HistoryScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/history/HistoryScreen.kt @@ -17,7 +17,7 @@ import eu.kanade.presentation.components.AppBarTitle import eu.kanade.presentation.components.SearchToolbar import eu.kanade.presentation.components.relativeDateText import eu.kanade.presentation.history.components.HistoryItem -import eu.kanade.presentation.theme.TachiyomiTheme +import eu.kanade.presentation.theme.TachiyomiPreviewTheme import eu.kanade.tachiyomi.ui.history.HistoryScreenModel import kotlinx.collections.immutable.persistentListOf import tachiyomi.domain.history.model.HistoryWithRelations @@ -143,7 +143,7 @@ internal fun HistoryScreenPreviews( @PreviewParameter(HistoryScreenModelStateProvider::class) historyState: HistoryScreenModel.State, ) { - TachiyomiTheme { + TachiyomiPreviewTheme { HistoryScreen( state = historyState, snackbarHostState = SnackbarHostState(), diff --git a/app/src/main/java/eu/kanade/presentation/history/components/HistoryDialogs.kt b/app/src/main/java/eu/kanade/presentation/history/components/HistoryDialogs.kt index 9aaaa6bdd..1d242cdea 100644 --- a/app/src/main/java/eu/kanade/presentation/history/components/HistoryDialogs.kt +++ b/app/src/main/java/eu/kanade/presentation/history/components/HistoryDialogs.kt @@ -12,7 +12,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.tooling.preview.PreviewLightDark -import eu.kanade.presentation.theme.TachiyomiTheme +import eu.kanade.presentation.theme.TachiyomiPreviewTheme import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox import tachiyomi.presentation.core.components.material.padding @@ -91,7 +91,7 @@ fun HistoryDeleteAllDialog( @PreviewLightDark @Composable private fun HistoryDeleteDialogPreview() { - TachiyomiTheme { + TachiyomiPreviewTheme { HistoryDeleteDialog( onDismissRequest = {}, onDelete = {}, diff --git a/app/src/main/java/eu/kanade/presentation/history/components/HistoryItem.kt b/app/src/main/java/eu/kanade/presentation/history/components/HistoryItem.kt index 846903b1b..4298ba43c 100644 --- a/app/src/main/java/eu/kanade/presentation/history/components/HistoryItem.kt +++ b/app/src/main/java/eu/kanade/presentation/history/components/HistoryItem.kt @@ -23,7 +23,7 @@ import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import eu.kanade.presentation.manga.components.MangaCover -import eu.kanade.presentation.theme.TachiyomiTheme +import eu.kanade.presentation.theme.TachiyomiPreviewTheme import eu.kanade.presentation.util.formatChapterNumber import eu.kanade.tachiyomi.util.lang.toTimestampString import tachiyomi.domain.history.model.HistoryWithRelations @@ -98,7 +98,7 @@ private fun HistoryItemPreviews( @PreviewParameter(HistoryWithRelationsProvider::class) historyWithRelations: HistoryWithRelations, ) { - TachiyomiTheme { + TachiyomiPreviewTheme { Surface { HistoryItem( history = historyWithRelations, diff --git a/app/src/main/java/eu/kanade/presentation/library/components/LibraryBadges.kt b/app/src/main/java/eu/kanade/presentation/library/components/LibraryBadges.kt index 608edb8f4..5d0222cf4 100644 --- a/app/src/main/java/eu/kanade/presentation/library/components/LibraryBadges.kt +++ b/app/src/main/java/eu/kanade/presentation/library/components/LibraryBadges.kt @@ -6,7 +6,7 @@ import androidx.compose.material.icons.outlined.Folder import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.PreviewLightDark -import eu.kanade.presentation.theme.TachiyomiTheme +import eu.kanade.presentation.theme.TachiyomiPreviewTheme import tachiyomi.presentation.core.components.Badge @Composable @@ -50,7 +50,7 @@ internal fun LanguageBadge( @PreviewLightDark @Composable private fun BadgePreview() { - TachiyomiTheme { + TachiyomiPreviewTheme { Column { DownloadsBadge(count = 10) UnreadBadge(count = 10) diff --git a/app/src/main/java/eu/kanade/presentation/library/components/LibraryToolbar.kt b/app/src/main/java/eu/kanade/presentation/library/components/LibraryToolbar.kt index 9845ca816..6853ad595 100644 --- a/app/src/main/java/eu/kanade/presentation/library/components/LibraryToolbar.kt +++ b/app/src/main/java/eu/kanade/presentation/library/components/LibraryToolbar.kt @@ -37,6 +37,7 @@ fun LibraryToolbar( onClickRefresh: () -> Unit, onClickGlobalUpdate: () -> Unit, onClickOpenRandomManga: () -> Unit, + onClickSyncNow: () -> Unit, searchQuery: String?, onSearchQueryChange: (String?) -> Unit, scrollBehavior: TopAppBarScrollBehavior?, @@ -56,6 +57,7 @@ fun LibraryToolbar( onClickRefresh = onClickRefresh, onClickGlobalUpdate = onClickGlobalUpdate, onClickOpenRandomManga = onClickOpenRandomManga, + onClickSyncNow = onClickSyncNow, scrollBehavior = scrollBehavior, ) } @@ -70,6 +72,7 @@ private fun LibraryRegularToolbar( onClickRefresh: () -> Unit, onClickGlobalUpdate: () -> Unit, onClickOpenRandomManga: () -> Unit, + onClickSyncNow: () -> Unit, scrollBehavior: TopAppBarScrollBehavior?, ) { val pillAlpha = if (isSystemInDarkTheme()) 0.12f else 0.08f @@ -115,6 +118,10 @@ private fun LibraryRegularToolbar( title = stringResource(MR.strings.action_open_random_manga), onClick = onClickOpenRandomManga, ), + AppBar.OverflowAction( + title = stringResource(MR.strings.sync_library), + onClick = onClickSyncNow, + ), ), ) }, diff --git a/app/src/main/java/eu/kanade/presentation/manga/components/MissingChapterCountListItem.kt b/app/src/main/java/eu/kanade/presentation/manga/components/MissingChapterCountListItem.kt index e40f1bd69..baca38c34 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/components/MissingChapterCountListItem.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/components/MissingChapterCountListItem.kt @@ -11,7 +11,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.PreviewLightDark -import eu.kanade.presentation.theme.TachiyomiTheme +import eu.kanade.presentation.theme.TachiyomiPreviewTheme import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.pluralStringResource @@ -44,7 +44,7 @@ fun MissingChapterCountListItem( @PreviewLightDark @Composable private fun Preview() { - TachiyomiTheme { + TachiyomiPreviewTheme { Surface { MissingChapterCountListItem(count = 42) } diff --git a/app/src/main/java/eu/kanade/presentation/more/NewUpdateScreen.kt b/app/src/main/java/eu/kanade/presentation/more/NewUpdateScreen.kt index 96fd421dd..3d561b0c3 100644 --- a/app/src/main/java/eu/kanade/presentation/more/NewUpdateScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/NewUpdateScreen.kt @@ -19,7 +19,7 @@ import com.halilibo.richtext.markdown.Markdown import com.halilibo.richtext.ui.RichTextStyle import com.halilibo.richtext.ui.material3.RichText import com.halilibo.richtext.ui.string.RichTextStringStyle -import eu.kanade.presentation.theme.TachiyomiTheme +import eu.kanade.presentation.theme.TachiyomiPreviewTheme import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource @@ -69,7 +69,7 @@ fun NewUpdateScreen( @PreviewLightDark @Composable private fun NewUpdateScreenPreview() { - TachiyomiTheme { + TachiyomiPreviewTheme { NewUpdateScreen( versionName = "v0.99.9", changelogInfo = """ diff --git a/app/src/main/java/eu/kanade/presentation/more/onboarding/GuidesStep.kt b/app/src/main/java/eu/kanade/presentation/more/onboarding/GuidesStep.kt index ca4485966..5a095b0ef 100644 --- a/app/src/main/java/eu/kanade/presentation/more/onboarding/GuidesStep.kt +++ b/app/src/main/java/eu/kanade/presentation/more/onboarding/GuidesStep.kt @@ -13,7 +13,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp -import eu.kanade.presentation.theme.TachiyomiTheme +import eu.kanade.presentation.theme.TachiyomiPreviewTheme import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource @@ -61,7 +61,7 @@ const val GETTING_STARTED_URL = "https://tachiyomi.org/docs/guides/getting-start @PreviewLightDark @Composable private fun GuidesStepPreview() { - TachiyomiTheme { + TachiyomiPreviewTheme { GuidesStep( onRestoreBackup = {}, ).Content() diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt index cfa75067d..0b4354136 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt @@ -40,6 +40,7 @@ import eu.kanade.presentation.more.settings.screen.data.CreateBackupScreen import eu.kanade.presentation.more.settings.screen.data.RestoreBackupScreen import eu.kanade.presentation.more.settings.screen.data.StorageInfo import eu.kanade.presentation.more.settings.screen.data.SyncOptionsScreen +import eu.kanade.presentation.more.settings.screen.data.SyncSettingsSelector import eu.kanade.presentation.more.settings.widget.BasePreferenceWidget import eu.kanade.presentation.more.settings.widget.PrefsHorizontalPadding import eu.kanade.presentation.util.relativeTimeSpanString @@ -463,24 +464,7 @@ object SettingsDataScreen : SearchableSettings { @Composable private fun getSyncNowPref(): Preference.PreferenceGroup { - val scope = rememberCoroutineScope() - var showDialog by remember { mutableStateOf(false) } - val context = LocalContext.current - if (showDialog) { - SyncConfirmationDialog( - onConfirm = { - showDialog = false - scope.launch { - if (!SyncDataJob.isAnyJobRunning(context)) { - SyncDataJob.startNow(context) - } else { - context.toast(MR.strings.sync_in_progress) - } - } - }, - onDismissRequest = { showDialog = false }, - ) - } + val navigator = LocalNavigator.currentOrThrow return Preference.PreferenceGroup( title = stringResource(MR.strings.pref_sync_now_group_title), preferenceItems = persistentListOf( @@ -489,7 +473,7 @@ object SettingsDataScreen : SearchableSettings { title = stringResource(MR.strings.pref_sync_now), subtitle = stringResource(MR.strings.pref_sync_now_subtitle), onClick = { - showDialog = true + navigator.push(SyncSettingsSelector()) }, ), ), @@ -540,26 +524,4 @@ object SettingsDataScreen : SearchableSettings { ), ) } - - @Composable - private fun SyncConfirmationDialog( - onConfirm: () -> Unit, - onDismissRequest: () -> Unit, - ) { - AlertDialog( - onDismissRequest = onDismissRequest, - title = { Text(text = stringResource(MR.strings.pref_sync_confirmation_title)) }, - text = { Text(text = stringResource(MR.strings.pref_sync_confirmation_message)) }, - dismissButton = { - TextButton(onClick = onDismissRequest) { - Text(text = stringResource(MR.strings.action_cancel)) - } - }, - confirmButton = { - TextButton(onClick = onConfirm) { - Text(text = stringResource(MR.strings.action_ok)) - } - }, - ) - } } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposContent.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposContent.kt index 3d4772836..7d837b32d 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposContent.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposContent.kt @@ -9,6 +9,7 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.Label +import androidx.compose.material.icons.outlined.ContentCopy import androidx.compose.material.icons.outlined.Delete import androidx.compose.material3.ElevatedCard import androidx.compose.material3.Icon @@ -18,8 +19,12 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import eu.kanade.tachiyomi.util.system.copyToClipboard import kotlinx.collections.immutable.ImmutableSet +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource @Composable fun ExtensionReposContent( @@ -53,6 +58,8 @@ private fun ExtensionRepoListItem( onDelete: () -> Unit, modifier: Modifier = Modifier, ) { + val context = LocalContext.current + ElevatedCard( modifier = modifier, ) { @@ -74,8 +81,23 @@ private fun ExtensionRepoListItem( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.End, ) { + IconButton( + onClick = { + val url = "$repo/index.min.json" + context.copyToClipboard(url, url) + }, + ) { + Icon( + imageVector = Icons.Outlined.ContentCopy, + contentDescription = stringResource(MR.strings.action_copy_to_clipboard), + ) + } + IconButton(onClick = onDelete) { - Icon(imageVector = Icons.Outlined.Delete, contentDescription = null) + Icon( + imageVector = Icons.Outlined.Delete, + contentDescription = stringResource(MR.strings.action_delete), + ) } } } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/data/SyncSettingsSelector.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/data/SyncSettingsSelector.kt new file mode 100644 index 000000000..a13aa5c28 --- /dev/null +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/data/SyncSettingsSelector.kt @@ -0,0 +1,142 @@ +package eu.kanade.presentation.more.settings.screen.data + +import android.content.Context +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.platform.LocalContext +import cafe.adriel.voyager.core.model.StateScreenModel +import cafe.adriel.voyager.core.model.rememberScreenModel +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.data.backup.create.BackupOptions +import eu.kanade.tachiyomi.data.sync.SyncDataJob +import eu.kanade.tachiyomi.util.system.toast +import kotlinx.collections.immutable.ImmutableList +import kotlinx.coroutines.flow.update +import tachiyomi.domain.sync.SyncOptions +import tachiyomi.domain.sync.SyncPreferences +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.components.LabeledCheckbox +import tachiyomi.presentation.core.components.LazyColumnWithAction +import tachiyomi.presentation.core.components.SectionCard +import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get + +class SyncSettingsSelector : Screen() { + @Composable + override fun Content() { + val context = LocalContext.current + val navigator = LocalNavigator.currentOrThrow + val model = rememberScreenModel { SyncSettingsSelectorModel() } + val state by model.state.collectAsState() + + Scaffold( + topBar = { + AppBar( + title = stringResource(MR.strings.pref_choose_what_to_sync), + navigateUp = navigator::pop, + scrollBehavior = it, + ) + }, + ) { contentPadding -> + LazyColumnWithAction( + contentPadding = contentPadding, + actionLabel = stringResource(MR.strings.label_sync), + actionEnabled = state.options.anyEnabled(), + onClickAction = { + if (!SyncDataJob.isAnyJobRunning(context)) { + model.syncNow(context) + navigator.pop() + } else { + context.toast(MR.strings.sync_in_progress) + } + }, + ) { + item { + SectionCard(MR.strings.label_library) { + Options(BackupOptions.libraryOptions, state, model) + } + } + + item { + SectionCard(MR.strings.label_settings) { + Options(BackupOptions.settingsOptions, state, model) + } + } + } + } + } + + @Composable + private fun Options( + options: ImmutableList, + state: SyncSettingsSelectorModel.State, + model: SyncSettingsSelectorModel, + ) { + options.forEach { option -> + LabeledCheckbox( + label = stringResource(option.label), + checked = option.getter(state.options), + onCheckedChange = { + model.toggle(option.setter, it) + }, + enabled = option.enabled(state.options), + ) + } + } +} + +private class SyncSettingsSelectorModel( + val syncPreferences: SyncPreferences = Injekt.get(), +) : StateScreenModel( + State(syncOptionsToBackupOptions(syncPreferences.getSyncOptions())), +) { + fun toggle(setter: (BackupOptions, Boolean) -> BackupOptions, enabled: Boolean) { + mutableState.update { + val updatedOptions = setter(it.options, enabled) + syncPreferences.setSyncOptions(backupOptionsToSyncOptions(updatedOptions)) + it.copy(options = updatedOptions) + } + } + + fun syncNow(context: Context) { + SyncDataJob.startNow(context) + } + + @Immutable + data class State( + val options: BackupOptions = BackupOptions(), + ) companion object { + private fun syncOptionsToBackupOptions(syncOptions: SyncOptions): BackupOptions { + return BackupOptions( + libraryEntries = syncOptions.libraryEntries, + categories = syncOptions.categories, + chapters = syncOptions.chapters, + tracking = syncOptions.tracking, + history = syncOptions.history, + appSettings = syncOptions.appSettings, + sourceSettings = syncOptions.sourceSettings, + privateSettings = syncOptions.privateSettings, + ) + } + + private fun backupOptionsToSyncOptions(backupOptions: BackupOptions): SyncOptions { + return SyncOptions( + libraryEntries = backupOptions.libraryEntries, + categories = backupOptions.categories, + chapters = backupOptions.chapters, + tracking = backupOptions.tracking, + history = backupOptions.history, + appSettings = backupOptions.appSettings, + sourceSettings = backupOptions.sourceSettings, + privateSettings = backupOptions.privateSettings, + ) + } + } +} diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/widget/AppThemePreferenceWidget.kt b/app/src/main/java/eu/kanade/presentation/more/settings/widget/AppThemePreferenceWidget.kt index 2be6e03a4..b9dbbbfb8 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/widget/AppThemePreferenceWidget.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/widget/AppThemePreferenceWidget.kt @@ -42,15 +42,19 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp import androidx.core.app.ActivityCompat +import eu.kanade.domain.ui.UiPreferences import eu.kanade.domain.ui.model.AppTheme import eu.kanade.presentation.manga.components.MangaCover import eu.kanade.presentation.theme.TachiyomiTheme import eu.kanade.tachiyomi.util.system.DeviceUtil import eu.kanade.tachiyomi.util.system.isDynamicColorAvailable +import tachiyomi.core.preference.InMemoryPreferenceStore import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.secondaryItemAlpha +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.fullType @Composable internal fun AppThemePreferenceWidget( @@ -258,7 +262,8 @@ fun AppThemePreviewItem( @Composable private fun AppThemesListPreview() { var appTheme by remember { mutableStateOf(AppTheme.DEFAULT) } - TachiyomiTheme { + Injekt.addSingleton(fullType(), UiPreferences(InMemoryPreferenceStore())) + TachiyomiTheme(appTheme = appTheme) { Surface { AppThemesList( currentTheme = appTheme, diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/widget/InfoWidget.kt b/app/src/main/java/eu/kanade/presentation/more/settings/widget/InfoWidget.kt index 5d9d8db85..46fee1e1c 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/widget/InfoWidget.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/widget/InfoWidget.kt @@ -12,7 +12,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.PreviewLightDark -import eu.kanade.presentation.theme.TachiyomiTheme +import eu.kanade.presentation.theme.TachiyomiPreviewTheme import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource @@ -43,7 +43,7 @@ internal fun InfoWidget(text: String) { @PreviewLightDark @Composable private fun InfoWidgetPreview() { - TachiyomiTheme { + TachiyomiPreviewTheme { Surface { InfoWidget(text = stringResource(MR.strings.download_ahead_info)) } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/widget/SwitchPreferenceWidget.kt b/app/src/main/java/eu/kanade/presentation/more/settings/widget/SwitchPreferenceWidget.kt index bc026d3ba..41690242d 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/widget/SwitchPreferenceWidget.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/widget/SwitchPreferenceWidget.kt @@ -10,7 +10,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.tooling.preview.PreviewLightDark -import eu.kanade.presentation.theme.TachiyomiTheme +import eu.kanade.presentation.theme.TachiyomiPreviewTheme @Composable fun SwitchPreferenceWidget( @@ -40,7 +40,7 @@ fun SwitchPreferenceWidget( @PreviewLightDark @Composable private fun SwitchPreferenceWidgetPreview() { - TachiyomiTheme { + TachiyomiPreviewTheme { Surface { Column { SwitchPreferenceWidget( diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/widget/TextPreferenceWidget.kt b/app/src/main/java/eu/kanade/presentation/more/settings/widget/TextPreferenceWidget.kt index 05bd7f85d..f3423d8e4 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/widget/TextPreferenceWidget.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/widget/TextPreferenceWidget.kt @@ -13,7 +13,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.tooling.preview.PreviewLightDark -import eu.kanade.presentation.theme.TachiyomiTheme +import eu.kanade.presentation.theme.TachiyomiPreviewTheme import tachiyomi.presentation.core.util.secondaryItemAlpha @Composable @@ -62,7 +62,7 @@ fun TextPreferenceWidget( @PreviewLightDark @Composable private fun TextPreferenceWidgetPreview() { - TachiyomiTheme { + TachiyomiPreviewTheme { Surface { Column { TextPreferenceWidget( diff --git a/app/src/main/java/eu/kanade/presentation/reader/ChapterTransition.kt b/app/src/main/java/eu/kanade/presentation/reader/ChapterTransition.kt index d464382c3..5fb749828 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/ChapterTransition.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/ChapterTransition.kt @@ -33,7 +33,7 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import eu.kanade.presentation.theme.TachiyomiTheme +import eu.kanade.presentation.theme.TachiyomiPreviewTheme import eu.kanade.tachiyomi.data.database.models.toDomainChapter import eu.kanade.tachiyomi.ui.reader.model.ChapterTransition import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter @@ -306,7 +306,7 @@ private val FakeChapterLongTitle = previewChapter( @PreviewLightDark @Composable private fun TransitionTextPreview() { - TachiyomiTheme { + TachiyomiPreviewTheme { Surface(modifier = Modifier.padding(48.dp)) { ChapterTransition( transition = ChapterTransition.Next(ReaderChapter(FakeChapter), ReaderChapter(FakeChapter)), @@ -320,7 +320,7 @@ private fun TransitionTextPreview() { @PreviewLightDark @Composable private fun TransitionTextLongTitlePreview() { - TachiyomiTheme { + TachiyomiPreviewTheme { Surface(modifier = Modifier.padding(48.dp)) { ChapterTransition( transition = ChapterTransition.Next(ReaderChapter(FakeChapterLongTitle), ReaderChapter(FakeChapter)), @@ -334,7 +334,7 @@ private fun TransitionTextLongTitlePreview() { @PreviewLightDark @Composable private fun TransitionTextWithGapPreview() { - TachiyomiTheme { + TachiyomiPreviewTheme { Surface(modifier = Modifier.padding(48.dp)) { ChapterTransition( transition = ChapterTransition.Next(ReaderChapter(FakeChapter), ReaderChapter(FakeGapChapter)), @@ -348,7 +348,7 @@ private fun TransitionTextWithGapPreview() { @PreviewLightDark @Composable private fun TransitionTextNoNextPreview() { - TachiyomiTheme { + TachiyomiPreviewTheme { Surface(modifier = Modifier.padding(48.dp)) { ChapterTransition( transition = ChapterTransition.Next(ReaderChapter(FakeChapter), null), @@ -362,7 +362,7 @@ private fun TransitionTextNoNextPreview() { @PreviewLightDark @Composable private fun TransitionTextNoPreviousPreview() { - TachiyomiTheme { + TachiyomiPreviewTheme { Surface(modifier = Modifier.padding(48.dp)) { ChapterTransition( transition = ChapterTransition.Prev(ReaderChapter(FakeChapter), null), diff --git a/app/src/main/java/eu/kanade/presentation/reader/OrientationSelectDialog.kt b/app/src/main/java/eu/kanade/presentation/reader/OrientationSelectDialog.kt index 22a02444c..5943dd65a 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/OrientationSelectDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/OrientationSelectDialog.kt @@ -16,7 +16,7 @@ import dev.icerock.moko.resources.StringResource import eu.kanade.domain.manga.model.readerOrientation import eu.kanade.presentation.components.AdaptiveSheet import eu.kanade.presentation.reader.components.ModeSelectionDialog -import eu.kanade.presentation.theme.TachiyomiTheme +import eu.kanade.presentation.theme.TachiyomiPreviewTheme import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel import tachiyomi.i18n.MR @@ -81,7 +81,7 @@ private fun DialogContent( @PreviewLightDark @Composable private fun DialogContentPreview() { - TachiyomiTheme { + TachiyomiPreviewTheme { Surface { Column { DialogContent( diff --git a/app/src/main/java/eu/kanade/presentation/reader/PageIndicatorText.kt b/app/src/main/java/eu/kanade/presentation/reader/PageIndicatorText.kt index ab2b05095..3dd057a56 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/PageIndicatorText.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/PageIndicatorText.kt @@ -12,7 +12,7 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.sp -import eu.kanade.presentation.theme.TachiyomiTheme +import eu.kanade.presentation.theme.TachiyomiPreviewTheme @Composable fun PageIndicatorText( @@ -51,7 +51,7 @@ fun PageIndicatorText( @PreviewLightDark @Composable private fun PageIndicatorTextPreview() { - TachiyomiTheme { + TachiyomiPreviewTheme { Surface { PageIndicatorText(currentPage = 10, totalPages = 69) } diff --git a/app/src/main/java/eu/kanade/presentation/reader/ReadingModeSelectDialog.kt b/app/src/main/java/eu/kanade/presentation/reader/ReadingModeSelectDialog.kt index 25c0893c6..20e219c7e 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/ReadingModeSelectDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/ReadingModeSelectDialog.kt @@ -18,7 +18,7 @@ import dev.icerock.moko.resources.StringResource import eu.kanade.domain.manga.model.readingMode import eu.kanade.presentation.components.AdaptiveSheet import eu.kanade.presentation.reader.components.ModeSelectionDialog -import eu.kanade.presentation.theme.TachiyomiTheme +import eu.kanade.presentation.theme.TachiyomiPreviewTheme import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode import tachiyomi.i18n.MR @@ -79,7 +79,7 @@ private fun DialogContent( @PreviewLightDark @Composable private fun DialogContentPreview() { - TachiyomiTheme { + TachiyomiPreviewTheme { Surface { Column { DialogContent( diff --git a/app/src/main/java/eu/kanade/presentation/reader/components/ModeSelectionDialog.kt b/app/src/main/java/eu/kanade/presentation/reader/components/ModeSelectionDialog.kt index 683534e9a..c6286bf22 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/components/ModeSelectionDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/components/ModeSelectionDialog.kt @@ -19,7 +19,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp -import eu.kanade.presentation.theme.TachiyomiTheme +import eu.kanade.presentation.theme.TachiyomiPreviewTheme import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.SettingsItemsPaddings import tachiyomi.presentation.core.components.material.padding @@ -70,7 +70,7 @@ fun ModeSelectionDialog( @PreviewLightDark @Composable private fun Preview() { - TachiyomiTheme { + TachiyomiPreviewTheme { Surface { Column { ModeSelectionDialog( diff --git a/app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt b/app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt index fd650f53c..4dd9a9754 100644 --- a/app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt +++ b/app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt @@ -28,9 +28,30 @@ fun TachiyomiTheme( appTheme: AppTheme? = null, amoled: Boolean? = null, content: @Composable () -> Unit, +) { + val uiPreferences = Injekt.get() + BaseTachiyomiTheme( + appTheme = appTheme ?: uiPreferences.appTheme().get(), + isAmoled = amoled ?: uiPreferences.themeDarkAmoled().get(), + content = content, + ) +} + +@Composable +fun TachiyomiPreviewTheme( + appTheme: AppTheme = AppTheme.DEFAULT, + isAmoled: Boolean = false, + content: @Composable () -> Unit, +) = BaseTachiyomiTheme(appTheme, isAmoled, content) + +@Composable +private fun BaseTachiyomiTheme( + appTheme: AppTheme, + isAmoled: Boolean, + content: @Composable () -> Unit, ) { MaterialTheme( - colorScheme = getThemeColorScheme(appTheme, amoled), + colorScheme = getThemeColorScheme(appTheme, isAmoled), content = content, ) } @@ -38,11 +59,10 @@ fun TachiyomiTheme( @Composable @ReadOnlyComposable private fun getThemeColorScheme( - appTheme: AppTheme?, - amoled: Boolean?, + appTheme: AppTheme, + isAmoled: Boolean, ): ColorScheme { - val uiPreferences = Injekt.get() - val colorScheme = when (appTheme ?: uiPreferences.appTheme().get()) { + val colorScheme = when (appTheme) { AppTheme.DEFAULT -> TachiyomiColorScheme AppTheme.MONET -> MonetColorScheme(LocalContext.current) AppTheme.GREEN_APPLE -> GreenAppleColorScheme @@ -59,6 +79,6 @@ private fun getThemeColorScheme( } return colorScheme.getColorScheme( isSystemInDarkTheme(), - amoled ?: uiPreferences.themeDarkAmoled().get(), + isAmoled, ) } diff --git a/app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogHome.kt b/app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogHome.kt index 0aec41dce..2dd518f3a 100644 --- a/app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogHome.kt +++ b/app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogHome.kt @@ -48,7 +48,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import dev.icerock.moko.resources.StringResource import eu.kanade.presentation.components.DropdownMenu -import eu.kanade.presentation.theme.TachiyomiTheme +import eu.kanade.presentation.theme.TachiyomiPreviewTheme import eu.kanade.presentation.track.components.TrackLogoIcon import eu.kanade.tachiyomi.data.track.Tracker import eu.kanade.tachiyomi.ui.manga.track.TrackItem @@ -323,7 +323,7 @@ private fun TrackInfoDialogHomePreviews( @PreviewParameter(TrackInfoDialogHomePreviewProvider::class) content: @Composable () -> Unit, ) { - TachiyomiTheme { + TachiyomiPreviewTheme { Surface { content() } diff --git a/app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogSelector.kt b/app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogSelector.kt index 3531df865..a2c8cc918 100644 --- a/app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogSelector.kt +++ b/app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogSelector.kt @@ -32,7 +32,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp import dev.icerock.moko.resources.StringResource -import eu.kanade.presentation.theme.TachiyomiTheme +import eu.kanade.presentation.theme.TachiyomiPreviewTheme import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentMapOf import kotlinx.collections.immutable.toImmutableList @@ -229,7 +229,7 @@ private fun BaseSelector( @PreviewLightDark @Composable private fun TrackStatusSelectorPreviews() { - TachiyomiTheme { + TachiyomiPreviewTheme { Surface { TrackStatusSelector( selection = 1, diff --git a/app/src/main/java/eu/kanade/presentation/track/TrackerSearch.kt b/app/src/main/java/eu/kanade/presentation/track/TrackerSearch.kt index 08738c2ee..1a2ef7800 100644 --- a/app/src/main/java/eu/kanade/presentation/track/TrackerSearch.kt +++ b/app/src/main/java/eu/kanade/presentation/track/TrackerSearch.kt @@ -68,7 +68,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import eu.kanade.presentation.components.DropdownMenu import eu.kanade.presentation.manga.components.MangaCover -import eu.kanade.presentation.theme.TachiyomiTheme +import eu.kanade.presentation.theme.TachiyomiPreviewTheme import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.util.system.openInBrowser import tachiyomi.i18n.MR @@ -380,5 +380,5 @@ private fun TrackerSearchPreviews( @PreviewParameter(TrackerSearchPreviewProvider::class) content: @Composable () -> Unit, ) { - TachiyomiTheme { content() } + TachiyomiPreviewTheme { content() } } diff --git a/app/src/main/java/eu/kanade/presentation/track/components/TrackLogoIcon.kt b/app/src/main/java/eu/kanade/presentation/track/components/TrackLogoIcon.kt index 835cce95c..4dd03ecc7 100644 --- a/app/src/main/java/eu/kanade/presentation/track/components/TrackLogoIcon.kt +++ b/app/src/main/java/eu/kanade/presentation/track/components/TrackLogoIcon.kt @@ -14,7 +14,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp -import eu.kanade.presentation.theme.TachiyomiTheme +import eu.kanade.presentation.theme.TachiyomiPreviewTheme import eu.kanade.tachiyomi.data.track.Tracker import tachiyomi.presentation.core.util.clickableNoIndication @@ -49,7 +49,7 @@ private fun TrackLogoIconPreviews( @PreviewParameter(TrackLogoIconPreviewProvider::class) tracker: Tracker, ) { - TachiyomiTheme { + TachiyomiPreviewTheme { TrackLogoIcon( tracker = tracker, onClick = null, diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/MangaRestorer.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/MangaRestorer.kt index f514af7f1..102b460a5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/MangaRestorer.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/MangaRestorer.kt @@ -58,22 +58,24 @@ class MangaRestorer( backupManga: BackupManga, backupCategories: List, ) { - val dbManga = findExistingManga(backupManga) - val manga = backupManga.getMangaImpl() - val restoredManga = if (dbManga == null) { - restoreNewManga(manga) - } else { - restoreExistingManga(manga, dbManga) - } + handler.await(inTransaction = true) { + val dbManga = findExistingManga(backupManga) + val manga = backupManga.getMangaImpl() + val restoredManga = if (dbManga == null) { + restoreNewManga(manga) + } else { + restoreExistingManga(manga, dbManga) + } - restoreMangaDetails( - manga = restoredManga, - chapters = backupManga.chapters, - categories = backupManga.categories, - backupCategories = backupCategories, - history = backupManga.history + backupManga.brokenHistory.map { it.toBackupHistory() }, - tracks = backupManga.tracking, - ) + restoreMangaDetails( + manga = restoredManga, + chapters = backupManga.chapters, + categories = backupManga.categories, + backupCategories = backupCategories, + history = backupManga.history + backupManga.brokenHistory.map { it.toBackupHistory() }, + tracks = backupManga.tracking, + ) + } } private suspend fun findExistingManga(backupManga: BackupManga): Manga? { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt index 604745279..b09cca3bc 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadCache.kt @@ -103,12 +103,15 @@ class DownloadCache( scope.launch { rootDownloadsDirLock.withLock { try { - val diskCache = diskCacheFile.inputStream().use { - ProtoBuf.decodeFromByteArray(it.readBytes()) + if (diskCacheFile.exists()) { + val diskCache = diskCacheFile.inputStream().use { + ProtoBuf.decodeFromByteArray(it.readBytes()) + } + rootDownloadsDir = diskCache + lastRenew = System.currentTimeMillis() } - rootDownloadsDir = diskCache - lastRenew = System.currentTimeMillis() } catch (e: Throwable) { + logcat(LogPriority.ERROR, e) { "Failed to initialize disk cache" } diskCacheFile.delete() } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/sync/SyncDataJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/sync/SyncDataJob.kt index f85d57034..78ed7fb84 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/sync/SyncDataJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/sync/SyncDataJob.kt @@ -80,7 +80,6 @@ class SyncDataJob(private val context: Context, workerParams: WorkerParameters) TimeUnit.MINUTES, ) .addTag(TAG_AUTO) - // No initial delay is needed, remove the randomDelayMillis .build() context.workManager.enqueueUniquePeriodicWork(TAG_AUTO, ExistingPeriodicWorkPolicy.UPDATE, request) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/sync/SyncManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/sync/SyncManager.kt index 420141030..dcf0d2809 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/sync/SyncManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/sync/SyncManager.kt @@ -72,16 +72,17 @@ class SyncManager( * from the database using the BackupManager, then synchronizes the data with a sync service. */ suspend fun syncData() { + val syncOptions = syncPreferences.getSyncOptions() val databaseManga = getAllMangaFromDB() val backupOptions = BackupOptions( - libraryEntries = true, - categories = true, - chapters = true, - tracking = true, - history = true, - appSettings = true, - sourceSettings = true, - privateSettings = true, + libraryEntries = syncOptions.libraryEntries, + categories = syncOptions.categories, + chapters = syncOptions.chapters, + tracking = syncOptions.tracking, + history = syncOptions.history, + appSettings = syncOptions.appSettings, + sourceSettings = syncOptions.sourceSettings, + privateSettings = syncOptions.privateSettings, ) val backup = Backup( backupManga = backupCreator.backupMangas(databaseManga, backupOptions), @@ -119,10 +120,17 @@ class SyncManager( val remoteBackup = syncService?.doSync(syncData) + // Stop the sync early if the remote backup is null or empty + if (remoteBackup?.backupManga?.size == 0) { + notifier.showSyncError("No data found on remote server.") + return + } + // Check if it's first sync based on lastSyncTimestamp if (syncPreferences.lastSyncTimestamp().get() == 0L && databaseManga.isNotEmpty()) { // It's first sync no need to restore data. (just update remote data) syncPreferences.lastSyncTimestamp().set(Date().time) + notifier.showSyncSuccess("Updated remote data successfully") return } @@ -130,10 +138,8 @@ class SyncManager( val (filteredFavorites, nonFavorites) = filterFavoritesAndNonFavorites(remoteBackup) updateNonFavorites(nonFavorites) - val mangas = processFavoriteManga(filteredFavorites) - val newSyncData = backup.copy( - backupManga = mangas, + backupManga = filteredFavorites, backupCategories = remoteBackup.backupCategories, backupSources = remoteBackup.backupSources, backupPreferences = remoteBackup.backupPreferences, @@ -141,9 +147,10 @@ class SyncManager( ) // It's local sync no need to restore data. (just update remote data) - if (mangas.isEmpty()) { + if (filteredFavorites.isEmpty()) { // update the sync timestamp syncPreferences.lastSyncTimestamp().set(Date().time) + notifier.showSyncSuccess("Sync completed successfully") return } @@ -328,6 +335,7 @@ class SyncManager( val favorites = mutableListOf() val nonFavorites = mutableListOf() val logTag = "filterFavoritesAndNonFavorites" + val elapsedTimeMillis = measureTimeMillis { val databaseMangaFavorites = getFavorites.await() val localMangaMap = databaseMangaFavorites.associateBy { @@ -368,51 +376,6 @@ class SyncManager( return Pair(favorites, nonFavorites) } - private fun processFavoriteManga(backupManga: List): List { - val mangas = mutableListOf() - val lastSyncTimeStamp = syncPreferences.lastSyncTimestamp().get() - - val elapsedTimeMillis = measureTimeMillis { - logcat(LogPriority.DEBUG) { "Starting to process BackupMangas." } - backupManga.forEach { manga -> - val mangaLastUpdatedStatus = manga.lastModifiedAt * 1000L > lastSyncTimeStamp - val chaptersUpdatedStatus = chaptersUpdatedAfterSync(manga, lastSyncTimeStamp) - - if (mangaLastUpdatedStatus || chaptersUpdatedStatus) { - mangas.add(manga) - logcat(LogPriority.DEBUG) { - "Added ${manga.title} to the process list. Manga Last Updated: $mangaLastUpdatedStatus, " + - "Chapters Updated: $chaptersUpdatedStatus." - } - } else { - logcat(LogPriority.DEBUG) { - "Skipped ${manga.title} as it has not been updated since the last sync " + - "(Last Modified: ${manga.lastModifiedAt * 1000L}, Last Sync: $lastSyncTimeStamp)." - } - } - } - } - - val minutes = elapsedTimeMillis / 60000 - val seconds = (elapsedTimeMillis % 60000) / 1000 - logcat(LogPriority.DEBUG) { "Processing completed in ${minutes}m ${seconds}s. Total Processed: ${mangas.size}" } - - return mangas - } - - private fun chaptersUpdatedAfterSync(manga: BackupManga, lastSyncTimeStamp: Long): Boolean { - return manga.chapters.any { chapter -> - val updated = chapter.lastModifiedAt * 1000L > lastSyncTimeStamp - if (updated) { - logcat(LogPriority.DEBUG) { - "Chapter ${chapter.name} of ${manga.title} updated after last sync " + - "(Chapter Last Modified: ${chapter.lastModifiedAt * 1000L}, Last Sync: $lastSyncTimeStamp)." - } - } - updated - } - } - /** * Updates the non-favorite manga in the local database with their favorite status from the backup. * @param nonFavorites the list of non-favorite BackupManga objects from the backup. diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/sync/SyncNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/sync/SyncNotifier.kt index 39596d7b4..2321240a6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/sync/SyncNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/sync/SyncNotifier.kt @@ -72,4 +72,15 @@ class SyncNotifier(private val context: Context) { show(Notifications.ID_RESTORE_COMPLETE) } } + + fun showSyncSuccess(message: String?) { + context.cancelNotification(Notifications.ID_RESTORE_PROGRESS) + + with(completeNotificationBuilder) { + setContentTitle(context.getString(R.string.sync_complete)) + setContentText(message) + + show(Notifications.ID_RESTORE_COMPLETE) + } + } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionApi.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionApi.kt index 185f7cefd..26e105616 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionApi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionApi.kt @@ -35,15 +35,7 @@ internal class ExtensionApi { suspend fun findExtensions(): List { return withIOContext { - val extensions = sourcePreferences.extensionRepos().get().flatMap { getExtensions(it) } - - // Sanity check - a small number of extensions probably means something broke - // with the repo generator - if (extensions.isEmpty()) { - throw Exception() - } - - extensions + sourcePreferences.extensionRepos().get().flatMap { getExtensions(it) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsTab.kt index 635c6cb83..be6d243b8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsTab.kt @@ -1,7 +1,5 @@ package eu.kanade.tachiyomi.ui.browse.extension -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.outlined.Translate import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue @@ -10,6 +8,7 @@ import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.ExtensionScreen import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.TabContent +import eu.kanade.presentation.more.settings.screen.browse.ExtensionReposScreen import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.ui.browse.extension.details.ExtensionDetailsScreen import eu.kanade.tachiyomi.ui.webview.WebViewScreen @@ -29,11 +28,14 @@ fun extensionsTab( badgeNumber = state.updates.takeIf { it > 0 }, searchEnabled = true, actions = persistentListOf( - AppBar.Action( + AppBar.OverflowAction( title = stringResource(MR.strings.action_filter), - icon = Icons.Outlined.Translate, onClick = { navigator.push(ExtensionFilterScreen()) }, ), + AppBar.OverflowAction( + title = stringResource(MR.strings.label_extension_repos), + onClick = { navigator.push(ExtensionReposScreen()) }, + ), ), content = { contentPadding, _ -> ExtensionScreen( diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt index e54dd97d6..daffd610e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt @@ -37,12 +37,14 @@ import eu.kanade.presentation.more.onboarding.GETTING_STARTED_URL import eu.kanade.presentation.util.Tab import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.library.LibraryUpdateJob +import eu.kanade.tachiyomi.data.sync.SyncDataJob import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchScreen import eu.kanade.tachiyomi.ui.category.CategoryScreen import eu.kanade.tachiyomi.ui.home.HomeScreen import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.manga.MangaScreen import eu.kanade.tachiyomi.ui.reader.ReaderActivity +import eu.kanade.tachiyomi.util.system.toast import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collectLatest @@ -135,6 +137,13 @@ object LibraryTab : Tab { } } }, + onClickSyncNow = { + if (!SyncDataJob.isAnyJobRunning(context)) { + SyncDataJob.startNow(context) + } else { + context.toast(MR.strings.sync_in_progress) + } + }, searchQuery = state.searchQuery, onSearchQueryChange = screenModel::search, scrollBehavior = scrollBehavior.takeIf { !tabVisible }, // For scroll overlay when no tab diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt index 573ba1246..93ea9495b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt @@ -102,7 +102,14 @@ abstract class PagerViewer(val activity: ReaderActivity) : Viewer { }, ) pager.tapListener = { event -> - val pos = PointF(event.x / pager.width, event.y / pager.height) + val viewPosition = IntArray(2) + pager.getLocationOnScreen(viewPosition) + val viewPositionRelativeToWindow = IntArray(2) + pager.getLocationInWindow(viewPositionRelativeToWindow) + val pos = PointF( + (event.rawX - viewPosition[0] + viewPositionRelativeToWindow[0]) / pager.width, + (event.rawY - viewPosition[1] + viewPositionRelativeToWindow[1]) / pager.height, + ) when (config.navigator.getAction(pos)) { NavigationRegion.MENU -> activity.toggleMenu() NavigationRegion.NEXT -> moveToNext() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt index d54432b6b..db65836d8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt @@ -111,7 +111,14 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr }, ) recycler.tapListener = { event -> - val pos = PointF(event.x / recycler.width, event.y / recycler.height) + val viewPosition = IntArray(2) + recycler.getLocationOnScreen(viewPosition) + val viewPositionRelativeToWindow = IntArray(2) + recycler.getLocationInWindow(viewPositionRelativeToWindow) + val pos = PointF( + (event.rawX - viewPosition[0] + viewPositionRelativeToWindow[0]) / recycler.width, + (event.rawY - viewPosition[1] + viewPositionRelativeToWindow[1]) / recycler.height, + ) when (config.navigator.getAction(pos)) { NavigationRegion.MENU -> activity.toggleMenu() NavigationRegion.NEXT, NavigationRegion.RIGHT -> scrollDown() diff --git a/core/src/main/java/eu/kanade/tachiyomi/network/NetworkHelper.kt b/core/src/main/java/eu/kanade/tachiyomi/network/NetworkHelper.kt index f8f1a6395..5516ed748 100644 --- a/core/src/main/java/eu/kanade/tachiyomi/network/NetworkHelper.kt +++ b/core/src/main/java/eu/kanade/tachiyomi/network/NetworkHelper.kt @@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.network import android.content.Context import eu.kanade.tachiyomi.network.interceptor.CloudflareInterceptor +import eu.kanade.tachiyomi.network.interceptor.IgnoreGzipInterceptor import eu.kanade.tachiyomi.network.interceptor.UncaughtExceptionInterceptor import eu.kanade.tachiyomi.network.interceptor.UserAgentInterceptor import okhttp3.Cache @@ -30,9 +31,10 @@ class NetworkHelper( maxSize = 5L * 1024 * 1024, // 5 MiB ), ) - .addInterceptor(BrotliInterceptor) .addInterceptor(UncaughtExceptionInterceptor()) .addInterceptor(UserAgentInterceptor(::defaultUserAgentProvider)) + .addNetworkInterceptor(IgnoreGzipInterceptor()) + .addNetworkInterceptor(BrotliInterceptor) if (preferences.verboseLogging().get()) { val httpLoggingInterceptor = HttpLoggingInterceptor().apply { diff --git a/core/src/main/java/eu/kanade/tachiyomi/network/interceptor/IgnoreGzipInterceptor.kt b/core/src/main/java/eu/kanade/tachiyomi/network/interceptor/IgnoreGzipInterceptor.kt new file mode 100644 index 000000000..f1331a576 --- /dev/null +++ b/core/src/main/java/eu/kanade/tachiyomi/network/interceptor/IgnoreGzipInterceptor.kt @@ -0,0 +1,21 @@ +package eu.kanade.tachiyomi.network.interceptor + +import okhttp3.Interceptor +import okhttp3.Response + +/** + * To use [okhttp3.brotli.BrotliInterceptor] as a network interceptor, + * add [IgnoreGzipInterceptor] right before it. + * + * This nullifies the transparent gzip of [okhttp3.internal.http.BridgeInterceptor] + * so gzip and Brotli are explicitly handled by the [okhttp3.brotli.BrotliInterceptor]. + */ +class IgnoreGzipInterceptor : Interceptor { + override fun intercept(chain: Interceptor.Chain): Response { + var request = chain.request() + if (request.header("Accept-Encoding") == "gzip") { + request = request.newBuilder().removeHeader("Accept-Encoding").build() + } + return chain.proceed(request) + } +} diff --git a/domain/src/main/java/tachiyomi/domain/sync/SyncPreferences.kt b/domain/src/main/java/tachiyomi/domain/sync/SyncPreferences.kt index 2b75cdf8d..f480ee401 100644 --- a/domain/src/main/java/tachiyomi/domain/sync/SyncPreferences.kt +++ b/domain/src/main/java/tachiyomi/domain/sync/SyncPreferences.kt @@ -62,4 +62,39 @@ class SyncPreferences( fun isSyncEnabled(): Boolean { return syncService().get() != 0 } + + fun getSyncOptions(): SyncOptions { + return SyncOptions( + libraryEntries = preferenceStore.getBoolean("library_entries", true).get(), + categories = preferenceStore.getBoolean("categories", true).get(), + chapters = preferenceStore.getBoolean("chapters", true).get(), + tracking = preferenceStore.getBoolean("tracking", true).get(), + history = preferenceStore.getBoolean("history", true).get(), + appSettings = preferenceStore.getBoolean("appSettings", true).get(), + sourceSettings = preferenceStore.getBoolean("sourceSettings", true).get(), + privateSettings = preferenceStore.getBoolean("privateSettings", true).get(), + ) + } + + fun setSyncOptions(syncOptions: SyncOptions) { + preferenceStore.getBoolean("library_entries", true).set(syncOptions.libraryEntries) + preferenceStore.getBoolean("categories", true).set(syncOptions.categories) + preferenceStore.getBoolean("chapters", true).set(syncOptions.chapters) + preferenceStore.getBoolean("tracking", true).set(syncOptions.tracking) + preferenceStore.getBoolean("history", true).set(syncOptions.history) + preferenceStore.getBoolean("appSettings", true).set(syncOptions.appSettings) + preferenceStore.getBoolean("sourceSettings", true).set(syncOptions.sourceSettings) + preferenceStore.getBoolean("privateSettings", true).set(syncOptions.privateSettings) + } } + +data class SyncOptions( + val libraryEntries: Boolean = true, + val categories: Boolean = true, + val chapters: Boolean = true, + val tracking: Boolean = true, + val history: Boolean = true, + val appSettings: Boolean = true, + val sourceSettings: Boolean = true, + val privateSettings: Boolean = false, +) diff --git a/gradle/compose.versions.toml b/gradle/compose.versions.toml index 28d9ca5a7..86338364a 100644 --- a/gradle/compose.versions.toml +++ b/gradle/compose.versions.toml @@ -1,5 +1,5 @@ [versions] -compiler = "1.5.7" +compiler = "1.5.8" compose-bom = "2023.12.00-alpha04" accompanist = "0.33.2-alpha" diff --git a/gradle/kotlinx.versions.toml b/gradle/kotlinx.versions.toml index 8ff4e1c60..cc75dd895 100644 --- a/gradle/kotlinx.versions.toml +++ b/gradle/kotlinx.versions.toml @@ -1,5 +1,5 @@ [versions] -kotlin_version = "1.9.21" +kotlin_version = "1.9.22" serialization_version = "1.6.2" xml_serialization_version = "0.86.3" diff --git a/i18n/src/commonMain/resources/MR/base/strings.xml b/i18n/src/commonMain/resources/MR/base/strings.xml index bbb02a4e9..4dd4202f5 100644 --- a/i18n/src/commonMain/resources/MR/base/strings.xml +++ b/i18n/src/commonMain/resources/MR/base/strings.xml @@ -563,6 +563,7 @@ Synchronization frequency Reset last sync timestamp Reset the last sync timestamp to force a full sync + Choose what to sync Last sync timestamp reset SyncYomi Done in %1$s @@ -589,6 +590,7 @@ Sync on App Start Sync on App Resume Sync on Library Update + Sync library Networking diff --git a/i18n/src/commonMain/resources/MR/bg/plurals.xml b/i18n/src/commonMain/resources/MR/bg/plurals.xml index 2f6165169..052b404fa 100644 --- a/i18n/src/commonMain/resources/MR/bg/plurals.xml +++ b/i18n/src/commonMain/resources/MR/bg/plurals.xml @@ -52,4 +52,20 @@ Следващата непрочетена глава Следващите %d непрочетени глави + + 1 ден + %d дни + + + Липсваща %1$s глава + Липсващи %1$s глави + + + Следваща глава + Следващи %d глави + + + %d хранилище + %d хранилища + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/bg/strings.xml b/i18n/src/commonMain/resources/MR/bg/strings.xml index e4078b539..752077949 100644 --- a/i18n/src/commonMain/resources/MR/bg/strings.xml +++ b/i18n/src/commonMain/resources/MR/bg/strings.xml @@ -329,7 +329,7 @@ Възстановяването неуспешно Възстановяването е в процес Съхраняването неуспешно - Копието вече се запазва + Архивирането вече е в ход %02d мин, %02d сек Странично разстояние Четене @@ -344,7 +344,7 @@ Никога Винаги Заключи при неактивност - Изисквай отключване + Изискване на отключване Сигурност Уведомления Система на абонаментите diff --git a/i18n/src/commonMain/resources/MR/ca/strings.xml b/i18n/src/commonMain/resources/MR/ca/strings.xml index 421c573e2..ba3469681 100644 --- a/i18n/src/commonMain/resources/MR/ca/strings.xml +++ b/i18n/src/commonMain/resources/MR/ca/strings.xml @@ -97,11 +97,9 @@ No és de confiança Desinstal·la Extensió que no és de confiança - Aquesta extensió l’ha signada algun autor desconegut i no s’ha carregat. + Les extensions malicioses poden llegir qualsevol credencial d’inici de sessió desada o executar codi arbitrari. \n -\nLes extensions malicioses poden llegir qualsevol credencial d’inici de sessió desada o executar codi arbitrari. -\n -\nSi confieu en el certificat d’aquesta extensió, accepteu aquests riscos. +\nSi confieu en aquesta extensió, accepteu aquests riscos. Pantalla completa Anima les transicions de pàgina Mostra el número de pàgina @@ -779,7 +777,7 @@ Rebeu notificacions quan hi hagi actualitzacions de la biblioteca i més. Permet Disponible: %1$s / Total: %2$s - S’ha previst que se’n publicaran nous capítols pels volts de %1$s, es comprova cada %2$s. + S’ha previst que se’n publicaran nous capítols d’aquí a %1$s, es comprova cada %2$s. Error complet: Calen permisos per a instal·lar extensions. Premeu aquí per a concedir-les. Inclou-hi configuració sensible (per exemple, testimonis d’autenticació dels serveis de seguiment) @@ -793,10 +791,11 @@ Guia d’emmagatzematge Heu actualitzat d’una versió més antiga i no sabeu què heu de seleccionar? Consulteu la guia d’emmagatzematge per a més informació. Nòrdic - Actualitzacions intel·lgents + Actualitzacions intel·ligents Revoca les extensions de confiança desconegudes Afegeix un repositori URL del repositori Aviat Freqüència d’actualització personalitzada: + Obre el repositori d’origen \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/cs/plurals.xml b/i18n/src/commonMain/resources/MR/cs/plurals.xml index c2e6fa6a8..b21f3e786 100644 --- a/i18n/src/commonMain/resources/MR/cs/plurals.xml +++ b/i18n/src/commonMain/resources/MR/cs/plurals.xml @@ -80,4 +80,9 @@ %d dny %d dní + + %d repozitář + %d repozitáře + %d repozitářů + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/cs/strings.xml b/i18n/src/commonMain/resources/MR/cs/strings.xml index c06b21fb0..3101bb62b 100644 --- a/i18n/src/commonMain/resources/MR/cs/strings.xml +++ b/i18n/src/commonMain/resources/MR/cs/strings.xml @@ -49,7 +49,7 @@ Denně Každé 2 dny Týdně - Ve stavu \"Dokončeno\" + Přeskočit položky ve stavu \"Dokončeno\" Aktualizovat počet kapitol po přečtení Aktualizovat Instalovat @@ -61,11 +61,9 @@ Nedůvěryhodné Odinstalovat Nedůvěryhodné rozšíření - Toto rozšíření bylo podepsané nedůvěryhodným certifikátem a nebylo aktivované. + Škodlivé rozšíření může přečíst jakékoliv uložené přihlašovací údaje nebo spustit libovolný kód. \n -\nŠkodlivé rozšíření může přečíst jakékoliv uložené přihlašovací údaje nebo spustit libovolný kód. -\n -\nDůvěřováním tomuto certifikátu přijímáte tato rizika. +\nDůvěřováním tohoto rozšířeni přijímáte tato rizika. Celá obrazovka Animovat přechody stránek Zobrazit číslo stránky @@ -213,7 +211,7 @@ Vytváření zálohy Vymazat mezipaměť kapitol Využito: %1$s - Mezipaměť smazána. %1$d souborů bylo odstraněno + Mezipaměť smazána, %1$d souborů odstraněno Během vymazávání došlo k chybě Vymazat cookies Cookies vymazány @@ -358,13 +356,11 @@ Zálohování selhalo Zálohování již probíhá %02d minut, %02d sekund - Data ze zálohy budou obnovena. -\n -\nBudeš poté muset doinstalovat jakékoliv chybějící rozšíření a přihlásit se do sledovacích služeb pro jejich použití. + Budeš poté muset doinstalovat jakékoliv chybějící rozšíření a přihlásit se do sledovacích služeb pro jejich použití. Sledovače, ve kterých nejsi přihlášený/á: Chybějící zdroje: Záloha neobsahuje žádné položky knihovny. - Neplatný soubor se zálohou + Neplatný soubor se zálohou: Jednosměrná synchronizace pro aktualizaci počtu přečtených kapitol v externích sledovacích službách. Nastavení sledování pro každou položku je možné z jejich tlačítka sledování. Povolení mazání kapitol se záložkami Smazat kapitoly @@ -467,7 +463,7 @@ Invertovat oblasti dotyku Rozdělit široké stránky Krátce zobrazit, když je čtečka otevřena - Sledování systému + Systém Klepněte pro zobrazení podrobností Datum načtení kapitoly Na šířku @@ -554,9 +550,9 @@ Vymazat mezipaměť kapitol při spuštění aplikace Chyba v získání seznamu rozšíření Zásady ochrany osobních údajů - %1$d neknihovní záznamy v databázi + %1$d položek v databázi co nejsou v knihovně Snižuje pruhování barev, ale může mít vliv na výkon - S nepřečtenými kapitolami + Přeskočit položky s nepřečtenými kapitolami Nic k vyčištění Uložit jako CBZ archiv Nápovědu k tomu, jak opravit chyby při aktualizaci knihovny, viz %1$s @@ -564,7 +560,7 @@ Zrušeno Zobrazit položku Mřížka jen s přebaly - Které nebyly rozečteny + Přeskočit nerozečtené položky %1$d aktualizace(í) selhalo Má pauzu Přeskočeno, protože obsahuje nepřečtené kapitoly @@ -704,12 +700,12 @@ Přejetí prstem doleva Přiblížení dvojitým klepnutím %d na řádek - Přizpůsobený interval načítání + Přizpůsobený interval aktualizace Další očekávaná aktualizace Odhadovat každý Nastavit aktualizaci každých Nastavit interval - Mimo očekávané období vydání + Předpovědět čas příštího vydání Intervaly Přeskočeno, protože dnes nebylo očekáváno žádné vydání Tím se lokálně odstraní sledování. @@ -745,7 +741,7 @@ Poslední automatická záloha: %s Žádní překladatelé nenalezeni Překladatel - Ukázat bílo při změně stránky + Bliknout při změně stránky Využití úložiště Data a úložiště Nevybrán žádný soubor @@ -764,7 +760,7 @@ Povolení oznámení Povolení stahovat aplikace Dostupné: %1$s / Celkem: %2$s - Už jste použili %s dříve? + Přeinstalováváte %s? Vybráno Nevybráno Vyhněte se přerušením dlouhých aktualizací knihovny, stahování a obnovení záloh. @@ -783,4 +779,23 @@ \nJe doporučena vyhrazená složka. \n \nVybraná složka: %2$s + Úplná chyba: + Chytrá aktualizace + Přidat další repozitáře do Tachiyomi. Měli by to být URL končící \"index.min.json\". + Tento repozitář již existuje! + Odstranit repozitář + Neplatná URL repozitáře + Přejete si odstranit repozitář \"%s\"? + Předpoklad vydání nových kapitol za zhruba %1$s, kontrola co %2$s. + Vlastní frekvence aktualizace: + Repozitáře rozšíření + URL repozitáře + Nemáte nastaveny žádné repozitáře. + Průvodce uložištěm + Nord + Přidat repozitář + Zrušit důvěryhodná neznámá rozšíření + Open source repozitář + Brzy + Aktualizujete ze starší verze a nevíte, co vybrat? Další informace naleznete v průvodci úložištěm. \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/de/plurals.xml b/i18n/src/commonMain/resources/MR/de/plurals.xml index f7d3181d7..3be82034b 100644 --- a/i18n/src/commonMain/resources/MR/de/plurals.xml +++ b/i18n/src/commonMain/resources/MR/de/plurals.xml @@ -9,8 +9,8 @@ %1$d neue Kapitel - Kapitel %1$s und 1 mehr - Kapitel %1$s und %2$d mehr + Kapitel %1$s und 1 weiteres + Kapitel %1$s und %2$d weitere Für %d Eintrag @@ -29,7 +29,7 @@ %d Kategorien - Erledigt in %1$s mit %2$s Fehler + Erledigt in %1$s mit einem Fehler Erledigt in %1$s mit %2$s Fehlern @@ -64,4 +64,8 @@ 1 Tag %d Tage + + %d Repository + %d Repositorys + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/de/strings.xml b/i18n/src/commonMain/resources/MR/de/strings.xml index d496b0fde..a758c1aa6 100644 --- a/i18n/src/commonMain/resources/MR/de/strings.xml +++ b/i18n/src/commonMain/resources/MR/de/strings.xml @@ -128,20 +128,20 @@ Ab fünftletzt gelesenem Kapitel Neue Kapitel herunterladen Tracker - Datensicherung erstellen + Sicherung erstellen Kann benutzt werden, um die aktuelle Bibliothek wiederherzustellen - Datensicherung wiederherstellen + Sicherung wiederherstellen Bibliothek mit Hilfe einer Datensicherung wiederherstellen - Automatische Datensicherungshäufigkeit - Datensicherung erstellt + Automatische Sicherungshäufigkeit + Sicherung erstellt Wiederherstellen abgeschlossen Was möchtest du sichern\? - Datensicherung wird wiederhergestellt - Datensicherung wird erstellt + Sicherung wird wiederhergestellt + Sicherung wird erstellt Kapitel-Zwischenspeicher leeren Belegt: %1$s Zwischenspeicher geleert, %1$d Dateien gelöscht - Fehler während dem Leeren aufgetreten + Fehler während des Leerens aufgetreten Cookies löschen Cookies gelöscht Datenbank leeren @@ -240,11 +240,9 @@ Wird installiert Installiert Deinstallieren - Diese Erweiterung wurde von einem unbekannten Autor signiert und wurde deshalb nicht geladen. + Bösartige Erweiterungen können gespeicherte Anmeldedaten auslesen oder beliebigen Code ausführen. \n -\nBösartige Erweiterungen können gespeicherte Anmeldedaten auslesen oder schädlichen Code ausführen. -\n -\nDurch das Vertrauen des Zertifikats dieser Erweiterung akzeptierst du diese Risiken. +\nDurch das Vertrauen in die Erweiterung akzeptierst du diese Risiken. Keine Animation Normal Schnell @@ -553,7 +551,7 @@ Kapitel-Zwischenspeicher beim Öffnen der App löschen %1$d Nicht-Bibliothekseinträge in der Datenbank Nichts zu bereinigen - Herunterladen der Erweiterungsliste ist fehlgeschlagen + Laden der verfügbaren Erweiterungen ist fehlgeschlagen Datenschutzbestimmungen Einträge mit ungelesen Kapiteln überspringen Für Hilfe zum Beheben von Fehlern bei Bibliotheksaktualisierungen, siehe %1$s @@ -586,7 +584,7 @@ Anzahl an Ungelesenem Letzte Aktualisierungsprüfung Verbessert die Leserleistung - Seite %d während dem Aufteilen nicht gefunden + Seite %d während des Aufteilens nicht gefunden Dateipfad der Seite %d konnte nicht gefunden werden Setzt den Lesemodus und die Ausrichtung aller Serien zurück Lesereinstellungen für jede Serie zurücksetzen @@ -621,7 +619,7 @@ User-Agent-Text darf nicht leer sein Flutwelle Im Voraus herunterladen - Automatisch während dem Lesen herunterladen + Automatisch während des Lesens herunterladen Funktioniert nur, wenn das aktuelle Kapitel sowie das darauf folgende bereits heruntergeladen sind. Bist du dir sicher\? Du bist gerade dabei, „%s“ aus deiner Bibliothek zu entfernen @@ -703,7 +701,7 @@ Zum Zoomen doppeltippen %d pro Zeile Intervalle - Benutzerdefiniertes Abrufintervall + Benutzerdefiniertes Aktualisierungsintervall Intervall einstellen Nächste erwartete Aktualisierung Nächsten Veröffentlichungszeitpunkt vorhersagen @@ -783,8 +781,8 @@ Zulassen Vollständiger Fehler: Benutzerdefinierte Aktualisierungshäufigkeit: - Erweiterungs-Repositories - Es wurden noch keine Repositories festgelegt. + Erweiterungs-Repositorys + Es wurden noch keine Repositorys festgelegt. Repository hinzufügen Dieses Repository existiert bereits! Repository löschen @@ -793,7 +791,11 @@ Speicherleitfaden Intelligentes Aktualisieren Repository-URL - Füge zusätzliche Repositories zu Tachiyomi hinzu. Deren URL sollte mit „index.min.json“ enden. + Füge zusätzliche Repositorys zu Tachiyomi hinzu. Deren URL sollte mit „index.min.json“ enden. Ungültige Repository-URL - Nächste Aktualisierung erwartet in ca. %1$s, überprüfe ca. alle %2$s + Neue Kapitel vsl. in ca. %1$s, überprüfe ca. alle %2$s + Nord + Open-Source-Repository + Bald + Zertifikatsbestätigungen zurücknehmen \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/el/plurals.xml b/i18n/src/commonMain/resources/MR/el/plurals.xml index 9431ff6b8..82ca8aa47 100644 --- a/i18n/src/commonMain/resources/MR/el/plurals.xml +++ b/i18n/src/commonMain/resources/MR/el/plurals.xml @@ -64,4 +64,8 @@ 1 ημέρα %d ημέρες + + %d αποθετήριο + %d αποθετήρια + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/el/strings.xml b/i18n/src/commonMain/resources/MR/el/strings.xml index b7bfe7385..b81f92404 100644 --- a/i18n/src/commonMain/resources/MR/el/strings.xml +++ b/i18n/src/commonMain/resources/MR/el/strings.xml @@ -83,7 +83,7 @@ Όλα Περιορισμοί αυτόματων ενημερώσεων συσκευής Κατά τη φόρτιση - Με κατάσταση \"Ολοκληρωμένο\" + Παράλειψη καταχωρήσεων με κατάσταση \"Ολοκληρώθηκε\" Ενημέρωση προόδου μετά την ανάγνωση Προεπιλεγμένη κατηγορία Ερώτηση πάντα @@ -97,11 +97,9 @@ Μη αξιόπιστο Απεγκατάσταση Μη αξιόπιστη επέκταση - Αυτή η επέκταση υπογράφηκε με αναξιόπιστο πιστοποιητικό και δεν ενεργοποιήθηκε. + Οι κακόβουλες επεκτάσεις μπορούν να διαβάσουν τυχόν αποθηκευμένα διαπιστευτήρια σύνδεσης ή να εκτελέσουν αυθαίρετο κώδικα. \n -\nΜια κακόβουλη επέκταση θα μπορούσε να διαβάσει τυχόν αποθηκευμένα διαπιστευτήρια σύνδεσης ή να εκτελέσει αυθαίρετο κώδικα. -\n -\nΕμπιστεύοντας αυτό το πιστοποιητικό αποδέχεστε αυτούς τους κινδύνους. +\nΜε την εμπιστοσύνη αυτής της επέκτασης, αποδέχεστε αυτούς τους κινδύνους. Πλήρης οθόνη Ζωντανή μετάβαση σελίδας Ταχύτητα κίνησης διπλού αγγίγματος @@ -374,7 +372,7 @@ Δεδομένα Πηγές που λείπουν: Το αντίγραφο ασφαλείας δεν περιέχει καταχωρήσεις βιβλιοθήκης. - Μη έγκυρο αρχείο αντιγράφου ασφαλείας + Μη έγκυρο αρχείο αντιγράφου ασφαλείας: Έλεγχος για νέο εξώφυλλο και λεπτομέρειες κατά την ενημέρωση της βιβλιοθήκης Αυτόματη ανανέωση μεταδεδομένων Μεταφορά @@ -455,9 +453,7 @@ Διαχωρισμός πλατιών σελίδων Εάν η τοποθέτηση των διαχωρισμένων πλατιών σελίδων δεν ταιριάζει με την κατεύθυνση ανάγνωσης Αντιστροφή τοποθέτησης διαχωρισμένης σελίδας - Τα δεδομένα από το αντίγραφο ασφαλείας θα αποκατασταθούν -\n -\nΘα χρειαστεί να εγκαταστήσετε τυχόν επεκτάσεις που λείπουν και στη συνέχεια να συνδεθείτε στις υπηρεσίες παρακολούθησης για να τις χρησιμοποιήσετε. + Ενδέχεται να χρειαστεί να εγκαταστήσετε τυχόν επεκτάσεις που λείπουν και στη συνέχεια να συνδεθείτε στις υπηρεσίες παρακολούθησης για να τις χρησιμοποιήσετε. Εμφάνιση εν συντομία κατά το άνοιγμα του προγράμματος ανάγνωσης Εμφάνιση επικάλυψης ζωνών πατήματος Δεξιά @@ -555,9 +551,9 @@ Εκκαθάριση της προσωρινής μνήμης κεφαλαίων κατά την εκκίνηση της εφαρμογής %1$d καταχωρήσεις εκτός βιβλιοθήκης στη βάση δεδομένων Τίποτα προς εκκαθάριση - Απέτυχε η λήψη λίστας επεκτάσεων + Αποτυχία ανάκτησης διαθέσιμων επεκτάσεων Πολιτική απορρήτου - Με αδιάβαστο(α) κεφάλαιο(α) + Παράλειψη καταχωρήσεων με αδιάβαστο(α) κεφάλαιο(α) Για βοήθεια σχετικά με τον τρόπο διόρθωσης σφαλμάτων ενημέρωσης βιβλιοθήκης, ανατρέξτε στο %1$s Αποθήκευση ως αρχείο CBZ Ακυρώθηκε @@ -566,7 +562,7 @@ Εμφάνιση καταχώρισης Αυτόματο ζουμ σε ευρείες εικόνες Πλέγμα μόνο με εξώφυλλα - Που δεν έχουν ξεκινήσει + Παράλειψη καταχωρήσεων που δεν έχουν αρχίσει Μετατόπιση πλατιών εικόνων Παραλείφθηκε επειδή η σειρά ολοκληρώθηκε Παραβλέφθηκε επειδή υπάρχουν μη αναγνωσμένα κεφάλαια @@ -705,8 +701,8 @@ Ενέργεια συρσίματος προς τα δεξιά %d ανά σειρά Ορισμός χρονικού διαστήματος - Προσαρμοσμένο διάστημα ανάκτησης - Εκτός αναμενόμενης περιόδου κυκλοφορίας + Προσαρμοσμένη συχνότητα ενημέρωσης + Πρόβλεψη χρόνου επόμενης απελευθέρωσης Διαστήματα Εκτίμηση κάθε Ρύθμιση για ενημέρωση κάθε @@ -765,7 +761,7 @@ Επόμενο Οδηγός εισαγωγής Είστε νέοι στο %s; Σας συνιστούμε να ανατρέξετε στον οδηγό έναρξης. - Έχετε ξαναχρησιμοποιήσει το %s; + Επανεγκατάσταση %s; Ας ρυθμίσουμε πρώτα κάποια πράγματα. Μπορείτε πάντα να τα αλλάξετε στις ρυθμίσεις αργότερα. Δεν έχει οριστεί τοποθεσία αποθήκευσης Επιλέξτε ένα φάκελο όπου το %1$s θα αποθηκεύει λήψεις κεφαλαίων, αντίγραφα ασφαλείας και άλλα. @@ -783,4 +779,23 @@ Διαθέσιμο: %1$s / Σύνολο: %2$s Απαιτούνται δικαιώματα για την εγκατάσταση επεκτάσεων. Πατήστε εδώ για παραχώρηση. Συμπεριλάβετε ευαίσθητες ρυθμίσεις (π.χ. διακριτικά σύνδεσης παρακολούθησης) + Πλήρες σφάλμα: + Προσθήκη αποθετηρίων + Διαγραφή αποθετηρίου + Ενημερώνετε από μια παλαιότερη έκδοση και δεν είστε σίγουροι τι να επιλέξετε; Ανατρέξτε στον οδηγό αποθήκευσης για περισσότερες πληροφορίες. + Οδηγός αποθήκευσης + Αποθετήρια επεκτάσεων + Δεν έχετε ορίσει αποθετήρια. + Λανθασμένο URL αποθετηρίου + Τα νέα κεφάλαια προβλέπεται να κυκλοφορήσουν σε περίπου %1$s, ελέγχοντας κάθε %2$s. + Προσαρμοσμένη συχνότητα ενημέρωσης: + Nord + Έξυπνη ενημέρωση + URL αποθετηρίου + Προσθέστε επιπλέον αποθετήρια στο Tachiyomi. Αυτό θα πρέπει να είναι ένα URL που τελειώνει με \"index.min.json\". + Θέλετε να διαγράψετε το αποθετήριο \"%s\"; + Αυτό το αποθετήριο υπάρχει ήδη! + Σύντομα + Ανάκληση αξιόπιστων άγνωστων επεκτάσεων + Αποθετήριο ανοικτού κώδικα \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/eo/plurals.xml b/i18n/src/commonMain/resources/MR/eo/plurals.xml index fd983fa8f..1daf79fc5 100644 --- a/i18n/src/commonMain/resources/MR/eo/plurals.xml +++ b/i18n/src/commonMain/resources/MR/eo/plurals.xml @@ -9,7 +9,7 @@ %d kategorioj - 1 ĉapitro + %1$s ĉapitro %1$s ĉapitroj @@ -33,7 +33,7 @@ %d ŝanĝspuriloj - 1 restas + %1$s restas %1$s restas @@ -44,4 +44,20 @@ Hieraŭ Antaŭ %1$d tagoj + + 1 tago + %d tagoj + + + Sekva ĉapitro + Sekvaj %d ĉapitroj + + + Mankas %1$s ĉapitro + Mankas %1$s ĉapitroj + + + Sekva nelegita ĉapitro + Sekvaj %d nelegitaj ĉapitroj + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/eo/strings.xml b/i18n/src/commonMain/resources/MR/eo/strings.xml index 1aed0ff98..657166ba7 100644 --- a/i18n/src/commonMain/resources/MR/eo/strings.xml +++ b/i18n/src/commonMain/resources/MR/eo/strings.xml @@ -8,13 +8,13 @@ Agordoj Pli Nomo - Neniuj ĝisdatigoj + Neniuj lastatempaj ĝisdatigoj Neniu elŝuto Asistado - Konektprogramaro Informaĵo + Informoj de aldonaĵo Aldonaĵoj Migri - Arkivi kaj restaŭri + Savkopii kaj restaŭri Retejo Uzantnomo Pasvorto @@ -52,7 +52,7 @@ Biblioteka kontribuoj Kategorioj Via biblioteko malplenas - Neniu legita laste + Neniu legita lastatempe Kaŝi enhavon de sciigoj Neniam Ĉiam @@ -355,7 +355,7 @@ Laŭ elŝuta dato Elekti inverse Defaŭlte - Vi havas neniun kategorion. Tuŝeti la butonon kun plus por krei unu por organizi vian bibliotekon. + Vi havas neniun kategorion. Tuŝeti la butonon kun plus, por krei unu kaj organizi vian bibliotekon. Kromaĵaj ĝisdatigoj Elŝutito paŭzigita Elŝutilo diff --git a/i18n/src/commonMain/resources/MR/es/strings.xml b/i18n/src/commonMain/resources/MR/es/strings.xml index d2b01cad8..c55bdf142 100644 --- a/i18n/src/commonMain/resources/MR/es/strings.xml +++ b/i18n/src/commonMain/resources/MR/es/strings.xml @@ -145,7 +145,7 @@ Elige una imagen de portada Elige una copia de respaldo Descargar - No hay nuevas actualizaciones disponibles + Ya estás usando la última versión disponible Descargando… Toca aquí para instalar la actualización Error de descarga @@ -168,7 +168,7 @@ Marcar capítulo como favorito Quitar como favorito Añadir - No hay conexión de red disponible + No estás conectado a Internet Descarga pausada ¿Usar esta imagen como portada\? Apariencia @@ -241,9 +241,9 @@ Instalando Instalado Confiar - No confiable + No es fiable Desinstalar - Extensión no confiable + La extensión no es fiable Normal Rápida Siguiente: @@ -551,7 +551,7 @@ Limpiar la caché de capítulos al abrir la aplicación Base de datos limpia %1$d títulos que no pertenecen a la biblioteca en la base de datos - No se han podido obtener las extensiones disponibles + No se ha podido obtener el listado de extensiones disponibles Política de privacidad Saltarse títulos con capítulos por leer Si necesitas ayuda para resolver los errores de actualización de la biblioteca mira en %1$s @@ -764,7 +764,7 @@ Siguiente Lo primero de todo es dejar las cosas a tu gusto. Siempre puedes volver a cambiarlas más tarde en los ajustes. Todavía no has proporcionado ninguna carpeta - Selecciona una carpeta donde %1$s almacenará las descargas de capítulos, copias de seguridad y otras cosas. + Selecciona una carpeta donde %1$s guardará los capítulos descargados, las copias de seguridad y otras cosas. \n \nTe recomendamos que sea solo para %1$s. \n @@ -780,7 +780,7 @@ Toca aquí para conceder los permisos necesarios para instalar extensiones. Incluir datos privados, como las claves de inicio de sesión en plataformas de seguimiento Descripción completa del problema: - Se espera que se publiquen nuevos capítulos alrededor de %1$s, comprobando alrededor de cada %2$s. + Se espera que se publiquen nuevos capítulos en torno a %1$s, el ciclo aproximado de comprobación entre números es de %2$s. Frecuencia de actualización personalizada: El repositorio ya existe Actualizaciones inteligentes @@ -794,8 +794,8 @@ Dirección URL del repositorio ¿Acabas de actualizar desde una versión más antigua y no sabes qué hacer? Échale un vistazo a la guía de almacenamiento. Guía de almacenamiento - Nord + Norteño Pronto - Revocar extensiones desconocidas de confianza - Ver el código del repositorio + Dejar de marcar todas la extensiones desconocidas como de confianza + Abrir repositorio \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/fil/plurals.xml b/i18n/src/commonMain/resources/MR/fil/plurals.xml index 2a3677be4..bbebdac6d 100644 --- a/i18n/src/commonMain/resources/MR/fil/plurals.xml +++ b/i18n/src/commonMain/resources/MR/fil/plurals.xml @@ -9,8 +9,8 @@ %d (na) kategorya - Ang extension ay available upang i-update - Ang mga %d (na) extension ay available upang i-update + Ang extension ay maaari nang i-update + Ang mga %d (na) extension ay maaari nang i-update Mga kabanata %1$s at isa pa @@ -38,7 +38,7 @@ %d tracker - %d na mga tracker + %d mga tracker Nilaktawan ang %d na kabanata, maaaring ito ay wala sa source o na-filter ang mga ito @@ -64,4 +64,8 @@ 1 araw %d (mga) araw + + %d na repo + %d na mga repo + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/fil/strings.xml b/i18n/src/commonMain/resources/MR/fil/strings.xml index 9ba2cebeb..db3d3ebc9 100644 --- a/i18n/src/commonMain/resources/MR/fil/strings.xml +++ b/i18n/src/commonMain/resources/MR/fil/strings.xml @@ -21,12 +21,12 @@ I-pin Isara Ipakita ang mga tab ng kategorya - Bilang ng na-download - Maginhawa + Bilang ng kabanatang na-download + Maalwan na grid Listahan - Siksik + Siksik na grid Pagpapakita - Pagpapakita + Istilo ng pagpapakita Ilipat Buksan sa WebView Buksan sa browser @@ -72,7 +72,7 @@ Nakaraan Tina-track Mga Kabanata - Mga entry ng aklatan + Mga nilalaman ng aklatan Kategorya Wala ka pang kategorya. Pindutin ang plus button para gumawa ng isa para sa pag-aayos ng iyong aklatan. Bakante ang Aklatan mo @@ -179,15 +179,13 @@ Ipakita ang laman sa cutout area Naka-fullscreen 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. - Ang extension na ito ay nilagdaan ng sinumang hindi kilalang author at hindi na-load. + Maaaring basahin ng mga mapanganib na extension ang anumang nakatagong kredensyal sa pag-log in o magsagawa ng arbitrary code. \n -\nMaaaring basahin ng mga nakakahamak na extension ang anumang nakatagong kredensyal sa pag-log in o magsagawa ng arbitrary code. -\n -\nSa pamamagitan ng pagtitiwala sa certificate ng extension na ito, tinatanggap mo ang mga panganib na ito. +\nSa pamamagitan ng pagtitiwala sa extension na ito, tinatanggap mo ang mga panganib na ito. Di-pinagkakatiwalaang extension I-uninstall Tiwala - Kaduda-duda + Hindi pinagkakatiwalaan Naka-install Ini-install Dina-download @@ -199,7 +197,7 @@ Lahat Palaging tanungin Default na kategorya - Maghanap ng mga bagong cover at detalye kapag nag-a-update ng Aklatan + Maghanap ng mga bagong cover at detalye kapag nag-a-update ng aklatan Awtomatikong i-refresh ang metadata Laktawan ang mga entry na may katayuang \"Nakumpleto\" Kapag naka-charge @@ -266,7 +264,7 @@ Maaaring ilagay ang entry sa iyong library bago ito gawin Bigong mapalitan ang cover Mga kabanata %1$s - Kabanata %1$s at karagdagang %2$d pa + Kabanata %1$s at karagdagang %2$d iba pa Kabanata %1$s May mga bagong kabanata Di ma-download ang mga kabanata dahil sa mababang espasyo sa storage @@ -289,12 +287,12 @@ Natapos: Pagbasa Para sa seryeng ito - Gamiting cover ang larawang ito\? + Gamiting cover art ang larawang ito? Di mai-load ang larawan Di makita ang susunod na kabanata Pahina: %1$d Napalitan na ang cover - Gawing cover + Gawin itong cover Pinili kong filter Na-save na ang larawan I-reset ang lahat ng chapters sa entry na ito @@ -371,7 +369,7 @@ Mga na-download lang Nakatutulong sa pag-ayos sa mga bug. Walang sensitibong data ang ipapadala Ipadala ang mga ulat ng pag-crash - Nai-update patungong bersyon %1$s + Na-update sa %1$s Maghanap ng update Mga lisensiyang open-source Anong bago @@ -433,7 +431,7 @@ Gabay sa Paglipat ng source Abante Balik - Walang nakitang app para makapili + Walang nakitang file picker app Ipakita sa mga listahan ng source at extension Mga source na NSFW (18+) Mag-login muli po sa MAL @@ -452,7 +450,7 @@ Sinusubaybayan Kaliwa at Kanan Hatiin ang mga malalapad na pahina - Ipakita ang bilang ng mga item + Ipakita ang bilang ng mga aytem Kung sakaling hindi sumasakto sa direksyon ng pagbabasa ang paghahati sa malalapad na pahina Baligtarin ang paghahati sa pahina Kailangan mong i-install muli ang mga nawawalang extension at mag-login muli sa mga tracker pagkatapos para magamit ang mga ito. @@ -491,14 +489,14 @@ Hindi makita ang kabanata Di suportado ang source Di pa nabasa - Di maibahagi ang cover - Di ma-save ang cover + Error sa pagbabahagi ng cover + Error sa pag-save ng cover Na-save na ang cover - Takip ng manga + Cover Naka-off Naka-on Lokal na source - Mga setting ng bawat kategorya para sa pag-aayos + Mga setting ng bawat kategorya para sa pagbubukod-bukod Wala ka pang kategorya. Gabay sa pag-track I-download na @@ -562,7 +560,7 @@ Naka-hiatus Kinansela Ipakita ang entry - Pabalat lang + Cover-only na grid Nilaktawan dahil kumpleto na ang serye Laktawan ang hindi nasimulang mga entry Nilaktawan dahil may di pa nabasang mga kabanata @@ -711,7 +709,7 @@ Mga pagitan Nilaktawan dahil walang inaasahang release ngayong araw May mga resulta - Tanggalin ang na-download + Burahin ang na-download OK Tanggalin ang %s tracking\? Tatanggalin nito ang lokal na pag-track. @@ -735,8 +733,8 @@ Gusto mo bang mag-ayos ng kategorya ayon sa alpabeto\? Mga setting ng source Mga setting ng app - Ang file picker ay nabigo na ibalik ang file sa app - Data at storage + Walang napiling file + Datos at storage Binabawasan ang ghosting sa mga e-ink na display Mag-flash kada pumalit ng pahina Hindi kailanman @@ -799,4 +797,5 @@ Nord Malapit na Bawiin ang mga pinagkakatiwalaang hindi kilalang extension + Open source na repo \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/fr/strings.xml b/i18n/src/commonMain/resources/MR/fr/strings.xml index 6fec652ac..da0406b20 100644 --- a/i18n/src/commonMain/resources/MR/fr/strings.xml +++ b/i18n/src/commonMain/resources/MR/fr/strings.xml @@ -67,7 +67,7 @@ Tout Restrictions matérielles pour les mises à jour automatiques Lors de la charge - Ayant comme statut « Terminé » + Exclure si le statut est « Terminé » Synchroniser la progression après lecture Plein écran Activer les transitions @@ -183,7 +183,7 @@ Erreur Aucune connexion disponible Aucune connexion disponible - Êtes-vous sûr(e) \? Les chapitres lus et la progression des entrées non présentes dans la bibliothèque seront perdues + Êtes-vous sûr(e) ? Les chapitres lus et la progression des entrées hors dans la bibliothèque seront perdues Supprimer les chapitres sélectionnés \? Impossible de télécharger le chapitre en raison d\'une erreur inattendue Cinquième chapitre avant le dernier lu @@ -239,11 +239,9 @@ Installée Désinstaller Extension non reconnue - Cette extension a été signée avec un certificat non fiable et n\'a pas été activée. + Une extension malveillante pourrait lire n\'importe quel identifiant de connexion stocké ou exécuter un code arbitraire. \n -\nUne extension malveillante pourrait lire n\'importe quel identifiant de connexion stocké ou exécuter un code arbitraire. -\n -\nEn faisant confiance à ce certificat, vous acceptez ces risques. +\nEn faisant confiance à cette extension, vous acceptez ces risques. Vitesse d\'animation du double-clic Sans animation Normale @@ -375,7 +373,7 @@ Donnée Sources manquantes : La sauvegarde ne contient pas d\'entrées de bibliothèque. - Fichier de sauvegarde invalide + Fichier de sauvegarde invalide : Actualiser automatiquement les métadonnées Migrer Grille espacée @@ -536,7 +534,7 @@ Installez et démarrez Shizuku pour utiliser Shizuku comme installateur d\'extensions. Shizuku n\'est pas en cours d\'exécution Legacy - Installateur + installeur Installation de l\'extension… Entrées totales Rapports détaillés @@ -551,11 +549,11 @@ Tout mettre à jour Mises à jour de l\'application Vider le cache de chapitre au lancement de l\'application - %1$d entrées qui ne sont pas dans la bibliothèque dans la base de données + %1$d entrées hors de la bibliothèque dans la base de données Rien à effacer - Échec de la récupération de la liste des extensions + Aucune extension trouvée Politique de confidentialité - Avec chapitre(s) non lu(s) + Exclure s\'il reste un/des chapitre(s) à lire Enregistrer comme archive CBZ Pour savoir comment corriger les erreurs de mise à jour de la bibliothèque, voir %1$s En pause @@ -565,7 +563,7 @@ Grille avec seulement la couverture Panoramique des images larges Zoom automatique dans les images larges - Qui n\'ont pas encore commencé + Exclure si lecture pas encore débutée Sauté car la série est terminée Sauté car aucun chapitre n\'est lu Sauté car il y a des chapitres non lus @@ -703,10 +701,10 @@ Action de glisser à droite Appuyez deux fois pour zoomer Prochaine mise à jour prévue - Prochaine sortie prévue dans : + Prédiction de la prochaine date sortie Définir l\'intervalle Valider - Intervalle de recherche personnalisé + Fréquence de mise à jour personnalisée Appuyez ici pour de l\'aide sur Cloudflare Débloquer %s Synchronisation de la bibliothèque @@ -755,13 +753,13 @@ Permission de notifications Utilisation de la batterie en arrière-plan Pour installer des extensions de source. - Évite les interruptions des longues mises à jour de bibliothèque, téléchargements de chapitres et restaurations de sauvegardes. + Évite l\'interruption des mises à jour de bibliothèque, des téléchargements de chapitres, et des restaurations de sauvegardes. Permission d\'installer des applications Mise à jour depuis une ancienne version et pas sûr de quoi choisir ? Consultez le guide de stockage pour plus d\'informations. Guide de stockage Soyez notifié des mises à jour de la bibliothèque et autre. Mise à jour intelligente - Guide de démarrage + Guide de premier lancement Commençons par paramétrer certaines choses. Vous pouvez toujours changer ces paramètres plus tard. Sélectionnez un dossier où %1$s stockera les chapitres téléchargés, les sauvegardes et plus encore. \n @@ -769,4 +767,35 @@ \n \nDossier sélectionné : %2$s Sélectionnez un dossier + De retour sur %s ? + Annuler le suivi avec %s ? + Inclure des informations sensible (ex : jetons de connexion) + De nouveaux chapitres sont prédits dans environ %1$s, mise à jour prévu tous les %2$s. + Exclure la team de scantrad + Aucune team de scantrad trouvé + Jamais + Nouveau sur %s ? Nous vous recommandons de jeter un œil au guide de démarrage. + Voulez-vous vraiment supprimer le répertoire « %s » ? + Fréquence de mise à jour personnalisé : + Erreur complète : + Supprimer le répertoire + Répertoire d\'extension + Révoquer les extensions provenant d\'un répertoire additionnel + URL du répertoire + Ajouter un répertoire additionnel à Tachiyomi. L\'URL devrait se terminer par « index.min.json ». + Ce répertoire existe déjà ! + L\'URL du répertoire est invalide + Bientôt + Vous n\'avez aucun répertoire. + Ajouter un répertoire + Répertoire open source + Nord + Créer + Cela arrêtera le suivi pour cette série. + Aucun fichier sélectionné + Mise a jour de la bibliothèque... (%s) + Commencer + Impossible de créer un fichier de sauvegarde + Dernière sauvegarde automatique : %s + Paramètres sources \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/hr/plurals.xml b/i18n/src/commonMain/resources/MR/hr/plurals.xml index 66fa95de1..a404dab79 100644 --- a/i18n/src/commonMain/resources/MR/hr/plurals.xml +++ b/i18n/src/commonMain/resources/MR/hr/plurals.xml @@ -80,4 +80,9 @@ %d dana %d dana + + %d repozitorij + %d repozitorija + %d repozitorija + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/hr/strings.xml b/i18n/src/commonMain/resources/MR/hr/strings.xml index fd05dd002..fa45df740 100644 --- a/i18n/src/commonMain/resources/MR/hr/strings.xml +++ b/i18n/src/commonMain/resources/MR/hr/strings.xml @@ -4,9 +4,7 @@ Uvijek Cjeloekranski prikaz Ovo proširenje više nije dostupno. Možda neće ispravno funkcionirati i može uzrokovati probleme s aplikacijom. Preporučuje se deinstalacija. - Ovo proširenje potpisano je nepovjerljivim certifikatom i nije aktivirano. -\n -\nZlonamjerno proširenje može pročitati sve spremljene podatke za prijavu ili izvršiti proizvoljni kod. + Zlonamjerno proširenje može pročitati sve spremljene podatke za prijavu ili izvršiti proizvoljni kod. \n \nVjerujući ovom certifikatu, prihvaćaš te rizike. Nepovjerljivo proširenje @@ -24,7 +22,7 @@ Sve Uvijek pitaj Standardna kategorija - Sa stanjem „Završeno“ + Preskoči unose sa stanjem „Završeno“ Kad se puni Ograničenja uređaja za automatska aktualiziranja Tjedno @@ -373,7 +371,7 @@ Podaci Nedostaju izvori: Sigurnosna kopija ne sadrži unose u biblioteci. - Neispravna datoteka sigurnosne kopije + Neispravna datoteka sigurnosne kopije: Jednosmjerna sinkronizacija za aktualiziranje napretka poglavlja u eksternoj usluzi praćenja. Postavi praćenje pojedinačnih unosa manga putem gumba za praćenje. Provjeri nove naslovnice i pojedinosti prilikom aktualiziranja biblioteke Automatski osvježi metapodatke @@ -452,9 +450,7 @@ Praćeno Desno i lijevo Prikaži broj elemenata - Podaci datoteke sigurnosne kopije će se obnoviti. -\n -\nZa upotrebu podataka, morat ćeš instalirati nedostajuća proširenja i nakon toga se prijaviti na usluge praćenja. + Možda ćeš morati instalirati sva nedostajuća proširenja i naknadno se prijaviti na usluge praćenja za njihovo korištenje. Ako se položaj rastavljenih širokih stranica ne podudara sa smjerom čitanja Obrni položaj rastavljene stranice Rastavi široke stranice @@ -546,12 +542,12 @@ Izbriši predmemoriju poglavlja tijekom pokretanja aplikacije Ažuriranja aplikacije Nema se što raščistiti - S nepročitanim poglavljima + Preskoči unose s nepročitanim poglavljima Poboljšane usluge praćenja Pruža poboljšane značajke za određene izvore. Unosi se automatski prate kada se dodaju u biblioteku. Prati Politika privatnosti - Neuspjelo preuzimanje popisa proširenja + Neuspjelo preuzimanje dostupnih proširenja Instalacijski program Stari način Najviša @@ -567,7 +563,7 @@ Samo naslovnice Panoramski prikaz širokih slika Automatski zumiraj u široke slike - Koja još nisu pokrenuta + Preskoči nepokrenute unose Preskočeno, jer je serija kompletna Preskočeno, jer nijedno poglavlje nije pročitano Preskočeno, jer postoje nepročitana poglavlja @@ -605,7 +601,7 @@ Dobna granica Preuzmi unaprijed Višejezičnost - Dozvole za spremanje nisu odobrena + Dozvole za spremište nisu odobrena Tsunami Nevažeće mjesto: %s Zapisnici iznenadnog gašenja aplikacije, optimizacije baterije @@ -613,7 +609,7 @@ Lokalno Traži … Kategorije, globalno ažuriranje, prelistavanje poglavlja - Ručne i automatske sigurnosne kopije, memorija + Ručne i automatske sigurnosne kopije, količina spremišta Statistike Preuzeto Gumb za nastavljanje čitanja @@ -705,12 +701,12 @@ Prelistaj poglavlja Prelistaj udesno Postavi interval - Prilagođeni interval dohvaćanja + Prilagođeni interval preuzimanja Procijeni svakih Sljedeće očekivano aktualiziranje Postavi za aktualiziranje svakih U redu - Izvan očekivanog razdoblja izdavanja + Predvidi vrijeme sljedećeg izdanja Intervali Ukloniti praćenje %s\? Preskočeno, jer se danas nije očekivalo izdanje @@ -742,16 +738,16 @@ Nikada Smanjuje artefakte na ekranima s e-tintom Zadnja automatska sigurnosna kopija: %s - Zabljesni prilikom mijenjanja stranice + Zabljesni prilikom listanja Stvori Primijeni Obnovi standardne vrijednosti Nije pronađen nijedan amaterski prevoditelj Amaterski prevoditelj - Korištenje memorije + Korištenje spremišta Rezultat tragača Isključi amaterske prevoditelje - Mjesto spremanja + Mjesto spremišta Koristi se za automatske sigurnosne kopije, preuzimanje poglavlja i lokalni izvor. Više opcija Odabrano @@ -770,14 +766,36 @@ Dobro došao, dobro došla! Vodič za početno pokretanje Koristiš %s po prvi puta? Preporučujemo da pogledaš vodič za pokretanje. - Već si koristio/la %s? + Ponovo istalirati %s? Izbjegni prekide pri dugotrajnim aktualiziranjima biblioteke, preuzimanjima i obnavljanja sigurnosnih kopija. Upotreba baterije u pozadini Hajdemo najprije postaviti neke stvari. Ako želiš možeš ih kasnije promijeniti u postavkama. - Nije postavljeno mjesto za spremanje podataka + Nije postavljeno mjesto spremišta Odaberi mapu u koju će %1$s spremati preuzimanja poglavlja, sigurnosne kopije i drugo. \n \nPreporučujemo koristiti zasebnu mapu. \n \nOdabrana mapa: %2$s + Nord + Za instaliranje proširenja su potrebne dozvole. Dodirni ovdje za odobrenje. + Potpuna greška: + Repozitoriji proširenja + Nemaš postavljenih reopzitorija. + Aktualiziraš sa starije verzije i ne znaš što odabrati? Potraži informacije u vodiču spremišta. + Vodič spremišta + Ovaj repozitorij već postoji! + Prilagođena učestalost aktualiziranja: + Pametno aktualiziranje + Dodaj repozitorij + Izbriši repozitorij + URL repozitorija + Dodaj dodatne repozitorije u Tachiyomi. To bi trebao biti URL koji završava s „index.min.json”. + Neispravan URL repozitorija + Opozovi pouzdana nepoznata proširenja + Želiš li izbrisati repozitorij „%s”? + Otvori repozitorij izvora + Omogući osjetljive postavke (kao što su tokeni za prijavu za usluge praćenja) + Predviđa se da će nova poglavlja biti objavljena za oko %1$s, provjera svakih %2$s. + Uskoro + Dostupno: %1$s / Ukupno: %2$s \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/in/strings.xml b/i18n/src/commonMain/resources/MR/in/strings.xml index 63b87fcf8..669a9a547 100644 --- a/i18n/src/commonMain/resources/MR/in/strings.xml +++ b/i18n/src/commonMain/resources/MR/in/strings.xml @@ -241,9 +241,7 @@ Tidak terpercaya Lepas Ekstensi tidak terpercaya - Ekstensi ini ditandatangani oleh author yang tidak dikenal dan tidak dimuat. -\n -\nEkstensi berbahaya dapat membaca semua kredensial login yang disimpan atau menjalankan kode berbahaya. + Ekstensi berbahaya dapat membaca semua kredensial login yang disimpan atau menjalankan kode berbahaya. \n \nDengan mempercayai sertifikat ekstensi ini, Anda menerima risiko ini. Kecepatan animasi ketukan dua kali @@ -553,7 +551,7 @@ Bersihkan cache bab saat aplikasi dibuka Tidak ada yang perlu dibersihkan %1$d entri non-perpustakaan dalam database - Gagal mendapatkan daftar ekstensi + Gagal mendapatkan ekstensi yang tersedia Lewati daftar dengan chapter yang belum dibaca Kebijakan privasi Penerbitan selesai @@ -625,7 +623,7 @@ Hanya berfungsi jika bab saat ini + bab berikutnya sudah diunduh. Kamu akan menghapus \"%s\" dari pustaka Pustaka terakhir diperbarui: %s - banyak + Semua Apa kamu yakin\? Populer Izin penyimpanan tidak diberikan @@ -703,7 +701,7 @@ Ketuk dua kali untuk memperbesar %d per baris Tetapkan jeda waktu - Interval pengambilan disesuaikan + Frekuensi pembaruan yang disesuaikan Dilewati karena tidak ada rilis yang diharapkan hari ini Pembaruan yang diharapkan berikutnya Interval @@ -793,7 +791,11 @@ Izin diperlukan untuk memasang ekstensi. Klik disini untuk memberi izin. Hapus repo Apa Anda yakin ingin menghapus repo \"%s\"? - Update selanjutnya diperkirakan sekitar %1$s, memeriksa setiap sekitar %2$s + Bab baru diperkirakan akan dirils sekitar %1$s, diperiksa setiap sekitar %2$s. Tersedia:%1$s/Total:%2$s Keseringan pembaruan yang di kostumisasi: + Nord + Segera + Mencabut ekstensi tidak dikenal yang tepercaya + Repo sumber terbuka \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/it/strings.xml b/i18n/src/commonMain/resources/MR/it/strings.xml index fb64822dc..1f4916a0d 100644 --- a/i18n/src/commonMain/resources/MR/it/strings.xml +++ b/i18n/src/commonMain/resources/MR/it/strings.xml @@ -708,7 +708,7 @@ Fuori dal periodo di rilascio previsto Intervalli Stima ogni - Intervallo di recupero personalizzato + Intervallo di aggiornamento personalizzato Prossimo aggiornamento previsto Imposta l\'aggiornamento ogni Saltato perché oggi non era previsto alcun rilascio diff --git a/i18n/src/commonMain/resources/MR/ja/plurals.xml b/i18n/src/commonMain/resources/MR/ja/plurals.xml index cac385e17..be36ec45c 100644 --- a/i18n/src/commonMain/resources/MR/ja/plurals.xml +++ b/i18n/src/commonMain/resources/MR/ja/plurals.xml @@ -48,4 +48,7 @@ %d日 + + %dリポジトリ + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ja/strings.xml b/i18n/src/commonMain/resources/MR/ja/strings.xml index 4ff8c6cb6..6ca795be4 100644 --- a/i18n/src/commonMain/resources/MR/ja/strings.xml +++ b/i18n/src/commonMain/resources/MR/ja/strings.xml @@ -73,7 +73,7 @@ 全て 自動更新の条件 充電中 - ステータスが「完結済み」 + ステータスが「完結済み」の作品をスキップ 読んだ後に読書進捗を更新 デフォルトカテゴリー 毎回尋ねる @@ -158,11 +158,9 @@ WebView で開く ビューア 同期 - この拡張機能は不明の作成者によりサインされているため、ロードされていません。 + 悪意のある拡張機能は保存されているすべてのログイン情報を読み取ることや、任意コード実行をすることができます。 \n -\n悪意のある拡張機能は保存されているすべてのログイン情報を読み取ることや、任意コード実行をすることができます。 -\n -\nこれらのリスクを受け入れ、この拡張機能の証明書を信頼しますか? +\nこれらのリスクを受け入れ、この拡張機能を信頼しますか? ページ数を表示 画面を常にON 高さに合わせる @@ -553,9 +551,9 @@ データベースにはライブラリにない項目は%1$d件あります アプリ起動時に章のキャッシュを消去 消去できるものはありませんでした - 拡張機能リストを取得できませんでした + 利用可能な拡張機能を取得できませんでした プライバシーポリシー - 未読の章あり + 未読の章がある作品をスキップ ライブラリ更新エラーの修正については、%1$sをご覧ください CBZアーカイブとして保存 完結済み @@ -563,7 +561,7 @@ 休載中 項目を表示 表紙グリッド - 読み始めていない + 読み始めていない作品をスキップ 未読の章がある為スキップしました 横長の画像に自動でズームイン 完結済みの為スキップしました @@ -703,9 +701,9 @@ 章の間のスワイプ ダブルタップでズーム 間隔を設定 - カスタマイズした取得間隔 + カスタマイズした更新頻度 次の更新予定 - 更新予定時間外 + 次の更新時点を予測 間隔 今日、連載更新が予想されていないためスキップしました 結果あり @@ -761,7 +759,7 @@ はじめる フォルダを選択してください ようこそ! - %sを使ったことはもうありましたか? + %sを再インストールしていますか? スキップ 次へ はじめに初回設定をしていきましょう。このあとも「設定」にていつも変更できます。 @@ -779,7 +777,25 @@ ライブラリ更新などの通知を送信します。 許可 空き領域:%1$s/総計:%2$s - 次のアップデートは%sに実行する予定です + 新章は%1$sぐらいでリリースされると予測しており、%2$sごとに確認する予定です。 詳細なエラー情報: 拡張機能をインストールするためには権限が必要です。タップで許可してください。 + このリポジトリは既に存在しています! + カスタム更新頻度: + リポジトリを削除 + リポジトリ「%s」を削除してもよろしいですか? + ストレージ ガイド + トラッカーログイン情報などの機密性の高い情報を含みます + 間もなく + 不明な拡張機能の信頼を取り消す + 拡張機能リポジトリ + リポジトリURLが無効です + Tachiyomiにリポジトリを追加します。「index.min.json」で終わるURLを入力してください。 + リポジトリを追加 + ソース リポジトリを開く + 古いバージョンからバージョンアップしたばかりで、選択に悩んでいますか?ストレージ ガイドにご参照ください。 + リポジトリを設定していません。 + リポジトリURL + Nord + スマート・アップデート \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ko/strings.xml b/i18n/src/commonMain/resources/MR/ko/strings.xml index 907777d3c..fba583168 100644 --- a/i18n/src/commonMain/resources/MR/ko/strings.xml +++ b/i18n/src/commonMain/resources/MR/ko/strings.xml @@ -93,11 +93,9 @@ 신뢰되지않음 삭제 신뢰할 수 없는 확장 앱 - 이 확장앱은 신뢰할 수 없는 인증서로 서명되어 활성화되지 않았습니다. + 일부 악의적인 확장 앱은 Tachiyomi에 저장된 로그인 정보를 읽거나 임의의 코드를 실행할 수도 있습니다. \n -\n일부 악의적인 확장 앱은 Tachiyomi에 저장된 로그인 정보를 읽거나 임의의 코드를 실행할 수도 있습니다. -\n -\n이 인증서를 신뢰하면 이러한 위험에 노출될 수 있습니다. +\n이 확장 앱을 신뢰하면 이러한 위험에 노출될 수 있습니다. 전체화면 더블 탭 애니메이션 속도 페이지 번호 표시 @@ -144,7 +142,7 @@ 백업 생성중 회차별 캐시 삭제 %1$s 사용중 - 캐시 삭제됨. %1$d개의 파일이 삭제됨 + 캐시 삭제됨, %1$d개의 파일이 삭제됨 지우는 동안 오류가 발생했습니다 쿠키 삭제 쿠키 삭제됨 @@ -224,7 +222,7 @@ 다운로드 중에 예기치 않은 오류가 발생하였습니다 다운로드 일시중지됨 다운로드한 챕터 - 연재가 끝남 + 연재가 끝났을 때 항목 건너뛰기 읽은 기록 동기화 항상 물어보기 현재 서재를 나중에 복구하는 데 사용 가능 @@ -318,7 +316,7 @@ 복원 취소 백업 실패 %02d분 %02d초 - 잘못된 백업 파일 + 잘못된 백업 파일: 자동 다운로드 북마크 표시된 회차 삭제 허용 회차 지우기 @@ -338,9 +336,9 @@ 보기 편한 격자 다크 모드에 검정색 사용 앱 테마 - 켜기 - 끄기 - 시스템 설정 사용 + 다크 + 라이트 + 시스템 모두 비활성화 다음 페이지 변경 확인을 위해 인증이 필요합니다 @@ -432,7 +430,7 @@ 회차 업데이트 포함: %s 백그라운드 활동 - 안 읽은 회차가 있음 + 안 읽은 회차가 있을 때 항목 건너뛰기 카테고리 별 정렬 설정 Shizuku를 확장 앱 인스톨러로 사용하려면 Shizuku를 먼저 설치해 주세요. 전부 업데이트 @@ -525,16 +523,14 @@ 오래된 순 옥색 딸기 칵테일 - 확장 앱 목록 가져오기 실패 + 사용 가능한 확장 앱 가져오기 실패 제외: %s 트래킹 서비스에 항목 진행 상황을 업데이트합니다. 트래킹 버튼을 이용하여 각각의 항목 별로 트래킹을 설정하세요. 트래커 가이드 향상된 트래킹 서비스 카테고리가 다운로드에서 제외된 경우 다른 카테고리에 포함되어 있어도 다운로드 되지 않습니다. 특정 소스에 대해 향상된 기능을 제공합니다. 서재에 항목이 추가될 시 자동으로 트래킹 됩니다. - 백업 파일에서 데이터가 복구됩니다. -\n -\n복구 완료 후 없어진 소스를 다시 설치하고 트래킹 서비스에 로그인 해야 합니다. + 복구 완료 후 없어진 소스를 다시 설치하고 트래킹 서비스에 로그인 해야 합니다. 백업 파일은 복사하여 다른 장소에 나눠 보관하세요. 백업 파일에는 비밀번호 등의 민감한 정보가 포함될 수 있습니다. 백업 파일 공유시 주의하세요. 백그라운드 서재 업데이트와 라이브러리 업데이트를 도울 수 있습니다 자세한 로그 @@ -557,7 +553,7 @@ 이 만화의 항목을 모두 취소 앞으로 각각의 폴더에 페이지 저장 - 읽지 않음 + 읽지 않은 항목 건너뛰기 이 시리즈를 맨 위로 이동 새로고침 청사과 @@ -705,7 +701,7 @@ 회차 스와이프 두 번 탭하여 줌 간격 설정 - 사용자 지정 가져오기 간격 + 사용자 설정 업데이트 빈도 간격 다운로드 삭제 결과가 있는 것만 보기 @@ -714,7 +710,7 @@ OK 오늘 연재가 예상되지 않았기 때문에 건너뛰었습니다 %s 동기화를 삭제 하시겠습니까\? - 연재 예정 기간 제외 + 다음 연재 기간 예측 다운로드 인덱스를 제거함 다음 업데이트 예정 탭하여 Cloudflare에 관한 도움말 보기 @@ -735,4 +731,71 @@ 카테고리를 알파벳 순으로 정렬하시겠습니까\? 소스 설정 앱 설정 + 확장 앱 설치를 위해 필요합니다. + 서재 업데이트 등의 알림을 보냅니다. + 오류 전체 보기: + 민감한 설정 포함(예시: 트래커 로그인 토큰) + 새 회차는 약 %1$s 후에 출시될 것으로 예상되며, 매 %2$s마다 확인됩니다. + 스캔레이터가 발견되지 않았습니다 + 알림 권한 + 스캔레이터 제외 + 다음 + 폴더를 선택하기 + 건너뛰기 + 시간이 많이 걸리는 서재 업데이트, 다운로드 및 백업 복원이 중단되지 않도록 합니다. + 스마트 업데이트 + 저장소 추가 + 잘못된 저장소 URL + \"%s\" 저장소를 삭제하고 싶습니까? + 이전 버전에서 업데이트하는데 무엇을 선택해야 할지 모르시나요? 자세한 내용은 저장공간 가이드를 참조하세요. + 백그라운드 배터리 사용 + 허용 + %s가 처음입니까? 시작 가이드를 확인하는 것을 추천합니다. + 저장공간 가이드 + 저장소 URL + 확장 앱을 설치하려면 권한이 필요합니다. 부가하려면 여기를 탭하세요. + 저장소를 추가하지 않았습니다. + 이 저장소는 이미 존재합니다! + 저장공간 위치 + 앱 다운로드 권한 + 확장 앱 저장소 + 저장소 제거 + 신뢰한 알수없는 확장 앱 신뢰 취소 + 자동 백업, 챕터 다운로드 및 로컬 소스에 사용됩니다. + 사용자 지정 업데이트 빈도: + Tachiyomi에 추가적으로 저장소를 추가합니다. \"index.min.json\"으로 끝나는 URL이어야 합니다. + 소스 저장소 열기 + 곧 출시 + 먼저 몇 가지 사항을 설정해 보겠습니다. 나중에 언제든지 설정에서 변경할 수도 있습니다. + 시작하기 + %1$s가 다운로드, 백업 등을 할 폴더를 선택합니다. +\n +\n앱 전용폴더를 추천합니다. +\n +\n선택된 폴더: %2$s + %s를 재설치 하시겠습니까? + 스캔레이터 + 선택된 파일 없음 + 적용 + 기본값으로 되돌리기 + 생성 + 저장공간 사용량 + 선택됨 + 선택되지 않음 + 기타 옵션 + 위로 이동 + 트래커 점수 + 초보자 가이드 + 환영합니다! + 폴더를 선택해야 합니다 + 저장공간 위치를 설정하지 않았습니다 + 상대적인 타임스탬프 + \"%2$s\" 대신 \"%1$s\"를 사용 + 데이터와 저장공간 + 페이지 전환시 플래시 켜기 + E잉크 디스플레이의 잔상 감소 + 마지막 자동 백업: %s + 없음 + 사용가능: %1$s / 전체: %2$s + Nord \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ms/plurals.xml b/i18n/src/commonMain/resources/MR/ms/plurals.xml index ea46560d9..f1a0c2baf 100644 --- a/i18n/src/commonMain/resources/MR/ms/plurals.xml +++ b/i18n/src/commonMain/resources/MR/ms/plurals.xml @@ -48,4 +48,7 @@ %d hari + + %d repositori + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ms/strings.xml b/i18n/src/commonMain/resources/MR/ms/strings.xml index 4c9d50a0e..701d18ed4 100644 --- a/i18n/src/commonMain/resources/MR/ms/strings.xml +++ b/i18n/src/commonMain/resources/MR/ms/strings.xml @@ -79,7 +79,7 @@ Semua Sekatan kemas kini automatik peranti Ketika mengecas - Dengan status \"Sudah selesai\" + Langkau entri dengan status \"Sudah selesai\" Kemas kini selepas dibaca Kategori lalai Sentiasa tanya @@ -130,12 +130,12 @@ Bab keempat terakhir dibaca Bab kelima terakhir dibaca Muat turun bab baharu - Perkhidmatan + Penjejak Buat sandaran Boleh digunakan untuk memulihkan pustaka semasa Pulihkan sandaran Pulihkan pustaka daripada fail sandaran - Kekerapan sandaran + Kekerapan sandaran automatik Sandaran dicipta Pemulihan selesai Apakah yang ingin anda sandarkan? @@ -143,7 +143,7 @@ Dalam proses membuat sandaran Hapus cache bab %1$s digunakan - Cache dihapuskan. %1$d fail telah dipadamkan + Cache dihapuskan, %1$d fail dipadamkan Ralat berlaku ketika menghapus Hapus cookies Cookies dihapuskan @@ -162,7 +162,7 @@ Ralat tidak diketahui mengemaskinikan kategori Tiada lagi hasil - Sumber setempat + Sumber lokal Lain Carian keseluruhan… Terkini @@ -243,11 +243,9 @@ Tidak dipercayai Nyahpasang Sambungan tak dipercayai - Sambungan ini telah ditandatangani dengan sijil tidak dipercayai dan ia tidak diaktifkan. + Sambungan yang berniat jahat kemungkinan membaca sebarang kelayakan log masuk yang di simpan atau melaksanakan kod sesuka hati. \n -\nSambungan yang berniat jahat kemungkinan membaca sebarang kelayakan log masuk yang di simpan atau melaksanakan kod sesuka hati. -\n -\nDengan mempercayai sijil ini, anda menerima risiko tersebut. +\nDengan mempercayai sambungan ini, anda menerima risiko tersebut. Kelajuan animasi ketik dua kali 32-bit warna Langkau bab yang sudah dibaca @@ -301,15 +299,15 @@ Bab terkini Buka bab Batalkan semua - Mati - Hidup - Ikut sistem + Terang + Gelap + Sistem Uruskan pemberitahuan Keselamatan dan privasi Memerlukan buka kunci Kunci apabila terbiar Selalu - Tidak + Tidak akan Skrin keselamatan Kemas kini baharu Tunjuk kandungan dalam kawasan bertakuk @@ -360,7 +358,7 @@ Dimuat turun sahaja Terakhir digunakan Semak untuk kemas kini - Panduan penggunaan sumber setempat + Panduan penggunaan sumber lokal %02d minit, %02d saat Tapis semua entri di dalam pustaka anda Kelabu @@ -368,13 +366,13 @@ Untuk siri ini Kurangkan jalinan, tapi memberi kesan kepada prestasi Tetapan peranti tidak dapat dibuka - Menyelaras satu hala untuk kemas kini bab kemajuan dalam sistem penjejakan. Sediakan penjejakan untuk entri individu daripada butang penjejakan mereka. + Menyelaras satu hala untuk kemas kini bab kemajuan dalam sistem penjejak luaran. Sediakan penjejakan untuk entri individu daripada butang penjejakan mereka. Segar semula muka hadapan pustaka Mengikut tarikh muat naik Data Tiada sumber: Sandaran tidak mengandungi apa-apa entri pustaka. - Fail sandaran tidak sah + Fail sandaran tidak sah: Semak muka hadapan dan tentang baharu bila mengemaskini pustaka Segar semula metadata secara automatik Pindah sumber @@ -455,9 +453,7 @@ Memisah muka surat lebar Jika kedudukan memisah muka surat lebar tidak sama dengan arah membaca Songsangkan kedudukan memisah muka surat - Data dari fail sandaran akan dipulihkan. -\n -\nAnda perlu memasang sambungan yang hilang dan log masuk ke penjejakan untuk menggunakannya. + Anda perlu memasang sambungan yang hilang dan log masuk ke penjejakan untuk menggunakannya. Sebelumnya Tunjukkan seketika apabila pembaca dibuka Kanan @@ -493,7 +489,7 @@ Format bab tidak sah Bab tidak dijumpai Sekatan: %s - Sumber setempat + Sumber lokal Mati Hidup Ralat berkongsi muka hadapan @@ -515,7 +511,7 @@ Perkidmatan yang menyediakan fungsi yang dipertingkatkan untuk sumber tertentu. Entri akan dijejaki secara automatik apabila ditambahkan ke pustaka. Sandaran/memulih mungkin tidak berfungsi dengan betul jika pengoptimuman MIUI dinyahaktifkan. Sesetengah pengeluar ada sekatan tambahan pada aplikasi yang akan menghentikan perkidmatan latar belakang. Laman web ini ada maklumat cara membaikinya. - Pertingkat perkhidmatan + Pertingkat penjejak Strawberry Daiquiri Terendah Rendah @@ -555,9 +551,9 @@ Hapus cache bab apabila membuka aplikasi Tiada apa untuk dibersihkan %1$d entri bukan pustaka dalam pangkalan data - Gagal mendapatkan senarai sambungan + Gagal mendapatkan sambungan yang ada Dasar privasi - Dengan bab yang belum dibaca + Langkau entri dengan bab yang belum dibaca Untuk bantuan cara menyelesaikan ralat kemas kini pustaka, lihat %1$s Simpan sebagai arkib CBZ Dibatalkan @@ -566,7 +562,7 @@ Tunjuk entri Cuma grid muka hadapan Dilangkau kerana siri sudah lengkap - Yang mana bacaan belum dimulakan + Langkau entri yang mana bacaan belum dimulakan Dilangkau kerana ada bab yang belum dibaca Dilangkau kerana tiada bab yang dibaca Zum secara automatik pada imej lebar @@ -705,12 +701,12 @@ Ketik dua kali untuk zum Tindakan leret ke kiri Tetapkan jarak masa - Jarak masa diambil tersuai + Kekerapan kemaskini tersuai Kemas kini seterusnya dijangka Tetapkan untuk kemas kini setiap Dilangkau kerana tiada keluaran yang dijangkakan hari ini Jarak masa - Diluar jangkaan masa keluaran + Jangka masa keluaran seterusnya Anggaran setiap Buang penjejakan %s\? Ini akan membuang penjejakan secara lokal. @@ -724,9 +720,82 @@ Menyelaraskan pustaka Pustaka selesai diselaraskan Tiada sambungan Internet - Log masuk penjejakan + Log masuk penjejak Indeks muat turun tidak sah Ketik di sini untuk bantuan berkenaan Cloudflare HTTP %d, semak laman web dalam WebView Buka kunci %s + Kemaskini pintar + Gerak siri ke bawah + Nord + Gunakan + Kembali ke lalai + Tidak dipilih + Lain-lain pilihan + Dipilih + Adakah anda berminat untuk susun kategori mengikut abjad? + Susun kategori + Pilih folder + Panduan pertama penggunaan + Selamat datang! + Mari menetapkan sesuai terdahulu. Anda juga boleh menukar perkara ini di tetapan kemudian. + Seterusnya + Mari memulakan + Langkau + Pilih folder dimana %1$s akan simpan bab yang dibuat turun, sandaran, dan banyak lagi. +\n +\nFolder khas sangat digalakkan. +\n +\nFolder yang dipilih: %2$s + Folder mestilah dipilih + Cap masa relatif + \"%1$s bukannya %2$s\" + Baru ke %s? kami cadang lihat panduan permulaan. + Ralat penuh: + Termasuk tetapan sulit (cth., token log masuk penjejak) + Tersedia:%1$s/Jumlah:%2$s + Bab baharu dijangkakan akan keluar sekitar %1$s, semakan setiap %2$s. + Tiada fail dipilih + Pasang kebenaran aplikasi + Penggunaan bateri latar belakang + Tambah repositori + Padam repositori + Repositori URL tidak sah + Buat + Penggunaan storan + Kekerapan kemas kini tersuai: + Tiada scanlators dijumpai + Mengemaskini daripada versi lama dan tidak pasti yang mana nak dipilih? Rujuk pada panduan storan untuk maklumat lanjut. + Kebenaran pemberitahuan + Memasang semula %s? + Repositori ini sudah wujud! + Tiada lokasi storan ditetapkan + Tidak pernah + Panduan storan + Untuk pasang sumber sambungan. + Elak gangguan pada kemas kini yang panjang, muat turun, dan pemulihan sandaran. + Benarkan + Dapatkan pemberitahuan untuk kemas kini pustaka dan banyak lagi. + Kebenaran diperlukan untuk pasang sambungan. Ketik di sini untuk benarkan. + repositori sambungan + URL repositori + Adakah anda bersetuju untuk padam repositori \"%s\"? + Skor penjejak + Batalkan sambungan dipercayakan yang tidak diketahui + Anda tidak menetapkan repositori. + Tambah repositori tambahan pada Tachiyomi. Ini mestilah URL yang berakhir dengan \"index.min.json\". + Buka sumber repositori + Tidak lama lagi + Scanlator + Kecualikan scanlators + Navigasi ke atas + Digunakan untuk sandaran automatik, muat turun bab, dan sumber lokal. + Lokasi storan + Tetapan aplikasi + Tetapan sumber + Data dan storan + Kilat pada perubahan muka surat + Mengurangkan kesan \'ghosting\' pada skrin e-ink + Sandaran automatik terakhir:%s + Mengemaskini pustaka… (%s) \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ne/plurals.xml b/i18n/src/commonMain/resources/MR/ne/plurals.xml index 1de3f8432..dfe3035be 100644 --- a/i18n/src/commonMain/resources/MR/ne/plurals.xml +++ b/i18n/src/commonMain/resources/MR/ne/plurals.xml @@ -64,4 +64,8 @@ १ दिन %d दिन + + %d रेपो + %d रेपोहरु + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ne/strings.xml b/i18n/src/commonMain/resources/MR/ne/strings.xml index 2e59f0abe..048894780 100644 --- a/i18n/src/commonMain/resources/MR/ne/strings.xml +++ b/i18n/src/commonMain/resources/MR/ne/strings.xml @@ -745,4 +745,11 @@ फाइल पिकर एपमा फाइल फर्काउन असफल भयो चयन गरिएको चयन नगरिएको + ट्र्याकर मुल्यन्कन + स्क्यानलेतर + अरु मेनु + स्वागत! + अर्को + सुरु + छोड \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/pt-rBR/strings.xml b/i18n/src/commonMain/resources/MR/pt-rBR/strings.xml index 85a909a24..17a4d1d02 100644 --- a/i18n/src/commonMain/resources/MR/pt-rBR/strings.xml +++ b/i18n/src/commonMain/resources/MR/pt-rBR/strings.xml @@ -243,11 +243,9 @@ Não confiável Desinstalar Extensão não confiável - Esta extensão foi assinada por um autor desconhecido e não foi carregada. + Extensões maliciosas podem ler quaisquer credenciais de login armazenadas ou executar códigos arbitrários. \n -\nExtensões maliciosas podem ler quaisquer credenciais de login armazenadas ou executar códigos arbitrários. -\n -\nAo confiar no certificado desta extensão, você estará aceitando estes riscos. +\nAo confiar nessa extensão, você estará aceitando estes riscos. Velocidade da animação do toque duplo Sem animação Normal @@ -781,7 +779,7 @@ Disponível: %1$s / Total: %2$s Permissões são necessárias para instalar extensões. Toque aqui para conceder. Incluir configurações sensíveis (tokens de login dos monitoradores, por exemplo) - Novos capítulos com previsão de serem lançados em torno de %1$s, verificando em torno de cada %2$s + Novos capítulos com previsão de serem lançados em torno de %1$s, verificando em torno de cada %2$s. Frequência de atualização personalizada: Erro completo: Este repositório já existe! @@ -799,4 +797,5 @@ Em breve Nord Revogar a confiabilidade de extensões desconhecidas + Abrir repositório da fonte \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/pt/plurals.xml b/i18n/src/commonMain/resources/MR/pt/plurals.xml index ff2ef60ef..0a58e5a65 100644 --- a/i18n/src/commonMain/resources/MR/pt/plurals.xml +++ b/i18n/src/commonMain/resources/MR/pt/plurals.xml @@ -80,4 +80,9 @@ %d dias %d dias + + %d repositório + %d repositórios + %d repositórios + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/pt/strings.xml b/i18n/src/commonMain/resources/MR/pt/strings.xml index daaaa1d6f..1e022fbb7 100644 --- a/i18n/src/commonMain/resources/MR/pt/strings.xml +++ b/i18n/src/commonMain/resources/MR/pt/strings.xml @@ -712,11 +712,11 @@ Próxima atualização esperada Definido para atualizar a cada Pulado, pois nenhum lançamento é esperado para hoje - Deletar dowloand + Apagar download Selecionado Não selecionado Mais opções - Rolar para cima + Navegar para cima Desbloquear %s Dados e armazenamento \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ru/strings.xml b/i18n/src/commonMain/resources/MR/ru/strings.xml index e655639ac..5380e74c7 100644 --- a/i18n/src/commonMain/resources/MR/ru/strings.xml +++ b/i18n/src/commonMain/resources/MR/ru/strings.xml @@ -554,7 +554,7 @@ Не удалось получить доступные расширения Политика конфиденциальности Пропускать серии с непрочитанными главами - Для помощи в исправлении ошибок библиотеки нажать %1$s + Для помощи в исправлении ошибок библиотеки, нажмите %1$s Сохранить как архив CBZ Отменено Перерыв @@ -705,7 +705,7 @@ Оценивать каждые Задать интервал Следующее ожидамое обновление - Ожидается выход новых глав + Предсказать время выхода новых глав Задать обновления каждые Пропущено, т.к сегодня не ожидается выпуска Удалить отслеживание %s\? @@ -796,6 +796,6 @@ Обновляетесь со старой версии и не знаете, что выбрать? Обратите внимание на руководство по хранению для большей информации. Скоро Север - Не доверять неизвестным расширениям - Репозиторий open-source + Убрать доверие к ненадёжным расширениям + Открыть репозиторий источника \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/sv/strings.xml b/i18n/src/commonMain/resources/MR/sv/strings.xml index 1b410a883..ee3c2dbac 100644 --- a/i18n/src/commonMain/resources/MR/sv/strings.xml +++ b/i18n/src/commonMain/resources/MR/sv/strings.xml @@ -11,7 +11,7 @@ Bibliotek Historik Uppdateringar - Säkerhetskopiering och återställning + Säkerhetskopiera och återställ Migrera Tillägg Tilläggsinformation @@ -83,7 +83,7 @@ Alla Automatiska uppdateringar av enhetsbegränsningar Vid laddning - Med status \"Avslutat\" + Hoppa över artiklar med status \"Avslutat\" Uppdatera förlopp efter läsning Standardkategori Fråga alltid @@ -97,11 +97,9 @@ Opålitlig Avinstallera Opålitlig extension - Detta tillägg tecknades med ett otillförlitligt certifikat och var inte aktiverat. + Ett skadligt tillägg kan läsa lagrade inloggningsuppgifter eller köra arbiträr kod. \n -\nEtt skadligt tillägg kan läsa lagrade inloggningsuppgifter eller utföra godtycklig kod. -\n -\nGenom att lita på detta certifikat accepterar du dessa risker. +\nGenom att lita på detta tillägg accepterar du dessa risker. Fullskärm Animera sidbyten Animationshastighet för dubbelklick @@ -559,11 +557,11 @@ Publiceringen avslutad Spara som CBZ-arkiv Integritetspolicy - Med olästa kapitel - Det gick inte att hämta tilläggslistan + Hoppa över artiklar med olästa kapitel + Kunde inte hämta tillgängliga tillägg Visa inlägg Endast omslags-rutnät - Som inte har startats + Hoppa över artiklar som ej är påbörjade Panorera breda sidor Automatiskt zoomning i stora bilder Hoppade över eftersom serien är klar @@ -686,7 +684,7 @@ Läst Uppskatta varje Ange intervall - Anpassat hämtningsintervall + Anpassat uppdateringsintervall Nästa förväntade uppdatering Hoppades över eftersom ingen publicering förväntades idag Spårade inlägg @@ -718,7 +716,7 @@ Spårare Klicka här för hjälp med Cloudflare OK - Utanför förväntad releaseperiod + Förutspå nästa releaseperiod Intervaller Kunde inte skapa en backup-fil Licensierad - Inga kapitel att visa @@ -761,7 +759,7 @@ Kom igång En mapp måste väljas Välkommen! - Redan använt %s förut? + Ominstalleras %s? Hoppa över Nästa Låt oss ställa in några saker först. Du kan alltid ändra dessa i inställningarna senare. @@ -781,6 +779,9 @@ Tillgängligt: %1$s / Totalt: %2$s Behörigheter krävs för att installera tillägg. Tryck här för att bevilja. Inkludera känsliga inställningar (t.ex. spårningsinloggningstokens) - Nästa uppdatering förväntas om cirka %s + Nya kapitel förväntas att släppas varje \"%1$s\", kontrollerar varje \"%2$s\". Fullständigt fel: + Osäker på vad du ska välja då du uppdaterar från en äldre version? Se lagerhanteringsguiden för mer information. + Smart uppdatering + Lagerhanteringsguide \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/te/strings.xml b/i18n/src/commonMain/resources/MR/te/strings.xml index 098228537..2ec8dc8cb 100644 --- a/i18n/src/commonMain/resources/MR/te/strings.xml +++ b/i18n/src/commonMain/resources/MR/te/strings.xml @@ -163,7 +163,7 @@ సిరీస్ పైన పెట్టండి అన్వేషించండి… ఇప్పుడు కాదు - "ఏదైనా తెరవండి" + ఏదైనా తెరవండి అంతర్గత లోపం: మరింత సమాచారం కోసం క్రాష్ లాగ్‌లను తనిఖీ చేయండి థీమ్, తేదీ మరియు సమయ ఆకృతి లోపాలూ diff --git a/i18n/src/commonMain/resources/MR/th/strings.xml b/i18n/src/commonMain/resources/MR/th/strings.xml index 50074a4ee..cb7bb50d0 100644 --- a/i18n/src/commonMain/resources/MR/th/strings.xml +++ b/i18n/src/commonMain/resources/MR/th/strings.xml @@ -102,11 +102,9 @@ ไม่น่าเชื่อถือ ถอนการติดตั้ง ส่วนขยายที่ไม่น่าเชื่อถือ - ส่วนขยายนี้ลงนามด้วยผู้พัฒนาที่ไม่รู้จักและจะไม่ถูกเปิดใช้งาน + ส่วนขยายที่เป็นอันตรายสามารถอ่านข้อมูลการเข้าสู่ระบบที่จัดเก็บไว้ หรือเรียกใช้โค้ดโดยอำเภอใจ \n -\nส่วนขยายที่เป็นอันตรายสามารถอ่านข้อมูลการเข้าสู่ระบบที่จัดเก็บไว้ หรือเรียกใช้โค้ดโดยอำเภอใจ -\n -\nการเชื่อถือใบรับรองของส่วนขยายนี้แสดงว่าคุณยอมรับความเสี่ยงเหล่านี้ +\nการเชื่อถือส่วนขยายนี้แสดงว่าคุณยอมรับความเสี่ยงเหล่านี้ เต็มหน้าจอ แสดงแอนิเมชั่นเมื่อเปลี่ยนหน้า ความเร็วแอนิเมชั่นเมื่อแตะ 2 ครั้ง @@ -799,4 +797,5 @@ นอร์ด URL รีโพ ต้องการจะลบรีโพ \"%s\" หรือไม่? + เปิดที่มาของรีโพ \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/tr/strings.xml b/i18n/src/commonMain/resources/MR/tr/strings.xml index 1a15ff2a7..64e1e7818 100644 --- a/i18n/src/commonMain/resources/MR/tr/strings.xml +++ b/i18n/src/commonMain/resources/MR/tr/strings.xml @@ -97,11 +97,9 @@ Güvenilmeyen Kaldır Güvenilmeyen uzantı - Bu uzantı bilinmeyen bir yazar tarafından imzalandı ve yüklenmedi. + Kötü niyetli uzantılar, saklanan oturum açma kimlik bilgilerini okuyabilir veya rastgele kod çalıştırabilir. \n -\nKötü niyetli uzantılar, saklanan oturum açma kimlik bilgilerini okuyabilir veya rastgele kod çalıştırabilir. -\n -\nBu uzantının sertifikasına güvenerek bu riskleri kabul etmiş olursunuz. +\nBu uzantıya güvenerek bu riskleri kabul etmiş olursunuz. Tam Ekran Sayfa geçişlerini canlandır Çift dokunma animasyon hızı @@ -781,7 +779,7 @@ Kullanılabilir: %1$s / Toplam: %2$s Uzantıları kurmak için izin gerekli. İzin vermek için buraya dokunun. Hassas ayarları dahil et (örn. izleyici oturum açma belirteçleri) - Sonraki bölümlerin %1$s içinde yayınlanacağı tahmin ediliyor, %2$s aralıklarla denetleniyor. + Sonraki bölümlerin %1$s içinde yayınlanacağı tahmin ediliyor, her %2$s içinde bir denetleniyor. Tüm hata: Hiç depo ayarlamadınız. Depolama kılavuzu @@ -799,4 +797,5 @@ Nord Güvenilen bilinmeyen uzantıları iptal et Yakında + Açık kaynaklı depo \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/uk/strings.xml b/i18n/src/commonMain/resources/MR/uk/strings.xml index f7b05b574..0812c3408 100644 --- a/i18n/src/commonMain/resources/MR/uk/strings.xml +++ b/i18n/src/commonMain/resources/MR/uk/strings.xml @@ -83,7 +83,7 @@ Всі Обмеження пристрою для автоматичних оновлень Коли заряджається - З статусом \"Завершено\" + Пропустити глави з статусом \"Завершено\" Оновлювати прогрес після прочитання Типова категорія Завжди запитувати @@ -97,11 +97,9 @@ Ненадійне Видалити Ненадійне розширення - Це розширення було підписано ненадійним сертифікатом та не було активовано. + Шкідливе розширення може зчитувати будь-які збережені облікові дані для входу або виконати довільний код. \n -\nШкідливе розширення може зчитувати будь-які збережені облікові дані для входу або виконати довільний код. -\n -\nДовіряючи цьому сертифікату, ви приймаєте ці ризики. +\nДовіряючи цьому розширенню, ви приймаєте ці ризики. Повноекранний режим Анімація переходів сторінки Швидкість анімації при подвійному натиснені @@ -167,7 +165,7 @@ Створення резервної копії Очистити кеш розділів Використано: %1$s - Кеш очищено %1$d файлів було видалено + Кеш очищено, %1$d файлів видалено Виникла помилка при видаленні кешу Очистити куки Куки очищено @@ -301,9 +299,9 @@ Останній розділ Подивитись розділи Скасувати все - Вимкнено - Увімкнено - Використовувати системну + Світла + Темна + Системна Керування сповіщеннями Безпека і конфіденційність Потрібно розблокувати @@ -374,7 +372,7 @@ %02d хв, %02d сек Відсутні джерела: Бекап не містить жодних записів бібліотеки. - Невірний файл резервної копії + Невірний файл резервної копії: Одностороння синхронізація для оновлення прогресу розділу у зовнішніх сервісах стеження. Налаштуйте відстеження окремих записів за допомогою кнопки відстеження. Показувати вкладки категорій Зручна сітка @@ -455,9 +453,7 @@ Розділення широких сторінок Якщо розділення широких сторінок, не відповідає напрямку читання Інвертувати розділення широких сторінок - Дані з файлу резервної копії буде відновлено. -\n -\nВам потрібно встановити розширення яких бракує та увійти в сервіси відстежування для їх використання. + Вам потрібно встановити розширення яких бракує та увійти в сервіси відстежування для їх використання. Зправа Зліва Наступний @@ -557,7 +553,7 @@ %1$d небібліотечних записів у базі даних Немає чого очищувати Політика конфіденційності - Є непрочитаний(ні) розділ(и) + Пропустити непрочитаний(ні) розділ(и) Зберегти архів як CBZ Для допомоги в виправленні помилок оновлення бібліотеки, дивіться %1$s Публікація завершена @@ -565,7 +561,7 @@ Заморожено Показати запис Сітка тільки з обкладинками - Серія не почата + Пропустити непочаті глави Перемістити серію на початок Портретна навпаки %1$d оновлення(нь) не вдалось @@ -706,8 +702,8 @@ %d на рядок Встановити інтервал Оцініть кожну - Налаштувати інтервал отримання - Поза очікуваним періодом випуску + Налаштувати інтервал оновленнь + Передбачити наступний випуск Наступне очікуване оновлення Інтервали Налаштовано на оновлення кожної @@ -751,4 +747,55 @@ Оновлення бібліотеки... (%s) Файл не вибрано Виключити перекладачів + Щоб встановити джерело розширеннь. + Перевстановлюєте %s? + Встановити дозволи додатка + Потребуються дозволи для встановлення додатків. Натисніть сюди для отримання. + Повна помилка: + Включати конфіденційні налаштування (наприклад, токени для входу в трекери) + Доступні: %1$s / Усього: %2$s + Використання батареї на фоні + Потрібно обрати папку + Дозвіл на сповіщення + Отримувати сповіщення про оновлення бібліотек та інше. + Розумні оновлення + У вас нема встановлених репозиторіїв. + Додати репозиторій + Репозиторії розширень + Цей репозиторій вже існує! + Посилання на репозиторій + Додати додаткові репозиторії до Tachiyomi. Це повинні бути посилання які закінчуються на \"index.min.json\". + Нові глави передбачено будуть випущені приблизно в %1$s, перевіряючи кожні %2$s. + Оновлюєтесь з попередньої версії і не впевнені яку обрати? Перегляньте гайд по сховищу для додаткової інформації. + Гайд по сховищу + Своя частота оновлення: + Північ + Недійсне посилання на репозиторій + Бажаєте видалити репозиторій \"%s\"? + Не встановлено місце сховища + Місце сховища + Отримати + Використовується для автоматичних бекапів, завантажень глав, та локальних джерел. + Незабаром + Скинути довірені невідомі розширення + Видалити репозиторій + Репозиторій з відкритим початковим кодом + Обрано + Не обрано + Більше опцій + Навігація вгору + Новачки у %s? Ми рекомендуємо переглянути стартовий гайд. + Уникати переривань для довготривалих оновлень бібліотек, завантажень, та бекапів. + Оберіть папку + Вітаємо! + Далі + Пропустити + Оберіть папку де %1$s буде зберігати збережені глави, бекапи, та інше. +\n +\nРекомендуємо обрати окрему папку. +\n +\nОбрана папка: %2$s + Почнемо + Давайте для початку налаштуємо дещо. Ви завжди зможете змінити ці налаштування потім. + Гайд новачка \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/zh-rCN/plurals.xml b/i18n/src/commonMain/resources/MR/zh-rCN/plurals.xml index e02b9d1b6..93ef73539 100644 --- a/i18n/src/commonMain/resources/MR/zh-rCN/plurals.xml +++ b/i18n/src/commonMain/resources/MR/zh-rCN/plurals.xml @@ -16,7 +16,7 @@ %d 个插件可更新 - 剩余 %1$s 本 + 剩余 %1$s 章 %d 个分类 @@ -28,13 +28,13 @@ 共 %1$s 章 - %d个进度记录平台 + %d 个记录平台 跳过了 %d 章,可能是图源没有这些章节,或者被筛选规则排除了 - %1$d天前 + %1$d 天前 后续 %d 个未读章节 @@ -43,12 +43,12 @@ 后续 %d 章 - 缺少%1$s章 + 缺少 %1$s 章 - %d天 + %d 天 - %d 仓库 + %d 个仓库 \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/zh-rCN/strings.xml b/i18n/src/commonMain/resources/MR/zh-rCN/strings.xml index 0526428e2..391577b92 100644 --- a/i18n/src/commonMain/resources/MR/zh-rCN/strings.xml +++ b/i18n/src/commonMain/resources/MR/zh-rCN/strings.xml @@ -10,7 +10,7 @@ 书架 历史 更新 - 备份和还原 + 备份与还原 插件 插件信息 设置 @@ -27,8 +27,8 @@ 标记为已读 标记为未读 下载 - 添加章节书签 - 移除章节书签 + 为章节添加书签 + 为章节删除书签 删除 更新书架 编辑 @@ -63,7 +63,7 @@ 还原 正在加载… 已下载的章节数 - 应用不可用 + 应用无法使用 常规 阅读 下载 @@ -75,18 +75,18 @@ 横屏 自动更新 关闭 - 每6小时 - 每12小时 + 每 6 小时 + 每 12 小时 每天 - 每2天 + 每 2 天 每周 全部 - 设备自动更新限制 + 自动更新的系统限制 充电时 - 跳过状态为“已完结”的作品 + 跳过已完结的作品 阅读后更新进度 - 默认分类 - 始终询问 + 默认归入分类 + 每次都询问 更新 安装 等待中 @@ -94,21 +94,19 @@ 安装中 已安装 信任 - 不可信 + 未信任 卸载 - 不可信的插件 - 此插件由未知作者签名且尚未加载。 + 插件未受信任 + 恶意插件可能会读取所有登录的账号或执行任意代码。 \n -\n恶意插件可以读取任何存储的登录凭据或执行任意代码。 -\n -\n信任此插件证书即代表您愿意承担上述风险。 +\n信任此插件即代表你愿意承担上述风险。 全屏 - 页面过渡动画 + 翻页动画 双击动画速度 显示页码 裁剪边缘 自定义亮度 - 自定义滤镜 + 色彩滤镜 保持屏幕常亮 翻页 音量键翻页 @@ -146,38 +144,38 @@ B A 手动标记为已读后 - 阅毕自动删除 + 读完自动删除 关闭 - 最后阅读的章节 - 倒数第二已读章节 - 倒数第三已读章节 - 倒数第四已读章节 - 倒数第五已读章节 + 刚才读完的章节 + 倒数第二个已读章节 + 倒数第三个已读章节 + 倒数第四个已读章节 + 倒数第五个已读章节 自动下载新章节 - 进度记录平台 + 平台 创建备份 - 可用于还原当前书架数据 + 可以用来还原当前书架内容 还原备份 - 从备份文件中还原 + 从备份文件中还原书架内容 自动备份频率 已创建备份 还原完毕 - 需要备份什么? + 想要备份什么? 正在还原备份 正在创建备份 清除章节缓存 - 已使用空间:%1$s - 缓存已清除,%1$d个文件已被删除 - 清除时出现错误 + 已使用:%1$s + 已清除缓存,删除了 %1$d 个文件 + 清除时发生错误 清除 Cookie Cookie 已清除 清理数据库 删除未添加到书架的作品记录 - 您确定吗?不在书架中的作品的已读章节和进度将会丢失 + 未添加到书架中的作品的阅读进度将会丢失,你确定吗? 数据已删除 版本 发送错误报告 - 协助我们修复错误,发送的错误报告不包含个人敏感信息 + 协助我们修复错误;不会发送敏感数据 登录 %1$s 用户名 密码 @@ -202,23 +200,23 @@ \n「%1$s」 未安装图源:%1$s 第 %1$s 章 - 正在下载(%1$d/%2$d) - 错误 - 搁置中 + 正在下载 (%1$d/%2$d) + 出错 + 已暂停 图源标题 章节编号 按图源 按章节编号 - 下载章节 + 下载 未读 - 您确定删除所选章节吗? + 确定要删除所选章节吗? 进度记录 - 阅读中 + 在读 已完结 - 已放弃 - 搁置中 - 计划读 - 重读中 + 抛弃 + 搁置 + 想读 + 重温 评分 标题 状态 @@ -226,7 +224,7 @@ 类型 已存在同名分类! 分类已删除 - 此章节的阅读日期将被清除,您确定吗? + 将会清除此章节的阅读日期,你确定吗? 重置此作品的所有章节 要添加到书架吗? 图片已保存 @@ -235,7 +233,7 @@ 封面已更新 第 %1$d 页 后面没有啦 - 无法加载该图片 + 加载图片失败 要将此页设为封面吗? 已读完: 本章: @@ -248,7 +246,7 @@ 选择需要迁移的数据 迁移 共存 - 无法下载该章节。您可以点下载按钮重试 + 下载章节失败,可以在下载页面中重试 发现新章节 封面更新失败 请先将作品添加到书架 @@ -260,32 +258,32 @@ 点击安装更新 下载失败 有新版本! - 没有下载中的任务 + 无下载任务 最近没有更新 最近没有阅读 - 您的书架为空 - 尚无任何分类。轻触加号按钮创建一个分类以管理书架。 + 书架为空 + 尚无分类,点击加号按钮创建分类用来管理书架。 下载 - 错误 - 下载时发生不可预期的错误 - 无可用 Wi-Fi 连接 - 无网络连接 + 出错 + 下载时发生意外错误 + 未连接 Wi-Fi + 未连接网络 下载已暂停 - 一般 + 通用 长按显示操作菜单 在 WebView 中打开 32 位色彩 跳过已读章节 - 滤镜调和模式 + 滤镜混合模式 帮助 - 覆盖 - 色彩增值 + 叠加 + 正片叠底 滤色 - 减淡 / 变亮 - 加深 / 变暗 - 未找到结果 - 请选择需要迁移的图源 - 返回 + 变亮 + 变暗 + 没有结果 + 选择需要迁移的图源 + 后退 前进 刷新 书架 @@ -293,9 +291,9 @@ 此插件已被废弃,可能无法正常运行或导致应用发生故障,建议卸载 日期格式 全局更新 - 登出 %1$s? - 登出 - 您已登出 + 要退出 %1$s 吗? + 退出 + 已退出 已暂停 更多 作品更新时间 @@ -312,39 +310,39 @@ 隐私界面 待更新 无法绕过 Cloudflare - 请更新 WebView 应用以获得更好的兼容性 + 请更新 WebView 应用提高兼容性 阻止截屏,并在切换后台时隐藏预览图 显示 章节更新 隐藏通知内容 应用锁 - 在刘海屏区域显示内容 + 在屏幕刘海区域显示内容 第 %1$s 章 第 %1$s 章及另外 %2$d 章 第 %1$s 章 关闭电池优化 有助于后台更新书架和备份 - 电池优化已被关闭 - 电子邮件地址 + 电池优化已经关闭 + 邮箱地址 始终显示章节间的过渡页面 菜单 - 最新 - 最旧 + 从新到旧 + 从旧到新 移到顶部 移到底部 插件更新 图源 正在更新书架 阅读 - 跳过已筛选章节 + 跳过筛选掉的章节 已置顶 取消置顶 置顶 - 侧边填充 + 侧边留白 条漫(页间有空隙) 反选 添加进度记录 - app依赖WebView实现其功能 + 本应用需要 WebView 才能运行 收起 展开 开源许可证 @@ -359,41 +357,41 @@ 备份已在进行 第 %1$s 章 - %2$s 本地图源指南 - 上次浏览 + 最近使用 筛选书架里的全部作品 检查更新 - %02d 分,%02d 秒 + %02d 分 %02d 秒 灰色 本作品 阅读模式 - 无法打开设备设置 + 打开系统设置失败 缓解色带问题,但可能会影响性能 刷新书架封面 - 将阅读进度上传到进度记录平台。在作品页面点击“进度记录”按钮即可设置。 + 将阅读进度上传到第三方进度记录平台。在作品页面点击“进度记录”按钮即可设置。 按上传日期 数据 图源缺失: - 备份不包含任何作品。 - 无效的备份文件: - 更新书架时一并检查封面和简介是否有变动 - 自动刷新元数据 + 备份未包含任何作品。 + 备份文件无效: + 更新书架时一并检查封面和简介的变动 + 自动刷新作品信息 迁移 松散网格 标签 显示分类标签 - 未找到图片 + 没有图片 全部关闭 全部开启 开始阅读时,短暂显示当前阅读模式 阅读模式提示 - 开始阅读 + 开始 未找到图源 关闭 需要重启应用才能生效 网络 - 水平 + 垂直 - 垂直 - 水平 + 全部 + 上下 + 左右 未知状态 未知作者 @@ -410,54 +408,54 @@ 进度 错误 尚未登录进度记录平台: - 允许删除已添加书签的章节 + 允许删除添加了书签的章节 删除章节 来自此插件的图源可能包含 NSFW (18+) 内容 18+ - 这并不能防止非官方或可能被错误标记的插件在应用中显示 NSFW (18+) 内容。 - 未找到章节 + 如果有插件标记错误,这项设置无法阻止它们展示 NSFW (18+) 内容。 + 没有章节 已更新默认章节设置 设为默认 - 同时应用至书架里的所有作品 - 您确定要将当前设置保存为默认吗? + 同时应用到书架里的所有作品 + 确定要将当前设置保存为默认吗? 章节设置 - %1$s:%2$s,第%3$d页 + 《%1$s》%2$s,第 %3$d 页 搜索设置 已下载的章节 书架中的作品 暂停记录阅读历史 无痕模式 - 清除历史 - 您确定吗?所有历史都将丢失。 - 历史已删除 + 清除历史记录 + 你确定吗?所有历史记录都会丢失。 + 历史记录已删除 下一页 上一页 图源迁移指南 NSFW (18+) 图源 - 未找到文件选择应用 - 请重新登录 MyAnimeList + 没有文件管理器 + 请重新登录 MAL 在图源和插件列表中显示 点按区域 - 边缘样式 - Kindle 样式 - L 样式 + 两侧 + Kindle + L 形 阅读完毕日期 开始阅读日期 - 将错误日志保存到文件中,以便分享给开发者 - 分享崩溃日志 + 将错误日志保存到文件中,以便提供给开发者 + 导出崩溃日志 降序 升序 按章节编号 按上传日期 已记录进度 - 显示漫画数目 - 左右样式 + 显示作品数 + 左右 拆分双页 拆分双页时交换顺序 拆分双页的顺序与阅读方向不符时可以开启 - 您可能需要安装缺失的插件并登录进度记录平台才能正常使用。 - - + 可能需要安装缺失的插件并重新登录进度记录平台。 + 往右 + 往左 下一页 上一页 开始阅读时,短暂显示点按区域 @@ -467,12 +465,12 @@ 排除:%s 包含:%s 章节获取时间 - 应用不会更新位于排除分类的作品,即使它们同样位于包含分类。 - 应用不会下载位于排除分类的作品,即使它们同样位于包含分类。 + 排除优先于包含,同时属于包含和排除分类的作品不会自动更新。 + 排除优先于包含,同时属于包含和排除分类的作品不会自动下载。 自动下载 点击查看详情 应用不再支持此 Android 版本 - 无法复制到剪贴板 + 复制到剪贴板失败 横屏 竖屏 根据作品标题创建文件夹 @@ -483,12 +481,12 @@ 关闭无痕模式 自动 取消此作品 - 未找到匹配项 + 没有匹配项 图源不受支持 未读 日期 排序依据 - 无效的章节格式 + 章节格式无效 未找到章节 限制:%s 本地图源 @@ -500,20 +498,20 @@ 封面 单独设置各个分类的排序 进度记录指南 - 您还没有任何分类。 + 还没有创建分类。 立即开始下载 - 部分制造商会设置额外的应用限制来杀死后台服务。此网站提供了更多有关修复此问题的信息。 - 如果 MIUI 优化被关闭,备份/还原可能无法正常工作。 + 部分厂商杀掉后台服务的现象比较严重,此网站提供了一些解决方法。 + 如果关闭 MIUI 优化,备份与还原可能会出现问题。 纯黑深色模式 四叶草 阴阳 Tako - 草莓黛琦丽 + 草莓黛绮莉 午夜幽暗 青苹果 应用主题 为特定图源提供增强功能。作品在添加到书架时会自动同步进度。 - 增强型进度记录平台 + 增强平台 动态 后台活动 最低 @@ -523,8 +521,8 @@ 滑动时隐藏菜单的灵敏度 反色 今天 - 青色与绿松色 - 验证以确认更改 + 青绿 + 验证后完成修改 默认 外观 记录进度 @@ -535,7 +533,7 @@ 应用信息 旧式安装程序 安装程序 - 安装并启动 Shizuku 以将 Shizuku 用作插件安装程序。 + 安装并启动 Shizuku 后才能设置 Shizuku 为插件安装程序。 Shizuku 未在运行 正在安装插件… 作品总数 @@ -543,17 +541,17 @@ 详细日志记录 警告 语言 - 您应该将备份数据保存到多个地方。备份可能存有包括所有已存储密码在内的敏感数据;请谨慎分享。 + 你应该将备份数据保存到多个地方。备份可能含有敏感数据(例如储存的密码),分享时请留意。 大量更新会损害图源,并可能导致更新变慢、耗电增加。点击了解详情。 - 仅连接至 Wi-Fi 时 - 每3天 + 仅连接 Wi-Fi 时 + 每 3 天 警告:批量下载可能导致图源变慢,甚至会使得它们屏蔽 Tachiyomi。点击了解详情。 全部更新 应用更新 启动时清除章节缓存 无需清理 数据库中有 %1$d 部作品未添加到书架 - 无法获取可用插件 + 获取插件列表失败 隐私声明 跳过有未读章节的作品 关于书架更新出错的解决方法,请参阅 %1$s @@ -565,7 +563,7 @@ 封面网格 自动放大横向图片 图片放大时先平移再翻页 - 跳过还未开始阅读的作品 + 跳过尚未开始阅读的作品 已跳过,因为作品已完结 已跳过,因为有未读章节 已跳过,因为尚未开始阅读 @@ -575,34 +573,34 @@ 将作品移到顶部 关闭 保存图片出错 - 官方发布了新版本。 轻按以了解如何从非官方 F-Droid 版本迁移。 + 官方发布了新版本,点击了解如何从非官方的 F-Droid 版本迁移。 书架没有可备份的作品 打开 GitHub 页面 已清除 WebView 数据 清除 WebView 数据 关闭 - 未找到已安装的图源 - 未找到图源 + 没有已安装的图源 + 没有图源 检查更新时间 未读章数 可以改善阅读器的性能 - 拆分时未找到页 %d - 找不到页面 %d 的文件路径 + 分割时未找到第 %d 页 + 未找到第 %d 页的文件路径 重置各作品阅读器独立设置 重置所有作品的阅读模式和屏幕方向 已重置所有阅读器设置 重置阅读器设置失败 - 额,尴尬了 - 年龄分级 + 呃…尴尬了 + 分级 版本 语言 - 阅读中 - 计划读 - 已完结 - 已放弃 - 搁置中 - 仅在不按流量计费网络中 - 打不开最后阅读章节 + 在读 + 想读 + 读过 + 抛弃 + 搁置 + 仅通过不按流量计费的网络 + 无法打开上次阅读的章节 自定义封面 未安装 应用语言 @@ -625,21 +623,21 @@ 要求当前章节和下一章节都已下载。 你确定吗? 多语言 - 书架更新于:%s + 书架更新时间:%s 即将从书架中删除“%s”。 热门 未授予存储权限 已跳过,因为作品无需更新 搜索… 哦豁 - %s 发生了意外错误。建议你将崩溃日志分享到 Discord #support 频道或者在 GitHub 上反馈。 + %s 发生了意外错误。建议你反馈时提供崩溃日志。 重启应用 主题 • 日期格式 分类 • 全局更新 • 目录左右滑动 自动下载 • 预先下载 阅读进度上传 • 增强同步 导出崩溃日志 • 电池优化 - 手动备份 • 自动备份,存储空间 + 手动备份 • 自动备份 • 存储空间 应用锁 • 隐私界面 图源 • 插件 • 全局搜索 阅读模式 • 显示 • 翻页 @@ -651,7 +649,7 @@ 随机打开作品 此分类没有作品 F-Droid 渠道不受官方支持。 -\n点按了解更多。 +\n点击了解详情。 继续阅读按钮 清除下载索引 要删除日期吗? @@ -709,19 +707,19 @@ 将会在本地删除进度记录的关联。 删除已下载章节 自定义更新频率 - 设定间隔 - 下次预期更新 + 设置间隔 + 预计更新时间 间隔 估计每个 设定更新为每 - 跳过,因为预计今天没有更新 + 已跳过,因为预计今天没有更新 有结果 正在同步书架 书架同步完成 点击这里查看 Cloudflare 帮助 已清除下载索引 登录进度记录平台 - 无法创建备份文件 + 创建备份文件失败 已有正版,没有章节可供显示 未连接网络 HTTP %d,请在 WebView 中检查网站 @@ -731,72 +729,73 @@ 解锁 %s 分类排序 将作品移到底部 - 书架更新中…(%s) - 是否按字母顺序对分类进行排序? - 没有文件被选中 + 正在更新书架… (%s) + 要按字母顺序将分类重新排序吗? + 未选择文件 相对时间戳 - 以\"%1$s\" 表示 \"%2$s\" - 从不 - 减少电子墨水屏上的重影 - 上次自动备份:%s - 切页时闪烁 + 显示“%1$s”而不是“%2$s” + 尚未 + 减轻墨水屏上的残影 + 上次自动备份时间:%s + 翻页时闪烁 数据与存储 存储占用 创建 应用 恢复默认 - 未找到扫译者 - 扫译者 - 进度记录平台评分 - 排除的扫译者 + 没有翻译组 + 翻译组 + 记录平台评分 + 排除翻译组 更多选项 - 已选择 - 未选择 - 新手上路 + 已选中 + 未选中 + 首次启动引导 开始使用 欢迎! 跳过 下一步 - 向上浏览 - 让我们先进行一些设置。您也可以稍后在设置中更改这些选项。 - 避免长时间运行的书架更新、下载和备份恢复被中断。 - 授权 + 返回 + 首先调整一些设置。稍后也可以在设置中修改。 + 避免需要长时间运行的书架更新、下载、备份恢复任务受到中断。 + 允许 未设置存储位置 - 完整错误: - 后台电池配置 - 需要权限安装插件。点击此处授权。 + 完整错误信息: + 后台运行权限 + 需要安装插件的权限,点击此处授权。 添加仓库 - 包含敏感设置(例如进度记录平台的登录令牌) - 您希望删除仓库\"%s\"吗? + 包含敏感设置(例如进度记录平台的账号信息) + 确定要删除仓库“%s”吗? 此仓库已存在! 删除仓库 - 无效的仓库URL - 用于自动备份、下载章节和本地图源。 - 新章节预计在%1$s后发布,每隔%2$s检查一次 + 仓库网址无效 + 用于自动备份、章节下载、本地图源。 + 预计 %1$s后更新,每 %2$s检查一次。 自定义更新频率: 应用安装权限 - 用以安装图源插件。 + 用来安装图源插件。 通知权限 - %s新手?我们建议您查阅入门指南。 - 重新安装的%s? + 如果你是第一次使用 %s,推荐查看入门指南。 + 如果你是重新安装了 %s,可以使用以下功能。 智能更新 - 获取书架更新等通知。 + 用来发送书架更新等通知。 插件仓库 - 您没有设置仓库。 - 仓库URL - 向 Tachiyomi 添加额外仓库。注意是以“index.min.json”结尾的URL。 - 从旧版本升级而来不知如何选择?请参阅存储指南获取更多信息。 + 尚未设置仓库 + 仓库网址 + 在 Tachiyomi 中添加仓库,输入的网址结尾应为“index.min.json”。 + 如果你是从旧版更新而来,请选择之前使用的“Tachiyomi”目录。 存储指南 存储位置 选择文件夹 - 选择%1$s文件夹用以存储下载章节、备份文件等。 + 选择一个文件夹供 %1$s 存放下载章节、备份文件等。 \n -\n推荐使用专用文件夹。 +\n推荐使用一个专门的文件夹。 \n \n已选文件夹:%2$s - 必须选中一个文件夹 - 可用:%1$s / 全部:%2$s + 必须选择一个文件夹 + %1$s / %2$s Nord - 马上 + 即将更新 撤销已信任的未知插件 + 打开图源仓库 \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/zh-rTW/strings.xml b/i18n/src/commonMain/resources/MR/zh-rTW/strings.xml index c5cf0a52f..9e761916a 100644 --- a/i18n/src/commonMain/resources/MR/zh-rTW/strings.xml +++ b/i18n/src/commonMain/resources/MR/zh-rTW/strings.xml @@ -258,11 +258,9 @@ 信任 未信任 未受信任的擴充套件 - 此擴充套件的憑證是由不明的作者所簽署,因此尚未被載入。 + 惡意的擴充套件可能會讀取任何已儲存的登入認證或執行任意的程式碼。 \n -\n惡意的擴充套件可能會讀取任何已儲存的登入認證或執行任意的程式碼。 -\n -\n若選擇信任該擴充套件的憑證,即表示你願意承擔上述風險。 +\n若選擇信任該擴充套件,即表示你願意承擔上述風險。 最後閱畢的章節 未加入書櫃的作品的閱讀進度將被清除,你確定嗎? 新上架 @@ -478,7 +476,7 @@ 根據作品標題建立資料夾 開始閱讀時,短暫浮現輕觸區域 輕觸區域提示 - 類別同時屬於「排除」及「包含」的作品,將不會自動更新。 + 類別同時屬於「排除」及「包含」的作品將不會自動更新。 取消此作品 自動 灰階 @@ -781,7 +779,7 @@ 可用:%1$s / 總計:%2$s 缺少安裝擴充套件所需的權限。輕觸此處以授予。 包含敏感設定 (如:歷程平台登入權杖) - 預計 %1$s後出刊,每 %2$s檢查一次 + 預計 %1$s後出刊,每 %2$s檢查一次。 完整錯誤訊息: 自訂更新頻率: 儲存庫網址 @@ -799,4 +797,5 @@ 北風 撤銷對不明擴充套件的信任 即將出刊 + 開啟來源儲存庫 \ No newline at end of file