diff --git a/app/src/main/java/eu/kanade/domain/base/BasePreferences.kt b/app/src/main/java/eu/kanade/domain/base/BasePreferences.kt index db7a5b6fdf..8106860dc4 100644 --- a/app/src/main/java/eu/kanade/domain/base/BasePreferences.kt +++ b/app/src/main/java/eu/kanade/domain/base/BasePreferences.kt @@ -3,12 +3,12 @@ package eu.kanade.domain.base import android.content.Context import android.content.pm.PackageManager import android.os.Build -import androidx.annotation.StringRes -import eu.kanade.tachiyomi.R +import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.util.system.isPreviewBuildType import eu.kanade.tachiyomi.util.system.isReleaseBuildType import tachiyomi.core.preference.Preference import tachiyomi.core.preference.PreferenceStore +import tachiyomi.i18n.MR class BasePreferences( val context: Context, @@ -33,10 +33,10 @@ class BasePreferences( PackageManager.FEATURE_PICTURE_IN_PICTURE, ) - enum class ExtensionInstaller(@StringRes val titleResId: Int) { - LEGACY(R.string.ext_installer_legacy), - PACKAGEINSTALLER(R.string.ext_installer_packageinstaller), - SHIZUKU(R.string.ext_installer_shizuku), - PRIVATE(R.string.ext_installer_private), + enum class ExtensionInstaller(val titleRes: StringResource) { + LEGACY(MR.strings.ext_installer_legacy), + PACKAGEINSTALLER(MR.strings.ext_installer_packageinstaller), + SHIZUKU(MR.strings.ext_installer_shizuku), + PRIVATE(MR.strings.ext_installer_private), } } diff --git a/app/src/main/java/eu/kanade/domain/ui/model/AppTheme.kt b/app/src/main/java/eu/kanade/domain/ui/model/AppTheme.kt index 0281b5718c..001fed4866 100644 --- a/app/src/main/java/eu/kanade/domain/ui/model/AppTheme.kt +++ b/app/src/main/java/eu/kanade/domain/ui/model/AppTheme.kt @@ -1,25 +1,26 @@ package eu.kanade.domain.ui.model -import eu.kanade.tachiyomi.R +import dev.icerock.moko.resources.StringResource +import tachiyomi.i18n.MR -enum class AppTheme(val titleResId: Int?) { - DEFAULT(R.string.label_default), - MONET(R.string.theme_monet), - CLOUDFLARE(R.string.theme_cloudflare), - COTTONCANDY(R.string.theme_cottoncandy), - DOOM(R.string.theme_doom), - GREEN_APPLE(R.string.theme_greenapple), - LAVENDER(R.string.theme_lavender), - MATRIX(R.string.theme_matrix), - MIDNIGHT_DUSK(R.string.theme_midnightdusk), - MOCHA(R.string.theme_mocha), - SAPPHIRE(R.string.theme_sapphire), - STRAWBERRY_DAIQUIRI(R.string.theme_strawberrydaiquiri), - TAKO(R.string.theme_tako), - TEALTURQUOISE(R.string.theme_tealturquoise), - TIDAL_WAVE(R.string.theme_tidalwave), - YINYANG(R.string.theme_yinyang), - YOTSUBA(R.string.theme_yotsuba), +enum class AppTheme(val titleRes: StringResource?) { + DEFAULT(MR.strings.label_default), + MONET(MR.strings.theme_monet), + CLOUDFLARE(MR.strings.theme_cloudflare), + COTTONCANDY(MR.strings.theme_cottoncandy), + DOOM(MR.strings.theme_doom), + GREEN_APPLE(MR.strings.theme_greenapple), + LAVENDER(MR.strings.theme_lavender), + MATRIX(MR.strings.theme_matrix), + MIDNIGHT_DUSK(MR.strings.theme_midnightdusk), + MOCHA(MR.strings.theme_mocha), + SAPPHIRE(MR.strings.theme_sapphire), + STRAWBERRY_DAIQUIRI(MR.strings.theme_strawberrydaiquiri), + TAKO(MR.strings.theme_tako), + TEALTURQUOISE(MR.strings.theme_tealturquoise), + TIDAL_WAVE(MR.strings.theme_tidalwave), + YINYANG(MR.strings.theme_yinyang), + YOTSUBA(MR.strings.theme_yotsuba), // Deprecated DARK_BLUE(null), diff --git a/app/src/main/java/eu/kanade/domain/ui/model/TabletUiMode.kt b/app/src/main/java/eu/kanade/domain/ui/model/TabletUiMode.kt index 71cee1264c..cf1e957b09 100644 --- a/app/src/main/java/eu/kanade/domain/ui/model/TabletUiMode.kt +++ b/app/src/main/java/eu/kanade/domain/ui/model/TabletUiMode.kt @@ -1,10 +1,11 @@ package eu.kanade.domain.ui.model -import eu.kanade.tachiyomi.R +import dev.icerock.moko.resources.StringResource +import tachiyomi.i18n.MR -enum class TabletUiMode(val titleResId: Int) { - AUTOMATIC(R.string.automatic_background), - ALWAYS(R.string.lock_always), - LANDSCAPE(R.string.landscape), - NEVER(R.string.lock_never), +enum class TabletUiMode(val titleRes: StringResource) { + AUTOMATIC(MR.strings.automatic_background), + ALWAYS(MR.strings.lock_always), + LANDSCAPE(MR.strings.landscape), + NEVER(MR.strings.lock_never), } diff --git a/app/src/main/java/eu/kanade/presentation/browse/GlobalSearchResultItems.kt b/app/src/main/java/eu/kanade/presentation/browse/GlobalSearchResultItems.kt index 3f61d0c3ba..15c3f28750 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/GlobalSearchResultItems.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/GlobalSearchResultItems.kt @@ -12,7 +12,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.ArrowForward -import androidx.compose.material.icons.outlined.ArrowForward import androidx.compose.material.icons.outlined.Error import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.Icon @@ -22,11 +21,11 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource @Composable fun GlobalSearchResultItem( @@ -93,7 +92,7 @@ fun GlobalSearchErrorResultItem(message: String?) { Icon(imageVector = Icons.Outlined.Error, contentDescription = null) Spacer(Modifier.height(4.dp)) Text( - text = message ?: stringResource(R.string.unknown_error), + text = message ?: stringResource(MR.strings.unknown_error), textAlign = TextAlign.Center, ) } diff --git a/app/src/main/java/eu/kanade/presentation/browse/anime/AnimeExtensionDetailsScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/anime/AnimeExtensionDetailsScreen.kt index 428326e2c4..0fe4d6442d 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/anime/AnimeExtensionDetailsScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/anime/AnimeExtensionDetailsScreen.kt @@ -17,7 +17,6 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.items import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.HelpOutline -import androidx.compose.material.icons.outlined.HelpOutline import androidx.compose.material.icons.outlined.History import androidx.compose.material.icons.outlined.Settings import androidx.compose.material3.Button @@ -37,7 +36,6 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign @@ -50,15 +48,16 @@ import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.WarningBanner import eu.kanade.presentation.more.settings.widget.TextPreferenceWidget import eu.kanade.presentation.more.settings.widget.TrailingWidgetBuffer -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource import eu.kanade.tachiyomi.extension.anime.model.AnimeExtension import eu.kanade.tachiyomi.ui.browse.anime.extension.details.AnimeExtensionDetailsScreenModel import eu.kanade.tachiyomi.util.system.LocaleHelper import kotlinx.collections.immutable.persistentListOf +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen @Composable @@ -77,7 +76,7 @@ fun AnimeExtensionDetailsScreen( Scaffold( topBar = { scrollBehavior -> AppBar( - title = stringResource(R.string.label_extension_info), + title = stringResource(MR.strings.label_extension_info), navigateUp = navigateUp, actions = { AppBarActions( @@ -86,14 +85,14 @@ fun AnimeExtensionDetailsScreen( if (state.extension?.isUnofficial == false) { add( AppBar.Action( - title = stringResource(R.string.whats_new), + title = stringResource(MR.strings.whats_new), icon = Icons.Outlined.History, onClick = onClickWhatsNew, ), ) add( AppBar.Action( - title = stringResource(R.string.action_faq_and_guides), + title = stringResource(MR.strings.action_faq_and_guides), icon = Icons.AutoMirrored.Outlined.HelpOutline, onClick = onClickReadme, ), @@ -102,15 +101,15 @@ fun AnimeExtensionDetailsScreen( addAll( listOf( AppBar.OverflowAction( - title = stringResource(R.string.action_enable_all), + title = stringResource(MR.strings.action_enable_all), onClick = onClickEnableAll, ), AppBar.OverflowAction( - title = stringResource(R.string.action_disable_all), + title = stringResource(MR.strings.action_disable_all), onClick = onClickDisableAll, ), AppBar.OverflowAction( - title = stringResource(R.string.pref_clear_cookies), + title = stringResource(MR.strings.pref_clear_cookies), onClick = onClickClearCookies, ), ), @@ -125,7 +124,7 @@ fun AnimeExtensionDetailsScreen( ) { paddingValues -> if (state.extension == null) { EmptyScreen( - textResource = R.string.empty_screen, + stringRes = MR.strings.empty_screen, modifier = Modifier.padding(paddingValues), ) return@Scaffold @@ -160,11 +159,11 @@ private fun AnimeExtensionDetails( when { extension.isUnofficial -> item { - WarningBanner(R.string.unofficial_anime_extension_message) + WarningBanner(MR.strings.unofficial_anime_extension_message) } extension.isObsolete -> item { - WarningBanner(R.string.obsolete_extension_message) + WarningBanner(MR.strings.obsolete_extension_message) } } @@ -262,7 +261,7 @@ private fun DetailsHeader( InfoText( modifier = Modifier.weight(1f), primaryText = extension.versionName, - secondaryText = stringResource(R.string.ext_info_version), + secondaryText = stringResource(MR.strings.ext_info_version), ) InfoDivider() @@ -270,7 +269,7 @@ private fun DetailsHeader( InfoText( modifier = Modifier.weight(if (extension.isNsfw) 1.5f else 1f), primaryText = LocaleHelper.getSourceDisplayName(extension.lang, context), - secondaryText = stringResource(R.string.ext_info_language), + secondaryText = stringResource(MR.strings.ext_info_language), ) if (extension.isNsfw) { @@ -278,12 +277,12 @@ private fun DetailsHeader( InfoText( modifier = Modifier.weight(1f), - primaryText = stringResource(R.string.ext_nsfw_short), + primaryText = stringResource(MR.strings.ext_nsfw_short), primaryTextStyle = MaterialTheme.typography.bodyLarge.copy( color = MaterialTheme.colorScheme.error, fontWeight = FontWeight.Medium, ), - secondaryText = stringResource(R.string.ext_info_age_rating), + secondaryText = stringResource(MR.strings.ext_info_age_rating), onClick = onClickAgeRating, ) } @@ -302,7 +301,7 @@ private fun DetailsHeader( modifier = Modifier.weight(1f), onClick = onClickUninstall, ) { - Text(stringResource(R.string.ext_uninstall)) + Text(stringResource(MR.strings.ext_uninstall)) } if (onClickAppInfo != null) { @@ -311,7 +310,7 @@ private fun DetailsHeader( onClick = onClickAppInfo, ) { Text( - text = stringResource(R.string.ext_app_info), + text = stringResource(MR.strings.ext_app_info), color = MaterialTheme.colorScheme.onPrimary, ) } @@ -389,7 +388,7 @@ private fun SourceSwitchPreference( IconButton(onClick = { onClickSourcePreferences(source.source.id) }) { Icon( imageVector = Icons.Outlined.Settings, - contentDescription = stringResource(R.string.label_settings), + contentDescription = stringResource(MR.strings.label_settings), tint = MaterialTheme.colorScheme.onSurface, ) } diff --git a/app/src/main/java/eu/kanade/presentation/browse/anime/AnimeExtensionFilterScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/anime/AnimeExtensionFilterScreen.kt index 51c9d7d857..06dae68e98 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/anime/AnimeExtensionFilterScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/anime/AnimeExtensionFilterScreen.kt @@ -7,13 +7,13 @@ import androidx.compose.foundation.lazy.items import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.browse.anime.extension.AnimeExtensionFilterState import eu.kanade.tachiyomi.util.system.LocaleHelper +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen @Composable @@ -25,7 +25,7 @@ fun AnimeExtensionFilterScreen( Scaffold( topBar = { scrollBehavior -> AppBar( - title = stringResource(R.string.label_extensions), + title = stringResource(MR.strings.label_extensions), navigateUp = navigateUp, scrollBehavior = scrollBehavior, ) @@ -33,7 +33,7 @@ fun AnimeExtensionFilterScreen( ) { contentPadding -> if (state.isEmpty) { EmptyScreen( - textResource = R.string.empty_screen, + stringRes = MR.strings.empty_screen, modifier = Modifier.padding(contentPadding), ) return@Scaffold diff --git a/app/src/main/java/eu/kanade/presentation/browse/anime/AnimeExtensionsScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/anime/AnimeExtensionsScreen.kt index 603705f8af..c60ddabdd2 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/anime/AnimeExtensionsScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/anime/AnimeExtensionsScreen.kt @@ -31,7 +31,6 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import eu.kanade.presentation.browse.BaseBrowseItem @@ -39,16 +38,17 @@ import eu.kanade.presentation.browse.anime.components.AnimeExtensionIcon import eu.kanade.presentation.browse.manga.ExtensionHeader import eu.kanade.presentation.browse.manga.ExtensionTrustDialog import eu.kanade.presentation.entries.DotSeparatorNoSpaceText -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.extension.InstallStep import eu.kanade.tachiyomi.extension.anime.model.AnimeExtension import eu.kanade.tachiyomi.ui.browse.anime.extension.AnimeExtensionUiModel import eu.kanade.tachiyomi.ui.browse.anime.extension.AnimeExtensionsScreenModel import eu.kanade.tachiyomi.util.system.LocaleHelper +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.material.PullRefresh 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.LoadingScreen import tachiyomi.presentation.core.util.plus @@ -78,12 +78,12 @@ fun AnimeExtensionScreen( state.isLoading -> LoadingScreen(Modifier.padding(contentPadding)) state.isEmpty -> { val msg = if (!searchQuery.isNullOrEmpty()) { - R.string.no_results_found + MR.strings.no_results_found } else { - R.string.empty_screen + MR.strings.empty_screen } EmptyScreen( - textResource = msg, + stringRes = msg, modifier = Modifier.padding(contentPadding), ) } @@ -131,11 +131,11 @@ private fun AnimeExtensionContent( when (header) { is AnimeExtensionUiModel.Header.Resource -> { val action: @Composable RowScope.() -> Unit = - if (header.textRes == R.string.ext_updates_pending) { + if (header.textRes == MR.strings.ext_updates_pending) { { Button(onClick = { onClickUpdateAll() }) { Text( - text = stringResource(R.string.ext_update_all), + text = stringResource(MR.strings.ext_update_all), style = LocalTextStyle.current.copy( color = MaterialTheme.colorScheme.onPrimary, ), @@ -311,10 +311,10 @@ private fun AnimeExtensionItemContent( } val warning = when { - extension is AnimeExtension.Untrusted -> R.string.ext_untrusted - extension is AnimeExtension.Installed && extension.isUnofficial -> R.string.ext_unofficial - extension is AnimeExtension.Installed && extension.isObsolete -> R.string.ext_obsolete - extension.isNsfw -> R.string.ext_nsfw_short + extension is AnimeExtension.Untrusted -> MR.strings.ext_untrusted + extension is AnimeExtension.Installed && extension.isUnofficial -> MR.strings.ext_unofficial + extension is AnimeExtension.Installed && extension.isObsolete -> MR.strings.ext_obsolete + extension.isNsfw -> MR.strings.ext_nsfw_short else -> null } if (warning != null) { @@ -330,9 +330,9 @@ private fun AnimeExtensionItemContent( DotSeparatorNoSpaceText() Text( text = when (installStep) { - InstallStep.Pending -> stringResource(R.string.ext_pending) - InstallStep.Downloading -> stringResource(R.string.ext_downloading) - InstallStep.Installing -> stringResource(R.string.ext_installing) + InstallStep.Pending -> stringResource(MR.strings.ext_pending) + InstallStep.Downloading -> stringResource(MR.strings.ext_downloading) + InstallStep.Installing -> stringResource(MR.strings.ext_installing) else -> error("Must not show non-install process text") }, ) @@ -358,19 +358,19 @@ private fun AnimeExtensionItemActions( ) { Text( text = when (installStep) { - InstallStep.Installed -> stringResource(R.string.ext_installed) - InstallStep.Error -> stringResource(R.string.action_retry) + InstallStep.Installed -> stringResource(MR.strings.ext_installed) + InstallStep.Error -> stringResource(MR.strings.action_retry) InstallStep.Idle -> { when (extension) { is AnimeExtension.Installed -> { if (extension.hasUpdate) { - stringResource(R.string.ext_update) + stringResource(MR.strings.ext_update) } else { - stringResource(R.string.action_settings) + stringResource(MR.strings.action_settings) } } - is AnimeExtension.Untrusted -> stringResource(R.string.ext_trust) - is AnimeExtension.Available -> stringResource(R.string.ext_install) + is AnimeExtension.Untrusted -> stringResource(MR.strings.ext_trust) + is AnimeExtension.Available -> stringResource(MR.strings.ext_install) } } else -> error("Must not show install process text") @@ -381,7 +381,7 @@ private fun AnimeExtensionItemActions( IconButton(onClick = { onClickItemCancel(extension) }) { Icon( imageVector = Icons.Outlined.Close, - contentDescription = stringResource(R.string.action_cancel), + contentDescription = stringResource(MR.strings.action_cancel), ) } } diff --git a/app/src/main/java/eu/kanade/presentation/browse/anime/AnimeSourcesFilterScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/anime/AnimeSourcesFilterScreen.kt index d995f941ca..4530c82c06 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/anime/AnimeSourcesFilterScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/anime/AnimeSourcesFilterScreen.kt @@ -7,16 +7,16 @@ import androidx.compose.material3.Checkbox import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import eu.kanade.presentation.browse.anime.components.BaseAnimeSourceItem import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.browse.anime.source.AnimeSourcesFilterScreenModel import eu.kanade.tachiyomi.util.system.LocaleHelper import tachiyomi.domain.source.anime.model.AnimeSource +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen @Composable @@ -29,7 +29,7 @@ fun AnimeSourcesFilterScreen( Scaffold( topBar = { scrollBehavior -> AppBar( - title = stringResource(R.string.label_sources), + title = stringResource(MR.strings.label_sources), navigateUp = navigateUp, scrollBehavior = scrollBehavior, ) @@ -37,7 +37,7 @@ fun AnimeSourcesFilterScreen( ) { contentPadding -> if (state.isEmpty) { EmptyScreen( - textResource = R.string.source_filter_empty_screen, + stringRes = MR.strings.source_filter_empty_screen, modifier = Modifier.padding(contentPadding), ) return@Scaffold diff --git a/app/src/main/java/eu/kanade/presentation/browse/anime/AnimeSourcesScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/anime/AnimeSourcesScreen.kt index 5748f2621a..47a6873ff4 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/anime/AnimeSourcesScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/anime/AnimeSourcesScreen.kt @@ -19,19 +19,19 @@ import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import eu.kanade.presentation.browse.anime.components.BaseAnimeSourceItem -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.browse.anime.source.AnimeSourcesScreenModel import eu.kanade.tachiyomi.ui.browse.anime.source.browse.BrowseAnimeSourceScreenModel.Listing import eu.kanade.tachiyomi.util.system.LocaleHelper import tachiyomi.domain.source.anime.model.AnimeSource import tachiyomi.domain.source.anime.model.Pin +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.material.SecondaryItemAlpha 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.LoadingScreen import tachiyomi.presentation.core.theme.header @@ -49,7 +49,7 @@ fun AnimeSourcesScreen( when { state.isLoading -> LoadingScreen(Modifier.padding(contentPadding)) state.isEmpty -> EmptyScreen( - textResource = R.string.source_empty_screen, + stringRes = MR.strings.source_empty_screen, modifier = Modifier.padding(contentPadding), ) else -> { @@ -126,7 +126,7 @@ private fun AnimeSourceItem( if (source.supportsLatest) { TextButton(onClick = { onClickItem(source, Listing.Latest) }) { Text( - text = stringResource(id = R.string.latest), + text = stringResource(MR.strings.latest), style = LocalTextStyle.current.copy( color = MaterialTheme.colorScheme.primary, ), @@ -154,7 +154,7 @@ private fun AnimeSourcePinButton( alpha = SecondaryItemAlpha, ) } - val description = if (isPinned) R.string.action_unpin else R.string.action_pin + val description = if (isPinned) MR.strings.action_unpin else MR.strings.action_pin IconButton(onClick = onClick) { Icon( imageVector = icon, @@ -177,7 +177,7 @@ fun AnimeSourceOptionsDialog( }, text = { Column { - val textId = if (Pin.Pinned in source.pin) R.string.action_unpin else R.string.action_pin + val textId = if (Pin.Pinned in source.pin) MR.strings.action_unpin else MR.strings.action_pin Text( text = stringResource(textId), modifier = Modifier @@ -187,7 +187,7 @@ fun AnimeSourceOptionsDialog( ) if (source.id != LocalAnimeSource.ID) { Text( - text = stringResource(id = R.string.action_disable), + text = stringResource(MR.strings.action_disable), modifier = Modifier .clickable(onClick = onClickDisable) .fillMaxWidth() diff --git a/app/src/main/java/eu/kanade/presentation/browse/anime/BrowseAnimeSourceScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/anime/BrowseAnimeSourceScreen.kt index 1e9351b409..9bf34e2b40 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/anime/BrowseAnimeSourceScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/anime/BrowseAnimeSourceScreen.kt @@ -5,7 +5,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.HelpOutline -import androidx.compose.material.icons.outlined.HelpOutline import androidx.compose.material.icons.outlined.Public import androidx.compose.material.icons.outlined.Refresh import androidx.compose.material3.SnackbarDuration @@ -15,7 +14,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.paging.LoadState import androidx.paging.compose.LazyPagingItems import eu.kanade.presentation.browse.anime.components.BrowseAnimeSourceComfortableGrid @@ -23,14 +21,16 @@ import eu.kanade.presentation.browse.anime.components.BrowseAnimeSourceCompactGr import eu.kanade.presentation.browse.anime.components.BrowseAnimeSourceList import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.util.formattedMessage -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.animesource.AnimeSource import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.flow.StateFlow +import tachiyomi.core.i18n.stringResource import tachiyomi.domain.entries.anime.model.Anime import tachiyomi.domain.library.model.LibraryDisplayMode import tachiyomi.domain.source.anime.model.StubAnimeSource +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.EmptyScreenAction import tachiyomi.presentation.core.screens.LoadingScreen @@ -63,7 +63,7 @@ fun BrowseAnimeSourceContent( if (animeList.itemCount > 0 && errorState != null && errorState is LoadState.Error) { val result = snackbarHostState.showSnackbar( message = getErrorMessage(errorState), - actionLabel = context.getString(R.string.action_retry), + actionLabel = context.stringResource(MR.strings.action_retry), duration = SnackbarDuration.Indefinite, ) when (result) { @@ -80,7 +80,7 @@ fun BrowseAnimeSourceContent( actions = if (source is LocalAnimeSource) { persistentListOf( EmptyScreenAction( - stringResId = R.string.local_source_help_guide, + stringRes = MR.strings.local_source_help_guide, icon = Icons.AutoMirrored.Outlined.HelpOutline, onClick = onLocalAnimeSourceHelpClick, ), @@ -88,17 +88,17 @@ fun BrowseAnimeSourceContent( } else { persistentListOf( EmptyScreenAction( - stringResId = R.string.action_retry, + stringRes = MR.strings.action_retry, icon = Icons.Outlined.Refresh, onClick = animeList::refresh, ), EmptyScreenAction( - stringResId = R.string.action_open_in_web_view, + stringRes = MR.strings.action_open_in_web_view, icon = Icons.Outlined.Public, onClick = onWebViewClick, ), EmptyScreenAction( - stringResId = R.string.label_help, + stringRes = MR.strings.label_help, icon = Icons.AutoMirrored.Outlined.HelpOutline, onClick = onHelpClick, ), @@ -161,7 +161,7 @@ internal fun MissingSourceScreen( }, ) { paddingValues -> EmptyScreen( - message = stringResource(R.string.source_not_installed, source.toString()), + message = stringResource(MR.strings.source_not_installed, source.toString()), modifier = Modifier.padding(paddingValues), ) } diff --git a/app/src/main/java/eu/kanade/presentation/browse/anime/MigrateAnimeScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/anime/MigrateAnimeScreen.kt index d71a6144e9..87f4f574e9 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/anime/MigrateAnimeScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/anime/MigrateAnimeScreen.kt @@ -7,9 +7,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.entries.anime.components.BaseAnimeListItem -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.browse.anime.migration.anime.MigrateAnimeScreenModel import tachiyomi.domain.entries.anime.model.Anime +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.screens.EmptyScreen @@ -33,7 +33,7 @@ fun MigrateAnimeScreen( ) { contentPadding -> if (state.isEmpty) { EmptyScreen( - textResource = R.string.empty_screen, + stringRes = MR.strings.empty_screen, modifier = Modifier.padding(contentPadding), ) return@Scaffold diff --git a/app/src/main/java/eu/kanade/presentation/browse/anime/MigrateAnimeSourceScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/anime/MigrateAnimeSourceScreen.kt index f9612d2942..4864bb2e2c 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/anime/MigrateAnimeSourceScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/anime/MigrateAnimeSourceScreen.kt @@ -20,21 +20,21 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import eu.kanade.domain.source.service.SetMigrateSorting import eu.kanade.presentation.browse.anime.components.AnimeSourceIcon import eu.kanade.presentation.browse.anime.components.BaseAnimeSourceItem -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.browse.anime.migration.sources.MigrateAnimeSourceScreenModel import eu.kanade.tachiyomi.util.system.copyToClipboard import tachiyomi.domain.source.anime.model.AnimeSource +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.Badge import tachiyomi.presentation.core.components.BadgeGroup import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.Scroller.STICKY_HEADER_KEY_PREFIX 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.LoadingScreen import tachiyomi.presentation.core.theme.header @@ -53,7 +53,7 @@ fun MigrateAnimeSourceScreen( when { state.isLoading -> LoadingScreen(Modifier.padding(contentPadding)) state.isEmpty -> EmptyScreen( - textResource = R.string.information_empty_library, + stringRes = MR.strings.information_empty_library, modifier = Modifier.padding(contentPadding), ) else -> @@ -95,7 +95,7 @@ private fun MigrateAnimeSourceList( verticalAlignment = Alignment.CenterVertically, ) { Text( - text = stringResource(R.string.migration_selection_prompt), + text = stringResource(MR.strings.migration_selection_prompt), modifier = Modifier.weight(1f), style = MaterialTheme.typography.header, ) @@ -104,11 +104,11 @@ private fun MigrateAnimeSourceList( when (sortingMode) { SetMigrateSorting.Mode.ALPHABETICAL -> Icon( Icons.Outlined.SortByAlpha, - contentDescription = stringResource(R.string.action_sort_alpha), + contentDescription = stringResource(MR.strings.action_sort_alpha), ) SetMigrateSorting.Mode.TOTAL -> Icon( Icons.Outlined.Numbers, - contentDescription = stringResource(R.string.action_sort_count), + contentDescription = stringResource(MR.strings.action_sort_count), ) } } @@ -116,11 +116,11 @@ private fun MigrateAnimeSourceList( when (sortingDirection) { SetMigrateSorting.Direction.ASCENDING -> Icon( Icons.Outlined.ArrowUpward, - contentDescription = stringResource(R.string.action_asc), + contentDescription = stringResource(MR.strings.action_asc), ) SetMigrateSorting.Direction.DESCENDING -> Icon( Icons.Outlined.ArrowDownward, - contentDescription = stringResource(R.string.action_desc), + contentDescription = stringResource(MR.strings.action_desc), ) } } @@ -190,7 +190,7 @@ private fun MigrateAnimeSourceItem( if (source.isStub) { Text( modifier = Modifier.secondaryItemAlpha(), - text = stringResource(R.string.not_installed), + text = stringResource(MR.strings.not_installed), maxLines = 1, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodySmall, diff --git a/app/src/main/java/eu/kanade/presentation/browse/anime/components/BrowseAnimeSourceDialogs.kt b/app/src/main/java/eu/kanade/presentation/browse/anime/components/BrowseAnimeSourceDialogs.kt index 911111bb41..e5bffe7206 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/anime/components/BrowseAnimeSourceDialogs.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/anime/components/BrowseAnimeSourceDialogs.kt @@ -4,8 +4,8 @@ import androidx.compose.material3.AlertDialog import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable -import androidx.compose.ui.res.stringResource -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource @Composable fun RemoveEntryDialog( @@ -17,7 +17,7 @@ fun RemoveEntryDialog( onDismissRequest = onDismissRequest, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, confirmButton = { @@ -27,14 +27,14 @@ fun RemoveEntryDialog( onConfirm() }, ) { - Text(text = stringResource(R.string.action_remove)) + Text(text = stringResource(MR.strings.action_remove)) } }, title = { - Text(text = stringResource(R.string.are_you_sure)) + Text(text = stringResource(MR.strings.are_you_sure)) }, text = { - Text(text = stringResource(R.string.remove_manga, entryToRemove)) + Text(text = stringResource(MR.strings.remove_manga, entryToRemove)) }, ) } diff --git a/app/src/main/java/eu/kanade/presentation/browse/anime/components/BrowseAnimeSourceToolbar.kt b/app/src/main/java/eu/kanade/presentation/browse/anime/components/BrowseAnimeSourceToolbar.kt index 887c482c86..6cfb281a81 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/anime/components/BrowseAnimeSourceToolbar.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/anime/components/BrowseAnimeSourceToolbar.kt @@ -2,7 +2,6 @@ package eu.kanade.presentation.browse.anime.components import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ViewList -import androidx.compose.material.icons.filled.ViewList import androidx.compose.material.icons.filled.ViewModule import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarScrollBehavior @@ -11,18 +10,18 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue -import androidx.compose.ui.res.stringResource import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.AppBarTitle import eu.kanade.presentation.components.DropdownMenu import eu.kanade.presentation.components.RadioMenuItem import eu.kanade.presentation.components.SearchToolbar -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.animesource.AnimeSource import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource import kotlinx.collections.immutable.persistentListOf import tachiyomi.domain.library.model.LibraryDisplayMode +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.source.local.entries.anime.LocalAnimeSource @Composable @@ -59,7 +58,7 @@ fun BrowseAnimeSourceToolbar( .apply { add( AppBar.Action( - title = stringResource(R.string.action_display_mode), + title = stringResource(MR.strings.action_display_mode), icon = if (displayMode == LibraryDisplayMode.List) { Icons.AutoMirrored.Filled.ViewList } else { @@ -71,14 +70,14 @@ fun BrowseAnimeSourceToolbar( if (isLocalSource) { add( AppBar.OverflowAction( - title = stringResource(R.string.label_help), + title = stringResource(MR.strings.label_help), onClick = onHelpClick, ), ) } else { add( AppBar.OverflowAction( - title = stringResource(R.string.action_open_in_web_view), + title = stringResource(MR.strings.action_open_in_web_view), onClick = onWebViewClick, ), ) @@ -86,7 +85,7 @@ fun BrowseAnimeSourceToolbar( if (isConfigurableSource) { add( AppBar.OverflowAction( - title = stringResource(R.string.action_settings), + title = stringResource(MR.strings.action_settings), onClick = onSettingsClick, ), ) @@ -100,21 +99,21 @@ fun BrowseAnimeSourceToolbar( onDismissRequest = { selectingDisplayMode = false }, ) { RadioMenuItem( - text = { Text(text = stringResource(R.string.action_display_comfortable_grid)) }, + text = { Text(text = stringResource(MR.strings.action_display_comfortable_grid)) }, isChecked = displayMode == LibraryDisplayMode.ComfortableGrid, ) { selectingDisplayMode = false onDisplayModeChange(LibraryDisplayMode.ComfortableGrid) } RadioMenuItem( - text = { Text(text = stringResource(R.string.action_display_grid)) }, + text = { Text(text = stringResource(MR.strings.action_display_grid)) }, isChecked = displayMode == LibraryDisplayMode.CompactGrid, ) { selectingDisplayMode = false onDisplayModeChange(LibraryDisplayMode.CompactGrid) } RadioMenuItem( - text = { Text(text = stringResource(R.string.action_display_list)) }, + text = { Text(text = stringResource(MR.strings.action_display_list)) }, isChecked = displayMode == LibraryDisplayMode.List, ) { selectingDisplayMode = false diff --git a/app/src/main/java/eu/kanade/presentation/browse/anime/components/GlobalAnimeSearchCardRow.kt b/app/src/main/java/eu/kanade/presentation/browse/anime/components/GlobalAnimeSearchCardRow.kt index e44d0878e9..3f36f850a4 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/anime/components/GlobalAnimeSearchCardRow.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/anime/components/GlobalAnimeSearchCardRow.kt @@ -13,16 +13,16 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.State import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import eu.kanade.presentation.browse.InLibraryBadge import eu.kanade.presentation.library.CommonEntryItemDefaults import eu.kanade.presentation.library.EntryComfortableGridItem -import eu.kanade.tachiyomi.R import tachiyomi.domain.entries.anime.model.Anime import tachiyomi.domain.entries.anime.model.AnimeCover import tachiyomi.domain.entries.anime.model.asAnimeCover +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource @Composable fun GlobalAnimeSearchCardRow( @@ -79,7 +79,7 @@ private fun AnimeItem( @Composable private fun EmptyResultItem() { Text( - text = stringResource(R.string.no_results_found), + text = stringResource(MR.strings.no_results_found), modifier = Modifier .padding( horizontal = MaterialTheme.padding.medium, diff --git a/app/src/main/java/eu/kanade/presentation/browse/anime/components/GlobalAnimeSearchToolbar.kt b/app/src/main/java/eu/kanade/presentation/browse/anime/components/GlobalAnimeSearchToolbar.kt index fdfc5c9879..e7219ef1e9 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/anime/components/GlobalAnimeSearchToolbar.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/anime/components/GlobalAnimeSearchToolbar.kt @@ -26,11 +26,11 @@ import androidx.compose.material3.VerticalDivider import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import eu.kanade.presentation.components.SearchToolbar -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch.AnimeSourceFilter +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource @Composable fun GlobalAnimeSearchToolbar( @@ -85,7 +85,7 @@ fun GlobalAnimeSearchToolbar( ) }, label = { - Text(text = stringResource(id = R.string.pinned_sources)) + Text(text = stringResource(MR.strings.pinned_sources)) }, ) FilterChip( @@ -100,7 +100,7 @@ fun GlobalAnimeSearchToolbar( ) }, label = { - Text(text = stringResource(id = R.string.all)) + Text(text = stringResource(MR.strings.all)) }, ) @@ -118,7 +118,7 @@ fun GlobalAnimeSearchToolbar( ) }, label = { - Text(text = stringResource(id = R.string.has_results)) + Text(text = stringResource(MR.strings.has_results)) }, ) } diff --git a/app/src/main/java/eu/kanade/presentation/browse/manga/BrowseMangaSourceScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/manga/BrowseMangaSourceScreen.kt index 52bab27c66..08d7c88689 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/manga/BrowseMangaSourceScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/manga/BrowseMangaSourceScreen.kt @@ -5,7 +5,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.HelpOutline -import androidx.compose.material.icons.outlined.HelpOutline import androidx.compose.material.icons.outlined.Public import androidx.compose.material.icons.outlined.Refresh import androidx.compose.material3.SnackbarDuration @@ -15,7 +14,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.paging.LoadState import androidx.paging.compose.LazyPagingItems import eu.kanade.presentation.browse.manga.components.BrowseMangaSourceComfortableGrid @@ -23,14 +21,16 @@ import eu.kanade.presentation.browse.manga.components.BrowseMangaSourceCompactGr import eu.kanade.presentation.browse.manga.components.BrowseMangaSourceList import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.util.formattedMessage -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.source.MangaSource import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.flow.StateFlow +import tachiyomi.core.i18n.stringResource import tachiyomi.domain.entries.manga.model.Manga import tachiyomi.domain.library.model.LibraryDisplayMode import tachiyomi.domain.source.manga.model.StubMangaSource +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.EmptyScreenAction import tachiyomi.presentation.core.screens.LoadingScreen @@ -63,7 +63,7 @@ fun BrowseSourceContent( if (mangaList.itemCount > 0 && errorState != null && errorState is LoadState.Error) { val result = snackbarHostState.showSnackbar( message = getErrorMessage(errorState), - actionLabel = context.getString(R.string.action_retry), + actionLabel = context.stringResource(MR.strings.action_retry), duration = SnackbarDuration.Indefinite, ) when (result) { @@ -80,7 +80,7 @@ fun BrowseSourceContent( actions = if (source is LocalMangaSource) { persistentListOf( EmptyScreenAction( - stringResId = R.string.local_source_help_guide, + stringRes = MR.strings.local_source_help_guide, icon = Icons.AutoMirrored.Outlined.HelpOutline, onClick = onLocalSourceHelpClick, ), @@ -88,17 +88,17 @@ fun BrowseSourceContent( } else { persistentListOf( EmptyScreenAction( - stringResId = R.string.action_retry, + stringRes = MR.strings.action_retry, icon = Icons.Outlined.Refresh, onClick = mangaList::refresh, ), EmptyScreenAction( - stringResId = R.string.action_open_in_web_view, + stringRes = MR.strings.action_open_in_web_view, icon = Icons.Outlined.Public, onClick = onWebViewClick, ), EmptyScreenAction( - stringResId = R.string.label_help, + stringRes = MR.strings.label_help, icon = Icons.AutoMirrored.Outlined.HelpOutline, onClick = onHelpClick, ), @@ -161,7 +161,7 @@ internal fun MissingSourceScreen( }, ) { paddingValues -> EmptyScreen( - message = stringResource(R.string.source_not_installed, source.toString()), + message = stringResource(MR.strings.source_not_installed, source.toString()), modifier = Modifier.padding(paddingValues), ) } diff --git a/app/src/main/java/eu/kanade/presentation/browse/manga/MangaExtensionDetailsScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/manga/MangaExtensionDetailsScreen.kt index 567663cfb8..f9a407a0db 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/manga/MangaExtensionDetailsScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/manga/MangaExtensionDetailsScreen.kt @@ -17,7 +17,6 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.items import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.HelpOutline -import androidx.compose.material.icons.outlined.HelpOutline import androidx.compose.material.icons.outlined.History import androidx.compose.material.icons.outlined.Settings import androidx.compose.material3.AlertDialog @@ -39,7 +38,6 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign @@ -51,15 +49,16 @@ import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.WarningBanner import eu.kanade.presentation.more.settings.widget.TextPreferenceWidget import eu.kanade.presentation.more.settings.widget.TrailingWidgetBuffer -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.extension.manga.model.MangaExtension import eu.kanade.tachiyomi.source.ConfigurableSource import eu.kanade.tachiyomi.ui.browse.manga.extension.details.MangaExtensionDetailsScreenModel import eu.kanade.tachiyomi.util.system.LocaleHelper import kotlinx.collections.immutable.persistentListOf +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen @Composable @@ -78,7 +77,7 @@ fun ExtensionDetailsScreen( Scaffold( topBar = { scrollBehavior -> AppBar( - title = stringResource(R.string.label_extension_info), + title = stringResource(MR.strings.label_extension_info), navigateUp = navigateUp, actions = { AppBarActions( @@ -87,14 +86,14 @@ fun ExtensionDetailsScreen( if (state.extension?.isUnofficial == false) { add( AppBar.Action( - title = stringResource(R.string.whats_new), + title = stringResource(MR.strings.whats_new), icon = Icons.Outlined.History, onClick = onClickWhatsNew, ), ) add( AppBar.Action( - title = stringResource(R.string.action_faq_and_guides), + title = stringResource(MR.strings.action_faq_and_guides), icon = Icons.AutoMirrored.Outlined.HelpOutline, onClick = onClickReadme, ), @@ -103,15 +102,15 @@ fun ExtensionDetailsScreen( addAll( listOf( AppBar.OverflowAction( - title = stringResource(R.string.action_enable_all), + title = stringResource(MR.strings.action_enable_all), onClick = onClickEnableAll, ), AppBar.OverflowAction( - title = stringResource(R.string.action_disable_all), + title = stringResource(MR.strings.action_disable_all), onClick = onClickDisableAll, ), AppBar.OverflowAction( - title = stringResource(R.string.pref_clear_cookies), + title = stringResource(MR.strings.pref_clear_cookies), onClick = onClickClearCookies, ), ), @@ -126,7 +125,7 @@ fun ExtensionDetailsScreen( ) { paddingValues -> if (state.extension == null) { EmptyScreen( - textResource = R.string.empty_screen, + stringRes = MR.strings.empty_screen, modifier = Modifier.padding(paddingValues), ) return@Scaffold @@ -161,11 +160,11 @@ private fun ExtensionDetails( when { extension.isUnofficial -> item { - WarningBanner(R.string.unofficial_extension_message) + WarningBanner(MR.strings.unofficial_extension_message) } extension.isObsolete -> item { - WarningBanner(R.string.obsolete_extension_message) + WarningBanner(MR.strings.obsolete_extension_message) } } @@ -262,7 +261,7 @@ private fun DetailsHeader( InfoText( modifier = Modifier.weight(1f), primaryText = extension.versionName, - secondaryText = stringResource(R.string.ext_info_version), + secondaryText = stringResource(MR.strings.ext_info_version), ) InfoDivider() @@ -270,7 +269,7 @@ private fun DetailsHeader( InfoText( modifier = Modifier.weight(if (extension.isNsfw) 1.5f else 1f), primaryText = LocaleHelper.getSourceDisplayName(extension.lang, context), - secondaryText = stringResource(R.string.ext_info_language), + secondaryText = stringResource(MR.strings.ext_info_language), ) if (extension.isNsfw) { @@ -278,12 +277,12 @@ private fun DetailsHeader( InfoText( modifier = Modifier.weight(1f), - primaryText = stringResource(R.string.ext_nsfw_short), + primaryText = stringResource(MR.strings.ext_nsfw_short), primaryTextStyle = MaterialTheme.typography.bodyLarge.copy( color = MaterialTheme.colorScheme.error, fontWeight = FontWeight.Medium, ), - secondaryText = stringResource(R.string.ext_info_age_rating), + secondaryText = stringResource(MR.strings.ext_info_age_rating), onClick = onClickAgeRating, ) } @@ -302,7 +301,7 @@ private fun DetailsHeader( modifier = Modifier.weight(1f), onClick = onClickUninstall, ) { - Text(stringResource(R.string.ext_uninstall)) + Text(stringResource(MR.strings.ext_uninstall)) } if (onClickAppInfo != null) { @@ -311,7 +310,7 @@ private fun DetailsHeader( onClick = onClickAppInfo, ) { Text( - text = stringResource(R.string.ext_app_info), + text = stringResource(MR.strings.ext_app_info), color = MaterialTheme.colorScheme.onPrimary, ) } @@ -389,7 +388,7 @@ private fun SourceSwitchPreference( IconButton(onClick = { onClickSourcePreferences(source.source.id) }) { Icon( imageVector = Icons.Outlined.Settings, - contentDescription = stringResource(R.string.label_settings), + contentDescription = stringResource(MR.strings.label_settings), tint = MaterialTheme.colorScheme.onSurface, ) } @@ -412,11 +411,11 @@ fun NsfwWarningDialog( ) { AlertDialog( text = { - Text(text = stringResource(R.string.ext_nsfw_warning)) + Text(text = stringResource(MR.strings.ext_nsfw_warning)) }, confirmButton = { TextButton(onClick = onClickConfirm) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, onDismissRequest = onClickConfirm, diff --git a/app/src/main/java/eu/kanade/presentation/browse/manga/MangaExtensionFilterScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/manga/MangaExtensionFilterScreen.kt index 500b71aa55..8f929ba280 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/manga/MangaExtensionFilterScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/manga/MangaExtensionFilterScreen.kt @@ -7,13 +7,13 @@ import androidx.compose.foundation.lazy.items import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.browse.manga.extension.MangaExtensionFilterState import eu.kanade.tachiyomi.util.system.LocaleHelper +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen @Composable @@ -25,7 +25,7 @@ fun MangaExtensionFilterScreen( Scaffold( topBar = { scrollBehavior -> AppBar( - title = stringResource(R.string.label_extensions), + title = stringResource(MR.strings.label_extensions), navigateUp = navigateUp, scrollBehavior = scrollBehavior, ) @@ -33,7 +33,7 @@ fun MangaExtensionFilterScreen( ) { contentPadding -> if (state.isEmpty) { EmptyScreen( - textResource = R.string.empty_screen, + stringRes = MR.strings.empty_screen, modifier = Modifier.padding(contentPadding), ) return@Scaffold diff --git a/app/src/main/java/eu/kanade/presentation/browse/manga/MangaExtensionsScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/manga/MangaExtensionsScreen.kt index 5d4ebf86d3..83146dd0f1 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/manga/MangaExtensionsScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/manga/MangaExtensionsScreen.kt @@ -1,6 +1,5 @@ package eu.kanade.presentation.browse.manga -import androidx.annotation.StringRes import androidx.compose.animation.core.animateDpAsState import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Arrangement @@ -33,22 +32,23 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp +import dev.icerock.moko.resources.StringResource import eu.kanade.presentation.browse.BaseBrowseItem import eu.kanade.presentation.browse.manga.components.MangaExtensionIcon import eu.kanade.presentation.entries.DotSeparatorNoSpaceText -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.extension.InstallStep import eu.kanade.tachiyomi.extension.manga.model.MangaExtension import eu.kanade.tachiyomi.ui.browse.manga.extension.MangaExtensionUiModel import eu.kanade.tachiyomi.ui.browse.manga.extension.MangaExtensionsScreenModel import eu.kanade.tachiyomi.util.system.LocaleHelper +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.material.PullRefresh 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.LoadingScreen import tachiyomi.presentation.core.theme.header @@ -79,12 +79,12 @@ fun MangaExtensionScreen( state.isLoading -> LoadingScreen(Modifier.padding(contentPadding)) state.isEmpty -> { val msg = if (!searchQuery.isNullOrEmpty()) { - R.string.no_results_found + MR.strings.no_results_found } else { - R.string.empty_screen + MR.strings.empty_screen } EmptyScreen( - textResource = msg, + stringRes = msg, modifier = Modifier.padding(contentPadding), ) } @@ -132,11 +132,11 @@ private fun ExtensionContent( when (header) { is MangaExtensionUiModel.Header.Resource -> { val action: @Composable RowScope.() -> Unit = - if (header.textRes == R.string.ext_updates_pending) { + if (header.textRes == MR.strings.ext_updates_pending) { { Button(onClick = { onClickUpdateAll() }) { Text( - text = stringResource(R.string.ext_update_all), + text = stringResource(MR.strings.ext_update_all), style = LocalTextStyle.current.copy( color = MaterialTheme.colorScheme.onPrimary, ), @@ -313,10 +313,10 @@ private fun ExtensionItemContent( } val warning = when { - extension is MangaExtension.Untrusted -> R.string.ext_untrusted - extension is MangaExtension.Installed && extension.isUnofficial -> R.string.ext_unofficial - extension is MangaExtension.Installed && extension.isObsolete -> R.string.ext_obsolete - extension.isNsfw -> R.string.ext_nsfw_short + extension is MangaExtension.Untrusted -> MR.strings.ext_untrusted + extension is MangaExtension.Installed && extension.isUnofficial -> MR.strings.ext_unofficial + extension is MangaExtension.Installed && extension.isObsolete -> MR.strings.ext_obsolete + extension.isNsfw -> MR.strings.ext_nsfw_short else -> null } if (warning != null) { @@ -332,9 +332,9 @@ private fun ExtensionItemContent( DotSeparatorNoSpaceText() Text( text = when (installStep) { - InstallStep.Pending -> stringResource(R.string.ext_pending) - InstallStep.Downloading -> stringResource(R.string.ext_downloading) - InstallStep.Installing -> stringResource(R.string.ext_installing) + InstallStep.Pending -> stringResource(MR.strings.ext_pending) + InstallStep.Downloading -> stringResource(MR.strings.ext_downloading) + InstallStep.Installing -> stringResource(MR.strings.ext_installing) else -> error("Must not show non-install process text") }, ) @@ -360,19 +360,19 @@ private fun ExtensionItemActions( ) { Text( text = when (installStep) { - InstallStep.Installed -> stringResource(R.string.ext_installed) - InstallStep.Error -> stringResource(R.string.action_retry) + InstallStep.Installed -> stringResource(MR.strings.ext_installed) + InstallStep.Error -> stringResource(MR.strings.action_retry) InstallStep.Idle -> { when (extension) { is MangaExtension.Installed -> { if (extension.hasUpdate) { - stringResource(R.string.ext_update) + stringResource(MR.strings.ext_update) } else { - stringResource(R.string.action_settings) + stringResource(MR.strings.action_settings) } } - is MangaExtension.Untrusted -> stringResource(R.string.ext_trust) - is MangaExtension.Available -> stringResource(R.string.ext_install) + is MangaExtension.Untrusted -> stringResource(MR.strings.ext_trust) + is MangaExtension.Available -> stringResource(MR.strings.ext_install) } } else -> error("Must not show install process text") @@ -383,7 +383,7 @@ private fun ExtensionItemActions( IconButton(onClick = { onClickItemCancel(extension) }) { Icon( imageVector = Icons.Outlined.Close, - contentDescription = stringResource(R.string.action_cancel), + contentDescription = stringResource(MR.strings.action_cancel), ) } } @@ -392,7 +392,7 @@ private fun ExtensionItemActions( @Composable fun ExtensionHeader( - @StringRes textRes: Int, + textRes: StringResource, modifier: Modifier = Modifier, action: @Composable RowScope.() -> Unit = {}, ) { @@ -432,19 +432,19 @@ fun ExtensionTrustDialog( ) { AlertDialog( title = { - Text(text = stringResource(R.string.untrusted_extension)) + Text(text = stringResource(MR.strings.untrusted_extension)) }, text = { - Text(text = stringResource(R.string.untrusted_extension_message)) + Text(text = stringResource(MR.strings.untrusted_extension_message)) }, confirmButton = { TextButton(onClick = onClickConfirm) { - Text(text = stringResource(R.string.ext_trust)) + Text(text = stringResource(MR.strings.ext_trust)) } }, dismissButton = { TextButton(onClick = onClickDismiss) { - Text(text = stringResource(R.string.ext_uninstall)) + Text(text = stringResource(MR.strings.ext_uninstall)) } }, onDismissRequest = onDismissRequest, diff --git a/app/src/main/java/eu/kanade/presentation/browse/manga/MangaSourcesFilterScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/manga/MangaSourcesFilterScreen.kt index 596c56106c..13e838c994 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/manga/MangaSourcesFilterScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/manga/MangaSourcesFilterScreen.kt @@ -7,16 +7,16 @@ import androidx.compose.material3.Checkbox import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import eu.kanade.presentation.browse.manga.components.BaseMangaSourceItem import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.browse.manga.source.MangaSourcesFilterScreenModel import eu.kanade.tachiyomi.util.system.LocaleHelper import tachiyomi.domain.source.manga.model.Source +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen @Composable @@ -29,7 +29,7 @@ fun MangaSourcesFilterScreen( Scaffold( topBar = { scrollBehavior -> AppBar( - title = stringResource(R.string.label_sources), + title = stringResource(MR.strings.label_sources), navigateUp = navigateUp, scrollBehavior = scrollBehavior, ) @@ -37,7 +37,7 @@ fun MangaSourcesFilterScreen( ) { contentPadding -> if (state.isEmpty) { EmptyScreen( - textResource = R.string.source_filter_empty_screen, + stringRes = MR.strings.source_filter_empty_screen, modifier = Modifier.padding(contentPadding), ) return@Scaffold diff --git a/app/src/main/java/eu/kanade/presentation/browse/manga/MangaSourcesScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/manga/MangaSourcesScreen.kt index 4661fccc23..9eede5231a 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/manga/MangaSourcesScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/manga/MangaSourcesScreen.kt @@ -19,19 +19,19 @@ import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import eu.kanade.presentation.browse.manga.components.BaseMangaSourceItem -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.browse.manga.source.MangaSourcesScreenModel import eu.kanade.tachiyomi.ui.browse.manga.source.browse.BrowseMangaSourceScreenModel.Listing import eu.kanade.tachiyomi.util.system.LocaleHelper import tachiyomi.domain.source.manga.model.Pin import tachiyomi.domain.source.manga.model.Source +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.material.SecondaryItemAlpha 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.LoadingScreen import tachiyomi.presentation.core.theme.header @@ -49,7 +49,7 @@ fun MangaSourcesScreen( when { state.isLoading -> LoadingScreen(Modifier.padding(contentPadding)) state.isEmpty -> EmptyScreen( - textResource = R.string.source_empty_screen, + stringRes = MR.strings.source_empty_screen, modifier = Modifier.padding(contentPadding), ) else -> { @@ -126,7 +126,7 @@ private fun SourceItem( if (source.supportsLatest) { TextButton(onClick = { onClickItem(source, Listing.Latest) }) { Text( - text = stringResource(R.string.latest), + text = stringResource(MR.strings.latest), style = LocalTextStyle.current.copy( color = MaterialTheme.colorScheme.primary, ), @@ -154,7 +154,7 @@ private fun SourcePinButton( alpha = SecondaryItemAlpha, ) } - val description = if (isPinned) R.string.action_unpin else R.string.action_pin + val description = if (isPinned) MR.strings.action_unpin else MR.strings.action_pin IconButton(onClick = onClick) { Icon( imageVector = icon, @@ -180,7 +180,7 @@ fun MangaSourceOptionsDialog( }, text = { Column { - val textId = if (Pin.Pinned in source.pin) R.string.action_unpin else R.string.action_pin + val textId = if (Pin.Pinned in source.pin) MR.strings.action_unpin else MR.strings.action_pin Text( text = stringResource(textId), modifier = Modifier @@ -190,7 +190,7 @@ fun MangaSourceOptionsDialog( ) if (source.id != LocalMangaSource.ID) { Text( - text = stringResource(R.string.action_disable), + text = stringResource(MR.strings.action_disable), modifier = Modifier .clickable(onClick = onClickDisable) .fillMaxWidth() @@ -201,9 +201,9 @@ fun MangaSourceOptionsDialog( if (onClickToggleDataSaver != null) { Text( text = if (source.isExcludedFromDataSaver) { - stringResource(id = R.string.data_saver_stop_exclude) + stringResource(MR.strings.data_saver_stop_exclude) } else { - stringResource(id = R.string.data_saver_exclude) + stringResource(MR.strings.data_saver_exclude) }, modifier = Modifier .clickable(onClick = onClickToggleDataSaver) diff --git a/app/src/main/java/eu/kanade/presentation/browse/manga/MigrateMangaScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/manga/MigrateMangaScreen.kt index e332d0b5d9..b45f1665a0 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/manga/MigrateMangaScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/manga/MigrateMangaScreen.kt @@ -7,9 +7,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.entries.manga.components.BaseMangaListItem -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.browse.manga.migration.manga.MigrateMangaScreenModel import tachiyomi.domain.entries.manga.model.Manga +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.screens.EmptyScreen @@ -33,7 +33,7 @@ fun MigrateMangaScreen( ) { contentPadding -> if (state.isEmpty) { EmptyScreen( - textResource = R.string.empty_screen, + stringRes = MR.strings.empty_screen, modifier = Modifier.padding(contentPadding), ) return@Scaffold diff --git a/app/src/main/java/eu/kanade/presentation/browse/manga/MigrateMangaSourceScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/manga/MigrateMangaSourceScreen.kt index 02f122e77e..50f67034f3 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/manga/MigrateMangaSourceScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/manga/MigrateMangaSourceScreen.kt @@ -20,21 +20,21 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import eu.kanade.domain.source.service.SetMigrateSorting import eu.kanade.presentation.browse.manga.components.BaseMangaSourceItem import eu.kanade.presentation.browse.manga.components.MangaSourceIcon -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.browse.manga.migration.sources.MigrateMangaSourceScreenModel import eu.kanade.tachiyomi.util.system.copyToClipboard import tachiyomi.domain.source.manga.model.Source +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.Badge import tachiyomi.presentation.core.components.BadgeGroup import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.Scroller.STICKY_HEADER_KEY_PREFIX 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.LoadingScreen import tachiyomi.presentation.core.theme.header @@ -53,7 +53,7 @@ fun MigrateMangaSourceScreen( when { state.isLoading -> LoadingScreen(Modifier.padding(contentPadding)) state.isEmpty -> EmptyScreen( - textResource = R.string.information_empty_library, + stringRes = MR.strings.information_empty_library, modifier = Modifier.padding(contentPadding), ) else -> @@ -95,7 +95,7 @@ private fun MigrateSourceList( verticalAlignment = Alignment.CenterVertically, ) { Text( - text = stringResource(R.string.migration_selection_prompt), + text = stringResource(MR.strings.migration_selection_prompt), modifier = Modifier.weight(1f), style = MaterialTheme.typography.header, ) @@ -104,11 +104,11 @@ private fun MigrateSourceList( when (sortingMode) { SetMigrateSorting.Mode.ALPHABETICAL -> Icon( Icons.Outlined.SortByAlpha, - contentDescription = stringResource(R.string.action_sort_alpha), + contentDescription = stringResource(MR.strings.action_sort_alpha), ) SetMigrateSorting.Mode.TOTAL -> Icon( Icons.Outlined.Numbers, - contentDescription = stringResource(R.string.action_sort_count), + contentDescription = stringResource(MR.strings.action_sort_count), ) } } @@ -116,11 +116,11 @@ private fun MigrateSourceList( when (sortingDirection) { SetMigrateSorting.Direction.ASCENDING -> Icon( Icons.Outlined.ArrowUpward, - contentDescription = stringResource(R.string.action_asc), + contentDescription = stringResource(MR.strings.action_asc), ) SetMigrateSorting.Direction.DESCENDING -> Icon( Icons.Outlined.ArrowDownward, - contentDescription = stringResource(R.string.action_desc), + contentDescription = stringResource(MR.strings.action_desc), ) } } @@ -190,7 +190,7 @@ private fun MigrateSourceItem( if (source.isStub) { Text( modifier = Modifier.secondaryItemAlpha(), - text = stringResource(R.string.not_installed), + text = stringResource(MR.strings.not_installed), maxLines = 1, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodySmall, diff --git a/app/src/main/java/eu/kanade/presentation/browse/manga/components/BrowseMangaSourceToolbar.kt b/app/src/main/java/eu/kanade/presentation/browse/manga/components/BrowseMangaSourceToolbar.kt index dc5b390ed4..ef73176152 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/manga/components/BrowseMangaSourceToolbar.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/manga/components/BrowseMangaSourceToolbar.kt @@ -2,7 +2,6 @@ package eu.kanade.presentation.browse.manga.components import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ViewList -import androidx.compose.material.icons.filled.ViewList import androidx.compose.material.icons.filled.ViewModule import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarScrollBehavior @@ -11,18 +10,18 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue -import androidx.compose.ui.res.stringResource import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.AppBarTitle import eu.kanade.presentation.components.DropdownMenu import eu.kanade.presentation.components.RadioMenuItem import eu.kanade.presentation.components.SearchToolbar -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.source.ConfigurableSource import eu.kanade.tachiyomi.source.MangaSource import kotlinx.collections.immutable.persistentListOf import tachiyomi.domain.library.model.LibraryDisplayMode +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.source.local.entries.manga.LocalMangaSource @Composable @@ -59,7 +58,7 @@ fun BrowseMangaSourceToolbar( .apply { add( AppBar.Action( - title = stringResource(R.string.action_display_mode), + title = stringResource(MR.strings.action_display_mode), icon = if (displayMode == LibraryDisplayMode.List) { Icons.AutoMirrored.Filled.ViewList } else { @@ -71,14 +70,14 @@ fun BrowseMangaSourceToolbar( if (isLocalSource) { add( AppBar.OverflowAction( - title = stringResource(R.string.label_help), + title = stringResource(MR.strings.label_help), onClick = onHelpClick, ), ) } else { add( AppBar.OverflowAction( - title = stringResource(R.string.action_open_in_web_view), + title = stringResource(MR.strings.action_open_in_web_view), onClick = onWebViewClick, ), ) @@ -86,7 +85,7 @@ fun BrowseMangaSourceToolbar( if (isConfigurableSource) { add( AppBar.OverflowAction( - title = stringResource(R.string.action_settings), + title = stringResource(MR.strings.action_settings), onClick = onSettingsClick, ), ) @@ -100,21 +99,21 @@ fun BrowseMangaSourceToolbar( onDismissRequest = { selectingDisplayMode = false }, ) { RadioMenuItem( - text = { Text(text = stringResource(R.string.action_display_comfortable_grid)) }, + text = { Text(text = stringResource(MR.strings.action_display_comfortable_grid)) }, isChecked = displayMode == LibraryDisplayMode.ComfortableGrid, ) { selectingDisplayMode = false onDisplayModeChange(LibraryDisplayMode.ComfortableGrid) } RadioMenuItem( - text = { Text(text = stringResource(R.string.action_display_grid)) }, + text = { Text(text = stringResource(MR.strings.action_display_grid)) }, isChecked = displayMode == LibraryDisplayMode.CompactGrid, ) { selectingDisplayMode = false onDisplayModeChange(LibraryDisplayMode.CompactGrid) } RadioMenuItem( - text = { Text(text = stringResource(R.string.action_display_list)) }, + text = { Text(text = stringResource(MR.strings.action_display_list)) }, isChecked = displayMode == LibraryDisplayMode.List, ) { selectingDisplayMode = false diff --git a/app/src/main/java/eu/kanade/presentation/browse/manga/components/GlobalMangaSearchCardRow.kt b/app/src/main/java/eu/kanade/presentation/browse/manga/components/GlobalMangaSearchCardRow.kt index ba4f59e3f8..8dd229c0d3 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/manga/components/GlobalMangaSearchCardRow.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/manga/components/GlobalMangaSearchCardRow.kt @@ -13,16 +13,16 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.State import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import eu.kanade.presentation.browse.InLibraryBadge import eu.kanade.presentation.library.CommonEntryItemDefaults import eu.kanade.presentation.library.EntryComfortableGridItem -import eu.kanade.tachiyomi.R import tachiyomi.domain.entries.manga.model.Manga import tachiyomi.domain.entries.manga.model.MangaCover import tachiyomi.domain.entries.manga.model.asMangaCover +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource @Composable fun GlobalMangaSearchCardRow( @@ -79,7 +79,7 @@ private fun MangaItem( @Composable private fun EmptyResultItem() { Text( - text = stringResource(R.string.no_results_found), + text = stringResource(MR.strings.no_results_found), modifier = Modifier .padding( horizontal = MaterialTheme.padding.medium, diff --git a/app/src/main/java/eu/kanade/presentation/browse/manga/components/GlobalMangaSearchToolbar.kt b/app/src/main/java/eu/kanade/presentation/browse/manga/components/GlobalMangaSearchToolbar.kt index a208119ebd..d04ff6c95e 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/manga/components/GlobalMangaSearchToolbar.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/manga/components/GlobalMangaSearchToolbar.kt @@ -26,11 +26,11 @@ import androidx.compose.material3.VerticalDivider import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import eu.kanade.presentation.components.SearchToolbar -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.browse.manga.source.globalsearch.MangaSourceFilter +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource @Composable fun GlobalMangaSearchToolbar( @@ -85,7 +85,7 @@ fun GlobalMangaSearchToolbar( ) }, label = { - Text(text = stringResource(id = R.string.pinned_sources)) + Text(text = stringResource(MR.strings.pinned_sources)) }, ) FilterChip( @@ -100,7 +100,7 @@ fun GlobalMangaSearchToolbar( ) }, label = { - Text(text = stringResource(id = R.string.all)) + Text(text = stringResource(MR.strings.all)) }, ) @@ -118,7 +118,7 @@ fun GlobalMangaSearchToolbar( ) }, label = { - Text(text = stringResource(id = R.string.has_results)) + Text(text = stringResource(MR.strings.has_results)) }, ) } diff --git a/app/src/main/java/eu/kanade/presentation/category/AnimeCategoryScreen.kt b/app/src/main/java/eu/kanade/presentation/category/AnimeCategoryScreen.kt index aa90381c83..edc941590b 100644 --- a/app/src/main/java/eu/kanade/presentation/category/AnimeCategoryScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/category/AnimeCategoryScreen.kt @@ -8,9 +8,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import eu.kanade.presentation.category.components.CategoryContent import eu.kanade.presentation.category.components.CategoryFloatingActionButton -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.category.anime.AnimeCategoryScreenState import tachiyomi.domain.category.model.Category +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.components.material.topSmallPaddingValues @@ -39,7 +39,7 @@ fun AnimeCategoryScreen( ) { if (state.isEmpty) { EmptyScreen( - textResource = R.string.information_empty_category, + stringRes = MR.strings.information_empty_category, modifier = Modifier.padding(contentPadding), ) return@Scaffold diff --git a/app/src/main/java/eu/kanade/presentation/category/CategoryExtensions.kt b/app/src/main/java/eu/kanade/presentation/category/CategoryExtensions.kt index 0f2ade48e6..a6c22c2409 100644 --- a/app/src/main/java/eu/kanade/presentation/category/CategoryExtensions.kt +++ b/app/src/main/java/eu/kanade/presentation/category/CategoryExtensions.kt @@ -2,19 +2,20 @@ package eu.kanade.presentation.category import android.content.Context import androidx.compose.runtime.Composable -import androidx.compose.ui.res.stringResource -import eu.kanade.tachiyomi.R +import tachiyomi.core.i18n.stringResource import tachiyomi.domain.category.model.Category +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource val Category.visualName: String @Composable get() = when { - isSystemCategory -> stringResource(R.string.label_default) + isSystemCategory -> stringResource(MR.strings.label_default) else -> name } fun Category.visualName(context: Context): String = when { - isSystemCategory -> context.getString(R.string.label_default) + isSystemCategory -> context.stringResource(MR.strings.label_default) else -> name } diff --git a/app/src/main/java/eu/kanade/presentation/category/ChangeCategoryDialog.kt b/app/src/main/java/eu/kanade/presentation/category/ChangeCategoryDialog.kt index a7d830af5a..22a062f028 100644 --- a/app/src/main/java/eu/kanade/presentation/category/ChangeCategoryDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/category/ChangeCategoryDialog.kt @@ -20,13 +20,13 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import eu.kanade.core.preference.asToggleableState -import eu.kanade.tachiyomi.R import tachiyomi.core.preference.CheckboxState import tachiyomi.domain.category.model.Category +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.TextButton import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource @Composable fun ChangeCategoryDialog( @@ -45,14 +45,14 @@ fun ChangeCategoryDialog( onEditCategories() }, ) { - Text(text = stringResource(R.string.action_edit_categories)) + Text(text = stringResource(MR.strings.action_edit_categories)) } }, title = { - Text(text = stringResource(R.string.action_move_category)) + Text(text = stringResource(MR.strings.action_move_category)) }, text = { - Text(text = stringResource(R.string.information_empty_category_dialog)) + Text(text = stringResource(MR.strings.information_empty_category_dialog)) }, ) return @@ -66,11 +66,11 @@ fun ChangeCategoryDialog( onDismissRequest() onEditCategories() }) { - Text(text = stringResource(R.string.action_edit)) + Text(text = stringResource(MR.strings.action_edit)) } Spacer(modifier = Modifier.weight(1f)) TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } TextButton( onClick = { @@ -87,12 +87,12 @@ fun ChangeCategoryDialog( ) }, ) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } } }, title = { - Text(text = stringResource(R.string.action_move_category)) + Text(text = stringResource(MR.strings.action_move_category)) }, text = { Column( diff --git a/app/src/main/java/eu/kanade/presentation/category/MangaCategoryScreen.kt b/app/src/main/java/eu/kanade/presentation/category/MangaCategoryScreen.kt index c7138186db..3c74d8285d 100644 --- a/app/src/main/java/eu/kanade/presentation/category/MangaCategoryScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/category/MangaCategoryScreen.kt @@ -8,9 +8,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import eu.kanade.presentation.category.components.CategoryContent import eu.kanade.presentation.category.components.CategoryFloatingActionButton -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.category.manga.MangaCategoryScreenState import tachiyomi.domain.category.model.Category +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.components.material.topSmallPaddingValues @@ -39,7 +39,7 @@ fun MangaCategoryScreen( ) { if (state.isEmpty) { EmptyScreen( - textResource = R.string.information_empty_category, + stringRes = MR.strings.information_empty_category, modifier = Modifier.padding(contentPadding), ) return@Scaffold diff --git a/app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt b/app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt index b7e2800501..e853f27ae5 100644 --- a/app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt +++ b/app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt @@ -13,10 +13,10 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester -import androidx.compose.ui.res.stringResource -import eu.kanade.tachiyomi.R import kotlinx.coroutines.delay import tachiyomi.domain.category.model.Category +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import kotlin.time.Duration.Companion.seconds @Composable @@ -31,19 +31,19 @@ fun CategorySortAlphabeticallyDialog( onSort() onDismissRequest() }) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, title = { - Text(text = stringResource(R.string.action_sort_category)) + Text(text = stringResource(MR.strings.action_sort_category)) }, text = { - Text(text = stringResource(R.string.sort_category_confirmation)) + Text(text = stringResource(MR.strings.sort_category_confirmation)) }, ) } @@ -69,28 +69,28 @@ fun CategoryCreateDialog( onDismissRequest() }, ) { - Text(text = stringResource(R.string.action_add)) + Text(text = stringResource(MR.strings.action_add)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, title = { - Text(text = stringResource(R.string.action_add_category)) + Text(text = stringResource(MR.strings.action_add_category)) }, text = { OutlinedTextField( modifier = Modifier.focusRequester(focusRequester), value = name, onValueChange = { name = it }, - label = { Text(text = stringResource(R.string.name)) }, + label = { Text(text = stringResource(MR.strings.name)) }, supportingText = { val msgRes = if (name.isNotEmpty() && nameAlreadyExists) { - R.string.error_category_exists + MR.strings.error_category_exists } else { - R.string.information_required_plain + MR.strings.information_required_plain } Text(text = stringResource(msgRes)) }, @@ -130,16 +130,16 @@ fun CategoryRenameDialog( onDismissRequest() }, ) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, title = { - Text(text = stringResource(R.string.action_rename_category)) + Text(text = stringResource(MR.strings.action_rename_category)) }, text = { OutlinedTextField( @@ -149,12 +149,12 @@ fun CategoryRenameDialog( valueHasChanged = name != it name = it }, - label = { Text(text = stringResource(R.string.name)) }, + label = { Text(text = stringResource(MR.strings.name)) }, supportingText = { val msgRes = if (valueHasChanged && nameAlreadyExists) { - R.string.error_category_exists + MR.strings.error_category_exists } else { - R.string.information_required_plain + MR.strings.information_required_plain } Text(text = stringResource(msgRes)) }, @@ -184,19 +184,19 @@ fun CategoryDeleteDialog( onDelete() onDismissRequest() }) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, title = { - Text(text = stringResource(R.string.delete_category)) + Text(text = stringResource(MR.strings.delete_category)) }, text = { - Text(text = stringResource(R.string.delete_category_confirmation, category.name)) + Text(text = stringResource(MR.strings.delete_category_confirmation, category.name)) }, ) } diff --git a/app/src/main/java/eu/kanade/presentation/category/components/CategoryFloatingActionButton.kt b/app/src/main/java/eu/kanade/presentation/category/components/CategoryFloatingActionButton.kt index 15514d7f59..b265c9142c 100644 --- a/app/src/main/java/eu/kanade/presentation/category/components/CategoryFloatingActionButton.kt +++ b/app/src/main/java/eu/kanade/presentation/category/components/CategoryFloatingActionButton.kt @@ -6,9 +6,9 @@ import androidx.compose.material.icons.outlined.Add import androidx.compose.material3.Icon import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.ui.res.stringResource -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.isScrolledToEnd import tachiyomi.presentation.core.util.isScrollingUp @@ -18,7 +18,7 @@ fun CategoryFloatingActionButton( onCreate: () -> Unit, ) { ExtendedFloatingActionButton( - text = { Text(text = stringResource(R.string.action_add)) }, + text = { Text(text = stringResource(MR.strings.action_add)) }, icon = { Icon(imageVector = Icons.Outlined.Add, contentDescription = "") }, onClick = onCreate, expanded = lazyListState.isScrollingUp() || lazyListState.isScrolledToEnd(), diff --git a/app/src/main/java/eu/kanade/presentation/category/components/CategoryListItem.kt b/app/src/main/java/eu/kanade/presentation/category/components/CategoryListItem.kt index 2cf8ae448a..ceabe253a3 100644 --- a/app/src/main/java/eu/kanade/presentation/category/components/CategoryListItem.kt +++ b/app/src/main/java/eu/kanade/presentation/category/components/CategoryListItem.kt @@ -11,7 +11,6 @@ import androidx.compose.material.icons.outlined.ArrowDropDown import androidx.compose.material.icons.outlined.ArrowDropUp import androidx.compose.material.icons.outlined.Delete import androidx.compose.material.icons.outlined.Edit -import androidx.compose.material.icons.outlined.Label import androidx.compose.material.icons.outlined.Visibility import androidx.compose.material.icons.outlined.VisibilityOff import androidx.compose.material3.ElevatedCard @@ -22,10 +21,10 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import eu.kanade.tachiyomi.R import tachiyomi.domain.category.model.Category +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource @Composable fun CategoryListItem( @@ -77,7 +76,7 @@ fun CategoryListItem( IconButton(onClick = onRename) { Icon( imageVector = Icons.Outlined.Edit, - contentDescription = stringResource(R.string.action_rename_category), + contentDescription = stringResource(MR.strings.action_rename_category), ) } IconButton( @@ -89,14 +88,14 @@ fun CategoryListItem( } else { Icons.Outlined.VisibilityOff }, - contentDescription = stringResource(R.string.action_hide), + contentDescription = stringResource(MR.strings.action_hide), ) }, ) IconButton(onClick = onDelete) { Icon( imageVector = Icons.Outlined.Delete, - contentDescription = stringResource(R.string.action_delete), + contentDescription = stringResource(MR.strings.action_delete), ) } } diff --git a/app/src/main/java/eu/kanade/presentation/components/AppBar.kt b/app/src/main/java/eu/kanade/presentation/components/AppBar.kt index a28987b267..50a08fd9e4 100644 --- a/app/src/main/java/eu/kanade/presentation/components/AppBar.kt +++ b/app/src/main/java/eu/kanade/presentation/components/AppBar.kt @@ -47,16 +47,16 @@ import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalSoftwareKeyboardController -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import eu.kanade.tachiyomi.R import kotlinx.collections.immutable.ImmutableList +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.Pill +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.clearFocusOnSoftKeyboardHide import tachiyomi.presentation.core.util.runOnEnterKeyPressed import tachiyomi.presentation.core.util.secondaryItemAlpha @@ -140,7 +140,7 @@ fun AppBar( IconButton(onClick = onCancelActionMode) { Icon( imageVector = Icons.Outlined.Close, - contentDescription = stringResource(R.string.action_cancel), + contentDescription = stringResource(MR.strings.action_cancel), ) } } else { @@ -245,7 +245,7 @@ fun AppBarActions( positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), tooltip = { PlainTooltip { - Text(stringResource(R.string.abc_action_menu_overflow_description)) + Text(stringResource(MR.strings.action_menu_overflow_description)) } }, state = rememberTooltipState(), @@ -256,7 +256,7 @@ fun AppBarActions( Icon( Icons.Outlined.MoreVert, contentDescription = stringResource( - R.string.abc_action_menu_overflow_description, + MR.strings.action_menu_overflow_description, ), ) } @@ -282,7 +282,7 @@ fun AppBarActions( /** * @param searchEnabled Set to false if you don't want to show search action. * @param searchQuery If null, use normal toolbar. - * @param placeholderText If null, [R.string.action_search_hint] is used. + * @param placeholderText If null, [MR.strings.action_search_hint] is used. */ @Composable fun SearchToolbar( @@ -352,7 +352,7 @@ fun SearchToolbar( modifier = Modifier.secondaryItemAlpha(), text = ( placeholderText ?: stringResource( - R.string.action_search_hint, + MR.strings.action_search_hint, ) ), maxLines = 1, @@ -379,7 +379,7 @@ fun SearchToolbar( positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), tooltip = { PlainTooltip { - Text(stringResource(R.string.action_search)) + Text(stringResource(MR.strings.action_search)) } }, state = rememberTooltipState(), @@ -389,7 +389,7 @@ fun SearchToolbar( ) { Icon( Icons.Outlined.Search, - contentDescription = stringResource(R.string.action_search), + contentDescription = stringResource(MR.strings.action_search), ) } } @@ -398,7 +398,7 @@ fun SearchToolbar( positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), tooltip = { PlainTooltip { - Text(stringResource(R.string.action_reset)) + Text(stringResource(MR.strings.action_reset)) } }, state = rememberTooltipState(), @@ -411,7 +411,7 @@ fun SearchToolbar( ) { Icon( Icons.Outlined.Close, - contentDescription = stringResource(R.string.action_reset), + contentDescription = stringResource(MR.strings.action_reset), ) } } @@ -435,7 +435,7 @@ fun UpIcon( ?: Icons.AutoMirrored.Outlined.ArrowBack Icon( imageVector = icon, - contentDescription = stringResource(R.string.abc_action_bar_up_description), + contentDescription = stringResource(MR.strings.action_bar_up_description), modifier = modifier, ) } diff --git a/app/src/main/java/eu/kanade/presentation/components/Banners.kt b/app/src/main/java/eu/kanade/presentation/components/Banners.kt index 14525e137b..7e702a8109 100644 --- a/app/src/main/java/eu/kanade/presentation/components/Banners.kt +++ b/app/src/main/java/eu/kanade/presentation/components/Banners.kt @@ -1,6 +1,5 @@ package eu.kanade.presentation.components -import androidx.annotation.StringRes import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.expandVertically import androidx.compose.animation.shrinkVertically @@ -26,13 +25,14 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.layout.SubcomposeLayout import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.util.fastForEach import androidx.compose.ui.util.fastMap import androidx.compose.ui.util.fastMaxBy -import eu.kanade.tachiyomi.R +import dev.icerock.moko.resources.StringResource +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource val DownloadedOnlyBannerBackgroundColor @Composable get() = MaterialTheme.colorScheme.tertiary @@ -43,7 +43,7 @@ val IndexingBannerBackgroundColor @Composable fun WarningBanner( - @StringRes textRes: Int, + textRes: StringResource, modifier: Modifier = Modifier, ) { Text( @@ -127,7 +127,7 @@ fun AppStateBanners( @Composable private fun DownloadedOnlyModeBanner(modifier: Modifier = Modifier) { Text( - text = stringResource(R.string.label_downloaded_only), + text = stringResource(MR.strings.label_downloaded_only), modifier = Modifier .background(DownloadedOnlyBannerBackgroundColor) .fillMaxWidth() @@ -142,7 +142,7 @@ private fun DownloadedOnlyModeBanner(modifier: Modifier = Modifier) { @Composable private fun IncognitoModeBanner(modifier: Modifier = Modifier) { Text( - text = stringResource(R.string.pref_incognito_mode), + text = stringResource(MR.strings.pref_incognito_mode), modifier = Modifier .background(IncognitoModeBannerBackgroundColor) .fillMaxWidth() @@ -173,7 +173,7 @@ private fun IndexingDownloadBanner(modifier: Modifier = Modifier) { ) Spacer(modifier = Modifier.width(8.dp)) Text( - text = stringResource(R.string.download_notifier_cache_renewal), + text = stringResource(MR.strings.download_notifier_cache_renewal), color = MaterialTheme.colorScheme.onSecondary, textAlign = TextAlign.Center, style = MaterialTheme.typography.labelMedium, diff --git a/app/src/main/java/eu/kanade/presentation/components/DropdownMenu.kt b/app/src/main/java/eu/kanade/presentation/components/DropdownMenu.kt index 7aef5f017b..e2a72a613e 100644 --- a/app/src/main/java/eu/kanade/presentation/components/DropdownMenu.kt +++ b/app/src/main/java/eu/kanade/presentation/components/DropdownMenu.kt @@ -9,14 +9,12 @@ import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp import androidx.compose.ui.window.PopupProperties -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import androidx.compose.material3.DropdownMenu as ComposeDropdownMenu @Composable @@ -51,13 +49,13 @@ fun RadioMenuItem( if (isChecked) { Icon( imageVector = Icons.Outlined.RadioButtonChecked, - contentDescription = stringResource(R.string.selected), + contentDescription = stringResource(MR.strings.selected), tint = MaterialTheme.colorScheme.primary, ) } else { Icon( imageVector = Icons.Outlined.RadioButtonUnchecked, - contentDescription = stringResource(R.string.not_selected), + contentDescription = stringResource(MR.strings.not_selected), ) } }, 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 47efe2abaf..ddcf22cb43 100644 --- a/app/src/main/java/eu/kanade/presentation/components/EmptyScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/components/EmptyScreen.kt @@ -2,14 +2,13 @@ package eu.kanade.presentation.components import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.HelpOutline -import androidx.compose.material.icons.outlined.HelpOutline 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.tachiyomi.R import kotlinx.collections.immutable.persistentListOf +import tachiyomi.i18n.MR import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.EmptyScreenAction @@ -19,7 +18,7 @@ private fun NoActionPreview() { TachiyomiTheme { Surface { EmptyScreen( - textResource = R.string.empty_screen, + stringRes = MR.strings.empty_screen, ) } } @@ -31,15 +30,15 @@ private fun WithActionPreview() { TachiyomiTheme { Surface { EmptyScreen( - textResource = R.string.empty_screen, + stringRes = MR.strings.empty_screen, actions = persistentListOf( EmptyScreenAction( - stringResId = R.string.action_retry, + stringRes = MR.strings.action_retry, icon = Icons.Outlined.Refresh, onClick = {}, ), EmptyScreenAction( - stringResId = R.string.getting_started_guide, + stringRes = MR.strings.getting_started_guide, icon = Icons.AutoMirrored.Outlined.HelpOutline, onClick = {}, ), diff --git a/app/src/main/java/eu/kanade/presentation/components/EntryDownloadDropdownMenu.kt b/app/src/main/java/eu/kanade/presentation/components/EntryDownloadDropdownMenu.kt index d44a894e7d..b40da7edce 100644 --- a/app/src/main/java/eu/kanade/presentation/components/EntryDownloadDropdownMenu.kt +++ b/app/src/main/java/eu/kanade/presentation/components/EntryDownloadDropdownMenu.kt @@ -3,10 +3,10 @@ package eu.kanade.presentation.components import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.ui.res.pluralStringResource -import androidx.compose.ui.res.stringResource import eu.kanade.presentation.entries.DownloadAction -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.pluralStringResource +import tachiyomi.presentation.core.i18n.stringResource @Composable fun EntryDownloadDropdownMenu( @@ -19,8 +19,8 @@ fun EntryDownloadDropdownMenu( expanded = expanded, onDismissRequest = onDismissRequest, ) { - val downloadAmount = if (isManga) R.plurals.download_amount_manga else R.plurals.download_amount_anime - val downloadUnviewed = if (isManga) R.string.download_unread else R.string.download_unseen + val downloadAmount = if (isManga) MR.plurals.download_amount_manga else MR.plurals.download_amount_anime + val downloadUnviewed = if (isManga) MR.strings.download_unread else MR.strings.download_unseen listOfNotNull( DownloadAction.NEXT_1_ITEM to pluralStringResource(downloadAmount, 1, 1), DownloadAction.NEXT_5_ITEMS to pluralStringResource(downloadAmount, 5, 5), diff --git a/app/src/main/java/eu/kanade/presentation/components/TabbedDialog.kt b/app/src/main/java/eu/kanade/presentation/components/TabbedDialog.kt index 7e5905715c..6f08ec2975 100644 --- a/app/src/main/java/eu/kanade/presentation/components/TabbedDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/components/TabbedDialog.kt @@ -25,14 +25,14 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.util.fastForEachIndexed -import eu.kanade.tachiyomi.R import kotlinx.collections.immutable.ImmutableList import kotlinx.coroutines.launch +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.HorizontalPager import tachiyomi.presentation.core.components.material.TabText +import tachiyomi.presentation.core.i18n.stringResource object TabbedDialogPaddings { val Horizontal = 24.dp @@ -105,7 +105,7 @@ private fun MoreMenu( IconButton(onClick = onClick) { Icon( imageVector = overflowIcon ?: Icons.Default.MoreVert, - contentDescription = stringResource(R.string.label_more), + contentDescription = stringResource(MR.strings.label_more), ) } if (onClickIcon == null) { 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 f3511c9ae3..984b8f0905 100644 --- a/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt @@ -1,6 +1,5 @@ package eu.kanade.presentation.components -import androidx.annotation.StringRes import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.calculateEndPadding @@ -22,19 +21,20 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLayoutDirection -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.zIndex +import dev.icerock.moko.resources.StringResource import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.launch import tachiyomi.presentation.core.components.HorizontalPager import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.TabText +import tachiyomi.presentation.core.i18n.stringResource @Composable fun TabbedScreen( - @StringRes titleRes: Int?, + titleRes: StringResource?, tabs: ImmutableList, modifier: Modifier = Modifier, startIndex: Int? = null, @@ -133,7 +133,7 @@ fun TabbedScreen( } data class TabContent( - @StringRes val titleRes: Int, + val titleRes: StringResource, val badgeNumber: Int? = null, val searchEnabled: Boolean = false, val actions: ImmutableList = persistentListOf(), 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 98a4e96d53..9b11063ca5 100644 --- a/app/src/main/java/eu/kanade/presentation/crash/CrashScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/crash/CrashScreen.kt @@ -13,13 +13,13 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.PreviewLightDark import eu.kanade.presentation.theme.TachiyomiTheme -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.util.CrashLogUtil import kotlinx.coroutines.launch +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.InfoScreen @Composable @@ -32,18 +32,18 @@ fun CrashScreen( InfoScreen( icon = Icons.Outlined.BugReport, - headingText = stringResource(R.string.crash_screen_title), + headingText = stringResource(MR.strings.crash_screen_title), subtitleText = stringResource( - R.string.crash_screen_description, - stringResource(R.string.app_name), + MR.strings.crash_screen_description, + stringResource(MR.strings.app_name), ), - acceptText = stringResource(R.string.pref_dump_crash_logs), + acceptText = stringResource(MR.strings.pref_dump_crash_logs), onAcceptClick = { scope.launch { CrashLogUtil(context).dumpLogs() } }, - rejectText = stringResource(R.string.crash_screen_restart_application), + rejectText = stringResource(MR.strings.crash_screen_restart_application), onRejectClick = onRestartClick, ) { Box( diff --git a/app/src/main/java/eu/kanade/presentation/entries/EntryBottomActionMenu.kt b/app/src/main/java/eu/kanade/presentation/entries/EntryBottomActionMenu.kt index 0b8de9b04b..3845b8058a 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/EntryBottomActionMenu.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/EntryBottomActionMenu.kt @@ -30,7 +30,6 @@ import androidx.compose.material.icons.outlined.Delete import androidx.compose.material.icons.outlined.DoneAll import androidx.compose.material.icons.outlined.Download import androidx.compose.material.icons.outlined.Input -import androidx.compose.material.icons.outlined.Label import androidx.compose.material.icons.outlined.OpenInNew import androidx.compose.material.icons.outlined.RemoveDone import androidx.compose.material.ripple.rememberRipple @@ -50,7 +49,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalHapticFeedback -import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp @@ -61,6 +59,8 @@ import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.isActive import kotlinx.coroutines.launch +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import kotlin.time.Duration.Companion.seconds @@ -117,7 +117,7 @@ fun EntryBottomActionMenu( .padding(horizontal = 8.dp, vertical = 12.dp), ) { if (onBookmarkClicked != null) { - val bookmark = if (isManga) R.string.action_bookmark else R.string.action_bookmark_episode + val bookmark = if (isManga) MR.strings.action_bookmark else MR.strings.action_bookmark_episode Button( title = stringResource(bookmark), icon = Icons.Outlined.BookmarkAdd, @@ -128,9 +128,9 @@ fun EntryBottomActionMenu( } if (onRemoveBookmarkClicked != null) { val removeBookmark = if (isManga) { - R.string.action_remove_bookmark + MR.strings.action_remove_bookmark } else { - R.string.action_remove_bookmark_episode + MR.strings.action_remove_bookmark_episode } Button( title = stringResource(removeBookmark), @@ -141,7 +141,7 @@ fun EntryBottomActionMenu( ) } if (onMarkAsViewedClicked != null) { - val viewed = if (isManga) R.string.action_mark_as_read else R.string.action_mark_as_seen + val viewed = if (isManga) MR.strings.action_mark_as_read else MR.strings.action_mark_as_seen Button( title = stringResource(viewed), icon = Icons.Outlined.DoneAll, @@ -151,7 +151,7 @@ fun EntryBottomActionMenu( ) } if (onMarkAsUnviewedClicked != null) { - val unviewed = if (isManga) R.string.action_mark_as_unread else R.string.action_mark_as_unseen + val unviewed = if (isManga) MR.strings.action_mark_as_unread else MR.strings.action_mark_as_unseen Button( title = stringResource(unviewed), icon = Icons.Outlined.RemoveDone, @@ -162,9 +162,9 @@ fun EntryBottomActionMenu( } if (onMarkPreviousAsViewedClicked != null) { val previousUnviewed = if (isManga) { - R.string.action_mark_previous_as_read + MR.strings.action_mark_previous_as_read } else { - R.string.action_mark_previous_as_seen + MR.strings.action_mark_previous_as_seen } Button( title = stringResource(previousUnviewed), @@ -176,7 +176,7 @@ fun EntryBottomActionMenu( } if (onDownloadClicked != null) { Button( - title = stringResource(R.string.action_download), + title = stringResource(MR.strings.action_download), icon = Icons.Outlined.Download, toConfirm = confirm[5], onLongClick = { onLongClickItem(5) }, @@ -185,7 +185,7 @@ fun EntryBottomActionMenu( } if (onDeleteClicked != null) { Button( - title = stringResource(R.string.action_delete), + title = stringResource(MR.strings.action_delete), icon = Icons.Outlined.Delete, toConfirm = confirm[6], onLongClick = { onLongClickItem(6) }, @@ -194,7 +194,7 @@ fun EntryBottomActionMenu( } if (!isManga && onExternalClicked != null && !playerPreferences.alwaysUseExternalPlayer().get()) { Button( - title = stringResource(R.string.action_play_externally), + title = stringResource(MR.strings.action_play_externally), icon = Icons.Outlined.OpenInNew, toConfirm = confirm[7], onLongClick = { onLongClickItem(7) }, @@ -203,7 +203,7 @@ fun EntryBottomActionMenu( } if (!isManga && onInternalClicked != null && playerPreferences.alwaysUseExternalPlayer().get()) { Button( - title = stringResource(R.string.action_play_internally), + title = stringResource(MR.strings.action_play_internally), icon = Icons.Outlined.Input, toConfirm = confirm[8], onLongClick = { onLongClickItem(8) }, @@ -304,13 +304,13 @@ fun LibraryBottomActionMenu( .padding(horizontal = 8.dp, vertical = 12.dp), ) { Button( - title = stringResource(R.string.action_move_category), + title = stringResource(MR.strings.action_move_category), icon = Icons.AutoMirrored.Outlined.Label, toConfirm = confirm[0], onLongClick = { onLongClickItem(0) }, onClick = onChangeCategoryClicked, ) - val viewed = if (isManga) R.string.action_mark_as_read else R.string.action_mark_as_seen + val viewed = if (isManga) MR.strings.action_mark_as_read else MR.strings.action_mark_as_seen Button( title = stringResource(viewed), icon = Icons.Outlined.DoneAll, @@ -318,7 +318,7 @@ fun LibraryBottomActionMenu( onLongClick = { onLongClickItem(1) }, onClick = onMarkAsViewedClicked, ) - val unviewed = if (isManga) R.string.action_mark_as_unread else R.string.action_mark_as_unseen + val unviewed = if (isManga) MR.strings.action_mark_as_unread else MR.strings.action_mark_as_unseen Button( title = stringResource(unviewed), icon = Icons.Outlined.RemoveDone, @@ -329,7 +329,7 @@ fun LibraryBottomActionMenu( if (onDownloadClicked != null) { var downloadExpanded by remember { mutableStateOf(false) } Button( - title = stringResource(R.string.action_download), + title = stringResource(MR.strings.action_download), icon = Icons.Outlined.Download, toConfirm = confirm[3], onLongClick = { onLongClickItem(3) }, @@ -345,7 +345,7 @@ fun LibraryBottomActionMenu( } } Button( - title = stringResource(R.string.action_delete), + title = stringResource(MR.strings.action_delete), icon = Icons.Outlined.Delete, toConfirm = confirm[4], onLongClick = { onLongClickItem(4) }, diff --git a/app/src/main/java/eu/kanade/presentation/entries/EntryToolbar.kt b/app/src/main/java/eu/kanade/presentation/entries/EntryToolbar.kt index 10a4b43559..a8072820ea 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/EntryToolbar.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/EntryToolbar.kt @@ -21,15 +21,15 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.EntryDownloadDropdownMenu import eu.kanade.presentation.components.UpIcon -import eu.kanade.tachiyomi.R import kotlinx.collections.immutable.persistentListOf +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.theme.active @Composable @@ -78,12 +78,12 @@ fun EntryToolbar( AppBarActions( persistentListOf( AppBar.Action( - title = stringResource(R.string.action_select_all), + title = stringResource(MR.strings.action_select_all), icon = Icons.Outlined.SelectAll, onClick = onSelectAll, ), AppBar.Action( - title = stringResource(R.string.action_select_inverse), + title = stringResource(MR.strings.action_select_inverse), icon = Icons.Outlined.FlipToBack, onClick = onInvertSelection, ), @@ -108,7 +108,7 @@ fun EntryToolbar( if (onClickDownload != null) { add( AppBar.Action( - title = stringResource(R.string.manga_download), + title = stringResource(MR.strings.manga_download), icon = Icons.Outlined.Download, onClick = { downloadExpanded = !downloadExpanded }, ), @@ -116,7 +116,7 @@ fun EntryToolbar( } add( AppBar.Action( - title = stringResource(R.string.action_filter), + title = stringResource(MR.strings.action_filter), icon = Icons.Outlined.FilterList, iconTint = filterTint, onClick = onClickFilter, @@ -125,21 +125,21 @@ fun EntryToolbar( if (changeAnimeSkipIntro != null) { add( AppBar.OverflowAction( - title = stringResource(R.string.action_change_intro_length), + title = stringResource(MR.strings.action_change_intro_length), onClick = changeAnimeSkipIntro, ), ) } add( AppBar.OverflowAction( - title = stringResource(R.string.action_webview_refresh), + title = stringResource(MR.strings.action_webview_refresh), onClick = onClickRefresh, ), ) if (onClickEditCategory != null) { add( AppBar.OverflowAction( - title = stringResource(R.string.action_edit_categories), + title = stringResource(MR.strings.action_edit_categories), onClick = onClickEditCategory, ), ) @@ -147,7 +147,7 @@ fun EntryToolbar( if (onClickMigrate != null) { add( AppBar.OverflowAction( - title = stringResource(R.string.action_migrate), + title = stringResource(MR.strings.action_migrate), onClick = onClickMigrate, ), ) @@ -155,7 +155,7 @@ fun EntryToolbar( if (onClickShare != null) { add( AppBar.OverflowAction( - title = stringResource(R.string.action_share), + title = stringResource(MR.strings.action_share), onClick = onClickShare, ), ) diff --git a/app/src/main/java/eu/kanade/presentation/entries/ItemHeader.kt b/app/src/main/java/eu/kanade/presentation/entries/ItemHeader.kt index ebbaecec36..39535d6c24 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/ItemHeader.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/ItemHeader.kt @@ -9,12 +9,12 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.pluralStringResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.SecondaryItemAlpha +import tachiyomi.presentation.core.i18n.pluralStringResource +import tachiyomi.presentation.core.i18n.stringResource @Composable fun ItemHeader( @@ -36,11 +36,11 @@ fun ItemHeader( ) { Text( text = if (itemCount == null) { - val count = if (isManga) R.string.chapters else R.string.episodes + val count = if (isManga) MR.strings.chapters else MR.strings.episodes stringResource(count) } else { - val pluralCount = if (isManga) R.plurals.manga_num_chapters else R.plurals.anime_num_episodes - pluralStringResource(id = pluralCount, count = itemCount, itemCount) + val pluralCount = if (isManga) MR.plurals.manga_num_chapters else MR.plurals.anime_num_episodes + pluralStringResource(pluralCount, count = itemCount, itemCount) }, style = MaterialTheme.typography.titleMedium, color = MaterialTheme.colorScheme.onBackground, @@ -57,7 +57,7 @@ private fun MissingItemsWarning(count: Int) { } Text( - text = pluralStringResource(id = R.plurals.missing_items, count = count, count), + text = pluralStringResource(MR.plurals.missing_items, count = count, count), maxLines = 1, overflow = TextOverflow.Ellipsis, style = MaterialTheme.typography.bodySmall, diff --git a/app/src/main/java/eu/kanade/presentation/entries/ItemsDialogs.kt b/app/src/main/java/eu/kanade/presentation/entries/ItemsDialogs.kt index 6cbce5cb29..21898f4be5 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/ItemsDialogs.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/ItemsDialogs.kt @@ -12,12 +12,12 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp -import eu.kanade.tachiyomi.R import kotlinx.collections.immutable.toImmutableList +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.WheelTextPicker +import tachiyomi.presentation.core.i18n.stringResource @Composable fun DeleteItemsDialog( @@ -25,12 +25,12 @@ fun DeleteItemsDialog( onConfirm: () -> Unit, isManga: Boolean, ) { - val subtitle = if (isManga) R.string.confirm_delete_chapters else R.string.confirm_delete_episodes + val subtitle = if (isManga) MR.strings.confirm_delete_chapters else MR.strings.confirm_delete_episodes AlertDialog( onDismissRequest = onDismissRequest, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, confirmButton = { @@ -40,11 +40,11 @@ fun DeleteItemsDialog( onConfirm() }, ) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, title = { - Text(text = stringResource(R.string.are_you_sure)) + Text(text = stringResource(MR.strings.are_you_sure)) }, text = { Text(text = stringResource(subtitle)) @@ -62,7 +62,7 @@ fun SetIntervalDialog( AlertDialog( onDismissRequest = onDismissRequest, - title = { Text(text = stringResource(R.string.manga_modify_calculated_interval_title)) }, + title = { Text(text = stringResource(MR.strings.manga_modify_calculated_interval_title)) }, text = { BoxWithConstraints( modifier = Modifier.fillMaxWidth(), @@ -72,7 +72,7 @@ fun SetIntervalDialog( val items = (0..28) .map { if (it == 0) { - stringResource(R.string.label_default) + stringResource(MR.strings.label_default) } else { it.toString() } @@ -88,7 +88,7 @@ fun SetIntervalDialog( }, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, confirmButton = { @@ -96,7 +96,7 @@ fun SetIntervalDialog( onValueChanged(selectedInterval) onDismissRequest() }) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, ) diff --git a/app/src/main/java/eu/kanade/presentation/entries/anime/AnimeScreen.kt b/app/src/main/java/eu/kanade/presentation/entries/anime/AnimeScreen.kt index b2e9d4cc2c..467a7ca272 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/anime/AnimeScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/anime/AnimeScreen.kt @@ -47,7 +47,6 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.platform.LocalLayoutDirection -import androidx.compose.ui.res.stringResource import androidx.compose.ui.util.fastAll import androidx.compose.ui.util.fastAny import androidx.compose.ui.util.fastMap @@ -67,7 +66,6 @@ import eu.kanade.presentation.entries.anime.components.ExpandableAnimeDescriptio import eu.kanade.presentation.entries.anime.components.MissingEpisodeCountListItem import eu.kanade.presentation.entries.anime.components.NextEpisodeAiringListItem import eu.kanade.presentation.util.formatEpisodeNumber -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource import eu.kanade.tachiyomi.animesource.model.SAnime import eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload @@ -83,17 +81,18 @@ import tachiyomi.domain.items.episode.model.Episode import tachiyomi.domain.items.service.missingItemsCount import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.source.anime.model.StubAnimeSource +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.TwoPanelBox import tachiyomi.presentation.core.components.VerticalFastScroller import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton import tachiyomi.presentation.core.components.material.PullRefresh import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.isScrolledToEnd import tachiyomi.presentation.core.util.isScrollingUp import java.text.DateFormat import java.util.Date import java.util.concurrent.TimeUnit -import kotlin.time.Duration.Companion.milliseconds @Composable fun AnimeScreen( @@ -389,7 +388,11 @@ private fun AnimeScreenSmallImpl( val isWatching = remember(state.episodes) { state.episodes.fastAny { it.episode.seen } } - Text(text = stringResource(if (isWatching) R.string.action_resume else R.string.action_start)) + Text( + text = stringResource( + if (isWatching) MR.strings.action_resume else MR.strings.action_start, + ), + ) }, icon = { Icon( @@ -510,7 +513,7 @@ private fun AnimeScreenSmallImpl( ) { NextEpisodeAiringListItem( title = stringResource( - R.string.display_mode_episode, + MR.strings.display_mode_episode, formatEpisodeNumber(state.airingEpisodeNumber), ), date = formatTime(state.airingTime, useDayFormat = true), @@ -683,7 +686,7 @@ fun AnimeScreenLargeImpl( } Text( text = stringResource( - if (isWatching) R.string.action_resume else R.string.action_start, + if (isWatching) MR.strings.action_resume else MR.strings.action_start, ), ) }, @@ -796,7 +799,7 @@ fun AnimeScreenLargeImpl( ) { NextEpisodeAiringListItem( title = stringResource( - R.string.display_mode_episode, + MR.strings.display_mode_episode, formatEpisodeNumber(state.airingEpisodeNumber), ), date = formatTime(state.airingTime, useDayFormat = true), @@ -911,7 +914,7 @@ private fun LazyListScope.sharedEpisodeItems( AnimeEpisodeListItem( title = if (anime.displayMode == Anime.EPISODE_DISPLAY_NUMBER) { stringResource( - R.string.display_mode_episode, + MR.strings.display_mode_episode, formatEpisodeNumber(episodeItem.episode.episodeNumber), ) } else { @@ -930,7 +933,7 @@ private fun LazyListScope.sharedEpisodeItems( .takeIf { !episodeItem.episode.seen && it > 0L } ?.let { stringResource( - R.string.episode_progress, + MR.strings.episode_progress, formatTime(it), formatTime(episodeItem.episode.totalSeconds), ) diff --git a/app/src/main/java/eu/kanade/presentation/entries/anime/DuplicateAnimeDialog.kt b/app/src/main/java/eu/kanade/presentation/entries/anime/DuplicateAnimeDialog.kt index 1c8a8295e4..1e9e18a08e 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/anime/DuplicateAnimeDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/anime/DuplicateAnimeDialog.kt @@ -8,9 +8,9 @@ import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource @Composable fun DuplicateAnimeDialog( @@ -21,10 +21,10 @@ fun DuplicateAnimeDialog( AlertDialog( onDismissRequest = onDismissRequest, title = { - Text(text = stringResource(R.string.are_you_sure)) + Text(text = stringResource(MR.strings.are_you_sure)) }, text = { - Text(text = stringResource(R.string.confirm_add_duplicate_manga)) + Text(text = stringResource(MR.strings.confirm_add_duplicate_manga)) }, confirmButton = { FlowRow( @@ -36,13 +36,13 @@ fun DuplicateAnimeDialog( onOpenAnime() }, ) { - Text(text = stringResource(R.string.action_show_anime)) + Text(text = stringResource(MR.strings.action_show_anime)) } Spacer(modifier = Modifier.weight(1f)) TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } TextButton( onClick = { @@ -50,7 +50,7 @@ fun DuplicateAnimeDialog( onConfirm() }, ) { - Text(text = stringResource(R.string.action_add)) + Text(text = stringResource(MR.strings.action_add)) } } }, diff --git a/app/src/main/java/eu/kanade/presentation/entries/anime/EpisodeOptionsDialogScreen.kt b/app/src/main/java/eu/kanade/presentation/entries/anime/EpisodeOptionsDialogScreen.kt index 5561d51ead..d1226ee6f7 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/anime/EpisodeOptionsDialogScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/anime/EpisodeOptionsDialogScreen.kt @@ -40,7 +40,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.Role import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.font.FontStyle @@ -51,13 +50,11 @@ import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.model.screenModelScope import cafe.adriel.voyager.core.screen.Screen import eu.kanade.presentation.components.TabbedDialogPaddings -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.animesource.model.Video import eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.player.loader.EpisodeLoader import eu.kanade.tachiyomi.util.system.toast -import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import logcat.LogPriority @@ -69,7 +66,9 @@ import tachiyomi.domain.entries.anime.model.Anime import tachiyomi.domain.items.episode.interactor.GetEpisode import tachiyomi.domain.items.episode.model.Episode import tachiyomi.domain.source.anime.service.AnimeSourceManager +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.LoadingScreen import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -173,7 +172,7 @@ fun EpisodeOptionsDialog( ) Text( - text = stringResource(R.string.choose_video_quality), + text = stringResource(MR.strings.choose_video_quality), modifier = Modifier.padding(horizontal = TabbedDialogPaddings.Horizontal), fontStyle = FontStyle.Italic, style = MaterialTheme.typography.bodyMedium, @@ -210,7 +209,7 @@ private fun VideoList( val clipboardManager = LocalClipboardManager.current val context = LocalContext.current val scope = rememberCoroutineScope() - val copiedString = stringResource(R.string.copied_video_link_to_clipboard) + val copiedString = stringResource(MR.strings.copied_video_link_to_clipboard) var showAllQualities by remember { mutableStateOf(false) } var selectedVideo by remember { mutableStateOf(videoList.first()) } @@ -295,13 +294,13 @@ private fun QualityOptions( Column { ClickableRow( - text = stringResource(R.string.copy), + text = stringResource(MR.strings.copy), icon = Icons.Outlined.ContentCopy, onClick = { onCopyClicked() }, ) ClickableRow( - text = stringResource(R.string.action_start_download_internally), + text = stringResource(MR.strings.action_start_download_internally), icon = Icons.Outlined.Download, onClick = { onDownloadClicked() @@ -310,7 +309,7 @@ private fun QualityOptions( ) ClickableRow( - text = stringResource(R.string.action_start_download_externally), + text = stringResource(MR.strings.action_start_download_externally), icon = Icons.Outlined.SystemUpdateAlt, onClick = { onExtDownloadClicked() @@ -319,7 +318,7 @@ private fun QualityOptions( ) ClickableRow( - text = stringResource(R.string.action_play_externally), + text = stringResource(MR.strings.action_play_externally), icon = Icons.Outlined.OpenInNew, onClick = { onExtPlayerClicked() diff --git a/app/src/main/java/eu/kanade/presentation/entries/anime/EpisodeSettingsDialog.kt b/app/src/main/java/eu/kanade/presentation/entries/anime/EpisodeSettingsDialog.kt index b5193955cc..ccef12f874 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/anime/EpisodeSettingsDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/anime/EpisodeSettingsDialog.kt @@ -15,20 +15,20 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import eu.kanade.domain.entries.anime.model.downloadedFilter import eu.kanade.domain.entries.anime.model.forceDownloaded import eu.kanade.presentation.components.TabbedDialog import eu.kanade.presentation.components.TabbedDialogPaddings -import eu.kanade.tachiyomi.R import kotlinx.collections.immutable.persistentListOf import tachiyomi.core.preference.TriState import tachiyomi.domain.entries.anime.model.Anime +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox import tachiyomi.presentation.core.components.RadioItem import tachiyomi.presentation.core.components.SortItem import tachiyomi.presentation.core.components.TriStateItem +import tachiyomi.presentation.core.i18n.stringResource @Composable fun EpisodeSettingsDialog( @@ -52,13 +52,13 @@ fun EpisodeSettingsDialog( TabbedDialog( onDismissRequest = onDismissRequest, tabTitles = persistentListOf( - stringResource(R.string.action_filter), - stringResource(R.string.action_sort), - stringResource(R.string.action_display), + stringResource(MR.strings.action_filter), + stringResource(MR.strings.action_sort), + stringResource(MR.strings.action_display), ), tabOverflowMenuContent = { closeMenu -> DropdownMenuItem( - text = { Text(stringResource(R.string.set_chapter_settings_as_default)) }, + text = { Text(stringResource(MR.strings.set_chapter_settings_as_default)) }, onClick = { showSetAsDefaultDialog = true closeMenu() @@ -111,17 +111,17 @@ private fun FilterPage( onBookmarkedFilterChanged: (TriState) -> Unit, ) { TriStateItem( - label = stringResource(R.string.label_downloaded), + label = stringResource(MR.strings.label_downloaded), state = downloadFilter, onClick = onDownloadFilterChanged, ) TriStateItem( - label = stringResource(R.string.action_filter_unseen), + label = stringResource(MR.strings.action_filter_unseen), state = unseenFilter, onClick = onUnseenFilterChanged, ) TriStateItem( - label = stringResource(R.string.action_filter_bookmarked), + label = stringResource(MR.strings.action_filter_bookmarked), state = bookmarkedFilter, onClick = onBookmarkedFilterChanged, ) @@ -134,22 +134,22 @@ private fun SortPage( onItemSelected: (Long) -> Unit, ) { SortItem( - label = stringResource(R.string.sort_by_source), + label = stringResource(MR.strings.sort_by_source), sortDescending = sortDescending.takeIf { sortingMode == Anime.EPISODE_SORTING_SOURCE }, onClick = { onItemSelected(Anime.EPISODE_SORTING_SOURCE) }, ) SortItem( - label = stringResource(R.string.sort_by_number), + label = stringResource(MR.strings.sort_by_number), sortDescending = sortDescending.takeIf { sortingMode == Anime.EPISODE_SORTING_NUMBER }, onClick = { onItemSelected(Anime.EPISODE_SORTING_NUMBER) }, ) SortItem( - label = stringResource(R.string.sort_by_upload_date), + label = stringResource(MR.strings.sort_by_upload_date), sortDescending = sortDescending.takeIf { sortingMode == Anime.EPISODE_SORTING_UPLOAD_DATE }, onClick = { onItemSelected(Anime.EPISODE_SORTING_UPLOAD_DATE) }, ) SortItem( - label = stringResource(R.string.action_sort_alpha), + label = stringResource(MR.strings.action_sort_alpha), sortDescending = sortDescending.takeIf { sortingMode == Anime.EPISODE_SORTING_ALPHABET }, onClick = { onItemSelected(Anime.EPISODE_SORTING_ALPHABET) }, ) @@ -161,12 +161,12 @@ private fun DisplayPage( onItemSelected: (Long) -> Unit, ) { RadioItem( - label = stringResource(R.string.show_title), + label = stringResource(MR.strings.show_title), selected = displayMode == Anime.EPISODE_DISPLAY_NAME, onClick = { onItemSelected(Anime.EPISODE_DISPLAY_NAME) }, ) RadioItem( - label = stringResource(R.string.show_episode_number), + label = stringResource(MR.strings.show_episode_number), selected = displayMode == Anime.EPISODE_DISPLAY_NUMBER, onClick = { onItemSelected(Anime.EPISODE_DISPLAY_NUMBER) }, ) @@ -180,15 +180,15 @@ private fun SetAsDefaultDialog( var optionalChecked by rememberSaveable { mutableStateOf(false) } AlertDialog( onDismissRequest = onDismissRequest, - title = { Text(text = stringResource(R.string.episode_settings)) }, + title = { Text(text = stringResource(MR.strings.episode_settings)) }, text = { Column( verticalArrangement = Arrangement.spacedBy(12.dp), ) { - Text(text = stringResource(R.string.confirm_set_chapter_settings)) + Text(text = stringResource(MR.strings.confirm_set_chapter_settings)) LabeledCheckbox( - label = stringResource(R.string.also_set_episode_settings_for_library), + label = stringResource(MR.strings.also_set_episode_settings_for_library), checked = optionalChecked, onCheckedChange = { optionalChecked = it }, ) @@ -196,7 +196,7 @@ private fun SetAsDefaultDialog( }, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, confirmButton = { @@ -206,7 +206,7 @@ private fun SetAsDefaultDialog( onDismissRequest() }, ) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, ) diff --git a/app/src/main/java/eu/kanade/presentation/entries/anime/components/AnimeCoverDialog.kt b/app/src/main/java/eu/kanade/presentation/entries/anime/components/AnimeCoverDialog.kt index 1e71e72fe5..37280bcac4 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/anime/components/AnimeCoverDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/anime/components/AnimeCoverDialog.kt @@ -32,7 +32,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView @@ -47,11 +46,12 @@ import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.DropdownMenu import eu.kanade.presentation.entries.EditCoverAction -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.reader.viewer.ReaderPageImageView import kotlinx.collections.immutable.persistentListOf import tachiyomi.domain.entries.anime.model.Anime +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.clickableNoIndication @Composable @@ -85,7 +85,7 @@ fun AnimeCoverDialog( IconButton(onClick = onDismissRequest) { Icon( imageVector = Icons.Outlined.Close, - contentDescription = stringResource(R.string.action_close), + contentDescription = stringResource(MR.strings.action_close), ) } } @@ -94,12 +94,12 @@ fun AnimeCoverDialog( AppBarActions( actions = persistentListOf( AppBar.Action( - title = stringResource(R.string.action_share), + title = stringResource(MR.strings.action_share), icon = Icons.Outlined.Share, onClick = onShareClick, ), AppBar.Action( - title = stringResource(R.string.action_save), + title = stringResource(MR.strings.action_save), icon = Icons.Outlined.Save, onClick = onSaveClick, ), @@ -120,7 +120,7 @@ fun AnimeCoverDialog( Icon( imageVector = Icons.Outlined.Edit, contentDescription = stringResource( - R.string.action_edit_cover, + MR.strings.action_edit_cover, ), ) } @@ -130,14 +130,14 @@ fun AnimeCoverDialog( offset = DpOffset(8.dp, 0.dp), ) { DropdownMenuItem( - text = { Text(text = stringResource(R.string.action_edit)) }, + text = { Text(text = stringResource(MR.strings.action_edit)) }, onClick = { onEditClick(EditCoverAction.EDIT) expanded = false }, ) DropdownMenuItem( - text = { Text(text = stringResource(R.string.action_delete)) }, + text = { Text(text = stringResource(MR.strings.action_delete)) }, onClick = { onEditClick(EditCoverAction.DELETE) expanded = false diff --git a/app/src/main/java/eu/kanade/presentation/entries/anime/components/AnimeEpisodeListItem.kt b/app/src/main/java/eu/kanade/presentation/entries/anime/components/AnimeEpisodeListItem.kt index 1a8818e3e5..15f57bd225 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/anime/components/AnimeEpisodeListItem.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/anime/components/AnimeEpisodeListItem.kt @@ -1,6 +1,5 @@ package eu.kanade.presentation.entries.anime.components -import androidx.compose.foundation.background import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -44,18 +43,18 @@ import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.platform.LocalViewConfiguration import androidx.compose.ui.platform.ViewConfiguration -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import eu.kanade.presentation.entries.DotSeparatorText -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload import me.saket.swipe.SwipeableActionsBox import me.saket.swipe.rememberSwipeableActionsState import tachiyomi.domain.library.service.LibraryPreferences +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.ReadItemAlpha import tachiyomi.presentation.core.components.material.SecondaryItemAlpha +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.selectedBackground import kotlin.math.absoluteValue @@ -146,7 +145,7 @@ fun AnimeEpisodeListItem( if (!seen) { Icon( imageVector = Icons.Filled.Circle, - contentDescription = stringResource(R.string.unread), + contentDescription = stringResource(MR.strings.unread), modifier = Modifier .height(8.dp) .padding(end = 4.dp), @@ -157,7 +156,7 @@ fun AnimeEpisodeListItem( Icon( imageVector = Icons.Filled.Bookmark, contentDescription = stringResource( - R.string.action_filter_bookmarked, + MR.strings.action_filter_bookmarked, ), modifier = Modifier .sizeIn( diff --git a/app/src/main/java/eu/kanade/presentation/entries/anime/components/AnimeInfoHeader.kt b/app/src/main/java/eu/kanade/presentation/entries/anime/components/AnimeInfoHeader.kt index a6a7aa3ed9..470423da0b 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/anime/components/AnimeInfoHeader.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/anime/components/AnimeInfoHeader.kt @@ -39,7 +39,6 @@ import androidx.compose.material.icons.outlined.Pause import androidx.compose.material.icons.outlined.Public import androidx.compose.material.icons.outlined.Schedule import androidx.compose.material.icons.outlined.Sync -import androidx.compose.material.icons.outlined.Warning import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon import androidx.compose.material3.LocalContentColor @@ -67,8 +66,6 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.Layout import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.pluralStringResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Constraints @@ -83,8 +80,11 @@ import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.animesource.model.SAnime import eu.kanade.tachiyomi.util.system.copyToClipboard import tachiyomi.domain.entries.anime.model.Anime +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.TextButton import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.pluralStringResource +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.clickableNoIndication import tachiyomi.presentation.core.util.secondaryItemAlpha import kotlin.math.absoluteValue @@ -181,9 +181,9 @@ fun AnimeActionRow( Row(modifier = modifier.padding(start = 16.dp, top = 8.dp, end = 16.dp)) { AnimeActionButton( title = if (favorite) { - stringResource(R.string.in_library) + stringResource(MR.strings.in_library) } else { - stringResource(R.string.add_to_library) + stringResource(MR.strings.add_to_library) }, icon = if (favorite) Icons.Filled.Favorite else Icons.Outlined.FavoriteBorder, color = if (favorite) MaterialTheme.colorScheme.primary else defaultActionButtonColor, @@ -193,7 +193,7 @@ fun AnimeActionRow( if (onEditIntervalClicked != null && fetchInterval != null) { AnimeActionButton( title = pluralStringResource( - id = R.plurals.day, + MR.plurals.day, count = fetchInterval.absoluteValue, fetchInterval.absoluteValue, ), @@ -205,10 +205,10 @@ fun AnimeActionRow( if (onTrackingClicked != null) { AnimeActionButton( title = if (trackingCount == 0) { - stringResource(R.string.manga_tracking_tab) + stringResource(MR.strings.manga_tracking_tab) } else { pluralStringResource( - id = R.plurals.num_trackers, + MR.plurals.num_trackers, count = trackingCount, trackingCount, ) @@ -220,7 +220,7 @@ fun AnimeActionRow( } if (onWebViewClicked != null) { AnimeActionButton( - title = stringResource(R.string.action_web_view), + title = stringResource(MR.strings.action_web_view), icon = Icons.Outlined.Public, color = defaultActionButtonColor, onClick = onWebViewClicked, @@ -245,7 +245,7 @@ fun ExpandableAnimeDescription( } val desc = description.takeIf { !it.isNullOrBlank() } ?: stringResource( - R.string.description_placeholder, + MR.strings.description_placeholder, ) val trimmedDescription = remember(desc) { desc @@ -276,14 +276,14 @@ fun ExpandableAnimeDescription( onDismissRequest = { showMenu = false }, ) { DropdownMenuItem( - text = { Text(text = stringResource(R.string.action_search)) }, + text = { Text(text = stringResource(MR.strings.action_search)) }, onClick = { onTagSearch(tagSelected) showMenu = false }, ) DropdownMenuItem( - text = { Text(text = stringResource(R.string.action_copy_to_clipboard)) }, + text = { Text(text = stringResource(MR.strings.action_copy_to_clipboard)) }, onClick = { onCopyTagToClipboard(tagSelected) showMenu = false @@ -350,7 +350,7 @@ private fun AnimeAndSourceTitlesLarge( ItemCover.Book( modifier = Modifier.fillMaxWidth(0.65f), data = coverDataProvider(), - contentDescription = stringResource(R.string.manga_cover), + contentDescription = stringResource(MR.strings.manga_cover), onClick = onCoverClick, ) Spacer(modifier = Modifier.height(16.dp)) @@ -392,7 +392,7 @@ private fun AnimeAndSourceTitlesSmall( .sizeIn(maxWidth = 100.dp) .align(Alignment.Top), data = coverDataProvider(), - contentDescription = stringResource(R.string.manga_cover), + contentDescription = stringResource(MR.strings.manga_cover), onClick = onCoverClick, ) Column( @@ -424,7 +424,7 @@ private fun AnimeContentInfo( ) { val context = LocalContext.current Text( - text = title.ifBlank { stringResource(R.string.unknown_title) }, + text = title.ifBlank { stringResource(MR.strings.unknown_title) }, style = MaterialTheme.typography.titleLarge, modifier = Modifier.clickableNoIndication( onLongClick = { @@ -454,7 +454,7 @@ private fun AnimeContentInfo( ) Text( text = author?.takeIf { it.isNotBlank() } - ?: stringResource(R.string.unknown_author), + ?: stringResource(MR.strings.unknown_author), style = MaterialTheme.typography.titleSmall, modifier = Modifier .clickableNoIndication( @@ -520,13 +520,13 @@ private fun AnimeContentInfo( ProvideTextStyle(MaterialTheme.typography.bodyMedium) { Text( text = when (status) { - SAnime.ONGOING.toLong() -> stringResource(R.string.ongoing) - SAnime.COMPLETED.toLong() -> stringResource(R.string.completed) - SAnime.LICENSED.toLong() -> stringResource(R.string.licensed) - SAnime.PUBLISHING_FINISHED.toLong() -> stringResource(R.string.publishing_finished) - SAnime.CANCELLED.toLong() -> stringResource(R.string.cancelled) - SAnime.ON_HIATUS.toLong() -> stringResource(R.string.on_hiatus) - else -> stringResource(R.string.unknown) + SAnime.ONGOING.toLong() -> stringResource(MR.strings.ongoing) + SAnime.COMPLETED.toLong() -> stringResource(MR.strings.completed) + SAnime.LICENSED.toLong() -> stringResource(MR.strings.licensed) + SAnime.PUBLISHING_FINISHED.toLong() -> stringResource(MR.strings.publishing_finished) + SAnime.CANCELLED.toLong() -> stringResource(MR.strings.cancelled) + SAnime.ON_HIATUS.toLong() -> stringResource(MR.strings.on_hiatus) + else -> stringResource(MR.strings.unknown) }, overflow = TextOverflow.Ellipsis, maxLines = 1, @@ -601,7 +601,7 @@ private fun AnimeSummary( Icon( painter = rememberAnimatedVectorPainter(image, !expanded), contentDescription = stringResource( - if (expanded) R.string.manga_info_collapse else R.string.manga_info_expand, + if (expanded) MR.strings.manga_info_collapse else MR.strings.manga_info_expand, ), tint = MaterialTheme.colorScheme.onBackground, modifier = Modifier.background(Brush.radialGradient(colors = colors.asReversed())), diff --git a/app/src/main/java/eu/kanade/presentation/entries/anime/components/EpisodeDownloadIndicator.kt b/app/src/main/java/eu/kanade/presentation/entries/anime/components/EpisodeDownloadIndicator.kt index 15a66cea42..5188612f5a 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/anime/components/EpisodeDownloadIndicator.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/anime/components/EpisodeDownloadIndicator.kt @@ -22,7 +22,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource import eu.kanade.presentation.components.ArrowModifier import eu.kanade.presentation.components.DropdownMenu import eu.kanade.presentation.components.IndicatorModifier @@ -31,7 +30,9 @@ import eu.kanade.presentation.components.IndicatorStrokeWidth import eu.kanade.presentation.components.commonClickable import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.IconButtonTokens +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.secondaryItemAlpha enum class EpisodeDownloadAction { @@ -95,7 +96,7 @@ private fun NotDownloadedIndicator( ) { Icon( painter = painterResource(R.drawable.ic_download_item_24dp), - contentDescription = stringResource(R.string.manga_download), + contentDescription = stringResource(MR.strings.manga_download), modifier = Modifier.size(IndicatorSize), tint = MaterialTheme.colorScheme.onSurfaceVariant, ) @@ -153,14 +154,14 @@ private fun DownloadingIndicator( } DropdownMenu(expanded = isMenuExpanded, onDismissRequest = { isMenuExpanded = false }) { DropdownMenuItem( - text = { Text(text = stringResource(R.string.action_start_downloading_now)) }, + text = { Text(text = stringResource(MR.strings.action_start_downloading_now)) }, onClick = { onClick(EpisodeDownloadAction.START_NOW) isMenuExpanded = false }, ) DropdownMenuItem( - text = { Text(text = stringResource(R.string.action_cancel)) }, + text = { Text(text = stringResource(MR.strings.action_cancel)) }, onClick = { onClick(EpisodeDownloadAction.CANCEL) isMenuExpanded = false @@ -201,7 +202,7 @@ private fun DownloadedIndicator( ) DropdownMenu(expanded = isMenuExpanded, onDismissRequest = { isMenuExpanded = false }) { DropdownMenuItem( - text = { Text(text = stringResource(R.string.action_delete)) }, + text = { Text(text = stringResource(MR.strings.action_delete)) }, onClick = { onClick(EpisodeDownloadAction.DELETE) isMenuExpanded = false @@ -229,7 +230,7 @@ private fun ErrorIndicator( ) { Icon( imageVector = Icons.Outlined.ErrorOutline, - contentDescription = stringResource(R.string.download_error), + contentDescription = stringResource(MR.strings.download_error), modifier = Modifier.size(IndicatorSize), tint = MaterialTheme.colorScheme.error, ) diff --git a/app/src/main/java/eu/kanade/presentation/entries/anime/components/MissingEpisodeCountListItem.kt b/app/src/main/java/eu/kanade/presentation/entries/anime/components/MissingEpisodeCountListItem.kt index 12c3bf9097..a2f5e80b2f 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/anime/components/MissingEpisodeCountListItem.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/anime/components/MissingEpisodeCountListItem.kt @@ -10,11 +10,11 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.pluralStringResource import androidx.compose.ui.tooling.preview.PreviewLightDark import eu.kanade.presentation.theme.TachiyomiTheme -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.pluralStringResource import tachiyomi.presentation.core.util.secondaryItemAlpha @Composable @@ -34,7 +34,7 @@ fun MissingEpisodeCountListItem( ) { HorizontalDivider(modifier = Modifier.weight(1f)) Text( - text = pluralStringResource(id = R.plurals.missing_items, count = count, count), + text = pluralStringResource(MR.plurals.missing_items, count = count, count), style = MaterialTheme.typography.labelMedium, ) HorizontalDivider(modifier = Modifier.weight(1f)) diff --git a/app/src/main/java/eu/kanade/presentation/entries/manga/ChapterSettingsDialog.kt b/app/src/main/java/eu/kanade/presentation/entries/manga/ChapterSettingsDialog.kt index 3a866b29bc..7a91715da8 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/manga/ChapterSettingsDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/manga/ChapterSettingsDialog.kt @@ -24,20 +24,20 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import eu.kanade.domain.entries.manga.model.downloadedFilter import eu.kanade.domain.entries.manga.model.forceDownloaded import eu.kanade.presentation.components.TabbedDialog import eu.kanade.presentation.components.TabbedDialogPaddings -import eu.kanade.tachiyomi.R import kotlinx.collections.immutable.persistentListOf import tachiyomi.core.preference.TriState import tachiyomi.domain.entries.manga.model.Manga +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox import tachiyomi.presentation.core.components.RadioItem import tachiyomi.presentation.core.components.SortItem import tachiyomi.presentation.core.components.TriStateItem +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.theme.active @Composable @@ -65,20 +65,20 @@ fun ChapterSettingsDialog( TabbedDialog( onDismissRequest = onDismissRequest, tabTitles = persistentListOf( - stringResource(R.string.action_filter), - stringResource(R.string.action_sort), - stringResource(R.string.action_display), + stringResource(MR.strings.action_filter), + stringResource(MR.strings.action_sort), + stringResource(MR.strings.action_display), ), tabOverflowMenuContent = { closeMenu -> DropdownMenuItem( - text = { Text(stringResource(R.string.set_chapter_settings_as_default)) }, + text = { Text(stringResource(MR.strings.set_chapter_settings_as_default)) }, onClick = { showSetAsDefaultDialog = true closeMenu() }, ) DropdownMenuItem( - text = { Text(stringResource(R.string.action_reset)) }, + text = { Text(stringResource(MR.strings.action_reset)) }, onClick = { onResetToDefault() closeMenu() @@ -135,17 +135,17 @@ private fun FilterPage( onScanlatorFilterClicked: (() -> Unit), ) { TriStateItem( - label = stringResource(R.string.label_downloaded), + label = stringResource(MR.strings.label_downloaded), state = downloadFilter, onClick = onDownloadFilterChanged, ) TriStateItem( - label = stringResource(R.string.action_filter_unread), + label = stringResource(MR.strings.action_filter_unread), state = unreadFilter, onClick = onUnreadFilterChanged, ) TriStateItem( - label = stringResource(R.string.action_filter_bookmarked), + label = stringResource(MR.strings.action_filter_bookmarked), state = bookmarkedFilter, onClick = onBookmarkedFilterChanged, ) @@ -178,7 +178,7 @@ fun ScanlatorFilterItem( }, ) Text( - text = stringResource(R.string.scanlator), + text = stringResource(MR.strings.scanlator), style = MaterialTheme.typography.bodyMedium, ) } @@ -191,22 +191,22 @@ private fun SortPage( onItemSelected: (Long) -> Unit, ) { SortItem( - label = stringResource(R.string.sort_by_source), + label = stringResource(MR.strings.sort_by_source), sortDescending = sortDescending.takeIf { sortingMode == Manga.CHAPTER_SORTING_SOURCE }, onClick = { onItemSelected(Manga.CHAPTER_SORTING_SOURCE) }, ) SortItem( - label = stringResource(R.string.sort_by_number), + label = stringResource(MR.strings.sort_by_number), sortDescending = sortDescending.takeIf { sortingMode == Manga.CHAPTER_SORTING_NUMBER }, onClick = { onItemSelected(Manga.CHAPTER_SORTING_NUMBER) }, ) SortItem( - label = stringResource(R.string.sort_by_upload_date), + label = stringResource(MR.strings.sort_by_upload_date), sortDescending = sortDescending.takeIf { sortingMode == Manga.CHAPTER_SORTING_UPLOAD_DATE }, onClick = { onItemSelected(Manga.CHAPTER_SORTING_UPLOAD_DATE) }, ) SortItem( - label = stringResource(R.string.action_sort_alpha), + label = stringResource(MR.strings.action_sort_alpha), sortDescending = sortDescending.takeIf { sortingMode == Manga.CHAPTER_SORTING_ALPHABET }, onClick = { onItemSelected(Manga.CHAPTER_SORTING_ALPHABET) }, ) @@ -218,12 +218,12 @@ private fun DisplayPage( onItemSelected: (Long) -> Unit, ) { RadioItem( - label = stringResource(R.string.show_title), + label = stringResource(MR.strings.show_title), selected = displayMode == Manga.CHAPTER_DISPLAY_NAME, onClick = { onItemSelected(Manga.CHAPTER_DISPLAY_NAME) }, ) RadioItem( - label = stringResource(R.string.show_chapter_number), + label = stringResource(MR.strings.show_chapter_number), selected = displayMode == Manga.CHAPTER_DISPLAY_NUMBER, onClick = { onItemSelected(Manga.CHAPTER_DISPLAY_NUMBER) }, ) @@ -237,15 +237,15 @@ private fun SetAsDefaultDialog( var optionalChecked by rememberSaveable { mutableStateOf(false) } AlertDialog( onDismissRequest = onDismissRequest, - title = { Text(text = stringResource(R.string.chapter_settings)) }, + title = { Text(text = stringResource(MR.strings.chapter_settings)) }, text = { Column( verticalArrangement = Arrangement.spacedBy(12.dp), ) { - Text(text = stringResource(R.string.confirm_set_chapter_settings)) + Text(text = stringResource(MR.strings.confirm_set_chapter_settings)) LabeledCheckbox( - label = stringResource(R.string.also_set_chapter_settings_for_library), + label = stringResource(MR.strings.also_set_chapter_settings_for_library), checked = optionalChecked, onCheckedChange = { optionalChecked = it }, ) @@ -253,7 +253,7 @@ private fun SetAsDefaultDialog( }, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, confirmButton = { @@ -263,7 +263,7 @@ private fun SetAsDefaultDialog( onDismissRequest() }, ) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, ) diff --git a/app/src/main/java/eu/kanade/presentation/entries/manga/DuplicateMangaDialog.kt b/app/src/main/java/eu/kanade/presentation/entries/manga/DuplicateMangaDialog.kt index 1d15cb2855..1ffd9be23b 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/manga/DuplicateMangaDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/manga/DuplicateMangaDialog.kt @@ -8,9 +8,9 @@ import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource @Composable fun DuplicateMangaDialog( @@ -21,10 +21,10 @@ fun DuplicateMangaDialog( AlertDialog( onDismissRequest = onDismissRequest, title = { - Text(text = stringResource(R.string.are_you_sure)) + Text(text = stringResource(MR.strings.are_you_sure)) }, text = { - Text(text = stringResource(R.string.confirm_add_duplicate_manga)) + Text(text = stringResource(MR.strings.confirm_add_duplicate_manga)) }, confirmButton = { FlowRow( @@ -36,13 +36,13 @@ fun DuplicateMangaDialog( onOpenManga() }, ) { - Text(text = stringResource(R.string.action_show_manga)) + Text(text = stringResource(MR.strings.action_show_manga)) } Spacer(modifier = Modifier.weight(1f)) TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } TextButton( onClick = { @@ -50,7 +50,7 @@ fun DuplicateMangaDialog( onConfirm() }, ) { - Text(text = stringResource(R.string.action_add)) + Text(text = stringResource(MR.strings.action_add)) } } }, diff --git a/app/src/main/java/eu/kanade/presentation/entries/manga/MangaScreen.kt b/app/src/main/java/eu/kanade/presentation/entries/manga/MangaScreen.kt index f9512c69e8..d2ec552f4b 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/manga/MangaScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/manga/MangaScreen.kt @@ -44,7 +44,6 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.platform.LocalLayoutDirection -import androidx.compose.ui.res.stringResource import androidx.compose.ui.util.fastAll import androidx.compose.ui.util.fastAny import androidx.compose.ui.util.fastMap @@ -62,7 +61,6 @@ import eu.kanade.presentation.entries.manga.components.MangaChapterListItem import eu.kanade.presentation.entries.manga.components.MangaInfoBox import eu.kanade.presentation.entries.manga.components.MissingChapterCountListItem import eu.kanade.presentation.util.formatChapterNumber -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.manga.model.MangaDownload import eu.kanade.tachiyomi.source.ConfigurableSource import eu.kanade.tachiyomi.source.manga.getNameForMangaInfo @@ -76,11 +74,13 @@ import tachiyomi.domain.items.chapter.model.Chapter import tachiyomi.domain.items.service.missingItemsCount import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.source.manga.model.StubMangaSource +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.TwoPanelBox import tachiyomi.presentation.core.components.VerticalFastScroller import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton import tachiyomi.presentation.core.components.material.PullRefresh import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.isScrolledToEnd import tachiyomi.presentation.core.util.isScrollingUp import java.text.DateFormat @@ -365,7 +365,9 @@ private fun MangaScreenSmallImpl( val isReading = remember(state.chapters) { state.chapters.fastAny { it.chapter.read } } - Text(text = stringResource(if (isReading) R.string.action_resume else R.string.action_start)) + Text( + text = stringResource(if (isReading) MR.strings.action_resume else MR.strings.action_start), + ) }, icon = { Icon(imageVector = Icons.Filled.PlayArrow, contentDescription = null) }, onClick = onContinueReading, @@ -620,7 +622,7 @@ fun MangaScreenLargeImpl( } Text( text = stringResource( - if (isReading) R.string.action_resume else R.string.action_start, + if (isReading) MR.strings.action_resume else MR.strings.action_start, ), ) }, @@ -813,7 +815,7 @@ private fun LazyListScope.sharedChapterItems( MangaChapterListItem( title = if (manga.displayMode == Manga.CHAPTER_DISPLAY_NUMBER) { stringResource( - R.string.display_mode_chapter, + MR.strings.display_mode_chapter, formatChapterNumber(item.chapter.chapterNumber), ) } else { @@ -832,7 +834,7 @@ private fun LazyListScope.sharedChapterItems( .takeIf { !item.chapter.read && it > 0L } ?.let { stringResource( - R.string.chapter_progress, + MR.strings.chapter_progress, it + 1, ) }, diff --git a/app/src/main/java/eu/kanade/presentation/entries/manga/components/ChapterDownloadIndicator.kt b/app/src/main/java/eu/kanade/presentation/entries/manga/components/ChapterDownloadIndicator.kt index 60e4b4ed07..3c35affb1f 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/manga/components/ChapterDownloadIndicator.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/manga/components/ChapterDownloadIndicator.kt @@ -22,7 +22,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource import eu.kanade.presentation.components.ArrowModifier import eu.kanade.presentation.components.DropdownMenu import eu.kanade.presentation.components.IndicatorModifier @@ -31,7 +30,9 @@ import eu.kanade.presentation.components.IndicatorStrokeWidth import eu.kanade.presentation.components.commonClickable import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.manga.model.MangaDownload +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.IconButtonTokens +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.secondaryItemAlpha enum class ChapterDownloadAction { @@ -94,7 +95,7 @@ private fun NotDownloadedIndicator( ) { Icon( painter = painterResource(R.drawable.ic_download_item_24dp), - contentDescription = stringResource(R.string.manga_download), + contentDescription = stringResource(MR.strings.manga_download), modifier = Modifier.size(IndicatorSize), tint = MaterialTheme.colorScheme.onSurfaceVariant, ) @@ -152,14 +153,14 @@ private fun DownloadingIndicator( } DropdownMenu(expanded = isMenuExpanded, onDismissRequest = { isMenuExpanded = false }) { DropdownMenuItem( - text = { Text(text = stringResource(R.string.action_start_downloading_now)) }, + text = { Text(text = stringResource(MR.strings.action_start_downloading_now)) }, onClick = { onClick(ChapterDownloadAction.START_NOW) isMenuExpanded = false }, ) DropdownMenuItem( - text = { Text(text = stringResource(R.string.action_cancel)) }, + text = { Text(text = stringResource(MR.strings.action_cancel)) }, onClick = { onClick(ChapterDownloadAction.CANCEL) isMenuExpanded = false @@ -200,7 +201,7 @@ private fun DownloadedIndicator( ) DropdownMenu(expanded = isMenuExpanded, onDismissRequest = { isMenuExpanded = false }) { DropdownMenuItem( - text = { Text(text = stringResource(R.string.action_delete)) }, + text = { Text(text = stringResource(MR.strings.action_delete)) }, onClick = { onClick(ChapterDownloadAction.DELETE) isMenuExpanded = false @@ -228,7 +229,7 @@ private fun ErrorIndicator( ) { Icon( imageVector = Icons.Outlined.ErrorOutline, - contentDescription = stringResource(R.string.download_error), + contentDescription = stringResource(MR.strings.download_error), modifier = Modifier.size(IndicatorSize), tint = MaterialTheme.colorScheme.error, ) diff --git a/app/src/main/java/eu/kanade/presentation/entries/manga/components/MangaChapterListItem.kt b/app/src/main/java/eu/kanade/presentation/entries/manga/components/MangaChapterListItem.kt index 1dc5a6bcda..aa2b058f31 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/manga/components/MangaChapterListItem.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/manga/components/MangaChapterListItem.kt @@ -1,6 +1,5 @@ package eu.kanade.presentation.entries.manga.components -import androidx.compose.foundation.background import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -43,24 +42,23 @@ import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.platform.LocalViewConfiguration import androidx.compose.ui.platform.ViewConfiguration -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import eu.kanade.presentation.entries.DotSeparatorText -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.manga.model.MangaDownload import me.saket.swipe.SwipeableActionsBox import me.saket.swipe.rememberSwipeableActionsState import tachiyomi.domain.library.service.LibraryPreferences +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.ReadItemAlpha import tachiyomi.presentation.core.components.material.SecondaryItemAlpha +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.selectedBackground import kotlin.math.absoluteValue @Composable fun MangaChapterListItem( - modifier: Modifier = Modifier, title: String, date: String?, readProgress: String?, @@ -77,6 +75,7 @@ fun MangaChapterListItem( onClick: () -> Unit, onDownloadClick: ((ChapterDownloadAction) -> Unit)?, onChapterSwipe: (LibraryPreferences.ChapterSwipeAction) -> Unit, + modifier: Modifier = Modifier, ) { val haptic = LocalHapticFeedback.current val density = LocalDensity.current @@ -145,7 +144,7 @@ fun MangaChapterListItem( if (!read) { Icon( imageVector = Icons.Filled.Circle, - contentDescription = stringResource(R.string.unread), + contentDescription = stringResource(MR.strings.unread), modifier = Modifier .height(8.dp) .padding(end = 4.dp), @@ -156,7 +155,7 @@ fun MangaChapterListItem( Icon( imageVector = Icons.Filled.Bookmark, contentDescription = stringResource( - R.string.action_filter_bookmarked, + MR.strings.action_filter_bookmarked, ), modifier = Modifier .sizeIn( diff --git a/app/src/main/java/eu/kanade/presentation/entries/manga/components/MangaCoverDialog.kt b/app/src/main/java/eu/kanade/presentation/entries/manga/components/MangaCoverDialog.kt index 8f2cec71a4..18ed48e4ac 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/manga/components/MangaCoverDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/manga/components/MangaCoverDialog.kt @@ -32,7 +32,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView @@ -47,11 +46,12 @@ import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.DropdownMenu import eu.kanade.presentation.entries.EditCoverAction -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.reader.viewer.ReaderPageImageView import kotlinx.collections.immutable.persistentListOf import tachiyomi.domain.entries.manga.model.Manga +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.clickableNoIndication @Composable @@ -85,7 +85,7 @@ fun MangaCoverDialog( IconButton(onClick = onDismissRequest) { Icon( imageVector = Icons.Outlined.Close, - contentDescription = stringResource(R.string.action_close), + contentDescription = stringResource(MR.strings.action_close), ) } } @@ -94,12 +94,12 @@ fun MangaCoverDialog( AppBarActions( actions = persistentListOf( AppBar.Action( - title = stringResource(R.string.action_share), + title = stringResource(MR.strings.action_share), icon = Icons.Outlined.Share, onClick = onShareClick, ), AppBar.Action( - title = stringResource(R.string.action_save), + title = stringResource(MR.strings.action_save), icon = Icons.Outlined.Save, onClick = onSaveClick, ), @@ -120,7 +120,7 @@ fun MangaCoverDialog( Icon( imageVector = Icons.Outlined.Edit, contentDescription = stringResource( - R.string.action_edit_cover, + MR.strings.action_edit_cover, ), ) } @@ -130,14 +130,14 @@ fun MangaCoverDialog( offset = DpOffset(8.dp, 0.dp), ) { DropdownMenuItem( - text = { Text(text = stringResource(R.string.action_edit)) }, + text = { Text(text = stringResource(MR.strings.action_edit)) }, onClick = { onEditClick(EditCoverAction.EDIT) expanded = false }, ) DropdownMenuItem( - text = { Text(text = stringResource(R.string.action_delete)) }, + text = { Text(text = stringResource(MR.strings.action_delete)) }, onClick = { onEditClick(EditCoverAction.DELETE) expanded = false diff --git a/app/src/main/java/eu/kanade/presentation/entries/manga/components/MangaInfoHeader.kt b/app/src/main/java/eu/kanade/presentation/entries/manga/components/MangaInfoHeader.kt index 129b48a7dc..f7200ec38f 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/manga/components/MangaInfoHeader.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/manga/components/MangaInfoHeader.kt @@ -66,8 +66,6 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.Layout import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.pluralStringResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Constraints @@ -82,8 +80,11 @@ import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.util.system.copyToClipboard import tachiyomi.domain.entries.manga.model.Manga +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.TextButton import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.pluralStringResource +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.clickableNoIndication import tachiyomi.presentation.core.util.secondaryItemAlpha import kotlin.math.absoluteValue @@ -180,9 +181,9 @@ fun MangaActionRow( Row(modifier = modifier.padding(start = 16.dp, top = 8.dp, end = 16.dp)) { MangaActionButton( title = if (favorite) { - stringResource(R.string.in_library) + stringResource(MR.strings.in_library) } else { - stringResource(R.string.add_to_library) + stringResource(MR.strings.add_to_library) }, icon = if (favorite) Icons.Filled.Favorite else Icons.Outlined.FavoriteBorder, color = if (favorite) MaterialTheme.colorScheme.primary else defaultActionButtonColor, @@ -192,7 +193,7 @@ fun MangaActionRow( if (onEditIntervalClicked != null && fetchInterval != null) { MangaActionButton( title = pluralStringResource( - id = R.plurals.day, + MR.plurals.day, count = fetchInterval.absoluteValue, fetchInterval.absoluteValue, ), @@ -204,10 +205,10 @@ fun MangaActionRow( if (onTrackingClicked != null) { MangaActionButton( title = if (trackingCount == 0) { - stringResource(R.string.manga_tracking_tab) + stringResource(MR.strings.manga_tracking_tab) } else { pluralStringResource( - id = R.plurals.num_trackers, + MR.plurals.num_trackers, count = trackingCount, trackingCount, ) @@ -219,7 +220,7 @@ fun MangaActionRow( } if (onWebViewClicked != null) { MangaActionButton( - title = stringResource(R.string.action_web_view), + title = stringResource(MR.strings.action_web_view), icon = Icons.Outlined.Public, color = defaultActionButtonColor, onClick = onWebViewClicked, @@ -244,7 +245,7 @@ fun ExpandableMangaDescription( } val desc = description.takeIf { !it.isNullOrBlank() } ?: stringResource( - R.string.description_placeholder, + MR.strings.description_placeholder, ) val trimmedDescription = remember(desc) { desc @@ -275,14 +276,14 @@ fun ExpandableMangaDescription( onDismissRequest = { showMenu = false }, ) { DropdownMenuItem( - text = { Text(text = stringResource(R.string.action_search)) }, + text = { Text(text = stringResource(MR.strings.action_search)) }, onClick = { onTagSearch(tagSelected) showMenu = false }, ) DropdownMenuItem( - text = { Text(text = stringResource(R.string.action_copy_to_clipboard)) }, + text = { Text(text = stringResource(MR.strings.action_copy_to_clipboard)) }, onClick = { onCopyTagToClipboard(tagSelected) showMenu = false @@ -349,7 +350,7 @@ private fun MangaAndSourceTitlesLarge( ItemCover.Book( modifier = Modifier.fillMaxWidth(0.65f), data = coverDataProvider(), - contentDescription = stringResource(R.string.manga_cover), + contentDescription = stringResource(MR.strings.manga_cover), onClick = onCoverClick, ) Spacer(modifier = Modifier.height(16.dp)) @@ -391,7 +392,7 @@ private fun MangaAndSourceTitlesSmall( .sizeIn(maxWidth = 100.dp) .align(Alignment.Top), data = coverDataProvider(), - contentDescription = stringResource(R.string.manga_cover), + contentDescription = stringResource(MR.strings.manga_cover), onClick = onCoverClick, ) Column( @@ -423,7 +424,7 @@ private fun MangaContentInfo( ) { val context = LocalContext.current Text( - text = title.ifBlank { stringResource(R.string.unknown_title) }, + text = title.ifBlank { stringResource(MR.strings.unknown_title) }, style = MaterialTheme.typography.titleLarge, modifier = Modifier.clickableNoIndication( onLongClick = { @@ -453,7 +454,7 @@ private fun MangaContentInfo( ) Text( text = author?.takeIf { it.isNotBlank() } - ?: stringResource(R.string.unknown_author), + ?: stringResource(MR.strings.unknown_author), style = MaterialTheme.typography.titleSmall, modifier = Modifier .clickableNoIndication( @@ -519,13 +520,13 @@ private fun MangaContentInfo( ProvideTextStyle(MaterialTheme.typography.bodyMedium) { Text( text = when (status) { - SManga.ONGOING.toLong() -> stringResource(R.string.ongoing) - SManga.COMPLETED.toLong() -> stringResource(R.string.completed) - SManga.LICENSED.toLong() -> stringResource(R.string.licensed) - SManga.PUBLISHING_FINISHED.toLong() -> stringResource(R.string.publishing_finished) - SManga.CANCELLED.toLong() -> stringResource(R.string.cancelled) - SManga.ON_HIATUS.toLong() -> stringResource(R.string.on_hiatus) - else -> stringResource(R.string.unknown) + SManga.ONGOING.toLong() -> stringResource(MR.strings.ongoing) + SManga.COMPLETED.toLong() -> stringResource(MR.strings.completed) + SManga.LICENSED.toLong() -> stringResource(MR.strings.licensed) + SManga.PUBLISHING_FINISHED.toLong() -> stringResource(MR.strings.publishing_finished) + SManga.CANCELLED.toLong() -> stringResource(MR.strings.cancelled) + SManga.ON_HIATUS.toLong() -> stringResource(MR.strings.on_hiatus) + else -> stringResource(MR.strings.unknown) }, overflow = TextOverflow.Ellipsis, maxLines = 1, @@ -600,7 +601,7 @@ private fun MangaSummary( Icon( painter = rememberAnimatedVectorPainter(image, !expanded), contentDescription = stringResource( - if (expanded) R.string.manga_info_collapse else R.string.manga_info_expand, + if (expanded) MR.strings.manga_info_collapse else MR.strings.manga_info_expand, ), tint = MaterialTheme.colorScheme.onBackground, modifier = Modifier.background(Brush.radialGradient(colors = colors.asReversed())), diff --git a/app/src/main/java/eu/kanade/presentation/entries/manga/components/MissingChapterCountListItem.kt b/app/src/main/java/eu/kanade/presentation/entries/manga/components/MissingChapterCountListItem.kt index e35831c33f..00fd74cfac 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/manga/components/MissingChapterCountListItem.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/manga/components/MissingChapterCountListItem.kt @@ -10,11 +10,11 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.pluralStringResource import androidx.compose.ui.tooling.preview.PreviewLightDark import eu.kanade.presentation.theme.TachiyomiTheme -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.pluralStringResource import tachiyomi.presentation.core.util.secondaryItemAlpha @Composable @@ -34,7 +34,7 @@ fun MissingChapterCountListItem( ) { HorizontalDivider(modifier = Modifier.weight(1f)) Text( - text = pluralStringResource(id = R.plurals.missing_items, count = count, count), + text = pluralStringResource(MR.plurals.missing_items, count = count, count), style = MaterialTheme.typography.labelMedium, ) HorizontalDivider(modifier = Modifier.weight(1f)) diff --git a/app/src/main/java/eu/kanade/presentation/entries/manga/components/ScanlatorFilterDialog.kt b/app/src/main/java/eu/kanade/presentation/entries/manga/components/ScanlatorFilterDialog.kt index 71a58c7cf0..d773ef7572 100644 --- a/app/src/main/java/eu/kanade/presentation/entries/manga/components/ScanlatorFilterDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/entries/manga/components/ScanlatorFilterDialog.kt @@ -26,11 +26,11 @@ import androidx.compose.runtime.toMutableStateList import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.window.DialogProperties -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.isScrolledToEnd import tachiyomi.presentation.core.util.isScrolledToStart @@ -47,10 +47,10 @@ fun ScanlatorFilterDialog( val mutableExcludedScanlators = remember(excludedScanlators) { excludedScanlators.toMutableStateList() } AlertDialog( onDismissRequest = onDismissRequest, - title = { Text(text = stringResource(R.string.exclude_scanlators)) }, + title = { Text(text = stringResource(MR.strings.exclude_scanlators)) }, text = textFunc@{ if (sortedAvailableScanlators.isEmpty()) { - Text(text = stringResource(R.string.no_scanlators_found)) + Text(text = stringResource(MR.strings.no_scanlators_found)) return@textFunc } Box { @@ -106,16 +106,16 @@ fun ScanlatorFilterDialog( confirmButton = { if (sortedAvailableScanlators.isEmpty()) { TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } } else { FlowRow { TextButton(onClick = mutableExcludedScanlators::clear) { - Text(text = stringResource(R.string.action_reset)) + Text(text = stringResource(MR.strings.action_reset)) } Spacer(modifier = Modifier.weight(1f)) TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } TextButton( onClick = { @@ -123,7 +123,7 @@ fun ScanlatorFilterDialog( onDismissRequest() }, ) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } } } diff --git a/app/src/main/java/eu/kanade/presentation/history/HistoryDialog.kt b/app/src/main/java/eu/kanade/presentation/history/HistoryDialog.kt index ce51547bf5..c7f8c44644 100644 --- a/app/src/main/java/eu/kanade/presentation/history/HistoryDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/history/HistoryDialog.kt @@ -10,12 +10,12 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue -import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp import eu.kanade.presentation.theme.TachiyomiTheme -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox +import tachiyomi.presentation.core.i18n.stringResource import kotlin.random.Random @Composable @@ -28,21 +28,21 @@ fun HistoryDeleteDialog( AlertDialog( title = { - Text(text = stringResource(R.string.action_remove)) + Text(text = stringResource(MR.strings.action_remove)) }, text = { Column( verticalArrangement = Arrangement.spacedBy(8.dp), ) { val subtitle = if (isManga) { - R.string.dialog_with_checkbox_remove_description + MR.strings.dialog_with_checkbox_remove_description } else { - R.string.dialog_with_checkbox_remove_description_anime + MR.strings.dialog_with_checkbox_remove_description_anime } Text(text = stringResource(subtitle)) LabeledCheckbox( - label = stringResource(R.string.dialog_with_checkbox_reset), + label = stringResource(MR.strings.dialog_with_checkbox_reset), checked = removeEverything, onCheckedChange = { removeEverything = it }, ) @@ -54,12 +54,12 @@ fun HistoryDeleteDialog( onDelete(removeEverything) onDismissRequest() }) { - Text(text = stringResource(R.string.action_remove)) + Text(text = stringResource(MR.strings.action_remove)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, ) @@ -72,10 +72,10 @@ fun HistoryDeleteAllDialog( ) { AlertDialog( title = { - Text(text = stringResource(R.string.action_remove_everything)) + Text(text = stringResource(MR.strings.action_remove_everything)) }, text = { - Text(text = stringResource(R.string.clear_history_confirmation)) + Text(text = stringResource(MR.strings.clear_history_confirmation)) }, onDismissRequest = onDismissRequest, confirmButton = { @@ -83,12 +83,12 @@ fun HistoryDeleteAllDialog( onDelete() onDismissRequest() }) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, ) diff --git a/app/src/main/java/eu/kanade/presentation/history/anime/AnimeHistoryItem.kt b/app/src/main/java/eu/kanade/presentation/history/anime/AnimeHistoryItem.kt index 8762b0226c..0522fe8265 100644 --- a/app/src/main/java/eu/kanade/presentation/history/anime/AnimeHistoryItem.kt +++ b/app/src/main/java/eu/kanade/presentation/history/anime/AnimeHistoryItem.kt @@ -17,7 +17,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewLightDark @@ -26,10 +25,11 @@ import androidx.compose.ui.unit.dp import eu.kanade.presentation.entries.ItemCover import eu.kanade.presentation.theme.TachiyomiTheme import eu.kanade.presentation.util.formatEpisodeNumber -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.util.lang.toTimestampString import tachiyomi.domain.history.anime.model.AnimeHistoryWithRelations +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource private val HistoryItemHeight = 96.dp @@ -73,7 +73,7 @@ fun AnimeHistoryItem( Text( text = if (history.episodeNumber > -1) { stringResource( - R.string.recent_anime_time, + MR.strings.recent_anime_time, formatEpisodeNumber(history.episodeNumber), seenAt, ) @@ -88,7 +88,7 @@ fun AnimeHistoryItem( IconButton(onClick = onClickDelete) { Icon( imageVector = Icons.Outlined.Delete, - contentDescription = stringResource(R.string.action_delete), + contentDescription = stringResource(MR.strings.action_delete), tint = MaterialTheme.colorScheme.onSurface, ) } diff --git a/app/src/main/java/eu/kanade/presentation/history/anime/AnimeHistoryScreen.kt b/app/src/main/java/eu/kanade/presentation/history/anime/AnimeHistoryScreen.kt index d41c3f24dc..c7f8a95599 100644 --- a/app/src/main/java/eu/kanade/presentation/history/anime/AnimeHistoryScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/history/anime/AnimeHistoryScreen.kt @@ -10,10 +10,10 @@ import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.tooling.preview.PreviewParameter import eu.kanade.domain.ui.UiPreferences import eu.kanade.presentation.theme.TachiyomiTheme -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.history.anime.AnimeHistoryScreenModel import tachiyomi.core.preference.InMemoryPreferenceStore import tachiyomi.domain.history.anime.model.AnimeHistoryWithRelations +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.topSmallPaddingValues import tachiyomi.presentation.core.screens.EmptyScreen @@ -39,12 +39,12 @@ fun AnimeHistoryScreen( LoadingScreen(Modifier.padding(contentPadding)) } else if (it.isEmpty()) { val msg = if (!searchQuery.isNullOrEmpty()) { - R.string.no_results_found + MR.strings.no_results_found } else { - R.string.information_no_recent_anime + MR.strings.information_no_recent_anime } EmptyScreen( - textResource = msg, + stringRes = msg, modifier = Modifier.padding(contentPadding), ) } else { diff --git a/app/src/main/java/eu/kanade/presentation/history/manga/MangaHistoryContent.kt b/app/src/main/java/eu/kanade/presentation/history/manga/MangaHistoryContent.kt index 01ee70a5f0..9a1b3c8cfc 100644 --- a/app/src/main/java/eu/kanade/presentation/history/manga/MangaHistoryContent.kt +++ b/app/src/main/java/eu/kanade/presentation/history/manga/MangaHistoryContent.kt @@ -8,7 +8,6 @@ import eu.kanade.domain.ui.UiPreferences import eu.kanade.presentation.components.RelativeDateHeader import tachiyomi.domain.history.manga.model.MangaHistoryWithRelations import tachiyomi.presentation.core.components.FastScrollLazyColumn -import uy.kohesive.injekt.api.get @Composable fun MangaHistoryContent( diff --git a/app/src/main/java/eu/kanade/presentation/history/manga/MangaHistoryItem.kt b/app/src/main/java/eu/kanade/presentation/history/manga/MangaHistoryItem.kt index 2827415b68..2c444cfc3c 100644 --- a/app/src/main/java/eu/kanade/presentation/history/manga/MangaHistoryItem.kt +++ b/app/src/main/java/eu/kanade/presentation/history/manga/MangaHistoryItem.kt @@ -17,7 +17,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewLightDark @@ -26,10 +25,11 @@ import androidx.compose.ui.unit.dp import eu.kanade.presentation.entries.ItemCover import eu.kanade.presentation.theme.TachiyomiTheme import eu.kanade.presentation.util.formatChapterNumber -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.util.lang.toTimestampString import tachiyomi.domain.history.manga.model.MangaHistoryWithRelations +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource private val HISTORY_ITEM_HEIGHT = 96.dp @@ -73,7 +73,7 @@ fun MangaHistoryItem( Text( text = if (history.chapterNumber > -1) { stringResource( - R.string.recent_manga_time, + MR.strings.recent_manga_time, formatChapterNumber(history.chapterNumber), readAt, ) @@ -88,7 +88,7 @@ fun MangaHistoryItem( IconButton(onClick = onClickDelete) { Icon( imageVector = Icons.Outlined.Delete, - contentDescription = stringResource(R.string.action_delete), + contentDescription = stringResource(MR.strings.action_delete), tint = MaterialTheme.colorScheme.onSurface, ) } diff --git a/app/src/main/java/eu/kanade/presentation/history/manga/MangaHistoryScreen.kt b/app/src/main/java/eu/kanade/presentation/history/manga/MangaHistoryScreen.kt index d816be7d64..5571ae954a 100644 --- a/app/src/main/java/eu/kanade/presentation/history/manga/MangaHistoryScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/history/manga/MangaHistoryScreen.kt @@ -10,15 +10,14 @@ import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.tooling.preview.PreviewParameter import eu.kanade.domain.ui.UiPreferences import eu.kanade.presentation.theme.TachiyomiTheme -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.history.manga.MangaHistoryScreenModel import tachiyomi.core.preference.InMemoryPreferenceStore import tachiyomi.domain.history.manga.model.MangaHistoryWithRelations +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.topSmallPaddingValues import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.LoadingScreen -import uy.kohesive.injekt.api.get import java.util.Date @Composable @@ -40,12 +39,12 @@ fun MangaHistoryScreen( LoadingScreen(Modifier.padding(contentPadding)) } else if (it.isEmpty()) { val msg = if (!searchQuery.isNullOrEmpty()) { - R.string.no_results_found + MR.strings.no_results_found } else { - R.string.information_no_recent_manga + MR.strings.information_no_recent_manga } EmptyScreen( - textResource = msg, + stringRes = msg, modifier = Modifier.padding(contentPadding), ) } else { diff --git a/app/src/main/java/eu/kanade/presentation/library/CommonEntryItem.kt b/app/src/main/java/eu/kanade/presentation/library/CommonEntryItem.kt index 9d8b9dc2b8..cec3cd0abd 100644 --- a/app/src/main/java/eu/kanade/presentation/library/CommonEntryItem.kt +++ b/app/src/main/java/eu/kanade/presentation/library/CommonEntryItem.kt @@ -33,15 +33,15 @@ import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shadow -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import eu.kanade.presentation.entries.ItemCover -import eu.kanade.tachiyomi.R import tachiyomi.domain.entries.EntryCover +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.BadgeGroup +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.selectedBackground object CommonEntryItemDefaults { @@ -379,7 +379,7 @@ private fun ContinueViewingButton( ) { Icon( imageVector = Icons.Filled.PlayArrow, - contentDescription = stringResource(R.string.action_resume), + contentDescription = stringResource(MR.strings.action_resume), modifier = Modifier.size(16.dp), ) } diff --git a/app/src/main/java/eu/kanade/presentation/library/DeleteLibraryEntryDialog.kt b/app/src/main/java/eu/kanade/presentation/library/DeleteLibraryEntryDialog.kt index 7851555e87..645dd3efeb 100644 --- a/app/src/main/java/eu/kanade/presentation/library/DeleteLibraryEntryDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/library/DeleteLibraryEntryDialog.kt @@ -9,10 +9,11 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue -import androidx.compose.ui.res.stringResource -import eu.kanade.tachiyomi.R +import dev.icerock.moko.resources.StringResource import tachiyomi.core.preference.CheckboxState +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox +import tachiyomi.presentation.core.i18n.stringResource @Composable fun DeleteLibraryEntryDialog( @@ -23,11 +24,11 @@ fun DeleteLibraryEntryDialog( ) { var list by remember { mutableStateOf( - buildList> { - val checkbox1 = if (isManga) R.string.manga_from_library else R.string.anime_from_library + buildList> { + val checkbox1 = if (isManga) MR.strings.manga_from_library else MR.strings.anime_from_library add(CheckboxState.State.None(checkbox1)) if (!containsLocalEntry) { - val checkbox2 = if (isManga) R.string.downloaded_chapters else R.string.downloaded_episodes + val checkbox2 = if (isManga) MR.strings.downloaded_chapters else MR.strings.downloaded_episodes add(CheckboxState.State.None(checkbox2)) } }, @@ -37,7 +38,7 @@ fun DeleteLibraryEntryDialog( onDismissRequest = onDismissRequest, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, confirmButton = { @@ -51,11 +52,11 @@ fun DeleteLibraryEntryDialog( ) }, ) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, title = { - Text(text = stringResource(R.string.action_remove)) + Text(text = stringResource(MR.strings.action_remove)) }, text = { Column { @@ -67,7 +68,7 @@ fun DeleteLibraryEntryDialog( val index = list.indexOf(state) if (index != -1) { val mutableList = list.toMutableList() - mutableList[index] = state.next() as CheckboxState.State + mutableList[index] = state.next() as CheckboxState.State list = mutableList.toList() } }, diff --git a/app/src/main/java/eu/kanade/presentation/library/GlobalSearchItem.kt b/app/src/main/java/eu/kanade/presentation/library/GlobalSearchItem.kt index af84fae699..099cdec24a 100644 --- a/app/src/main/java/eu/kanade/presentation/library/GlobalSearchItem.kt +++ b/app/src/main/java/eu/kanade/presentation/library/GlobalSearchItem.kt @@ -4,9 +4,9 @@ import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.zIndex -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource @Composable fun GlobalSearchItem( @@ -19,7 +19,7 @@ fun GlobalSearchItem( onClick = onClick, ) { Text( - text = stringResource(R.string.action_global_search_query, searchQuery), + text = stringResource(MR.strings.action_global_search_query, searchQuery), modifier = Modifier.zIndex(99f), ) } diff --git a/app/src/main/java/eu/kanade/presentation/library/LibraryToolbar.kt b/app/src/main/java/eu/kanade/presentation/library/LibraryToolbar.kt index 628dcaea69..b19d1aa388 100644 --- a/app/src/main/java/eu/kanade/presentation/library/LibraryToolbar.kt +++ b/app/src/main/java/eu/kanade/presentation/library/LibraryToolbar.kt @@ -14,15 +14,15 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.sp import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.SearchToolbar -import eu.kanade.tachiyomi.R import kotlinx.collections.immutable.persistentListOf +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.Pill +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.theme.active @Composable @@ -102,21 +102,21 @@ fun LibraryRegularToolbar( AppBarActions( persistentListOf( AppBar.Action( - title = stringResource(R.string.action_filter), + title = stringResource(MR.strings.action_filter), icon = Icons.Outlined.FilterList, iconTint = filterTint, onClick = onClickFilter, ), AppBar.OverflowAction( - title = stringResource(R.string.action_update_library), + title = stringResource(MR.strings.action_update_library), onClick = onClickGlobalUpdate, ), AppBar.OverflowAction( - title = stringResource(R.string.action_update_category), + title = stringResource(MR.strings.action_update_category), onClick = onClickRefresh, ), AppBar.OverflowAction( - title = stringResource(R.string.action_open_random_manga), + title = stringResource(MR.strings.action_open_random_manga), onClick = onClickOpenRandomEntry, ), ), @@ -141,12 +141,12 @@ fun LibrarySelectionToolbar( AppBarActions( persistentListOf( AppBar.Action( - title = stringResource(R.string.action_select_all), + title = stringResource(MR.strings.action_select_all), icon = Icons.Outlined.SelectAll, onClick = onClickSelectAll, ), AppBar.Action( - title = stringResource(R.string.action_select_inverse), + title = stringResource(MR.strings.action_select_inverse), icon = Icons.Outlined.FlipToBack, onClick = onClickInvertSelection, ), diff --git a/app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibrarySettingsDialog.kt b/app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibrarySettingsDialog.kt index 7fadd4708e..bf3af4391b 100644 --- a/app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibrarySettingsDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/library/anime/AnimeLibrarySettingsDialog.kt @@ -13,10 +13,8 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalConfiguration -import androidx.compose.ui.res.stringResource import eu.kanade.presentation.components.TabbedDialog import eu.kanade.presentation.components.TabbedDialogPaddings -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.library.anime.AnimeLibrarySettingsScreenModel import kotlinx.collections.immutable.persistentListOf import tachiyomi.core.preference.TriState @@ -25,12 +23,14 @@ import tachiyomi.domain.library.anime.model.AnimeLibrarySort import tachiyomi.domain.library.anime.model.sort import tachiyomi.domain.library.model.LibraryDisplayMode import tachiyomi.domain.library.service.LibraryPreferences +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.CheckboxItem import tachiyomi.presentation.core.components.HeadingItem import tachiyomi.presentation.core.components.SettingsChipRow import tachiyomi.presentation.core.components.SliderItem import tachiyomi.presentation.core.components.SortItem import tachiyomi.presentation.core.components.TriStateItem +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState @Composable @@ -42,9 +42,9 @@ fun AnimeLibrarySettingsDialog( TabbedDialog( onDismissRequest = onDismissRequest, tabTitles = persistentListOf( - stringResource(R.string.action_filter), - stringResource(R.string.action_sort), - stringResource(R.string.action_display), + stringResource(MR.strings.action_filter), + stringResource(MR.strings.action_sort), + stringResource(MR.strings.action_display), ), ) { page -> Column( @@ -75,7 +75,7 @@ private fun ColumnScope.FilterPage( val filterDownloaded by screenModel.libraryPreferences.filterDownloadedAnime().collectAsState() val downloadedOnly by screenModel.preferences.downloadedOnly().collectAsState() TriStateItem( - label = stringResource(R.string.label_downloaded), + label = stringResource(MR.strings.label_downloaded), state = if (downloadedOnly) { TriState.ENABLED_IS } else { @@ -86,25 +86,25 @@ private fun ColumnScope.FilterPage( ) val filterUnseen by screenModel.libraryPreferences.filterUnseen().collectAsState() TriStateItem( - label = stringResource(R.string.action_filter_unseen), + label = stringResource(MR.strings.action_filter_unseen), state = filterUnseen, onClick = { screenModel.toggleFilter(LibraryPreferences::filterUnseen) }, ) val filterStarted by screenModel.libraryPreferences.filterStartedAnime().collectAsState() TriStateItem( - label = stringResource(R.string.label_started), + label = stringResource(MR.strings.label_started), state = filterStarted, onClick = { screenModel.toggleFilter(LibraryPreferences::filterStartedAnime) }, ) val filterBookmarked by screenModel.libraryPreferences.filterBookmarkedAnime().collectAsState() TriStateItem( - label = stringResource(R.string.action_filter_bookmarked), + label = stringResource(MR.strings.action_filter_bookmarked), state = filterBookmarked, onClick = { screenModel.toggleFilter(LibraryPreferences::filterBookmarkedAnime) }, ) val filterCompleted by screenModel.libraryPreferences.filterCompletedAnime().collectAsState() TriStateItem( - label = stringResource(R.string.completed), + label = stringResource(MR.strings.completed), state = filterCompleted, onClick = { screenModel.toggleFilter(LibraryPreferences::filterCompletedAnime) }, ) @@ -120,13 +120,13 @@ private fun ColumnScope.FilterPage( service.id.toInt(), ).collectAsState() TriStateItem( - label = stringResource(R.string.action_filter_tracked), + label = stringResource(MR.strings.action_filter_tracked), state = filterTracker, onClick = { screenModel.toggleTracker(service.id.toInt()) }, ) } else -> { - HeadingItem(R.string.action_filter_tracked) + HeadingItem(MR.strings.action_filter_tracked) trackers.map { service -> val filterTracker by screenModel.libraryPreferences.filterTrackedAnime( service.id.toInt(), @@ -153,19 +153,19 @@ private fun ColumnScope.SortPage( if (screenModel.trackers.isEmpty()) { emptyList() } else { - listOf(R.string.action_sort_tracker_score to AnimeLibrarySort.Type.TrackerMean) + listOf(MR.strings.action_sort_tracker_score to AnimeLibrarySort.Type.TrackerMean) } listOf( - R.string.action_sort_alpha to AnimeLibrarySort.Type.Alphabetical, - R.string.action_sort_total_episodes to AnimeLibrarySort.Type.TotalEpisodes, - R.string.action_sort_last_seen to AnimeLibrarySort.Type.LastSeen, - R.string.action_sort_last_anime_update to AnimeLibrarySort.Type.LastUpdate, - R.string.action_sort_unseen_count to AnimeLibrarySort.Type.UnseenCount, - R.string.action_sort_latest_episode to AnimeLibrarySort.Type.LatestEpisode, - R.string.action_sort_episode_fetch_date to AnimeLibrarySort.Type.EpisodeFetchDate, - R.string.action_sort_date_added to AnimeLibrarySort.Type.DateAdded, - R.string.action_sort_airing_time to AnimeLibrarySort.Type.AiringTime, + MR.strings.action_sort_alpha to AnimeLibrarySort.Type.Alphabetical, + MR.strings.action_sort_total_episodes to AnimeLibrarySort.Type.TotalEpisodes, + MR.strings.action_sort_last_seen to AnimeLibrarySort.Type.LastSeen, + MR.strings.action_sort_last_anime_update to AnimeLibrarySort.Type.LastUpdate, + MR.strings.action_sort_unseen_count to AnimeLibrarySort.Type.UnseenCount, + MR.strings.action_sort_latest_episode to AnimeLibrarySort.Type.LatestEpisode, + MR.strings.action_sort_episode_fetch_date to AnimeLibrarySort.Type.EpisodeFetchDate, + MR.strings.action_sort_date_added to AnimeLibrarySort.Type.DateAdded, + MR.strings.action_sort_airing_time to AnimeLibrarySort.Type.AiringTime, ).plus(trackerSortOption).map { (titleRes, mode) -> SortItem( label = stringResource(titleRes), @@ -191,10 +191,10 @@ private fun ColumnScope.SortPage( } private val displayModes = listOf( - R.string.action_display_grid to LibraryDisplayMode.CompactGrid, - R.string.action_display_comfortable_grid to LibraryDisplayMode.ComfortableGrid, - R.string.action_display_cover_only_grid to LibraryDisplayMode.CoverOnlyGrid, - R.string.action_display_list to LibraryDisplayMode.List, + MR.strings.action_display_grid to LibraryDisplayMode.CompactGrid, + MR.strings.action_display_comfortable_grid to LibraryDisplayMode.ComfortableGrid, + MR.strings.action_display_cover_only_grid to LibraryDisplayMode.CoverOnlyGrid, + MR.strings.action_display_list to LibraryDisplayMode.List, ) @Composable @@ -202,7 +202,7 @@ private fun ColumnScope.DisplayPage( screenModel: AnimeLibrarySettingsScreenModel, ) { val displayMode by screenModel.libraryPreferences.displayMode().collectAsState() - SettingsChipRow(R.string.action_display_mode) { + SettingsChipRow(MR.strings.action_display_mode) { displayModes.map { (titleRes, mode) -> FilterChip( selected = displayMode == mode, @@ -224,43 +224,43 @@ private fun ColumnScope.DisplayPage( val columns by columnPreference.collectAsState() SliderItem( - label = stringResource(R.string.pref_library_columns), + label = stringResource(MR.strings.pref_library_columns), max = 10, value = columns, valueText = if (columns > 0) { - stringResource(R.string.pref_library_columns_per_row, columns) + stringResource(MR.strings.pref_library_columns_per_row, columns) } else { - stringResource(R.string.label_default) + stringResource(MR.strings.label_default) }, onChange = columnPreference::set, ) } - HeadingItem(R.string.overlay_header) + HeadingItem(MR.strings.overlay_header) CheckboxItem( - label = stringResource(R.string.action_display_download_badge_anime), + label = stringResource(MR.strings.action_display_download_badge_anime), pref = screenModel.libraryPreferences.downloadBadge(), ) CheckboxItem( - label = stringResource(R.string.action_display_local_badge), + label = stringResource(MR.strings.action_display_local_badge), pref = screenModel.libraryPreferences.localBadge(), ) CheckboxItem( - label = stringResource(R.string.action_display_language_badge), + label = stringResource(MR.strings.action_display_language_badge), pref = screenModel.libraryPreferences.languageBadge(), ) CheckboxItem( - label = stringResource(R.string.action_display_show_continue_reading_button), + label = stringResource(MR.strings.action_display_show_continue_reading_button), pref = screenModel.libraryPreferences.showContinueViewingButton(), ) - HeadingItem(R.string.tabs_header) + HeadingItem(MR.strings.tabs_header) CheckboxItem( - label = stringResource(R.string.action_display_show_tabs), + label = stringResource(MR.strings.action_display_show_tabs), pref = screenModel.libraryPreferences.categoryTabs(), ) CheckboxItem( - label = stringResource(R.string.action_display_show_number_of_items), + label = stringResource(MR.strings.action_display_show_number_of_items), pref = screenModel.libraryPreferences.categoryNumberOfItems(), ) } diff --git a/app/src/main/java/eu/kanade/presentation/library/manga/MangaLibraryPager.kt b/app/src/main/java/eu/kanade/presentation/library/manga/MangaLibraryPager.kt index 264d27b07b..fe52d7337b 100644 --- a/app/src/main/java/eu/kanade/presentation/library/manga/MangaLibraryPager.kt +++ b/app/src/main/java/eu/kanade/presentation/library/manga/MangaLibraryPager.kt @@ -19,10 +19,10 @@ import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.unit.dp import eu.kanade.core.preference.PreferenceMutableState import eu.kanade.presentation.animelib.components.GlobalSearchItem -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.library.manga.MangaLibraryItem import tachiyomi.domain.library.manga.LibraryManga import tachiyomi.domain.library.model.LibraryDisplayMode +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.HorizontalPager import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.util.plus @@ -125,9 +125,9 @@ fun LibraryPagerEmptyScreen( onGlobalSearchClicked: () -> Unit, ) { val msg = when { - !searchQuery.isNullOrEmpty() -> R.string.no_results_found - hasActiveFilters -> R.string.error_no_match - else -> R.string.information_no_manga_category + !searchQuery.isNullOrEmpty() -> MR.strings.no_results_found + hasActiveFilters -> MR.strings.error_no_match + else -> MR.strings.information_no_manga_category } Column( @@ -147,7 +147,7 @@ fun LibraryPagerEmptyScreen( } EmptyScreen( - textResource = msg, + stringRes = msg, modifier = Modifier.weight(1f), ) } diff --git a/app/src/main/java/eu/kanade/presentation/library/manga/MangaLibrarySettingsDialog.kt b/app/src/main/java/eu/kanade/presentation/library/manga/MangaLibrarySettingsDialog.kt index 8a87778597..0647a3e83c 100644 --- a/app/src/main/java/eu/kanade/presentation/library/manga/MangaLibrarySettingsDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/library/manga/MangaLibrarySettingsDialog.kt @@ -13,10 +13,8 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalConfiguration -import androidx.compose.ui.res.stringResource import eu.kanade.presentation.components.TabbedDialog import eu.kanade.presentation.components.TabbedDialogPaddings -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.library.manga.MangaLibrarySettingsScreenModel import kotlinx.collections.immutable.persistentListOf import tachiyomi.core.preference.TriState @@ -25,12 +23,14 @@ import tachiyomi.domain.library.manga.model.MangaLibrarySort import tachiyomi.domain.library.manga.model.sort import tachiyomi.domain.library.model.LibraryDisplayMode import tachiyomi.domain.library.service.LibraryPreferences +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.CheckboxItem import tachiyomi.presentation.core.components.HeadingItem import tachiyomi.presentation.core.components.SettingsChipRow import tachiyomi.presentation.core.components.SliderItem import tachiyomi.presentation.core.components.SortItem import tachiyomi.presentation.core.components.TriStateItem +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState @Composable @@ -42,9 +42,9 @@ fun MangaLibrarySettingsDialog( TabbedDialog( onDismissRequest = onDismissRequest, tabTitles = persistentListOf( - stringResource(R.string.action_filter), - stringResource(R.string.action_sort), - stringResource(R.string.action_display), + stringResource(MR.strings.action_filter), + stringResource(MR.strings.action_sort), + stringResource(MR.strings.action_display), ), ) { page -> Column( @@ -75,7 +75,7 @@ private fun ColumnScope.FilterPage( val filterDownloaded by screenModel.libraryPreferences.filterDownloadedManga().collectAsState() val downloadedOnly by screenModel.preferences.downloadedOnly().collectAsState() TriStateItem( - label = stringResource(R.string.label_downloaded), + label = stringResource(MR.strings.label_downloaded), state = if (downloadedOnly) { TriState.ENABLED_IS } else { @@ -86,25 +86,25 @@ private fun ColumnScope.FilterPage( ) val filterUnread by screenModel.libraryPreferences.filterUnread().collectAsState() TriStateItem( - label = stringResource(R.string.action_filter_unread), + label = stringResource(MR.strings.action_filter_unread), state = filterUnread, onClick = { screenModel.toggleFilter(LibraryPreferences::filterUnread) }, ) val filterStarted by screenModel.libraryPreferences.filterStartedManga().collectAsState() TriStateItem( - label = stringResource(R.string.label_started), + label = stringResource(MR.strings.label_started), state = filterStarted, onClick = { screenModel.toggleFilter(LibraryPreferences::filterStartedManga) }, ) val filterBookmarked by screenModel.libraryPreferences.filterBookmarkedManga().collectAsState() TriStateItem( - label = stringResource(R.string.action_filter_bookmarked), + label = stringResource(MR.strings.action_filter_bookmarked), state = filterBookmarked, onClick = { screenModel.toggleFilter(LibraryPreferences::filterBookmarkedManga) }, ) val filterCompleted by screenModel.libraryPreferences.filterCompletedManga().collectAsState() TriStateItem( - label = stringResource(R.string.completed), + label = stringResource(MR.strings.completed), state = filterCompleted, onClick = { screenModel.toggleFilter(LibraryPreferences::filterCompletedManga) }, ) @@ -120,13 +120,13 @@ private fun ColumnScope.FilterPage( service.id.toInt(), ).collectAsState() TriStateItem( - label = stringResource(R.string.action_filter_tracked), + label = stringResource(MR.strings.action_filter_tracked), state = filterTracker, onClick = { screenModel.toggleTracker(service.id.toInt()) }, ) } else -> { - HeadingItem(R.string.action_filter_tracked) + HeadingItem(MR.strings.action_filter_tracked) trackers.map { service -> val filterTracker by screenModel.libraryPreferences.filterTrackedManga( service.id.toInt(), @@ -153,18 +153,18 @@ private fun ColumnScope.SortPage( if (screenModel.trackers.isEmpty()) { emptyList() } else { - listOf(R.string.action_sort_tracker_score to MangaLibrarySort.Type.TrackerMean) + listOf(MR.strings.action_sort_tracker_score to MangaLibrarySort.Type.TrackerMean) } listOf( - R.string.action_sort_alpha to MangaLibrarySort.Type.Alphabetical, - R.string.action_sort_total to MangaLibrarySort.Type.TotalChapters, - R.string.action_sort_last_read to MangaLibrarySort.Type.LastRead, - R.string.action_sort_last_manga_update to MangaLibrarySort.Type.LastUpdate, - R.string.action_sort_unread_count to MangaLibrarySort.Type.UnreadCount, - R.string.action_sort_latest_chapter to MangaLibrarySort.Type.LatestChapter, - R.string.action_sort_chapter_fetch_date to MangaLibrarySort.Type.ChapterFetchDate, - R.string.action_sort_date_added to MangaLibrarySort.Type.DateAdded, + MR.strings.action_sort_alpha to MangaLibrarySort.Type.Alphabetical, + MR.strings.action_sort_total to MangaLibrarySort.Type.TotalChapters, + MR.strings.action_sort_last_read to MangaLibrarySort.Type.LastRead, + MR.strings.action_sort_last_manga_update to MangaLibrarySort.Type.LastUpdate, + MR.strings.action_sort_unread_count to MangaLibrarySort.Type.UnreadCount, + MR.strings.action_sort_latest_chapter to MangaLibrarySort.Type.LatestChapter, + MR.strings.action_sort_chapter_fetch_date to MangaLibrarySort.Type.ChapterFetchDate, + MR.strings.action_sort_date_added to MangaLibrarySort.Type.DateAdded, ).plus(trackerSortOption).map { (titleRes, mode) -> SortItem( label = stringResource(titleRes), @@ -190,10 +190,10 @@ private fun ColumnScope.SortPage( } private val displayModes = listOf( - R.string.action_display_grid to LibraryDisplayMode.CompactGrid, - R.string.action_display_comfortable_grid to LibraryDisplayMode.ComfortableGrid, - R.string.action_display_cover_only_grid to LibraryDisplayMode.CoverOnlyGrid, - R.string.action_display_list to LibraryDisplayMode.List, + MR.strings.action_display_grid to LibraryDisplayMode.CompactGrid, + MR.strings.action_display_comfortable_grid to LibraryDisplayMode.ComfortableGrid, + MR.strings.action_display_cover_only_grid to LibraryDisplayMode.CoverOnlyGrid, + MR.strings.action_display_list to LibraryDisplayMode.List, ) @Composable @@ -201,7 +201,7 @@ private fun ColumnScope.DisplayPage( screenModel: MangaLibrarySettingsScreenModel, ) { val displayMode by screenModel.libraryPreferences.displayMode().collectAsState() - SettingsChipRow(R.string.action_display_mode) { + SettingsChipRow(MR.strings.action_display_mode) { displayModes.map { (titleRes, mode) -> FilterChip( selected = displayMode == mode, @@ -223,43 +223,43 @@ private fun ColumnScope.DisplayPage( val columns by columnPreference.collectAsState() SliderItem( - label = stringResource(R.string.pref_library_columns), + label = stringResource(MR.strings.pref_library_columns), max = 10, value = columns, valueText = if (columns > 0) { - stringResource(R.string.pref_library_columns_per_row, columns) + stringResource(MR.strings.pref_library_columns_per_row, columns) } else { - stringResource(R.string.label_default) + stringResource(MR.strings.label_default) }, onChange = columnPreference::set, ) } - HeadingItem(R.string.overlay_header) + HeadingItem(MR.strings.overlay_header) CheckboxItem( - label = stringResource(R.string.action_display_download_badge), + label = stringResource(MR.strings.action_display_download_badge), pref = screenModel.libraryPreferences.downloadBadge(), ) CheckboxItem( - label = stringResource(R.string.action_display_local_badge), + label = stringResource(MR.strings.action_display_local_badge), pref = screenModel.libraryPreferences.localBadge(), ) CheckboxItem( - label = stringResource(R.string.action_display_language_badge), + label = stringResource(MR.strings.action_display_language_badge), pref = screenModel.libraryPreferences.languageBadge(), ) CheckboxItem( - label = stringResource(R.string.action_display_show_continue_reading_button), + label = stringResource(MR.strings.action_display_show_continue_reading_button), pref = screenModel.libraryPreferences.showContinueViewingButton(), ) - HeadingItem(R.string.tabs_header) + HeadingItem(MR.strings.tabs_header) CheckboxItem( - label = stringResource(R.string.action_display_show_tabs), + label = stringResource(MR.strings.action_display_show_tabs), pref = screenModel.libraryPreferences.categoryTabs(), ) CheckboxItem( - label = stringResource(R.string.action_display_show_number_of_items), + label = stringResource(MR.strings.action_display_show_number_of_items), pref = screenModel.libraryPreferences.categoryNumberOfItems(), ) } diff --git a/app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt b/app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt index 63f5e34e95..0536d7dfd2 100644 --- a/app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt @@ -14,7 +14,6 @@ import androidx.compose.material.icons.automirrored.outlined.Label import androidx.compose.material.icons.outlined.CloudOff import androidx.compose.material.icons.outlined.CollectionsBookmark import androidx.compose.material.icons.outlined.GetApp -import androidx.compose.material.icons.outlined.HelpOutline import androidx.compose.material.icons.outlined.History import androidx.compose.material.icons.outlined.Info import androidx.compose.material.icons.outlined.QueryStats @@ -25,8 +24,6 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.pluralStringResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource import eu.kanade.presentation.components.WarningBanner import eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget @@ -35,8 +32,11 @@ import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.core.Constants import eu.kanade.tachiyomi.ui.more.DownloadQueueState import tachiyomi.domain.library.service.LibraryPreferences +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.pluralStringResource +import tachiyomi.presentation.core.i18n.stringResource import uy.kohesive.injekt.injectLazy @Composable @@ -69,7 +69,7 @@ fun MoreScreen( ) { if (isFDroid) { WarningBanner( - textRes = R.string.fdroid_warning, + textRes = MR.strings.fdroid_warning, modifier = Modifier.clickable { uriHandler.openUri( "https://aniyomi.org/docs/faq/general#how-do-i-update-from-the-f-droid-builds", @@ -88,8 +88,8 @@ fun MoreScreen( } item { SwitchPreferenceWidget( - title = stringResource(R.string.label_downloaded_only), - subtitle = stringResource(R.string.downloaded_only_summary), + title = stringResource(MR.strings.label_downloaded_only), + subtitle = stringResource(MR.strings.downloaded_only_summary), icon = Icons.Outlined.CloudOff, checked = downloadedOnly, onCheckedChanged = onDownloadedOnlyChange, @@ -97,8 +97,8 @@ fun MoreScreen( } item { SwitchPreferenceWidget( - title = stringResource(R.string.pref_incognito_mode), - subtitle = stringResource(R.string.pref_incognito_mode_summary), + title = stringResource(MR.strings.pref_incognito_mode), + subtitle = stringResource(MR.strings.pref_incognito_mode_summary), icon = ImageVector.vectorResource(R.drawable.ic_glasses_24dp), checked = incognitoMode, onCheckedChanged = onIncognitoModeChange, @@ -112,9 +112,9 @@ fun MoreScreen( item { val bottomNavStyle = libraryPreferences.bottomNavStyle().get() val titleRes = when (bottomNavStyle) { - 0 -> R.string.label_recent_manga - 1 -> R.string.label_recent_updates - else -> R.string.label_manga + 0 -> MR.strings.label_recent_manga + 1 -> MR.strings.label_recent_updates + else -> MR.strings.label_manga } val icon = when (bottomNavStyle) { 0 -> Icons.Outlined.History @@ -131,17 +131,17 @@ fun MoreScreen( item { val downloadQueueState = downloadQueueStateProvider() TextPreferenceWidget( - title = stringResource(R.string.label_download_queue), + title = stringResource(MR.strings.label_download_queue), subtitle = when (downloadQueueState) { DownloadQueueState.Stopped -> null is DownloadQueueState.Paused -> { val pending = downloadQueueState.pending if (pending == 0) { - stringResource(R.string.paused) + stringResource(MR.strings.paused) } else { - "${stringResource(R.string.paused)} • ${ + "${stringResource(MR.strings.paused)} • ${ pluralStringResource( - id = R.plurals.download_queue_summary, + MR.plurals.download_queue_summary, count = pending, pending, ) @@ -151,7 +151,7 @@ fun MoreScreen( is DownloadQueueState.Downloading -> { val pending = downloadQueueState.pending pluralStringResource( - id = R.plurals.download_queue_summary, + MR.plurals.download_queue_summary, count = pending, pending, ) @@ -163,28 +163,28 @@ fun MoreScreen( } item { TextPreferenceWidget( - title = stringResource(R.string.general_categories), + title = stringResource(MR.strings.general_categories), icon = Icons.AutoMirrored.Outlined.Label, onPreferenceClick = onClickCategories, ) } item { TextPreferenceWidget( - title = stringResource(R.string.label_stats), + title = stringResource(MR.strings.label_stats), icon = Icons.Outlined.QueryStats, onPreferenceClick = onClickStats, ) } item { TextPreferenceWidget( - title = stringResource(R.string.label_storage), + title = stringResource(MR.strings.label_storage), icon = Icons.Outlined.Storage, onPreferenceClick = onClickStorage, ) } item { TextPreferenceWidget( - title = stringResource(R.string.label_data_storage), + title = stringResource(MR.strings.label_data_storage), icon = Icons.Outlined.Storage, onPreferenceClick = onClickDataAndStorage, ) @@ -194,21 +194,21 @@ fun MoreScreen( item { TextPreferenceWidget( - title = stringResource(R.string.label_settings), + title = stringResource(MR.strings.label_settings), icon = Icons.Outlined.Settings, onPreferenceClick = onClickSettings, ) } item { TextPreferenceWidget( - title = stringResource(R.string.pref_category_about), + title = stringResource(MR.strings.pref_category_about), icon = Icons.Outlined.Info, onPreferenceClick = onClickAbout, ) } item { TextPreferenceWidget( - title = stringResource(R.string.label_help), + title = stringResource(MR.strings.label_help), icon = Icons.AutoMirrored.Outlined.HelpOutline, onPreferenceClick = { uriHandler.openUri(Constants.URL_HELP) }, ) 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 9d3f5c75f0..33656e3881 100644 --- a/app/src/main/java/eu/kanade/presentation/more/NewUpdateScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/NewUpdateScreen.kt @@ -7,14 +7,12 @@ import androidx.compose.foundation.layout.width import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.OpenInNew import androidx.compose.material.icons.outlined.NewReleases -import androidx.compose.material.icons.outlined.OpenInNew import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.tooling.preview.PreviewLightDark import com.halilibo.richtext.markdown.Markdown @@ -22,8 +20,9 @@ import com.halilibo.richtext.ui.RichTextStyle import com.halilibo.richtext.ui.material3.Material3RichText import com.halilibo.richtext.ui.string.RichTextStringStyle import eu.kanade.presentation.theme.TachiyomiTheme -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.InfoScreen @Composable @@ -36,11 +35,11 @@ fun NewUpdateScreen( ) { InfoScreen( icon = Icons.Outlined.NewReleases, - headingText = stringResource(R.string.update_check_notification_update_available), + headingText = stringResource(MR.strings.update_check_notification_update_available), subtitleText = versionName, - acceptText = stringResource(R.string.update_check_confirm), + acceptText = stringResource(MR.strings.update_check_confirm), onAcceptClick = onAcceptUpdate, - rejectText = stringResource(R.string.action_not_now), + rejectText = stringResource(MR.strings.action_not_now), onRejectClick = onRejectUpdate, ) { Material3RichText( @@ -59,7 +58,7 @@ fun NewUpdateScreen( onClick = onOpenInBrowser, modifier = Modifier.padding(top = MaterialTheme.padding.small), ) { - Text(text = stringResource(R.string.update_check_open)) + Text(text = stringResource(MR.strings.update_check_open)) Spacer(modifier = Modifier.width(MaterialTheme.padding.tiny)) Icon(imageVector = Icons.AutoMirrored.Outlined.OpenInNew, contentDescription = null) } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/Preference.kt b/app/src/main/java/eu/kanade/presentation/more/settings/Preference.kt index 31e1201df5..a05fad8285 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/Preference.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/Preference.kt @@ -3,9 +3,9 @@ package eu.kanade.presentation.more.settings import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.res.stringResource -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.track.Tracker +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.core.preference.Preference as PreferenceData sealed class Preference { @@ -111,7 +111,7 @@ sealed class Preference { v.map { e[it] } .takeIf { it.isNotEmpty() } ?.joinToString() - } ?: stringResource(R.string.none) + } ?: stringResource(MR.strings.none) subtitle?.format(combined) }, override val icon: ImageVector? = null, diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/PreferenceScaffold.kt b/app/src/main/java/eu/kanade/presentation/more/settings/PreferenceScaffold.kt index 7db2933794..bc68af5fc7 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/PreferenceScaffold.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/PreferenceScaffold.kt @@ -1,15 +1,15 @@ package eu.kanade.presentation.more.settings -import androidx.annotation.StringRes import androidx.compose.foundation.layout.RowScope import androidx.compose.runtime.Composable -import androidx.compose.ui.res.stringResource +import dev.icerock.moko.resources.StringResource import eu.kanade.presentation.components.AppBar import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource @Composable fun PreferenceScaffold( - @StringRes titleRes: Int, + titleRes: StringResource, actions: @Composable RowScope.() -> Unit = {}, onBackPressed: (() -> Unit)? = null, itemsProvider: @Composable () -> List, diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/AdvancedPlayerSettingsScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/AdvancedPlayerSettingsScreen.kt index e9709f4513..f7fae44a7d 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/AdvancedPlayerSettingsScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/AdvancedPlayerSettingsScreen.kt @@ -6,14 +6,15 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.platform.LocalContext import eu.kanade.core.preference.asState import eu.kanade.presentation.more.settings.Preference -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get object AdvancedPlayerSettingsScreen : SearchableSettings { @Composable - override fun getTitleRes() = R.string.pref_category_player_advanced + override fun getTitleRes() = MR.strings.pref_category_player_advanced @Composable override fun getPreferences(): List { @@ -26,7 +27,7 @@ object AdvancedPlayerSettingsScreen : SearchableSettings { return listOf( Preference.PreferenceItem.MultiLineEditTextPreference( pref = mpvConf, - title = context.getString(R.string.pref_mpv_conf), + title = context.stringResource(MR.strings.pref_mpv_conf), subtitle = mpvConf.asState(scope).value .lines().take(2) .joinToString( @@ -37,7 +38,7 @@ object AdvancedPlayerSettingsScreen : SearchableSettings { ), Preference.PreferenceItem.MultiLineEditTextPreference( pref = mpvInput, - title = context.getString(R.string.pref_mpv_input), + title = context.stringResource(MR.strings.pref_mpv_input), subtitle = mpvInput.asState(scope).value .lines().take(2) .joinToString( @@ -46,12 +47,12 @@ object AdvancedPlayerSettingsScreen : SearchableSettings { ), ), Preference.PreferenceItem.ListPreference( - title = context.getString(R.string.pref_debanding_title), + title = context.stringResource(MR.strings.pref_debanding_title), pref = playerPreferences.deband(), entries = mapOf( - 0 to context.getString(R.string.pref_debanding_disabled), - 1 to context.getString(R.string.pref_debanding_cpu), - 2 to context.getString(R.string.pref_debanding_gpu), + 0 to context.stringResource(MR.strings.pref_debanding_disabled), + 1 to context.stringResource(MR.strings.pref_debanding_cpu), + 2 to context.stringResource(MR.strings.pref_debanding_gpu), 3 to "YUV420P", ), ), diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/Commons.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/Commons.kt index b6cd14605b..6b9affc443 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/Commons.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/Commons.kt @@ -3,10 +3,10 @@ package eu.kanade.presentation.more.settings.screen import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import eu.kanade.presentation.category.visualName -import eu.kanade.tachiyomi.R import tachiyomi.domain.category.model.Category +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource /** * Returns a string of categories name for settings subtitle @@ -39,15 +39,15 @@ fun getCategoriesLabel( ) } // All explicitly selected - includedCategories.size == allCategories.size -> stringResource(R.string.all) - allExcluded -> stringResource(R.string.none) - else -> stringResource(R.string.all) + includedCategories.size == allCategories.size -> stringResource(MR.strings.all) + allExcluded -> stringResource(MR.strings.none) + else -> stringResource(MR.strings.all) } val excludedItemsText = when { - excludedCategories.isEmpty() -> stringResource(R.string.none) - allExcluded -> stringResource(R.string.all) + excludedCategories.isEmpty() -> stringResource(MR.strings.none) + allExcluded -> stringResource(MR.strings.all) else -> excludedCategories.joinToString { it.visualName(context) } } - return stringResource(R.string.include, includedItemsText) + "\n" + - stringResource(R.string.exclude, excludedItemsText) + return stringResource(MR.strings.include, includedItemsText) + "\n" + + stringResource(MR.strings.exclude, excludedItemsText) } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SearchableSettings.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SearchableSettings.kt index 3ea1bdc64f..5652ace76c 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SearchableSettings.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SearchableSettings.kt @@ -1,10 +1,10 @@ package eu.kanade.presentation.more.settings.screen -import androidx.annotation.StringRes import androidx.compose.foundation.layout.RowScope import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import cafe.adriel.voyager.core.screen.Screen +import dev.icerock.moko.resources.StringResource import eu.kanade.presentation.more.settings.Preference import eu.kanade.presentation.more.settings.PreferenceScaffold import eu.kanade.presentation.util.LocalBackPress @@ -13,8 +13,7 @@ interface SearchableSettings : Screen { @Composable @ReadOnlyComposable - @StringRes - fun getTitleRes(): Int + fun getTitleRes(): StringResource @Composable fun getPreferences(): List diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt index 03c58007eb..2c6f09560a 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt @@ -7,7 +7,6 @@ import android.os.Build import android.provider.Settings import android.webkit.WebStorage import android.webkit.WebView -import androidx.annotation.StringRes import androidx.compose.material3.AlertDialog import androidx.compose.material3.Text import androidx.compose.material3.TextButton @@ -21,7 +20,6 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.stringResource import androidx.core.net.toUri import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow @@ -32,10 +30,9 @@ import eu.kanade.presentation.more.settings.Preference import eu.kanade.presentation.more.settings.screen.advanced.ClearAnimeDatabaseScreen import eu.kanade.presentation.more.settings.screen.advanced.ClearDatabaseScreen import eu.kanade.presentation.more.settings.screen.debug.DebugInfoScreen -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.anime.AnimeDownloadCache import eu.kanade.tachiyomi.data.download.manga.MangaDownloadCache -import eu.kanade.tachiyomi.data.library.anime.AnimeLibraryUpdateJob +import eu.kanade.tachiyomi.data.library.anime.AnimeMetadataUpdateJob import eu.kanade.tachiyomi.data.library.manga.MangaLibraryUpdateJob import eu.kanade.tachiyomi.data.track.TrackerManager import eu.kanade.tachiyomi.network.NetworkHelper @@ -62,10 +59,13 @@ import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.launch import logcat.LogPriority import okhttp3.Headers +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchNonCancellable import tachiyomi.core.util.lang.withUIContext import tachiyomi.core.util.system.logcat import tachiyomi.domain.entries.manga.interactor.ResetMangaViewerFlags +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -75,8 +75,7 @@ object SettingsAdvancedScreen : SearchableSettings { @ReadOnlyComposable @Composable - @StringRes - override fun getTitleRes() = R.string.pref_category_advanced + override fun getTitleRes() = MR.strings.pref_category_advanced @Composable override fun getPreferences(): List { @@ -92,13 +91,13 @@ object SettingsAdvancedScreen : SearchableSettings { listOf( Preference.PreferenceItem.SwitchPreference( pref = basePreferences.acraEnabled(), - title = stringResource(R.string.pref_enable_acra), - subtitle = stringResource(R.string.pref_acra_summary), + title = stringResource(MR.strings.pref_enable_acra), + subtitle = stringResource(MR.strings.pref_acra_summary), enabled = isPreviewBuildType || isReleaseBuildType, ), Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.pref_dump_crash_logs), - subtitle = stringResource(R.string.pref_dump_crash_logs_summary), + title = stringResource(MR.strings.pref_dump_crash_logs), + subtitle = stringResource(MR.strings.pref_dump_crash_logs_summary), onClick = { scope.launch { CrashLogUtil(context).dumpLogs() @@ -107,15 +106,15 @@ object SettingsAdvancedScreen : SearchableSettings { ), Preference.PreferenceItem.SwitchPreference( pref = networkPreferences.verboseLogging(), - title = stringResource(R.string.pref_verbose_logging), - subtitle = stringResource(R.string.pref_verbose_logging_summary), + title = stringResource(MR.strings.pref_verbose_logging), + subtitle = stringResource(MR.strings.pref_verbose_logging_summary), onValueChanged = { - context.toast(R.string.requires_app_restart) + context.stringResource(MR.strings.requires_app_restart) true }, ), Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.pref_debug_info), + title = stringResource(MR.strings.pref_debug_info), onClick = { navigator.push(DebugInfoScreen()) }, ), ), @@ -123,7 +122,7 @@ object SettingsAdvancedScreen : SearchableSettings { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { add( Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.pref_manage_notifications), + title = stringResource(MR.strings.pref_manage_notifications), onClick = { val intent = Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS).apply { putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName) @@ -154,11 +153,11 @@ object SettingsAdvancedScreen : SearchableSettings { val uriHandler = LocalUriHandler.current return Preference.PreferenceGroup( - title = stringResource(R.string.label_background_activity), + title = stringResource(MR.strings.label_background_activity), preferenceItems = listOf( Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.pref_disable_battery_optimization), - subtitle = stringResource(R.string.pref_disable_battery_optimization_summary), + title = stringResource(MR.strings.pref_disable_battery_optimization), + subtitle = stringResource(MR.strings.pref_disable_battery_optimization_summary), onClick = { val packageName: String = context.packageName if (!context.powerManager.isIgnoringBatteryOptimizations(packageName)) { @@ -172,17 +171,17 @@ object SettingsAdvancedScreen : SearchableSettings { context.startActivity(intent) } catch (e: ActivityNotFoundException) { context.toast( - R.string.battery_optimization_setting_activity_not_found, + MR.strings.battery_optimization_setting_activity_not_found, ) } } else { - context.toast(R.string.battery_optimization_disabled) + context.stringResource(MR.strings.battery_optimization_disabled) } }, ), Preference.PreferenceItem.TextPreference( title = "Don't kill my app!", - subtitle = stringResource(R.string.about_dont_kill_my_app), + subtitle = stringResource(MR.strings.about_dont_kill_my_app), onClick = { uriHandler.openUri("https://dontkillmyapp.com/") }, ), ), @@ -195,25 +194,25 @@ object SettingsAdvancedScreen : SearchableSettings { val navigator = LocalNavigator.currentOrThrow return Preference.PreferenceGroup( - title = stringResource(R.string.label_data), + title = stringResource(MR.strings.label_data), preferenceItems = listOf( Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.pref_invalidate_download_cache), - subtitle = stringResource(R.string.pref_invalidate_download_cache_summary), + title = stringResource(MR.strings.pref_invalidate_download_cache), + subtitle = stringResource(MR.strings.pref_invalidate_download_cache_summary), onClick = { Injekt.get().invalidateCache() Injekt.get().invalidateCache() - context.toast(R.string.download_cache_invalidated) + context.stringResource(MR.strings.download_cache_invalidated) }, ), Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.pref_clear_manga_database), - subtitle = stringResource(R.string.pref_clear_manga_database_summary), + title = stringResource(MR.strings.pref_clear_manga_database), + subtitle = stringResource(MR.strings.pref_clear_manga_database_summary), onClick = { navigator.push(ClearDatabaseScreen()) }, ), Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.pref_clear_anime_database), - subtitle = stringResource(R.string.pref_clear_anime_database_summary), + title = stringResource(MR.strings.pref_clear_anime_database), + subtitle = stringResource(MR.strings.pref_clear_anime_database_summary), onClick = { navigator.push(ClearAnimeDatabaseScreen()) }, ), ), @@ -231,17 +230,17 @@ object SettingsAdvancedScreen : SearchableSettings { val userAgent by userAgentPref.collectAsState() return Preference.PreferenceGroup( - title = stringResource(R.string.label_network), + title = stringResource(MR.strings.label_network), preferenceItems = listOf( Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.pref_clear_cookies), + title = stringResource(MR.strings.pref_clear_cookies), onClick = { networkHelper.cookieJar.removeAll() - context.toast(R.string.cookies_cleared) + context.stringResource(MR.strings.cookies_cleared) }, ), Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.pref_clear_webview_data), + title = stringResource(MR.strings.pref_clear_webview_data), onClick = { try { WebView(context).run { @@ -253,18 +252,18 @@ object SettingsAdvancedScreen : SearchableSettings { } WebStorage.getInstance().deleteAllData() context.applicationInfo?.dataDir?.let { File("$it/app_webview/").deleteRecursively() } - context.toast(R.string.webview_data_deleted) + context.stringResource(MR.strings.webview_data_deleted) } catch (e: Throwable) { logcat(LogPriority.ERROR, e) - context.toast(R.string.cache_delete_error) + context.stringResource(MR.strings.cache_delete_error) } }, ), Preference.PreferenceItem.ListPreference( pref = networkPreferences.dohProvider(), - title = stringResource(R.string.pref_dns_over_https), + title = stringResource(MR.strings.pref_dns_over_https), entries = mapOf( - -1 to stringResource(R.string.disabled), + -1 to stringResource(MR.strings.disabled), PREF_DOH_CLOUDFLARE to "Cloudflare", PREF_DOH_GOOGLE to "Google", PREF_DOH_ADGUARD to "AdGuard", @@ -279,30 +278,30 @@ object SettingsAdvancedScreen : SearchableSettings { PREF_DOH_SHECAN to "Shecan", ), onValueChanged = { - context.toast(R.string.requires_app_restart) + context.stringResource(MR.strings.requires_app_restart) true }, ), Preference.PreferenceItem.EditTextPreference( pref = userAgentPref, - title = stringResource(R.string.pref_user_agent_string), + title = stringResource(MR.strings.pref_user_agent_string), onValueChanged = { try { // OkHttp checks for valid values internally Headers.Builder().add("User-Agent", it) } catch (_: IllegalArgumentException) { - context.toast(R.string.error_user_agent_string_invalid) + context.stringResource(MR.strings.error_user_agent_string_invalid) return@EditTextPreference false } true }, ), Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.pref_reset_user_agent_string), + title = stringResource(MR.strings.pref_reset_user_agent_string), enabled = remember(userAgent) { userAgent != userAgentPref.defaultValue() }, onClick = { userAgentPref.delete() - context.toast(R.string.requires_app_restart) + context.stringResource(MR.strings.requires_app_restart) }, ), ), @@ -316,32 +315,26 @@ object SettingsAdvancedScreen : SearchableSettings { val trackerManager = remember { Injekt.get() } return Preference.PreferenceGroup( - title = stringResource(R.string.label_library), + title = stringResource(MR.strings.label_library), preferenceItems = listOf( Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.pref_refresh_library_covers), + title = stringResource(MR.strings.pref_refresh_library_covers), onClick = { - MangaLibraryUpdateJob.startNow( - context, - target = MangaLibraryUpdateJob.Target.COVERS, - ) - AnimeLibraryUpdateJob.startNow( - context, - target = AnimeLibraryUpdateJob.Target.COVERS, - ) + MangaLibraryUpdateJob.startNow(context) + AnimeMetadataUpdateJob.startNow(context) }, ), Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.pref_reset_viewer_flags), - subtitle = stringResource(R.string.pref_reset_viewer_flags_summary), + title = stringResource(MR.strings.pref_reset_viewer_flags), + subtitle = stringResource(MR.strings.pref_reset_viewer_flags_summary), onClick = { scope.launchNonCancellable { val success = Injekt.get().await() withUIContext { val message = if (success) { - R.string.pref_reset_viewer_flags_success + MR.strings.pref_reset_viewer_flags_success } else { - R.string.pref_reset_viewer_flags_error + MR.strings.pref_reset_viewer_flags_error } context.toast(message) } @@ -365,15 +358,15 @@ object SettingsAdvancedScreen : SearchableSettings { val dismiss = { shizukuMissing = false } AlertDialog( onDismissRequest = dismiss, - title = { Text(text = stringResource(R.string.ext_installer_shizuku)) }, + title = { Text(text = stringResource(MR.strings.ext_installer_shizuku)) }, text = { Text( - text = stringResource(R.string.ext_installer_shizuku_unavailable_dialog), + text = stringResource(MR.strings.ext_installer_shizuku_unavailable_dialog), ) }, dismissButton = { TextButton(onClick = dismiss) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, confirmButton = { @@ -383,19 +376,19 @@ object SettingsAdvancedScreen : SearchableSettings { uriHandler.openUri("https://shizuku.rikka.app/download") }, ) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, ) } return Preference.PreferenceGroup( - title = stringResource(R.string.label_extensions), + title = stringResource(MR.strings.label_extensions), preferenceItems = listOf( Preference.PreferenceItem.ListPreference( pref = extensionInstallerPref, - title = stringResource(R.string.ext_installer_pref), + title = stringResource(MR.strings.ext_installer_pref), entries = extensionInstallerPref.entries - .associateWith { stringResource(it.titleResId) }, + .associateWith { stringResource(it.titleRes) }, onValueChanged = { if (it == BasePreferences.ExtensionInstaller.SHIZUKU && !context.isShizukuInstalled @@ -417,44 +410,44 @@ object SettingsAdvancedScreen : SearchableSettings { val sourcePreferences = remember { Injekt.get() } val dataSaver by sourcePreferences.dataSaver().collectAsState() return Preference.PreferenceGroup( - title = stringResource(R.string.data_saver), + title = stringResource(MR.strings.data_saver), preferenceItems = listOf( Preference.PreferenceItem.ListPreference( pref = sourcePreferences.dataSaver(), - title = stringResource(R.string.data_saver), - subtitle = stringResource(R.string.data_saver_summary), + title = stringResource(MR.strings.data_saver), + subtitle = stringResource(MR.strings.data_saver_summary), entries = mapOf( - DataSaver.NONE to stringResource(R.string.disabled), - DataSaver.BANDWIDTH_HERO to stringResource(R.string.bandwidth_hero), - DataSaver.WSRV_NL to stringResource(R.string.wsrv), - DataSaver.RESMUSH_IT to stringResource(R.string.resmush), + DataSaver.NONE to stringResource(MR.strings.disabled), + DataSaver.BANDWIDTH_HERO to stringResource(MR.strings.bandwidth_hero), + DataSaver.WSRV_NL to stringResource(MR.strings.wsrv), + DataSaver.RESMUSH_IT to stringResource(MR.strings.resmush), ), ), Preference.PreferenceItem.EditTextPreference( pref = sourcePreferences.dataSaverServer(), - title = stringResource(R.string.bandwidth_data_saver_server), - subtitle = stringResource(R.string.data_saver_server_summary), + title = stringResource(MR.strings.bandwidth_data_saver_server), + subtitle = stringResource(MR.strings.data_saver_server_summary), enabled = dataSaver == DataSaver.BANDWIDTH_HERO, ), Preference.PreferenceItem.SwitchPreference( pref = sourcePreferences.dataSaverDownloader(), - title = stringResource(R.string.data_saver_downloader), + title = stringResource(MR.strings.data_saver_downloader), enabled = dataSaver != DataSaver.NONE, ), Preference.PreferenceItem.SwitchPreference( pref = sourcePreferences.dataSaverIgnoreJpeg(), - title = stringResource(R.string.data_saver_ignore_jpeg), + title = stringResource(MR.strings.data_saver_ignore_jpeg), enabled = dataSaver != DataSaver.NONE, ), Preference.PreferenceItem.SwitchPreference( pref = sourcePreferences.dataSaverIgnoreGif(), - title = stringResource(R.string.data_saver_ignore_gif), + title = stringResource(MR.strings.data_saver_ignore_gif), enabled = dataSaver != DataSaver.NONE, ), Preference.PreferenceItem.ListPreference( pref = sourcePreferences.dataSaverImageQuality(), - title = stringResource(R.string.data_saver_image_quality), - subtitle = stringResource(R.string.data_saver_image_quality_summary), + title = stringResource(MR.strings.data_saver_image_quality), + subtitle = stringResource(MR.strings.data_saver_image_quality_summary), entries = listOf( "10%", "20%", @@ -471,18 +464,18 @@ object SettingsAdvancedScreen : SearchableSettings { val dataSaverImageFormatJpeg by sourcePreferences.dataSaverImageFormatJpeg().collectAsState() Preference.PreferenceItem.SwitchPreference( pref = sourcePreferences.dataSaverImageFormatJpeg(), - title = stringResource(R.string.data_saver_image_format), + title = stringResource(MR.strings.data_saver_image_format), subtitle = if (dataSaverImageFormatJpeg) { - stringResource(R.string.data_saver_image_format_summary_on) + stringResource(MR.strings.data_saver_image_format_summary_on) } else { - stringResource(R.string.data_saver_image_format_summary_off) + stringResource(MR.strings.data_saver_image_format_summary_off) }, enabled = dataSaver != DataSaver.NONE && dataSaver != DataSaver.RESMUSH_IT, ) }, Preference.PreferenceItem.SwitchPreference( pref = sourcePreferences.dataSaverColorBW(), - title = stringResource(R.string.data_saver_color_bw), + title = stringResource(MR.strings.data_saver_color_bw), enabled = dataSaver == DataSaver.BANDWIDTH_HERO, ), ), diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen.kt index 85dd149567..a5d36fcabb 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen.kt @@ -3,7 +3,6 @@ package eu.kanade.presentation.more.settings.screen import android.app.Activity import android.content.Context import android.os.Build -import androidx.annotation.StringRes import androidx.appcompat.app.AppCompatDelegate import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect @@ -13,7 +12,6 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.core.app.ActivityCompat import androidx.core.os.LocaleListCompat import eu.kanade.domain.ui.UiPreferences @@ -25,12 +23,14 @@ import eu.kanade.presentation.more.settings.widget.AppThemePreferenceWidget import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.home.HomeScreen import eu.kanade.tachiyomi.util.system.LocaleHelper -import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.merge import org.xmlpull.v1.XmlPullParser +import tachiyomi.core.i18n.stringResource import tachiyomi.domain.library.service.LibraryPreferences +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -40,8 +40,7 @@ object SettingsAppearanceScreen : SearchableSettings { @ReadOnlyComposable @Composable - @StringRes - override fun getTitleRes() = R.string.pref_category_appearance + override fun getTitleRes() = MR.strings.pref_category_appearance @Composable override fun getPreferences(): List { @@ -78,26 +77,26 @@ object SettingsAppearanceScreen : SearchableSettings { } return Preference.PreferenceGroup( - title = stringResource(R.string.pref_category_theme), + title = stringResource(MR.strings.pref_category_theme), preferenceItems = listOf( Preference.PreferenceItem.ListPreference( pref = themeModePref, - title = stringResource(R.string.pref_theme_mode), + title = stringResource(MR.strings.pref_theme_mode), entries = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { mapOf( - ThemeMode.SYSTEM to stringResource(R.string.theme_system), - ThemeMode.LIGHT to stringResource(R.string.theme_light), - ThemeMode.DARK to stringResource(R.string.theme_dark), + ThemeMode.SYSTEM to stringResource(MR.strings.theme_system), + ThemeMode.LIGHT to stringResource(MR.strings.theme_light), + ThemeMode.DARK to stringResource(MR.strings.theme_dark), ) } else { mapOf( - ThemeMode.LIGHT to stringResource(R.string.theme_light), - ThemeMode.DARK to stringResource(R.string.theme_dark), + ThemeMode.LIGHT to stringResource(MR.strings.theme_light), + ThemeMode.DARK to stringResource(MR.strings.theme_dark), ) }, ), Preference.PreferenceItem.CustomPreference( - title = stringResource(R.string.pref_app_theme), + title = stringResource(MR.strings.pref_app_theme), ) { item -> val value by appThemePref.collectAsState() AppThemePreferenceWidget( @@ -109,7 +108,7 @@ object SettingsAppearanceScreen : SearchableSettings { }, Preference.PreferenceItem.SwitchPreference( pref = amoledPref, - title = stringResource(R.string.pref_dark_theme_pure_black), + title = stringResource(MR.strings.pref_dark_theme_pure_black), enabled = themeMode != ThemeMode.LIGHT, ), ), @@ -161,25 +160,25 @@ object SettingsAppearanceScreen : SearchableSettings { } return Preference.PreferenceGroup( - title = stringResource(R.string.pref_category_display), + title = stringResource(MR.strings.pref_category_display), preferenceItems = listOf( Preference.PreferenceItem.ListPreference( pref = libraryPrefs.bottomNavStyle(), - title = stringResource(R.string.pref_bottom_nav_style), + title = stringResource(MR.strings.pref_bottom_nav_style), entries = mapOf( - 0 to stringResource(R.string.pref_bottom_nav_no_history), - 1 to stringResource(R.string.pref_bottom_nav_no_updates), - 2 to stringResource(R.string.pref_bottom_nav_no_manga), + 0 to stringResource(MR.strings.pref_bottom_nav_no_history), + 1 to stringResource(MR.strings.pref_bottom_nav_no_updates), + 2 to stringResource(MR.strings.pref_bottom_nav_no_manga), ), ), Preference.PreferenceItem.SwitchPreference( pref = libraryPrefs.isDefaultHomeTabLibraryManga(), - title = stringResource(R.string.pref_default_home_tab_library), + title = stringResource(MR.strings.pref_default_home_tab_library), enabled = libraryPrefs.bottomNavStyle().get() != 2, ), Preference.PreferenceItem.BasicListPreference( value = currentLanguage, - title = stringResource(R.string.pref_app_language), + title = stringResource(MR.strings.pref_app_language), entries = langs, onValueChanged = { newValue -> currentLanguage = newValue @@ -188,28 +187,28 @@ object SettingsAppearanceScreen : SearchableSettings { ), Preference.PreferenceItem.ListPreference( pref = uiPreferences.tabletUiMode(), - title = stringResource(R.string.pref_tablet_ui_mode), - entries = TabletUiMode.entries.associateWith { stringResource(it.titleResId) }, + title = stringResource(MR.strings.pref_tablet_ui_mode), + entries = TabletUiMode.entries.associateWith { stringResource(it.titleRes) }, onValueChanged = { - context.toast(R.string.requires_app_restart) + context.stringResource(MR.strings.requires_app_restart) true }, ), Preference.PreferenceItem.ListPreference( pref = uiPreferences.dateFormat(), - title = stringResource(R.string.pref_date_format), + title = stringResource(MR.strings.pref_date_format), entries = DateFormats .associateWith { val formattedDate = UiPreferences.dateFormat(it).format(now) - "${it.ifEmpty { stringResource(R.string.label_default) }} ($formattedDate)" + "${it.ifEmpty { stringResource(MR.strings.label_default) }} ($formattedDate)" }, ), Preference.PreferenceItem.SwitchPreference( pref = uiPreferences.relativeTime(), - title = stringResource(R.string.pref_relative_format), + title = stringResource(MR.strings.pref_relative_format), subtitle = stringResource( - R.string.pref_relative_format_summary, - stringResource(R.string.relative_time_today), + MR.strings.pref_relative_format_summary, + stringResource(MR.strings.relative_time_today), formattedNow, ), ), @@ -236,7 +235,7 @@ object SettingsAppearanceScreen : SearchableSettings { } langs.sortBy { it.second } - langs.add(0, Pair("", context.getString(R.string.label_default))) + langs.add(0, Pair("", context.stringResource(MR.strings.label_default))) return langs.toMap() } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBrowseScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBrowseScreen.kt index 156a8db6ad..c066825a6a 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBrowseScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBrowseScreen.kt @@ -1,16 +1,16 @@ package eu.kanade.presentation.more.settings.screen -import androidx.annotation.StringRes import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.fragment.app.FragmentActivity import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.presentation.more.settings.Preference -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.authenticate +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -18,8 +18,7 @@ object SettingsBrowseScreen : SearchableSettings { @ReadOnlyComposable @Composable - @StringRes - override fun getTitleRes() = R.string.browse + override fun getTitleRes() = MR.strings.browse @Composable override fun getPreferences(): List { @@ -27,33 +26,33 @@ object SettingsBrowseScreen : SearchableSettings { val sourcePreferences = remember { Injekt.get() } return listOf( Preference.PreferenceGroup( - title = stringResource(R.string.label_sources), + title = stringResource(MR.strings.label_sources), preferenceItems = listOf( Preference.PreferenceItem.SwitchPreference( pref = sourcePreferences.hideInAnimeLibraryItems(), - title = stringResource(R.string.pref_hide_in_anime_library_items), + title = stringResource(MR.strings.pref_hide_in_anime_library_items), ), Preference.PreferenceItem.SwitchPreference( pref = sourcePreferences.hideInMangaLibraryItems(), - title = stringResource(R.string.pref_hide_in_manga_library_items), + title = stringResource(MR.strings.pref_hide_in_manga_library_items), ), ), ), Preference.PreferenceGroup( - title = stringResource(R.string.pref_category_nsfw_content), + title = stringResource(MR.strings.pref_category_nsfw_content), preferenceItems = listOf( Preference.PreferenceItem.SwitchPreference( pref = sourcePreferences.showNsfwSource(), - title = stringResource(R.string.pref_show_nsfw_source), - subtitle = stringResource(R.string.requires_app_restart), + title = stringResource(MR.strings.pref_show_nsfw_source), + subtitle = stringResource(MR.strings.requires_app_restart), onValueChanged = { (context as FragmentActivity).authenticate( - title = context.getString(R.string.pref_category_nsfw_content), + title = context.stringResource(MR.strings.pref_category_nsfw_content), ) }, ), Preference.PreferenceItem.InfoPreference( - stringResource(R.string.parental_controls_info), + stringResource(MR.strings.parental_controls_info), ), ), ), 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 d5ef71d5bf..89f5cdfcd2 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 @@ -9,7 +9,6 @@ import android.text.format.Formatter import android.widget.Toast import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts -import androidx.annotation.StringRes import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.padding @@ -28,7 +27,6 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.core.net.toUri import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow @@ -39,7 +37,6 @@ import eu.kanade.presentation.more.settings.widget.BasePreferenceWidget import eu.kanade.presentation.more.settings.widget.PrefsHorizontalPadding import eu.kanade.presentation.permissions.PermissionRequestHelper import eu.kanade.presentation.util.relativeTimeSpanString -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.backup.BackupCreateJob import eu.kanade.tachiyomi.data.backup.BackupFileValidator import eu.kanade.tachiyomi.data.backup.BackupRestoreJob @@ -50,6 +47,7 @@ import eu.kanade.tachiyomi.util.system.DeviceUtil import eu.kanade.tachiyomi.util.system.copyToClipboard import eu.kanade.tachiyomi.util.system.toast import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchNonCancellable import tachiyomi.core.util.lang.withUIContext import tachiyomi.core.util.system.logcat @@ -63,6 +61,8 @@ import tachiyomi.domain.backup.service.FLAG_SETTINGS import tachiyomi.domain.backup.service.FLAG_TRACK import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.storage.service.StoragePreferences +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -71,8 +71,7 @@ object SettingsDataScreen : SearchableSettings { @ReadOnlyComposable @Composable - @StringRes - override fun getTitleRes() = R.string.label_data_storage + override fun getTitleRes() = MR.strings.label_data_storage @Composable override fun getPreferences(): List { @@ -83,7 +82,7 @@ object SettingsDataScreen : SearchableSettings { return listOf( getStorageLocationPref(storagePreferences = storagePreferences), - Preference.PreferenceItem.InfoPreference(stringResource(R.string.pref_storage_location_info)), + Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.pref_storage_location_info)), getBackupAndRestoreGroup(backupPreferences = backupPreferences), getDataGroup(backupPreferences = backupPreferences), @@ -112,15 +111,15 @@ object SettingsDataScreen : SearchableSettings { } return Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.pref_storage_location), + title = stringResource(MR.strings.pref_storage_location), subtitle = remember(storageDir) { (UniFile.fromUri(context, storageDir.toUri())?.filePath) - } ?: stringResource(R.string.invalid_location, storageDir), + } ?: stringResource(MR.strings.invalid_location, storageDir), onClick = { try { pickStorageLocation.launch(null) } catch (e: ActivityNotFoundException) { - context.toast(R.string.file_picker_error) + context.stringResource(MR.strings.file_picker_error) } }, ) @@ -132,7 +131,7 @@ object SettingsDataScreen : SearchableSettings { val lastAutoBackup by backupPreferences.lastAutoBackupTimestamp().collectAsState() return Preference.PreferenceGroup( - title = stringResource(R.string.label_backup), + title = stringResource(MR.strings.label_backup), preferenceItems = listOf( // Manual actions getCreateBackupPref(), @@ -141,14 +140,14 @@ object SettingsDataScreen : SearchableSettings { // Automatic backups Preference.PreferenceItem.ListPreference( pref = backupPreferences.backupInterval(), - title = stringResource(R.string.pref_backup_interval), + title = stringResource(MR.strings.pref_backup_interval), entries = mapOf( - 0 to stringResource(R.string.off), - 6 to stringResource(R.string.update_6hour), - 12 to stringResource(R.string.update_12hour), - 24 to stringResource(R.string.update_24hour), - 48 to stringResource(R.string.update_48hour), - 168 to stringResource(R.string.update_weekly), + 0 to stringResource(MR.strings.off), + 6 to stringResource(MR.strings.update_6hour), + 12 to stringResource(MR.strings.update_12hour), + 24 to stringResource(MR.strings.update_24hour), + 48 to stringResource(MR.strings.update_48hour), + 168 to stringResource(MR.strings.update_weekly), ), onValueChanged = { BackupCreateJob.setupTask(context, it) @@ -156,8 +155,8 @@ object SettingsDataScreen : SearchableSettings { }, ), Preference.PreferenceItem.InfoPreference( - stringResource(R.string.backup_info) + "\n\n" + - stringResource(R.string.last_auto_backup_info, relativeTimeSpanString(lastAutoBackup)), + stringResource(MR.strings.backup_info) + "\n\n" + + stringResource(MR.strings.last_auto_backup_info, relativeTimeSpanString(lastAutoBackup)), ), ), ) @@ -167,8 +166,8 @@ object SettingsDataScreen : SearchableSettings { private fun getCreateBackupPref(): Preference.PreferenceItem.TextPreference { val navigator = LocalNavigator.currentOrThrow return Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.pref_create_backup), - subtitle = stringResource(R.string.pref_create_backup_summ), + title = stringResource(MR.strings.pref_create_backup), + subtitle = stringResource(MR.strings.pref_create_backup_summ), onClick = { navigator.push(CreateBackupScreen()) }, ) } @@ -183,7 +182,7 @@ object SettingsDataScreen : SearchableSettings { is InvalidRestore -> { AlertDialog( onDismissRequest = onDismissRequest, - title = { Text(text = stringResource(R.string.invalid_backup_file)) }, + title = { Text(text = stringResource(MR.strings.invalid_backup_file)) }, text = { Text(text = listOfNotNull(err.uri, err.message).joinToString("\n\n")) }, dismissButton = { TextButton( @@ -192,12 +191,12 @@ object SettingsDataScreen : SearchableSettings { onDismissRequest() }, ) { - Text(text = stringResource(R.string.action_copy_to_clipboard)) + Text(text = stringResource(MR.strings.action_copy_to_clipboard)) } }, confirmButton = { TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, ) @@ -205,16 +204,16 @@ object SettingsDataScreen : SearchableSettings { is MissingRestoreComponents -> { AlertDialog( onDismissRequest = onDismissRequest, - title = { Text(text = stringResource(R.string.pref_restore_backup)) }, + title = { Text(text = stringResource(MR.strings.pref_restore_backup)) }, text = { Column( modifier = Modifier.verticalScroll(rememberScrollState()), ) { val msg = buildString { - append(stringResource(R.string.backup_restore_content_full)) + append(stringResource(MR.strings.backup_restore_content_full)) if (err.sources.isNotEmpty()) { append("\n\n").append( - stringResource(R.string.backup_restore_missing_sources), + stringResource(MR.strings.backup_restore_missing_sources), ) err.sources.joinTo( this, @@ -224,7 +223,7 @@ object SettingsDataScreen : SearchableSettings { } if (err.trackers.isNotEmpty()) { append("\n\n").append( - stringResource(R.string.backup_restore_missing_trackers), + stringResource(MR.strings.backup_restore_missing_trackers), ) err.trackers.joinTo( this, @@ -243,7 +242,7 @@ object SettingsDataScreen : SearchableSettings { onDismissRequest() }, ) { - Text(text = stringResource(R.string.action_restore)) + Text(text = stringResource(MR.strings.action_restore)) } }, ) @@ -258,13 +257,13 @@ object SettingsDataScreen : SearchableSettings { val intent = super.createIntent(context, input) return Intent.createChooser( intent, - context.getString(R.string.file_select_backup), + context.stringResource(MR.strings.file_select_backup), ) } }, ) { if (it == null) { - context.toast(R.string.file_null_uri_error) + context.stringResource(MR.strings.file_null_uri_error) return@rememberLauncherForActivityResult } @@ -284,17 +283,17 @@ object SettingsDataScreen : SearchableSettings { } return Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.pref_restore_backup), - subtitle = stringResource(R.string.pref_restore_backup_summ), + title = stringResource(MR.strings.pref_restore_backup), + subtitle = stringResource(MR.strings.pref_restore_backup_summ), onClick = { if (!BackupRestoreJob.isRunning(context)) { if (DeviceUtil.isMiui && DeviceUtil.isMiuiOptimizationDisabled()) { - context.toast(R.string.restore_miui_warning, Toast.LENGTH_LONG) + context.stringResource(MR.strings.restore_miui_warning, Toast.LENGTH_LONG) } // no need to catch because it's wrapped with a chooser chooseBackup.launch("*/*") } else { - context.toast(R.string.restore_in_progress) + context.stringResource(MR.strings.restore_in_progress) } }, ) @@ -316,15 +315,15 @@ object SettingsDataScreen : SearchableSettings { val cacheReadableAnimeSize = remember(cacheReadableSizeSema) { episodeCache.readableSize } return Preference.PreferenceGroup( - title = stringResource(R.string.label_data), + title = stringResource(MR.strings.label_data), preferenceItems = listOf( getMangaStorageInfoPref(cacheReadableMangaSize), getAnimeStorageInfoPref(cacheReadableAnimeSize), Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.pref_clear_chapter_cache), + title = stringResource(MR.strings.pref_clear_chapter_cache), subtitle = stringResource( - R.string.used_cache_both, + MR.strings.used_cache_both, cacheReadableAnimeSize, cacheReadableMangaSize, ), @@ -333,37 +332,37 @@ object SettingsDataScreen : SearchableSettings { try { val deletedFiles = chapterCache.clear() + episodeCache.clear() withUIContext { - context.toast(context.getString(R.string.cache_deleted, deletedFiles)) + context.toast(context.stringResource(MR.strings.cache_deleted, deletedFiles)) cacheReadableSizeSema++ } } catch (e: Throwable) { logcat(LogPriority.ERROR, e) - withUIContext { context.toast(R.string.cache_delete_error) } + withUIContext { context.stringResource(MR.strings.cache_delete_error) } } } }, ), Preference.PreferenceItem.SwitchPreference( pref = libraryPreferences.autoClearItemCache(), - title = stringResource(R.string.pref_auto_clear_chapter_cache), + title = stringResource(MR.strings.pref_auto_clear_chapter_cache), ), Preference.PreferenceItem.MultiSelectListPreference( pref = backupPreferences.backupFlags(), enabled = backupInterval != 0, - title = stringResource(R.string.pref_backup_flags), - subtitle = stringResource(R.string.pref_backup_flags_summary), + title = stringResource(MR.strings.pref_backup_flags), + subtitle = stringResource(MR.strings.pref_backup_flags_summary), entries = mapOf( - FLAG_CATEGORIES to stringResource(R.string.general_categories), - FLAG_CHAPTERS to stringResource(R.string.chapters_episodes), - FLAG_HISTORY to stringResource(R.string.history), - FLAG_TRACK to stringResource(R.string.track), - FLAG_SETTINGS to stringResource(R.string.settings), - FLAG_EXT_SETTINGS to stringResource(R.string.extension_settings), - FLAG_EXTENSIONS to stringResource(R.string.label_extensions), + FLAG_CATEGORIES to stringResource(MR.strings.general_categories), + FLAG_CHAPTERS to stringResource(MR.strings.chapters_episodes), + FLAG_HISTORY to stringResource(MR.strings.history), + FLAG_TRACK to stringResource(MR.strings.track), + FLAG_SETTINGS to stringResource(MR.strings.settings), + FLAG_EXT_SETTINGS to stringResource(MR.strings.extension_settings), + FLAG_EXTENSIONS to stringResource(MR.strings.label_extensions), ), onValueChanged = { if (FLAG_SETTINGS in it || FLAG_EXT_SETTINGS in it) { - context.toast(R.string.backup_settings_warning, Toast.LENGTH_LONG) + context.stringResource(MR.strings.backup_settings_warning, Toast.LENGTH_LONG) } true }, @@ -385,10 +384,10 @@ object SettingsDataScreen : SearchableSettings { } return Preference.PreferenceItem.CustomPreference( - title = stringResource(R.string.pref_manga_storage_usage), + title = stringResource(MR.strings.pref_manga_storage_usage), ) { BasePreferenceWidget( - title = stringResource(R.string.pref_manga_storage_usage), + title = stringResource(MR.strings.pref_manga_storage_usage), subcomponent = { // TODO: downloads, SD cards, bar representation?, i18n Box(modifier = Modifier.padding(horizontal = PrefsHorizontalPadding)) { @@ -412,10 +411,10 @@ object SettingsDataScreen : SearchableSettings { } return Preference.PreferenceItem.CustomPreference( - title = stringResource(R.string.pref_anime_storage_usage), + title = stringResource(MR.strings.pref_anime_storage_usage), ) { BasePreferenceWidget( - title = stringResource(R.string.pref_anime_storage_usage), + title = stringResource(MR.strings.pref_anime_storage_usage), subcomponent = { // TODO: downloads, SD cards, bar representation?, i18n Box(modifier = Modifier.padding(horizontal = PrefsHorizontalPadding)) { diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt index 6fd986ed18..6e5f3ab68f 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt @@ -1,6 +1,5 @@ package eu.kanade.presentation.more.settings.screen -import androidx.annotation.StringRes import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.collectAsState @@ -9,19 +8,19 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import androidx.compose.ui.res.pluralStringResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.util.fastMap import eu.kanade.domain.base.BasePreferences import eu.kanade.presentation.category.visualName import eu.kanade.presentation.more.settings.Preference import eu.kanade.presentation.more.settings.widget.TriStateListDialog -import eu.kanade.tachiyomi.R import kotlinx.coroutines.runBlocking import tachiyomi.domain.category.anime.interactor.GetAnimeCategories import tachiyomi.domain.category.manga.interactor.GetMangaCategories import tachiyomi.domain.category.model.Category import tachiyomi.domain.download.service.DownloadPreferences +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.pluralStringResource +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -30,8 +29,7 @@ object SettingsDownloadScreen : SearchableSettings { @ReadOnlyComposable @Composable - @StringRes - override fun getTitleRes() = R.string.pref_category_downloads + override fun getTitleRes() = MR.strings.pref_category_downloads @Composable override fun getPreferences(): List { @@ -50,23 +48,23 @@ object SettingsDownloadScreen : SearchableSettings { return listOf( Preference.PreferenceItem.SwitchPreference( pref = downloadPreferences.downloadOnlyOverWifi(), - title = stringResource(R.string.connected_to_wifi), + title = stringResource(MR.strings.connected_to_wifi), ), Preference.PreferenceItem.SwitchPreference( pref = downloadPreferences.saveChaptersAsCBZ(), - title = stringResource(R.string.save_chapter_as_cbz), + title = stringResource(MR.strings.save_chapter_as_cbz), ), Preference.PreferenceItem.SwitchPreference( pref = downloadPreferences.splitTallImages(), - title = stringResource(R.string.split_tall_images), - subtitle = stringResource(R.string.split_tall_images_summary), + title = stringResource(MR.strings.split_tall_images), + subtitle = stringResource(MR.strings.split_tall_images_summary), ), Preference.PreferenceItem.ListPreference( pref = downloadPreferences.numberOfDownloads(), - title = stringResource(R.string.pref_download_slots), + title = stringResource(MR.strings.pref_download_slots), entries = (1..5).associateWith { it.toString() }, ), - Preference.PreferenceItem.InfoPreference(stringResource(R.string.download_slots_info)), + Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.download_slots_info)), getDeleteChaptersGroup( downloadPreferences = downloadPreferences, categories = allCategories, @@ -90,27 +88,27 @@ object SettingsDownloadScreen : SearchableSettings { categories: List, ): Preference.PreferenceGroup { return Preference.PreferenceGroup( - title = stringResource(R.string.pref_category_delete_chapters), + title = stringResource(MR.strings.pref_category_delete_chapters), preferenceItems = listOf( Preference.PreferenceItem.SwitchPreference( pref = downloadPreferences.removeAfterMarkedAsRead(), - title = stringResource(R.string.pref_remove_after_marked_as_read), + title = stringResource(MR.strings.pref_remove_after_marked_as_read), ), Preference.PreferenceItem.ListPreference( pref = downloadPreferences.removeAfterReadSlots(), - title = stringResource(R.string.pref_remove_after_read), + title = stringResource(MR.strings.pref_remove_after_read), entries = mapOf( - -1 to stringResource(R.string.disabled), - 0 to stringResource(R.string.last_read_chapter), - 1 to stringResource(R.string.second_to_last), - 2 to stringResource(R.string.third_to_last), - 3 to stringResource(R.string.fourth_to_last), - 4 to stringResource(R.string.fifth_to_last), + -1 to stringResource(MR.strings.disabled), + 0 to stringResource(MR.strings.last_read_chapter), + 1 to stringResource(MR.strings.second_to_last), + 2 to stringResource(MR.strings.third_to_last), + 3 to stringResource(MR.strings.fourth_to_last), + 4 to stringResource(MR.strings.fifth_to_last), ), ), Preference.PreferenceItem.SwitchPreference( pref = downloadPreferences.removeBookmarkedChapters(), - title = stringResource(R.string.pref_remove_bookmarked_chapters), + title = stringResource(MR.strings.pref_remove_bookmarked_chapters), ), getExcludedCategoriesPreference( downloadPreferences = downloadPreferences, @@ -127,7 +125,7 @@ object SettingsDownloadScreen : SearchableSettings { ): Preference.PreferenceItem.MultiSelectListPreference { return Preference.PreferenceItem.MultiSelectListPreference( pref = downloadPreferences.removeExcludeCategories(), - title = stringResource(R.string.pref_remove_exclude_categories_manga), + title = stringResource(MR.strings.pref_remove_exclude_categories_manga), entries = categories().associate { it.id.toString() to it.visualName }, ) } @@ -149,8 +147,8 @@ object SettingsDownloadScreen : SearchableSettings { var showAnimeDialog by rememberSaveable { mutableStateOf(false) } if (showAnimeDialog) { TriStateListDialog( - title = stringResource(R.string.anime_categories), - message = stringResource(R.string.pref_download_new_categories_details), + title = stringResource(MR.strings.anime_categories), + message = stringResource(MR.strings.pref_download_new_categories_details), items = allAnimeCategories, initialChecked = includedAnime.mapNotNull { id -> allAnimeCategories.find { it.id.toString() == id } }, initialInversed = excludedAnime.mapNotNull { id -> allAnimeCategories.find { it.id.toString() == id } }, @@ -179,8 +177,8 @@ object SettingsDownloadScreen : SearchableSettings { var showDialog by rememberSaveable { mutableStateOf(false) } if (showDialog) { TriStateListDialog( - title = stringResource(R.string.manga_categories), - message = stringResource(R.string.pref_download_new_categories_details), + title = stringResource(MR.strings.manga_categories), + message = stringResource(MR.strings.pref_download_new_categories_details), items = allCategories, initialChecked = included.mapNotNull { id -> allCategories.find { it.id.toString() == id } }, initialInversed = excluded.mapNotNull { id -> allCategories.find { it.id.toString() == id } }, @@ -199,14 +197,14 @@ object SettingsDownloadScreen : SearchableSettings { } return Preference.PreferenceGroup( - title = stringResource(R.string.pref_category_auto_download), + title = stringResource(MR.strings.pref_category_auto_download), preferenceItems = listOf( Preference.PreferenceItem.SwitchPreference( pref = downloadNewEpisodesPref, - title = stringResource(R.string.pref_download_new_episodes), + title = stringResource(MR.strings.pref_download_new_episodes), ), Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.anime_categories), + title = stringResource(MR.strings.anime_categories), subtitle = getCategoriesLabel( allCategories = allAnimeCategories, included = includedAnime, @@ -217,10 +215,10 @@ object SettingsDownloadScreen : SearchableSettings { ), Preference.PreferenceItem.SwitchPreference( pref = downloadNewChaptersPref, - title = stringResource(R.string.pref_download_new), + title = stringResource(MR.strings.pref_download_new), ), Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.manga_categories), + title = stringResource(MR.strings.manga_categories), subtitle = getCategoriesLabel( allCategories = allCategories, included = included, @@ -238,17 +236,17 @@ object SettingsDownloadScreen : SearchableSettings { downloadPreferences: DownloadPreferences, ): Preference.PreferenceGroup { return Preference.PreferenceGroup( - title = stringResource(R.string.download_ahead), + title = stringResource(MR.strings.download_ahead), preferenceItems = listOf( Preference.PreferenceItem.ListPreference( pref = downloadPreferences.autoDownloadWhileReading(), - title = stringResource(R.string.auto_download_while_reading), + title = stringResource(MR.strings.auto_download_while_reading), entries = listOf(0, 2, 3, 5, 10).associateWith { if (it == 0) { - stringResource(R.string.disabled) + stringResource(MR.strings.disabled) } else { pluralStringResource( - id = R.plurals.next_unread_chapters, + MR.plurals.next_unread_chapters, count = it, it, ) @@ -257,13 +255,13 @@ object SettingsDownloadScreen : SearchableSettings { ), Preference.PreferenceItem.ListPreference( pref = downloadPreferences.autoDownloadWhileWatching(), - title = stringResource(R.string.auto_download_while_watching), + title = stringResource(MR.strings.auto_download_while_watching), entries = listOf(0, 2, 3, 5, 10).associateWith { if (it == 0) { - stringResource(R.string.disabled) + stringResource(MR.strings.disabled) } else { pluralStringResource( - id = R.plurals.next_unseen_episodes, + MR.plurals.next_unseen_episodes, count = it, it, ) @@ -271,7 +269,7 @@ object SettingsDownloadScreen : SearchableSettings { }, ), Preference.PreferenceItem.InfoPreference( - stringResource(R.string.download_ahead_info), + stringResource(MR.strings.download_ahead_info), ), ), ) @@ -305,15 +303,15 @@ object SettingsDownloadScreen : SearchableSettings { .toMap() return Preference.PreferenceGroup( - title = stringResource(R.string.pref_category_external_downloader), + title = stringResource(MR.strings.pref_category_external_downloader), preferenceItems = listOf( Preference.PreferenceItem.SwitchPreference( pref = useExternalDownloader, - title = stringResource(R.string.pref_use_external_downloader), + title = stringResource(MR.strings.pref_use_external_downloader), ), Preference.PreferenceItem.ListPreference( pref = externalDownloaderPreference, - title = stringResource(R.string.pref_external_downloader_selection), + title = stringResource(MR.strings.pref_external_downloader_selection), entries = mapOf("" to "None") + packageNamesMap, ), ), diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt index 6d66749aeb..1304ffe94a 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt @@ -1,6 +1,5 @@ package eu.kanade.presentation.more.settings.screen -import androidx.annotation.StringRes import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.collectAsState @@ -11,8 +10,6 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.pluralStringResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.util.fastMap import androidx.core.content.ContextCompat import cafe.adriel.voyager.navigator.LocalNavigator @@ -21,7 +18,6 @@ import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.category.visualName import eu.kanade.presentation.more.settings.Preference import eu.kanade.presentation.more.settings.widget.TriStateListDialog -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.library.anime.AnimeLibraryUpdateJob import eu.kanade.tachiyomi.data.library.manga.MangaLibraryUpdateJob import eu.kanade.tachiyomi.ui.category.CategoriesTab @@ -39,6 +35,9 @@ import tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_HAS_U import tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_NON_COMPLETED import tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_NON_VIEWED import tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_OUTSIDE_RELEASE_PERIOD +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.pluralStringResource +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -47,8 +46,7 @@ object SettingsLibraryScreen : SearchableSettings { @Composable @ReadOnlyComposable - @StringRes - override fun getTitleRes() = R.string.pref_category_library + override fun getTitleRes() = MR.strings.pref_category_library @Composable override fun getPreferences(): List { @@ -97,18 +95,18 @@ object SettingsLibraryScreen : SearchableSettings { val animeIds = listOf(libraryPreferences.defaultAnimeCategory().defaultValue()) + allAnimeCategories.fastMap { it.id.toInt() } - val mangaLabels = listOf(stringResource(R.string.default_category_summary)) + + val mangaLabels = listOf(stringResource(MR.strings.default_category_summary)) + allCategories.fastMap { it.visualName(context) } - val animeLabels = listOf(stringResource(R.string.default_category_summary)) + + val animeLabels = listOf(stringResource(MR.strings.default_category_summary)) + allAnimeCategories.fastMap { it.visualName(context) } return Preference.PreferenceGroup( - title = stringResource(R.string.general_categories), + title = stringResource(MR.strings.general_categories), preferenceItems = listOf( Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.action_edit_anime_categories), + title = stringResource(MR.strings.action_edit_anime_categories), subtitle = pluralStringResource( - id = R.plurals.num_categories, + MR.plurals.num_categories, count = userAnimeCategoriesCount, userAnimeCategoriesCount, ), @@ -116,15 +114,15 @@ object SettingsLibraryScreen : SearchableSettings { ), Preference.PreferenceItem.ListPreference( pref = libraryPreferences.defaultAnimeCategory(), - title = stringResource(R.string.default_anime_category), + title = stringResource(MR.strings.default_anime_category), subtitle = selectedAnimeCategory?.visualName - ?: stringResource(R.string.default_category_summary), + ?: stringResource(MR.strings.default_category_summary), entries = animeIds.zip(animeLabels).toMap(), ), Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.action_edit_manga_categories), + title = stringResource(MR.strings.action_edit_manga_categories), subtitle = pluralStringResource( - id = R.plurals.num_categories, + MR.plurals.num_categories, count = userCategoriesCount, userCategoriesCount, ), @@ -132,14 +130,14 @@ object SettingsLibraryScreen : SearchableSettings { ), Preference.PreferenceItem.ListPreference( pref = libraryPreferences.defaultMangaCategory(), - title = stringResource(R.string.default_manga_category), + title = stringResource(MR.strings.default_manga_category), subtitle = selectedCategory?.visualName - ?: stringResource(R.string.default_category_summary), + ?: stringResource(MR.strings.default_category_summary), entries = mangaIds.zip(mangaLabels).toMap(), ), Preference.PreferenceItem.SwitchPreference( pref = libraryPreferences.categorizedDisplaySettings(), - title = stringResource(R.string.categorized_display_settings), + title = stringResource(MR.strings.categorized_display_settings), onValueChanged = { if (!it) { scope.launch { @@ -151,7 +149,7 @@ object SettingsLibraryScreen : SearchableSettings { ), Preference.PreferenceItem.SwitchPreference( pref = libraryPreferences.hideHiddenCategoriesSettings(), - title = stringResource(R.string.pref_category_hide_hidden), + title = stringResource(MR.strings.pref_category_hide_hidden), ), ), ) @@ -177,8 +175,8 @@ object SettingsLibraryScreen : SearchableSettings { var showAnimeCategoriesDialog by rememberSaveable { mutableStateOf(false) } if (showAnimeCategoriesDialog) { TriStateListDialog( - title = stringResource(R.string.anime_categories), - message = stringResource(R.string.pref_anime_library_update_categories_details), + title = stringResource(MR.strings.anime_categories), + message = stringResource(MR.strings.pref_anime_library_update_categories_details), items = allAnimeCategories, initialChecked = includedAnime.mapNotNull { id -> allAnimeCategories.find { it.id.toString() == id } }, initialInversed = excludedAnime.mapNotNull { id -> allAnimeCategories.find { it.id.toString() == id } }, @@ -204,8 +202,8 @@ object SettingsLibraryScreen : SearchableSettings { var showMangaCategoriesDialog by rememberSaveable { mutableStateOf(false) } if (showMangaCategoriesDialog) { TriStateListDialog( - title = stringResource(R.string.manga_categories), - message = stringResource(R.string.pref_manga_library_update_categories_details), + title = stringResource(MR.strings.manga_categories), + message = stringResource(MR.strings.pref_manga_library_update_categories_details), items = allMangaCategories, initialChecked = includedManga.mapNotNull { id -> allMangaCategories.find { it.id.toString() == id } }, initialInversed = excludedManga.mapNotNull { id -> allMangaCategories.find { it.id.toString() == id } }, @@ -223,18 +221,18 @@ object SettingsLibraryScreen : SearchableSettings { } return Preference.PreferenceGroup( - title = stringResource(R.string.pref_category_library_update), + title = stringResource(MR.strings.pref_category_library_update), preferenceItems = listOf( Preference.PreferenceItem.ListPreference( pref = autoUpdateIntervalPref, - title = stringResource(R.string.pref_library_update_interval), + title = stringResource(MR.strings.pref_library_update_interval), entries = mapOf( - 0 to stringResource(R.string.update_never), - 12 to stringResource(R.string.update_12hour), - 24 to stringResource(R.string.update_24hour), - 48 to stringResource(R.string.update_48hour), - 72 to stringResource(R.string.update_72hour), - 168 to stringResource(R.string.update_weekly), + 0 to stringResource(MR.strings.update_never), + 12 to stringResource(MR.strings.update_12hour), + 24 to stringResource(MR.strings.update_24hour), + 48 to stringResource(MR.strings.update_48hour), + 72 to stringResource(MR.strings.update_72hour), + 168 to stringResource(MR.strings.update_weekly), ), onValueChanged = { MangaLibraryUpdateJob.setupTask(context, it) @@ -245,12 +243,12 @@ object SettingsLibraryScreen : SearchableSettings { Preference.PreferenceItem.MultiSelectListPreference( pref = libraryPreferences.autoUpdateDeviceRestrictions(), enabled = autoUpdateInterval > 0, - title = stringResource(R.string.pref_library_update_restriction), - subtitle = stringResource(R.string.restrictions), + title = stringResource(MR.strings.pref_library_update_restriction), + subtitle = stringResource(MR.strings.restrictions), entries = mapOf( - DEVICE_ONLY_ON_WIFI to stringResource(R.string.connected_to_wifi), - DEVICE_NETWORK_NOT_METERED to stringResource(R.string.network_not_metered), - DEVICE_CHARGING to stringResource(R.string.charging), + DEVICE_ONLY_ON_WIFI to stringResource(MR.strings.connected_to_wifi), + DEVICE_NETWORK_NOT_METERED to stringResource(MR.strings.network_not_metered), + DEVICE_CHARGING to stringResource(MR.strings.charging), ), onValueChanged = { // Post to event looper to allow the preference to be updated. @@ -262,7 +260,7 @@ object SettingsLibraryScreen : SearchableSettings { }, ), Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.anime_categories), + title = stringResource(MR.strings.anime_categories), subtitle = getCategoriesLabel( allCategories = allAnimeCategories, included = includedAnime, @@ -271,7 +269,7 @@ object SettingsLibraryScreen : SearchableSettings { onClick = { showAnimeCategoriesDialog = true }, ), Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.manga_categories), + title = stringResource(MR.strings.manga_categories), subtitle = getCategoriesLabel( allCategories = allMangaCategories, included = includedManga, @@ -281,28 +279,28 @@ object SettingsLibraryScreen : SearchableSettings { ), Preference.PreferenceItem.SwitchPreference( pref = libraryPreferences.autoUpdateMetadata(), - title = stringResource(R.string.pref_library_update_refresh_metadata), - subtitle = stringResource(R.string.pref_library_update_refresh_metadata_summary), + title = stringResource(MR.strings.pref_library_update_refresh_metadata), + subtitle = stringResource(MR.strings.pref_library_update_refresh_metadata_summary), ), Preference.PreferenceItem.MultiSelectListPreference( pref = libraryPreferences.autoUpdateItemRestrictions(), - title = stringResource(R.string.pref_library_update_manga_restriction), + title = stringResource(MR.strings.pref_library_update_manga_restriction), entries = mapOf( ENTRY_HAS_UNVIEWED to stringResource( - R.string.pref_update_only_completely_read, + MR.strings.pref_update_only_completely_read, ), - ENTRY_NON_VIEWED to stringResource(R.string.pref_update_only_started), + ENTRY_NON_VIEWED to stringResource(MR.strings.pref_update_only_started), ENTRY_NON_COMPLETED to stringResource( - R.string.pref_update_only_non_completed, + MR.strings.pref_update_only_non_completed, ), ENTRY_OUTSIDE_RELEASE_PERIOD to stringResource( - R.string.pref_update_only_in_release_period, + MR.strings.pref_update_only_in_release_period, ), ), ), Preference.PreferenceItem.SwitchPreference( pref = libraryPreferences.newShowUpdatesCount(), - title = stringResource(R.string.pref_library_update_show_tab_badge), + title = stringResource(MR.strings.pref_library_update_show_tab_badge), ), ), ) @@ -313,41 +311,41 @@ object SettingsLibraryScreen : SearchableSettings { libraryPreferences: LibraryPreferences, ): Preference.PreferenceGroup { return Preference.PreferenceGroup( - title = stringResource(R.string.pref_chapter_swipe), + title = stringResource(MR.strings.pref_chapter_swipe), preferenceItems = listOf( Preference.PreferenceItem.ListPreference( pref = libraryPreferences.swipeChapterStartAction(), - title = stringResource(R.string.pref_chapter_swipe_start), + title = stringResource(MR.strings.pref_chapter_swipe_start), entries = mapOf( LibraryPreferences.ChapterSwipeAction.Disabled to stringResource( - R.string.action_disable, + MR.strings.action_disable, ), LibraryPreferences.ChapterSwipeAction.ToggleBookmark to stringResource( - R.string.action_bookmark, + MR.strings.action_bookmark, ), LibraryPreferences.ChapterSwipeAction.ToggleRead to stringResource( - R.string.action_mark_as_read, + MR.strings.action_mark_as_read, ), LibraryPreferences.ChapterSwipeAction.Download to stringResource( - R.string.action_download, + MR.strings.action_download, ), ), ), Preference.PreferenceItem.ListPreference( pref = libraryPreferences.swipeChapterEndAction(), - title = stringResource(R.string.pref_chapter_swipe_end), + title = stringResource(MR.strings.pref_chapter_swipe_end), entries = mapOf( LibraryPreferences.ChapterSwipeAction.Disabled to stringResource( - R.string.action_disable, + MR.strings.action_disable, ), LibraryPreferences.ChapterSwipeAction.ToggleBookmark to stringResource( - R.string.action_bookmark, + MR.strings.action_bookmark, ), LibraryPreferences.ChapterSwipeAction.ToggleRead to stringResource( - R.string.action_mark_as_read, + MR.strings.action_mark_as_read, ), LibraryPreferences.ChapterSwipeAction.Download to stringResource( - R.string.action_download, + MR.strings.action_download, ), ), ), @@ -360,41 +358,41 @@ object SettingsLibraryScreen : SearchableSettings { libraryPreferences: LibraryPreferences, ): Preference.PreferenceGroup { return Preference.PreferenceGroup( - title = stringResource(R.string.pref_episode_swipe), + title = stringResource(MR.strings.pref_episode_swipe), preferenceItems = listOf( Preference.PreferenceItem.ListPreference( pref = libraryPreferences.swipeEpisodeStartAction(), - title = stringResource(R.string.pref_episode_swipe_start), + title = stringResource(MR.strings.pref_episode_swipe_start), entries = mapOf( LibraryPreferences.EpisodeSwipeAction.Disabled to stringResource( - R.string.action_disable, + MR.strings.action_disable, ), LibraryPreferences.EpisodeSwipeAction.ToggleBookmark to stringResource( - R.string.action_bookmark_episode, + MR.strings.action_bookmark_episode, ), LibraryPreferences.EpisodeSwipeAction.ToggleSeen to stringResource( - R.string.action_mark_as_seen, + MR.strings.action_mark_as_seen, ), LibraryPreferences.EpisodeSwipeAction.Download to stringResource( - R.string.action_download, + MR.strings.action_download, ), ), ), Preference.PreferenceItem.ListPreference( pref = libraryPreferences.swipeEpisodeEndAction(), - title = stringResource(R.string.pref_episode_swipe_end), + title = stringResource(MR.strings.pref_episode_swipe_end), entries = mapOf( LibraryPreferences.EpisodeSwipeAction.Disabled to stringResource( - R.string.action_disable, + MR.strings.action_disable, ), LibraryPreferences.EpisodeSwipeAction.ToggleBookmark to stringResource( - R.string.action_bookmark_episode, + MR.strings.action_bookmark_episode, ), LibraryPreferences.EpisodeSwipeAction.ToggleSeen to stringResource( - R.string.action_mark_as_seen, + MR.strings.action_mark_as_seen, ), LibraryPreferences.EpisodeSwipeAction.Download to stringResource( - R.string.action_download, + MR.strings.action_download, ), ), ), diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsMainScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsMainScreen.kt index 6d8b7f1ac5..d66b0163e2 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsMainScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsMainScreen.kt @@ -1,6 +1,5 @@ package eu.kanade.presentation.more.settings.screen -import androidx.annotation.StringRes import androidx.compose.foundation.background import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.padding @@ -10,7 +9,6 @@ import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.ChromeReaderMode -import androidx.compose.material.icons.outlined.ChromeReaderMode import androidx.compose.material.icons.outlined.Code import androidx.compose.material.icons.outlined.CollectionsBookmark import androidx.compose.material.icons.outlined.Explore @@ -35,21 +33,22 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.core.graphics.ColorUtils import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.currentOrThrow +import dev.icerock.moko.resources.StringResource import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.more.settings.screen.about.AboutScreen import eu.kanade.presentation.more.settings.widget.TextPreferenceWidget import eu.kanade.presentation.util.LocalBackPress import eu.kanade.presentation.util.Screen -import eu.kanade.tachiyomi.R import kotlinx.collections.immutable.persistentListOf +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import cafe.adriel.voyager.core.screen.Screen as VoyagerScreen object SettingsMainScreen : Screen() { @@ -85,13 +84,13 @@ object SettingsMainScreen : Screen() { topBarScrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(topBarState), topBar = { scrollBehavior -> AppBar( - title = stringResource(R.string.label_settings), + title = stringResource(MR.strings.label_settings), navigateUp = backPress::invoke, actions = { AppBarActions( persistentListOf( AppBar.Action( - title = stringResource(R.string.action_search), + title = stringResource(MR.strings.action_search), icon = Icons.Outlined.Search, onClick = { navigator.navigate(SettingsSearchScreen(), twoPane) }, ), @@ -167,79 +166,78 @@ object SettingsMainScreen : Screen() { } private data class Item( - @StringRes val titleRes: Int, - @StringRes val subtitleRes: Int, - val formatSubtitle: @Composable () -> String = { stringResource(subtitleRes) }, + val titleRes: StringResource, + val subtitleRes: StringResource? = null, + val formatSubtitle: @Composable () -> String? = { subtitleRes?.let { stringResource(it) } }, val icon: ImageVector, val screen: VoyagerScreen, ) private val items = listOf( Item( - titleRes = R.string.pref_category_appearance, - subtitleRes = R.string.pref_appearance_summary, + titleRes = MR.strings.pref_category_appearance, + subtitleRes = MR.strings.pref_appearance_summary, icon = Icons.Outlined.Palette, screen = SettingsAppearanceScreen, ), Item( - titleRes = R.string.pref_category_library, - subtitleRes = R.string.pref_library_summary, + titleRes = MR.strings.pref_category_library, + subtitleRes = MR.strings.pref_library_summary, icon = Icons.Outlined.CollectionsBookmark, screen = SettingsLibraryScreen, ), Item( - titleRes = R.string.pref_category_reader, - subtitleRes = R.string.pref_reader_summary, + titleRes = MR.strings.pref_category_reader, + subtitleRes = MR.strings.pref_reader_summary, icon = Icons.AutoMirrored.Outlined.ChromeReaderMode, screen = SettingsReaderScreen, ), Item( - titleRes = R.string.pref_category_player, - subtitleRes = R.string.pref_player_summary, + titleRes = MR.strings.pref_category_player, + subtitleRes = MR.strings.pref_player_summary, icon = Icons.Outlined.PlayCircleOutline, screen = SettingsPlayerScreen, ), Item( - titleRes = R.string.pref_category_downloads, - subtitleRes = R.string.pref_downloads_summary, + titleRes = MR.strings.pref_category_downloads, + subtitleRes = MR.strings.pref_downloads_summary, icon = Icons.Outlined.GetApp, screen = SettingsDownloadScreen, ), Item( - titleRes = R.string.pref_category_tracking, - subtitleRes = R.string.pref_tracking_summary, + titleRes = MR.strings.pref_category_tracking, + subtitleRes = MR.strings.pref_tracking_summary, icon = Icons.Outlined.Sync, screen = SettingsTrackingScreen, ), Item( - titleRes = R.string.browse, - subtitleRes = R.string.pref_browse_summary, + titleRes = MR.strings.browse, + subtitleRes = MR.strings.pref_browse_summary, icon = Icons.Outlined.Explore, screen = SettingsBrowseScreen, ), Item( - titleRes = R.string.label_data_storage, - subtitleRes = R.string.pref_backup_summary, + titleRes = MR.strings.label_data_storage, + subtitleRes = MR.strings.pref_backup_summary, icon = Icons.Outlined.Storage, screen = SettingsDataScreen, ), Item( - titleRes = R.string.pref_category_security, - subtitleRes = R.string.pref_security_summary, + titleRes = MR.strings.pref_category_security, + subtitleRes = MR.strings.pref_security_summary, icon = Icons.Outlined.Security, screen = SettingsSecurityScreen, ), Item( - titleRes = R.string.pref_category_advanced, - subtitleRes = R.string.pref_advanced_summary, + titleRes = MR.strings.pref_category_advanced, + subtitleRes = MR.strings.pref_advanced_summary, icon = Icons.Outlined.Code, screen = SettingsAdvancedScreen, ), Item( - titleRes = R.string.pref_category_about, - subtitleRes = 0, + titleRes = MR.strings.pref_category_about, formatSubtitle = { - "${stringResource(R.string.app_name)} ${AboutScreen.getVersionName( + "${stringResource(MR.strings.app_name)} ${AboutScreen.getVersionName( withBuildDate = false, )}" }, diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsPlayerScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsPlayerScreen.kt index 0f46791401..7c60a86715 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsPlayerScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsPlayerScreen.kt @@ -2,7 +2,6 @@ package eu.kanade.presentation.more.settings.screen import android.content.pm.ActivityInfo import android.os.Build -import androidx.annotation.StringRes import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material3.AlertDialog @@ -19,12 +18,10 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.domain.base.BasePreferences import eu.kanade.presentation.more.settings.Preference -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.player.JUST_PLAYER import eu.kanade.tachiyomi.ui.player.MPV_PLAYER import eu.kanade.tachiyomi.ui.player.MPV_REMOTE @@ -37,7 +34,9 @@ import eu.kanade.tachiyomi.ui.player.WEB_VIDEO_CASTER import eu.kanade.tachiyomi.ui.player.X_PLAYER import eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences import kotlinx.collections.immutable.toImmutableList +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.WheelTextPicker +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -46,8 +45,7 @@ object SettingsPlayerScreen : SearchableSettings { @ReadOnlyComposable @Composable - @StringRes - override fun getTitleRes() = R.string.pref_category_player + override fun getTitleRes() = MR.strings.pref_category_player @Composable override fun getPreferences(): List { @@ -58,20 +56,20 @@ object SettingsPlayerScreen : SearchableSettings { return listOfNotNull( Preference.PreferenceItem.ListPreference( pref = playerPreferences.progressPreference(), - title = stringResource(R.string.pref_progress_mark_as_seen), + title = stringResource(MR.strings.pref_progress_mark_as_seen), entries = mapOf( - 1.00F to stringResource(R.string.pref_progress_100), - 0.95F to stringResource(R.string.pref_progress_95), - 0.90F to stringResource(R.string.pref_progress_90), - 0.85F to stringResource(R.string.pref_progress_85), - 0.80F to stringResource(R.string.pref_progress_80), - 0.75F to stringResource(R.string.pref_progress_75), - 0.70F to stringResource(R.string.pref_progress_70), + 1.00F to stringResource(MR.strings.pref_progress_100), + 0.95F to stringResource(MR.strings.pref_progress_95), + 0.90F to stringResource(MR.strings.pref_progress_90), + 0.85F to stringResource(MR.strings.pref_progress_85), + 0.80F to stringResource(MR.strings.pref_progress_80), + 0.75F to stringResource(MR.strings.pref_progress_75), + 0.70F to stringResource(MR.strings.pref_progress_70), ), ), Preference.PreferenceItem.SwitchPreference( pref = playerPreferences.preserveWatchingPosition(), - title = stringResource(R.string.pref_preserve_watching_position), + title = stringResource(MR.strings.pref_preserve_watching_position), ), getInternalPlayerGroup(playerPreferences = playerPreferences), getVolumeAndBrightnessGroup(playerPreferences = playerPreferences), @@ -92,20 +90,20 @@ object SettingsPlayerScreen : SearchableSettings { val navigator = LocalNavigator.currentOrThrow return Preference.PreferenceGroup( - title = stringResource(R.string.pref_category_internal_player), + title = stringResource(MR.strings.pref_category_internal_player), preferenceItems = listOf( Preference.PreferenceItem.SwitchPreference( pref = playerFullscreen, - title = stringResource(R.string.pref_player_fullscreen), + title = stringResource(MR.strings.pref_player_fullscreen), enabled = Build.VERSION.SDK_INT >= Build.VERSION_CODES.P, ), Preference.PreferenceItem.SwitchPreference( pref = playerHideControls, - title = stringResource(R.string.pref_player_hide_controls), + title = stringResource(MR.strings.pref_player_hide_controls), ), Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.pref_category_player_advanced), - subtitle = stringResource(R.string.pref_category_player_advanced_subtitle), + title = stringResource(MR.strings.pref_category_player_advanced), + subtitle = stringResource(MR.strings.pref_category_player_advanced_subtitle), onClick = { navigator.push(AdvancedPlayerSettingsScreen) }, ), ), @@ -119,19 +117,19 @@ object SettingsPlayerScreen : SearchableSettings { val rememberPlayerVolume = playerPreferences.rememberPlayerVolume() return Preference.PreferenceGroup( - title = stringResource(R.string.pref_category_volume_brightness), + title = stringResource(MR.strings.pref_category_volume_brightness), preferenceItems = listOf( Preference.PreferenceItem.SwitchPreference( pref = enableVolumeBrightnessGestures, - title = stringResource(R.string.enable_volume_brightness_gestures), + title = stringResource(MR.strings.enable_volume_brightness_gestures), ), Preference.PreferenceItem.SwitchPreference( pref = rememberPlayerBrightness, - title = stringResource(R.string.pref_remember_brightness), + title = stringResource(MR.strings.pref_remember_brightness), ), Preference.PreferenceItem.SwitchPreference( pref = rememberPlayerVolume, - title = stringResource(R.string.pref_remember_volume), + title = stringResource(MR.strings.pref_remember_volume), ), ), ) @@ -145,66 +143,66 @@ object SettingsPlayerScreen : SearchableSettings { val defaultPlayerOrientationLandscape = playerPreferences.defaultPlayerOrientationLandscape() return Preference.PreferenceGroup( - title = stringResource(R.string.pref_category_player_orientation), + title = stringResource(MR.strings.pref_category_player_orientation), preferenceItems = listOf( Preference.PreferenceItem.ListPreference( pref = defaultPlayerOrientationType, - title = stringResource(R.string.pref_default_player_orientation), + title = stringResource(MR.strings.pref_default_player_orientation), entries = mapOf( ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR to stringResource( - R.string.rotation_free, + MR.strings.rotation_free, ), ActivityInfo.SCREEN_ORIENTATION_PORTRAIT to stringResource( - R.string.rotation_portrait, + MR.strings.rotation_portrait, ), ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT to stringResource( - R.string.rotation_reverse_portrait, + MR.strings.rotation_reverse_portrait, ), ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE to stringResource( - R.string.rotation_landscape, + MR.strings.rotation_landscape, ), ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE to stringResource( - R.string.rotation_reverse_landscape, + MR.strings.rotation_reverse_landscape, ), ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT to stringResource( - R.string.rotation_sensor_portrait, + MR.strings.rotation_sensor_portrait, ), ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE to stringResource( - R.string.rotation_sensor_landscape, + MR.strings.rotation_sensor_landscape, ), ), ), Preference.PreferenceItem.SwitchPreference( pref = adjustOrientationVideoDimensions, - title = stringResource(R.string.pref_adjust_orientation_video_dimensions), + title = stringResource(MR.strings.pref_adjust_orientation_video_dimensions), ), Preference.PreferenceItem.ListPreference( pref = defaultPlayerOrientationPortrait, - title = stringResource(R.string.pref_default_portrait_orientation), + title = stringResource(MR.strings.pref_default_portrait_orientation), entries = mapOf( ActivityInfo.SCREEN_ORIENTATION_PORTRAIT to stringResource( - R.string.rotation_portrait, + MR.strings.rotation_portrait, ), ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT to stringResource( - R.string.rotation_reverse_portrait, + MR.strings.rotation_reverse_portrait, ), ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT to stringResource( - R.string.rotation_sensor_portrait, + MR.strings.rotation_sensor_portrait, ), ), ), Preference.PreferenceItem.ListPreference( pref = defaultPlayerOrientationLandscape, - title = stringResource(R.string.pref_default_landscape_orientation), + title = stringResource(MR.strings.pref_default_landscape_orientation), entries = mapOf( ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE to stringResource( - R.string.rotation_landscape, + MR.strings.rotation_landscape, ), ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE to stringResource( - R.string.rotation_reverse_landscape, + MR.strings.rotation_reverse_landscape, ), ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE to stringResource( - R.string.rotation_sensor_landscape, + MR.strings.rotation_sensor_landscape, ), ), ), @@ -242,66 +240,66 @@ object SettingsPlayerScreen : SearchableSettings { val isAniSkipEnabled by enableAniSkip.collectAsState() return Preference.PreferenceGroup( - title = stringResource(R.string.pref_category_player_seeking), + title = stringResource(MR.strings.pref_category_player_seeking), preferenceItems = listOf( Preference.PreferenceItem.SwitchPreference( pref = enableHorizontalSeekGesture, - title = stringResource(R.string.enable_horizontal_seek_gesture), + title = stringResource(MR.strings.enable_horizontal_seek_gesture), ), Preference.PreferenceItem.TextPreference( - title = stringResource(R.string.pref_default_intro_length), + title = stringResource(MR.strings.pref_default_intro_length), subtitle = "${defaultSkipIntroLength}s", onClick = { showDialog = true }, ), Preference.PreferenceItem.ListPreference( pref = skipLengthPreference, - title = stringResource(R.string.pref_skip_length), + title = stringResource(MR.strings.pref_skip_length), entries = mapOf( - 30 to stringResource(R.string.pref_skip_30), - 20 to stringResource(R.string.pref_skip_20), - 10 to stringResource(R.string.pref_skip_10), - 5 to stringResource(R.string.pref_skip_5), - 3 to stringResource(R.string.pref_skip_3), - 0 to stringResource(R.string.pref_skip_disable), + 30 to stringResource(MR.strings.pref_skip_30), + 20 to stringResource(MR.strings.pref_skip_20), + 10 to stringResource(MR.strings.pref_skip_10), + 5 to stringResource(MR.strings.pref_skip_5), + 3 to stringResource(MR.strings.pref_skip_3), + 0 to stringResource(MR.strings.pref_skip_disable), ), ), Preference.PreferenceItem.SwitchPreference( pref = playerSmoothSeek, - title = stringResource(R.string.pref_player_smooth_seek), - subtitle = stringResource(R.string.pref_player_smooth_seek_summary), + title = stringResource(MR.strings.pref_player_smooth_seek), + subtitle = stringResource(MR.strings.pref_player_smooth_seek_summary), ), Preference.PreferenceItem.SwitchPreference( pref = mediaChapterSeek, - title = stringResource(R.string.pref_media_control_chapter_seeking), - subtitle = stringResource(R.string.pref_media_control_chapter_seeking_summary), + title = stringResource(MR.strings.pref_media_control_chapter_seeking), + subtitle = stringResource(MR.strings.pref_media_control_chapter_seeking_summary), ), Preference.PreferenceItem.InfoPreference( - title = stringResource(R.string.pref_category_player_aniskip_info), + title = stringResource(MR.strings.pref_category_player_aniskip_info), ), Preference.PreferenceItem.SwitchPreference( pref = enableAniSkip, - title = stringResource(R.string.pref_enable_aniskip), + title = stringResource(MR.strings.pref_enable_aniskip), ), Preference.PreferenceItem.SwitchPreference( pref = enableAutoAniSkip, - title = stringResource(R.string.pref_enable_auto_skip_ani_skip), + title = stringResource(MR.strings.pref_enable_auto_skip_ani_skip), enabled = isAniSkipEnabled, ), Preference.PreferenceItem.SwitchPreference( pref = enableNetflixAniSkip, - title = stringResource(R.string.pref_enable_netflix_style_aniskip), + title = stringResource(MR.strings.pref_enable_netflix_style_aniskip), enabled = isAniSkipEnabled, ), Preference.PreferenceItem.ListPreference( pref = waitingTimeAniSkip, - title = stringResource(R.string.pref_waiting_time_aniskip), + title = stringResource(MR.strings.pref_waiting_time_aniskip), entries = mapOf( - 5 to stringResource(R.string.pref_waiting_time_aniskip_5), - 6 to stringResource(R.string.pref_waiting_time_aniskip_6), - 7 to stringResource(R.string.pref_waiting_time_aniskip_7), - 8 to stringResource(R.string.pref_waiting_time_aniskip_8), - 9 to stringResource(R.string.pref_waiting_time_aniskip_9), - 10 to stringResource(R.string.pref_waiting_time_aniskip_10), + 5 to stringResource(MR.strings.pref_waiting_time_aniskip_5), + 6 to stringResource(MR.strings.pref_waiting_time_aniskip_6), + 7 to stringResource(MR.strings.pref_waiting_time_aniskip_7), + 8 to stringResource(MR.strings.pref_waiting_time_aniskip_8), + 9 to stringResource(MR.strings.pref_waiting_time_aniskip_9), + 10 to stringResource(MR.strings.pref_waiting_time_aniskip_10), ), enabled = isAniSkipEnabled, ), @@ -318,20 +316,20 @@ object SettingsPlayerScreen : SearchableSettings { val isPipEnabled by enablePip.collectAsState() return Preference.PreferenceGroup( - title = stringResource(R.string.pref_category_pip), + title = stringResource(MR.strings.pref_category_pip), preferenceItems = listOf( Preference.PreferenceItem.SwitchPreference( pref = enablePip, - title = stringResource(R.string.pref_enable_pip), + title = stringResource(MR.strings.pref_enable_pip), ), Preference.PreferenceItem.SwitchPreference( pref = pipEpisodeToasts, - title = stringResource(R.string.pref_pip_episode_toasts), + title = stringResource(MR.strings.pref_pip_episode_toasts), enabled = isPipEnabled, ), Preference.PreferenceItem.SwitchPreference( pref = pipOnExit, - title = stringResource(R.string.pref_pip_on_exit), + title = stringResource(MR.strings.pref_pip_on_exit), enabled = isPipEnabled, ), ), @@ -359,15 +357,15 @@ object SettingsPlayerScreen : SearchableSettings { .toMap() return Preference.PreferenceGroup( - title = stringResource(R.string.pref_category_external_player), + title = stringResource(MR.strings.pref_category_external_player), preferenceItems = listOf( Preference.PreferenceItem.SwitchPreference( pref = alwaysUseExternalPlayer, - title = stringResource(R.string.pref_always_use_external_player), + title = stringResource(MR.strings.pref_always_use_external_player), ), Preference.PreferenceItem.ListPreference( pref = externalPlayerPreference, - title = stringResource(R.string.pref_external_player_preference), + title = stringResource(MR.strings.pref_external_player_preference), entries = mapOf("" to "None") + packageNamesMap, ), ), @@ -384,7 +382,7 @@ object SettingsPlayerScreen : SearchableSettings { var newLength = 0 AlertDialog( onDismissRequest = onDismissRequest, - title = { Text(text = stringResource(R.string.pref_intro_length)) }, + title = { Text(text = stringResource(MR.strings.pref_intro_length)) }, text = { Box( modifier = Modifier.fillMaxWidth(), @@ -393,7 +391,7 @@ object SettingsPlayerScreen : SearchableSettings { modifier = Modifier.align(Alignment.Center), items = remember { 1..255 }.map { stringResource( - R.string.seconds_short, + MR.strings.seconds_short, it, ) }.toImmutableList(), @@ -407,12 +405,12 @@ object SettingsPlayerScreen : SearchableSettings { }, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, confirmButton = { TextButton(onClick = { onValueChanged(newLength) }) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, ) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt index 18de3e1a7e..3aad2d0ca0 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt @@ -1,18 +1,17 @@ package eu.kanade.presentation.more.settings.screen import android.os.Build -import androidx.annotation.StringRes import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalView -import androidx.compose.ui.res.stringResource import eu.kanade.presentation.more.settings.Preference -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -22,8 +21,7 @@ object SettingsReaderScreen : SearchableSettings { @ReadOnlyComposable @Composable - @StringRes - override fun getTitleRes() = R.string.pref_category_reader + override fun getTitleRes() = MR.strings.pref_category_reader @Composable override fun getPreferences(): List { @@ -31,43 +29,43 @@ object SettingsReaderScreen : SearchableSettings { return listOf( Preference.PreferenceItem.ListPreference( pref = readerPref.defaultReadingMode(), - title = stringResource(R.string.pref_viewer_type), + title = stringResource(MR.strings.pref_viewer_type), entries = ReadingMode.entries.drop(1) .associate { it.flagValue to stringResource(it.stringRes) }, ), Preference.PreferenceItem.ListPreference( pref = readerPref.doubleTapAnimSpeed(), - title = stringResource(R.string.pref_double_tap_anim_speed), + title = stringResource(MR.strings.pref_double_tap_anim_speed), entries = mapOf( - 1 to stringResource(R.string.double_tap_anim_speed_0), - 500 to stringResource(R.string.double_tap_anim_speed_normal), - 250 to stringResource(R.string.double_tap_anim_speed_fast), + 1 to stringResource(MR.strings.double_tap_anim_speed_0), + 500 to stringResource(MR.strings.double_tap_anim_speed_normal), + 250 to stringResource(MR.strings.double_tap_anim_speed_fast), ), ), Preference.PreferenceItem.SwitchPreference( pref = readerPref.showReadingMode(), - title = stringResource(R.string.pref_show_reading_mode), - subtitle = stringResource(R.string.pref_show_reading_mode_summary), + title = stringResource(MR.strings.pref_show_reading_mode), + subtitle = stringResource(MR.strings.pref_show_reading_mode_summary), ), Preference.PreferenceItem.SwitchPreference( pref = readerPref.showNavigationOverlayOnStart(), - title = stringResource(R.string.pref_show_navigation_mode), - subtitle = stringResource(R.string.pref_show_navigation_mode_summary), + title = stringResource(MR.strings.pref_show_navigation_mode), + subtitle = stringResource(MR.strings.pref_show_navigation_mode_summary), ), Preference.PreferenceItem.SwitchPreference( pref = readerPref.trueColor(), - title = stringResource(R.string.pref_true_color), - subtitle = stringResource(R.string.pref_true_color_summary), + title = stringResource(MR.strings.pref_true_color), + subtitle = stringResource(MR.strings.pref_true_color_summary), enabled = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O, ), Preference.PreferenceItem.SwitchPreference( pref = readerPref.pageTransitions(), - title = stringResource(R.string.pref_page_transitions), + title = stringResource(MR.strings.pref_page_transitions), ), Preference.PreferenceItem.SwitchPreference( pref = readerPref.flashOnPageChange(), - title = stringResource(R.string.pref_flash_page), - subtitle = stringResource(R.string.pref_flash_page_summ), + title = stringResource(MR.strings.pref_flash_page), + subtitle = stringResource(MR.strings.pref_flash_page_summ), ), getDisplayGroup(readerPreferences = readerPref), getReadingGroup(readerPreferences = readerPref), @@ -83,42 +81,42 @@ object SettingsReaderScreen : SearchableSettings { val fullscreenPref = readerPreferences.fullscreen() val fullscreen by fullscreenPref.collectAsState() return Preference.PreferenceGroup( - title = stringResource(R.string.pref_category_display), + title = stringResource(MR.strings.pref_category_display), preferenceItems = listOf( Preference.PreferenceItem.ListPreference( pref = readerPreferences.defaultOrientationType(), - title = stringResource(R.string.pref_rotation_type), + title = stringResource(MR.strings.pref_rotation_type), entries = ReaderOrientation.entries.drop(1) .associate { it.flagValue to stringResource(it.stringRes) }, ), Preference.PreferenceItem.ListPreference( pref = readerPreferences.readerTheme(), - title = stringResource(R.string.pref_reader_theme), + title = stringResource(MR.strings.pref_reader_theme), entries = mapOf( - 1 to stringResource(R.string.black_background), - 2 to stringResource(R.string.gray_background), - 0 to stringResource(R.string.white_background), - 3 to stringResource(R.string.automatic_background), + 1 to stringResource(MR.strings.black_background), + 2 to stringResource(MR.strings.gray_background), + 0 to stringResource(MR.strings.white_background), + 3 to stringResource(MR.strings.automatic_background), ), ), Preference.PreferenceItem.SwitchPreference( pref = fullscreenPref, - title = stringResource(R.string.pref_fullscreen), + title = stringResource(MR.strings.pref_fullscreen), ), Preference.PreferenceItem.SwitchPreference( pref = readerPreferences.cutoutShort(), - title = stringResource(R.string.pref_cutout_short), + title = stringResource(MR.strings.pref_cutout_short), enabled = fullscreen && Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && LocalView.current.rootWindowInsets?.displayCutout != null, // has cutout ), Preference.PreferenceItem.SwitchPreference( pref = readerPreferences.keepScreenOn(), - title = stringResource(R.string.pref_keep_screen_on), + title = stringResource(MR.strings.pref_keep_screen_on), ), Preference.PreferenceItem.SwitchPreference( pref = readerPreferences.showPageNumber(), - title = stringResource(R.string.pref_show_page_number), + title = stringResource(MR.strings.pref_show_page_number), ), ), ) @@ -127,27 +125,27 @@ object SettingsReaderScreen : SearchableSettings { @Composable private fun getReadingGroup(readerPreferences: ReaderPreferences): Preference.PreferenceGroup { return Preference.PreferenceGroup( - title = stringResource(R.string.pref_category_reading), + title = stringResource(MR.strings.pref_category_reading), preferenceItems = listOf( Preference.PreferenceItem.SwitchPreference( pref = readerPreferences.skipRead(), - title = stringResource(R.string.pref_skip_read_chapters), + title = stringResource(MR.strings.pref_skip_read_chapters), ), Preference.PreferenceItem.SwitchPreference( pref = readerPreferences.skipFiltered(), - title = stringResource(R.string.pref_skip_filtered_chapters), + title = stringResource(MR.strings.pref_skip_filtered_chapters), ), Preference.PreferenceItem.SwitchPreference( pref = readerPreferences.skipDupe(), - title = stringResource(R.string.pref_skip_dupe_chapters), + title = stringResource(MR.strings.pref_skip_dupe_chapters), ), Preference.PreferenceItem.SwitchPreference( pref = readerPreferences.alwaysShowChapterTransition(), - title = stringResource(R.string.pref_always_show_chapter_transition), + title = stringResource(MR.strings.pref_always_show_chapter_transition), ), Preference.PreferenceItem.SwitchPreference( pref = readerPreferences.preserveReadingPosition(), - title = stringResource(R.string.pref_preserve_reading_position), + title = stringResource(MR.strings.pref_preserve_reading_position), ), ), ) @@ -166,63 +164,63 @@ object SettingsReaderScreen : SearchableSettings { val rotateToFit by rotateToFitPref.collectAsState() return Preference.PreferenceGroup( - title = stringResource(R.string.pager_viewer), + title = stringResource(MR.strings.pager_viewer), preferenceItems = listOf( Preference.PreferenceItem.ListPreference( pref = navModePref, - title = stringResource(R.string.pref_viewer_nav), + title = stringResource(MR.strings.pref_viewer_nav), entries = ReaderPreferences.TapZones .mapIndexed { index, it -> index to stringResource(it) } .toMap(), ), Preference.PreferenceItem.ListPreference( pref = readerPreferences.pagerNavInverted(), - title = stringResource(R.string.pref_read_with_tapping_inverted), + title = stringResource(MR.strings.pref_read_with_tapping_inverted), entries = mapOf( - ReaderPreferences.TappingInvertMode.NONE to stringResource(R.string.none), + ReaderPreferences.TappingInvertMode.NONE to stringResource(MR.strings.none), ReaderPreferences.TappingInvertMode.HORIZONTAL to stringResource( - R.string.tapping_inverted_horizontal, + MR.strings.tapping_inverted_horizontal, ), ReaderPreferences.TappingInvertMode.VERTICAL to stringResource( - R.string.tapping_inverted_vertical, + MR.strings.tapping_inverted_vertical, ), ReaderPreferences.TappingInvertMode.BOTH to stringResource( - R.string.tapping_inverted_both, + MR.strings.tapping_inverted_both, ), ), enabled = navMode != 5, ), Preference.PreferenceItem.ListPreference( pref = imageScaleTypePref, - title = stringResource(R.string.pref_image_scale_type), + title = stringResource(MR.strings.pref_image_scale_type), entries = ReaderPreferences.ImageScaleType .mapIndexed { index, it -> index + 1 to stringResource(it) } .toMap(), ), Preference.PreferenceItem.ListPreference( pref = readerPreferences.zoomStart(), - title = stringResource(R.string.pref_zoom_start), + title = stringResource(MR.strings.pref_zoom_start), entries = ReaderPreferences.ZoomStart .mapIndexed { index, it -> index + 1 to stringResource(it) } .toMap(), ), Preference.PreferenceItem.SwitchPreference( pref = readerPreferences.cropBorders(), - title = stringResource(R.string.pref_crop_borders), + title = stringResource(MR.strings.pref_crop_borders), ), Preference.PreferenceItem.SwitchPreference( pref = readerPreferences.landscapeZoom(), - title = stringResource(R.string.pref_landscape_zoom), + title = stringResource(MR.strings.pref_landscape_zoom), enabled = imageScaleType == 1, ), Preference.PreferenceItem.SwitchPreference( pref = readerPreferences.navigateToPan(), - title = stringResource(R.string.pref_navigate_pan), + title = stringResource(MR.strings.pref_navigate_pan), enabled = navMode != 5, ), Preference.PreferenceItem.SwitchPreference( pref = dualPageSplitPref, - title = stringResource(R.string.pref_dual_page_split), + title = stringResource(MR.strings.pref_dual_page_split), onValueChanged = { rotateToFitPref.set(false) true @@ -230,13 +228,13 @@ object SettingsReaderScreen : SearchableSettings { ), Preference.PreferenceItem.SwitchPreference( pref = readerPreferences.dualPageInvertPaged(), - title = stringResource(R.string.pref_dual_page_invert), - subtitle = stringResource(R.string.pref_dual_page_invert_summary), + title = stringResource(MR.strings.pref_dual_page_invert), + subtitle = stringResource(MR.strings.pref_dual_page_invert_summary), enabled = dualPageSplit, ), Preference.PreferenceItem.SwitchPreference( pref = rotateToFitPref, - title = stringResource(R.string.pref_page_rotate), + title = stringResource(MR.strings.pref_page_rotate), onValueChanged = { dualPageSplitPref.set(false) true @@ -244,7 +242,7 @@ object SettingsReaderScreen : SearchableSettings { ), Preference.PreferenceItem.SwitchPreference( pref = readerPreferences.dualPageRotateToFitInvert(), - title = stringResource(R.string.pref_page_rotate_invert), + title = stringResource(MR.strings.pref_page_rotate_invert), enabled = rotateToFit, ), ), @@ -266,35 +264,35 @@ object SettingsReaderScreen : SearchableSettings { val webtoonSidePadding by webtoonSidePaddingPref.collectAsState() return Preference.PreferenceGroup( - title = stringResource(R.string.webtoon_viewer), + title = stringResource(MR.strings.webtoon_viewer), preferenceItems = listOf( Preference.PreferenceItem.ListPreference( pref = navModePref, - title = stringResource(R.string.pref_viewer_nav), + title = stringResource(MR.strings.pref_viewer_nav), entries = ReaderPreferences.TapZones .mapIndexed { index, it -> index to stringResource(it) } .toMap(), ), Preference.PreferenceItem.ListPreference( pref = readerPreferences.webtoonNavInverted(), - title = stringResource(R.string.pref_read_with_tapping_inverted), + title = stringResource(MR.strings.pref_read_with_tapping_inverted), entries = mapOf( - ReaderPreferences.TappingInvertMode.NONE to stringResource(R.string.none), + ReaderPreferences.TappingInvertMode.NONE to stringResource(MR.strings.none), ReaderPreferences.TappingInvertMode.HORIZONTAL to stringResource( - R.string.tapping_inverted_horizontal, + MR.strings.tapping_inverted_horizontal, ), ReaderPreferences.TappingInvertMode.VERTICAL to stringResource( - R.string.tapping_inverted_vertical, + MR.strings.tapping_inverted_vertical, ), ReaderPreferences.TappingInvertMode.BOTH to stringResource( - R.string.tapping_inverted_both, + MR.strings.tapping_inverted_both, ), ), enabled = navMode != 5, ), Preference.PreferenceItem.SliderPreference( value = webtoonSidePadding, - title = stringResource(R.string.pref_webtoon_side_padding), + title = stringResource(MR.strings.pref_webtoon_side_padding), subtitle = numberFormat.format(webtoonSidePadding / 100f), min = ReaderPreferences.WEBTOON_PADDING_MIN, max = ReaderPreferences.WEBTOON_PADDING_MAX, @@ -305,29 +303,29 @@ object SettingsReaderScreen : SearchableSettings { ), Preference.PreferenceItem.ListPreference( pref = readerPreferences.readerHideThreshold(), - title = stringResource(R.string.pref_hide_threshold), + title = stringResource(MR.strings.pref_hide_threshold), entries = mapOf( ReaderPreferences.ReaderHideThreshold.HIGHEST to stringResource( - R.string.pref_highest, + MR.strings.pref_highest, ), ReaderPreferences.ReaderHideThreshold.HIGH to stringResource( - R.string.pref_high, + MR.strings.pref_high, ), ReaderPreferences.ReaderHideThreshold.LOW to stringResource( - R.string.pref_low, + MR.strings.pref_low, ), ReaderPreferences.ReaderHideThreshold.LOWEST to stringResource( - R.string.pref_lowest, + MR.strings.pref_lowest, ), ), ), Preference.PreferenceItem.SwitchPreference( pref = readerPreferences.cropBordersWebtoon(), - title = stringResource(R.string.pref_crop_borders), + title = stringResource(MR.strings.pref_crop_borders), ), Preference.PreferenceItem.SwitchPreference( pref = dualPageSplitPref, - title = stringResource(R.string.pref_dual_page_split), + title = stringResource(MR.strings.pref_dual_page_split), onValueChanged = { rotateToFitPref.set(false) true @@ -335,13 +333,13 @@ object SettingsReaderScreen : SearchableSettings { ), Preference.PreferenceItem.SwitchPreference( pref = readerPreferences.dualPageInvertWebtoon(), - title = stringResource(R.string.pref_dual_page_invert), - subtitle = stringResource(R.string.pref_dual_page_invert_summary), + title = stringResource(MR.strings.pref_dual_page_invert), + subtitle = stringResource(MR.strings.pref_dual_page_invert_summary), enabled = dualPageSplit, ), Preference.PreferenceItem.SwitchPreference( pref = rotateToFitPref, - title = stringResource(R.string.pref_page_rotate), + title = stringResource(MR.strings.pref_page_rotate), onValueChanged = { dualPageSplitPref.set(false) true @@ -349,12 +347,12 @@ object SettingsReaderScreen : SearchableSettings { ), Preference.PreferenceItem.SwitchPreference( pref = readerPreferences.dualPageRotateToFitInvertWebtoon(), - title = stringResource(R.string.pref_page_rotate_invert), + title = stringResource(MR.strings.pref_page_rotate_invert), enabled = rotateToFit, ), Preference.PreferenceItem.SwitchPreference( pref = readerPreferences.webtoonDoubleTapZoomEnabled(), - title = stringResource(R.string.pref_double_tap_zoom), + title = stringResource(MR.strings.pref_double_tap_zoom), enabled = true, ), ), @@ -366,15 +364,15 @@ object SettingsReaderScreen : SearchableSettings { val readWithVolumeKeysPref = readerPreferences.readWithVolumeKeys() val readWithVolumeKeys by readWithVolumeKeysPref.collectAsState() return Preference.PreferenceGroup( - title = stringResource(R.string.pref_reader_navigation), + title = stringResource(MR.strings.pref_reader_navigation), preferenceItems = listOf( Preference.PreferenceItem.SwitchPreference( pref = readWithVolumeKeysPref, - title = stringResource(R.string.pref_read_with_volume_keys), + title = stringResource(MR.strings.pref_read_with_volume_keys), ), Preference.PreferenceItem.SwitchPreference( pref = readerPreferences.readWithVolumeKeysInverted(), - title = stringResource(R.string.pref_read_with_volume_keys_inverted), + title = stringResource(MR.strings.pref_read_with_volume_keys_inverted), enabled = readWithVolumeKeys, ), ), @@ -384,16 +382,16 @@ object SettingsReaderScreen : SearchableSettings { @Composable private fun getActionsGroup(readerPreferences: ReaderPreferences): Preference.PreferenceGroup { return Preference.PreferenceGroup( - title = stringResource(R.string.pref_reader_actions), + title = stringResource(MR.strings.pref_reader_actions), preferenceItems = listOf( Preference.PreferenceItem.SwitchPreference( pref = readerPreferences.readWithLongTap(), - title = stringResource(R.string.pref_read_with_long_tap), + title = stringResource(MR.strings.pref_read_with_long_tap), ), Preference.PreferenceItem.SwitchPreference( pref = readerPreferences.folderPerManga(), - title = stringResource(R.string.pref_create_folder_per_manga), - subtitle = stringResource(R.string.pref_create_folder_per_manga_summary), + title = stringResource(MR.strings.pref_create_folder_per_manga), + subtitle = stringResource(MR.strings.pref_create_folder_per_manga_summary), ), ), ) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSearchScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSearchScreen.kt index 1b409a1a80..ff39b487db 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSearchScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSearchScreen.kt @@ -41,7 +41,6 @@ import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.platform.LocalSoftwareKeyboardController -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.TextFieldValue @@ -53,8 +52,9 @@ import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.components.UpIcon import eu.kanade.presentation.more.settings.Preference import eu.kanade.presentation.util.Screen -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.util.runOnEnterKeyPressed import cafe.adriel.voyager.core.screen.Screen as VoyagerScreen @@ -123,7 +123,7 @@ class SettingsSearchScreen : Screen() { decorationBox = { if (textFieldValue.text.isEmpty()) { Text( - text = stringResource(R.string.action_search_settings), + text = stringResource(MR.strings.action_search_settings), color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.bodyLarge, ) @@ -227,7 +227,7 @@ private fun SearchResult( when { it == null -> {} it.isEmpty() -> { - EmptyScreen(stringResource(R.string.no_results_found)) + EmptyScreen(stringResource(MR.strings.no_results_found)) } else -> { LazyColumn( diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSecurityScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSecurityScreen.kt index 2b98830ebb..5be9d37e68 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSecurityScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSecurityScreen.kt @@ -1,19 +1,19 @@ package eu.kanade.presentation.more.settings.screen -import androidx.annotation.StringRes import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.pluralStringResource -import androidx.compose.ui.res.stringResource import androidx.fragment.app.FragmentActivity import eu.kanade.presentation.more.settings.Preference -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.core.security.SecurityPreferences import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.authenticate import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.isAuthenticationSupported +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.pluralStringResource +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -22,8 +22,7 @@ object SettingsSecurityScreen : SearchableSettings { @ReadOnlyComposable @Composable - @StringRes - override fun getTitleRes() = R.string.pref_category_security + override fun getTitleRes() = MR.strings.pref_category_security @Composable override fun getPreferences(): List { @@ -37,25 +36,25 @@ object SettingsSecurityScreen : SearchableSettings { return listOf( Preference.PreferenceItem.SwitchPreference( pref = useAuthPref, - title = stringResource(R.string.lock_with_biometrics), + title = stringResource(MR.strings.lock_with_biometrics), enabled = authSupported, onValueChanged = { (context as FragmentActivity).authenticate( - title = context.getString(R.string.lock_with_biometrics), + title = context.stringResource(MR.strings.lock_with_biometrics), ) }, ), Preference.PreferenceItem.ListPreference( pref = securityPreferences.lockAppAfter(), - title = stringResource(R.string.lock_when_idle), + title = stringResource(MR.strings.lock_when_idle), enabled = authSupported && useAuth, entries = LockAfterValues .associateWith { when (it) { - -1 -> stringResource(R.string.lock_never) - 0 -> stringResource(R.string.lock_always) + -1 -> stringResource(MR.strings.lock_never) + 0 -> stringResource(MR.strings.lock_always) else -> pluralStringResource( - id = R.plurals.lock_after_mins, + MR.plurals.lock_after_mins, count = it, it, ) @@ -63,21 +62,21 @@ object SettingsSecurityScreen : SearchableSettings { }, onValueChanged = { (context as FragmentActivity).authenticate( - title = context.getString(R.string.lock_when_idle), + title = context.stringResource(MR.strings.lock_when_idle), ) }, ), Preference.PreferenceItem.SwitchPreference( pref = securityPreferences.hideNotificationContent(), - title = stringResource(R.string.hide_notification_content), + title = stringResource(MR.strings.hide_notification_content), ), Preference.PreferenceItem.ListPreference( pref = securityPreferences.secureScreen(), - title = stringResource(R.string.secure_screen), + title = stringResource(MR.strings.secure_screen), entries = SecurityPreferences.SecureScreenMode.entries - .associateWith { stringResource(it.titleResId) }, + .associateWith { stringResource(it.titleRes) }, ), - Preference.PreferenceItem.InfoPreference(stringResource(R.string.secure_screen_summary)), + Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.secure_screen_summary)), ) } } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt index ce04c7efca..348d412e02 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt @@ -1,7 +1,6 @@ package eu.kanade.presentation.more.settings.screen import android.content.Context -import androidx.annotation.StringRes import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -33,7 +32,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.PasswordVisualTransformation @@ -41,9 +39,9 @@ import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp +import dev.icerock.moko.resources.StringResource import eu.kanade.domain.track.service.TrackPreferences import eu.kanade.presentation.more.settings.Preference -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.track.EnhancedMangaTracker import eu.kanade.tachiyomi.data.track.Tracker import eu.kanade.tachiyomi.data.track.TrackerManager @@ -54,10 +52,13 @@ import eu.kanade.tachiyomi.data.track.shikimori.ShikimoriApi import eu.kanade.tachiyomi.data.track.simkl.SimklApi import eu.kanade.tachiyomi.util.system.openInBrowser import eu.kanade.tachiyomi.util.system.toast +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchIO import tachiyomi.core.util.lang.withUIContext import tachiyomi.domain.source.manga.service.MangaSourceManager +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -65,8 +66,7 @@ object SettingsTrackingScreen : SearchableSettings { @ReadOnlyComposable @Composable - @StringRes - override fun getTitleRes() = R.string.pref_category_tracking + override fun getTitleRes() = MR.strings.pref_category_tracking @Composable override fun RowScope.AppBarAction() { @@ -74,7 +74,7 @@ object SettingsTrackingScreen : SearchableSettings { IconButton(onClick = { uriHandler.openUri("https://aniyomi.org/help/guides/tracking/") }) { Icon( imageVector = Icons.Outlined.HelpOutline, - contentDescription = stringResource(R.string.tracking_guide), + contentDescription = stringResource(MR.strings.tracking_guide), ) } } @@ -111,10 +111,10 @@ object SettingsTrackingScreen : SearchableSettings { val acceptedMangaSources = (service as EnhancedMangaTracker).getAcceptedSources() sourceManager.getCatalogueSources().any { it::class.qualifiedName in acceptedMangaSources } } - var enhancedMangaTrackerInfo = stringResource(R.string.enhanced_tracking_info) + var enhancedMangaTrackerInfo = stringResource(MR.strings.enhanced_tracking_info) if (enhancedMangaTrackers.second.isNotEmpty()) { val missingMangaSourcesInfo = stringResource( - R.string.enhanced_services_not_installed, + MR.strings.enhanced_services_not_installed, enhancedMangaTrackers.second.joinToString { it.name }, ) enhancedMangaTrackerInfo += "\n\n$missingMangaSourcesInfo" @@ -123,18 +123,18 @@ object SettingsTrackingScreen : SearchableSettings { return listOf( Preference.PreferenceItem.SwitchPreference( pref = trackPreferences.autoUpdateTrack(), - title = stringResource(R.string.pref_auto_update_manga_sync), + title = stringResource(MR.strings.pref_auto_update_manga_sync), ), Preference.PreferenceItem.SwitchPreference( pref = trackPreferences.trackOnAddingToLibrary(), - title = stringResource(R.string.pref_track_on_add_library), + title = stringResource(MR.strings.pref_track_on_add_library), ), Preference.PreferenceItem.SwitchPreference( pref = trackPreferences.showNextEpisodeAiringTime(), - title = stringResource(R.string.pref_show_next_episode_airing_time), + title = stringResource(MR.strings.pref_show_next_episode_airing_time), ), Preference.PreferenceGroup( - title = stringResource(R.string.services), + title = stringResource(MR.strings.services), preferenceItems = listOf( Preference.PreferenceItem.TrackerPreference( title = trackerManager.myAnimeList.name, @@ -161,13 +161,13 @@ object SettingsTrackingScreen : SearchableSettings { Preference.PreferenceItem.TrackerPreference( title = trackerManager.kitsu.name, tracker = trackerManager.kitsu, - login = { dialog = LoginDialog(trackerManager.kitsu, R.string.email) }, + login = { dialog = LoginDialog(trackerManager.kitsu, MR.strings.email) }, logout = { dialog = LogoutDialog(trackerManager.kitsu) }, ), Preference.PreferenceItem.TrackerPreference( title = trackerManager.mangaUpdates.name, tracker = trackerManager.mangaUpdates, - login = { dialog = LoginDialog(trackerManager.mangaUpdates, R.string.username) }, + login = { dialog = LoginDialog(trackerManager.mangaUpdates, MR.strings.username) }, logout = { dialog = LogoutDialog(trackerManager.mangaUpdates) }, ), Preference.PreferenceItem.TrackerPreference( @@ -203,11 +203,11 @@ object SettingsTrackingScreen : SearchableSettings { }, logout = { dialog = LogoutDialog(trackerManager.bangumi) }, ), - Preference.PreferenceItem.InfoPreference(stringResource(R.string.tracking_info)), + Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.tracking_info)), ), ), Preference.PreferenceGroup( - title = stringResource(R.string.enhanced_services), + title = stringResource(MR.strings.enhanced_services), preferenceItems = enhancedMangaTrackers.first .map { service -> Preference.PreferenceItem.TrackerPreference( @@ -225,7 +225,7 @@ object SettingsTrackingScreen : SearchableSettings { @Composable private fun TrackingLoginDialog( tracker: Tracker, - @StringRes uNameStringRes: Int, + uNameStringRes: StringResource, onDismissRequest: () -> Unit, ) { val context = LocalContext.current @@ -241,13 +241,13 @@ object SettingsTrackingScreen : SearchableSettings { title = { Row(verticalAlignment = Alignment.CenterVertically) { Text( - text = stringResource(R.string.login_title, tracker.name), + text = stringResource(MR.strings.login_title, tracker.name), modifier = Modifier.weight(1f), ) IconButton(onClick = onDismissRequest) { Icon( imageVector = Icons.Outlined.Close, - contentDescription = stringResource(R.string.action_close), + contentDescription = stringResource(MR.strings.action_close), ) } } @@ -269,7 +269,7 @@ object SettingsTrackingScreen : SearchableSettings { modifier = Modifier.fillMaxWidth(), value = password, onValueChange = { password = it }, - label = { Text(text = stringResource(R.string.password)) }, + label = { Text(text = stringResource(MR.strings.password)) }, trailingIcon = { IconButton(onClick = { hidePassword = !hidePassword }) { Icon( @@ -315,7 +315,7 @@ object SettingsTrackingScreen : SearchableSettings { } }, ) { - val id = if (processing) R.string.loading else R.string.login + val id = if (processing) MR.strings.loading else MR.strings.login Text(text = stringResource(id)) } }, @@ -330,7 +330,7 @@ object SettingsTrackingScreen : SearchableSettings { ): Boolean { return try { tracker.login(username, password) - withUIContext { context.toast(R.string.login_success) } + withUIContext { context.stringResource(MR.strings.login_success) } true } catch (e: Throwable) { tracker.logout() @@ -349,7 +349,7 @@ object SettingsTrackingScreen : SearchableSettings { onDismissRequest = onDismissRequest, title = { Text( - text = stringResource(R.string.logout_title, tracker.name), + text = stringResource(MR.strings.logout_title, tracker.name), textAlign = TextAlign.Center, modifier = Modifier.fillMaxWidth(), ) @@ -360,21 +360,21 @@ object SettingsTrackingScreen : SearchableSettings { modifier = Modifier.weight(1f), onClick = onDismissRequest, ) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } Button( modifier = Modifier.weight(1f), onClick = { tracker.logout() onDismissRequest() - context.toast(R.string.logout_success) + context.stringResource(MR.strings.logout_success) }, colors = ButtonDefaults.buttonColors( containerColor = MaterialTheme.colorScheme.error, contentColor = MaterialTheme.colorScheme.onError, ), ) { - Text(text = stringResource(R.string.logout)) + Text(text = stringResource(MR.strings.logout)) } } }, @@ -384,7 +384,7 @@ object SettingsTrackingScreen : SearchableSettings { private data class LoginDialog( val tracker: Tracker, - @StringRes val uNameStringRes: Int, + val uNameStringRes: StringResource, ) private data class LogoutDialog( diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/AboutScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/AboutScreen.kt index abb73a2724..72448242fc 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/AboutScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/AboutScreen.kt @@ -19,7 +19,6 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow @@ -30,7 +29,6 @@ import eu.kanade.presentation.more.settings.widget.TextPreferenceWidget import eu.kanade.presentation.util.LocalBackPress import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.BuildConfig -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.updater.AppUpdateChecker import eu.kanade.tachiyomi.data.updater.RELEASE_URL import eu.kanade.tachiyomi.ui.more.NewUpdateScreen @@ -40,13 +38,16 @@ import eu.kanade.tachiyomi.util.system.copyToClipboard import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.launch import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.lang.withUIContext import tachiyomi.core.util.system.logcat import tachiyomi.domain.release.interactor.GetApplicationRelease +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LinkIcon import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.icons.CustomIcons import tachiyomi.presentation.core.icons.Discord import tachiyomi.presentation.core.icons.Github @@ -72,7 +73,7 @@ object AboutScreen : Screen() { Scaffold( topBar = { scrollBehavior -> AppBar( - title = stringResource(R.string.pref_category_about), + title = stringResource(MR.strings.pref_category_about), navigateUp = if (handleBack != null) handleBack::invoke else null, scrollBehavior = scrollBehavior, ) @@ -87,7 +88,7 @@ object AboutScreen : Screen() { item { TextPreferenceWidget( - title = stringResource(R.string.version), + title = stringResource(MR.strings.version), subtitle = getVersionName(withBuildDate = true), onPreferenceClick = { val deviceInfo = CrashLogUtil(context).getDebugInfo() @@ -99,7 +100,7 @@ object AboutScreen : Screen() { if (BuildConfig.INCLUDE_UPDATER) { item { TextPreferenceWidget( - title = stringResource(R.string.check_for_updates), + title = stringResource(MR.strings.check_for_updates), widget = { AnimatedVisibility(visible = isCheckingUpdates) { CircularProgressIndicator( @@ -138,7 +139,7 @@ object AboutScreen : Screen() { if (!BuildConfig.DEBUG) { item { TextPreferenceWidget( - title = stringResource(R.string.whats_new), + title = stringResource(MR.strings.whats_new), onPreferenceClick = { uriHandler.openUri(RELEASE_URL) }, ) } @@ -146,7 +147,7 @@ object AboutScreen : Screen() { item { TextPreferenceWidget( - title = stringResource(R.string.help_translate), + title = stringResource(MR.strings.help_translate), onPreferenceClick = { uriHandler.openUri( "https://aniyomi.org/docs/contribute#translation", @@ -157,14 +158,14 @@ object AboutScreen : Screen() { item { TextPreferenceWidget( - title = stringResource(R.string.licenses), + title = stringResource(MR.strings.licenses), onPreferenceClick = { navigator.push(OpenSourceLicensesScreen()) }, ) } item { TextPreferenceWidget( - title = stringResource(R.string.privacy_policy), + title = stringResource(MR.strings.privacy_policy), onPreferenceClick = { uriHandler.openUri("https://aniyomi.org/privacy/") }, ) } @@ -177,7 +178,7 @@ object AboutScreen : Screen() { horizontalArrangement = Arrangement.Center, ) { LinkIcon( - label = stringResource(R.string.website), + label = stringResource(MR.strings.website), icon = Icons.Outlined.Public, url = "https://aniyomi.org", ) @@ -225,10 +226,10 @@ object AboutScreen : Screen() { onAvailableUpdate(result) } is GetApplicationRelease.Result.NoNewUpdate -> { - context.toast(R.string.update_check_no_new_updates) + context.stringResource(MR.strings.update_check_no_new_updates) } is GetApplicationRelease.Result.OsTooOld -> { - context.toast(R.string.update_check_eol) + context.stringResource(MR.strings.update_check_eol) } else -> {} } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/OpenSourceLibraryLicenseScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/OpenSourceLibraryLicenseScreen.kt index 9b0da494c4..725ed64078 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/OpenSourceLibraryLicenseScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/OpenSourceLibraryLicenseScreen.kt @@ -9,7 +9,6 @@ import androidx.compose.material.icons.filled.Public import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView import androidx.core.text.HtmlCompat @@ -19,9 +18,10 @@ import com.google.android.material.textview.MaterialTextView import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.util.Screen -import eu.kanade.tachiyomi.R import kotlinx.collections.immutable.persistentListOf +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource class OpenSourceLibraryLicenseScreen( private val name: String, @@ -44,7 +44,7 @@ class OpenSourceLibraryLicenseScreen( AppBarActions( persistentListOf( AppBar.Action( - title = stringResource(R.string.website), + title = stringResource(MR.strings.website), icon = Icons.Default.Public, onClick = { uriHandler.openUri(website) }, ), diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/OpenSourceLicensesScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/OpenSourceLicensesScreen.kt index 7c96463854..18f6f8f478 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/OpenSourceLicensesScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/OpenSourceLicensesScreen.kt @@ -4,7 +4,6 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import com.mikepenz.aboutlibraries.ui.compose.LibrariesContainer @@ -12,8 +11,9 @@ import com.mikepenz.aboutlibraries.ui.compose.LibraryDefaults import com.mikepenz.aboutlibraries.ui.compose.util.htmlReadyLicenseContent import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.util.Screen -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource class OpenSourceLicensesScreen : Screen() { @Composable @@ -22,7 +22,7 @@ class OpenSourceLicensesScreen : Screen() { Scaffold( topBar = { scrollBehavior -> AppBar( - title = stringResource(R.string.licenses), + title = stringResource(MR.strings.licenses), navigateUp = navigator::pop, scrollBehavior = scrollBehavior, ) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/advanced/ClearAnimeDatabaseScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/advanced/ClearAnimeDatabaseScreen.kt index 5f7ad3843c..cbfab7d985 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/advanced/ClearAnimeDatabaseScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/advanced/ClearAnimeDatabaseScreen.kt @@ -27,7 +27,6 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.util.fastMap import cafe.adriel.voyager.core.model.StateScreenModel @@ -39,19 +38,20 @@ import eu.kanade.presentation.browse.anime.components.AnimeSourceIcon import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.util.Screen -import eu.kanade.tachiyomi.R -import eu.kanade.tachiyomi.util.system.toast import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.update +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchIO import tachiyomi.core.util.lang.launchUI import tachiyomi.core.util.lang.withNonCancellableContext import tachiyomi.domain.source.anime.interactor.GetAnimeSourcesWithNonLibraryAnime import tachiyomi.domain.source.anime.model.AnimeSource import tachiyomi.domain.source.anime.model.AnimeSourceWithCount +import tachiyomi.i18n.MR import tachiyomi.mi.data.AnimeDatabase import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.presentation.core.util.selectedBackground @@ -81,20 +81,20 @@ class ClearAnimeDatabaseScreen : Screen() { model.removeAnimeBySourceId() model.clearSelection() model.hideConfirmation() - context.toast(R.string.clear_database_completed) + context.stringResource(MR.strings.clear_database_completed) } }, ) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = model::hideConfirmation) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, text = { - Text(text = stringResource(R.string.clear_database_confirmation)) + Text(text = stringResource(MR.strings.clear_database_confirmation)) }, ) } @@ -102,19 +102,19 @@ class ClearAnimeDatabaseScreen : Screen() { Scaffold( topBar = { scrollBehavior -> AppBar( - title = stringResource(R.string.pref_clear_anime_database), + title = stringResource(MR.strings.pref_clear_anime_database), navigateUp = navigator::pop, actions = { if (s.items.isNotEmpty()) { AppBarActions( actions = persistentListOf( AppBar.Action( - title = stringResource(R.string.action_select_all), + title = stringResource(MR.strings.action_select_all), icon = Icons.Outlined.SelectAll, onClick = model::selectAll, ), AppBar.Action( - title = stringResource(R.string.action_select_all), + title = stringResource(MR.strings.action_select_all), icon = Icons.Outlined.FlipToBack, onClick = model::invertSelection, ), @@ -128,7 +128,7 @@ class ClearAnimeDatabaseScreen : Screen() { ) { contentPadding -> if (s.items.isEmpty()) { EmptyScreen( - message = stringResource(R.string.database_clean), + message = stringResource(MR.strings.database_clean), modifier = Modifier.padding(contentPadding), ) } else { @@ -164,7 +164,7 @@ class ClearAnimeDatabaseScreen : Screen() { enabled = s.selection.isNotEmpty(), ) { Text( - text = stringResource(R.string.action_delete), + text = stringResource(MR.strings.action_delete), color = MaterialTheme.colorScheme.onPrimary, ) } @@ -200,7 +200,7 @@ class ClearAnimeDatabaseScreen : Screen() { text = source.visualName, style = MaterialTheme.typography.bodyMedium, ) - Text(text = stringResource(R.string.clear_database_source_item_count, count)) + Text(text = stringResource(MR.strings.clear_database_source_item_count, count)) } Checkbox( checked = isSelected, diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/advanced/ClearDatabaseScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/advanced/ClearDatabaseScreen.kt index 943629adea..947bd9b1b4 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/advanced/ClearDatabaseScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/advanced/ClearDatabaseScreen.kt @@ -27,7 +27,6 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.util.fastMap import cafe.adriel.voyager.core.model.StateScreenModel @@ -39,11 +38,10 @@ import eu.kanade.presentation.browse.manga.components.MangaSourceIcon import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.util.Screen -import eu.kanade.tachiyomi.R -import eu.kanade.tachiyomi.util.system.toast import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.update +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchIO import tachiyomi.core.util.lang.launchUI import tachiyomi.core.util.lang.withNonCancellableContext @@ -51,7 +49,9 @@ import tachiyomi.data.Database import tachiyomi.domain.source.manga.interactor.GetMangaSourcesWithNonLibraryManga import tachiyomi.domain.source.manga.model.MangaSourceWithCount import tachiyomi.domain.source.manga.model.Source +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.presentation.core.util.selectedBackground @@ -81,20 +81,20 @@ class ClearDatabaseScreen : Screen() { model.removeMangaBySourceId() model.clearSelection() model.hideConfirmation() - context.toast(R.string.clear_database_completed) + context.stringResource(MR.strings.clear_database_completed) } }, ) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = model::hideConfirmation) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, text = { - Text(text = stringResource(R.string.clear_database_confirmation)) + Text(text = stringResource(MR.strings.clear_database_confirmation)) }, ) } @@ -102,19 +102,19 @@ class ClearDatabaseScreen : Screen() { Scaffold( topBar = { scrollBehavior -> AppBar( - title = stringResource(R.string.pref_clear_manga_database), + title = stringResource(MR.strings.pref_clear_manga_database), navigateUp = navigator::pop, actions = { if (s.items.isNotEmpty()) { AppBarActions( actions = persistentListOf( AppBar.Action( - title = stringResource(R.string.action_select_all), + title = stringResource(MR.strings.action_select_all), icon = Icons.Outlined.SelectAll, onClick = model::selectAll, ), AppBar.Action( - title = stringResource(R.string.action_select_all), + title = stringResource(MR.strings.action_select_all), icon = Icons.Outlined.FlipToBack, onClick = model::invertSelection, ), @@ -128,7 +128,7 @@ class ClearDatabaseScreen : Screen() { ) { contentPadding -> if (s.items.isEmpty()) { EmptyScreen( - message = stringResource(R.string.database_clean), + message = stringResource(MR.strings.database_clean), modifier = Modifier.padding(contentPadding), ) } else { @@ -164,7 +164,7 @@ class ClearDatabaseScreen : Screen() { enabled = s.selection.isNotEmpty(), ) { Text( - text = stringResource(R.string.action_delete), + text = stringResource(MR.strings.action_delete), color = MaterialTheme.colorScheme.onPrimary, ) } @@ -200,7 +200,7 @@ class ClearDatabaseScreen : Screen() { text = source.visualName, style = MaterialTheme.typography.bodyMedium, ) - Text(text = stringResource(R.string.clear_database_source_item_count, count)) + Text(text = stringResource(MR.strings.clear_database_source_item_count, count)) } Checkbox( checked = isSelected, diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/data/CreateBackupScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/data/CreateBackupScreen.kt index 5b168fe777..f853132b4b 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/data/CreateBackupScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/data/CreateBackupScreen.kt @@ -22,7 +22,6 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.rememberScreenModel @@ -30,20 +29,21 @@ import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.util.Screen -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.backup.BackupCreateFlags import eu.kanade.tachiyomi.data.backup.BackupCreateJob import eu.kanade.tachiyomi.data.backup.models.Backup import eu.kanade.tachiyomi.util.system.DeviceUtil -import eu.kanade.tachiyomi.util.system.toast import kotlinx.collections.immutable.PersistentSet import kotlinx.collections.immutable.minus import kotlinx.collections.immutable.plus import kotlinx.collections.immutable.toPersistentSet import kotlinx.coroutines.flow.update +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource class CreateBackupScreen : Screen() { @@ -71,7 +71,7 @@ class CreateBackupScreen : Screen() { Scaffold( topBar = { AppBar( - title = stringResource(R.string.pref_create_backup), + title = stringResource(MR.strings.pref_create_backup), navigateUp = navigator::pop, scrollBehavior = it, ) @@ -89,7 +89,7 @@ class CreateBackupScreen : Screen() { ) { item { LabeledCheckbox( - label = stringResource(R.string.entries), + label = stringResource(MR.strings.entries), checked = true, onCheckedChange = {}, enabled = false, @@ -117,20 +117,20 @@ class CreateBackupScreen : Screen() { onClick = { if (!BackupCreateJob.isManualJobRunning(context)) { if (DeviceUtil.isMiui && DeviceUtil.isMiuiOptimizationDisabled()) { - context.toast(R.string.restore_miui_warning, Toast.LENGTH_LONG) + context.stringResource(MR.strings.restore_miui_warning, Toast.LENGTH_LONG) } try { chooseBackupDir.launch(Backup.getFilename()) } catch (e: ActivityNotFoundException) { - context.toast(R.string.file_picker_error) + context.stringResource(MR.strings.file_picker_error) } } else { - context.toast(R.string.backup_in_progress) + context.stringResource(MR.strings.backup_in_progress) } }, ) { Text( - text = stringResource(R.string.action_create), + text = stringResource(MR.strings.action_create), color = MaterialTheme.colorScheme.onPrimary, ) } @@ -163,11 +163,11 @@ private class CreateBackupScreenModel : StateScreenModel ListPreferenceWidget( }, confirmButton = { TextButton(onClick = { isDialogShown = false }) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, ) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/widget/MultiSelectListPreferenceWidget.kt b/app/src/main/java/eu/kanade/presentation/more/settings/widget/MultiSelectListPreferenceWidget.kt index 3059be939e..c9ac351842 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/widget/MultiSelectListPreferenceWidget.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/widget/MultiSelectListPreferenceWidget.kt @@ -10,11 +10,11 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.runtime.toMutableStateList -import androidx.compose.ui.res.stringResource import androidx.compose.ui.window.DialogProperties import eu.kanade.presentation.more.settings.Preference -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox +import tachiyomi.presentation.core.i18n.stringResource @Composable fun MultiSelectListPreferenceWidget( @@ -70,12 +70,12 @@ fun MultiSelectListPreferenceWidget( isDialogShown = false }, ) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = { isDialogShown = false }) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, ) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/widget/TrackingPreferenceWidget.kt b/app/src/main/java/eu/kanade/presentation/more/settings/widget/TrackingPreferenceWidget.kt index d8544d156e..81362b66c5 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/widget/TrackingPreferenceWidget.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/widget/TrackingPreferenceWidget.kt @@ -15,12 +15,12 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import eu.kanade.presentation.more.settings.LocalPreferenceHighlighted import eu.kanade.presentation.track.components.TrackLogoIcon -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.track.Tracker +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource @Composable fun TrackingPreferenceWidget( @@ -55,7 +55,7 @@ fun TrackingPreferenceWidget( .padding(4.dp) .size(32.dp), tint = Color(0xFF4CAF50), - contentDescription = stringResource(R.string.login_success), + contentDescription = stringResource(MR.strings.login_success), ) } } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/widget/TriStateListDialog.kt b/app/src/main/java/eu/kanade/presentation/more/settings/widget/TriStateListDialog.kt index 220c9a3187..4366806a8c 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/widget/TriStateListDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/widget/TriStateListDialog.kt @@ -1,5 +1,6 @@ package eu.kanade.presentation.more.settings.widget +import android.annotation.SuppressLint import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -27,9 +28,9 @@ import androidx.compose.runtime.toMutableStateList import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.isScrolledToEnd import tachiyomi.presentation.core.util.isScrolledToStart @@ -37,6 +38,7 @@ private enum class State { CHECKED, INVERSED, UNCHECKED } +@SuppressLint("ComposeParameterOrder") @Composable fun TriStateListDialog( title: String, @@ -104,9 +106,9 @@ fun TriStateListDialog( }, contentDescription = stringResource( when (state) { - State.UNCHECKED -> R.string.not_selected - State.CHECKED -> R.string.selected - State.INVERSED -> R.string.disabled + State.UNCHECKED -> MR.strings.disabled + State.CHECKED -> MR.strings.disabled + State.INVERSED -> MR.strings.disabled }, ), ) @@ -130,7 +132,7 @@ fun TriStateListDialog( }, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, confirmButton = { @@ -145,7 +147,7 @@ fun TriStateListDialog( onValueChanged(included, excluded) }, ) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, ) diff --git a/app/src/main/java/eu/kanade/presentation/more/stats/AnimeStatsScreenContent.kt b/app/src/main/java/eu/kanade/presentation/more/stats/AnimeStatsScreenContent.kt index 94435ecdf2..956f2da44d 100644 --- a/app/src/main/java/eu/kanade/presentation/more/stats/AnimeStatsScreenContent.kt +++ b/app/src/main/java/eu/kanade/presentation/more/stats/AnimeStatsScreenContent.kt @@ -13,14 +13,14 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import eu.kanade.presentation.more.stats.components.StatsItem import eu.kanade.presentation.more.stats.components.StatsOverviewItem import eu.kanade.presentation.more.stats.components.StatsSection import eu.kanade.presentation.more.stats.data.StatsData import eu.kanade.presentation.util.toDurationString -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import java.util.Locale import kotlin.time.DurationUnit import kotlin.time.toDuration @@ -55,28 +55,28 @@ fun AnimeStatsScreenContent( private fun OverviewSection( data: StatsData.AnimeOverview, ) { - val none = stringResource(R.string.none) + val none = stringResource(MR.strings.none) val context = LocalContext.current val readDurationString = remember(data.totalSeenDuration) { data.totalSeenDuration .toDuration(DurationUnit.MILLISECONDS) .toDurationString(context, fallback = none) } - StatsSection(R.string.label_overview_section) { + StatsSection(MR.strings.label_overview_section) { Row { StatsOverviewItem( title = data.libraryAnimeCount.toString(), - subtitle = stringResource(R.string.in_library), + subtitle = stringResource(MR.strings.in_library), icon = Icons.Outlined.CollectionsBookmark, ) StatsOverviewItem( title = data.completedAnimeCount.toString(), - subtitle = stringResource(R.string.label_completed_titles), + subtitle = stringResource(MR.strings.label_completed_titles), icon = Icons.Outlined.LocalLibrary, ) StatsOverviewItem( title = readDurationString, - subtitle = stringResource(R.string.label_watched_duration), + subtitle = stringResource(MR.strings.label_watched_duration), icon = Icons.Outlined.Schedule, ) } @@ -87,19 +87,19 @@ private fun OverviewSection( private fun TitlesStats( data: StatsData.AnimeTitles, ) { - StatsSection(R.string.label_titles_section) { + StatsSection(MR.strings.label_titles_section) { Row { StatsItem( data.globalUpdateItemCount.toString(), - stringResource(R.string.label_titles_in_global_update), + stringResource(MR.strings.label_titles_in_global_update), ) StatsItem( data.startedAnimeCount.toString(), - stringResource(R.string.label_started), + stringResource(MR.strings.label_started), ) StatsItem( data.localAnimeCount.toString(), - stringResource(R.string.label_local), + stringResource(MR.strings.label_local), ) } } @@ -109,19 +109,19 @@ private fun TitlesStats( private fun EpisodeStats( data: StatsData.Episodes, ) { - StatsSection(R.string.episodes) { + StatsSection(MR.strings.episodes) { Row { StatsItem( data.totalEpisodeCount.toString(), - stringResource(R.string.label_total_chapters), + stringResource(MR.strings.label_total_chapters), ) StatsItem( data.readEpisodeCount.toString(), - stringResource(R.string.label_watched_episodes), + stringResource(MR.strings.label_watched_episodes), ) StatsItem( data.downloadCount.toString(), - stringResource(R.string.label_downloaded), + stringResource(MR.strings.label_downloaded), ) } } @@ -131,28 +131,28 @@ private fun EpisodeStats( private fun TrackerStats( data: StatsData.Trackers, ) { - val notApplicable = stringResource(R.string.not_applicable) + val notApplicable = stringResource(MR.strings.not_applicable) val meanScoreStr = remember(data.trackedTitleCount, data.meanScore) { if (data.trackedTitleCount > 0 && !data.meanScore.isNaN()) { - // All other numbers are localized in English + // All other numbers are stringResourced in English String.format(Locale.ENGLISH, "%.2f ★", data.meanScore) } else { notApplicable } } - StatsSection(R.string.label_tracker_section) { + StatsSection(MR.strings.label_tracker_section) { Row { StatsItem( data.trackedTitleCount.toString(), - stringResource(R.string.label_tracked_titles), + stringResource(MR.strings.label_tracked_titles), ) StatsItem( meanScoreStr, - stringResource(R.string.label_mean_score), + stringResource(MR.strings.label_mean_score), ) StatsItem( data.trackerCount.toString(), - stringResource(R.string.label_used), + stringResource(MR.strings.label_used), ) } } diff --git a/app/src/main/java/eu/kanade/presentation/more/stats/MangaStatsScreenContent.kt b/app/src/main/java/eu/kanade/presentation/more/stats/MangaStatsScreenContent.kt index 6df431aacd..297c5216f8 100644 --- a/app/src/main/java/eu/kanade/presentation/more/stats/MangaStatsScreenContent.kt +++ b/app/src/main/java/eu/kanade/presentation/more/stats/MangaStatsScreenContent.kt @@ -13,14 +13,14 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import eu.kanade.presentation.more.stats.components.StatsItem import eu.kanade.presentation.more.stats.components.StatsOverviewItem import eu.kanade.presentation.more.stats.components.StatsSection import eu.kanade.presentation.more.stats.data.StatsData import eu.kanade.presentation.util.toDurationString -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import java.util.Locale import kotlin.time.DurationUnit import kotlin.time.toDuration @@ -55,28 +55,28 @@ fun MangaStatsScreenContent( private fun OverviewSection( data: StatsData.MangaOverview, ) { - val none = stringResource(R.string.none) + val none = stringResource(MR.strings.none) val context = LocalContext.current val readDurationString = remember(data.totalReadDuration) { data.totalReadDuration .toDuration(DurationUnit.MILLISECONDS) .toDurationString(context, fallback = none) } - StatsSection(R.string.label_overview_section) { + StatsSection(MR.strings.label_overview_section) { Row { StatsOverviewItem( title = data.libraryMangaCount.toString(), - subtitle = stringResource(R.string.in_library), + subtitle = stringResource(MR.strings.in_library), icon = Icons.Outlined.CollectionsBookmark, ) StatsOverviewItem( title = data.completedMangaCount.toString(), - subtitle = stringResource(R.string.label_completed_titles), + subtitle = stringResource(MR.strings.label_completed_titles), icon = Icons.Outlined.LocalLibrary, ) StatsOverviewItem( title = readDurationString, - subtitle = stringResource(R.string.label_read_duration), + subtitle = stringResource(MR.strings.label_read_duration), icon = Icons.Outlined.Schedule, ) } @@ -87,19 +87,19 @@ private fun OverviewSection( private fun TitlesStats( data: StatsData.MangaTitles, ) { - StatsSection(R.string.label_titles_section) { + StatsSection(MR.strings.label_titles_section) { Row { StatsItem( data.globalUpdateItemCount.toString(), - stringResource(R.string.label_titles_in_global_update), + stringResource(MR.strings.label_titles_in_global_update), ) StatsItem( data.startedMangaCount.toString(), - stringResource(R.string.label_started), + stringResource(MR.strings.label_started), ) StatsItem( data.localMangaCount.toString(), - stringResource(R.string.label_local), + stringResource(MR.strings.label_local), ) } } @@ -109,19 +109,19 @@ private fun TitlesStats( private fun ChapterStats( data: StatsData.Chapters, ) { - StatsSection(R.string.chapters) { + StatsSection(MR.strings.chapters) { Row { StatsItem( data.totalChapterCount.toString(), - stringResource(R.string.label_total_chapters), + stringResource(MR.strings.label_total_chapters), ) StatsItem( data.readChapterCount.toString(), - stringResource(R.string.label_read_chapters), + stringResource(MR.strings.label_read_chapters), ) StatsItem( data.downloadCount.toString(), - stringResource(R.string.label_downloaded), + stringResource(MR.strings.label_downloaded), ) } } @@ -131,28 +131,28 @@ private fun ChapterStats( private fun TrackerStats( data: StatsData.Trackers, ) { - val notApplicable = stringResource(R.string.not_applicable) + val notApplicable = stringResource(MR.strings.not_applicable) val meanScoreStr = remember(data.trackedTitleCount, data.meanScore) { if (data.trackedTitleCount > 0 && !data.meanScore.isNaN()) { - // All other numbers are localized in English + // All other numbers are stringResourced in English String.format(Locale.ENGLISH, "%.2f ★", data.meanScore) } else { notApplicable } } - StatsSection(R.string.label_tracker_section) { + StatsSection(MR.strings.label_tracker_section) { Row { StatsItem( data.trackedTitleCount.toString(), - stringResource(R.string.label_tracked_titles), + stringResource(MR.strings.label_tracked_titles), ) StatsItem( meanScoreStr, - stringResource(R.string.label_mean_score), + stringResource(MR.strings.label_mean_score), ) StatsItem( data.trackerCount.toString(), - stringResource(R.string.label_used), + stringResource(MR.strings.label_used), ) } } diff --git a/app/src/main/java/eu/kanade/presentation/more/stats/components/StatsSection.kt b/app/src/main/java/eu/kanade/presentation/more/stats/components/StatsSection.kt index 329b04702c..d5795fab24 100644 --- a/app/src/main/java/eu/kanade/presentation/more/stats/components/StatsSection.kt +++ b/app/src/main/java/eu/kanade/presentation/more/stats/components/StatsSection.kt @@ -1,6 +1,5 @@ package eu.kanade.presentation.more.stats.components -import androidx.annotation.StringRes import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding @@ -9,12 +8,13 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource +import dev.icerock.moko.resources.StringResource import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource @Composable fun StatsSection( - @StringRes titleRes: Int, + titleRes: StringResource, content: @Composable () -> Unit, ) { Text( diff --git a/app/src/main/java/eu/kanade/presentation/more/storage/SelectStorageCategory.kt b/app/src/main/java/eu/kanade/presentation/more/storage/SelectStorageCategory.kt index b98bdebb75..1b70363a6a 100644 --- a/app/src/main/java/eu/kanade/presentation/more/storage/SelectStorageCategory.kt +++ b/app/src/main/java/eu/kanade/presentation/more/storage/SelectStorageCategory.kt @@ -3,10 +3,10 @@ package eu.kanade.presentation.more.storage import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import eu.kanade.tachiyomi.R import tachiyomi.domain.category.model.Category +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.SelectItem +import tachiyomi.presentation.core.i18n.stringResource @Composable fun SelectStorageCategory( @@ -15,8 +15,8 @@ fun SelectStorageCategory( modifier: Modifier = Modifier, onCategorySelected: (Category) -> Unit, ) { - val all = stringResource(R.string.label_all) - val default = stringResource(R.string.label_default) + val all = stringResource(MR.strings.label_all) + val default = stringResource(MR.strings.label_default) val mappedCategories = remember(categories) { categories.map { when (it.id) { @@ -29,7 +29,7 @@ fun SelectStorageCategory( SelectItem( modifier = modifier, - label = stringResource(R.string.label_category), + label = stringResource(MR.strings.label_category), selectedIndex = mappedCategories.indexOfFirst { it.id == selectedCategory.id }, options = mappedCategories, onSelect = { index -> diff --git a/app/src/main/java/eu/kanade/presentation/more/storage/StorageItem.kt b/app/src/main/java/eu/kanade/presentation/more/storage/StorageItem.kt index 5d33968b34..61961a372c 100644 --- a/app/src/main/java/eu/kanade/presentation/more/storage/StorageItem.kt +++ b/app/src/main/java/eu/kanade/presentation/more/storage/StorageItem.kt @@ -27,16 +27,16 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.pluralStringResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import eu.kanade.presentation.entries.ItemCover -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.util.toSize +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.pluralStringResource +import tachiyomi.presentation.core.i18n.stringResource data class StorageItem( val id: Long, @@ -54,7 +54,7 @@ fun StorageItem( modifier: Modifier = Modifier, onDelete: (Long) -> Unit, ) { - val pluralCount = if (isManga) R.plurals.manga_num_chapters else R.plurals.anime_num_episodes + val pluralCount = if (isManga) MR.plurals.manga_num_chapters else MR.plurals.anime_num_episodes var showDeleteDialog by remember { mutableStateOf(false) } @@ -100,7 +100,7 @@ fun StorageItem( ) Text( text = pluralStringResource( - id = pluralCount, + pluralCount, count = item.entriesCount, item.entriesCount, ), @@ -117,7 +117,7 @@ fun StorageItem( content = { Icon( imageVector = Icons.Default.Delete, - contentDescription = stringResource(R.string.action_delete), + contentDescription = stringResource(MR.strings.action_delete), ) }, ) @@ -152,7 +152,7 @@ private fun ItemDeleteDialog( onDismissRequest() }, content = { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) }, ) }, @@ -160,20 +160,20 @@ private fun ItemDeleteDialog( TextButton( onClick = onDismissRequest, content = { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) }, ) }, title = { Text( text = stringResource( - if (isManga) R.string.delete_downloads_for_manga else R.string.delete_downloads_for_anime, + if (isManga) MR.strings.delete_downloads_for_manga else MR.strings.delete_downloads_for_anime, ), ) }, text = { Text( - text = stringResource(R.string.delete_confirmation, title), + text = stringResource(MR.strings.delete_confirmation, title), ) }, ) 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 b485526efd..3d3b3706d6 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/ChapterTransition.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/ChapterTransition.kt @@ -7,13 +7,11 @@ import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.text.InlineTextContent import androidx.compose.foundation.text.appendInlineContent import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.CheckCircle -import androidx.compose.material.icons.outlined.CheckCircle import androidx.compose.material.icons.outlined.Info import androidx.compose.material.icons.outlined.Warning import androidx.compose.material3.CardColors @@ -28,8 +26,6 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.pluralStringResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.Placeholder import androidx.compose.ui.text.PlaceholderVerticalAlign import androidx.compose.ui.text.buildAnnotatedString @@ -37,15 +33,16 @@ 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 com.google.common.io.Files.append import eu.kanade.presentation.theme.TachiyomiTheme -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.manga.Chapter import eu.kanade.tachiyomi.data.database.models.manga.ChapterImpl import eu.kanade.tachiyomi.data.database.models.manga.toDomainChapter import eu.kanade.tachiyomi.ui.reader.model.ChapterTransition import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import tachiyomi.domain.items.service.calculateChapterGap +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.pluralStringResource +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.secondaryItemAlpha @Composable @@ -61,13 +58,13 @@ fun ChapterTransition( when (transition) { is ChapterTransition.Prev -> { TransitionText( - topLabel = stringResource(R.string.transition_previous), + topLabel = stringResource(MR.strings.transition_previous), topChapter = goingToChapter, topChapterDownloaded = goingToChapterDownloaded, - bottomLabel = stringResource(R.string.transition_current), + bottomLabel = stringResource(MR.strings.transition_current), bottomChapter = currChapter, bottomChapterDownloaded = currChapterDownloaded, - fallbackLabel = stringResource(R.string.transition_no_previous), + fallbackLabel = stringResource(MR.strings.transition_no_previous), chapterGap = calculateChapterGap( currChapter.toDomainChapter(), goingToChapter?.toDomainChapter(), @@ -76,13 +73,13 @@ fun ChapterTransition( } is ChapterTransition.Next -> { TransitionText( - topLabel = stringResource(R.string.transition_finished), + topLabel = stringResource(MR.strings.transition_finished), topChapter = currChapter, topChapterDownloaded = currChapterDownloaded, - bottomLabel = stringResource(R.string.transition_next), + bottomLabel = stringResource(MR.strings.transition_next), bottomChapter = goingToChapter, bottomChapterDownloaded = goingToChapterDownloaded, - fallbackLabel = stringResource(R.string.transition_no_next), + fallbackLabel = stringResource(MR.strings.transition_no_next), chapterGap = calculateChapterGap( goingToChapter?.toDomainChapter(), currChapter.toDomainChapter(), @@ -201,7 +198,7 @@ private fun ChapterGapWarning( Text( text = pluralStringResource( - R.plurals.missing_chapters_warning, + MR.plurals.missing_chapters_warning, count = gapCount, gapCount, ), @@ -258,7 +255,7 @@ private fun ChapterText( ) { Icon( imageVector = Icons.Filled.CheckCircle, - contentDescription = stringResource(R.string.label_downloaded), + contentDescription = stringResource(MR.strings.label_downloaded), ) }, ), 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 d5b5ef15e5..e4a8e89170 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/OrientationSelectDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/OrientationSelectDialog.kt @@ -12,18 +12,19 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource import androidx.compose.ui.tooling.preview.PreviewLightDark +import dev.icerock.moko.resources.StringResource import eu.kanade.domain.entries.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.tachiyomi.R import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.SettingsIconGrid import tachiyomi.presentation.core.components.material.IconToggleButton +import tachiyomi.presentation.core.i18n.stringResource private val ReaderOrientationsWithoutDefault = ReaderOrientation.entries - ReaderOrientation.DEFAULT @@ -31,7 +32,7 @@ private val ReaderOrientationsWithoutDefault = ReaderOrientation.entries - Reade fun OrientationSelectDialog( onDismissRequest: () -> Unit, screenModel: ReaderSettingsScreenModel, - onChange: (Int) -> Unit, + onChange: (StringResource) -> Unit, ) { val manga by screenModel.mangaFlow.collectAsState() val orientation = remember(manga) { @@ -67,7 +68,7 @@ private fun DialogContent( }.takeIf { orientation != ReaderOrientation.DEFAULT }, onApply = { onChangeOrientation(selected) }, ) { - SettingsIconGrid(R.string.rotation_type) { + SettingsIconGrid(MR.strings.rotation_type) { items(ReaderOrientationsWithoutDefault) { mode -> IconToggleButton( checked = mode == selected, diff --git a/app/src/main/java/eu/kanade/presentation/reader/ReaderPageActionsDialog.kt b/app/src/main/java/eu/kanade/presentation/reader/ReaderPageActionsDialog.kt index 4c488cf91c..70cc58f207 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/ReaderPageActionsDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/ReaderPageActionsDialog.kt @@ -17,12 +17,12 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import eu.kanade.presentation.components.AdaptiveSheet -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ActionButton import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource @Composable fun ReaderPageActionsDialog( @@ -42,13 +42,13 @@ fun ReaderPageActionsDialog( ) { ActionButton( modifier = Modifier.weight(1f), - title = stringResource(R.string.set_as_cover), + title = stringResource(MR.strings.set_as_cover), icon = Icons.Outlined.Photo, onClick = { showSetCoverDialog = true }, ) ActionButton( modifier = Modifier.weight(1f), - title = stringResource(R.string.action_share), + title = stringResource(MR.strings.action_share), icon = Icons.Outlined.Share, onClick = { onShare() @@ -57,7 +57,7 @@ fun ReaderPageActionsDialog( ) ActionButton( modifier = Modifier.weight(1f), - title = stringResource(R.string.action_save), + title = stringResource(MR.strings.action_save), icon = Icons.Outlined.Save, onClick = { onSave() @@ -85,16 +85,16 @@ private fun SetCoverDialog( ) { AlertDialog( text = { - Text(stringResource(R.string.confirm_set_image_as_cover)) + Text(stringResource(MR.strings.confirm_set_image_as_cover)) }, confirmButton = { TextButton(onClick = onConfirm) { - Text(stringResource(R.string.action_ok)) + Text(stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = onDismiss) { - Text(stringResource(R.string.action_cancel)) + Text(stringResource(MR.strings.action_cancel)) } }, onDismissRequest = onDismiss, 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 956e1c8491..50b5333acd 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/ReadingModeSelectDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/ReadingModeSelectDialog.kt @@ -12,18 +12,19 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource import androidx.compose.ui.tooling.preview.PreviewLightDark +import dev.icerock.moko.resources.StringResource import eu.kanade.domain.entries.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.tachiyomi.R import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.SettingsIconGrid import tachiyomi.presentation.core.components.material.IconToggleButton +import tachiyomi.presentation.core.i18n.stringResource private val ReadingModesWithoutDefault = ReadingMode.entries - ReadingMode.DEFAULT @@ -31,7 +32,7 @@ private val ReadingModesWithoutDefault = ReadingMode.entries - ReadingMode.DEFAU fun ReadingModeSelectDialog( onDismissRequest: () -> Unit, screenModel: ReaderSettingsScreenModel, - onChange: (Int) -> Unit, + onChange: (StringResource) -> Unit, ) { val manga by screenModel.mangaFlow.collectAsState() val readingMode = remember(manga) { @@ -63,7 +64,7 @@ private fun DialogContent( onUseDefault = { onChangeReadingMode(ReadingMode.DEFAULT) }.takeIf { readingMode != ReadingMode.DEFAULT }, onApply = { onChangeReadingMode(selected) }, ) { - SettingsIconGrid(R.string.pref_category_reading_mode) { + SettingsIconGrid(MR.strings.pref_category_reading_mode) { items(ReadingModesWithoutDefault) { mode -> IconToggleButton( checked = mode == selected, diff --git a/app/src/main/java/eu/kanade/presentation/reader/appbars/BottomReaderBar.kt b/app/src/main/java/eu/kanade/presentation/reader/appbars/BottomReaderBar.kt index 726095a537..b1f7189edf 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/appbars/BottomReaderBar.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/appbars/BottomReaderBar.kt @@ -14,11 +14,12 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource @Composable fun BottomReaderBar( @@ -42,28 +43,28 @@ fun BottomReaderBar( IconButton(onClick = onClickReadingMode) { Icon( painter = painterResource(readingMode.iconRes), - contentDescription = stringResource(R.string.viewer), + contentDescription = stringResource(MR.strings.viewer), ) } IconButton(onClick = onClickOrientation) { Icon( painter = painterResource(orientation.iconRes), - contentDescription = stringResource(R.string.rotation_type), + contentDescription = stringResource(MR.strings.rotation_type), ) } IconButton(onClick = onClickCropBorder) { Icon( painter = painterResource(if (cropEnabled) R.drawable.ic_crop_24dp else R.drawable.ic_crop_off_24dp), - contentDescription = stringResource(R.string.pref_crop_borders), + contentDescription = stringResource(MR.strings.pref_crop_borders), ) } IconButton(onClick = onClickSettings) { Icon( imageVector = Icons.Outlined.Settings, - contentDescription = stringResource(R.string.action_settings), + contentDescription = stringResource(MR.strings.action_settings), ) } } diff --git a/app/src/main/java/eu/kanade/presentation/reader/appbars/ReaderAppBars.kt b/app/src/main/java/eu/kanade/presentation/reader/appbars/ReaderAppBars.kt index a57d63cc93..06ba7e7e2a 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/appbars/ReaderAppBars.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/appbars/ReaderAppBars.kt @@ -18,18 +18,18 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.surfaceColorAtElevation import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.reader.components.ChapterNavigator -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode import eu.kanade.tachiyomi.ui.reader.viewer.Viewer import eu.kanade.tachiyomi.ui.reader.viewer.pager.R2LPagerViewer import kotlinx.collections.immutable.persistentListOf +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource private val animationSpec = tween(200) @@ -105,9 +105,9 @@ fun ReaderAppBars( AppBar.Action( title = stringResource( if (bookmarked) { - R.string.action_remove_bookmark + MR.strings.action_remove_bookmark } else { - R.string.action_bookmark + MR.strings.action_bookmark }, ), icon = if (bookmarked) { @@ -121,7 +121,7 @@ fun ReaderAppBars( onOpenInWebView?.let { add( AppBar.OverflowAction( - title = stringResource(R.string.action_open_in_web_view), + title = stringResource(MR.strings.action_open_in_web_view), onClick = it, ), ) @@ -129,7 +129,7 @@ fun ReaderAppBars( onShare?.let { add( AppBar.OverflowAction( - title = stringResource(R.string.action_share), + title = stringResource(MR.strings.action_share), onClick = it, ), ) diff --git a/app/src/main/java/eu/kanade/presentation/reader/components/ChapterNavigator.kt b/app/src/main/java/eu/kanade/presentation/reader/components/ChapterNavigator.kt index e5f897a380..e2ee3265b9 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/components/ChapterNavigator.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/components/ChapterNavigator.kt @@ -30,11 +30,11 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.platform.LocalLayoutDirection -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import eu.kanade.presentation.util.isTabletUi -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import kotlin.math.roundToInt @Composable @@ -78,7 +78,7 @@ fun ChapterNavigator( Icon( imageVector = Icons.Outlined.SkipPrevious, contentDescription = stringResource( - if (isRtl) R.string.action_next_chapter else R.string.action_previous_chapter, + if (isRtl) MR.strings.action_next_chapter else MR.strings.action_previous_chapter, ), ) } @@ -131,7 +131,7 @@ fun ChapterNavigator( Icon( imageVector = Icons.Outlined.SkipNext, contentDescription = stringResource( - if (isRtl) R.string.action_previous_chapter else R.string.action_next_chapter, + if (isRtl) MR.strings.action_previous_chapter else MR.strings.action_next_chapter, ), ) } 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 045155b692..14635e50f4 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 @@ -16,12 +16,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.res.stringResource import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp import eu.kanade.presentation.theme.TachiyomiTheme -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.SettingsItemsPaddings +import tachiyomi.presentation.core.i18n.stringResource @Composable fun ModeSelectionDialog( @@ -40,7 +40,7 @@ fun ModeSelectionDialog( ) { onUseDefault?.let { OutlinedButton(onClick = it) { - Text(text = stringResource(R.string.action_revert_to_default)) + Text(text = stringResource(MR.strings.action_revert_to_default)) } } @@ -57,7 +57,7 @@ fun ModeSelectionDialog( imageVector = Icons.Outlined.Check, contentDescription = null, ) - Text(text = stringResource(R.string.action_apply)) + Text(text = stringResource(MR.strings.action_apply)) } } } diff --git a/app/src/main/java/eu/kanade/presentation/reader/settings/ColorFilterPage.kt b/app/src/main/java/eu/kanade/presentation/reader/settings/ColorFilterPage.kt index d38220d9b7..1e7324956b 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/settings/ColorFilterPage.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/settings/ColorFilterPage.kt @@ -6,17 +6,17 @@ import androidx.compose.material3.FilterChip import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue -import androidx.compose.ui.res.stringResource import androidx.core.graphics.alpha import androidx.core.graphics.blue import androidx.core.graphics.green import androidx.core.graphics.red -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel import tachiyomi.core.preference.getAndSet +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.CheckboxItem import tachiyomi.presentation.core.components.SettingsChipRow import tachiyomi.presentation.core.components.SliderItem +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState @Composable @@ -24,17 +24,17 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) val colorFilterModes = buildList { addAll( listOf( - R.string.label_default, - R.string.filter_mode_multiply, - R.string.filter_mode_screen, + MR.strings.label_default, + MR.strings.filter_mode_multiply, + MR.strings.filter_mode_screen, ), ) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { addAll( listOf( - R.string.filter_mode_overlay, - R.string.filter_mode_lighten, - R.string.filter_mode_darken, + MR.strings.filter_mode_overlay, + MR.strings.filter_mode_lighten, + MR.strings.filter_mode_darken, ), ) } @@ -42,7 +42,7 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) val customBrightness by screenModel.preferences.customBrightness().collectAsState() CheckboxItem( - label = stringResource(R.string.pref_custom_brightness), + label = stringResource(MR.strings.pref_custom_brightness), pref = screenModel.preferences.customBrightness(), ) @@ -55,7 +55,7 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) if (customBrightness) { val customBrightnessValue by screenModel.preferences.customBrightnessValue().collectAsState() SliderItem( - label = stringResource(R.string.pref_custom_brightness), + label = stringResource(MR.strings.pref_custom_brightness), min = -75, max = 100, value = customBrightnessValue, @@ -66,13 +66,13 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) val colorFilter by screenModel.preferences.colorFilter().collectAsState() CheckboxItem( - label = stringResource(R.string.pref_custom_color_filter), + label = stringResource(MR.strings.pref_custom_color_filter), pref = screenModel.preferences.colorFilter(), ) if (colorFilter) { val colorFilterValue by screenModel.preferences.colorFilterValue().collectAsState() SliderItem( - label = stringResource(R.string.color_filter_r_value), + label = stringResource(MR.strings.color_filter_r_value), max = 255, value = colorFilterValue.red, valueText = colorFilterValue.red.toString(), @@ -83,7 +83,7 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) }, ) SliderItem( - label = stringResource(R.string.color_filter_g_value), + label = stringResource(MR.strings.color_filter_g_value), max = 255, value = colorFilterValue.green, valueText = colorFilterValue.green.toString(), @@ -94,7 +94,7 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) }, ) SliderItem( - label = stringResource(R.string.color_filter_b_value), + label = stringResource(MR.strings.color_filter_b_value), max = 255, value = colorFilterValue.blue, valueText = colorFilterValue.blue.toString(), @@ -105,7 +105,7 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) }, ) SliderItem( - label = stringResource(R.string.color_filter_a_value), + label = stringResource(MR.strings.color_filter_a_value), max = 255, value = colorFilterValue.alpha, valueText = colorFilterValue.alpha.toString(), @@ -117,7 +117,7 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) ) val colorFilterMode by screenModel.preferences.colorFilterMode().collectAsState() - SettingsChipRow(R.string.pref_color_filter_mode) { + SettingsChipRow(MR.strings.pref_color_filter_mode) { colorFilterModes.mapIndexed { index, it -> FilterChip( selected = colorFilterMode == index, @@ -129,11 +129,11 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) } CheckboxItem( - label = stringResource(R.string.pref_grayscale), + label = stringResource(MR.strings.pref_grayscale), pref = screenModel.preferences.grayscale(), ) CheckboxItem( - label = stringResource(R.string.pref_inverted_colors), + label = stringResource(MR.strings.pref_inverted_colors), pref = screenModel.preferences.invertedColors(), ) } diff --git a/app/src/main/java/eu/kanade/presentation/reader/settings/GeneralSettingsPage.kt b/app/src/main/java/eu/kanade/presentation/reader/settings/GeneralSettingsPage.kt index 5fe65eb2f0..6b631d4eec 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/settings/GeneralSettingsPage.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/settings/GeneralSettingsPage.kt @@ -5,24 +5,24 @@ import androidx.compose.material3.FilterChip import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue -import androidx.compose.ui.res.stringResource -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.CheckboxItem import tachiyomi.presentation.core.components.SettingsChipRow +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState private val themes = listOf( - R.string.black_background to 1, - R.string.gray_background to 2, - R.string.white_background to 0, - R.string.automatic_background to 3, + MR.strings.black_background to 1, + MR.strings.gray_background to 2, + MR.strings.white_background to 0, + MR.strings.automatic_background to 3, ) @Composable internal fun ColumnScope.GeneralPage(screenModel: ReaderSettingsScreenModel) { val readerTheme by screenModel.preferences.readerTheme().collectAsState() - SettingsChipRow(R.string.pref_reader_theme) { + SettingsChipRow(MR.strings.pref_reader_theme) { themes.map { (labelRes, value) -> FilterChip( selected = readerTheme == value, @@ -33,44 +33,44 @@ internal fun ColumnScope.GeneralPage(screenModel: ReaderSettingsScreenModel) { } CheckboxItem( - label = stringResource(R.string.pref_show_page_number), + label = stringResource(MR.strings.pref_show_page_number), pref = screenModel.preferences.showPageNumber(), ) CheckboxItem( - label = stringResource(R.string.pref_fullscreen), + label = stringResource(MR.strings.pref_fullscreen), pref = screenModel.preferences.fullscreen(), ) if (screenModel.hasDisplayCutout) { CheckboxItem( - label = stringResource(R.string.pref_cutout_short), + label = stringResource(MR.strings.pref_cutout_short), pref = screenModel.preferences.cutoutShort(), ) } CheckboxItem( - label = stringResource(R.string.pref_keep_screen_on), + label = stringResource(MR.strings.pref_keep_screen_on), pref = screenModel.preferences.keepScreenOn(), ) CheckboxItem( - label = stringResource(R.string.pref_read_with_long_tap), + label = stringResource(MR.strings.pref_read_with_long_tap), pref = screenModel.preferences.readWithLongTap(), ) CheckboxItem( - label = stringResource(R.string.pref_always_show_chapter_transition), + label = stringResource(MR.strings.pref_always_show_chapter_transition), pref = screenModel.preferences.alwaysShowChapterTransition(), ) CheckboxItem( - label = stringResource(R.string.pref_page_transitions), + label = stringResource(MR.strings.pref_page_transitions), pref = screenModel.preferences.pageTransitions(), ) CheckboxItem( - label = stringResource(R.string.pref_flash_page), + label = stringResource(MR.strings.pref_flash_page), pref = screenModel.preferences.flashOnPageChange(), ) } diff --git a/app/src/main/java/eu/kanade/presentation/reader/settings/ReaderSettingsDialog.kt b/app/src/main/java/eu/kanade/presentation/reader/settings/ReaderSettingsDialog.kt index 08dc5ae5e2..a15c9e5414 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/settings/ReaderSettingsDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/settings/ReaderSettingsDialog.kt @@ -11,13 +11,13 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalView -import androidx.compose.ui.res.stringResource import androidx.compose.ui.window.DialogWindowProvider import eu.kanade.presentation.components.TabbedDialog import eu.kanade.presentation.components.TabbedDialogPaddings -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel import kotlinx.collections.immutable.persistentListOf +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource @Composable fun ReaderSettingsDialog( @@ -27,9 +27,9 @@ fun ReaderSettingsDialog( screenModel: ReaderSettingsScreenModel, ) { val tabTitles = persistentListOf( - stringResource(R.string.pref_category_reading_mode), - stringResource(R.string.pref_category_general), - stringResource(R.string.custom_filter), + stringResource(MR.strings.pref_category_reading_mode), + stringResource(MR.strings.pref_category_general), + stringResource(MR.strings.custom_filter), ) val pagerState = rememberPagerState { tabTitles.size } diff --git a/app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt b/app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt index 6c582d6303..43b074a129 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt @@ -7,25 +7,25 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember -import androidx.compose.ui.res.stringResource import eu.kanade.domain.entries.manga.model.readerOrientation import eu.kanade.domain.entries.manga.model.readingMode -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.CheckboxItem import tachiyomi.presentation.core.components.HeadingItem import tachiyomi.presentation.core.components.SettingsChipRow import tachiyomi.presentation.core.components.SliderItem +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import java.text.NumberFormat @Composable internal fun ColumnScope.ReadingModePage(screenModel: ReaderSettingsScreenModel) { - HeadingItem(R.string.pref_category_for_this_series) + HeadingItem(MR.strings.pref_category_for_this_series) val manga by screenModel.mangaFlow.collectAsState() val readingMode = remember(manga) { @@ -33,7 +33,7 @@ internal fun ColumnScope.ReadingModePage(screenModel: ReaderSettingsScreenModel) manga?.readingMode?.toInt(), ) } - SettingsChipRow(R.string.pref_category_reading_mode) { + SettingsChipRow(MR.strings.pref_category_reading_mode) { ReadingMode.entries.map { FilterChip( selected = it == readingMode, @@ -48,7 +48,7 @@ internal fun ColumnScope.ReadingModePage(screenModel: ReaderSettingsScreenModel) manga?.readerOrientation?.toInt(), ) } - SettingsChipRow(R.string.rotation_type) { + SettingsChipRow(MR.strings.rotation_type) { ReaderOrientation.entries.map { FilterChip( selected = it == orientation, @@ -68,7 +68,7 @@ internal fun ColumnScope.ReadingModePage(screenModel: ReaderSettingsScreenModel) @Composable private fun ColumnScope.PagerViewerSettings(screenModel: ReaderSettingsScreenModel) { - HeadingItem(R.string.pager_viewer) + HeadingItem(MR.strings.pager_viewer) val navigationModePager by screenModel.preferences.navigationModePager().collectAsState() val pagerNavInverted by screenModel.preferences.pagerNavInverted().collectAsState() @@ -80,7 +80,7 @@ private fun ColumnScope.PagerViewerSettings(screenModel: ReaderSettingsScreenMod ) val imageScaleType by screenModel.preferences.imageScaleType().collectAsState() - SettingsChipRow(R.string.pref_image_scale_type) { + SettingsChipRow(MR.strings.pref_image_scale_type) { ReaderPreferences.ImageScaleType.mapIndexed { index, it -> FilterChip( selected = imageScaleType == index + 1, @@ -91,7 +91,7 @@ private fun ColumnScope.PagerViewerSettings(screenModel: ReaderSettingsScreenMod } val zoomStart by screenModel.preferences.zoomStart().collectAsState() - SettingsChipRow(R.string.pref_zoom_start) { + SettingsChipRow(MR.strings.pref_zoom_start) { ReaderPreferences.ZoomStart.mapIndexed { index, it -> FilterChip( selected = zoomStart == index + 1, @@ -102,42 +102,42 @@ private fun ColumnScope.PagerViewerSettings(screenModel: ReaderSettingsScreenMod } CheckboxItem( - label = stringResource(R.string.pref_crop_borders), + label = stringResource(MR.strings.pref_crop_borders), pref = screenModel.preferences.cropBorders(), ) CheckboxItem( - label = stringResource(R.string.pref_landscape_zoom), + label = stringResource(MR.strings.pref_landscape_zoom), pref = screenModel.preferences.landscapeZoom(), ) CheckboxItem( - label = stringResource(R.string.pref_navigate_pan), + label = stringResource(MR.strings.pref_navigate_pan), pref = screenModel.preferences.navigateToPan(), ) val dualPageSplitPaged by screenModel.preferences.dualPageSplitPaged().collectAsState() CheckboxItem( - label = stringResource(R.string.pref_dual_page_split), + label = stringResource(MR.strings.pref_dual_page_split), pref = screenModel.preferences.dualPageInvertPaged(), ) if (dualPageSplitPaged) { CheckboxItem( - label = stringResource(R.string.pref_dual_page_invert), + label = stringResource(MR.strings.pref_dual_page_invert), pref = screenModel.preferences.dualPageRotateToFitInvert(), ) } val dualPageRotateToFit by screenModel.preferences.dualPageRotateToFit().collectAsState() CheckboxItem( - label = stringResource(R.string.pref_page_rotate), + label = stringResource(MR.strings.pref_page_rotate), pref = screenModel.preferences.dualPageRotateToFit(), ) if (dualPageRotateToFit) { CheckboxItem( - label = stringResource(R.string.pref_page_rotate_invert), + label = stringResource(MR.strings.pref_page_rotate_invert), pref = screenModel.preferences.dualPageRotateToFitInvert(), ) } @@ -147,7 +147,7 @@ private fun ColumnScope.PagerViewerSettings(screenModel: ReaderSettingsScreenMod private fun ColumnScope.WebtoonViewerSettings(screenModel: ReaderSettingsScreenModel) { val numberFormat = remember { NumberFormat.getPercentInstance() } - HeadingItem(R.string.webtoon_viewer) + HeadingItem(MR.strings.webtoon_viewer) val navigationModeWebtoon by screenModel.preferences.navigationModeWebtoon().collectAsState() val webtoonNavInverted by screenModel.preferences.webtoonNavInverted().collectAsState() @@ -160,7 +160,7 @@ private fun ColumnScope.WebtoonViewerSettings(screenModel: ReaderSettingsScreenM val webtoonSidePadding by screenModel.preferences.webtoonSidePadding().collectAsState() SliderItem( - label = stringResource(R.string.pref_webtoon_side_padding), + label = stringResource(MR.strings.pref_webtoon_side_padding), min = ReaderPreferences.WEBTOON_PADDING_MIN, max = ReaderPreferences.WEBTOON_PADDING_MAX, value = webtoonSidePadding, @@ -171,38 +171,38 @@ private fun ColumnScope.WebtoonViewerSettings(screenModel: ReaderSettingsScreenM ) CheckboxItem( - label = stringResource(R.string.pref_crop_borders), + label = stringResource(MR.strings.pref_crop_borders), pref = screenModel.preferences.cropBordersWebtoon(), ) val dualPageSplitWebtoon by screenModel.preferences.dualPageSplitWebtoon().collectAsState() CheckboxItem( - label = stringResource(R.string.pref_dual_page_split), + label = stringResource(MR.strings.pref_dual_page_split), pref = screenModel.preferences.dualPageSplitWebtoon(), ) if (dualPageSplitWebtoon) { CheckboxItem( - label = stringResource(R.string.pref_dual_page_invert), + label = stringResource(MR.strings.pref_dual_page_invert), pref = screenModel.preferences.dualPageInvertWebtoon(), ) } val dualPageRotateToFitWebtoon by screenModel.preferences.dualPageRotateToFitWebtoon().collectAsState() CheckboxItem( - label = stringResource(R.string.pref_page_rotate), + label = stringResource(MR.strings.pref_page_rotate), pref = screenModel.preferences.dualPageRotateToFitWebtoon(), ) if (dualPageRotateToFitWebtoon) { CheckboxItem( - label = stringResource(R.string.pref_page_rotate_invert), + label = stringResource(MR.strings.pref_page_rotate_invert), pref = screenModel.preferences.dualPageRotateToFitInvertWebtoon(), ) } CheckboxItem( - label = stringResource(R.string.pref_double_tap_zoom), + label = stringResource(MR.strings.pref_double_tap_zoom), pref = screenModel.preferences.webtoonDoubleTapZoomEnabled(), ) } @@ -214,7 +214,7 @@ private fun ColumnScope.TapZonesItems( invertMode: ReaderPreferences.TappingInvertMode, onSelectInvertMode: (ReaderPreferences.TappingInvertMode) -> Unit, ) { - SettingsChipRow(R.string.pref_viewer_nav) { + SettingsChipRow(MR.strings.pref_viewer_nav) { ReaderPreferences.TapZones.mapIndexed { index, it -> FilterChip( selected = selected == index, @@ -225,12 +225,12 @@ private fun ColumnScope.TapZonesItems( } if (selected != 5) { - SettingsChipRow(R.string.pref_read_with_tapping_inverted) { + SettingsChipRow(MR.strings.pref_read_with_tapping_inverted) { ReaderPreferences.TappingInvertMode.entries.map { FilterChip( selected = it == invertMode, onClick = { onSelectInvertMode(it) }, - label = { Text(stringResource(it.titleResId)) }, + label = { Text(stringResource(it.titleRes)) }, ) } } 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 f167b20ca3..c20dd5285e 100644 --- a/app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogSelector.kt +++ b/app/src/main/java/eu/kanade/presentation/track/TrackInfoDialogSelector.kt @@ -26,23 +26,22 @@ import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.material3.rememberDatePickerState import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.res.stringResource 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.tachiyomi.R import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.WheelNumberPicker import tachiyomi.presentation.core.components.WheelTextPicker import tachiyomi.presentation.core.components.material.AlertDialogContent import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.isScrolledToEnd import tachiyomi.presentation.core.util.isScrolledToStart @@ -50,12 +49,12 @@ import tachiyomi.presentation.core.util.isScrolledToStart fun TrackStatusSelector( selection: Int, onSelectionChange: (Int) -> Unit, - selections: Map, + selections: Map, onConfirm: () -> Unit, onDismissRequest: () -> Unit, ) { BaseSelector( - title = stringResource(R.string.status), + title = stringResource(MR.strings.status), content = { val state = rememberLazyListState() ScrollbarLazyColumn(state = state) { @@ -111,7 +110,7 @@ fun TrackItemSelector( onDismissRequest: () -> Unit, isManga: Boolean, ) { - val titleText = if (isManga) R.string.chapters else R.string.episodes + val titleText = if (isManga) MR.strings.chapters else MR.strings.episodes BaseSelector( title = stringResource(titleText), content = { @@ -136,7 +135,7 @@ fun TrackScoreSelector( onDismissRequest: () -> Unit, ) { BaseSelector( - title = stringResource(R.string.score), + title = stringResource(MR.strings.score), content = { WheelTextPicker( items = selections, @@ -185,15 +184,15 @@ fun TrackDateSelector( ) { if (onRemove != null) { TextButton(onClick = onRemove) { - Text(text = stringResource(R.string.action_remove)) + Text(text = stringResource(MR.strings.action_remove)) } Spacer(modifier = Modifier.weight(1f)) } TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } TextButton(onClick = { onConfirm(pickerState.selectedDateMillis!!) }) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } } } @@ -231,10 +230,10 @@ fun BaseSelector( Spacer(modifier = Modifier.weight(1f)) } TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } TextButton(onClick = onConfirm) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } } }, @@ -251,14 +250,14 @@ private fun TrackStatusSelectorPreviews() { onSelectionChange = {}, selections = mapOf( // Anilist values - 1 to R.string.reading, - 2 to R.string.plan_to_read, - 3 to R.string.completed, - 4 to R.string.on_hold, - 5 to R.string.dropped, - 6 to R.string.repeating, - 7 to R.string.watching, - 8 to R.string.plan_to_watch, + 1 to MR.strings.reading, + 2 to MR.strings.plan_to_read, + 3 to MR.strings.completed, + 4 to MR.strings.on_hold, + 5 to MR.strings.dropped, + 6 to MR.strings.repeating, + 7 to MR.strings.watching, + 8 to MR.strings.plan_to_watch, ), onConfirm = {}, onDismissRequest = {}, diff --git a/app/src/main/java/eu/kanade/presentation/track/anime/AnimeTrackInfoDialogHome.kt b/app/src/main/java/eu/kanade/presentation/track/anime/AnimeTrackInfoDialogHome.kt index 765c03e139..b836c3547f 100644 --- a/app/src/main/java/eu/kanade/presentation/track/anime/AnimeTrackInfoDialogHome.kt +++ b/app/src/main/java/eu/kanade/presentation/track/anime/AnimeTrackInfoDialogHome.kt @@ -1,6 +1,5 @@ package eu.kanade.presentation.track.anime -import androidx.annotation.StringRes import androidx.compose.animation.animateContentSize import androidx.compose.foundation.background import androidx.compose.foundation.combinedClickable @@ -30,20 +29,21 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp +import dev.icerock.moko.resources.StringResource import eu.kanade.domain.track.anime.model.toDbTrack import eu.kanade.presentation.theme.TachiyomiTheme import eu.kanade.presentation.track.components.TrackLogoIcon import eu.kanade.presentation.track.manga.TrackDetailsItem import eu.kanade.presentation.track.manga.TrackInfoItemMenu -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.track.Tracker import eu.kanade.tachiyomi.ui.entries.anime.track.AnimeTrackItem import eu.kanade.tachiyomi.util.system.copyToClipboard +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import java.text.DateFormat private const val UnsetStatusTextAlpha = 0.5F @@ -123,7 +123,7 @@ fun AnimeTrackInfoDialogHome( private fun TrackInfoItem( title: String, tracker: Tracker, - @StringRes status: Int?, + status: StringResource?, onStatusClick: () -> Unit, episodes: String, onEpisodesClick: () -> Unit, @@ -201,7 +201,7 @@ private fun TrackInfoItem( modifier = Modifier .weight(1f) .alpha(if (score == null) UnsetStatusTextAlpha else 1f), - text = score ?: stringResource(R.string.score), + text = score ?: stringResource(MR.strings.score), onClick = onScoreClick, ) } @@ -213,14 +213,14 @@ private fun TrackInfoItem( TrackDetailsItem( modifier = Modifier.weight(1F), text = startDate, - placeholder = stringResource(R.string.track_started_reading_date), + placeholder = stringResource(MR.strings.track_started_reading_date), onClick = onStartDateClick, ) VerticalDivider() TrackDetailsItem( modifier = Modifier.weight(1F), text = endDate, - placeholder = stringResource(R.string.track_finished_reading_date), + placeholder = stringResource(MR.strings.track_finished_reading_date), onClick = onEndDateClick, ) } @@ -245,7 +245,7 @@ private fun TrackInfoItemEmpty( .padding(start = 16.dp) .weight(1f), ) { - Text(text = stringResource(R.string.add_tracking)) + Text(text = stringResource(MR.strings.add_tracking)) } } } diff --git a/app/src/main/java/eu/kanade/presentation/track/anime/AnimeTrackerSearch.kt b/app/src/main/java/eu/kanade/presentation/track/anime/AnimeTrackerSearch.kt index 1fbfb38db2..23a47a3f0b 100644 --- a/app/src/main/java/eu/kanade/presentation/track/anime/AnimeTrackerSearch.kt +++ b/app/src/main/java/eu/kanade/presentation/track/anime/AnimeTrackerSearch.kt @@ -20,7 +20,6 @@ import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.ArrowBack import androidx.compose.material.icons.filled.Close -import androidx.compose.material.icons.outlined.ArrowBack import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.HorizontalDivider @@ -36,7 +35,6 @@ import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.platform.LocalFocusManager -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.capitalize import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.TextFieldValue @@ -47,10 +45,11 @@ import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import eu.kanade.presentation.theme.TachiyomiTheme import eu.kanade.presentation.track.manga.SearchResultItem -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.presentation.core.util.plus @@ -106,7 +105,7 @@ fun AnimeTrackerSearch( decorationBox = { if (query.text.isEmpty()) { Text( - text = stringResource(R.string.action_search_hint), + text = stringResource(MR.strings.action_search_hint), color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.bodyLarge, ) @@ -149,7 +148,7 @@ fun AnimeTrackerSearch( .fillMaxWidth(), elevation = ButtonDefaults.elevatedButtonElevation(), ) { - Text(text = stringResource(R.string.action_track)) + Text(text = stringResource(MR.strings.action_track)) } } }, @@ -162,7 +161,7 @@ fun AnimeTrackerSearch( if (availableTracks.isEmpty()) { EmptyScreen( modifier = Modifier.padding(innerPadding), - textResource = R.string.no_results_found, + stringRes = MR.strings.no_results_found, ) } else { ScrollbarLazyColumn( @@ -194,7 +193,7 @@ fun AnimeTrackerSearch( EmptyScreen( modifier = Modifier.padding(innerPadding), message = queryResult.exceptionOrNull()?.message - ?: stringResource(R.string.unknown_error), + ?: stringResource(MR.strings.unknown_error), ) } } diff --git a/app/src/main/java/eu/kanade/presentation/track/manga/MangaTrackInfoDialogHome.kt b/app/src/main/java/eu/kanade/presentation/track/manga/MangaTrackInfoDialogHome.kt index 78f1925e4d..069b157198 100644 --- a/app/src/main/java/eu/kanade/presentation/track/manga/MangaTrackInfoDialogHome.kt +++ b/app/src/main/java/eu/kanade/presentation/track/manga/MangaTrackInfoDialogHome.kt @@ -1,6 +1,5 @@ package eu.kanade.presentation.track.manga -import androidx.annotation.StringRes import androidx.compose.animation.animateContentSize import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -41,20 +40,21 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp +import dev.icerock.moko.resources.StringResource import eu.kanade.domain.track.manga.model.toDbTrack import eu.kanade.presentation.components.DropdownMenu import eu.kanade.presentation.theme.TachiyomiTheme import eu.kanade.presentation.track.components.TrackLogoIcon -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.track.Tracker import eu.kanade.tachiyomi.ui.entries.manga.track.MangaTrackItem import eu.kanade.tachiyomi.util.system.copyToClipboard +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import java.text.DateFormat private const val UnsetStatusTextAlpha = 0.5F @@ -134,7 +134,7 @@ fun MangaTrackInfoDialogHome( private fun TrackInfoItem( title: String, tracker: Tracker, - @StringRes status: Int?, + status: StringResource?, onStatusClick: () -> Unit, chapters: String, onChaptersClick: () -> Unit, @@ -212,7 +212,7 @@ private fun TrackInfoItem( modifier = Modifier .weight(1f) .alpha(if (score == null) UnsetStatusTextAlpha else 1f), - text = score ?: stringResource(R.string.score), + text = score ?: stringResource(MR.strings.score), onClick = onScoreClick, ) } @@ -224,14 +224,14 @@ private fun TrackInfoItem( TrackDetailsItem( modifier = Modifier.weight(1F), text = startDate, - placeholder = stringResource(R.string.track_started_reading_date), + placeholder = stringResource(MR.strings.track_started_reading_date), onClick = onStartDateClick, ) VerticalDivider() TrackDetailsItem( modifier = Modifier.weight(1F), text = endDate, - placeholder = stringResource(R.string.track_finished_reading_date), + placeholder = stringResource(MR.strings.track_finished_reading_date), onClick = onEndDateClick, ) } @@ -282,7 +282,7 @@ private fun TrackInfoItemEmpty( .padding(start = 16.dp) .weight(1f), ) { - Text(text = stringResource(R.string.add_tracking)) + Text(text = stringResource(MR.strings.add_tracking)) } } } @@ -297,7 +297,7 @@ fun TrackInfoItemMenu( IconButton(onClick = { expanded = true }) { Icon( imageVector = Icons.Default.MoreVert, - contentDescription = stringResource(R.string.label_more), + contentDescription = stringResource(MR.strings.label_more), ) } DropdownMenu( @@ -305,14 +305,14 @@ fun TrackInfoItemMenu( onDismissRequest = { expanded = false }, ) { DropdownMenuItem( - text = { Text(stringResource(R.string.action_open_in_browser)) }, + text = { Text(stringResource(MR.strings.action_open_in_browser)) }, onClick = { onOpenInBrowser() expanded = false }, ) DropdownMenuItem( - text = { Text(stringResource(R.string.action_remove)) }, + text = { Text(stringResource(MR.strings.action_remove)) }, onClick = { onRemoved() expanded = false diff --git a/app/src/main/java/eu/kanade/presentation/track/manga/MangaTrackerSearch.kt b/app/src/main/java/eu/kanade/presentation/track/manga/MangaTrackerSearch.kt index 1338c32d41..ef7e8df7c2 100644 --- a/app/src/main/java/eu/kanade/presentation/track/manga/MangaTrackerSearch.kt +++ b/app/src/main/java/eu/kanade/presentation/track/manga/MangaTrackerSearch.kt @@ -50,7 +50,6 @@ import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.platform.LocalFocusManager -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.capitalize import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.TextFieldValue @@ -62,11 +61,12 @@ import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import eu.kanade.presentation.entries.ItemCover import eu.kanade.presentation.theme.TachiyomiTheme -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.track.model.MangaTrackSearch +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ScrollbarLazyColumn import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.LoadingScreen import tachiyomi.presentation.core.util.plus @@ -123,7 +123,7 @@ fun MangaTrackerSearch( decorationBox = { if (query.text.isEmpty()) { Text( - text = stringResource(R.string.action_search_hint), + text = stringResource(MR.strings.action_search_hint), color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.bodyLarge, ) @@ -166,7 +166,7 @@ fun MangaTrackerSearch( .fillMaxWidth(), elevation = ButtonDefaults.elevatedButtonElevation(), ) { - Text(text = stringResource(R.string.action_track)) + Text(text = stringResource(MR.strings.action_track)) } } }, @@ -179,7 +179,7 @@ fun MangaTrackerSearch( if (availableTracks.isEmpty()) { EmptyScreen( modifier = Modifier.padding(innerPadding), - textResource = R.string.no_results_found, + stringRes = MR.strings.no_results_found, ) } else { ScrollbarLazyColumn( @@ -211,7 +211,7 @@ fun MangaTrackerSearch( EmptyScreen( modifier = Modifier.padding(innerPadding), message = queryResult.exceptionOrNull()?.message - ?: stringResource(R.string.unknown_error), + ?: stringResource(MR.strings.unknown_error), ) } } @@ -270,19 +270,19 @@ fun SearchResultItem( ) if (type.isNotBlank()) { SearchResultItemDetails( - title = stringResource(R.string.track_type), + title = stringResource(MR.strings.track_type), text = type, ) } if (startDate.isNotBlank()) { SearchResultItemDetails( - title = stringResource(R.string.label_started), + title = stringResource(MR.strings.label_started), text = startDate, ) } if (status.isNotBlank()) { SearchResultItemDetails( - title = stringResource(R.string.track_status), + title = stringResource(MR.strings.track_status), text = status, ) } diff --git a/app/src/main/java/eu/kanade/presentation/updates/UpdatesDialog.kt b/app/src/main/java/eu/kanade/presentation/updates/UpdatesDialog.kt index 6094a7c673..bb641f0319 100644 --- a/app/src/main/java/eu/kanade/presentation/updates/UpdatesDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/updates/UpdatesDialog.kt @@ -4,8 +4,8 @@ import androidx.compose.material3.AlertDialog import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable -import androidx.compose.ui.res.stringResource -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource @Composable fun UpdatesDeleteConfirmationDialog( @@ -13,7 +13,7 @@ fun UpdatesDeleteConfirmationDialog( onConfirm: () -> Unit, isManga: Boolean, ) { - val title = if (isManga) R.string.confirm_delete_chapters else R.string.confirm_delete_episodes + val title = if (isManga) MR.strings.confirm_delete_chapters else MR.strings.confirm_delete_episodes AlertDialog( text = { Text(text = stringResource(title)) @@ -24,12 +24,12 @@ fun UpdatesDeleteConfirmationDialog( onConfirm() onDismissRequest() }) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } }, ) diff --git a/app/src/main/java/eu/kanade/presentation/updates/anime/AnimeUpdatesScreen.kt b/app/src/main/java/eu/kanade/presentation/updates/anime/AnimeUpdatesScreen.kt index b8b61cccd9..1a2e8a12e6 100644 --- a/app/src/main/java/eu/kanade/presentation/updates/anime/AnimeUpdatesScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/updates/anime/AnimeUpdatesScreen.kt @@ -18,13 +18,13 @@ import androidx.compose.ui.util.fastAll import androidx.compose.ui.util.fastAny import eu.kanade.presentation.entries.EntryBottomActionMenu import eu.kanade.presentation.entries.anime.components.EpisodeDownloadAction -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload import eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences import eu.kanade.tachiyomi.ui.updates.anime.AnimeUpdatesItem import eu.kanade.tachiyomi.ui.updates.anime.AnimeUpdatesScreenModel import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.material.PullRefresh import tachiyomi.presentation.core.components.material.Scaffold @@ -72,7 +72,7 @@ fun AnimeUpdateScreen( when { state.isLoading -> LoadingScreen(Modifier.padding(contentPadding)) state.items.isEmpty() -> EmptyScreen( - textResource = R.string.information_no_recent, + stringRes = MR.strings.information_no_recent, modifier = Modifier.padding(contentPadding), ) else -> { diff --git a/app/src/main/java/eu/kanade/presentation/updates/anime/AnimeUpdatesUiItem.kt b/app/src/main/java/eu/kanade/presentation/updates/anime/AnimeUpdatesUiItem.kt index 9696ff504f..b26afd4e58 100644 --- a/app/src/main/java/eu/kanade/presentation/updates/anime/AnimeUpdatesUiItem.kt +++ b/app/src/main/java/eu/kanade/presentation/updates/anime/AnimeUpdatesUiItem.kt @@ -30,7 +30,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalHapticFeedback -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp @@ -39,13 +38,14 @@ import eu.kanade.presentation.entries.ItemCover import eu.kanade.presentation.entries.anime.components.EpisodeDownloadAction import eu.kanade.presentation.entries.anime.components.EpisodeDownloadIndicator import eu.kanade.presentation.util.relativeTimeSpanString -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload import eu.kanade.tachiyomi.ui.updates.anime.AnimeUpdatesItem import tachiyomi.domain.updates.anime.model.AnimeUpdatesWithRelations +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ListGroupHeader import tachiyomi.presentation.core.components.material.ReadItemAlpha import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.selectedBackground import java.util.concurrent.TimeUnit @@ -63,7 +63,7 @@ fun LazyListScope.animeUpdatesLastUpdatedItem( ), ) { Text( - text = stringResource(R.string.updates_last_update_info, relativeTimeSpanString(lastUpdated)), + text = stringResource(MR.strings.updates_last_update_info, relativeTimeSpanString(lastUpdated)), fontStyle = FontStyle.Italic, ) } @@ -111,7 +111,7 @@ fun LazyListScope.animeUpdatesUiItems( .takeIf { !updatesItem.update.seen && it > 0L } ?.let { stringResource( - R.string.episode_progress, + MR.strings.episode_progress, formatProgress(it), formatProgress(updatesItem.update.totalSeconds), ) @@ -199,7 +199,7 @@ fun AnimeUpdatesUiItem( if (!update.seen) { Icon( imageVector = Icons.Filled.Circle, - contentDescription = stringResource(R.string.unread), + contentDescription = stringResource(MR.strings.unread), modifier = Modifier .height(8.dp) .padding(end = 4.dp), @@ -209,7 +209,7 @@ fun AnimeUpdatesUiItem( if (update.bookmark) { Icon( imageVector = Icons.Filled.Bookmark, - contentDescription = stringResource(R.string.action_filter_bookmarked), + contentDescription = stringResource(MR.strings.action_filter_bookmarked), modifier = Modifier .sizeIn( maxHeight = with(LocalDensity.current) { textHeight.toDp() - 2.dp }, diff --git a/app/src/main/java/eu/kanade/presentation/updates/manga/MangaUpdatesScreen.kt b/app/src/main/java/eu/kanade/presentation/updates/manga/MangaUpdatesScreen.kt index 7de55cd6ce..5c3648a5a7 100644 --- a/app/src/main/java/eu/kanade/presentation/updates/manga/MangaUpdatesScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/updates/manga/MangaUpdatesScreen.kt @@ -18,12 +18,12 @@ import androidx.compose.ui.util.fastAll import androidx.compose.ui.util.fastAny import eu.kanade.presentation.entries.EntryBottomActionMenu import eu.kanade.presentation.entries.manga.components.ChapterDownloadAction -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.manga.model.MangaDownload import eu.kanade.tachiyomi.ui.updates.manga.MangaUpdatesItem import eu.kanade.tachiyomi.ui.updates.manga.MangaUpdatesScreenModel import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.FastScrollLazyColumn import tachiyomi.presentation.core.components.material.PullRefresh import tachiyomi.presentation.core.components.material.Scaffold @@ -68,7 +68,7 @@ fun MangaUpdateScreen( when { state.isLoading -> LoadingScreen(Modifier.padding(contentPadding)) state.items.isEmpty() -> EmptyScreen( - textResource = R.string.information_no_recent, + stringRes = MR.strings.information_no_recent, modifier = Modifier.padding(contentPadding), ) else -> { diff --git a/app/src/main/java/eu/kanade/presentation/updates/manga/MangaUpdatesUiItem.kt b/app/src/main/java/eu/kanade/presentation/updates/manga/MangaUpdatesUiItem.kt index b2fadf3d1c..e009338c88 100644 --- a/app/src/main/java/eu/kanade/presentation/updates/manga/MangaUpdatesUiItem.kt +++ b/app/src/main/java/eu/kanade/presentation/updates/manga/MangaUpdatesUiItem.kt @@ -27,11 +27,9 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.alpha import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalHapticFeedback -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp @@ -40,13 +38,14 @@ import eu.kanade.presentation.entries.ItemCover import eu.kanade.presentation.entries.manga.components.ChapterDownloadAction import eu.kanade.presentation.entries.manga.components.ChapterDownloadIndicator import eu.kanade.presentation.util.relativeTimeSpanString -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.manga.model.MangaDownload import eu.kanade.tachiyomi.ui.updates.manga.MangaUpdatesItem import tachiyomi.domain.updates.manga.model.MangaUpdatesWithRelations +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.ListGroupHeader import tachiyomi.presentation.core.components.material.ReadItemAlpha import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.selectedBackground @OptIn(ExperimentalFoundationApi::class) @@ -63,7 +62,7 @@ fun LazyListScope.mangaUpdatesLastUpdatedItem( ), ) { Text( - text = stringResource(R.string.updates_last_update_info, relativeTimeSpanString(lastUpdated)), + text = stringResource(MR.strings.updates_last_update_info, relativeTimeSpanString(lastUpdated)), fontStyle = FontStyle.Italic, ) } @@ -111,7 +110,7 @@ fun LazyListScope.mangaUpdatesUiItems( .takeIf { !updatesItem.update.read && it > 0L } ?.let { stringResource( - R.string.chapter_progress, + MR.strings.chapter_progress, it + 1, ) }, @@ -197,7 +196,7 @@ fun MangaUpdatesUiItem( if (!update.read) { Icon( imageVector = Icons.Filled.Circle, - contentDescription = stringResource(R.string.unread), + contentDescription = stringResource(MR.strings.unread), modifier = Modifier .height(8.dp) .padding(end = 4.dp), @@ -207,7 +206,7 @@ fun MangaUpdatesUiItem( if (update.bookmark) { Icon( imageVector = Icons.Filled.Bookmark, - contentDescription = stringResource(R.string.action_filter_bookmarked), + contentDescription = stringResource(MR.strings.action_filter_bookmarked), modifier = Modifier .sizeIn( maxHeight = with(LocalDensity.current) { textHeight.toDp() - 2.dp }, diff --git a/app/src/main/java/eu/kanade/presentation/util/ExceptionFormatter.kt b/app/src/main/java/eu/kanade/presentation/util/ExceptionFormatter.kt index 76dfaffc47..2822a77f37 100644 --- a/app/src/main/java/eu/kanade/presentation/util/ExceptionFormatter.kt +++ b/app/src/main/java/eu/kanade/presentation/util/ExceptionFormatter.kt @@ -1,36 +1,37 @@ package eu.kanade.presentation.util import android.content.Context -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.animesource.online.LicensedEntryItemsException import eu.kanade.tachiyomi.network.HttpException import eu.kanade.tachiyomi.util.system.isOnline +import tachiyomi.core.i18n.stringResource import tachiyomi.domain.items.chapter.model.NoChaptersException import tachiyomi.domain.items.episode.model.NoEpisodesException import tachiyomi.domain.source.anime.model.AnimeSourceNotInstalledException import tachiyomi.domain.source.manga.model.SourceNotInstalledException +import tachiyomi.i18n.MR import java.net.UnknownHostException context(Context) val Throwable.formattedMessage: String get() { when (this) { - is HttpException -> return getString(R.string.exception_http, code) + is HttpException -> return stringResource(MR.strings.exception_http, code) is UnknownHostException -> { return if (!isOnline()) { - getString(R.string.exception_offline) + stringResource(MR.strings.exception_offline) } else { - getString(R.string.exception_unknown_host, message) + stringResource(MR.strings.exception_unknown_host, message ?: "") } } - is NoChaptersException, is NoEpisodesException -> return getString( - R.string.no_results_found, + is NoChaptersException, is NoEpisodesException -> return stringResource( + MR.strings.no_results_found, ) - is SourceNotInstalledException, is AnimeSourceNotInstalledException -> return getString( - R.string.loader_not_implemented_error, + is SourceNotInstalledException, is AnimeSourceNotInstalledException -> return stringResource( + MR.strings.loader_not_implemented_error, ) - is LicensedEntryItemsException -> return getString( - R.string.licensed_manga_chapters_error, + is LicensedEntryItemsException -> return stringResource( + MR.strings.licensed_manga_chapters_error, ) } return when (val className = this::class.simpleName) { diff --git a/app/src/main/java/eu/kanade/presentation/util/TimeUtils.kt b/app/src/main/java/eu/kanade/presentation/util/TimeUtils.kt index 20ce166fae..30a2a28b08 100644 --- a/app/src/main/java/eu/kanade/presentation/util/TimeUtils.kt +++ b/app/src/main/java/eu/kanade/presentation/util/TimeUtils.kt @@ -4,8 +4,9 @@ import android.content.Context import android.text.format.DateUtils import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable -import androidx.compose.ui.res.stringResource -import eu.kanade.tachiyomi.R +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import java.util.Date import kotlin.time.Duration import kotlin.time.Duration.Companion.minutes @@ -13,16 +14,16 @@ import kotlin.time.Duration.Companion.minutes fun Duration.toDurationString(context: Context, fallback: String): String { return toComponents { days, hours, minutes, seconds, _ -> buildList(4) { - if (days != 0L) add(context.getString(R.string.day_short, days)) - if (hours != 0) add(context.getString(R.string.hour_short, hours)) + if (days != 0L) add(context.stringResource(MR.strings.day_short, days)) + if (hours != 0) add(context.stringResource(MR.strings.hour_short, hours)) if (minutes != 0 && (days == 0L || hours == 0)) { add( - context.getString(R.string.minute_short, minutes), + context.stringResource(MR.strings.minute_short, minutes), ) } if (seconds != 0 && days == 0L && hours == 0) { add( - context.getString(R.string.seconds_short, seconds), + context.stringResource(MR.strings.seconds_short, seconds), ) } }.joinToString(" ").ifBlank { fallback } @@ -34,8 +35,10 @@ fun Duration.toDurationString(context: Context, fallback: String): String { fun relativeTimeSpanString(epochMillis: Long): String { val now = Date().time return when { - epochMillis <= 0L -> stringResource(R.string.relative_time_span_never) - now - epochMillis < 1.minutes.inWholeMilliseconds -> stringResource(R.string.updates_last_update_info_just_now) + epochMillis <= 0L -> stringResource(MR.strings.relative_time_span_never) + now - epochMillis < 1.minutes.inWholeMilliseconds -> stringResource( + MR.strings.updates_last_update_info_just_now, + ) else -> DateUtils.getRelativeTimeSpanString(epochMillis, now, DateUtils.MINUTE_IN_MILLIS).toString() } } diff --git a/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt b/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt index 0d6e3cc884..8ed9aec564 100644 --- a/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt +++ b/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt @@ -27,7 +27,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.google.accompanist.web.AccompanistWebViewClient import com.google.accompanist.web.LoadingState @@ -38,12 +37,13 @@ import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.WarningBanner import eu.kanade.tachiyomi.BuildConfig -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.util.system.getHtml import eu.kanade.tachiyomi.util.system.setDefaultSettings import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.launch +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource @Composable fun WebViewScreenContent( @@ -119,7 +119,7 @@ fun WebViewScreenContent( AppBarActions( persistentListOf( AppBar.Action( - title = stringResource(R.string.action_webview_back), + title = stringResource(MR.strings.action_webview_back), icon = Icons.Outlined.ArrowBack, onClick = { if (navigator.canGoBack) { @@ -129,7 +129,7 @@ fun WebViewScreenContent( enabled = navigator.canGoBack, ), AppBar.Action( - title = stringResource(R.string.action_webview_forward), + title = stringResource(MR.strings.action_webview_forward), icon = Icons.Outlined.ArrowForward, onClick = { if (navigator.canGoForward) { @@ -139,19 +139,19 @@ fun WebViewScreenContent( enabled = navigator.canGoForward, ), AppBar.OverflowAction( - title = stringResource(R.string.action_webview_refresh), + title = stringResource(MR.strings.action_webview_refresh), onClick = { navigator.reload() }, ), AppBar.OverflowAction( - title = stringResource(R.string.action_share), + title = stringResource(MR.strings.action_share), onClick = { onShare(currentUrl) }, ), AppBar.OverflowAction( - title = stringResource(R.string.action_open_in_browser), + title = stringResource(MR.strings.action_open_in_browser), onClick = { onOpenInBrowser(currentUrl) }, ), AppBar.OverflowAction( - title = stringResource(R.string.pref_clear_cookies), + title = stringResource(MR.strings.pref_clear_cookies), onClick = { onClearCookies(currentUrl) }, ), ), @@ -164,7 +164,7 @@ fun WebViewScreenContent( modifier = Modifier.padding(8.dp), ) { WarningBanner( - textRes = R.string.information_cloudflare_help, + textRes = MR.strings.information_cloudflare_help, modifier = Modifier .clip(MaterialTheme.shapes.small) .clickable { diff --git a/app/src/main/java/eu/kanade/tachiyomi/App.kt b/app/src/main/java/eu/kanade/tachiyomi/App.kt index f3b93859c8..c7157a1aee 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/App.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/App.kt @@ -59,7 +59,9 @@ import org.acra.data.StringFormat import org.acra.ktx.initAcra import org.acra.sender.HttpSender import org.conscrypt.Conscrypt +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.system.logcat +import tachiyomi.i18n.MR import tachiyomi.presentation.widget.entries.anime.AnimeWidgetManager import tachiyomi.presentation.widget.entries.manga.MangaWidgetManager import uy.kohesive.injekt.Injekt @@ -112,8 +114,8 @@ class App : Application(), DefaultLifecycleObserver, ImageLoaderFactory { Notifications.ID_INCOGNITO_MODE, Notifications.CHANNEL_INCOGNITO_MODE, ) { - setContentTitle(getString(R.string.pref_incognito_mode)) - setContentText(getString(R.string.notification_incognito_text)) + setContentTitle(stringResource(MR.strings.pref_incognito_mode)) + setContentText(stringResource(MR.strings.notification_incognito_text)) setSmallIcon(R.drawable.ic_glasses_24dp) setOngoing(true) diff --git a/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt b/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt index 9a0d543539..126c7ca9ef 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt @@ -17,8 +17,8 @@ import eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.util.system.DeviceUtil -import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.system.workManager +import tachiyomi.core.i18n.stringResource import tachiyomi.core.preference.Preference import tachiyomi.core.preference.PreferenceStore import tachiyomi.core.preference.TriState @@ -29,6 +29,7 @@ import tachiyomi.core.preference.plusAssign import tachiyomi.domain.backup.service.BackupPreferences import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_NON_COMPLETED +import tachiyomi.i18n.MR import java.io.File object Migrations { @@ -166,7 +167,7 @@ object Migrations { // v53: switched from WebView to OAuth if (trackerManager.myAnimeList.isLoggedIn) { trackerManager.myAnimeList.logout() - context.toast(R.string.myanimelist_relogin) + context.stringResource(MR.strings.myanimelist_relogin) } } if (oldVersion < 57) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreator.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreator.kt index 6a5b44a25c..ef836e74c7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreator.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreator.kt @@ -7,7 +7,6 @@ import android.content.pm.PackageManager import android.net.Uri import androidx.preference.PreferenceManager import com.hippo.unifile.UniFile -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.backup.BackupCreateFlags.BACKUP_CATEGORY import eu.kanade.tachiyomi.data.backup.BackupCreateFlags.BACKUP_CHAPTER import eu.kanade.tachiyomi.data.backup.BackupCreateFlags.BACKUP_EXTENSIONS @@ -49,6 +48,7 @@ import logcat.LogPriority import okio.buffer import okio.gzip import okio.sink +import tachiyomi.core.i18n.stringResource import tachiyomi.core.preference.Preference import tachiyomi.core.util.system.logcat import tachiyomi.data.handlers.anime.AnimeDatabaseHandler @@ -64,6 +64,7 @@ import tachiyomi.domain.history.anime.interactor.GetAnimeHistory import tachiyomi.domain.history.manga.interactor.GetMangaHistory import tachiyomi.domain.source.anime.service.AnimeSourceManager import tachiyomi.domain.source.manga.service.MangaSourceManager +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.io.File @@ -94,7 +95,7 @@ class BackupCreator( */ suspend fun createBackup(uri: Uri, flags: Int, isAutoBackup: Boolean): String { if (!context.hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) { - throw IllegalStateException(context.getString(R.string.missing_storage_permission)) + throw IllegalStateException(context.stringResource(MR.strings.missing_storage_permission)) } val databaseAnime = getAnimeFavorites.await() @@ -137,7 +138,7 @@ class BackupCreator( UniFile.fromUri(context, uri) } ) - ?: throw Exception(context.getString(R.string.create_backup_file_error)) + ?: throw Exception(context.stringResource(MR.strings.create_backup_file_error)) if (!file.isFile) { throw IllegalStateException("Failed to get handle on a backup file") @@ -145,7 +146,7 @@ class BackupCreator( val byteArray = parser.encodeToByteArray(BackupSerializer, backup) if (byteArray.isEmpty()) { - throw IllegalStateException(context.getString(R.string.empty_backup_error)) + throw IllegalStateException(context.stringResource(MR.strings.empty_backup_error)) } file.openOutputStream().also { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupFileValidator.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupFileValidator.kt index e72cbc899b..a90f54dcdb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupFileValidator.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupFileValidator.kt @@ -2,11 +2,12 @@ package eu.kanade.tachiyomi.data.backup import android.content.Context import android.net.Uri -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.track.TrackerManager import eu.kanade.tachiyomi.util.BackupUtil +import tachiyomi.core.i18n.stringResource import tachiyomi.domain.source.anime.service.AnimeSourceManager import tachiyomi.domain.source.manga.service.MangaSourceManager +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -31,7 +32,7 @@ class BackupFileValidator( if (backup.backupManga.isEmpty() && backup.backupAnime.isEmpty()) { throw IllegalStateException( - context.getString(R.string.invalid_backup_file_missing_manga), + context.stringResource(MR.strings.invalid_backup_file_missing_manga), ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt index 0cce54c459..7aff65df63 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt @@ -12,6 +12,8 @@ import eu.kanade.tachiyomi.util.storage.getUriCompat import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.notificationBuilder import eu.kanade.tachiyomi.util.system.notify +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy import java.io.File import java.util.concurrent.TimeUnit @@ -44,7 +46,7 @@ class BackupNotifier(private val context: Context) { fun showBackupProgress(): NotificationCompat.Builder { val builder = with(progressNotificationBuilder) { - setContentTitle(context.getString(R.string.creating_backup)) + setContentTitle(context.stringResource(MR.strings.creating_backup)) setProgress(0, 0, true) } @@ -58,7 +60,7 @@ class BackupNotifier(private val context: Context) { context.cancelNotification(Notifications.ID_BACKUP_PROGRESS) with(completeNotificationBuilder) { - setContentTitle(context.getString(R.string.creating_backup_error)) + setContentTitle(context.stringResource(MR.strings.creating_backup_error)) setContentText(error) show(Notifications.ID_BACKUP_COMPLETE) @@ -69,13 +71,13 @@ class BackupNotifier(private val context: Context) { context.cancelNotification(Notifications.ID_BACKUP_PROGRESS) with(completeNotificationBuilder) { - setContentTitle(context.getString(R.string.backup_created)) + setContentTitle(context.stringResource(MR.strings.backup_created)) setContentText(unifile.filePath ?: unifile.name) clearActions() addAction( R.drawable.ic_share_24dp, - context.getString(R.string.action_share), + context.stringResource(MR.strings.action_share), NotificationReceiver.shareBackupPendingBroadcast( context, unifile.uri, @@ -89,7 +91,7 @@ class BackupNotifier(private val context: Context) { fun showRestoreProgress( content: String = "", - contentTitle: String = context.getString(R.string.restoring_backup), + contentTitle: String = context.stringResource(MR.strings.restoring_backup), progress: Int = 0, maxAmount: Int = 100, ): NotificationCompat.Builder { @@ -106,7 +108,7 @@ class BackupNotifier(private val context: Context) { clearActions() addAction( R.drawable.ic_close_24dp, - context.getString(R.string.action_cancel), + context.stringResource(MR.strings.action_cancel), NotificationReceiver.cancelRestorePendingBroadcast( context, Notifications.ID_RESTORE_PROGRESS, @@ -123,7 +125,7 @@ class BackupNotifier(private val context: Context) { context.cancelNotification(Notifications.ID_RESTORE_PROGRESS) with(completeNotificationBuilder) { - setContentTitle(context.getString(R.string.restoring_backup_error)) + setContentTitle(context.stringResource(MR.strings.restoring_backup_error)) setContentText(error) show(Notifications.ID_RESTORE_COMPLETE) @@ -135,12 +137,12 @@ class BackupNotifier(private val context: Context) { errorCount: Int, path: String?, file: String?, - contentTitle: String = context.getString(R.string.restore_completed), + contentTitle: String = context.stringResource(MR.strings.restore_completed), ) { context.cancelNotification(Notifications.ID_RESTORE_PROGRESS) - val timeString = context.getString( - R.string.restore_duration, + val timeString = context.stringResource( + MR.strings.restore_duration, TimeUnit.MILLISECONDS.toMinutes(time), TimeUnit.MILLISECONDS.toSeconds(time) - TimeUnit.MINUTES.toSeconds( TimeUnit.MILLISECONDS.toMinutes(time), @@ -167,7 +169,7 @@ class BackupNotifier(private val context: Context) { setContentIntent(errorLogIntent) addAction( R.drawable.ic_folder_24dp, - context.getString(R.string.action_show_errors), + context.stringResource(MR.strings.action_show_errors), errorLogIntent, ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreJob.kt index fc4a067456..403eabc984 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreJob.kt @@ -9,14 +9,15 @@ import androidx.work.ForegroundInfo import androidx.work.OneTimeWorkRequestBuilder import androidx.work.WorkerParameters import androidx.work.workDataOf -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.isRunning import eu.kanade.tachiyomi.util.system.workManager import kotlinx.coroutines.CancellationException import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.system.logcat +import tachiyomi.i18n.MR class BackupRestoreJob(private val context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams) { @@ -40,7 +41,7 @@ class BackupRestoreJob(private val context: Context, workerParams: WorkerParamet Result.success() } catch (e: Exception) { if (e is CancellationException) { - notifier.showRestoreError(context.getString(R.string.restoring_backup_canceled)) + notifier.showRestoreError(context.stringResource(MR.strings.restoring_backup_canceled)) Result.success() } else { logcat(LogPriority.ERROR, e) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestorer.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestorer.kt index 2243a6dd7a..e79fa352ee 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestorer.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestorer.kt @@ -11,7 +11,6 @@ import dataanime.Anime_sync import dataanime.Animes import eu.kanade.domain.entries.anime.interactor.UpdateAnime import eu.kanade.domain.entries.manga.interactor.UpdateManga -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.backup.models.BackupAnime import eu.kanade.tachiyomi.data.backup.models.BackupAnimeHistory import eu.kanade.tachiyomi.data.backup.models.BackupAnimeSource @@ -37,6 +36,7 @@ import eu.kanade.tachiyomi.util.storage.getUriCompat import eu.kanade.tachiyomi.util.system.createFileInCacheDir import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.isActive +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.system.logcat import tachiyomi.data.AnimeUpdateStrategyColumnAdapter import tachiyomi.data.MangaUpdateStrategyColumnAdapter @@ -57,6 +57,7 @@ import tachiyomi.domain.items.episode.model.Episode import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.track.anime.model.AnimeTrack import tachiyomi.domain.track.manga.model.MangaTrack +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.io.File @@ -120,7 +121,7 @@ class BackupRestorer( errors.size, logFile.parent, logFile.name, - contentTitle = context.getString(R.string.library_sync_complete), + contentTitle = context.stringResource(MR.strings.library_sync_complete), ) } else { notifier.showRestoreComplete(time, errors.size, logFile.parent, logFile.name) @@ -256,8 +257,8 @@ class BackupRestorer( showRestoreProgress( restoreProgress, restoreAmount, - context.getString(R.string.manga_categories), - context.getString(R.string.restoring_backup), + context.stringResource(MR.strings.manga_categories), + context.stringResource(MR.strings.restoring_backup), ) } @@ -299,8 +300,8 @@ class BackupRestorer( showRestoreProgress( restoreProgress, restoreAmount, - context.getString(R.string.anime_categories), - context.getString(R.string.restoring_backup), + context.stringResource(MR.strings.anime_categories), + context.stringResource(MR.strings.restoring_backup), ) } @@ -347,14 +348,14 @@ class BackupRestorer( restoreProgress, restoreAmount, manga.title, - context.getString(R.string.syncing_library), + context.stringResource(MR.strings.syncing_library), ) } else { showRestoreProgress( restoreProgress, restoreAmount, manga.title, - context.getString(R.string.restoring_backup), + context.stringResource(MR.strings.restoring_backup), ) } } @@ -801,14 +802,14 @@ class BackupRestorer( restoreProgress, restoreAmount, anime.title, - context.getString(R.string.syncing_library), + context.stringResource(MR.strings.syncing_library), ) } else { showRestoreProgress( restoreProgress, restoreAmount, anime.title, - context.getString(R.string.restoring_backup), + context.stringResource(MR.strings.restoring_backup), ) } } @@ -1268,8 +1269,8 @@ class BackupRestorer( showRestoreProgress( restoreProgress, restoreAmount, - context.getString(R.string.extension_settings), - context.getString(R.string.restoring_backup), + context.stringResource(MR.strings.extension_settings), + context.stringResource(MR.strings.restoring_backup), ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/cache/ChapterCache.kt b/app/src/main/java/eu/kanade/tachiyomi/data/cache/ChapterCache.kt index c3a52eff3c..90d2107838 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/cache/ChapterCache.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/cache/ChapterCache.kt @@ -6,7 +6,6 @@ import com.jakewharton.disklrucache.DiskLruCache import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.util.storage.DiskUtil import eu.kanade.tachiyomi.util.storage.saveTo -import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import logcat.LogPriority diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadManager.kt index 65a5214713..f7d921b765 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadManager.kt @@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.data.download.anime import android.content.Context import com.hippo.unifile.UniFile -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.animesource.AnimeSource import eu.kanade.tachiyomi.animesource.model.Video import eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload @@ -17,6 +16,7 @@ import kotlinx.coroutines.flow.merge import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.runBlocking import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.provider.FolderProvider import tachiyomi.core.util.lang.launchIO import tachiyomi.core.util.system.logcat @@ -25,6 +25,7 @@ import tachiyomi.domain.download.service.DownloadPreferences import tachiyomi.domain.entries.anime.model.Anime import tachiyomi.domain.items.episode.model.Episode import tachiyomi.domain.source.anime.service.AnimeSourceManager +import tachiyomi.i18n.MR import tachiyomi.source.local.entries.anime.LocalAnimeSource import tachiyomi.source.local.io.ArchiveAnime import tachiyomi.source.local.io.anime.LocalAnimeSourceFileSystem @@ -173,7 +174,7 @@ class AnimeDownloadManager( .filter { "video" in it.type.orEmpty() } if (files.isEmpty()) { - throw Exception(context.getString(R.string.video_list_empty_error)) + throw Exception(context.stringResource(MR.strings.video_list_empty_error)) } val file = files[0] diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadNotifier.kt index 7b1e6edd73..09626281c3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadNotifier.kt @@ -14,6 +14,8 @@ import eu.kanade.tachiyomi.util.lang.chop import eu.kanade.tachiyomi.util.system.notificationBuilder import eu.kanade.tachiyomi.util.system.notificationManager import eu.kanade.tachiyomi.util.system.notify +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy import java.util.regex.Pattern @@ -80,15 +82,15 @@ internal class AnimeDownloadNotifier(private val context: Context) { // Pause action addAction( R.drawable.ic_pause_24dp, - context.getString(R.string.action_pause), + context.stringResource(MR.strings.action_pause), NotificationReceiver.pauseAnimeDownloadsPendingBroadcast(context), ) } val downloadingProgressText = if (download.totalProgress == 0) { - context.getString(R.string.update_check_notification_download_in_progress) + context.stringResource(MR.strings.update_check_notification_download_in_progress) } else { - context.getString(R.string.episode_downloading_progress, download.progress) + context.stringResource(MR.strings.episode_downloading_progress, download.progress) } if (preferences.hideNotificationContent().get()) { @@ -120,8 +122,8 @@ internal class AnimeDownloadNotifier(private val context: Context) { */ fun onPaused() { with(progressNotificationBuilder) { - setContentTitle(context.getString(R.string.download_paused)) - setContentText(context.getString(R.string.download_notifier_download_paused_episodes)) + setContentTitle(context.stringResource(MR.strings.download_paused)) + setContentText(context.stringResource(MR.strings.download_notifier_download_paused_episodes)) setSmallIcon(R.drawable.ic_pause_24dp) setProgress(0, 0, false) setOngoing(false) @@ -131,13 +133,13 @@ internal class AnimeDownloadNotifier(private val context: Context) { // Resume action addAction( R.drawable.ic_play_arrow_24dp, - context.getString(R.string.action_resume), + context.stringResource(MR.strings.action_resume), NotificationReceiver.resumeAnimeDownloadsPendingBroadcast(context), ) // Clear action addAction( R.drawable.ic_close_24dp, - context.getString(R.string.action_cancel_all), + context.stringResource(MR.strings.action_cancel_all), NotificationReceiver.clearAnimeDownloadsPendingBroadcast(context), ) @@ -165,7 +167,7 @@ internal class AnimeDownloadNotifier(private val context: Context) { */ fun onWarning(reason: String, timeout: Long? = null, contentIntent: PendingIntent? = null) { with(errorNotificationBuilder) { - setContentTitle(context.getString(R.string.download_notifier_downloader_title)) + setContentTitle(context.stringResource(MR.strings.download_notifier_downloader_title)) setStyle(NotificationCompat.BigTextStyle().bigText(reason)) setSmallIcon(R.drawable.ic_warning_white_24dp) setAutoCancel(true) @@ -193,11 +195,11 @@ internal class AnimeDownloadNotifier(private val context: Context) { // Create notification with(errorNotificationBuilder) { setContentTitle( - animeTitle?.plus(": $episode") ?: context.getString( - R.string.download_notifier_downloader_title, + animeTitle?.plus(": $episode") ?: context.stringResource( + MR.strings.download_notifier_downloader_title, ), ) - setContentText(error ?: context.getString(R.string.download_notifier_unknown_error)) + setContentText(error ?: context.stringResource(MR.strings.download_notifier_unknown_error)) setSmallIcon(R.drawable.ic_warning_white_24dp) clearActions() setContentIntent(NotificationHandler.openAnimeDownloadManagerPendingActivity(context)) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadPendingDeleter.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadPendingDeleter.kt index 2a59472b55..99d6d01359 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadPendingDeleter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadPendingDeleter.kt @@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.data.download.anime import android.content.Context import androidx.core.content.edit import kotlinx.serialization.Serializable -import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import tachiyomi.domain.entries.anime.model.Anime diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadProvider.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadProvider.kt index 28264506ee..9a98afadbf 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadProvider.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadProvider.kt @@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.data.download.anime import android.content.Context import androidx.core.net.toUri import com.hippo.unifile.UniFile -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.animesource.AnimeSource import eu.kanade.tachiyomi.util.storage.DiskUtil import kotlinx.coroutines.CoroutineScope @@ -11,10 +10,12 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.system.logcat import tachiyomi.domain.entries.anime.model.Anime import tachiyomi.domain.items.episode.model.Episode import tachiyomi.domain.storage.service.StoragePreferences +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -61,7 +62,7 @@ class AnimeDownloadProvider( .createDirectory(getAnimeDirName(animeTitle)) } catch (e: Throwable) { logcat(LogPriority.ERROR, e) { "Invalid download directory" } - throw Exception(context.getString(R.string.invalid_location, downloadsDir)) + throw Exception(context.stringResource(MR.strings.invalid_location, downloadsDir ?: "")) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadService.kt index 50a1ce95e8..f44fc1fd1a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadService.kt @@ -6,9 +6,8 @@ import android.content.Context import android.content.Intent import android.os.IBinder import android.os.PowerManager -import androidx.annotation.StringRes import androidx.core.content.ContextCompat -import eu.kanade.tachiyomi.R +import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.util.system.acquireWakeLock import eu.kanade.tachiyomi.util.system.isConnectedToWifi @@ -27,9 +26,11 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import logcat.LogPriority import ru.beryukhov.reactivenetwork.ReactiveNetwork +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.withUIContext import tachiyomi.core.util.system.logcat import tachiyomi.domain.download.service.DownloadPreferences +import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy /** @@ -114,8 +115,8 @@ class AnimeDownloadService : Service() { return null } - private fun downloaderStop(@StringRes string: Int) { - downloadManager.downloaderStop(getString(string)) + private fun downloaderStop(string: StringResource) { + downloadManager.downloaderStop(stringResource(string)) } private fun listenNetworkChanges() { @@ -125,20 +126,20 @@ class AnimeDownloadService : Service() { withUIContext { if (isOnline()) { if (downloadPreferences.downloadOnlyOverWifi().get() && !isConnectedToWifi()) { - downloaderStop(R.string.download_notifier_text_only_wifi) + downloaderStop(MR.strings.download_notifier_text_only_wifi) } else { val started = downloadManager.downloaderStart() if (!started) stopSelf() } } else { - downloaderStop(R.string.download_notifier_no_network) + downloaderStop(MR.strings.download_notifier_no_network) } } } .catch { error -> withUIContext { logcat(LogPriority.ERROR, error) - toast(R.string.download_queue_error) + toast(MR.strings.download_queue_error) stopSelf() } } @@ -147,7 +148,7 @@ class AnimeDownloadService : Service() { private fun getPlaceholderNotification(): Notification { return notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) { - setContentTitle(getString(R.string.download_notifier_downloader_title)) + setContentTitle(stringResource(MR.strings.download_notifier_downloader_title)) }.build() } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadStore.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadStore.kt index d756a8b108..81b8fd29d3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadStore.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloadStore.kt @@ -6,7 +6,6 @@ import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource import eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload import kotlinx.coroutines.runBlocking import kotlinx.serialization.Serializable -import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import tachiyomi.domain.entries.anime.interactor.GetAnime diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloader.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloader.kt index f02b7b6a7d..839ba3f05d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/anime/AnimeDownloader.kt @@ -13,7 +13,6 @@ import com.arthenica.ffmpegkit.LogCallback import com.arthenica.ffmpegkit.SessionState import com.hippo.unifile.UniFile import eu.kanade.domain.items.episode.model.toSEpisode -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.animesource.UnmeteredSource import eu.kanade.tachiyomi.animesource.model.Video import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource @@ -45,6 +44,7 @@ import logcat.LogPriority import okhttp3.HttpUrl.Companion.toHttpUrl import okio.Buffer import rx.subjects.PublishSubject +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchIO import tachiyomi.core.util.lang.withUIContext import tachiyomi.core.util.system.ImageUtil @@ -53,6 +53,7 @@ import tachiyomi.domain.download.service.DownloadPreferences import tachiyomi.domain.entries.anime.model.Anime import tachiyomi.domain.items.episode.model.Episode import tachiyomi.domain.source.anime.service.AnimeSourceManager +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import uy.kohesive.injekt.injectLazy @@ -338,7 +339,7 @@ class AnimeDownloader( ) { withUIContext { notifier.onWarning( - context.getString(R.string.download_queue_size_warning), + context.stringResource(MR.strings.download_queue_size_warning), WARNING_NOTIF_TIMEOUT_MS, NotificationHandler.openUrl( context, @@ -364,7 +365,7 @@ class AnimeDownloader( if (availSpace != -1L && availSpace < MIN_DISK_SPACE) { download.status = AnimeDownload.State.ERROR notifier.onError( - context.getString(R.string.download_insufficient_space), + context.stringResource(MR.strings.download_insufficient_space), download.episode.name, download.anime.title, ) @@ -385,7 +386,7 @@ class AnimeDownloader( download.video = fetchedVideo fetchedVideo } catch (e: Exception) { - throw Exception(context.getString(R.string.video_list_empty_error)) + throw Exception(context.stringResource(MR.strings.video_list_empty_error)) } } else { // Or if the video already exists, return it diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadManager.kt index 2c001b0d78..3d0ca3486b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadManager.kt @@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.data.download.manga import android.content.Context import com.hippo.unifile.UniFile -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.manga.model.MangaDownload import eu.kanade.tachiyomi.source.MangaSource import eu.kanade.tachiyomi.source.model.Page @@ -17,6 +16,7 @@ import kotlinx.coroutines.flow.merge import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.runBlocking import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.provider.FolderProvider import tachiyomi.core.util.lang.launchIO import tachiyomi.core.util.system.logcat @@ -25,6 +25,7 @@ import tachiyomi.domain.download.service.DownloadPreferences import tachiyomi.domain.entries.manga.model.Manga import tachiyomi.domain.items.chapter.model.Chapter import tachiyomi.domain.source.manga.service.MangaSourceManager +import tachiyomi.i18n.MR import tachiyomi.source.local.entries.manga.LocalMangaSource import tachiyomi.source.local.io.ArchiveManga import tachiyomi.source.local.io.manga.LocalMangaSourceFileSystem @@ -170,7 +171,7 @@ class MangaDownloadManager( .filter { "image" in it.type.orEmpty() } if (files.isEmpty()) { - throw Exception(context.getString(R.string.page_list_empty_error)) + throw Exception(context.stringResource(MR.strings.page_list_empty_error)) } return files.sortedBy { it.name } .mapIndexed { i, file -> diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadNotifier.kt index 4cbddf4cee..4101c8e303 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadNotifier.kt @@ -14,6 +14,8 @@ import eu.kanade.tachiyomi.util.lang.chop import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.notificationBuilder import eu.kanade.tachiyomi.util.system.notify +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy import java.util.regex.Pattern @@ -78,13 +80,13 @@ internal class MangaDownloadNotifier(private val context: Context) { // Pause action addAction( R.drawable.ic_pause_24dp, - context.getString(R.string.action_pause), + context.stringResource(MR.strings.action_pause), NotificationReceiver.pauseDownloadsPendingBroadcast(context), ) } - val downloadingProgressText = context.getString( - R.string.chapter_downloading_progress, + val downloadingProgressText = context.stringResource( + MR.strings.chapter_downloading_progress, download.downloadedImages, download.pages!!.size, ) @@ -115,8 +117,8 @@ internal class MangaDownloadNotifier(private val context: Context) { */ fun onPaused() { with(progressNotificationBuilder) { - setContentTitle(context.getString(R.string.download_paused)) - setContentText(context.getString(R.string.download_notifier_download_paused_chapters)) + setContentTitle(context.stringResource(MR.strings.download_paused)) + setContentText(context.stringResource(MR.strings.download_notifier_download_paused_chapters)) setSmallIcon(R.drawable.ic_pause_24dp) setProgress(0, 0, false) setOngoing(false) @@ -126,13 +128,13 @@ internal class MangaDownloadNotifier(private val context: Context) { // Resume action addAction( R.drawable.ic_play_arrow_24dp, - context.getString(R.string.action_resume), + context.stringResource(MR.strings.action_resume), NotificationReceiver.resumeDownloadsPendingBroadcast(context), ) // Clear action addAction( R.drawable.ic_close_24dp, - context.getString(R.string.action_cancel_all), + context.stringResource(MR.strings.action_cancel_all), NotificationReceiver.clearDownloadsPendingBroadcast(context), ) @@ -162,7 +164,7 @@ internal class MangaDownloadNotifier(private val context: Context) { */ fun onWarning(reason: String, timeout: Long? = null, contentIntent: PendingIntent? = null) { with(errorNotificationBuilder) { - setContentTitle(context.getString(R.string.download_notifier_downloader_title)) + setContentTitle(context.stringResource(MR.strings.download_notifier_downloader_title)) setStyle(NotificationCompat.BigTextStyle().bigText(reason)) setSmallIcon(R.drawable.ic_warning_white_24dp) setAutoCancel(true) @@ -190,11 +192,11 @@ internal class MangaDownloadNotifier(private val context: Context) { // Create notification with(errorNotificationBuilder) { setContentTitle( - mangaTitle?.plus(": $chapter") ?: context.getString( - R.string.download_notifier_downloader_title, + mangaTitle?.plus(": $chapter") ?: context.stringResource( + MR.strings.download_notifier_downloader_title, ), ) - setContentText(error ?: context.getString(R.string.download_notifier_unknown_error)) + setContentText(error ?: context.stringResource(MR.strings.download_notifier_unknown_error)) setSmallIcon(R.drawable.ic_warning_white_24dp) clearActions() setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context)) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadPendingDeleter.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadPendingDeleter.kt index 9877a82f7e..70d7b10722 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadPendingDeleter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadPendingDeleter.kt @@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.data.download.manga import android.content.Context import androidx.core.content.edit import kotlinx.serialization.Serializable -import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import tachiyomi.domain.entries.manga.model.Manga diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadProvider.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadProvider.kt index bbdbb641c0..45f5aa9645 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadProvider.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadProvider.kt @@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.data.download.manga import android.content.Context import androidx.core.net.toUri import com.hippo.unifile.UniFile -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.source.MangaSource import eu.kanade.tachiyomi.util.storage.DiskUtil import kotlinx.coroutines.CoroutineScope @@ -11,10 +10,12 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.system.logcat import tachiyomi.domain.entries.manga.model.Manga import tachiyomi.domain.items.chapter.model.Chapter import tachiyomi.domain.storage.service.StoragePreferences +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -61,7 +62,7 @@ class MangaDownloadProvider( .createDirectory(getMangaDirName(mangaTitle)) } catch (e: Throwable) { logcat(LogPriority.ERROR, e) { "Invalid download directory" } - throw Exception(context.getString(R.string.invalid_location, downloadsDir)) + throw Exception(context.stringResource(MR.strings.invalid_location, downloadsDir ?: "")) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadService.kt index 58042c1c0c..9f70c8e109 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadService.kt @@ -6,9 +6,8 @@ import android.content.Context import android.content.Intent import android.os.IBinder import android.os.PowerManager -import androidx.annotation.StringRes import androidx.core.content.ContextCompat -import eu.kanade.tachiyomi.R +import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.util.system.acquireWakeLock import eu.kanade.tachiyomi.util.system.isConnectedToWifi @@ -27,9 +26,11 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import logcat.LogPriority import ru.beryukhov.reactivenetwork.ReactiveNetwork +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.withUIContext import tachiyomi.core.util.system.logcat import tachiyomi.domain.download.service.DownloadPreferences +import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy /** @@ -111,8 +112,8 @@ class MangaDownloadService : Service() { return null } - private fun downloaderStop(@StringRes string: Int) { - downloadManager.downloaderStop(getString(string)) + private fun downloaderStop(string: StringResource) { + downloadManager.downloaderStop(stringResource(string)) } private fun listenNetworkChanges() { @@ -122,20 +123,20 @@ class MangaDownloadService : Service() { withUIContext { if (isOnline()) { if (downloadPreferences.downloadOnlyOverWifi().get() && !isConnectedToWifi()) { - downloaderStop(R.string.download_notifier_text_only_wifi) + downloaderStop(MR.strings.download_notifier_text_only_wifi) } else { val started = downloadManager.downloaderStart() if (!started) stopSelf() } } else { - downloaderStop(R.string.download_notifier_no_network) + downloaderStop(MR.strings.download_notifier_no_network) } } } .catch { error -> withUIContext { logcat(LogPriority.ERROR, error) - toast(R.string.download_queue_error) + toast(MR.strings.download_queue_error) stopSelf() } } @@ -144,7 +145,7 @@ class MangaDownloadService : Service() { private fun getPlaceholderNotification(): Notification { return notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) { - setContentTitle(getString(R.string.download_notifier_downloader_title)) + setContentTitle(stringResource(MR.strings.download_notifier_downloader_title)) }.build() } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadStore.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadStore.kt index 350c6026e8..b4439bf49e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadStore.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloadStore.kt @@ -6,7 +6,6 @@ import eu.kanade.tachiyomi.data.download.manga.model.MangaDownload import eu.kanade.tachiyomi.source.online.HttpSource import kotlinx.coroutines.runBlocking import kotlinx.serialization.Serializable -import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import tachiyomi.domain.entries.manga.interactor.GetManga diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloader.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloader.kt index 9dfe2785c7..c735c2bb3b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/manga/MangaDownloader.kt @@ -7,7 +7,6 @@ import com.hippo.unifile.UniFile import eu.kanade.domain.entries.manga.model.getComicInfo import eu.kanade.domain.items.chapter.model.toSChapter import eu.kanade.domain.source.service.SourcePreferences -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.cache.ChapterCache import eu.kanade.tachiyomi.data.download.manga.model.MangaDownload import eu.kanade.tachiyomi.data.library.manga.MangaLibraryUpdateNotifier @@ -44,6 +43,7 @@ import kotlinx.coroutines.supervisorScope import logcat.LogPriority import nl.adaptivity.xmlutil.serialization.XML import okhttp3.Response +import tachiyomi.core.i18n.stringResource import tachiyomi.core.metadata.comicinfo.COMIC_INFO_FILE import tachiyomi.core.metadata.comicinfo.ComicInfo import tachiyomi.core.util.lang.launchIO @@ -57,6 +57,7 @@ import tachiyomi.domain.download.service.DownloadPreferences import tachiyomi.domain.entries.manga.model.Manga import tachiyomi.domain.items.chapter.model.Chapter import tachiyomi.domain.source.manga.service.MangaSourceManager +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.io.BufferedOutputStream @@ -314,7 +315,7 @@ class MangaDownloader( ) { withUIContext { notifier.onWarning( - context.getString(R.string.download_queue_size_warning), + context.stringResource(MR.strings.download_queue_size_warning), WARNING_NOTIF_TIMEOUT_MS, NotificationHandler.openUrl( context, @@ -340,7 +341,7 @@ class MangaDownloader( if (availSpace != -1L && availSpace < MIN_DISK_SPACE) { download.status = MangaDownload.State.ERROR notifier.onError( - context.getString(R.string.download_insufficient_space), + context.stringResource(MR.strings.download_insufficient_space), download.chapter.name, download.manga.title, ) @@ -360,7 +361,7 @@ class MangaDownloader( val pages = download.source.getPageList(download.chapter.toSChapter()) if (pages.isEmpty()) { - throw Exception(context.getString(R.string.page_list_empty_error)) + throw Exception(context.stringResource(MR.strings.page_list_empty_error)) } // Don't trust index from source val reIndexedPages = pages.mapIndexed { index, page -> @@ -595,7 +596,7 @@ class MangaDownloader( ) } ?: error( - context.getString(R.string.download_notifier_split_page_not_found, page.number), + context.stringResource(MR.strings.download_notifier_split_page_not_found, page.number), ) // If the original page was previously split, then skip diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/anime/AnimeLibraryUpdateJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/anime/AnimeLibraryUpdateJob.kt index a37e1f65d3..b160370314 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/anime/AnimeLibraryUpdateJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/anime/AnimeLibraryUpdateJob.kt @@ -15,17 +15,14 @@ import androidx.work.WorkQuery import androidx.work.WorkerParameters import androidx.work.workDataOf import eu.kanade.domain.entries.anime.interactor.UpdateAnime -import eu.kanade.domain.entries.anime.model.copyFrom import eu.kanade.domain.entries.anime.model.toSAnime import eu.kanade.domain.items.episode.interactor.SyncEpisodesWithSource -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.animesource.UnmeteredSource import eu.kanade.tachiyomi.animesource.model.AnimeUpdateStrategy import eu.kanade.tachiyomi.animesource.model.SAnime import eu.kanade.tachiyomi.data.cache.AnimeCoverCache import eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager import eu.kanade.tachiyomi.data.notification.Notifications -import eu.kanade.tachiyomi.util.prepUpdateCover import eu.kanade.tachiyomi.util.shouldDownloadNewEpisodes import eu.kanade.tachiyomi.util.storage.getUriCompat import eu.kanade.tachiyomi.util.system.createFileInCacheDir @@ -41,6 +38,7 @@ import kotlinx.coroutines.runBlocking import kotlinx.coroutines.sync.Semaphore import kotlinx.coroutines.sync.withPermit import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.preference.getAndSet import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.system.logcat @@ -51,7 +49,6 @@ import tachiyomi.domain.entries.anime.interactor.AnimeFetchInterval import tachiyomi.domain.entries.anime.interactor.GetAnime import tachiyomi.domain.entries.anime.interactor.GetLibraryAnime import tachiyomi.domain.entries.anime.model.Anime -import tachiyomi.domain.entries.anime.model.toAnimeUpdate import tachiyomi.domain.items.episode.model.Episode import tachiyomi.domain.items.episode.model.NoEpisodesException import tachiyomi.domain.library.anime.LibraryAnime @@ -65,6 +62,7 @@ import tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_NON_V import tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_OUTSIDE_RELEASE_PERIOD import tachiyomi.domain.source.anime.model.AnimeSourceNotInstalledException import tachiyomi.domain.source.anime.service.AnimeSourceManager +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.io.File @@ -114,22 +112,14 @@ class AnimeLibraryUpdateJob(private val context: Context, workerParams: WorkerPa logcat(LogPriority.ERROR, e) { "Not allowed to set foreground job" } } - val target = inputData.getString(KEY_TARGET)?.let { Target.valueOf(it) } ?: Target.EPISODES - - // If this is a chapter update, set the last update time to now - if (target == Target.EPISODES) { - libraryPreferences.lastUpdatedTimestamp().set(Date().time) - } + libraryPreferences.lastUpdatedTimestamp().set(Date().time) val categoryId = inputData.getLong(KEY_CATEGORY, -1L) addAnimeToQueue(categoryId) return withIOContext { try { - when (target) { - Target.EPISODES -> updateEpisodeList() - Target.COVERS -> updateCovers() - } + updateEpisodeList() Result.success() } catch (e: Exception) { if (e is CancellationException) { @@ -191,27 +181,37 @@ class AnimeLibraryUpdateJob(private val context: Context, workerParams: WorkerPa .filter { when { it.anime.updateStrategy != AnimeUpdateStrategy.ALWAYS_UPDATE -> { - skippedUpdates.add(it.anime to context.getString(R.string.skipped_reason_not_always_update)) + skippedUpdates.add( + it.anime to context.stringResource(MR.strings.skipped_reason_not_always_update), + ) false } ENTRY_NON_COMPLETED in restrictions && it.anime.status.toInt() == SAnime.COMPLETED -> { - skippedUpdates.add(it.anime to context.getString(R.string.skipped_reason_completed)) + skippedUpdates.add( + it.anime to context.stringResource(MR.strings.skipped_reason_completed), + ) false } ENTRY_HAS_UNVIEWED in restrictions && it.unseenCount != 0L -> { - skippedUpdates.add(it.anime to context.getString(R.string.skipped_reason_not_caught_up)) + skippedUpdates.add( + it.anime to context.stringResource(MR.strings.skipped_reason_not_caught_up), + ) false } ENTRY_NON_VIEWED in restrictions && it.totalEpisodes > 0L && !it.hasStarted -> { - skippedUpdates.add(it.anime to context.getString(R.string.skipped_reason_not_started)) + skippedUpdates.add( + it.anime to context.stringResource(MR.strings.skipped_reason_not_started), + ) false } ENTRY_OUTSIDE_RELEASE_PERIOD in restrictions && it.anime.nextUpdate > fetchWindow.second -> { - skippedUpdates.add(it.anime to context.getString(R.string.skipped_reason_not_in_release_period)) + skippedUpdates.add( + it.anime to context.stringResource(MR.strings.skipped_reason_not_in_release_period), + ) false } else -> true @@ -295,10 +295,12 @@ class AnimeLibraryUpdateJob(private val context: Context, workerParams: WorkerPa } } catch (e: Throwable) { val errorMessage = when (e) { - is NoEpisodesException -> context.getString(R.string.no_chapters_error) + is NoEpisodesException -> context.stringResource( + MR.strings.no_chapters_error, + ) // failedUpdates will already have the source, don't need to copy it into the message - is AnimeSourceNotInstalledException -> context.getString( - R.string.loader_not_implemented_error, + is AnimeSourceNotInstalledException -> context.stringResource( + MR.strings.loader_not_implemented_error, ) else -> e.message } @@ -360,55 +362,6 @@ class AnimeLibraryUpdateJob(private val context: Context, workerParams: WorkerPa return syncEpisodesWithSource.await(episodes, dbAnime, source, false, fetchWindow) } - private suspend fun updateCovers() { - val semaphore = Semaphore(5) - val progressCount = AtomicInteger(0) - val currentlyUpdatingAnime = CopyOnWriteArrayList() - - coroutineScope { - animeToUpdate.groupBy { it.anime.source } - .values - .map { animeInSource -> - async { - semaphore.withPermit { - animeInSource.forEach { libraryAnime -> - val anime = libraryAnime.anime - ensureActive() - - withUpdateNotification( - currentlyUpdatingAnime, - progressCount, - anime, - ) { - val source = sourceManager.get(anime.source) ?: return@withUpdateNotification - try { - val networkAnime = source.getAnimeDetails(anime.toSAnime()) - val updatedAnime = anime.prepUpdateCover( - coverCache, - networkAnime, - true, - ) - .copyFrom(networkAnime) - try { - updateAnime.await(updatedAnime.toAnimeUpdate()) - } catch (e: Exception) { - logcat(LogPriority.ERROR) { "Anime doesn't exist anymore" } - } - } catch (e: Throwable) { - // Ignore errors and continue - logcat(LogPriority.ERROR, e) - } - } - } - } - } - } - .awaitAll() - } - - notifier.cancelProgressNotification() - } - private suspend fun withUpdateNotification( updatingAnime: CopyOnWriteArrayList, completed: AtomicInteger, @@ -446,7 +399,7 @@ class AnimeLibraryUpdateJob(private val context: Context, workerParams: WorkerPa val file = context.createFileInCacheDir("aniyomi_update_errors.txt") file.bufferedWriter().use { out -> out.write( - context.getString(R.string.library_errors_help, ERROR_LOG_HELP_URL) + "\n\n", + context.stringResource(MR.strings.library_errors_help, ERROR_LOG_HELP_URL) + "\n\n", ) // Error file format: // ! Error @@ -469,14 +422,6 @@ class AnimeLibraryUpdateJob(private val context: Context, workerParams: WorkerPa return File("") } - /** - * Defines what should be updated within a service execution. - */ - enum class Target { - EPISODES, // Anime episodes - COVERS, // Anime covers - } - companion object { private const val TAG = "AnimeLibraryUpdate" private const val WORK_NAME_AUTO = "AnimeLibraryUpdate-auto" @@ -491,11 +436,6 @@ class AnimeLibraryUpdateJob(private val context: Context, workerParams: WorkerPa */ private const val KEY_CATEGORY = "animeCategory" - /** - * Key that defines what should be updated. - */ - private const val KEY_TARGET = "animeTarget" - fun cancelAllWorks(context: Context) { context.workManager.cancelAllWorkByTag(TAG) } @@ -540,7 +480,6 @@ class AnimeLibraryUpdateJob(private val context: Context, workerParams: WorkerPa fun startNow( context: Context, category: Category? = null, - target: Target = Target.EPISODES, ): Boolean { val wm = context.workManager if (wm.isRunning(TAG)) { @@ -550,7 +489,6 @@ class AnimeLibraryUpdateJob(private val context: Context, workerParams: WorkerPa val inputData = workDataOf( KEY_CATEGORY to category?.id, - KEY_TARGET to target.name, ) val request = OneTimeWorkRequestBuilder() .addTag(TAG) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/anime/AnimeLibraryUpdateNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/anime/AnimeLibraryUpdateNotifier.kt index 32a9e885b2..b9cce5da21 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/anime/AnimeLibraryUpdateNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/anime/AnimeLibraryUpdateNotifier.kt @@ -26,9 +26,11 @@ import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.getBitmapOrNull import eu.kanade.tachiyomi.util.system.notificationBuilder import eu.kanade.tachiyomi.util.system.notify +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchUI import tachiyomi.domain.entries.anime.model.Anime import tachiyomi.domain.items.episode.model.Episode +import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy import java.math.RoundingMode import java.text.NumberFormat @@ -60,14 +62,14 @@ class AnimeLibraryUpdateNotifier(private val context: Context) { */ val progressNotificationBuilder by lazy { context.notificationBuilder(Notifications.CHANNEL_LIBRARY_PROGRESS) { - setContentTitle(context.getString(R.string.app_name)) + setContentTitle(context.stringResource(MR.strings.app_name)) setSmallIcon(R.drawable.ic_refresh_24dp) setLargeIcon(notificationBitmap) setOngoing(true) setOnlyAlertOnce(true) addAction( R.drawable.ic_close_24dp, - context.getString(R.string.action_cancel), + context.stringResource(MR.strings.action_cancel), cancelIntent, ) } @@ -83,8 +85,8 @@ class AnimeLibraryUpdateNotifier(private val context: Context) { fun showProgressNotification(anime: List, current: Int, total: Int) { progressNotificationBuilder .setContentTitle( - context.getString( - R.string.notification_updating_progress, + context.stringResource( + MR.strings.notification_updating_progress, percentFormatter.format(current.toFloat() / total), ), ) @@ -107,10 +109,10 @@ class AnimeLibraryUpdateNotifier(private val context: Context) { Notifications.ID_LIBRARY_SIZE_WARNING, Notifications.CHANNEL_LIBRARY_PROGRESS, ) { - setContentTitle(context.getString(R.string.label_warning)) + setContentTitle(context.stringResource(MR.strings.label_warning)) setStyle( NotificationCompat.BigTextStyle().bigText( - context.getString(R.string.notification_size_warning), + context.stringResource(MR.strings.notification_size_warning), ), ) setSmallIcon(R.drawable.ic_warning_white_24dp) @@ -134,8 +136,8 @@ class AnimeLibraryUpdateNotifier(private val context: Context) { Notifications.ID_LIBRARY_ERROR, Notifications.CHANNEL_LIBRARY_ERROR, ) { - setContentTitle(context.resources.getString(R.string.notification_update_error, failed)) - setContentText(context.getString(R.string.action_show_errors)) + setContentTitle(context.stringResource(MR.strings.notification_update_error, failed)) + setContentText(context.stringResource(MR.strings.action_show_errors)) setSmallIcon(R.drawable.ic_ani) setContentIntent(NotificationReceiver.openErrorLogPendingActivity(context, uri)) @@ -157,9 +159,9 @@ class AnimeLibraryUpdateNotifier(private val context: Context) { Notifications.CHANNEL_LIBRARY_SKIPPED, ) { setContentTitle( - context.resources.getString(R.string.notification_update_skipped, skipped), + context.stringResource(MR.strings.notification_update_skipped, skipped), ) - setContentText(context.getString(R.string.learn_more)) + setContentText(context.stringResource(MR.strings.learn_more)) setSmallIcon(R.drawable.ic_ani) setContentIntent(NotificationHandler.openUrl(context, HELP_SKIPPED_ANIME_URL)) } @@ -176,7 +178,7 @@ class AnimeLibraryUpdateNotifier(private val context: Context) { Notifications.ID_NEW_EPISODES, Notifications.CHANNEL_NEW_CHAPTERS_EPISODES, ) { - setContentTitle(context.getString(R.string.notification_new_episodes)) + setContentTitle(context.stringResource(MR.strings.notification_new_episodes)) if (updates.size == 1 && !preferences.hideNotificationContent().get()) { setContentText(updates.first().first.title.chop(NOTIF_ANIME_TITLE_MAX_LEN)) } else { @@ -254,7 +256,7 @@ class AnimeLibraryUpdateNotifier(private val context: Context) { // Mark episodes as read action addAction( R.drawable.ic_glasses_24dp, - context.getString(R.string.action_mark_as_seen), + context.stringResource(MR.strings.action_mark_as_seen), NotificationReceiver.markAsViewedPendingBroadcast( context, anime, @@ -265,7 +267,7 @@ class AnimeLibraryUpdateNotifier(private val context: Context) { // View episodes action addAction( R.drawable.ic_book_24dp, - context.getString(R.string.action_view_episodes), + context.stringResource(MR.strings.action_view_episodes), NotificationReceiver.openEpisodePendingActivity( context, anime, @@ -277,7 +279,7 @@ class AnimeLibraryUpdateNotifier(private val context: Context) { if (episodes.size <= AnimeDownloader.EPISODES_PER_SOURCE_QUEUE_WARNING_THRESHOLD) { addAction( android.R.drawable.stat_sys_download_done, - context.getString(R.string.action_download), + context.stringResource(MR.strings.action_download), NotificationReceiver.downloadEpisodesPendingBroadcast( context, anime, @@ -328,14 +330,14 @@ class AnimeLibraryUpdateNotifier(private val context: Context) { val remaining = episodes.size - displayableEpisodeNumbers.size if (remaining == 0) { // "Episode 2.5" - context.resources.getString( - R.string.notification_episodes_single, + context.stringResource( + MR.strings.notification_episodes_single, displayableEpisodeNumbers.first(), ) } else { // "Episode 2.5 and 10 more" - context.resources.getString( - R.string.notification_episodes_single_and_more, + context.stringResource( + MR.strings.notification_episodes_single_and_more, displayableEpisodeNumbers.first(), remaining, ) @@ -358,8 +360,8 @@ class AnimeLibraryUpdateNotifier(private val context: Context) { ) } else { // "Episodes 1, 2.5, 3" - context.resources.getString( - R.string.notification_episodes_multiple, + context.stringResource( + MR.strings.notification_episodes_multiple, displayableEpisodeNumbers.joinToString(", "), ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/anime/AnimeMetadataUpdateJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/anime/AnimeMetadataUpdateJob.kt new file mode 100644 index 0000000000..2514187e3f --- /dev/null +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/anime/AnimeMetadataUpdateJob.kt @@ -0,0 +1,210 @@ +package eu.kanade.tachiyomi.data.library.anime + +import android.content.Context +import androidx.work.CoroutineWorker +import androidx.work.ExistingWorkPolicy +import androidx.work.ForegroundInfo +import androidx.work.OneTimeWorkRequestBuilder +import androidx.work.WorkInfo +import androidx.work.WorkQuery +import androidx.work.WorkerParameters +import eu.kanade.domain.entries.anime.interactor.UpdateAnime +import eu.kanade.domain.entries.anime.model.copyFrom +import eu.kanade.domain.entries.anime.model.toSAnime +import eu.kanade.tachiyomi.data.cache.AnimeCoverCache +import eu.kanade.tachiyomi.data.notification.Notifications +import eu.kanade.tachiyomi.source.UnmeteredSource +import eu.kanade.tachiyomi.util.prepUpdateCover +import eu.kanade.tachiyomi.util.system.isRunning +import eu.kanade.tachiyomi.util.system.workManager +import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.ensureActive +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.sync.Semaphore +import kotlinx.coroutines.sync.withPermit +import logcat.LogPriority +import tachiyomi.core.util.lang.withIOContext +import tachiyomi.core.util.system.logcat +import tachiyomi.domain.entries.anime.interactor.GetLibraryAnime +import tachiyomi.domain.entries.anime.model.Anime +import tachiyomi.domain.entries.anime.model.toAnimeUpdate +import tachiyomi.domain.library.anime.LibraryAnime +import tachiyomi.domain.source.anime.service.AnimeSourceManager +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get +import java.util.concurrent.CopyOnWriteArrayList +import java.util.concurrent.atomic.AtomicInteger + +class AnimeMetadataUpdateJob(private val context: Context, workerParams: WorkerParameters) : + CoroutineWorker(context, workerParams) { + + private val sourceManager: AnimeSourceManager = Injekt.get() + private val coverCache: AnimeCoverCache = Injekt.get() + private val getLibraryAnime: GetLibraryAnime = Injekt.get() + private val updateAnime: UpdateAnime = Injekt.get() + + private val notifier = AnimeLibraryUpdateNotifier(context) + + private var animeToUpdate: List = mutableListOf() + + override suspend fun doWork(): Result { + try { + setForeground(getForegroundInfo()) + } catch (e: IllegalStateException) { + logcat(LogPriority.ERROR, e) { "Not allowed to set foreground job" } + } + + addAnimeToQueue() + + return withIOContext { + try { + updateMetadata() + Result.success() + } catch (e: Exception) { + if (e is CancellationException) { + // Assume success although cancelled + Result.success() + } else { + logcat(LogPriority.ERROR, e) + Result.failure() + } + } finally { + notifier.cancelProgressNotification() + } + } + } + + override suspend fun getForegroundInfo(): ForegroundInfo { + val notifier = AnimeLibraryUpdateNotifier(context) + return ForegroundInfo( + Notifications.ID_LIBRARY_PROGRESS, + notifier.progressNotificationBuilder.build(), + ) + } + + /** + * Adds list of anime to be updated. + */ + private fun addAnimeToQueue() { + animeToUpdate = runBlocking { getLibraryAnime.await() } + + // Warn when excessively checking a single source + val maxUpdatesFromSource = animeToUpdate + .groupBy { it.anime.source } + .filterKeys { sourceManager.get(it) !is UnmeteredSource } + .maxOfOrNull { it.value.size } ?: 0 + if (maxUpdatesFromSource > MANGA_PER_SOURCE_QUEUE_WARNING_THRESHOLD) { + notifier.showQueueSizeWarningNotification() + } + } + + private suspend fun updateMetadata() { + val semaphore = Semaphore(5) + val progressCount = AtomicInteger(0) + val currentlyUpdatingAnime = CopyOnWriteArrayList() + + coroutineScope { + animeToUpdate.groupBy { it.anime.source } + .values + .map { animeInSource -> + async { + semaphore.withPermit { + animeInSource.forEach { libraryAnime -> + val anime = libraryAnime.anime + ensureActive() + + withUpdateNotification( + currentlyUpdatingAnime, + progressCount, + anime, + ) { + val source = sourceManager.get(anime.source) ?: return@withUpdateNotification + try { + val networkAnime = source.getAnimeDetails(anime.toSAnime()) + val updatedAnime = anime.prepUpdateCover(coverCache, networkAnime, true) + .copyFrom(networkAnime) + try { + updateAnime.await(updatedAnime.toAnimeUpdate()) + } catch (e: Exception) { + logcat(LogPriority.ERROR) { "Anime doesn't exist anymore" } + } + } catch (e: Throwable) { + // Ignore errors and continue + logcat(LogPriority.ERROR, e) + } + } + } + } + } + } + .awaitAll() + } + + notifier.cancelProgressNotification() + } + + private suspend fun withUpdateNotification( + updatingAnime: CopyOnWriteArrayList, + completed: AtomicInteger, + anime: Anime, + block: suspend () -> Unit, + ) = coroutineScope { + ensureActive() + + updatingAnime.add(anime) + notifier.showProgressNotification( + updatingAnime, + completed.get(), + animeToUpdate.size, + ) + + block() + + ensureActive() + + updatingAnime.remove(anime) + completed.getAndIncrement() + notifier.showProgressNotification( + updatingAnime, + completed.get(), + animeToUpdate.size, + ) + } + + companion object { + private const val TAG = "MetadataUpdate" + private const val WORK_NAME_MANUAL = "MetadataUpdate" + + private const val MANGA_PER_SOURCE_QUEUE_WARNING_THRESHOLD = 60 + + fun startNow(context: Context): Boolean { + val wm = context.workManager + if (wm.isRunning(TAG)) { + // Already running either as a scheduled or manual job + return false + } + val request = OneTimeWorkRequestBuilder() + .addTag(TAG) + .addTag(WORK_NAME_MANUAL) + .build() + wm.enqueueUniqueWork(WORK_NAME_MANUAL, ExistingWorkPolicy.KEEP, request) + + return true + } + + fun stop(context: Context) { + val wm = context.workManager + val workQuery = WorkQuery.Builder.fromTags(listOf(TAG)) + .addStates(listOf(WorkInfo.State.RUNNING)) + .build() + wm.getWorkInfos(workQuery).get() + // Should only return one work but just in case + .forEach { + wm.cancelWorkById(it.id) + } + } + } +} diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/manga/MangaLibraryUpdateJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/manga/MangaLibraryUpdateJob.kt index 1db476b1be..641fd04237 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/manga/MangaLibraryUpdateJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/manga/MangaLibraryUpdateJob.kt @@ -15,17 +15,14 @@ import androidx.work.WorkQuery import androidx.work.WorkerParameters import androidx.work.workDataOf import eu.kanade.domain.entries.manga.interactor.UpdateManga -import eu.kanade.domain.entries.manga.model.copyFrom import eu.kanade.domain.entries.manga.model.toSManga import eu.kanade.domain.items.chapter.interactor.SyncChaptersWithSource -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.cache.MangaCoverCache import eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.source.UnmeteredSource import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.UpdateStrategy -import eu.kanade.tachiyomi.util.prepUpdateCover import eu.kanade.tachiyomi.util.shouldDownloadNewChapters import eu.kanade.tachiyomi.util.storage.getUriCompat import eu.kanade.tachiyomi.util.system.createFileInCacheDir @@ -41,6 +38,7 @@ import kotlinx.coroutines.runBlocking import kotlinx.coroutines.sync.Semaphore import kotlinx.coroutines.sync.withPermit import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.preference.getAndSet import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.system.logcat @@ -51,7 +49,6 @@ import tachiyomi.domain.entries.manga.interactor.GetLibraryManga import tachiyomi.domain.entries.manga.interactor.GetManga import tachiyomi.domain.entries.manga.interactor.MangaFetchInterval import tachiyomi.domain.entries.manga.model.Manga -import tachiyomi.domain.entries.manga.model.toMangaUpdate import tachiyomi.domain.items.chapter.model.Chapter import tachiyomi.domain.items.chapter.model.NoChaptersException import tachiyomi.domain.library.manga.LibraryManga @@ -65,6 +62,7 @@ import tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_NON_V import tachiyomi.domain.library.service.LibraryPreferences.Companion.ENTRY_OUTSIDE_RELEASE_PERIOD import tachiyomi.domain.source.manga.model.SourceNotInstalledException import tachiyomi.domain.source.manga.service.MangaSourceManager +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.io.File @@ -114,22 +112,14 @@ class MangaLibraryUpdateJob(private val context: Context, workerParams: WorkerPa logcat(LogPriority.ERROR, e) { "Not allowed to set foreground job" } } - val target = inputData.getString(KEY_TARGET)?.let { Target.valueOf(it) } ?: Target.CHAPTERS - - // If this is a chapter update, set the last update time to now - if (target == Target.CHAPTERS) { - libraryPreferences.lastUpdatedTimestamp().set(Date().time) - } + libraryPreferences.lastUpdatedTimestamp().set(Date().time) val categoryId = inputData.getLong(KEY_CATEGORY, -1L) addMangaToQueue(categoryId) return withIOContext { try { - when (target) { - Target.CHAPTERS -> updateChapterList() - Target.COVERS -> updateCovers() - } + updateChapterList() Result.success() } catch (e: Exception) { if (e is CancellationException) { @@ -191,27 +181,37 @@ class MangaLibraryUpdateJob(private val context: Context, workerParams: WorkerPa .filter { when { it.manga.updateStrategy != UpdateStrategy.ALWAYS_UPDATE -> { - skippedUpdates.add(it.manga to context.getString(R.string.skipped_reason_not_always_update)) + skippedUpdates.add( + it.manga to context.stringResource(MR.strings.skipped_reason_not_always_update), + ) false } ENTRY_NON_COMPLETED in restrictions && it.manga.status.toInt() == SManga.COMPLETED -> { - skippedUpdates.add(it.manga to context.getString(R.string.skipped_reason_completed)) + skippedUpdates.add( + it.manga to context.stringResource(MR.strings.skipped_reason_completed), + ) false } ENTRY_HAS_UNVIEWED in restrictions && it.unreadCount != 0L -> { - skippedUpdates.add(it.manga to context.getString(R.string.skipped_reason_not_caught_up)) + skippedUpdates.add( + it.manga to context.stringResource(MR.strings.skipped_reason_not_caught_up), + ) false } ENTRY_NON_VIEWED in restrictions && it.totalChapters > 0L && !it.hasStarted -> { - skippedUpdates.add(it.manga to context.getString(R.string.skipped_reason_not_started)) + skippedUpdates.add( + it.manga to context.stringResource(MR.strings.skipped_reason_not_started), + ) false } ENTRY_OUTSIDE_RELEASE_PERIOD in restrictions && it.manga.nextUpdate > fetchWindow.second -> { - skippedUpdates.add(it.manga to context.getString(R.string.skipped_reason_not_in_release_period)) + skippedUpdates.add( + it.manga to context.stringResource(MR.strings.skipped_reason_not_in_release_period), + ) false } else -> true @@ -294,10 +294,12 @@ class MangaLibraryUpdateJob(private val context: Context, workerParams: WorkerPa } } catch (e: Throwable) { val errorMessage = when (e) { - is NoChaptersException -> context.getString(R.string.no_chapters_error) + is NoChaptersException -> context.stringResource( + MR.strings.no_chapters_error, + ) // failedUpdates will already have the source, don't need to copy it into the message - is SourceNotInstalledException -> context.getString( - R.string.loader_not_implemented_error, + is SourceNotInstalledException -> context.stringResource( + MR.strings.loader_not_implemented_error, ) else -> e.message } @@ -359,55 +361,6 @@ class MangaLibraryUpdateJob(private val context: Context, workerParams: WorkerPa return syncChaptersWithSource.await(chapters, dbManga, source, false, fetchWindow) } - private suspend fun updateCovers() { - val semaphore = Semaphore(5) - val progressCount = AtomicInteger(0) - val currentlyUpdatingManga = CopyOnWriteArrayList() - - coroutineScope { - mangaToUpdate.groupBy { it.manga.source } - .values - .map { mangaInSource -> - async { - semaphore.withPermit { - mangaInSource.forEach { libraryManga -> - val manga = libraryManga.manga - ensureActive() - - withUpdateNotification( - currentlyUpdatingManga, - progressCount, - manga, - ) { - val source = sourceManager.get(manga.source) ?: return@withUpdateNotification - try { - val networkManga = source.getMangaDetails(manga.toSManga()) - val updatedManga = manga.prepUpdateCover( - coverCache, - networkManga, - true, - ) - .copyFrom(networkManga) - try { - updateManga.await(updatedManga.toMangaUpdate()) - } catch (e: Exception) { - logcat(LogPriority.ERROR) { "Manga doesn't exist anymore" } - } - } catch (e: Throwable) { - // Ignore errors and continue - logcat(LogPriority.ERROR, e) - } - } - } - } - } - } - .awaitAll() - } - - notifier.cancelProgressNotification() - } - private suspend fun withUpdateNotification( updatingManga: CopyOnWriteArrayList, completed: AtomicInteger, @@ -445,7 +398,7 @@ class MangaLibraryUpdateJob(private val context: Context, workerParams: WorkerPa val file = context.createFileInCacheDir("tachiyomi_update_errors.txt") file.bufferedWriter().use { out -> out.write( - context.getString(R.string.library_errors_help, ERROR_LOG_HELP_URL) + "\n\n", + context.stringResource(MR.strings.library_errors_help, ERROR_LOG_HELP_URL) + "\n\n", ) // Error file format: // ! Error @@ -468,14 +421,6 @@ class MangaLibraryUpdateJob(private val context: Context, workerParams: WorkerPa return File("") } - /** - * Defines what should be updated within a service execution. - */ - enum class Target { - CHAPTERS, // Manga chapters - COVERS, // Manga covers - } - companion object { private const val TAG = "LibraryUpdate" private const val WORK_NAME_AUTO = "LibraryUpdate-auto" @@ -489,11 +434,6 @@ class MangaLibraryUpdateJob(private val context: Context, workerParams: WorkerPa */ private const val KEY_CATEGORY = "category" - /** - * Key that defines what should be updated. - */ - private const val KEY_TARGET = "target" - fun cancelAllWorks(context: Context) { context.workManager.cancelAllWorkByTag(TAG) } @@ -539,7 +479,6 @@ class MangaLibraryUpdateJob(private val context: Context, workerParams: WorkerPa fun startNow( context: Context, category: Category? = null, - target: Target = Target.CHAPTERS, ): Boolean { val wm = context.workManager if (wm.isRunning(TAG)) { @@ -549,7 +488,6 @@ class MangaLibraryUpdateJob(private val context: Context, workerParams: WorkerPa val inputData = workDataOf( KEY_CATEGORY to category?.id, - KEY_TARGET to target.name, ) val request = OneTimeWorkRequestBuilder() .addTag(TAG) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/manga/MangaLibraryUpdateNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/manga/MangaLibraryUpdateNotifier.kt index 7c8ee68c2a..6e90c65bf3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/manga/MangaLibraryUpdateNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/manga/MangaLibraryUpdateNotifier.kt @@ -26,9 +26,11 @@ import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.getBitmapOrNull import eu.kanade.tachiyomi.util.system.notificationBuilder import eu.kanade.tachiyomi.util.system.notify +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchUI import tachiyomi.domain.entries.manga.model.Manga import tachiyomi.domain.items.chapter.model.Chapter +import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy import java.math.RoundingMode import java.text.NumberFormat @@ -60,14 +62,14 @@ class MangaLibraryUpdateNotifier(private val context: Context) { */ val progressNotificationBuilder by lazy { context.notificationBuilder(Notifications.CHANNEL_LIBRARY_PROGRESS) { - setContentTitle(context.getString(R.string.app_name)) + setContentTitle(context.stringResource(MR.strings.app_name)) setSmallIcon(R.drawable.ic_refresh_24dp) setLargeIcon(notificationBitmap) setOngoing(true) setOnlyAlertOnce(true) addAction( R.drawable.ic_close_24dp, - context.getString(R.string.action_cancel), + context.stringResource(MR.strings.action_cancel), cancelIntent, ) } @@ -83,8 +85,8 @@ class MangaLibraryUpdateNotifier(private val context: Context) { fun showProgressNotification(manga: List, current: Int, total: Int) { progressNotificationBuilder .setContentTitle( - context.getString( - R.string.notification_updating_progress, + context.stringResource( + MR.strings.notification_updating_progress, percentFormatter.format(current.toFloat() / total), ), ) @@ -107,10 +109,10 @@ class MangaLibraryUpdateNotifier(private val context: Context) { Notifications.ID_LIBRARY_SIZE_WARNING, Notifications.CHANNEL_LIBRARY_PROGRESS, ) { - setContentTitle(context.getString(R.string.label_warning)) + setContentTitle(context.stringResource(MR.strings.label_warning)) setStyle( NotificationCompat.BigTextStyle() - .bigText(context.getString(R.string.notification_size_warning)), + .bigText(context.stringResource(MR.strings.notification_size_warning)), ) setSmallIcon(R.drawable.ic_warning_white_24dp) setTimeoutAfter(MangaDownloader.WARNING_NOTIF_TIMEOUT_MS) @@ -133,8 +135,8 @@ class MangaLibraryUpdateNotifier(private val context: Context) { Notifications.ID_LIBRARY_ERROR, Notifications.CHANNEL_LIBRARY_ERROR, ) { - setContentTitle(context.resources.getString(R.string.notification_update_error, failed)) - setContentText(context.getString(R.string.action_show_errors)) + setContentTitle(context.stringResource(MR.strings.notification_update_error, failed)) + setContentText(context.stringResource(MR.strings.action_show_errors)) setSmallIcon(R.drawable.ic_ani) setContentIntent(NotificationReceiver.openErrorLogPendingActivity(context, uri)) @@ -156,9 +158,9 @@ class MangaLibraryUpdateNotifier(private val context: Context) { Notifications.CHANNEL_LIBRARY_SKIPPED, ) { setContentTitle( - context.resources.getString(R.string.notification_update_skipped, skipped), + context.stringResource(MR.strings.notification_update_skipped, skipped), ) - setContentText(context.getString(R.string.learn_more)) + setContentText(context.stringResource(MR.strings.learn_more)) setSmallIcon(R.drawable.ic_ani) setContentIntent(NotificationHandler.openUrl(context, HELP_SKIPPED_MANGA_URL)) } @@ -175,7 +177,7 @@ class MangaLibraryUpdateNotifier(private val context: Context) { Notifications.ID_NEW_CHAPTERS, Notifications.CHANNEL_NEW_CHAPTERS_EPISODES, ) { - setContentTitle(context.getString(R.string.notification_new_chapters)) + setContentTitle(context.stringResource(MR.strings.notification_new_chapters)) if (updates.size == 1 && !preferences.hideNotificationContent().get()) { setContentText(updates.first().first.title.chop(NOTIF_MANGA_TITLE_MAX_LEN)) } else { @@ -257,7 +259,7 @@ class MangaLibraryUpdateNotifier(private val context: Context) { // Mark chapters as read action addAction( R.drawable.ic_glasses_24dp, - context.getString(R.string.action_mark_as_read), + context.stringResource(MR.strings.action_mark_as_read), NotificationReceiver.markAsViewedPendingBroadcast( context, manga, @@ -268,7 +270,7 @@ class MangaLibraryUpdateNotifier(private val context: Context) { // View chapters action addAction( R.drawable.ic_book_24dp, - context.getString(R.string.action_view_chapters), + context.stringResource(MR.strings.action_view_chapters), NotificationReceiver.openChapterPendingActivity( context, manga, @@ -280,7 +282,7 @@ class MangaLibraryUpdateNotifier(private val context: Context) { if (chapters.size <= MangaDownloader.CHAPTERS_PER_SOURCE_QUEUE_WARNING_THRESHOLD) { addAction( android.R.drawable.stat_sys_download_done, - context.getString(R.string.action_download), + context.stringResource(MR.strings.action_download), NotificationReceiver.downloadChaptersPendingBroadcast( context, manga, @@ -331,14 +333,14 @@ class MangaLibraryUpdateNotifier(private val context: Context) { val remaining = chapters.size - displayableChapterNumbers.size if (remaining == 0) { // "Chapter 2.5" - context.resources.getString( - R.string.notification_chapters_single, + context.stringResource( + MR.strings.notification_chapters_single, displayableChapterNumbers.first(), ) } else { // "Chapter 2.5 and 10 more" - context.resources.getString( - R.string.notification_chapters_single_and_more, + context.stringResource( + MR.strings.notification_chapters_single_and_more, displayableChapterNumbers.first(), remaining, ) @@ -361,8 +363,8 @@ class MangaLibraryUpdateNotifier(private val context: Context) { ) } else { // "Chapters 1, 2.5, 3" - context.resources.getString( - R.string.notification_chapters_multiple, + context.stringResource( + MR.strings.notification_chapters_multiple, displayableChapterNumbers.joinToString(", "), ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/manga/MangaMetadataUpdateJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/manga/MangaMetadataUpdateJob.kt new file mode 100644 index 0000000000..28ce8b7efa --- /dev/null +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/manga/MangaMetadataUpdateJob.kt @@ -0,0 +1,210 @@ +package eu.kanade.tachiyomi.data.library.manga + +import android.content.Context +import androidx.work.CoroutineWorker +import androidx.work.ExistingWorkPolicy +import androidx.work.ForegroundInfo +import androidx.work.OneTimeWorkRequestBuilder +import androidx.work.WorkInfo +import androidx.work.WorkQuery +import androidx.work.WorkerParameters +import eu.kanade.domain.entries.manga.interactor.UpdateManga +import eu.kanade.domain.entries.manga.model.copyFrom +import eu.kanade.domain.entries.manga.model.toSManga +import eu.kanade.tachiyomi.data.cache.MangaCoverCache +import eu.kanade.tachiyomi.data.notification.Notifications +import eu.kanade.tachiyomi.source.UnmeteredSource +import eu.kanade.tachiyomi.util.prepUpdateCover +import eu.kanade.tachiyomi.util.system.isRunning +import eu.kanade.tachiyomi.util.system.workManager +import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.ensureActive +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.sync.Semaphore +import kotlinx.coroutines.sync.withPermit +import logcat.LogPriority +import tachiyomi.core.util.lang.withIOContext +import tachiyomi.core.util.system.logcat +import tachiyomi.domain.entries.manga.interactor.GetLibraryManga +import tachiyomi.domain.entries.manga.model.Manga +import tachiyomi.domain.entries.manga.model.toMangaUpdate +import tachiyomi.domain.library.manga.LibraryManga +import tachiyomi.domain.source.manga.service.MangaSourceManager +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get +import java.util.concurrent.CopyOnWriteArrayList +import java.util.concurrent.atomic.AtomicInteger + +class MangaMetadataUpdateJob(private val context: Context, workerParams: WorkerParameters) : + CoroutineWorker(context, workerParams) { + + private val sourceManager: MangaSourceManager = Injekt.get() + private val coverCache: MangaCoverCache = Injekt.get() + private val getLibraryManga: GetLibraryManga = Injekt.get() + private val updateManga: UpdateManga = Injekt.get() + + private val notifier = MangaLibraryUpdateNotifier(context) + + private var mangaToUpdate: List = mutableListOf() + + override suspend fun doWork(): Result { + try { + setForeground(getForegroundInfo()) + } catch (e: IllegalStateException) { + logcat(LogPriority.ERROR, e) { "Not allowed to set foreground job" } + } + + addMangaToQueue() + + return withIOContext { + try { + updateMetadata() + Result.success() + } catch (e: Exception) { + if (e is CancellationException) { + // Assume success although cancelled + Result.success() + } else { + logcat(LogPriority.ERROR, e) + Result.failure() + } + } finally { + notifier.cancelProgressNotification() + } + } + } + + override suspend fun getForegroundInfo(): ForegroundInfo { + val notifier = MangaLibraryUpdateNotifier(context) + return ForegroundInfo( + Notifications.ID_LIBRARY_PROGRESS, + notifier.progressNotificationBuilder.build(), + ) + } + + /** + * Adds list of manga to be updated. + */ + private fun addMangaToQueue() { + mangaToUpdate = runBlocking { getLibraryManga.await() } + + // Warn when excessively checking a single source + val maxUpdatesFromSource = mangaToUpdate + .groupBy { it.manga.source } + .filterKeys { sourceManager.get(it) !is UnmeteredSource } + .maxOfOrNull { it.value.size } ?: 0 + if (maxUpdatesFromSource > MANGA_PER_SOURCE_QUEUE_WARNING_THRESHOLD) { + notifier.showQueueSizeWarningNotification() + } + } + + private suspend fun updateMetadata() { + val semaphore = Semaphore(5) + val progressCount = AtomicInteger(0) + val currentlyUpdatingManga = CopyOnWriteArrayList() + + coroutineScope { + mangaToUpdate.groupBy { it.manga.source } + .values + .map { mangaInSource -> + async { + semaphore.withPermit { + mangaInSource.forEach { libraryManga -> + val manga = libraryManga.manga + ensureActive() + + withUpdateNotification( + currentlyUpdatingManga, + progressCount, + manga, + ) { + val source = sourceManager.get(manga.source) ?: return@withUpdateNotification + try { + val networkManga = source.getMangaDetails(manga.toSManga()) + val updatedManga = manga.prepUpdateCover(coverCache, networkManga, true) + .copyFrom(networkManga) + try { + updateManga.await(updatedManga.toMangaUpdate()) + } catch (e: Exception) { + logcat(LogPriority.ERROR) { "Manga doesn't exist anymore" } + } + } catch (e: Throwable) { + // Ignore errors and continue + logcat(LogPriority.ERROR, e) + } + } + } + } + } + } + .awaitAll() + } + + notifier.cancelProgressNotification() + } + + private suspend fun withUpdateNotification( + updatingManga: CopyOnWriteArrayList, + completed: AtomicInteger, + manga: Manga, + block: suspend () -> Unit, + ) = coroutineScope { + ensureActive() + + updatingManga.add(manga) + notifier.showProgressNotification( + updatingManga, + completed.get(), + mangaToUpdate.size, + ) + + block() + + ensureActive() + + updatingManga.remove(manga) + completed.getAndIncrement() + notifier.showProgressNotification( + updatingManga, + completed.get(), + mangaToUpdate.size, + ) + } + + companion object { + private const val TAG = "MetadataUpdate" + private const val WORK_NAME_MANUAL = "MetadataUpdate" + + private const val MANGA_PER_SOURCE_QUEUE_WARNING_THRESHOLD = 60 + + fun startNow(context: Context): Boolean { + val wm = context.workManager + if (wm.isRunning(TAG)) { + // Already running either as a scheduled or manual job + return false + } + val request = OneTimeWorkRequestBuilder() + .addTag(TAG) + .addTag(WORK_NAME_MANUAL) + .build() + wm.enqueueUniqueWork(WORK_NAME_MANUAL, ExistingWorkPolicy.KEEP, request) + + return true + } + + fun stop(context: Context) { + val wm = context.workManager + val workQuery = WorkQuery.Builder.fromTags(listOf(TAG)) + .addStates(listOf(WorkInfo.State.RUNNING)) + .build() + wm.getWorkInfos(workQuery).get() + // Should only return one work but just in case + .forEach { + wm.cancelWorkById(it.id) + } + } + } +} diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt b/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt index d2e41d1c1f..fda4fb1447 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt @@ -7,7 +7,6 @@ import android.content.Intent import android.net.Uri import android.os.Build import androidx.core.net.toUri -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.core.Constants import eu.kanade.tachiyomi.data.backup.BackupRestoreJob import eu.kanade.tachiyomi.data.download.anime.AnimeDownloadManager @@ -26,6 +25,7 @@ import eu.kanade.tachiyomi.util.system.notificationManager import eu.kanade.tachiyomi.util.system.toShareIntent import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.runBlocking +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchIO import tachiyomi.domain.download.service.DownloadPreferences import tachiyomi.domain.entries.anime.interactor.GetAnime @@ -42,6 +42,7 @@ import tachiyomi.domain.items.episode.model.Episode import tachiyomi.domain.items.episode.model.toEpisodeUpdate import tachiyomi.domain.source.anime.service.AnimeSourceManager import tachiyomi.domain.source.manga.service.MangaSourceManager +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import uy.kohesive.injekt.injectLazy @@ -245,7 +246,7 @@ class NotificationReceiver : BroadcastReceiver() { } context.startActivity(intent) } else { - context.toast(context.getString(R.string.download_error)) + context.toast(context.stringResource(MR.strings.download_error)) } } @@ -265,7 +266,7 @@ class NotificationReceiver : BroadcastReceiver() { } context.startActivity(intent) } else { - context.toast(context.getString(R.string.download_error)) + context.toast(context.stringResource(MR.strings.download_error)) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/notification/Notifications.kt b/app/src/main/java/eu/kanade/tachiyomi/data/notification/Notifications.kt index d207127ee8..10f59770ce 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/notification/Notifications.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/notification/Notifications.kt @@ -5,9 +5,10 @@ import androidx.core.app.NotificationManagerCompat import androidx.core.app.NotificationManagerCompat.IMPORTANCE_DEFAULT import androidx.core.app.NotificationManagerCompat.IMPORTANCE_HIGH import androidx.core.app.NotificationManagerCompat.IMPORTANCE_LOW -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.util.system.buildNotificationChannel import eu.kanade.tachiyomi.util.system.buildNotificationChannelGroup +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR /** * Class to manage the basic information of all the notifications used in the app. @@ -106,16 +107,16 @@ object Notifications { notificationManager.createNotificationChannelGroupsCompat( listOf( buildNotificationChannelGroup(GROUP_BACKUP_RESTORE) { - setName(context.getString(R.string.label_backup)) + setName(context.stringResource(MR.strings.label_backup)) }, buildNotificationChannelGroup(GROUP_DOWNLOADER) { - setName(context.getString(R.string.download_notifier_downloader_title)) + setName(context.stringResource(MR.strings.download_notifier_downloader_title)) }, buildNotificationChannelGroup(GROUP_LIBRARY) { - setName(context.getString(R.string.label_library)) + setName(context.stringResource(MR.strings.label_library)) }, buildNotificationChannelGroup(GROUP_APK_UPDATES) { - setName(context.getString(R.string.label_recent_updates)) + setName(context.stringResource(MR.strings.label_recent_updates)) }, ), ) @@ -123,57 +124,57 @@ object Notifications { notificationManager.createNotificationChannelsCompat( listOf( buildNotificationChannel(CHANNEL_COMMON, IMPORTANCE_LOW) { - setName(context.getString(R.string.channel_common)) + setName(context.stringResource(MR.strings.channel_common)) }, buildNotificationChannel(CHANNEL_LIBRARY_PROGRESS, IMPORTANCE_LOW) { - setName(context.getString(R.string.channel_progress)) + setName(context.stringResource(MR.strings.channel_progress)) setGroup(GROUP_LIBRARY) setShowBadge(false) }, buildNotificationChannel(CHANNEL_LIBRARY_ERROR, IMPORTANCE_LOW) { - setName(context.getString(R.string.channel_errors)) + setName(context.stringResource(MR.strings.channel_errors)) setGroup(GROUP_LIBRARY) setShowBadge(false) }, buildNotificationChannel(CHANNEL_LIBRARY_SKIPPED, IMPORTANCE_LOW) { - setName(context.getString(R.string.channel_skipped)) + setName(context.stringResource(MR.strings.channel_skipped)) setGroup(GROUP_LIBRARY) setShowBadge(false) }, buildNotificationChannel(CHANNEL_NEW_CHAPTERS_EPISODES, IMPORTANCE_DEFAULT) { - setName(context.getString(R.string.channel_new_chapters_episodes)) + setName(context.stringResource(MR.strings.channel_new_chapters_episodes)) }, buildNotificationChannel(CHANNEL_DOWNLOADER_PROGRESS, IMPORTANCE_LOW) { - setName(context.getString(R.string.channel_progress)) + setName(context.stringResource(MR.strings.channel_progress)) setGroup(GROUP_DOWNLOADER) setShowBadge(false) }, buildNotificationChannel(CHANNEL_DOWNLOADER_ERROR, IMPORTANCE_LOW) { - setName(context.getString(R.string.channel_errors)) + setName(context.stringResource(MR.strings.channel_errors)) setGroup(GROUP_DOWNLOADER) setShowBadge(false) }, buildNotificationChannel(CHANNEL_BACKUP_RESTORE_PROGRESS, IMPORTANCE_LOW) { - setName(context.getString(R.string.channel_progress)) + setName(context.stringResource(MR.strings.channel_progress)) setGroup(GROUP_BACKUP_RESTORE) setShowBadge(false) }, buildNotificationChannel(CHANNEL_BACKUP_RESTORE_COMPLETE, IMPORTANCE_HIGH) { - setName(context.getString(R.string.channel_complete)) + setName(context.stringResource(MR.strings.channel_complete)) setGroup(GROUP_BACKUP_RESTORE) setShowBadge(false) setSound(null, null) }, buildNotificationChannel(CHANNEL_INCOGNITO_MODE, IMPORTANCE_LOW) { - setName(context.getString(R.string.pref_incognito_mode)) + setName(context.stringResource(MR.strings.pref_incognito_mode)) }, buildNotificationChannel(CHANNEL_APP_UPDATE, IMPORTANCE_DEFAULT) { setGroup(GROUP_APK_UPDATES) - setName(context.getString(R.string.channel_app_updates)) + setName(context.stringResource(MR.strings.channel_app_updates)) }, buildNotificationChannel(CHANNEL_EXTENSIONS_UPDATE, IMPORTANCE_DEFAULT) { setGroup(GROUP_APK_UPDATES) - setName(context.getString(R.string.channel_ext_updates)) + setName(context.stringResource(MR.strings.channel_ext_updates)) }, ), ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/saver/ImageSaver.kt b/app/src/main/java/eu/kanade/tachiyomi/data/saver/ImageSaver.kt index 732fbca0ea..c22e2a0198 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/saver/ImageSaver.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/saver/ImageSaver.kt @@ -11,14 +11,15 @@ import android.provider.MediaStore import androidx.annotation.RequiresApi import androidx.core.content.contentValuesOf import androidx.core.net.toUri -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.util.storage.DiskUtil import eu.kanade.tachiyomi.util.storage.cacheImageDir import eu.kanade.tachiyomi.util.storage.getUriCompat import logcat.LogPriority import okio.IOException +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.system.ImageUtil import tachiyomi.core.util.system.logcat +import tachiyomi.i18n.MR import java.io.ByteArrayInputStream import java.io.ByteArrayOutputStream import java.io.File @@ -72,7 +73,7 @@ class ImageSaver( val imageLocation = (image.location as Location.Pictures).relativePath val relativePath = listOf( Environment.DIRECTORY_PICTURES, - context.getString(R.string.app_name), + context.stringResource(MR.strings.app_name), imageLocation, ).joinToString(File.separator) @@ -87,7 +88,7 @@ class ImageSaver( context.contentResolver.insert( pictureDir, contentValues, - ) ?: throw IOException(context.getString(R.string.error_saving_picture)) + ) ?: throw IOException(context.stringResource(MR.strings.error_saving_picture)) } try { @@ -98,7 +99,7 @@ class ImageSaver( } } catch (e: Exception) { logcat(LogPriority.ERROR, e) - throw IOException(context.getString(R.string.error_saving_picture)) + throw IOException(context.stringResource(MR.strings.error_saving_picture)) } DiskUtil.scanMedia(context, picture) @@ -191,7 +192,7 @@ sealed interface Location { is Pictures -> { val file = File( Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), - context.getString(R.string.app_name), + context.stringResource(MR.strings.app_name), ) if (relativePath.isNotEmpty()) { return File( diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/Tracker.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/Tracker.kt index c9763ecd67..195495fc7d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/Tracker.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/Tracker.kt @@ -3,7 +3,7 @@ package eu.kanade.tachiyomi.data.track import androidx.annotation.CallSuper import androidx.annotation.ColorInt import androidx.annotation.DrawableRes -import androidx.annotation.StringRes +import dev.icerock.moko.resources.StringResource import kotlinx.collections.immutable.ImmutableList import okhttp3.OkHttpClient @@ -24,8 +24,7 @@ interface Tracker { @ColorInt fun getLogoColor(): Int - @StringRes - fun getStatus(status: Int): Int? + fun getStatus(status: Int): StringResource? fun getCompletionStatus(): Int diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/Anilist.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/Anilist.kt index c27f44793d..be7fa785ea 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/Anilist.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/Anilist.kt @@ -1,7 +1,7 @@ package eu.kanade.tachiyomi.data.track.anilist import android.graphics.Color -import androidx.annotation.StringRes +import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack import eu.kanade.tachiyomi.data.database.models.manga.MangaTrack @@ -15,9 +15,9 @@ import eu.kanade.tachiyomi.data.track.model.MangaTrackSearch import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList -import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json +import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy import tachiyomi.domain.track.anime.model.AnimeTrack as DomainAnimeTrack import tachiyomi.domain.track.manga.model.MangaTrack as DomainTrack @@ -82,17 +82,16 @@ class Anilist(id: Long) : return listOf(WATCHING, PLANNING_ANIME, COMPLETED, REPEATING_ANIME, PAUSED, DROPPED) } - @StringRes - override fun getStatus(status: Int): Int? = when (status) { - WATCHING -> R.string.watching - READING -> R.string.reading - PLANNING -> R.string.plan_to_read - PLANNING_ANIME -> R.string.plan_to_watch - COMPLETED -> R.string.completed - REPEATING -> R.string.repeating - REPEATING_ANIME -> R.string.repeating_anime - PAUSED -> R.string.paused - DROPPED -> R.string.dropped + override fun getStatus(status: Int): StringResource? = when (status) { + WATCHING -> MR.strings.watching + READING -> MR.strings.reading + PLANNING -> MR.strings.plan_to_read + PLANNING_ANIME -> MR.strings.plan_to_watch + COMPLETED -> MR.strings.completed + REPEATING -> MR.strings.repeating + REPEATING_ANIME -> MR.strings.repeating_anime + PAUSED -> MR.strings.paused + DROPPED -> MR.strings.dropped else -> null } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/Bangumi.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/Bangumi.kt index 8724b9011e..5cdbf255cc 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/Bangumi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/Bangumi.kt @@ -1,7 +1,7 @@ package eu.kanade.tachiyomi.data.track.bangumi import android.graphics.Color -import androidx.annotation.StringRes +import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack import eu.kanade.tachiyomi.data.database.models.manga.MangaTrack @@ -12,9 +12,9 @@ import eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch import eu.kanade.tachiyomi.data.track.model.MangaTrackSearch import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList -import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json +import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy class Bangumi(id: Long) : BaseTracker(id, "Bangumi"), MangaTracker, AnimeTracker { @@ -162,13 +162,12 @@ class Bangumi(id: Long) : BaseTracker(id, "Bangumi"), MangaTracker, AnimeTracker return listOf(READING, COMPLETED, ON_HOLD, DROPPED, PLAN_TO_READ) } - @StringRes - override fun getStatus(status: Int): Int? = when (status) { - READING -> R.string.reading - PLAN_TO_READ -> R.string.plan_to_read - COMPLETED -> R.string.completed - ON_HOLD -> R.string.on_hold - DROPPED -> R.string.dropped + override fun getStatus(status: Int): StringResource? = when (status) { + READING -> MR.strings.reading + PLAN_TO_READ -> MR.strings.plan_to_read + COMPLETED -> MR.strings.completed + ON_HOLD -> MR.strings.on_hold + DROPPED -> MR.strings.dropped else -> null } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiApi.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiApi.kt index 8749370ccc..d7b9453aa9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiApi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiApi.kt @@ -10,7 +10,6 @@ import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.awaitSuccess import eu.kanade.tachiyomi.network.parseAs -import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.contentOrNull diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiInterceptor.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiInterceptor.kt index 17db818870..7507ba3ef3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiInterceptor.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiInterceptor.kt @@ -1,6 +1,5 @@ package eu.kanade.tachiyomi.data.track.bangumi -import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json import okhttp3.FormBody import okhttp3.Interceptor diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/kavita/Kavita.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/kavita/Kavita.kt index 98ac46a82e..af58a491e6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/kavita/Kavita.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/kavita/Kavita.kt @@ -1,8 +1,7 @@ package eu.kanade.tachiyomi.data.track.kavita import android.graphics.Color -import androidx.annotation.StringRes -import com.google.common.base.Strings.isNullOrEmpty +import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.manga.MangaTrack import eu.kanade.tachiyomi.data.track.BaseTracker @@ -16,6 +15,7 @@ import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import tachiyomi.domain.entries.manga.model.Manga import tachiyomi.domain.source.manga.service.MangaSourceManager +import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy import java.security.MessageDigest import tachiyomi.domain.track.manga.model.MangaTrack as DomainTrack @@ -41,11 +41,10 @@ class Kavita(id: Long) : BaseTracker(id, "Kavita"), EnhancedMangaTracker, MangaT override fun getStatusListManga() = listOf(UNREAD, READING, COMPLETED) - @StringRes - override fun getStatus(status: Int): Int? = when (status) { - UNREAD -> R.string.unread - READING -> R.string.reading - COMPLETED -> R.string.completed + override fun getStatus(status: Int): StringResource? = when (status) { + UNREAD -> MR.strings.unread + READING -> MR.strings.reading + COMPLETED -> MR.strings.completed else -> null } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/kavita/KavitaModels.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/kavita/KavitaModels.kt index fe40cfabb6..7072d43060 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/kavita/KavitaModels.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/kavita/KavitaModels.kt @@ -10,7 +10,7 @@ data class SeriesDto( val name: String, val originalName: String = "", val thumbnail_url: String? = "", - val localizedName: String? = "", + val stringResourcedName: String? = "", val sortName: String? = "", val pages: Int, val coverImageLocked: Boolean = true, diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/Kitsu.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/Kitsu.kt index 76d4bf91f1..f38b70885b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/Kitsu.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/Kitsu.kt @@ -1,7 +1,7 @@ package eu.kanade.tachiyomi.data.track.kitsu import android.graphics.Color -import androidx.annotation.StringRes +import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack import eu.kanade.tachiyomi.data.database.models.manga.MangaTrack @@ -16,6 +16,7 @@ import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json +import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy import java.text.DecimalFormat @@ -59,15 +60,14 @@ class Kitsu(id: Long) : return listOf(WATCHING, PLAN_TO_WATCH, COMPLETED, ON_HOLD, DROPPED) } - @StringRes - override fun getStatus(status: Int): Int? = when (status) { - READING -> R.string.currently_reading - WATCHING -> R.string.currently_watching - PLAN_TO_READ -> R.string.want_to_read - PLAN_TO_WATCH -> R.string.want_to_watch - COMPLETED -> R.string.completed - ON_HOLD -> R.string.on_hold - DROPPED -> R.string.dropped + override fun getStatus(status: Int): StringResource? = when (status) { + READING -> MR.strings.currently_reading + WATCHING -> MR.strings.currently_watching + PLAN_TO_READ -> MR.strings.want_to_read + PLAN_TO_WATCH -> MR.strings.want_to_watch + COMPLETED -> MR.strings.completed + ON_HOLD -> MR.strings.on_hold + DROPPED -> MR.strings.dropped else -> null } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuInterceptor.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuInterceptor.kt index 395d5daa9a..45abfa6753 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuInterceptor.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuInterceptor.kt @@ -1,6 +1,5 @@ package eu.kanade.tachiyomi.data.track.kitsu -import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json import okhttp3.Interceptor import okhttp3.Response diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/komga/Komga.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/komga/Komga.kt index d60a943765..8a3a7223d9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/komga/Komga.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/komga/Komga.kt @@ -1,7 +1,7 @@ package eu.kanade.tachiyomi.data.track.komga import android.graphics.Color -import androidx.annotation.StringRes +import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.manga.MangaTrack import eu.kanade.tachiyomi.data.track.BaseTracker @@ -14,6 +14,7 @@ import kotlinx.collections.immutable.persistentListOf import okhttp3.Dns import okhttp3.OkHttpClient import tachiyomi.domain.entries.manga.model.Manga +import tachiyomi.i18n.MR import tachiyomi.domain.track.manga.model.MangaTrack as DomainTrack class Komga(id: Long) : BaseTracker(id, "Komga"), EnhancedMangaTracker, MangaTracker { @@ -37,11 +38,10 @@ class Komga(id: Long) : BaseTracker(id, "Komga"), EnhancedMangaTracker, MangaTra override fun getStatusListManga() = listOf(UNREAD, READING, COMPLETED) - @StringRes - override fun getStatus(status: Int): Int? = when (status) { - UNREAD -> R.string.unread - READING -> R.string.reading - COMPLETED -> R.string.completed + override fun getStatus(status: Int): StringResource? = when (status) { + UNREAD -> MR.strings.unread + READING -> MR.strings.reading + COMPLETED -> MR.strings.completed else -> null } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates.kt index 156a5d53d6..482cf7fd70 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates.kt @@ -1,7 +1,7 @@ package eu.kanade.tachiyomi.data.track.mangaupdates import android.graphics.Color -import androidx.annotation.StringRes +import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.manga.MangaTrack import eu.kanade.tachiyomi.data.track.BaseTracker @@ -12,6 +12,7 @@ import eu.kanade.tachiyomi.data.track.mangaupdates.dto.toTrackSearch import eu.kanade.tachiyomi.data.track.model.MangaTrackSearch import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList +import tachiyomi.i18n.MR class MangaUpdates(id: Long) : BaseTracker(id, "MangaUpdates"), MangaTracker, DeletableMangaTracker { @@ -41,13 +42,12 @@ class MangaUpdates(id: Long) : BaseTracker(id, "MangaUpdates"), MangaTracker, De return listOf(READING_LIST, COMPLETE_LIST, ON_HOLD_LIST, UNFINISHED_LIST, WISH_LIST) } - @StringRes - override fun getStatus(status: Int): Int? = when (status) { - READING_LIST -> R.string.reading_list - WISH_LIST -> R.string.wish_list - COMPLETE_LIST -> R.string.complete_list - ON_HOLD_LIST -> R.string.on_hold_list - UNFINISHED_LIST -> R.string.unfinished_list + override fun getStatus(status: Int): StringResource? = when (status) { + READING_LIST -> MR.strings.reading_list + WISH_LIST -> MR.strings.wish_list + COMPLETE_LIST -> MR.strings.complete_list + ON_HOLD_LIST -> MR.strings.on_hold_list + UNFINISHED_LIST -> MR.strings.unfinished_list else -> null } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList.kt index 5a161f784f..b54181b066 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList.kt @@ -1,7 +1,7 @@ package eu.kanade.tachiyomi.data.track.myanimelist import android.graphics.Color -import androidx.annotation.StringRes +import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack import eu.kanade.tachiyomi.data.database.models.manga.MangaTrack @@ -14,9 +14,9 @@ import eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch import eu.kanade.tachiyomi.data.track.model.MangaTrackSearch import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList -import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json +import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy class MyAnimeList(id: Long) : @@ -67,17 +67,16 @@ class MyAnimeList(id: Long) : return listOf(WATCHING, COMPLETED, ON_HOLD, DROPPED, PLAN_TO_WATCH, REWATCHING) } - @StringRes - override fun getStatus(status: Int): Int? = when (status) { - READING -> R.string.reading - WATCHING -> R.string.watching - COMPLETED -> R.string.completed - ON_HOLD -> R.string.on_hold - DROPPED -> R.string.dropped - PLAN_TO_READ -> R.string.plan_to_read - PLAN_TO_WATCH -> R.string.plan_to_watch - REREADING -> R.string.repeating - REWATCHING -> R.string.repeating_anime + override fun getStatus(status: Int): StringResource? = when (status) { + READING -> MR.strings.reading + WATCHING -> MR.strings.watching + COMPLETED -> MR.strings.completed + ON_HOLD -> MR.strings.on_hold + DROPPED -> MR.strings.dropped + PLAN_TO_READ -> MR.strings.plan_to_read + PLAN_TO_WATCH -> MR.strings.plan_to_watch + REREADING -> MR.strings.repeating + REWATCHING -> MR.strings.repeating_anime else -> null } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/Shikimori.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/Shikimori.kt index 0f582dd7e5..5aa2c97113 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/Shikimori.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/Shikimori.kt @@ -1,7 +1,7 @@ package eu.kanade.tachiyomi.data.track.shikimori import android.graphics.Color -import androidx.annotation.StringRes +import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack import eu.kanade.tachiyomi.data.database.models.manga.MangaTrack @@ -14,9 +14,9 @@ import eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch import eu.kanade.tachiyomi.data.track.model.MangaTrackSearch import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList -import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json +import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy class Shikimori(id: Long) : @@ -184,14 +184,13 @@ class Shikimori(id: Long) : return listOf(READING, COMPLETED, ON_HOLD, DROPPED, PLAN_TO_READ, REREADING) } - @StringRes - override fun getStatus(status: Int): Int? = when (status) { - READING -> R.string.reading - PLAN_TO_READ -> R.string.plan_to_read - COMPLETED -> R.string.completed - ON_HOLD -> R.string.on_hold - DROPPED -> R.string.dropped - REREADING -> R.string.repeating + override fun getStatus(status: Int): StringResource? = when (status) { + READING -> MR.strings.reading + PLAN_TO_READ -> MR.strings.plan_to_read + COMPLETED -> MR.strings.completed + ON_HOLD -> MR.strings.on_hold + DROPPED -> MR.strings.dropped + REREADING -> MR.strings.repeating else -> null } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriInterceptor.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriInterceptor.kt index 51934d0495..5ecea52e6f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriInterceptor.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriInterceptor.kt @@ -1,6 +1,5 @@ package eu.kanade.tachiyomi.data.track.shikimori -import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json import okhttp3.Interceptor import okhttp3.Response diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/simkl/Simkl.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/simkl/Simkl.kt index 970a60d8fc..b57549d4f6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/simkl/Simkl.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/simkl/Simkl.kt @@ -1,7 +1,7 @@ package eu.kanade.tachiyomi.data.track.simkl import android.graphics.Color -import androidx.annotation.StringRes +import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.anime.AnimeTrack import eu.kanade.tachiyomi.data.track.AnimeTracker @@ -9,9 +9,9 @@ import eu.kanade.tachiyomi.data.track.BaseTracker import eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList -import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json +import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy class Simkl(id: Long) : BaseTracker(id, "Simkl"), AnimeTracker { @@ -99,13 +99,12 @@ class Simkl(id: Long) : BaseTracker(id, "Simkl"), AnimeTracker { return listOf(WATCHING, COMPLETED, ON_HOLD, NOT_INTERESTING, PLAN_TO_WATCH) } - @StringRes - override fun getStatus(status: Int): Int? = when (status) { - WATCHING -> R.string.watching - PLAN_TO_WATCH -> R.string.plan_to_watch - COMPLETED -> R.string.completed - ON_HOLD -> R.string.on_hold - NOT_INTERESTING -> R.string.not_interesting + override fun getStatus(status: Int): StringResource? = when (status) { + WATCHING -> MR.strings.watching + PLAN_TO_WATCH -> MR.strings.plan_to_watch + COMPLETED -> MR.strings.completed + ON_HOLD -> MR.strings.on_hold + NOT_INTERESTING -> MR.strings.not_interesting else -> null } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/suwayomi/Suwayomi.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/suwayomi/Suwayomi.kt index 7f2e24ce52..e56826b7ab 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/suwayomi/Suwayomi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/suwayomi/Suwayomi.kt @@ -1,7 +1,7 @@ package eu.kanade.tachiyomi.data.track.suwayomi import android.graphics.Color -import androidx.annotation.StringRes +import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.manga.MangaTrack import eu.kanade.tachiyomi.data.track.BaseTracker @@ -11,6 +11,7 @@ import eu.kanade.tachiyomi.data.track.model.MangaTrackSearch import eu.kanade.tachiyomi.source.MangaSource import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf +import tachiyomi.i18n.MR import tachiyomi.domain.entries.manga.model.Manga as DomainManga import tachiyomi.domain.track.manga.model.MangaTrack as DomainTrack @@ -30,11 +31,10 @@ class Suwayomi(id: Long) : BaseTracker(id, "Suwayomi"), EnhancedMangaTracker, Ma override fun getStatusListManga() = listOf(UNREAD, READING, COMPLETED) - @StringRes - override fun getStatus(status: Int): Int? = when (status) { - UNREAD -> R.string.unread - READING -> R.string.reading - COMPLETED -> R.string.completed + override fun getStatus(status: Int): StringResource? = when (status) { + UNREAD -> MR.strings.unread + READING -> MR.strings.reading + COMPLETED -> MR.strings.completed else -> null } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateDownloadJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateDownloadJob.kt index 60d5e71ecc..581f15a12c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateDownloadJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateDownloadJob.kt @@ -9,7 +9,6 @@ import androidx.work.NetworkType import androidx.work.OneTimeWorkRequestBuilder import androidx.work.WorkerParameters import androidx.work.workDataOf -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.NetworkHelper @@ -22,8 +21,10 @@ import eu.kanade.tachiyomi.util.system.workManager import logcat.LogPriority import okhttp3.internal.http2.ErrorCode import okhttp3.internal.http2.StreamResetException +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.system.logcat +import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy import java.io.File import kotlin.coroutines.cancellation.CancellationException @@ -36,7 +37,7 @@ class AppUpdateDownloadJob(private val context: Context, workerParams: WorkerPar override suspend fun doWork(): Result { val url = inputData.getString(EXTRA_DOWNLOAD_URL) - val title = inputData.getString(EXTRA_DOWNLOAD_TITLE) ?: context.getString(R.string.app_name) + val title = inputData.getString(EXTRA_DOWNLOAD_TITLE) ?: context.stringResource(MR.strings.app_name) if (url.isNullOrEmpty()) { return Result.failure() diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt index c44b681d11..8285597f7b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt @@ -13,7 +13,9 @@ import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.util.system.notificationBuilder import eu.kanade.tachiyomi.util.system.notify +import tachiyomi.core.i18n.stringResource import tachiyomi.domain.release.model.Release +import tachiyomi.i18n.MR internal class AppUpdateNotifier(private val context: Context) { @@ -51,7 +53,7 @@ internal class AppUpdateNotifier(private val context: Context) { } with(notificationBuilder) { - setContentTitle(context.getString(R.string.update_check_notification_update_available)) + setContentTitle(context.stringResource(MR.strings.update_check_notification_update_available)) setContentText(release.version) setSmallIcon(android.R.drawable.stat_sys_download_done) setContentIntent(updateIntent) @@ -59,12 +61,12 @@ internal class AppUpdateNotifier(private val context: Context) { clearActions() addAction( android.R.drawable.stat_sys_download_done, - context.getString(R.string.action_download), + context.stringResource(MR.strings.action_download), updateIntent, ) addAction( R.drawable.ic_info_24dp, - context.getString(R.string.whats_new), + context.stringResource(MR.strings.whats_new), releaseIntent, ) } @@ -80,7 +82,7 @@ internal class AppUpdateNotifier(private val context: Context) { with(notificationBuilder) { title?.let { setContentTitle(title) } setContentText( - context.getString(R.string.update_check_notification_download_in_progress), + context.stringResource(MR.strings.update_check_notification_download_in_progress), ) setSmallIcon(android.R.drawable.stat_sys_download) setOngoing(true) @@ -88,7 +90,7 @@ internal class AppUpdateNotifier(private val context: Context) { clearActions() addAction( R.drawable.ic_close_24dp, - context.getString(R.string.action_cancel), + context.stringResource(MR.strings.action_cancel), NotificationReceiver.cancelDownloadAppUpdatePendingBroadcast(context), ) } @@ -117,7 +119,7 @@ internal class AppUpdateNotifier(private val context: Context) { fun promptInstall(uri: Uri) { val installIntent = NotificationHandler.installApkPendingActivity(context, uri) with(notificationBuilder) { - setContentText(context.getString(R.string.update_check_notification_download_complete)) + setContentText(context.stringResource(MR.strings.update_check_notification_download_complete)) setSmallIcon(android.R.drawable.stat_sys_download_done) setOnlyAlertOnce(false) setProgress(0, 0, false) @@ -127,12 +129,12 @@ internal class AppUpdateNotifier(private val context: Context) { clearActions() addAction( R.drawable.ic_system_update_alt_white_24dp, - context.getString(R.string.action_install), + context.stringResource(MR.strings.action_install), installIntent, ) addAction( R.drawable.ic_close_24dp, - context.getString(R.string.action_cancel), + context.stringResource(MR.strings.action_cancel), NotificationReceiver.dismissNotificationPendingBroadcast( context, Notifications.ID_APP_UPDATE_PROMPT, @@ -150,8 +152,8 @@ internal class AppUpdateNotifier(private val context: Context) { */ fun promptFdroidUpdate() { with(notificationBuilder) { - setContentTitle(context.getString(R.string.update_check_notification_update_available)) - setContentText(context.getString(R.string.update_check_fdroid_migration_info)) + setContentTitle(context.stringResource(MR.strings.update_check_notification_update_available)) + setContentText(context.stringResource(MR.strings.update_check_fdroid_migration_info)) setSmallIcon(R.drawable.ic_ani) setContentIntent( NotificationHandler.openUrl( @@ -170,7 +172,7 @@ internal class AppUpdateNotifier(private val context: Context) { */ fun onDownloadError(url: String) { with(notificationBuilder) { - setContentText(context.getString(R.string.update_check_notification_download_error)) + setContentText(context.stringResource(MR.strings.update_check_notification_download_error)) setSmallIcon(R.drawable.ic_warning_white_24dp) setOnlyAlertOnce(false) setProgress(0, 0, false) @@ -178,12 +180,12 @@ internal class AppUpdateNotifier(private val context: Context) { clearActions() addAction( R.drawable.ic_refresh_24dp, - context.getString(R.string.action_retry), + context.stringResource(MR.strings.action_retry), NotificationReceiver.downloadAppUpdatePendingBroadcast(context, url), ) addAction( R.drawable.ic_close_24dp, - context.getString(R.string.action_cancel), + context.stringResource(MR.strings.action_cancel), NotificationReceiver.dismissNotificationPendingBroadcast( context, Notifications.ID_APP_UPDATER, diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/anime/AnimeExtensionManager.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/anime/AnimeExtensionManager.kt index 60d5a219c3..e513eaddf6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/anime/AnimeExtensionManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/anime/AnimeExtensionManager.kt @@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.extension.anime import android.content.Context import android.graphics.drawable.Drawable import eu.kanade.domain.source.service.SourcePreferences -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.extension.ExtensionUpdateNotifier import eu.kanade.tachiyomi.extension.InstallStep import eu.kanade.tachiyomi.extension.anime.api.AnimeExtensionGithubApi @@ -12,18 +11,19 @@ import eu.kanade.tachiyomi.extension.anime.model.AnimeLoadResult import eu.kanade.tachiyomi.extension.anime.util.AnimeExtensionInstallReceiver import eu.kanade.tachiyomi.extension.anime.util.AnimeExtensionInstaller import eu.kanade.tachiyomi.extension.anime.util.AnimeExtensionLoader -import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.async import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.emptyFlow import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.preference.plusAssign import tachiyomi.core.util.lang.launchNow import tachiyomi.core.util.lang.withUIContext import tachiyomi.core.util.system.logcat import tachiyomi.domain.source.anime.model.StubAnimeSource +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.util.Locale @@ -129,7 +129,7 @@ class AnimeExtensionManager( api.findExtensions() } catch (e: Exception) { logcat(LogPriority.ERROR, e) - withUIContext { context.toast(R.string.extension_api_error) } + withUIContext { context.stringResource(MR.strings.extension_api_error) } emptyList() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/anime/installer/ShizukuInstallerAnime.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/anime/installer/ShizukuInstallerAnime.kt index d175a2f9da..9757edb840 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/anime/installer/ShizukuInstallerAnime.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/anime/installer/ShizukuInstallerAnime.kt @@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.extension.anime.installer import android.app.Service import android.content.pm.PackageManager import android.os.Build -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.extension.InstallStep import eu.kanade.tachiyomi.util.system.getUriSize import eu.kanade.tachiyomi.util.system.toast @@ -15,6 +14,7 @@ import kotlinx.coroutines.launch import logcat.LogPriority import rikka.shizuku.Shizuku import tachiyomi.core.util.system.logcat +import tachiyomi.i18n.MR import java.io.BufferedReader import java.io.InputStream @@ -116,7 +116,7 @@ class ShizukuInstallerAnime(private val service: Service) : InstallerAnime(servi } } else { logcat(LogPriority.ERROR) { "Shizuku is not ready to use" } - service.toast(R.string.ext_installer_shizuku_stopped) + service.toast(MR.strings.ext_installer_shizuku_stopped) service.stopSelf() false } diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/anime/util/AnimeExtensionInstallService.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/anime/util/AnimeExtensionInstallService.kt index cb3108e24c..9a5420b435 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/anime/util/AnimeExtensionInstallService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/anime/util/AnimeExtensionInstallService.kt @@ -15,7 +15,9 @@ import eu.kanade.tachiyomi.extension.anime.util.AnimeExtensionInstaller.Companio import eu.kanade.tachiyomi.util.system.getSerializableExtraCompat import eu.kanade.tachiyomi.util.system.notificationBuilder import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.system.logcat +import tachiyomi.i18n.MR class AnimeExtensionInstallService : Service() { @@ -27,7 +29,7 @@ class AnimeExtensionInstallService : Service() { setAutoCancel(false) setOngoing(true) setShowWhen(false) - setContentTitle(getString(R.string.ext_install_service_notif)) + setContentTitle(stringResource(MR.strings.ext_install_service_notif)) setProgress(100, 100, true) }.build() startForeground(Notifications.ID_EXTENSION_INSTALLER, notification) diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/manga/MangaExtensionManager.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/manga/MangaExtensionManager.kt index 3f2468c14b..fb52535ff5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/manga/MangaExtensionManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/manga/MangaExtensionManager.kt @@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.extension.manga import android.content.Context import android.graphics.drawable.Drawable import eu.kanade.domain.source.service.SourcePreferences -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.extension.ExtensionUpdateNotifier import eu.kanade.tachiyomi.extension.InstallStep import eu.kanade.tachiyomi.extension.manga.api.MangaExtensionGithubApi @@ -12,18 +11,19 @@ import eu.kanade.tachiyomi.extension.manga.model.MangaLoadResult import eu.kanade.tachiyomi.extension.manga.util.MangaExtensionInstallReceiver import eu.kanade.tachiyomi.extension.manga.util.MangaExtensionInstaller import eu.kanade.tachiyomi.extension.manga.util.MangaExtensionLoader -import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.async import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.emptyFlow import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.preference.plusAssign import tachiyomi.core.util.lang.launchNow import tachiyomi.core.util.lang.withUIContext import tachiyomi.core.util.system.logcat import tachiyomi.domain.source.manga.model.StubMangaSource +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.util.Locale @@ -121,7 +121,7 @@ class MangaExtensionManager( api.findExtensions() } catch (e: Exception) { logcat(LogPriority.ERROR, e) - withUIContext { context.toast(R.string.extension_api_error) } + withUIContext { context.stringResource(MR.strings.extension_api_error) } emptyList() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/manga/installer/ShizukuInstallerManga.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/manga/installer/ShizukuInstallerManga.kt index de292ba947..2ff83a0746 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/manga/installer/ShizukuInstallerManga.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/manga/installer/ShizukuInstallerManga.kt @@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.extension.manga.installer import android.app.Service import android.content.pm.PackageManager import android.os.Build -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.extension.InstallStep import eu.kanade.tachiyomi.util.system.getUriSize import eu.kanade.tachiyomi.util.system.toast @@ -15,6 +14,7 @@ import kotlinx.coroutines.launch import logcat.LogPriority import rikka.shizuku.Shizuku import tachiyomi.core.util.system.logcat +import tachiyomi.i18n.MR import java.io.BufferedReader import java.io.InputStream @@ -116,7 +116,7 @@ class ShizukuInstallerManga(private val service: Service) : InstallerManga(servi } } else { logcat(LogPriority.ERROR) { "Shizuku is not ready to use" } - service.toast(R.string.ext_installer_shizuku_stopped) + service.toast(MR.strings.ext_installer_shizuku_stopped) service.stopSelf() false } diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionInstallService.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionInstallService.kt index a3a536ea75..72a4f554ad 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionInstallService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionInstallService.kt @@ -15,7 +15,9 @@ import eu.kanade.tachiyomi.extension.manga.util.MangaExtensionInstaller.Companio import eu.kanade.tachiyomi.util.system.getSerializableExtraCompat import eu.kanade.tachiyomi.util.system.notificationBuilder import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.system.logcat +import tachiyomi.i18n.MR class MangaExtensionInstallService : Service() { @@ -27,7 +29,7 @@ class MangaExtensionInstallService : Service() { setAutoCancel(false) setOngoing(true) setShowWhen(false) - setContentTitle(getString(R.string.ext_install_service_notif)) + setContentTitle(stringResource(MR.strings.ext_install_service_notif)) setProgress(100, 100, true) }.build() startForeground(Notifications.ID_EXTENSION_INSTALLER, notification) diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionLoader.kt index 1c7b59509b..fc01e06a61 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/manga/util/MangaExtensionLoader.kt @@ -7,7 +7,6 @@ import android.content.pm.PackageInfo import android.content.pm.PackageManager import android.os.Build import androidx.core.content.pm.PackageInfoCompat -import androidx.core.content.pm.PackageInfoCompat.getSignatures import dalvik.system.PathClassLoader import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.tachiyomi.extension.manga.model.MangaExtension diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/BrowseTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/BrowseTab.kt index 5b3037c012..d91d1c7ec1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/BrowseTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/BrowseTab.kt @@ -8,7 +8,6 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.tab.LocalTabNavigator @@ -28,6 +27,8 @@ import eu.kanade.tachiyomi.ui.browse.manga.migration.sources.migrateMangaSourceT import eu.kanade.tachiyomi.ui.browse.manga.source.mangaSourcesTab import eu.kanade.tachiyomi.ui.main.MainActivity import kotlinx.collections.immutable.persistentListOf +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource data class BrowseTab( private val toExtensions: Boolean = false, @@ -40,7 +41,7 @@ data class BrowseTab( val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_browse_enter) return TabOptions( index = 3u, - title = stringResource(R.string.browse), + title = stringResource(MR.strings.browse), icon = rememberAnimatedVectorPainter(image, isSelected), ) } @@ -62,7 +63,7 @@ data class BrowseTab( val animeExtensionsState by animeExtensionsScreenModel.state.collectAsState() TabbedScreen( - titleRes = R.string.browse, + titleRes = MR.strings.browse, tabs = persistentListOf( animeSourcesTab(), mangaSourcesTab(), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/extension/AnimeExtensionFilterScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/extension/AnimeExtensionFilterScreen.kt index 06180285f8..51297bdfc6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/extension/AnimeExtensionFilterScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/extension/AnimeExtensionFilterScreen.kt @@ -10,9 +10,9 @@ import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.anime.AnimeExtensionFilterScreen import eu.kanade.presentation.util.Screen -import eu.kanade.tachiyomi.R -import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.flow.collectLatest +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR import tachiyomi.presentation.core.screens.LoadingScreen class AnimeExtensionFilterScreen : Screen() { @@ -41,7 +41,7 @@ class AnimeExtensionFilterScreen : Screen() { screenModel.events.collectLatest { when (it) { AnimeExtensionFilterEvent.FailedFetchingLanguages -> { - context.toast(R.string.internal_error) + context.stringResource(MR.strings.internal_error) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/extension/AnimeExtensionsScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/extension/AnimeExtensionsScreenModel.kt index 41b902f75c..f17656f39f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/extension/AnimeExtensionsScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/extension/AnimeExtensionsScreenModel.kt @@ -1,14 +1,13 @@ package eu.kanade.tachiyomi.ui.browse.anime.extension import android.app.Application -import androidx.annotation.StringRes import androidx.compose.runtime.Immutable import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope +import dev.icerock.moko.resources.StringResource import eu.kanade.domain.extension.anime.interactor.GetAnimeExtensionsByType import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.presentation.components.SEARCH_DEBOUNCE_MILLIS -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource import eu.kanade.tachiyomi.extension.InstallStep import eu.kanade.tachiyomi.extension.anime.AnimeExtensionManager @@ -28,6 +27,7 @@ import kotlinx.coroutines.flow.onCompletion import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.update import tachiyomi.core.util.lang.launchIO +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import kotlin.time.Duration.Companion.seconds @@ -98,7 +98,7 @@ class AnimeExtensionsScreenModel( extensionMapper(downloads), ) if (updates.isNotEmpty()) { - itemsGroups[AnimeExtensionUiModel.Header.Resource(R.string.ext_updates_pending)] = updates + itemsGroups[AnimeExtensionUiModel.Header.Resource(MR.strings.ext_updates_pending)] = updates } val installed = _installed.filter(queryFilter(searchQuery)).map( @@ -108,7 +108,7 @@ class AnimeExtensionsScreenModel( extensionMapper(downloads), ) if (installed.isNotEmpty() || untrusted.isNotEmpty()) { - itemsGroups[AnimeExtensionUiModel.Header.Resource(R.string.ext_installed)] = installed + untrusted + itemsGroups[AnimeExtensionUiModel.Header.Resource(MR.strings.ext_installed)] = installed + untrusted } val languagesWithExtensions = _available @@ -225,7 +225,7 @@ typealias ItemGroups = MutableMap 0 }, searchEnabled = true, actions = persistentListOf( AppBar.Action( - title = stringResource(R.string.action_filter), + title = stringResource(MR.strings.action_filter), icon = Icons.Outlined.Translate, onClick = { navigator.push( diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/AnimeMigrationFlags.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/AnimeMigrationFlags.kt index be4ed9744a..6b92e6a587 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/AnimeMigrationFlags.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/AnimeMigrationFlags.kt @@ -1,20 +1,20 @@ package eu.kanade.tachiyomi.ui.browse.anime.migration +import dev.icerock.moko.resources.StringResource import eu.kanade.domain.entries.anime.model.hasCustomCover -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.cache.AnimeCoverCache import eu.kanade.tachiyomi.data.download.anime.AnimeDownloadCache import tachiyomi.domain.entries.anime.model.Anime -import uy.kohesive.injekt.api.get +import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy data class AnimeMigrationFlag( val flag: Int, val isDefaultSelected: Boolean, - val titleId: Int, + val titleId: StringResource, ) { companion object { - fun create(flag: Int, defaultSelectionMap: Int, titleId: Int): AnimeMigrationFlag { + fun create(flag: Int, defaultSelectionMap: Int, titleId: StringResource): AnimeMigrationFlag { return AnimeMigrationFlag( flag = flag, isDefaultSelected = defaultSelectionMap and flag != 0, @@ -53,22 +53,22 @@ object AnimeMigrationFlags { /** Returns information about applicable flags with default selections. */ fun getFlags(anime: Anime?, defaultSelectedBitMap: Int): List { val flags = mutableListOf() - flags += AnimeMigrationFlag.create(EPISODES, defaultSelectedBitMap, R.string.chapters) - flags += AnimeMigrationFlag.create(CATEGORIES, defaultSelectedBitMap, R.string.categories) + flags += AnimeMigrationFlag.create(EPISODES, defaultSelectedBitMap, MR.strings.chapters) + flags += AnimeMigrationFlag.create(CATEGORIES, defaultSelectedBitMap, MR.strings.categories) if (anime != null) { if (anime.hasCustomCover(coverCache)) { flags += AnimeMigrationFlag.create( CUSTOM_COVER, defaultSelectedBitMap, - R.string.custom_cover, + MR.strings.custom_cover, ) } if (downloadCache.getDownloadCount(anime) > 0) { flags += AnimeMigrationFlag.create( DELETE_DOWNLOADED, defaultSelectedBitMap, - R.string.delete_downloaded, + MR.strings.delete_downloaded, ) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/anime/MigrateAnimeScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/anime/MigrateAnimeScreen.kt index c61a5b2b71..a677b13359 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/anime/MigrateAnimeScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/anime/MigrateAnimeScreen.kt @@ -10,11 +10,11 @@ import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.anime.MigrateAnimeScreen import eu.kanade.presentation.util.Screen -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.browse.anime.migration.search.MigrateAnimeSearchScreen import eu.kanade.tachiyomi.ui.entries.anime.AnimeScreen -import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.flow.collectLatest +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR import tachiyomi.presentation.core.screens.LoadingScreen data class MigrateAnimeScreen( @@ -46,7 +46,7 @@ data class MigrateAnimeScreen( screenModel.events.collectLatest { event -> when (event) { MigrationAnimeEvent.FailedFetchingFavorites -> { - context.toast(R.string.internal_error) + context.stringResource(MR.strings.internal_error) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/search/AnimeSourceSearchScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/search/AnimeSourceSearchScreen.kt index 3a1dbcb319..6104720d31 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/search/AnimeSourceSearchScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/search/AnimeSourceSearchScreen.kt @@ -14,7 +14,6 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.stringResource import androidx.paging.compose.collectAsLazyPagingItems import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator @@ -22,7 +21,6 @@ import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.anime.BrowseAnimeSourceContent import eu.kanade.presentation.components.SearchToolbar import eu.kanade.presentation.util.Screen -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource import eu.kanade.tachiyomi.core.Constants import eu.kanade.tachiyomi.ui.browse.anime.source.browse.BrowseAnimeSourceScreenModel @@ -32,8 +30,10 @@ import eu.kanade.tachiyomi.ui.home.HomeScreen import eu.kanade.tachiyomi.ui.webview.WebViewScreen import kotlinx.coroutines.launch import tachiyomi.domain.entries.anime.model.Anime +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.source.local.entries.anime.LocalAnimeSource data class AnimeSourceSearchScreen( @@ -66,7 +66,7 @@ data class AnimeSourceSearchScreen( floatingActionButton = { AnimatedVisibility(visible = state.filters.isNotEmpty()) { ExtendedFloatingActionButton( - text = { Text(text = stringResource(R.string.action_filter)) }, + text = { Text(text = stringResource(MR.strings.action_filter)) }, icon = { Icon(Icons.Outlined.FilterList, contentDescription = "") }, onClick = screenModel::openFilterSheet, ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/search/MigrateAnimeDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/search/MigrateAnimeDialog.kt index 8022ea0782..f2379e0e22 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/search/MigrateAnimeDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/search/MigrateAnimeDialog.kt @@ -19,14 +19,12 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.toMutableStateList import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import cafe.adriel.voyager.core.model.StateScreenModel import eu.kanade.domain.entries.anime.interactor.UpdateAnime import eu.kanade.domain.entries.anime.model.hasCustomCover import eu.kanade.domain.entries.anime.model.toSAnime import eu.kanade.domain.items.episode.interactor.SyncEpisodesWithSource -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.animesource.AnimeSource import eu.kanade.tachiyomi.animesource.model.SEpisode import eu.kanade.tachiyomi.data.cache.AnimeCoverCache @@ -49,7 +47,9 @@ import tachiyomi.domain.items.episode.model.toEpisodeUpdate import tachiyomi.domain.source.anime.service.AnimeSourceManager import tachiyomi.domain.track.anime.interactor.GetAnimeTracks import tachiyomi.domain.track.anime.interactor.InsertAnimeTrack +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.LoadingScreen import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -79,7 +79,7 @@ internal fun MigrateAnimeDialog( AlertDialog( onDismissRequest = onDismissRequest, title = { - Text(text = stringResource(R.string.migration_dialog_what_to_include)) + Text(text = stringResource(MR.strings.migration_dialog_what_to_include)) }, text = { Column( @@ -104,7 +104,7 @@ internal fun MigrateAnimeDialog( onClickTitle() }, ) { - Text(text = stringResource(R.string.action_show_anime)) + Text(text = stringResource(MR.strings.action_show_anime)) } Spacer(modifier = Modifier.weight(1f)) @@ -122,7 +122,7 @@ internal fun MigrateAnimeDialog( } }, ) { - Text(text = stringResource(R.string.copy)) + Text(text = stringResource(MR.strings.copy)) } TextButton( onClick = { @@ -138,7 +138,7 @@ internal fun MigrateAnimeDialog( } }, ) { - Text(text = stringResource(R.string.migrate)) + Text(text = stringResource(MR.strings.migrate)) } } }, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/sources/MigrateAnimeSourceTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/sources/MigrateAnimeSourceTab.kt index e47449e56a..a865cf82c5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/sources/MigrateAnimeSourceTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/sources/MigrateAnimeSourceTab.kt @@ -2,12 +2,10 @@ package eu.kanade.tachiyomi.ui.browse.anime.migration.sources import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.HelpOutline -import androidx.compose.material.icons.outlined.HelpOutline import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.stringResource import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.LocalNavigator @@ -15,9 +13,10 @@ import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.anime.MigrateAnimeSourceScreen import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.TabContent -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.browse.anime.migration.anime.MigrateAnimeScreen import kotlinx.collections.immutable.persistentListOf +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource @Composable fun Screen.migrateAnimeSourceTab(): TabContent { @@ -27,10 +26,10 @@ fun Screen.migrateAnimeSourceTab(): TabContent { val state by screenModel.state.collectAsState() return TabContent( - titleRes = R.string.label_migration_anime, + titleRes = MR.strings.label_migration_anime, actions = persistentListOf( AppBar.Action( - title = stringResource(R.string.migration_help_guide), + title = stringResource(MR.strings.migration_help_guide), icon = Icons.AutoMirrored.Outlined.HelpOutline, onClick = { uriHandler.openUri("https://aniyomi.org/help/guides/source-migration/") diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/AnimeSourcesFilterScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/AnimeSourcesFilterScreen.kt index 66b8b6261d..cfc02d496c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/AnimeSourcesFilterScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/AnimeSourcesFilterScreen.kt @@ -10,8 +10,8 @@ import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.anime.AnimeSourcesFilterScreen import eu.kanade.presentation.util.Screen -import eu.kanade.tachiyomi.R -import eu.kanade.tachiyomi.util.system.toast +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR import tachiyomi.presentation.core.screens.LoadingScreen class AnimeSourcesFilterScreen : Screen() { @@ -30,7 +30,7 @@ class AnimeSourcesFilterScreen : Screen() { if (state is AnimeSourcesFilterScreenModel.State.Error) { val context = LocalContext.current LaunchedEffect(Unit) { - context.toast(R.string.internal_error) + context.stringResource(MR.strings.internal_error) navigator.pop() } return diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/AnimeSourcesTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/AnimeSourcesTab.kt index 3ef680a1e0..713e738a94 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/AnimeSourcesTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/AnimeSourcesTab.kt @@ -7,7 +7,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue -import androidx.compose.ui.res.stringResource import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.LocalNavigator @@ -16,12 +15,13 @@ import eu.kanade.presentation.browse.anime.AnimeSourceOptionsDialog import eu.kanade.presentation.browse.anime.AnimeSourcesScreen import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.TabContent -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.browse.anime.source.browse.BrowseAnimeSourceScreen import eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch.GlobalAnimeSearchScreen import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource @Composable fun Screen.animeSourcesTab(): TabContent { @@ -30,15 +30,15 @@ fun Screen.animeSourcesTab(): TabContent { val state by screenModel.state.collectAsState() return TabContent( - titleRes = R.string.label_anime_sources, + titleRes = MR.strings.label_anime_sources, actions = persistentListOf( AppBar.Action( - title = stringResource(R.string.action_global_search), + title = stringResource(MR.strings.action_global_search), icon = Icons.Outlined.TravelExplore, onClick = { navigator.push(GlobalAnimeSearchScreen()) }, ), AppBar.Action( - title = stringResource(R.string.action_filter), + title = stringResource(MR.strings.action_filter), icon = Icons.Outlined.FilterList, onClick = { navigator.push(AnimeSourcesFilterScreen()) }, ), @@ -70,7 +70,7 @@ fun Screen.animeSourcesTab(): TabContent { ) } - val internalErrString = stringResource(R.string.internal_error) + val internalErrString = stringResource(MR.strings.internal_error) LaunchedEffect(Unit) { screenModel.events.collectLatest { event -> when (event) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/browse/BrowseAnimeSourceScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/browse/BrowseAnimeSourceScreen.kt index e76d428b1f..89e8b72747 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/browse/BrowseAnimeSourceScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/browse/BrowseAnimeSourceScreen.kt @@ -31,7 +31,6 @@ import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.stringResource import androidx.paging.compose.collectAsLazyPagingItems import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator @@ -44,7 +43,6 @@ import eu.kanade.presentation.category.ChangeCategoryDialog import eu.kanade.presentation.entries.anime.DuplicateAnimeDialog import eu.kanade.presentation.util.AssistContentScreen import eu.kanade.presentation.util.Screen -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.animesource.AnimeCatalogueSource import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource import eu.kanade.tachiyomi.core.Constants @@ -58,8 +56,10 @@ import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.receiveAsFlow import tachiyomi.core.util.lang.launchIO import tachiyomi.domain.source.anime.model.StubAnimeSource +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.source.local.entries.anime.LocalAnimeSource data class BrowseAnimeSourceScreen( @@ -152,7 +152,7 @@ data class BrowseAnimeSourceScreen( ) }, label = { - Text(text = stringResource(R.string.popular)) + Text(text = stringResource(MR.strings.popular)) }, ) if ((screenModel.source as AnimeCatalogueSource).supportsLatest) { @@ -171,7 +171,7 @@ data class BrowseAnimeSourceScreen( ) }, label = { - Text(text = stringResource(R.string.latest)) + Text(text = stringResource(MR.strings.latest)) }, ) } @@ -188,7 +188,7 @@ data class BrowseAnimeSourceScreen( ) }, label = { - Text(text = stringResource(R.string.action_filter)) + Text(text = stringResource(MR.strings.action_filter)) }, ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/browse/SourceFilterAnimeDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/browse/SourceFilterAnimeDialog.kt index be9224e46a..0a9c46a6a0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/browse/SourceFilterAnimeDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/browse/SourceFilterAnimeDialog.kt @@ -15,13 +15,12 @@ import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import eu.kanade.presentation.components.AdaptiveSheet -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.animesource.model.AnimeFilter import eu.kanade.tachiyomi.animesource.model.AnimeFilterList import tachiyomi.core.preference.TriState +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.CheckboxItem import tachiyomi.presentation.core.components.CollapsibleBox import tachiyomi.presentation.core.components.HeadingItem @@ -29,6 +28,7 @@ import tachiyomi.presentation.core.components.SelectItem import tachiyomi.presentation.core.components.SortItem import tachiyomi.presentation.core.components.TextItem import tachiyomi.presentation.core.components.TriStateItem +import tachiyomi.presentation.core.i18n.stringResource @Composable fun SourceFilterAnimeDialog( @@ -52,7 +52,7 @@ fun SourceFilterAnimeDialog( ) { TextButton(onClick = onReset) { Text( - text = stringResource(R.string.action_reset), + text = stringResource(MR.strings.action_reset), style = LocalTextStyle.current.copy( color = MaterialTheme.colorScheme.primary, ), @@ -65,7 +65,7 @@ fun SourceFilterAnimeDialog( onFilter() onDismissRequest() }) { - Text(stringResource(R.string.action_filter)) + Text(stringResource(MR.strings.action_filter)) } } HorizontalDivider() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/globalsearch/GlobalAnimeSearchScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/globalsearch/GlobalAnimeSearchScreenModel.kt index 52194462c2..e62fc580e4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/globalsearch/GlobalAnimeSearchScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/source/globalsearch/GlobalAnimeSearchScreenModel.kt @@ -1,7 +1,6 @@ package eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch import eu.kanade.tachiyomi.animesource.AnimeCatalogueSource -import uy.kohesive.injekt.api.get class GlobalAnimeSearchScreenModel( initialQuery: String = "", diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/extension/MangaExtensionFilterScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/extension/MangaExtensionFilterScreen.kt index ef21c39c44..de5dfa6e2b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/extension/MangaExtensionFilterScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/extension/MangaExtensionFilterScreen.kt @@ -10,9 +10,9 @@ import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.manga.MangaExtensionFilterScreen import eu.kanade.presentation.util.Screen -import eu.kanade.tachiyomi.R -import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.flow.collectLatest +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR import tachiyomi.presentation.core.screens.LoadingScreen class MangaExtensionFilterScreen : Screen() { @@ -41,7 +41,7 @@ class MangaExtensionFilterScreen : Screen() { screenModel.events.collectLatest { when (it) { MangaExtensionFilterEvent.FailedFetchingLanguages -> { - context.toast(R.string.internal_error) + context.stringResource(MR.strings.internal_error) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/extension/MangaExtensionsScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/extension/MangaExtensionsScreenModel.kt index 43fe291e25..bf3eeed0df 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/extension/MangaExtensionsScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/extension/MangaExtensionsScreenModel.kt @@ -1,14 +1,13 @@ package eu.kanade.tachiyomi.ui.browse.manga.extension import android.app.Application -import androidx.annotation.StringRes import androidx.compose.runtime.Immutable import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope +import dev.icerock.moko.resources.StringResource import eu.kanade.domain.extension.manga.interactor.GetMangaExtensionsByType import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.presentation.components.SEARCH_DEBOUNCE_MILLIS -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.extension.InstallStep import eu.kanade.tachiyomi.extension.manga.MangaExtensionManager import eu.kanade.tachiyomi.extension.manga.model.MangaExtension @@ -28,6 +27,7 @@ import kotlinx.coroutines.flow.onCompletion import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.update import tachiyomi.core.util.lang.launchIO +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import kotlin.time.Duration.Companion.seconds @@ -98,7 +98,7 @@ class MangaExtensionsScreenModel( extensionMapper(downloads), ) if (updates.isNotEmpty()) { - itemsGroups[MangaExtensionUiModel.Header.Resource(R.string.ext_updates_pending)] = updates + itemsGroups[MangaExtensionUiModel.Header.Resource(MR.strings.ext_updates_pending)] = updates } val installed = _installed.filter(queryFilter(searchQuery)).map( @@ -108,7 +108,7 @@ class MangaExtensionsScreenModel( extensionMapper(downloads), ) if (installed.isNotEmpty() || untrusted.isNotEmpty()) { - itemsGroups[MangaExtensionUiModel.Header.Resource(R.string.ext_installed)] = installed + untrusted + itemsGroups[MangaExtensionUiModel.Header.Resource(MR.strings.ext_installed)] = installed + untrusted } val languagesWithExtensions = _available @@ -227,7 +227,7 @@ typealias ItemGroups = MutableMap 0 }, searchEnabled = true, actions = persistentListOf( AppBar.Action( - title = stringResource(R.string.action_filter), + title = stringResource(MR.strings.action_filter), icon = Icons.Outlined.Translate, onClick = { navigator.push(MangaExtensionFilterScreen()) }, ), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/MangaMigrationFlags.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/MangaMigrationFlags.kt index d0fcbe798b..e950e1e3e3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/MangaMigrationFlags.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/MangaMigrationFlags.kt @@ -1,20 +1,20 @@ package eu.kanade.tachiyomi.ui.browse.manga.migration +import dev.icerock.moko.resources.StringResource import eu.kanade.domain.entries.manga.model.hasCustomCover -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.cache.MangaCoverCache import eu.kanade.tachiyomi.data.download.manga.MangaDownloadCache import tachiyomi.domain.entries.manga.model.Manga -import uy.kohesive.injekt.api.get +import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy data class MangaMigrationFlag( val flag: Int, val isDefaultSelected: Boolean, - val titleId: Int, + val titleId: StringResource, ) { companion object { - fun create(flag: Int, defaultSelectionMap: Int, titleId: Int): MangaMigrationFlag { + fun create(flag: Int, defaultSelectionMap: Int, titleId: StringResource): MangaMigrationFlag { return MangaMigrationFlag( flag = flag, isDefaultSelected = defaultSelectionMap and flag != 0, @@ -53,22 +53,22 @@ object MangaMigrationFlags { /** Returns information about applicable flags with default selections. */ fun getFlags(manga: Manga?, defaultSelectedBitMap: Int): List { val flags = mutableListOf() - flags += MangaMigrationFlag.create(CHAPTERS, defaultSelectedBitMap, R.string.chapters) - flags += MangaMigrationFlag.create(CATEGORIES, defaultSelectedBitMap, R.string.categories) + flags += MangaMigrationFlag.create(CHAPTERS, defaultSelectedBitMap, MR.strings.chapters) + flags += MangaMigrationFlag.create(CATEGORIES, defaultSelectedBitMap, MR.strings.categories) if (manga != null) { if (manga.hasCustomCover(coverCache)) { flags += MangaMigrationFlag.create( CUSTOM_COVER, defaultSelectedBitMap, - R.string.custom_cover, + MR.strings.custom_cover, ) } if (downloadCache.getDownloadCount(manga) > 0) { flags += MangaMigrationFlag.create( DELETE_DOWNLOADED, defaultSelectedBitMap, - R.string.delete_downloaded, + MR.strings.delete_downloaded, ) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/manga/MigrateMangaScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/manga/MigrateMangaScreen.kt index 10a5995cde..5e1d663a01 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/manga/MigrateMangaScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/manga/MigrateMangaScreen.kt @@ -10,11 +10,11 @@ import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.manga.MigrateMangaScreen import eu.kanade.presentation.util.Screen -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.browse.manga.migration.search.MigrateMangaSearchScreen import eu.kanade.tachiyomi.ui.entries.manga.MangaScreen -import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.flow.collectLatest +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR import tachiyomi.presentation.core.screens.LoadingScreen data class MigrateMangaScreen( @@ -46,7 +46,7 @@ data class MigrateMangaScreen( screenModel.events.collectLatest { event -> when (event) { MigrationMangaEvent.FailedFetchingFavorites -> { - context.toast(R.string.internal_error) + context.stringResource(MR.strings.internal_error) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/search/MangaSourceSearchScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/search/MangaSourceSearchScreen.kt index 7254b1da4d..241a4108bf 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/search/MangaSourceSearchScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/search/MangaSourceSearchScreen.kt @@ -14,7 +14,6 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.stringResource import androidx.paging.compose.collectAsLazyPagingItems import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator @@ -22,7 +21,6 @@ import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.manga.BrowseSourceContent import eu.kanade.presentation.components.SearchToolbar import eu.kanade.presentation.util.Screen -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.core.Constants import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.ui.browse.manga.source.browse.BrowseMangaSourceScreenModel @@ -32,8 +30,10 @@ import eu.kanade.tachiyomi.ui.home.HomeScreen import eu.kanade.tachiyomi.ui.webview.WebViewScreen import kotlinx.coroutines.launch import tachiyomi.domain.entries.manga.model.Manga +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.source.local.entries.manga.LocalMangaSource data class MangaSourceSearchScreen( @@ -66,7 +66,7 @@ data class MangaSourceSearchScreen( floatingActionButton = { AnimatedVisibility(visible = state.filters.isNotEmpty()) { ExtendedFloatingActionButton( - text = { Text(text = stringResource(R.string.action_filter)) }, + text = { Text(text = stringResource(MR.strings.action_filter)) }, icon = { Icon(Icons.Outlined.FilterList, contentDescription = "") }, onClick = screenModel::openFilterSheet, ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/search/MigrateMangaDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/search/MigrateMangaDialog.kt index 9c3234e1d4..184096a71d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/search/MigrateMangaDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/search/MigrateMangaDialog.kt @@ -19,14 +19,12 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.toMutableStateList import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import cafe.adriel.voyager.core.model.StateScreenModel import eu.kanade.domain.entries.manga.interactor.UpdateManga import eu.kanade.domain.entries.manga.model.hasCustomCover import eu.kanade.domain.entries.manga.model.toSManga import eu.kanade.domain.items.chapter.interactor.SyncChaptersWithSource -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.cache.MangaCoverCache import eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager import eu.kanade.tachiyomi.data.track.EnhancedMangaTracker @@ -49,7 +47,9 @@ import tachiyomi.domain.items.chapter.model.toChapterUpdate import tachiyomi.domain.source.manga.service.MangaSourceManager import tachiyomi.domain.track.manga.interactor.GetMangaTracks import tachiyomi.domain.track.manga.interactor.InsertMangaTrack +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.LoadingScreen import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -79,7 +79,7 @@ internal fun MigrateMangaDialog( AlertDialog( onDismissRequest = onDismissRequest, title = { - Text(text = stringResource(R.string.migration_dialog_what_to_include)) + Text(text = stringResource(MR.strings.migration_dialog_what_to_include)) }, text = { Column( @@ -104,7 +104,7 @@ internal fun MigrateMangaDialog( onClickTitle() }, ) { - Text(text = stringResource(R.string.action_show_manga)) + Text(text = stringResource(MR.strings.action_show_manga)) } Spacer(modifier = Modifier.weight(1f)) @@ -122,7 +122,7 @@ internal fun MigrateMangaDialog( } }, ) { - Text(text = stringResource(R.string.copy)) + Text(text = stringResource(MR.strings.copy)) } TextButton( onClick = { @@ -138,7 +138,7 @@ internal fun MigrateMangaDialog( } }, ) { - Text(text = stringResource(R.string.migrate)) + Text(text = stringResource(MR.strings.migrate)) } } }, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/sources/MigrateMangaSourceTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/sources/MigrateMangaSourceTab.kt index 0d68c5b8f9..0900611edb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/sources/MigrateMangaSourceTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/sources/MigrateMangaSourceTab.kt @@ -2,12 +2,10 @@ package eu.kanade.tachiyomi.ui.browse.manga.migration.sources import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.HelpOutline -import androidx.compose.material.icons.outlined.HelpOutline import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.stringResource import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.LocalNavigator @@ -15,9 +13,10 @@ import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.manga.MigrateMangaSourceScreen import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.TabContent -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.browse.manga.migration.manga.MigrateMangaScreen import kotlinx.collections.immutable.persistentListOf +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource @Composable fun Screen.migrateMangaSourceTab(): TabContent { @@ -27,10 +26,10 @@ fun Screen.migrateMangaSourceTab(): TabContent { val state by screenModel.state.collectAsState() return TabContent( - titleRes = R.string.label_migration, + titleRes = MR.strings.label_migration, actions = persistentListOf( AppBar.Action( - title = stringResource(R.string.migration_help_guide), + title = stringResource(MR.strings.migration_help_guide), icon = Icons.AutoMirrored.Outlined.HelpOutline, onClick = { uriHandler.openUri("https://aniyomi.org/help/guides/source-migration/") diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/MangaSourcesFilterScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/MangaSourcesFilterScreen.kt index 0c35a7ae86..4ac04a5a52 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/MangaSourcesFilterScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/MangaSourcesFilterScreen.kt @@ -10,8 +10,8 @@ import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.manga.MangaSourcesFilterScreen import eu.kanade.presentation.util.Screen -import eu.kanade.tachiyomi.R -import eu.kanade.tachiyomi.util.system.toast +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR import tachiyomi.presentation.core.screens.LoadingScreen class MangaSourcesFilterScreen : Screen() { @@ -30,7 +30,7 @@ class MangaSourcesFilterScreen : Screen() { if (state is MangaSourcesFilterScreenModel.State.Error) { val context = LocalContext.current LaunchedEffect(Unit) { - context.toast(R.string.internal_error) + context.stringResource(MR.strings.internal_error) navigator.pop() } return diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/MangaSourcesTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/MangaSourcesTab.kt index 2ae21ddf42..3669ee8d9b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/MangaSourcesTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/MangaSourcesTab.kt @@ -7,7 +7,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue -import androidx.compose.ui.res.stringResource import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.LocalNavigator @@ -16,12 +15,13 @@ import eu.kanade.presentation.browse.manga.MangaSourceOptionsDialog import eu.kanade.presentation.browse.manga.MangaSourcesScreen import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.TabContent -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.browse.manga.source.browse.BrowseMangaSourceScreen import eu.kanade.tachiyomi.ui.browse.manga.source.globalsearch.GlobalMangaSearchScreen import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource @Composable fun Screen.mangaSourcesTab(): TabContent { @@ -30,15 +30,15 @@ fun Screen.mangaSourcesTab(): TabContent { val state by screenModel.state.collectAsState() return TabContent( - titleRes = R.string.label_manga_sources, + titleRes = MR.strings.label_manga_sources, actions = persistentListOf( AppBar.Action( - title = stringResource(R.string.action_global_search), + title = stringResource(MR.strings.action_global_search), icon = Icons.Outlined.TravelExplore, onClick = { navigator.push(GlobalMangaSearchScreen()) }, ), AppBar.Action( - title = stringResource(R.string.action_filter), + title = stringResource(MR.strings.action_filter), icon = Icons.Outlined.FilterList, onClick = { navigator.push(MangaSourcesFilterScreen()) }, ), @@ -74,7 +74,7 @@ fun Screen.mangaSourcesTab(): TabContent { ) } - val internalErrString = stringResource(R.string.internal_error) + val internalErrString = stringResource(MR.strings.internal_error) LaunchedEffect(Unit) { screenModel.events.collectLatest { event -> when (event) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/browse/BrowseMangaSourceScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/browse/BrowseMangaSourceScreen.kt index d96aee45e6..33c5edb424 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/browse/BrowseMangaSourceScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/browse/BrowseMangaSourceScreen.kt @@ -31,7 +31,6 @@ import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.stringResource import androidx.paging.compose.collectAsLazyPagingItems import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator @@ -44,7 +43,6 @@ import eu.kanade.presentation.category.ChangeCategoryDialog import eu.kanade.presentation.entries.manga.DuplicateMangaDialog import eu.kanade.presentation.util.AssistContentScreen import eu.kanade.presentation.util.Screen -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.core.Constants import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.online.HttpSource @@ -58,8 +56,10 @@ import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.receiveAsFlow import tachiyomi.core.util.lang.launchIO import tachiyomi.domain.source.manga.model.StubMangaSource +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.source.local.entries.manga.LocalMangaSource data class BrowseMangaSourceScreen( @@ -152,7 +152,7 @@ data class BrowseMangaSourceScreen( ) }, label = { - Text(text = stringResource(R.string.popular)) + Text(text = stringResource(MR.strings.popular)) }, ) if ((screenModel.source as CatalogueSource).supportsLatest) { @@ -171,7 +171,7 @@ data class BrowseMangaSourceScreen( ) }, label = { - Text(text = stringResource(R.string.latest)) + Text(text = stringResource(MR.strings.latest)) }, ) } @@ -188,7 +188,7 @@ data class BrowseMangaSourceScreen( ) }, label = { - Text(text = stringResource(R.string.action_filter)) + Text(text = stringResource(MR.strings.action_filter)) }, ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/browse/SourceFilterMangaDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/browse/SourceFilterMangaDialog.kt index 191f8c8444..2e4e0d0e13 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/browse/SourceFilterMangaDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/browse/SourceFilterMangaDialog.kt @@ -14,13 +14,12 @@ import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import eu.kanade.presentation.components.AdaptiveSheet -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList import tachiyomi.core.preference.TriState +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.CheckboxItem import tachiyomi.presentation.core.components.CollapsibleBox import tachiyomi.presentation.core.components.HeadingItem @@ -29,6 +28,7 @@ import tachiyomi.presentation.core.components.SortItem import tachiyomi.presentation.core.components.TextItem import tachiyomi.presentation.core.components.TriStateItem import tachiyomi.presentation.core.components.material.Button +import tachiyomi.presentation.core.i18n.stringResource @Composable fun SourceFilterMangaDialog( @@ -52,7 +52,7 @@ fun SourceFilterMangaDialog( ) { TextButton(onClick = onReset) { Text( - text = stringResource(R.string.action_reset), + text = stringResource(MR.strings.action_reset), style = LocalTextStyle.current.copy( color = MaterialTheme.colorScheme.primary, ), @@ -65,7 +65,7 @@ fun SourceFilterMangaDialog( onFilter() onDismissRequest() }) { - Text(stringResource(R.string.action_filter)) + Text(stringResource(MR.strings.action_filter)) } } HorizontalDivider() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/globalsearch/GlobalMangaSearchScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/globalsearch/GlobalMangaSearchScreenModel.kt index 5a6489ddd9..299f142c93 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/globalsearch/GlobalMangaSearchScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/source/globalsearch/GlobalMangaSearchScreenModel.kt @@ -1,7 +1,6 @@ package eu.kanade.tachiyomi.ui.browse.manga.source.globalsearch import eu.kanade.tachiyomi.source.CatalogueSource -import uy.kohesive.injekt.api.get class GlobalMangaSearchScreenModel( initialQuery: String = "", diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoriesTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoriesTab.kt index fe845bc164..f41d660a0b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoriesTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoriesTab.kt @@ -6,7 +6,6 @@ import androidx.compose.animation.graphics.vector.AnimatedImageVector import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.tab.LocalTabNavigator import cafe.adriel.voyager.navigator.tab.TabOptions @@ -23,6 +22,8 @@ import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.util.system.toast import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.flow.collectLatest +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource data class CategoriesTab( private val isManga: Boolean = false, @@ -35,7 +36,7 @@ data class CategoriesTab( val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_updates_enter) return TabOptions( index = 7u, - title = stringResource(R.string.general_categories), + title = stringResource(MR.strings.general_categories), icon = rememberAnimatedVectorPainter(image, isSelected), ) } @@ -48,7 +49,7 @@ data class CategoriesTab( val mangaCategoryScreenModel = rememberScreenModel { MangaCategoryScreenModel() } TabbedScreen( - titleRes = R.string.general_categories, + titleRes = MR.strings.general_categories, tabs = persistentListOf( animeCategoryTab(), mangaCategoryTab(), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/anime/AnimeCategoryScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/category/anime/AnimeCategoryScreenModel.kt index 28760ae4eb..bfaedae342 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/anime/AnimeCategoryScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/category/anime/AnimeCategoryScreenModel.kt @@ -1,10 +1,9 @@ package eu.kanade.tachiyomi.ui.category.anime -import androidx.annotation.StringRes import androidx.compose.runtime.Immutable import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope -import eu.kanade.tachiyomi.R +import dev.icerock.moko.resources.StringResource import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.channels.Channel @@ -21,6 +20,7 @@ import tachiyomi.domain.category.anime.interactor.RenameAnimeCategory import tachiyomi.domain.category.anime.interactor.ReorderAnimeCategory import tachiyomi.domain.category.model.Category import tachiyomi.domain.library.service.LibraryPreferences +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -161,8 +161,8 @@ sealed interface AnimeCategoryDialog { } sealed interface AnimeCategoryEvent { - sealed class LocalizedMessage(@StringRes val stringRes: Int) : AnimeCategoryEvent - data object InternalError : LocalizedMessage(R.string.internal_error) + sealed class LocalizedMessage(val stringRes: StringResource) : AnimeCategoryEvent + data object InternalError : LocalizedMessage(MR.strings.internal_error) } sealed interface AnimeCategoryScreenState { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/anime/AnimeCategoryTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/category/anime/AnimeCategoryTab.kt index 45b94fabe3..80c0e5835b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/anime/AnimeCategoryTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/category/anime/AnimeCategoryTab.kt @@ -5,7 +5,6 @@ import androidx.compose.material.icons.outlined.SortByAlpha import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue -import androidx.compose.ui.res.stringResource import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.LocalNavigator @@ -17,8 +16,9 @@ import eu.kanade.presentation.category.components.CategoryRenameDialog import eu.kanade.presentation.category.components.CategorySortAlphabeticallyDialog import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.TabContent -import eu.kanade.tachiyomi.R import kotlinx.collections.immutable.persistentListOf +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.LoadingScreen @Composable @@ -29,12 +29,12 @@ fun Screen.animeCategoryTab(): TabContent { val state by screenModel.state.collectAsState() return TabContent( - titleRes = R.string.label_anime, + titleRes = MR.strings.label_anime, searchEnabled = false, actions = persistentListOf( AppBar.Action( - title = stringResource(R.string.action_sort), + title = stringResource(MR.strings.action_sort), icon = Icons.Outlined.SortByAlpha, onClick = { screenModel.showDialog(AnimeCategoryDialog.SortAlphabetically) }, ), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/manga/MangaCategoryScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/category/manga/MangaCategoryScreenModel.kt index 32929e8337..e38eb55cba 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/manga/MangaCategoryScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/category/manga/MangaCategoryScreenModel.kt @@ -1,10 +1,9 @@ package eu.kanade.tachiyomi.ui.category.manga -import androidx.annotation.StringRes import androidx.compose.runtime.Immutable import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope -import eu.kanade.tachiyomi.R +import dev.icerock.moko.resources.StringResource import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.channels.Channel @@ -21,6 +20,7 @@ import tachiyomi.domain.category.manga.interactor.RenameMangaCategory import tachiyomi.domain.category.manga.interactor.ReorderMangaCategory import tachiyomi.domain.category.model.Category import tachiyomi.domain.library.service.LibraryPreferences +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -161,8 +161,8 @@ sealed interface MangaCategoryDialog { } sealed interface MangaCategoryEvent { - sealed class LocalizedMessage(@StringRes val stringRes: Int) : MangaCategoryEvent - data object InternalError : LocalizedMessage(R.string.internal_error) + sealed class LocalizedMessage(val stringRes: StringResource) : MangaCategoryEvent + data object InternalError : LocalizedMessage(MR.strings.internal_error) } sealed interface MangaCategoryScreenState { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/manga/MangaCategoryTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/category/manga/MangaCategoryTab.kt index 0c527a8ecf..18da1f0340 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/manga/MangaCategoryTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/category/manga/MangaCategoryTab.kt @@ -5,7 +5,6 @@ import androidx.compose.material.icons.outlined.SortByAlpha import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue -import androidx.compose.ui.res.stringResource import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.LocalNavigator @@ -17,8 +16,9 @@ import eu.kanade.presentation.category.components.CategoryRenameDialog import eu.kanade.presentation.category.components.CategorySortAlphabeticallyDialog import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.TabContent -import eu.kanade.tachiyomi.R import kotlinx.collections.immutable.persistentListOf +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.LoadingScreen @Composable @@ -29,11 +29,11 @@ fun Screen.mangaCategoryTab(): TabContent { val state by screenModel.state.collectAsState() return TabContent( - titleRes = R.string.label_manga, + titleRes = MR.strings.label_manga, searchEnabled = false, actions = persistentListOf( AppBar.Action( - title = stringResource(R.string.action_sort), + title = stringResource(MR.strings.action_sort), icon = Icons.Outlined.SortByAlpha, onClick = { screenModel.showDialog(MangaCategoryDialog.SortAlphabetically) }, ), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/anime/DeepLinkAnimeScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/anime/DeepLinkAnimeScreen.kt index a3f868156b..d63fa4533e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/anime/DeepLinkAnimeScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/anime/DeepLinkAnimeScreen.kt @@ -6,17 +6,17 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource 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.R import eu.kanade.tachiyomi.ui.browse.anime.source.globalsearch.GlobalAnimeSearchScreen import eu.kanade.tachiyomi.ui.entries.anime.AnimeScreen import eu.kanade.tachiyomi.ui.player.PlayerActivity +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.LoadingScreen class DeepLinkAnimeScreen( @@ -35,7 +35,7 @@ class DeepLinkAnimeScreen( Scaffold( topBar = { scrollBehavior -> AppBar( - title = stringResource(R.string.action_search_hint), + title = stringResource(MR.strings.action_search_hint), navigateUp = navigator::pop, scrollBehavior = scrollBehavior, ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/manga/DeepLinkMangaScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/manga/DeepLinkMangaScreen.kt index 9288530f78..a93cb51e62 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/manga/DeepLinkMangaScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/deeplink/manga/DeepLinkMangaScreen.kt @@ -6,18 +6,17 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource -import androidx.core.content.ContextCompat.startActivity 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.R import eu.kanade.tachiyomi.ui.browse.manga.source.globalsearch.GlobalMangaSearchScreen import eu.kanade.tachiyomi.ui.entries.manga.MangaScreen import eu.kanade.tachiyomi.ui.reader.ReaderActivity +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.LoadingScreen class DeepLinkMangaScreen( @@ -36,7 +35,7 @@ class DeepLinkMangaScreen( Scaffold( topBar = { scrollBehavior -> AppBar( - title = stringResource(R.string.action_search_hint), + title = stringResource(MR.strings.action_search_hint), navigateUp = navigator::pop, scrollBehavior = scrollBehavior, ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadsTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadsTab.kt index 4e174a3e30..72d8af92d6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadsTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadsTab.kt @@ -6,7 +6,6 @@ import androidx.compose.animation.graphics.vector.AnimatedImageVector import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import cafe.adriel.voyager.navigator.tab.LocalTabNavigator import cafe.adriel.voyager.navigator.tab.TabOptions import eu.kanade.presentation.components.TabbedScreen @@ -17,6 +16,8 @@ import eu.kanade.tachiyomi.ui.download.anime.animeDownloadTab import eu.kanade.tachiyomi.ui.download.manga.mangaDownloadTab import eu.kanade.tachiyomi.ui.main.MainActivity import kotlinx.collections.immutable.persistentListOf +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource data class DownloadsTab( private val isManga: Boolean = false, @@ -29,7 +30,7 @@ data class DownloadsTab( val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_history_enter) return TabOptions( index = 6u, - title = stringResource(R.string.label_download_queue), + title = stringResource(MR.strings.label_download_queue), icon = rememberAnimatedVectorPainter(image, isSelected), ) } @@ -39,7 +40,7 @@ data class DownloadsTab( val context = LocalContext.current TabbedScreen( - titleRes = R.string.label_download_queue, + titleRes = MR.strings.label_download_queue, tabs = persistentListOf( animeDownloadTab(), mangaDownloadTab(), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/download/anime/AnimeDownloadHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/download/anime/AnimeDownloadHolder.kt index 40e7715950..2594309943 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/download/anime/AnimeDownloadHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/download/anime/AnimeDownloadHolder.kt @@ -7,6 +7,8 @@ import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.anime.model.AnimeDownload import eu.kanade.tachiyomi.databinding.DownloadItemBinding import eu.kanade.tachiyomi.util.view.popupMenu +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR /** * Class used to hold the data of a download. @@ -73,9 +75,9 @@ class AnimeDownloadHolder(private val view: View, val adapter: AnimeDownloadAdap */ fun notifyDownloadedPages() { binding.downloadProgressText.text = if (download.totalProgress == 0) { - view.context.getString(R.string.update_check_notification_download_in_progress) + view.context.stringResource(MR.strings.update_check_notification_download_in_progress) } else { - view.context.getString(R.string.episode_download_progress, download.progress) + view.context.stringResource(MR.strings.episode_download_progress, download.progress) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/download/anime/AnimeDownloadQueueScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/download/anime/AnimeDownloadQueueScreen.kt index dd36548faf..b755c058e2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/download/anime/AnimeDownloadQueueScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/download/anime/AnimeDownloadQueueScreen.kt @@ -28,18 +28,18 @@ import androidx.compose.ui.input.nestedscroll.NestedScrollSource import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalLayoutDirection -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.Velocity import androidx.compose.ui.viewinterop.AndroidView import androidx.core.view.ViewCompat import androidx.core.view.updatePadding import androidx.recyclerview.widget.LinearLayoutManager -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.databinding.DownloadListBinding import kotlinx.coroutines.CoroutineScope import tachiyomi.core.util.lang.launchUI +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import kotlin.math.roundToInt @@ -93,9 +93,9 @@ fun AnimeDownloadQueueScreen( ExtendedFloatingActionButton( text = { val id = if (isRunning) { - R.string.action_pause + MR.strings.action_pause } else { - R.string.action_resume + MR.strings.action_resume } Text(text = stringResource(id)) }, @@ -121,7 +121,7 @@ fun AnimeDownloadQueueScreen( ) { if (downloadList.isEmpty()) { EmptyScreen( - textResource = R.string.information_no_downloads, + stringRes = MR.strings.information_no_downloads, modifier = Modifier.padding(contentPadding), ) return@Scaffold diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/download/anime/AnimeDownloadQueueTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/download/anime/AnimeDownloadQueueTab.kt index 8deaf0fd33..b861e66459 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/download/anime/AnimeDownloadQueueTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/download/anime/AnimeDownloadQueueTab.kt @@ -11,7 +11,7 @@ import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.components.TabContent -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR @Composable fun Screen.animeDownloadTab(): TabContent { @@ -24,7 +24,7 @@ fun Screen.animeDownloadTab(): TabContent { } return TabContent( - titleRes = R.string.label_anime, + titleRes = MR.strings.label_anime, searchEnabled = false, content = { contentPadding, _ -> AnimeDownloadQueueScreen( diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/download/manga/MangaDownloadQueueScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/download/manga/MangaDownloadQueueScreen.kt index a6ccf453c5..92e132bdb0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/download/manga/MangaDownloadQueueScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/download/manga/MangaDownloadQueueScreen.kt @@ -28,18 +28,18 @@ import androidx.compose.ui.input.nestedscroll.NestedScrollSource import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalLayoutDirection -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.Velocity import androidx.compose.ui.viewinterop.AndroidView import androidx.core.view.ViewCompat import androidx.core.view.updatePadding import androidx.recyclerview.widget.LinearLayoutManager -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.databinding.DownloadListBinding import kotlinx.coroutines.CoroutineScope import tachiyomi.core.util.lang.launchUI +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import kotlin.math.roundToInt @@ -93,9 +93,9 @@ fun DownloadQueueScreen( ExtendedFloatingActionButton( text = { val id = if (isRunning) { - R.string.action_pause + MR.strings.action_pause } else { - R.string.action_resume + MR.strings.action_resume } Text(text = stringResource(id)) }, @@ -121,7 +121,7 @@ fun DownloadQueueScreen( ) { if (downloadList.isEmpty()) { EmptyScreen( - textResource = R.string.information_no_downloads, + stringRes = MR.strings.information_no_downloads, modifier = Modifier.padding(contentPadding), ) return@Scaffold diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/download/manga/MangaDownloadQueueTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/download/manga/MangaDownloadQueueTab.kt index 77e80de97e..dd67df67ee 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/download/manga/MangaDownloadQueueTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/download/manga/MangaDownloadQueueTab.kt @@ -11,7 +11,7 @@ import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.components.TabContent -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR @Composable fun Screen.mangaDownloadTab(): TabContent { @@ -24,7 +24,7 @@ fun Screen.mangaDownloadTab(): TabContent { } return TabContent( - titleRes = R.string.label_manga, + titleRes = MR.strings.label_manga, searchEnabled = false, content = { contentPadding, _ -> DownloadQueueScreen( diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/AnimeCoverScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/AnimeCoverScreenModel.kt index 80457c28f7..cd852f4af7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/AnimeCoverScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/AnimeCoverScreenModel.kt @@ -9,7 +9,6 @@ import coil.imageLoader import coil.request.ImageRequest import coil.size.Size import eu.kanade.domain.entries.anime.interactor.UpdateAnime -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.cache.AnimeCoverCache import eu.kanade.tachiyomi.data.saver.Image import eu.kanade.tachiyomi.data.saver.ImageSaver @@ -20,12 +19,14 @@ import eu.kanade.tachiyomi.util.system.toShareIntent import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchIO import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.lang.withUIContext import tachiyomi.core.util.system.logcat import tachiyomi.domain.entries.anime.interactor.GetAnime import tachiyomi.domain.entries.anime.model.Anime +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -51,13 +52,13 @@ class AnimeCoverScreenModel( try { saveCoverInternal(context, temp = false) snackbarHostState.showSnackbar( - context.getString(R.string.cover_saved), + context.stringResource(MR.strings.cover_saved), withDismissAction = true, ) } catch (e: Throwable) { logcat(LogPriority.ERROR, e) snackbarHostState.showSnackbar( - context.getString(R.string.error_saving_cover), + context.stringResource(MR.strings.error_saving_cover), withDismissAction = true, ) } @@ -74,7 +75,7 @@ class AnimeCoverScreenModel( } catch (e: Throwable) { logcat(LogPriority.ERROR, e) snackbarHostState.showSnackbar( - context.getString(R.string.error_sharing_cover), + context.stringResource(MR.strings.error_sharing_cover), withDismissAction = true, ) } @@ -145,7 +146,7 @@ class AnimeCoverScreenModel( private fun notifyCoverUpdated(context: Context) { screenModelScope.launch { snackbarHostState.showSnackbar( - context.getString(R.string.cover_updated), + context.stringResource(MR.strings.cover_updated), withDismissAction = true, ) } @@ -154,7 +155,7 @@ class AnimeCoverScreenModel( private fun notifyFailedCoverUpdate(context: Context, e: Throwable) { screenModelScope.launch { snackbarHostState.showSnackbar( - context.getString(R.string.notification_cover_update_failed), + context.stringResource(MR.strings.notification_cover_update_failed), withDismissAction = true, ) logcat(LogPriority.ERROR, e) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/AnimeScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/AnimeScreen.kt index 5e27a94974..48786480ce 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/AnimeScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/AnimeScreen.kt @@ -15,7 +15,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalHapticFeedback -import androidx.compose.ui.res.stringResource import androidx.core.net.toUri import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator @@ -37,7 +36,6 @@ import eu.kanade.presentation.util.AssistContentScreen import eu.kanade.presentation.util.Screen import eu.kanade.presentation.util.formatEpisodeNumber import eu.kanade.presentation.util.isTabletUi -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.animesource.AnimeSource import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource import eu.kanade.tachiyomi.source.anime.isLocalOrStub @@ -56,11 +54,14 @@ import eu.kanade.tachiyomi.util.system.toShareIntent import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.launch import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchIO import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.system.logcat import tachiyomi.domain.entries.anime.model.Anime import tachiyomi.domain.items.episode.model.Episode +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.LoadingScreen class AnimeScreen( @@ -285,7 +286,7 @@ class AnimeScreen( EpisodeOptionsDialogScreen.onDismissDialog = onDismissRequest val episodeTitle = if (dialog.anime.displayMode == Anime.EPISODE_DISPLAY_NUMBER) { stringResource( - R.string.display_mode_episode, + MR.strings.display_mode_episode, formatEpisodeNumber(dialog.episode.episodeNumber), ) } else { @@ -354,7 +355,7 @@ class AnimeScreen( context.startActivity( Intent.createChooser( intent, - context.getString(R.string.action_share), + context.stringResource(MR.strings.action_share), ), ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/AnimeScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/AnimeScreenModel.kt index 6a1289fcc7..f2bfd728d3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/AnimeScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/AnimeScreenModel.kt @@ -23,7 +23,6 @@ import eu.kanade.domain.ui.UiPreferences import eu.kanade.presentation.entries.DownloadAction import eu.kanade.presentation.entries.anime.components.EpisodeDownloadAction import eu.kanade.presentation.util.formattedMessage -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.animesource.AnimeSource import eu.kanade.tachiyomi.animesource.model.Video import eu.kanade.tachiyomi.data.download.anime.AnimeDownloadCache @@ -51,6 +50,7 @@ import kotlinx.coroutines.flow.update import kotlinx.coroutines.isActive import kotlinx.coroutines.launch import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.preference.CheckboxState import tachiyomi.core.preference.TriState import tachiyomi.core.preference.mapAsCheckboxState @@ -79,6 +79,7 @@ import tachiyomi.domain.items.service.calculateEpisodeGap import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.source.anime.service.AnimeSourceManager import tachiyomi.domain.track.anime.interactor.GetAnimeTracks +import tachiyomi.i18n.MR import tachiyomi.source.local.entries.anime.isLocal import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -265,8 +266,8 @@ class AnimeScreenModel( screenModelScope.launch { if (!hasDownloads()) return@launch val result = snackbarHostState.showSnackbar( - message = context.getString(R.string.delete_downloads_for_anime), - actionLabel = context.getString(R.string.action_delete), + message = context.stringResource(MR.strings.delete_downloads_for_anime), + actionLabel = context.stringResource(MR.strings.action_delete), withDismissAction = true, ) if (result == SnackbarResult.ActionPerformed) { @@ -548,7 +549,7 @@ class AnimeScreenModel( } } catch (e: Throwable) { val message = if (e is NoEpisodesException) { - context.getString(R.string.no_episodes_error) + context.stringResource(MR.strings.no_episodes_error) } else { logcat(LogPriority.ERROR, e) with(context) { e.formattedMessage } @@ -646,8 +647,8 @@ class AnimeScreenModel( } screenModelScope.launch { val result = snackbarHostState.showSnackbar( - message = context.getString(R.string.snack_add_to_anime_library), - actionLabel = context.getString(R.string.action_add), + message = context.stringResource(MR.strings.snack_add_to_anime_library), + actionLabel = context.stringResource(MR.strings.action_add), withDismissAction = true, ) if (result == SnackbarResult.ActionPerformed && !isFavorited) { @@ -878,7 +879,7 @@ class AnimeScreenModel( setAnimeDefaultEpisodeFlags.awaitAll() } snackbarHostState.showSnackbar( - message = context.getString(R.string.episode_settings_updated), + message = context.stringResource(MR.strings.episode_settings_updated), ) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/track/AnimeTrackInfoDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/track/AnimeTrackInfoDialog.kt index 239e5e5cc7..8da17a28fd 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/track/AnimeTrackInfoDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/entries/anime/track/AnimeTrackInfoDialog.kt @@ -28,7 +28,6 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp @@ -39,6 +38,7 @@ import cafe.adriel.voyager.core.model.screenModelScope import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.currentOrThrow +import dev.icerock.moko.resources.StringResource import eu.kanade.domain.track.anime.interactor.RefreshAnimeTracks import eu.kanade.domain.track.anime.model.toDbTrack import eu.kanade.domain.ui.UiPreferences @@ -49,7 +49,6 @@ import eu.kanade.presentation.track.TrackStatusSelector import eu.kanade.presentation.track.anime.AnimeTrackInfoDialogHome import eu.kanade.presentation.track.anime.AnimeTrackerSearch import eu.kanade.presentation.util.Screen -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.track.AnimeTracker import eu.kanade.tachiyomi.data.track.DeletableAnimeTracker import eu.kanade.tachiyomi.data.track.EnhancedAnimeTracker @@ -67,6 +66,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchNonCancellable import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.lang.withUIContext @@ -76,9 +76,11 @@ import tachiyomi.domain.source.anime.service.AnimeSourceManager import tachiyomi.domain.track.anime.interactor.DeleteAnimeTrack import tachiyomi.domain.track.anime.interactor.GetAnimeTracks import tachiyomi.domain.track.anime.model.AnimeTrack +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox import tachiyomi.presentation.core.components.material.AlertDialogContent import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.Instant @@ -221,7 +223,7 @@ data class AnimeTrackInfoDialogHomeScreen( val matchResult = item.tracker.match(anime) ?: throw Exception() item.tracker.animeService.register(matchResult, animeId) } catch (e: Exception) { - withUIContext { Injekt.get().toast(R.string.error_no_match) } + withUIContext { Injekt.get().toast(MR.strings.error_no_match) } } } } @@ -238,10 +240,10 @@ data class AnimeTrackInfoDialogHomeScreen( } withUIContext { context.toast( - context.getString( - R.string.track_error, + context.stringResource( + MR.strings.track_error, track!!.name, - e.message, + e.message ?: "", ), ) } @@ -299,7 +301,7 @@ private data class TrackStatusSelectorScreen( private val tracker: Tracker, ) : StateScreenModel(State(track.status.toInt())) { - fun getSelections(): Map { + fun getSelections(): Map { return tracker.animeService.getStatusListAnime().associateWith { tracker.getStatus(it) } } @@ -517,9 +519,9 @@ private data class TrackDateSelectorScreen( } TrackDateSelector( title = if (start) { - stringResource(R.string.track_started_reading_date) + stringResource(MR.strings.track_started_reading_date) } else { - stringResource(R.string.track_finished_reading_date) + stringResource(MR.strings.track_finished_reading_date) }, initialSelectedDateMillis = screenModel.initialSelection, selectableDates = selectableDates, @@ -594,7 +596,7 @@ private data class TrackDateRemoverScreen( }, title = { Text( - text = stringResource(R.string.track_remove_date_conf_title), + text = stringResource(MR.strings.track_remove_date_conf_title), textAlign = TextAlign.Center, ) }, @@ -602,9 +604,9 @@ private data class TrackDateRemoverScreen( val serviceName = screenModel.getName() Text( text = if (start) { - stringResource(R.string.track_remove_start_date_conf_text, serviceName) + stringResource(MR.strings.track_remove_start_date_conf_text, serviceName) } else { - stringResource(R.string.track_remove_finish_date_conf_text, serviceName) + stringResource(MR.strings.track_remove_finish_date_conf_text, serviceName) }, ) }, @@ -617,7 +619,7 @@ private data class TrackDateRemoverScreen( ), ) { TextButton(onClick = navigator::pop) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } FilledTonalButton( onClick = { @@ -629,7 +631,7 @@ private data class TrackDateRemoverScreen( contentColor = MaterialTheme.colorScheme.onErrorContainer, ), ) { - Text(text = stringResource(R.string.action_remove)) + Text(text = stringResource(MR.strings.action_remove)) } } }, @@ -773,7 +775,7 @@ private data class TrackerAnimeRemoveScreen( }, title = { Text( - text = stringResource(R.string.track_delete_title, serviceName), + text = stringResource(MR.strings.track_delete_title, serviceName), textAlign = TextAlign.Center, ) }, @@ -782,11 +784,11 @@ private data class TrackerAnimeRemoveScreen( verticalArrangement = Arrangement.spacedBy(8.dp), ) { Text( - text = stringResource(R.string.track_delete_text, serviceName), + text = stringResource(MR.strings.track_delete_text, serviceName), ) if (screenModel.isDeletable()) { LabeledCheckbox( - label = stringResource(R.string.track_delete_remote_text, serviceName), + label = stringResource(MR.strings.track_delete_remote_text, serviceName), checked = removeRemoteTrack, onCheckedChange = { removeRemoteTrack = it }, ) @@ -802,7 +804,7 @@ private data class TrackerAnimeRemoveScreen( ), ) { TextButton(onClick = navigator::pop) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } FilledTonalButton( onClick = { @@ -815,7 +817,7 @@ private data class TrackerAnimeRemoveScreen( contentColor = MaterialTheme.colorScheme.onErrorContainer, ), ) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } } }, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/entries/manga/MangaCoverScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/entries/manga/MangaCoverScreenModel.kt index 086adaf943..6c1b82a53e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/entries/manga/MangaCoverScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/entries/manga/MangaCoverScreenModel.kt @@ -9,7 +9,6 @@ import coil.imageLoader import coil.request.ImageRequest import coil.size.Size import eu.kanade.domain.entries.manga.interactor.UpdateManga -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.cache.MangaCoverCache import eu.kanade.tachiyomi.data.saver.Image import eu.kanade.tachiyomi.data.saver.ImageSaver @@ -20,12 +19,14 @@ import eu.kanade.tachiyomi.util.system.toShareIntent import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchIO import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.lang.withUIContext import tachiyomi.core.util.system.logcat import tachiyomi.domain.entries.manga.interactor.GetManga import tachiyomi.domain.entries.manga.model.Manga +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -51,13 +52,13 @@ class MangaCoverScreenModel( try { saveCoverInternal(context, temp = false) snackbarHostState.showSnackbar( - context.getString(R.string.cover_saved), + context.stringResource(MR.strings.cover_saved), withDismissAction = true, ) } catch (e: Throwable) { logcat(LogPriority.ERROR, e) snackbarHostState.showSnackbar( - context.getString(R.string.error_saving_cover), + context.stringResource(MR.strings.error_saving_cover), withDismissAction = true, ) } @@ -74,7 +75,7 @@ class MangaCoverScreenModel( } catch (e: Throwable) { logcat(LogPriority.ERROR, e) snackbarHostState.showSnackbar( - context.getString(R.string.error_sharing_cover), + context.stringResource(MR.strings.error_sharing_cover), withDismissAction = true, ) } @@ -145,7 +146,7 @@ class MangaCoverScreenModel( private fun notifyCoverUpdated(context: Context) { screenModelScope.launch { snackbarHostState.showSnackbar( - context.getString(R.string.cover_updated), + context.stringResource(MR.strings.cover_updated), withDismissAction = true, ) } @@ -154,7 +155,7 @@ class MangaCoverScreenModel( private fun notifyFailedCoverUpdate(context: Context, e: Throwable) { screenModelScope.launch { snackbarHostState.showSnackbar( - context.getString(R.string.notification_cover_update_failed), + context.stringResource(MR.strings.notification_cover_update_failed), withDismissAction = true, ) logcat(LogPriority.ERROR, e) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/entries/manga/MangaScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/entries/manga/MangaScreen.kt index 6ba1b96489..1f7a945ab1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/entries/manga/MangaScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/entries/manga/MangaScreen.kt @@ -37,7 +37,6 @@ import eu.kanade.presentation.entries.manga.components.ScanlatorFilterDialog import eu.kanade.presentation.util.AssistContentScreen import eu.kanade.presentation.util.Screen import eu.kanade.presentation.util.isTabletUi -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.source.MangaSource import eu.kanade.tachiyomi.source.manga.isLocalOrStub import eu.kanade.tachiyomi.source.online.HttpSource @@ -55,10 +54,12 @@ import eu.kanade.tachiyomi.util.system.toShareIntent import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.launch import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.system.logcat import tachiyomi.domain.entries.manga.model.Manga import tachiyomi.domain.items.chapter.model.Chapter +import tachiyomi.i18n.MR import tachiyomi.presentation.core.screens.LoadingScreen class MangaScreen( @@ -301,7 +302,7 @@ class MangaScreen( context.startActivity( Intent.createChooser( intent, - context.getString(R.string.action_share), + context.stringResource(MR.strings.action_share), ), ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/entries/manga/MangaScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/entries/manga/MangaScreenModel.kt index 13908e490c..e7260a7fdc 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/entries/manga/MangaScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/entries/manga/MangaScreenModel.kt @@ -27,7 +27,6 @@ import eu.kanade.domain.ui.UiPreferences import eu.kanade.presentation.entries.DownloadAction import eu.kanade.presentation.entries.manga.components.ChapterDownloadAction import eu.kanade.presentation.util.formattedMessage -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.manga.MangaDownloadCache import eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager import eu.kanade.tachiyomi.data.download.manga.model.MangaDownload @@ -53,6 +52,7 @@ import kotlinx.coroutines.flow.update import kotlinx.coroutines.isActive import kotlinx.coroutines.launch import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.preference.CheckboxState import tachiyomi.core.preference.TriState import tachiyomi.core.preference.mapAsCheckboxState @@ -81,6 +81,7 @@ import tachiyomi.domain.items.service.calculateChapterGap import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.source.manga.service.MangaSourceManager import tachiyomi.domain.track.manga.interactor.GetMangaTracks +import tachiyomi.i18n.MR import tachiyomi.source.local.entries.manga.isLocal import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -290,8 +291,8 @@ class MangaScreenModel( screenModelScope.launch { if (!hasDownloads()) return@launch val result = snackbarHostState.showSnackbar( - message = context.getString(R.string.delete_downloads_for_manga), - actionLabel = context.getString(R.string.action_delete), + message = context.stringResource(MR.strings.delete_downloads_for_manga), + actionLabel = context.stringResource(MR.strings.action_delete), withDismissAction = true, ) if (result == SnackbarResult.ActionPerformed) { @@ -574,7 +575,7 @@ class MangaScreenModel( } } catch (e: Throwable) { val message = if (e is NoChaptersException) { - context.getString(R.string.no_chapters_error) + context.stringResource(MR.strings.no_chapters_error) } else { logcat(LogPriority.ERROR, e) with(context) { e.formattedMessage } @@ -670,8 +671,8 @@ class MangaScreenModel( } screenModelScope.launch { val result = snackbarHostState.showSnackbar( - message = context.getString(R.string.snack_add_to_manga_library), - actionLabel = context.getString(R.string.action_add), + message = context.stringResource(MR.strings.snack_add_to_manga_library), + actionLabel = context.stringResource(MR.strings.action_add), withDismissAction = true, ) if (result == SnackbarResult.ActionPerformed && !isFavorited) { @@ -894,7 +895,7 @@ class MangaScreenModel( setMangaDefaultChapterFlags.awaitAll() } snackbarHostState.showSnackbar( - message = context.getString(R.string.chapter_settings_updated), + message = context.stringResource(MR.strings.chapter_settings_updated), ) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/entries/manga/track/MangaTrackInfoDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/entries/manga/track/MangaTrackInfoDialog.kt index 6f2f99c1f3..361395276a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/entries/manga/track/MangaTrackInfoDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/entries/manga/track/MangaTrackInfoDialog.kt @@ -28,7 +28,6 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp @@ -39,6 +38,7 @@ import cafe.adriel.voyager.core.model.screenModelScope import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.currentOrThrow +import dev.icerock.moko.resources.StringResource import eu.kanade.domain.track.manga.interactor.RefreshMangaTracks import eu.kanade.domain.track.manga.model.toDbTrack import eu.kanade.domain.ui.UiPreferences @@ -49,7 +49,6 @@ import eu.kanade.presentation.track.TrackStatusSelector import eu.kanade.presentation.track.manga.MangaTrackInfoDialogHome import eu.kanade.presentation.track.manga.MangaTrackerSearch import eu.kanade.presentation.util.Screen -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.track.DeletableMangaTracker import eu.kanade.tachiyomi.data.track.EnhancedMangaTracker import eu.kanade.tachiyomi.data.track.MangaTracker @@ -67,6 +66,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchNonCancellable import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.lang.withUIContext @@ -76,9 +76,11 @@ import tachiyomi.domain.source.manga.service.MangaSourceManager import tachiyomi.domain.track.manga.interactor.DeleteMangaTrack import tachiyomi.domain.track.manga.interactor.GetMangaTracks import tachiyomi.domain.track.manga.model.MangaTrack +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.LabeledCheckbox import tachiyomi.presentation.core.components.material.AlertDialogContent import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.Instant @@ -221,7 +223,7 @@ data class MangaTrackInfoDialogHomeScreen( val matchResult = item.tracker.match(manga) ?: throw Exception() item.tracker.mangaService.register(matchResult, mangaId) } catch (e: Exception) { - withUIContext { Injekt.get().toast(R.string.error_no_match) } + withUIContext { Injekt.get().toast(MR.strings.error_no_match) } } } } @@ -238,10 +240,10 @@ data class MangaTrackInfoDialogHomeScreen( } withUIContext { context.toast( - context.getString( - R.string.track_error, + context.stringResource( + MR.strings.track_error, track!!.name, - e.message, + e.message ?: "", ), ) } @@ -299,7 +301,7 @@ private data class TrackStatusSelectorScreen( private val tracker: Tracker, ) : StateScreenModel(State(track.status.toInt())) { - fun getSelections(): Map { + fun getSelections(): Map { return tracker.mangaService.getStatusListManga().associateWith { tracker.getStatus(it) } } @@ -517,9 +519,9 @@ private data class TrackDateSelectorScreen( } TrackDateSelector( title = if (start) { - stringResource(R.string.track_started_reading_date) + stringResource(MR.strings.track_started_reading_date) } else { - stringResource(R.string.track_finished_reading_date) + stringResource(MR.strings.track_finished_reading_date) }, initialSelectedDateMillis = screenModel.initialSelection, selectableDates = selectableDates, @@ -594,7 +596,7 @@ private data class TrackDateRemoverScreen( }, title = { Text( - text = stringResource(R.string.track_remove_date_conf_title), + text = stringResource(MR.strings.track_remove_date_conf_title), textAlign = TextAlign.Center, ) }, @@ -602,9 +604,9 @@ private data class TrackDateRemoverScreen( val serviceName = screenModel.getName() Text( text = if (start) { - stringResource(R.string.track_remove_start_date_conf_text, serviceName) + stringResource(MR.strings.track_remove_start_date_conf_text, serviceName) } else { - stringResource(R.string.track_remove_finish_date_conf_text, serviceName) + stringResource(MR.strings.track_remove_finish_date_conf_text, serviceName) }, ) }, @@ -617,7 +619,7 @@ private data class TrackDateRemoverScreen( ), ) { TextButton(onClick = navigator::pop) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } FilledTonalButton( onClick = { @@ -629,7 +631,7 @@ private data class TrackDateRemoverScreen( contentColor = MaterialTheme.colorScheme.onErrorContainer, ), ) { - Text(text = stringResource(R.string.action_remove)) + Text(text = stringResource(MR.strings.action_remove)) } } }, @@ -773,7 +775,7 @@ private data class TrackerMangaRemoveScreen( }, title = { Text( - text = stringResource(R.string.track_delete_title, serviceName), + text = stringResource(MR.strings.track_delete_title, serviceName), textAlign = TextAlign.Center, ) }, @@ -782,11 +784,11 @@ private data class TrackerMangaRemoveScreen( verticalArrangement = Arrangement.spacedBy(8.dp), ) { Text( - text = stringResource(R.string.track_delete_text, serviceName), + text = stringResource(MR.strings.track_delete_text, serviceName), ) if (screenModel.isDeletable()) { LabeledCheckbox( - label = stringResource(R.string.track_delete_remote_text, serviceName), + label = stringResource(MR.strings.track_delete_remote_text, serviceName), checked = removeRemoteTrack, onCheckedChange = { removeRemoteTrack = it }, ) @@ -802,7 +804,7 @@ private data class TrackerMangaRemoveScreen( ), ) { TextButton(onClick = navigator::pop) { - Text(text = stringResource(R.string.action_cancel)) + Text(text = stringResource(MR.strings.action_cancel)) } FilledTonalButton( onClick = { @@ -815,7 +817,7 @@ private data class TrackerMangaRemoveScreen( contentColor = MaterialTheme.colorScheme.onErrorContainer, ), ) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } } }, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/history/HistoriesTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/history/HistoriesTab.kt index e78808a6bb..ee913bb8c3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/history/HistoriesTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/history/HistoriesTab.kt @@ -8,7 +8,6 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.tab.LocalTabNavigator @@ -25,6 +24,8 @@ import eu.kanade.tachiyomi.ui.history.manga.MangaHistoryScreenModel import eu.kanade.tachiyomi.ui.history.manga.mangaHistoryTab import eu.kanade.tachiyomi.ui.main.MainActivity import kotlinx.collections.immutable.persistentListOf +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource data class HistoriesTab( private val fromMore: Boolean, @@ -39,7 +40,7 @@ data class HistoriesTab( val index: UShort = if (fromMore) 5u else 2u return TabOptions( index = index, - title = stringResource(R.string.history), + title = stringResource(MR.strings.history), icon = rememberAnimatedVectorPainter(image, isSelected), ) } @@ -59,7 +60,7 @@ data class HistoriesTab( val animeSearchQuery by animeHistoryScreenModel.query.collectAsState() TabbedScreen( - titleRes = R.string.label_recent_manga, + titleRes = MR.strings.label_recent_manga, tabs = persistentListOf( animeHistoryTab(context, fromMore, preferences), mangaHistoryTab(context, fromMore, preferences), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/history/anime/AnimeHistoryTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/history/anime/AnimeHistoryTab.kt index 509d1ba453..275a7377a8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/history/anime/AnimeHistoryTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/history/anime/AnimeHistoryTab.kt @@ -8,7 +8,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue -import androidx.compose.ui.res.stringResource import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.LocalNavigator @@ -19,7 +18,6 @@ import eu.kanade.presentation.components.TabContent import eu.kanade.presentation.history.HistoryDeleteAllDialog import eu.kanade.presentation.history.HistoryDeleteDialog import eu.kanade.presentation.history.anime.AnimeHistoryScreen -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.entries.anime.AnimeScreen import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences @@ -27,7 +25,10 @@ import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.receiveAsFlow +import tachiyomi.core.i18n.stringResource import tachiyomi.domain.items.episode.model.Episode +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import uy.kohesive.injekt.injectLazy val resumeLastEpisodeSeenEvent = Channel() @@ -51,14 +52,14 @@ fun Screen.animeHistoryTab( if (episode != null) { MainActivity.startPlayerActivity(context, episode.animeId, episode.id, extPlayer) } else { - snackbarHostState.showSnackbar(context.getString(R.string.no_next_episode)) + snackbarHostState.showSnackbar(context.stringResource(MR.strings.no_next_episode)) } } val navigateUp: (() -> Unit)? = if (fromMore) navigator::pop else null return TabContent( - titleRes = R.string.label_anime_history, + titleRes = MR.strings.label_anime_history, searchEnabled = true, content = { contentPadding, _ -> AnimeHistoryScreen( @@ -107,11 +108,11 @@ fun Screen.animeHistoryTab( when (e) { AnimeHistoryScreenModel.Event.InternalError -> snackbarHostState.showSnackbar( - context.getString(R.string.internal_error), + context.stringResource(MR.strings.internal_error), ) AnimeHistoryScreenModel.Event.HistoryCleared -> snackbarHostState.showSnackbar( - context.getString(R.string.clear_history_completed), + context.stringResource(MR.strings.clear_history_completed), ) is AnimeHistoryScreenModel.Event.OpenEpisode -> openEpisode( context, @@ -130,7 +131,7 @@ fun Screen.animeHistoryTab( actions = persistentListOf( AppBar.Action( - title = stringResource(R.string.pref_clear_history), + title = stringResource(MR.strings.pref_clear_history), icon = Icons.Outlined.DeleteSweep, onClick = { screenModel.setDialog(AnimeHistoryScreenModel.Dialog.DeleteAll) }, ), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/history/manga/MangaHistoryTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/history/manga/MangaHistoryTab.kt index 100c587fad..ffbdbceb7b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/history/manga/MangaHistoryTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/history/manga/MangaHistoryTab.kt @@ -8,7 +8,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue -import androidx.compose.ui.res.stringResource import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.LocalNavigator @@ -16,11 +15,9 @@ import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.domain.ui.UiPreferences import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.TabContent -import eu.kanade.presentation.components.preferences import eu.kanade.presentation.history.HistoryDeleteAllDialog import eu.kanade.presentation.history.HistoryDeleteDialog import eu.kanade.presentation.history.manga.MangaHistoryScreen -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.entries.manga.MangaScreen import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.reader.ReaderActivity @@ -28,7 +25,10 @@ import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.receiveAsFlow +import tachiyomi.core.i18n.stringResource import tachiyomi.domain.items.chapter.model.Chapter +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource val resumeLastChapterReadEvent = Channel() @@ -50,14 +50,14 @@ fun Screen.mangaHistoryTab( val intent = ReaderActivity.newIntent(context, chapter.mangaId, chapter.id) context.startActivity(intent) } else { - snackbarHostState.showSnackbar(context.getString(R.string.no_next_chapter)) + snackbarHostState.showSnackbar(context.stringResource(MR.strings.no_next_chapter)) } } val navigateUp: (() -> Unit)? = if (fromMore) navigator::pop else null return TabContent( - titleRes = R.string.label_history, + titleRes = MR.strings.label_history, searchEnabled = true, content = { contentPadding, _ -> MangaHistoryScreen( @@ -106,11 +106,11 @@ fun Screen.mangaHistoryTab( when (e) { MangaHistoryScreenModel.Event.InternalError -> snackbarHostState.showSnackbar( - context.getString(R.string.internal_error), + context.stringResource(MR.strings.internal_error), ) MangaHistoryScreenModel.Event.HistoryCleared -> snackbarHostState.showSnackbar( - context.getString(R.string.clear_history_completed), + context.stringResource(MR.strings.clear_history_completed), ) is MangaHistoryScreenModel.Event.OpenChapter -> openChapter( context, @@ -129,7 +129,7 @@ fun Screen.mangaHistoryTab( actions = persistentListOf( AppBar.Action( - title = stringResource(R.string.pref_clear_history), + title = stringResource(MR.strings.pref_clear_history), icon = Icons.Outlined.DeleteSweep, onClick = { screenModel.setDialog(MangaHistoryScreenModel.Dialog.DeleteAll) }, ), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/home/HomeScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/home/HomeScreen.kt index 4520f40275..1fa63f01a9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/home/HomeScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/home/HomeScreen.kt @@ -25,7 +25,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.produceState import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier -import androidx.compose.ui.res.pluralStringResource import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.style.TextOverflow @@ -38,7 +37,6 @@ import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.domain.ui.UiPreferences import eu.kanade.presentation.util.Screen import eu.kanade.presentation.util.isTabletUi -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.browse.BrowseTab import eu.kanade.tachiyomi.ui.download.DownloadsTab import eu.kanade.tachiyomi.ui.entries.anime.AnimeScreen @@ -56,9 +54,11 @@ import kotlinx.coroutines.launch import soup.compose.material.motion.animation.materialFadeThroughIn import soup.compose.material.motion.animation.materialFadeThroughOut import tachiyomi.domain.library.service.LibraryPreferences +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.NavigationBar import tachiyomi.presentation.core.components.material.NavigationRail import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.pluralStringResource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import uy.kohesive.injekt.injectLazy @@ -289,7 +289,7 @@ object HomeScreen : Screen() { if (count > 0) { Badge { val desc = pluralStringResource( - id = R.plurals.notification_chapters_generic, + MR.plurals.notification_chapters_generic, count = count, count, ) @@ -312,7 +312,7 @@ object HomeScreen : Screen() { if (count > 0) { Badge { val desc = pluralStringResource( - id = R.plurals.update_check_notification_ext_updates, + MR.plurals.update_check_notification_ext_updates, count = count, count, ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/anime/AnimeLibraryTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/anime/AnimeLibraryTab.kt index 45d00fe677..4176d7ac98 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/anime/AnimeLibraryTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/anime/AnimeLibraryTab.kt @@ -8,7 +8,6 @@ import androidx.compose.animation.graphics.vector.AnimatedImageVector import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.HelpOutline -import androidx.compose.material.icons.outlined.HelpOutline import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState @@ -23,7 +22,6 @@ import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.stringResource import androidx.compose.ui.util.fastAll import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator @@ -51,13 +49,16 @@ import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.launch +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchIO import tachiyomi.domain.category.model.Category import tachiyomi.domain.entries.anime.model.Anime import tachiyomi.domain.items.episode.model.Episode import tachiyomi.domain.library.anime.LibraryAnime import tachiyomi.domain.library.service.LibraryPreferences +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.EmptyScreenAction import tachiyomi.presentation.core.screens.LoadingScreen @@ -74,9 +75,9 @@ object AnimeLibraryTab : Tab() { @Composable get() { val title = if (fromMore) { - R.string.label_library + MR.strings.label_library } else { - R.string.label_anime_library + MR.strings.label_anime_library } val isSelected = LocalTabNavigator.current.current.key == key val image = AnimatedImageVector.animatedVectorResource( @@ -110,8 +111,8 @@ object AnimeLibraryTab : Tab() { val onClickRefresh: (Category?) -> Boolean = { category -> val started = AnimeLibraryUpdateJob.startNow(context, category) scope.launch { - val msgRes = if (started) R.string.updating_category else R.string.update_already_running - snackbarHostState.showSnackbar(context.getString(msgRes)) + val msgRes = if (started) MR.strings.updating_category else MR.strings.update_already_running + snackbarHostState.showSnackbar(context.stringResource(msgRes)) } started } @@ -123,10 +124,10 @@ object AnimeLibraryTab : Tab() { } val defaultTitle = if (fromMore) { - stringResource(R.string.label_library) + stringResource(MR.strings.label_library) } else { stringResource( - R.string.label_anime_library, + MR.strings.label_anime_library, ) } @@ -134,7 +135,7 @@ object AnimeLibraryTab : Tab() { topBar = { scrollBehavior -> val title = state.getToolbarTitle( defaultTitle = defaultTitle, - defaultCategoryTitle = stringResource(R.string.label_default), + defaultCategoryTitle = stringResource(MR.strings.label_default), page = screenModel.activeCategoryIndex, ) val tabVisible = state.showCategoryTabs && state.categories.size > 1 @@ -163,7 +164,7 @@ object AnimeLibraryTab : Tab() { navigator.push(AnimeScreen(randomItem.libraryAnime.anime.id)) } else { snackbarHostState.showSnackbar( - context.getString(R.string.information_no_entries_found), + context.stringResource(MR.strings.information_no_entries_found), ) } } @@ -192,11 +193,11 @@ object AnimeLibraryTab : Tab() { state.searchQuery.isNullOrEmpty() && !state.hasActiveFilters && state.isLibraryEmpty -> { val handler = LocalUriHandler.current EmptyScreen( - textResource = R.string.information_empty_library, + stringRes = MR.strings.information_empty_library, modifier = Modifier.padding(contentPadding), actions = persistentListOf( EmptyScreenAction( - stringResId = R.string.getting_started_guide, + stringRes = MR.strings.getting_started_guide, icon = Icons.AutoMirrored.Outlined.HelpOutline, onClick = { handler.openUri( diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/manga/MangaLibraryTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/manga/MangaLibraryTab.kt index 5a12c91141..34c5f5c52f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/manga/MangaLibraryTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/manga/MangaLibraryTab.kt @@ -8,7 +8,6 @@ import androidx.compose.animation.graphics.vector.AnimatedImageVector import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.HelpOutline -import androidx.compose.material.icons.outlined.HelpOutline import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState @@ -23,7 +22,6 @@ import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.platform.LocalUriHandler -import androidx.compose.ui.res.stringResource import androidx.compose.ui.util.fastAll import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.navigator.LocalNavigator @@ -51,12 +49,15 @@ import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.launch +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchIO import tachiyomi.domain.category.model.Category import tachiyomi.domain.entries.manga.model.Manga import tachiyomi.domain.library.manga.LibraryManga import tachiyomi.domain.library.service.LibraryPreferences +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.EmptyScreen import tachiyomi.presentation.core.screens.EmptyScreenAction import tachiyomi.presentation.core.screens.LoadingScreen @@ -73,9 +74,9 @@ object MangaLibraryTab : Tab() { @Composable get() { val title = if (fromMore) { - R.string.label_library + MR.strings.label_library } else { - R.string.label_manga_library + MR.strings.label_manga_library } val isSelected = LocalTabNavigator.current.current.key == key val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_library_enter) @@ -108,8 +109,8 @@ object MangaLibraryTab : Tab() { val onClickRefresh: (Category?) -> Boolean = { category -> val started = MangaLibraryUpdateJob.startNow(context, category) scope.launch { - val msgRes = if (started) R.string.updating_category else R.string.update_already_running - snackbarHostState.showSnackbar(context.getString(msgRes)) + val msgRes = if (started) MR.strings.updating_category else MR.strings.update_already_running + snackbarHostState.showSnackbar(context.stringResource(msgRes)) } started } @@ -117,10 +118,10 @@ object MangaLibraryTab : Tab() { val navigateUp: (() -> Unit)? = if (fromMore) navigator::pop else null val defaultTitle = if (fromMore) { - stringResource(R.string.label_library) + stringResource(MR.strings.label_library) } else { stringResource( - R.string.label_manga_library, + MR.strings.label_manga_library, ) } @@ -128,7 +129,7 @@ object MangaLibraryTab : Tab() { topBar = { scrollBehavior -> val title = state.getToolbarTitle( defaultTitle = defaultTitle, - defaultCategoryTitle = stringResource(R.string.label_default), + defaultCategoryTitle = stringResource(MR.strings.label_default), page = screenModel.activeCategoryIndex, ) val tabVisible = state.showCategoryTabs && state.categories.size > 1 @@ -157,7 +158,7 @@ object MangaLibraryTab : Tab() { navigator.push(MangaScreen(randomItem.libraryManga.manga.id)) } else { snackbarHostState.showSnackbar( - context.getString(R.string.information_no_entries_found), + context.stringResource(MR.strings.information_no_entries_found), ) } } @@ -187,11 +188,11 @@ object MangaLibraryTab : Tab() { state.searchQuery.isNullOrEmpty() && !state.hasActiveFilters && state.isLibraryEmpty -> { val handler = LocalUriHandler.current EmptyScreen( - textResource = R.string.information_empty_library, + stringRes = MR.strings.information_empty_library, modifier = Modifier.padding(contentPadding), actions = persistentListOf( EmptyScreenAction( - stringResId = R.string.getting_started_guide, + stringRes = MR.strings.getting_started_guide, icon = Icons.AutoMirrored.Outlined.HelpOutline, onClick = { handler.openUri( @@ -226,7 +227,7 @@ object MangaLibraryTab : Tab() { ) } else { snackbarHostState.showSnackbar( - context.getString(R.string.no_next_chapter), + context.stringResource(MR.strings.no_next_chapter), ) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt index 882cbb6ae4..f56e52a413 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt @@ -39,7 +39,6 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.luminance import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.core.animation.doOnEnd import androidx.core.net.toUri @@ -66,7 +65,6 @@ import eu.kanade.presentation.util.AssistContentScreen import eu.kanade.presentation.util.DefaultNavigatorScreenTransition import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.Migrations -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.animesource.model.Video import eu.kanade.tachiyomi.core.Constants import eu.kanade.tachiyomi.data.cache.ChapterCache @@ -104,11 +102,13 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchIO import tachiyomi.core.util.lang.withUIContext import tachiyomi.core.util.system.logcat import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.release.interactor.GetApplicationRelease +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt @@ -289,17 +289,17 @@ class MainActivity : BaseActivity() { onDismissRequest = { showChangelog = false }, title = { Text( - text = stringResource(R.string.updated_version, BuildConfig.VERSION_NAME), + text = stringResource(MR.strings.updated_version, BuildConfig.VERSION_NAME), ) }, dismissButton = { TextButton(onClick = { openInBrowser(RELEASE_URL) }) { - Text(text = stringResource(R.string.whats_new)) + Text(text = stringResource(MR.strings.whats_new)) } }, confirmButton = { TextButton(onClick = { showChangelog = false }) { - Text(text = stringResource(R.string.action_ok)) + Text(text = stringResource(MR.strings.action_ok)) } }, ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt index 4c6cbd0553..5e35c3a78b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt @@ -8,7 +8,6 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import cafe.adriel.voyager.core.model.ScreenModel import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.model.screenModelScope @@ -41,6 +40,8 @@ import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine import tachiyomi.core.util.lang.launchIO import tachiyomi.domain.library.service.LibraryPreferences +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import uy.kohesive.injekt.injectLazy @@ -54,7 +55,7 @@ object MoreTab : Tab() { val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_more_enter) return TabOptions( index = 4u, - title = stringResource(R.string.label_more), + title = stringResource(MR.strings.label_more), icon = rememberAnimatedVectorPainter(image, isSelected), ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/ExternalIntents.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/ExternalIntents.kt index ce495f0e5b..5598da0399 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/ExternalIntents.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/ExternalIntents.kt @@ -29,7 +29,6 @@ import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll -import kotlinx.coroutines.flow.first import logcat.LogPriority import tachiyomi.core.util.lang.launchIO import tachiyomi.core.util.lang.withIOContext diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerActivity.kt index 332ce22185..3a1ba324ca 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerActivity.kt @@ -87,11 +87,13 @@ import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchNonCancellable import tachiyomi.core.util.lang.launchUI import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.lang.withUIContext import tachiyomi.core.util.system.logcat +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.io.File @@ -611,7 +613,7 @@ class PlayerActivity : BaseActivity() { "sub-fonts-dir", File( Environment.getExternalStorageDirectory().absolutePath + File.separator + - getString(R.string.app_name), + stringResource(MR.strings.app_name), "fonts", ).path, ) @@ -686,7 +688,7 @@ class PlayerActivity : BaseActivity() { if (player.loadChapters().isNotEmpty()) { doubleTapSeek( -1, - videoChapterText = getString(R.string.go_to_previous_chapter), + videoChapterText = stringResource(MR.strings.go_to_previous_chapter), chapterSeek = "-1", ) } @@ -700,7 +702,7 @@ class PlayerActivity : BaseActivity() { if (player.loadChapters().isNotEmpty()) { doubleTapSeek( 1, - videoChapterText = getString(R.string.go_to_next_chapter), + videoChapterText = stringResource(MR.strings.go_to_next_chapter), chapterSeek = "1", ) } else { @@ -984,7 +986,7 @@ class PlayerActivity : BaseActivity() { when (val switchMethod = viewModel.loadEpisode(episodeId)) { null -> { if (viewModel.currentAnime != null && !autoPlay) { - launchUI { toast(R.string.no_next_episode) } + launchUI { toast(MR.strings.no_next_episode) } } showLoadingIndicator(false) } @@ -1289,9 +1291,9 @@ class PlayerActivity : BaseActivity() { val intent = uri.toShareIntent( context = applicationContext, - message = getString(R.string.share_screenshot_info, anime.title, episode.name, seconds), + message = stringResource(MR.strings.share_screenshot_info, anime.title, episode.name, seconds), ) - startActivity(Intent.createChooser(intent, getString(R.string.action_share))) + startActivity(Intent.createChooser(intent, stringResource(MR.strings.action_share))) } /** @@ -1301,7 +1303,7 @@ class PlayerActivity : BaseActivity() { private fun onSaveImageResult(result: PlayerViewModel.SaveImageResult) { when (result) { is PlayerViewModel.SaveImageResult.Success -> { - toast(R.string.picture_saved) + toast(MR.strings.picture_saved) } is PlayerViewModel.SaveImageResult.Error -> { logcat(LogPriority.ERROR, result.error) @@ -1316,9 +1318,9 @@ class PlayerActivity : BaseActivity() { private fun onSetAsCoverResult(result: SetAsCover) { toast( when (result) { - SetAsCover.Success -> R.string.cover_updated - SetAsCover.AddToLibraryFirst -> R.string.notification_first_add_to_library - SetAsCover.Error -> R.string.notification_cover_update_failed + SetAsCover.Success -> MR.strings.cover_updated + SetAsCover.AddToLibraryFirst -> MR.strings.notification_first_add_to_library + SetAsCover.Error -> MR.strings.notification_cover_update_failed }, ) } @@ -1753,7 +1755,7 @@ class PlayerActivity : BaseActivity() { // show a toast with the seconds before the skip if (waitingAniSkip == playerPreferences.waitingTimeAniSkip().get()) { toast( - "AniSkip: ${getString(R.string.player_aniskip_dontskip_toast,waitingAniSkip)}", + "AniSkip: ${stringResource(MR.strings.player_aniskip_dontskip_toast,waitingAniSkip)}", ) } aniSkipPlayerUtils.showSkipButton(skipType, waitingAniSkip) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerViewModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerViewModel.kt index bfca8a502b..9cdb288e58 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerViewModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerViewModel.kt @@ -43,7 +43,6 @@ import `is`.xyz.mpv.Utils import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.runBlocking diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/loader/EpisodeLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/loader/EpisodeLoader.kt index b05c3cc244..2a078102bd 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/loader/EpisodeLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/loader/EpisodeLoader.kt @@ -12,7 +12,6 @@ import tachiyomi.domain.items.episode.model.Episode import tachiyomi.source.local.entries.anime.LocalAnimeSource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get -import java.lang.Exception /** * Loader used to retrieve the video links for a given episode. diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/PlayerSettingsScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/PlayerSettingsScreenModel.kt index de71c28178..ece7031059 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/PlayerSettingsScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/PlayerSettingsScreenModel.kt @@ -1,6 +1,5 @@ package eu.kanade.tachiyomi.ui.player.settings -import androidx.annotation.StringRes import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -23,16 +22,17 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import cafe.adriel.voyager.core.model.ScreenModel -import eu.kanade.tachiyomi.R +import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.ui.player.settings.dialogs.PlayerDialog import `is`.xyz.mpv.MPVLib import tachiyomi.core.preference.Preference import tachiyomi.core.preference.toggle +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.TextButton import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -54,7 +54,7 @@ class PlayerSettingsScreenModel( @Composable fun ToggleableRow( - @StringRes textRes: Int, + textRes: StringResource, paddingValues: PaddingValues = sheetDialogPadding, isChecked: Boolean, onClick: () -> Unit, @@ -69,7 +69,7 @@ class PlayerSettingsScreenModel( verticalAlignment = Alignment.CenterVertically, ) { Text( - text = stringResource(id = textRes), + text = stringResource(textRes), color = if (coloredText) MaterialTheme.colorScheme.primary else Color.Unspecified, style = MaterialTheme.typography.titleSmall, ) @@ -105,13 +105,13 @@ class PlayerSettingsScreenModel( content() ToggleableRow( - textRes = R.string.player_override_ass_subtitles, + textRes = MR.strings.player_override_ass_subtitles, isChecked = overrideSubsASS, onClick = updateOverrideASS, ) TextButton(onClick = { showDialog = true }) { - Text(stringResource(id = R.string.action_reset)) + Text(stringResource(MR.strings.action_reset)) } } } @@ -135,7 +135,7 @@ class PlayerSettingsScreenModel( } PlayerDialog( - titleRes = R.string.player_reset_subtitles, + titleRes = MR.strings.player_reset_subtitles, hideSystemBars = true, modifier = Modifier .fillMaxWidth(fraction = 0.6F) @@ -160,7 +160,7 @@ class PlayerSettingsScreenModel( modifier = Modifier.size(14.dp), ) Text( - text = stringResource(id = R.string.player_subtitle_empty_warning), + text = stringResource(MR.strings.player_subtitle_empty_warning), style = MaterialTheme.typography.labelMedium, maxLines = 1, ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/dialogs/DefaultDecoderDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/dialogs/DefaultDecoderDialog.kt index ad93faa227..3dacdfd043 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/dialogs/DefaultDecoderDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/dialogs/DefaultDecoderDialog.kt @@ -8,8 +8,8 @@ import androidx.compose.foundation.layout.height import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.player.viewer.HwDecState +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.RadioItem @Composable @@ -38,7 +38,7 @@ fun DefaultDecoderDialog( } PlayerDialog( - titleRes = R.string.player_hwdec_mode, + titleRes = MR.strings.player_hwdec_mode, modifier = Modifier.fillMaxWidth(fraction = 0.8F), onDismissRequest = onDismissRequest, ) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/dialogs/EpisodeListDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/dialogs/EpisodeListDialog.kt index 171006525d..ce672ba2e7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/dialogs/EpisodeListDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/dialogs/EpisodeListDialog.kt @@ -28,20 +28,20 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import eu.kanade.presentation.entries.DotSeparatorText import eu.kanade.presentation.util.formatEpisodeNumber -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.anime.Episode import eu.kanade.tachiyomi.util.lang.toRelativeString import tachiyomi.domain.entries.anime.model.Anime +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.VerticalFastScroller import tachiyomi.presentation.core.components.material.ReadItemAlpha import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import java.text.DateFormat import java.util.Date @@ -61,7 +61,7 @@ fun EpisodeListDialog( val episodeListState = rememberLazyListState(initialFirstVisibleItemIndex = itemScrollIndex) PlayerDialog( - titleRes = R.string.episodes, + titleRes = MR.strings.episodes, modifier = Modifier.fillMaxHeight(fraction = 0.8F).fillMaxWidth(fraction = 0.8F), onDismissRequest = onDismissRequest, ) { @@ -82,7 +82,7 @@ fun EpisodeListDialog( val title = if (displayMode == Anime.EPISODE_DISPLAY_NUMBER) { stringResource( - R.string.display_mode_episode, + MR.strings.display_mode_episode, formatEpisodeNumber(episode.episode_number.toDouble()), ) } else { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/dialogs/PlayerDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/dialogs/PlayerDialog.kt index 6b1b5cbd82..464f11de42 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/dialogs/PlayerDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/dialogs/PlayerDialog.kt @@ -1,6 +1,5 @@ package eu.kanade.tachiyomi.ui.player.settings.dialogs -import androidx.annotation.StringRes import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -12,20 +11,21 @@ import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.window.DialogProperties import androidx.core.view.WindowInsetsControllerCompat import com.google.accompanist.systemuicontroller.rememberSystemUiController -import eu.kanade.tachiyomi.R +import dev.icerock.moko.resources.StringResource +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.TextButton +import tachiyomi.presentation.core.i18n.stringResource -// TODO: (Merge_Change) stringResource "R.string.action_ok" to be replaced with -// "R.string.action_ok" +// TODO: (Merge_Change) stringResource "MR.strings.action_ok" to be replaced with +// "MR.strings.action_ok" @Composable fun PlayerDialog( - @StringRes titleRes: Int, + titleRes: StringResource, modifier: Modifier = Modifier, hideSystemBars: Boolean = true, onConfirmRequest: (() -> Unit)? = null, @@ -74,11 +74,11 @@ fun PlayerDialog( horizontalArrangement = Arrangement.SpaceBetween, ) { TextButton(onClick = onDismissRequest) { - Text(stringResource(R.string.action_cancel)) + Text(stringResource(MR.strings.action_cancel)) } TextButton(onClick = onConfirm) { - Text(stringResource(R.string.action_ok)) + Text(stringResource(MR.strings.action_ok)) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/dialogs/SkipIntroLengthDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/dialogs/SkipIntroLengthDialog.kt index a4538a95ae..8595b52ffb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/dialogs/SkipIntroLengthDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/dialogs/SkipIntroLengthDialog.kt @@ -6,10 +6,10 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import eu.kanade.tachiyomi.R import kotlinx.collections.immutable.toImmutableList +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.WheelTextPicker +import tachiyomi.presentation.core.i18n.stringResource @Composable fun SkipIntroLengthDialog( @@ -22,7 +22,7 @@ fun SkipIntroLengthDialog( var newLength = 0 PlayerDialog( - titleRes = R.string.action_change_intro_length, + titleRes = MR.strings.action_change_intro_length, modifier = Modifier.fillMaxWidth(fraction = if (fromPlayer) 0.5F else 0.8F), hideSystemBars = fromPlayer, onConfirmRequest = if (fromPlayer) null else { {} }, @@ -36,7 +36,7 @@ fun SkipIntroLengthDialog( content = { WheelTextPicker( modifier = Modifier.align(Alignment.Center), - items = remember { 1..255 }.map { stringResource(R.string.seconds_short, it) }.toImmutableList(), + items = remember { 1..255 }.map { stringResource(MR.strings.seconds_short, it) }.toImmutableList(), onSelectionChanged = { newLength = it + 1 }, startIndex = if (currentSkipIntroLength > 0) { currentSkipIntroLength - 1 diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/dialogs/SpeedPickerDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/dialogs/SpeedPickerDialog.kt index 7d910fa2c0..248b103257 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/dialogs/SpeedPickerDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/dialogs/SpeedPickerDialog.kt @@ -16,7 +16,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR import java.math.BigDecimal import java.math.RoundingMode @@ -33,7 +33,7 @@ fun SpeedPickerDialog( var speed by remember { mutableStateOf(currentSpeed.toHundredths()) } PlayerDialog( - titleRes = R.string.title_speed_dialog, + titleRes = MR.strings.playback_speed_dialog_title, modifier = Modifier.fillMaxWidth(fraction = 0.8F), onDismissRequest = onDismissRequest, ) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/PlayerSettingsSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/PlayerSettingsSheet.kt index 8ffba7304b..589030782c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/PlayerSettingsSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/PlayerSettingsSheet.kt @@ -14,15 +14,15 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.sp import eu.kanade.presentation.components.AdaptiveSheet -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.player.settings.PlayerSettingsScreenModel import eu.kanade.tachiyomi.ui.player.viewer.HwDecState import eu.kanade.tachiyomi.ui.player.viewer.PlayerStatsPage import `is`.xyz.mpv.MPVLib +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState @Composable @@ -75,19 +75,19 @@ fun PlayerSettingsSheet( verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.medium), ) { Text( - text = stringResource(id = R.string.settings_dialog_header), + text = stringResource(MR.strings.settings_dialog_header), style = MaterialTheme.typography.titleMedium, fontSize = 20.sp, ) screenModel.ToggleableRow( - textRes = R.string.enable_volume_brightness_gestures, + textRes = MR.strings.enable_volume_brightness_gestures, isChecked = verticalGesture.collectAsState().value, onClick = { screenModel.togglePreference { verticalGesture } }, ) screenModel.ToggleableRow( - textRes = R.string.enable_horizontal_seek_gesture, + textRes = MR.strings.enable_horizontal_seek_gesture, isChecked = horizontalGesture.collectAsState().value, onClick = { screenModel.togglePreference { horizontalGesture } }, ) @@ -101,7 +101,7 @@ fun PlayerSettingsSheet( ), ) { Text( - text = stringResource(id = R.string.player_hwdec_mode), + text = stringResource(MR.strings.player_hwdec_mode), style = MaterialTheme.typography.titleSmall, ) @@ -126,7 +126,7 @@ fun PlayerSettingsSheet( ), ) { Text( - text = stringResource(id = R.string.toggle_player_statistics_page), + text = stringResource(MR.strings.toggle_player_statistics_page), style = MaterialTheme.typography.titleSmall, ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/ScreenshotOptionsSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/ScreenshotOptionsSheet.kt index 34692dd7e0..76503067ee 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/ScreenshotOptionsSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/ScreenshotOptionsSheet.kt @@ -22,14 +22,14 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import eu.kanade.presentation.components.AdaptiveSheet -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.player.settings.PlayerSettingsScreenModel import eu.kanade.tachiyomi.ui.player.settings.dialogs.PlayerDialog +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import java.io.InputStream @@ -56,13 +56,13 @@ fun ScreenshotOptionsSheet( ) { ActionButton( modifier = Modifier.weight(1f), - title = stringResource(R.string.set_as_cover), + title = stringResource(MR.strings.set_as_cover), icon = Icons.Outlined.Photo, onClick = { showSetCoverDialog = true }, ) ActionButton( modifier = Modifier.weight(1f), - title = stringResource(R.string.action_share), + title = stringResource(MR.strings.action_share), icon = Icons.Outlined.Share, onClick = { onShare { screenModel.takeScreenshot(cachePath, showSubtitles.get())!! } @@ -71,7 +71,7 @@ fun ScreenshotOptionsSheet( ) ActionButton( modifier = Modifier.weight(1f), - title = stringResource(R.string.action_save), + title = stringResource(MR.strings.action_save), icon = Icons.Outlined.Save, onClick = { onSave { screenModel.takeScreenshot(cachePath, showSubtitles.get())!! } @@ -81,7 +81,7 @@ fun ScreenshotOptionsSheet( } screenModel.ToggleableRow( - textRes = R.string.screenshot_show_subs, + textRes = MR.strings.screenshot_show_subs, paddingValues = PaddingValues(MaterialTheme.padding.medium), isChecked = showSubtitles.collectAsState().value, onClick = { screenModel.togglePreference { showSubtitles } }, @@ -92,7 +92,7 @@ fun ScreenshotOptionsSheet( if (showSetCoverDialog) { PlayerDialog( - titleRes = R.string.confirm_set_image_as_cover, + titleRes = MR.strings.confirm_set_image_as_cover, modifier = Modifier.fillMaxWidth(fraction = 0.6F).padding(MaterialTheme.padding.medium), onConfirmRequest = { onSetAsCover { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/StreamsCatalogSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/StreamsCatalogSheet.kt index f8605a0748..4d34d223a3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/StreamsCatalogSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/StreamsCatalogSheet.kt @@ -26,18 +26,19 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight import eu.kanade.presentation.components.TabbedDialog import eu.kanade.presentation.components.TabbedDialogPaddings -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.animesource.model.Track import eu.kanade.tachiyomi.ui.player.PlayerViewModel import eu.kanade.tachiyomi.ui.player.settings.sheetDialogPadding import `is`.xyz.mpv.MPVLib import kotlinx.collections.immutable.persistentListOf +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import java.io.File @Composable @@ -52,11 +53,11 @@ fun StreamsCatalogSheet( onDismissRequest: () -> Unit, ) { val tabTitles = persistentListOf( - stringResource(id = R.string.subtitle_dialog_header), - stringResource(id = R.string.audio_dialog_header), + stringResource(MR.strings.subtitle_dialog_header), + stringResource(MR.strings.audio_dialog_header), ) if (isEpisodeOnline == true) { - tabTitles.add(0, stringResource(id = R.string.quality_dialog_header)) + tabTitles.add(0, stringResource(MR.strings.quality_dialog_header)) } TabbedDialog( @@ -127,12 +128,12 @@ private fun StreamsPageBuilder( return if (externalTrackCode == "audio") { Intent.createChooser( intent, - context.getString(R.string.player_add_external_audio_intent), + context.stringResource(MR.strings.player_add_external_audio_intent), ) } else { Intent.createChooser( intent, - context.getString(R.string.player_add_external_subtitles_intent), + context.stringResource(MR.strings.player_add_external_subtitles_intent), ) } } @@ -156,9 +157,9 @@ private fun StreamsPageBuilder( val addTrackRes = if (externalTrackCode == "sub") { - R.string.player_add_external_subtitles + MR.strings.player_add_external_subtitles } else { - R.string.player_add_external_audio + MR.strings.player_add_external_audio } Row( @@ -171,11 +172,11 @@ private fun StreamsPageBuilder( Icon( modifier = Modifier.padding(end = MaterialTheme.padding.tiny), imageVector = Icons.Default.Add, - contentDescription = stringResource(id = addTrackRes), + contentDescription = stringResource(addTrackRes), ) Text( - text = stringResource(id = addTrackRes), + text = stringResource(addTrackRes), style = MaterialTheme.typography.bodyMedium, ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/VideoChaptersSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/VideoChaptersSheet.kt index b80578a2bb..9a07feff39 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/VideoChaptersSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/VideoChaptersSheet.kt @@ -16,15 +16,15 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.sp import eu.kanade.presentation.components.AdaptiveSheet -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.player.settings.sheetDialogPadding import `is`.xyz.mpv.Utils +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import kotlin.math.roundToInt import `is`.xyz.mpv.MPVView.Chapter as VideoChapter @@ -47,7 +47,7 @@ fun VideoChaptersSheet( .verticalScroll(rememberScrollState()), ) { Text( - text = stringResource(id = R.string.chapter_dialog_header), + text = stringResource(MR.strings.chapter_dialog_header), style = MaterialTheme.typography.titleMedium, fontSize = 20.sp, ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleColorPage.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleColorPage.kt index 89186879b9..fcb7e2d54c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleColorPage.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleColorPage.kt @@ -1,6 +1,5 @@ package eu.kanade.tachiyomi.ui.player.settings.sheets.subtitle -import androidx.annotation.StringRes import androidx.compose.foundation.Canvas import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement @@ -32,15 +31,16 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.drawscope.DrawScope import androidx.compose.ui.graphics.drawscope.Fill import androidx.compose.ui.graphics.drawscope.Stroke -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import eu.kanade.tachiyomi.R +import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences import eu.kanade.tachiyomi.ui.player.settings.PlayerSettingsScreenModel import `is`.xyz.mpv.MPVLib import tachiyomi.core.preference.Preference import tachiyomi.core.preference.getAndSet +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import kotlin.math.floor import kotlin.math.max @@ -70,19 +70,19 @@ private fun SubtitleColors( Row(horizontalArrangement = Arrangement.SpaceEvenly, modifier = Modifier.fillMaxWidth()) { SubtitleColorSelector( - label = R.string.player_subtitle_text_color, + label = MR.strings.player_subtitle_text_color, onClick = { updateType(SubsColor.TEXT) }, selected = subsColor == SubsColor.TEXT, preference = textColorPref, ) SubtitleColorSelector( - label = R.string.player_subtitle_border_color, + label = MR.strings.player_subtitle_border_color, onClick = { updateType(SubsColor.BORDER) }, selected = subsColor == SubsColor.BORDER, preference = borderColorPref, ) SubtitleColorSelector( - label = R.string.player_subtitle_background_color, + label = MR.strings.player_subtitle_background_color, onClick = { updateType(SubsColor.BACKGROUND) }, selected = subsColor == SubsColor.BACKGROUND, preference = backgroundColorPref, @@ -131,7 +131,7 @@ private fun SubtitleColors( @Composable private fun SubtitleColorSelector( - @StringRes label: Int, + label: StringResource, selected: Boolean, onClick: () -> Unit, preference: Preference, @@ -241,17 +241,17 @@ private enum class SubsColor( } private enum class ARGBValue( - @StringRes val label: Int, + val label: StringResource, val mask: Long, val bitShift: Int, val toValue: (Int) -> Int, val asColor: (Int) -> Color, ) { - ALPHA(R.string.color_filter_a_value, 0xFF000000L, 24, ::toAlpha, ::asAlpha), - RED(R.string.color_filter_r_value, 0x00FF0000L, 16, ::toRed, ::asRed), - GREEN(R.string.color_filter_g_value, 0x0000FF00L, 8, ::toGreen, ::asGreen), - BLUE(R.string.color_filter_b_value, 0x000000FFL, 0, ::toBlue, ::asBlue), + ALPHA(MR.strings.color_filter_a_value, 0xFF000000L, 24, ::toAlpha, ::asAlpha), + RED(MR.strings.color_filter_r_value, 0x00FF0000L, 16, ::toRed, ::asRed), + GREEN(MR.strings.color_filter_g_value, 0x0000FF00L, 8, ::toGreen, ::asGreen), + BLUE(MR.strings.color_filter_b_value, 0x000000FFL, 0, ::toBlue, ::asBlue), } private fun toAlpha(color: Int) = (color ushr 24) and 0xFF diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleDelayPage.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleDelayPage.kt index 10862909c0..da20967f01 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleDelayPage.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleDelayPage.kt @@ -14,12 +14,12 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.player.settings.PlayerSettingsScreenModel import `is`.xyz.mpv.MPVLib +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.OutlinedNumericChooser import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState @Composable @@ -42,7 +42,7 @@ fun StreamsDelayPage( ) } screenModel.ToggleableRow( - textRes = R.string.player_audio_remember_delay, + textRes = MR.strings.player_audio_remember_delay, isChecked = audioDelay.collectAsState().value, onClick = { screenModel.togglePreference { audioDelay } }, ) @@ -53,7 +53,7 @@ fun StreamsDelayPage( horizontalArrangement = Arrangement.SpaceEvenly, ) { OutlinedNumericChooser( - label = stringResource(id = R.string.player_audio_delay), + label = stringResource(MR.strings.player_audio_delay), placeholder = "0", suffix = "ms", value = currentAudioDelay, @@ -69,7 +69,7 @@ fun StreamsDelayPage( screenModel.NoSubtitlesWarning() screenModel.ToggleableRow( - textRes = R.string.player_subtitle_remember_delay, + textRes = MR.strings.player_subtitle_remember_delay, isChecked = subDelay.collectAsState().value, onClick = { screenModel.togglePreference { subDelay } }, ) @@ -80,7 +80,7 @@ fun StreamsDelayPage( horizontalArrangement = Arrangement.SpaceEvenly, ) { OutlinedNumericChooser( - label = stringResource(id = R.string.player_subtitle_delay), + label = stringResource(MR.strings.player_subtitle_delay), placeholder = "0", suffix = "ms", value = currentSubDelay, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleFontPage.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleFontPage.kt index 56cdfa3ede..a1af084496 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleFontPage.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleFontPage.kt @@ -28,17 +28,18 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.yubyf.truetypeparser.TTFFile import eu.kanade.presentation.components.DropdownMenu -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences import eu.kanade.tachiyomi.ui.player.settings.PlayerSettingsScreenModel import `is`.xyz.mpv.MPVLib +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.OutlinedNumericChooser import tachiyomi.presentation.core.components.material.ReadItemAlpha import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState import java.io.File @@ -88,7 +89,7 @@ private fun SubtitleFont( derivedStateOf { val customFonts = File( Environment.getExternalStorageDirectory().absolutePath + - File.separator + context.getString(R.string.app_name) + + File.separator + context.stringResource(MR.strings.app_name) + File.separator, "fonts", ).listFiles { file -> @@ -120,7 +121,7 @@ private fun SubtitleFont( } OutlinedNumericChooser( - label = stringResource(id = R.string.player_font_size_text_field), + label = stringResource(MR.strings.player_font_size_text_field), placeholder = "55", suffix = "", value = subtitleFontSize, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt index 3c9e84bbab..07d88546b1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt @@ -27,7 +27,6 @@ import androidx.compose.ui.graphics.drawscope.drawIntoCanvas import androidx.compose.ui.graphics.nativeCanvas import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontStyle @@ -37,10 +36,12 @@ import androidx.compose.ui.unit.dp import com.yubyf.truetypeparser.TTFFile import eu.kanade.presentation.components.TabbedDialog import eu.kanade.presentation.components.TabbedDialogPaddings -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.player.settings.PlayerSettingsScreenModel import kotlinx.collections.immutable.persistentListOf +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import java.io.File @Composable @@ -51,9 +52,9 @@ fun SubtitleSettingsSheet( TabbedDialog( onDismissRequest = onDismissRequest, tabTitles = persistentListOf( - stringResource(id = R.string.player_subtitle_settings_delay_tab), - stringResource(id = R.string.player_subtitle_settings_font_tab), - stringResource(id = R.string.player_subtitle_settings_color_tab), + stringResource(MR.strings.player_subtitle_settings_delay_tab), + stringResource(MR.strings.player_subtitle_settings_font_tab), + stringResource(MR.strings.player_subtitle_settings_color_tab), ), hideSystemBars = true, ) { page -> @@ -154,7 +155,7 @@ fun SubtitlePreview( ) { val fontMap = File( Environment.getExternalStorageDirectory().absolutePath + - File.separator + LocalContext.current.getString(R.string.app_name) + + File.separator + LocalContext.current.stringResource(MR.strings.app_name) + File.separator, "fonts", ).listFiles { file -> @@ -176,7 +177,7 @@ fun SubtitlePreview( Column(modifier = Modifier.fillMaxWidth(0.8f).background(color = backgroundColor)) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { OutLineText( - text = stringResource(R.string.player_subtitle_settings_example), + text = stringResource(MR.strings.player_subtitle_settings_example), font = fontFile, outlineColor = borderColor, textColor = textColor, @@ -186,7 +187,7 @@ fun SubtitlePreview( ) } else { Text( - text = stringResource(R.string.player_subtitle_settings_example), + text = stringResource(MR.strings.player_subtitle_settings_example), modifier = Modifier.align(Alignment.CenterHorizontally), style = TextStyle( fontFamily = FontFamily.SansSerif, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/viewer/PictureInPictureHandler.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/viewer/PictureInPictureHandler.kt index 06bbd408a8..0cfb9a0b21 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/viewer/PictureInPictureHandler.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/viewer/PictureInPictureHandler.kt @@ -8,9 +8,12 @@ import android.graphics.drawable.Icon import android.os.Build import android.util.Rational import androidx.annotation.RequiresApi +import dev.icerock.moko.resources.StringResource import eu.kanade.domain.base.BasePreferences import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.player.PlayerActivity +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -37,14 +40,14 @@ class PictureInPictureHandler( @RequiresApi(Build.VERSION_CODES.O) private fun createRemoteAction( iconResId: Int, - titleResId: Int, + titleRes: StringResource, requestCode: Int, controlType: Int, ): RemoteAction { return RemoteAction( Icon.createWithResource(activity, iconResId), - activity.getString(titleResId), - activity.getString(titleResId), + activity.stringResource(titleRes), + activity.stringResource(titleRes), PendingIntent.getBroadcast( activity, requestCode, @@ -76,28 +79,28 @@ class PictureInPictureHandler( arrayListOf( createRemoteAction( R.drawable.ic_skip_previous_24dp, - R.string.action_previous_episode, + MR.strings.action_previous_episode, CONTROL_TYPE_PREVIOUS, REQUEST_PREVIOUS, ), if (playing) { createRemoteAction( R.drawable.ic_pause_24dp, - R.string.action_pause, + MR.strings.action_pause, CONTROL_TYPE_PAUSE, REQUEST_PAUSE, ) } else { createRemoteAction( R.drawable.ic_play_arrow_24dp, - R.string.action_play, + MR.strings.action_play, CONTROL_TYPE_PLAY, REQUEST_PLAY, ) }, createRemoteAction( R.drawable.ic_skip_next_24dp, - R.string.action_next_episode, + MR.strings.action_next_episode, CONTROL_TYPE_NEXT, REQUEST_NEXT, ), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/viewer/PlayerControlsView.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/viewer/PlayerControlsView.kt index 9b5739de04..7f169ca05e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/viewer/PlayerControlsView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/viewer/PlayerControlsView.kt @@ -19,6 +19,7 @@ import eu.kanade.tachiyomi.ui.player.PlayerActivity import eu.kanade.tachiyomi.ui.player.viewer.components.Seekbar import `is`.xyz.mpv.MPVLib import `is`.xyz.mpv.Utils +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.withUIContext import kotlin.math.abs @@ -429,7 +430,7 @@ class PlayerControlsView @JvmOverloads constructor(context: Context, attrs: Attr } internal fun setViewMode(showText: Boolean) { - binding.playerInformation.text = activity.getString(AspectState.mode.stringRes) + binding.playerInformation.text = activity.stringResource(AspectState.mode.stringRes) var aspect = "-1" var pan = "1.0" when (AspectState.mode) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/viewer/PlayerEnums.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/viewer/PlayerEnums.kt index 3ed01aebcf..6ad5a345a8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/viewer/PlayerEnums.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/viewer/PlayerEnums.kt @@ -1,8 +1,8 @@ package eu.kanade.tachiyomi.ui.player.viewer import android.os.Build -import androidx.annotation.StringRes -import eu.kanade.tachiyomi.R +import dev.icerock.moko.resources.StringResource +import tachiyomi.i18n.MR /** * Results of the set as cover feature. @@ -36,11 +36,11 @@ enum class SeekState { /** * Player's Video Aspect state handler */ -enum class AspectState(val index: Int, @StringRes val stringRes: Int) { - CROP(index = 0, stringRes = R.string.video_crop_screen), - FIT(index = 1, stringRes = R.string.video_fit_screen), - STRETCH(index = 2, stringRes = R.string.video_stretch_screen), - CUSTOM(index = 3, stringRes = R.string.video_custom_screen), +enum class AspectState(val index: Int, val stringRes: StringResource) { + CROP(index = 0, stringRes = MR.strings.video_crop_screen), + FIT(index = 1, stringRes = MR.strings.video_fit_screen), + STRETCH(index = 2, stringRes = MR.strings.video_stretch_screen), + CUSTOM(index = 3, stringRes = MR.strings.video_custom_screen), ; companion object { @@ -69,9 +69,9 @@ enum class HwDecState(val title: String, val mpvValue: String) { /** * Player's Statistics Page handler */ -enum class PlayerStatsPage(val page: Int, @StringRes val textRes: Int) { - OFF(0, R.string.off), - PAGE1(1, R.string.player_statistics_page_1), - PAGE2(2, R.string.player_statistics_page_2), - PAGE3(3, R.string.player_statistics_page_3), +enum class PlayerStatsPage(val page: Int, val textRes: StringResource) { + OFF(0, MR.strings.off), + PAGE1(1, MR.strings.player_statistics_page_1), + PAGE2(2, MR.strings.player_statistics_page_2), + PAGE3(3, MR.strings.player_statistics_page_3), } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/viewer/components/DoubleTapSecondsView.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/viewer/components/DoubleTapSecondsView.kt index 8e2d097bfe..2990696ca5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/viewer/components/DoubleTapSecondsView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/viewer/components/DoubleTapSecondsView.kt @@ -9,6 +9,8 @@ import android.widget.LinearLayout import androidx.annotation.DrawableRes import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.databinding.PlayerDoubleTapSeekViewBinding +import tachiyomi.core.i18n.pluralStringResource +import tachiyomi.i18n.MR /** * View that shows the arrows animation when double tapping to seek @@ -33,8 +35,8 @@ class DoubleTapSecondsView(context: Context, attrs: AttributeSet?) : LinearLayou var seconds: Int = 0 set(value) { - binding.doubleTapSeconds.text = context.resources.getQuantityString( - R.plurals.seconds, + binding.doubleTapSeconds.text = context.pluralStringResource( + MR.plurals.seconds, value, value, ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt index 58e446f932..a695942513 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt @@ -84,13 +84,14 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.sample import kotlinx.coroutines.launch import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchIO import tachiyomi.core.util.lang.launchNonCancellable import tachiyomi.core.util.lang.withUIContext import tachiyomi.core.util.system.logcat import tachiyomi.domain.entries.manga.model.Manga +import tachiyomi.i18n.MR import tachiyomi.presentation.core.util.collectAsState -import tachiyomi.presentation.widget.util.stringResource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -379,7 +380,7 @@ class ReaderActivity : BaseActivity() { onClickCropBorder = { val enabled = viewModel.toggleCropBorders() menuToggleToast?.cancel() - menuToggleToast = toast(if (enabled) R.string.on else R.string.off) + menuToggleToast = toast(if (enabled) MR.strings.on else MR.strings.off) }, onClickSettings = viewModel::openSettingsDialog, ) @@ -406,7 +407,7 @@ class ReaderActivity : BaseActivity() { verticalAlignment = Alignment.CenterVertically, ) { CircularProgressIndicator() - Text(stringResource(R.string.loading)) + Text(stringResource(MR.strings.loading)) } }, ) @@ -543,7 +544,7 @@ class ReaderActivity : BaseActivity() { private fun shareChapter() { assistUrl?.let { val intent = it.toUri().toShareIntent(this, type = "text/plain") - startActivity(Intent.createChooser(intent, getString(R.string.action_share))) + startActivity(Intent.createChooser(intent, stringResource(MR.strings.action_share))) } } @@ -690,9 +691,9 @@ class ReaderActivity : BaseActivity() { val intent = uri.toShareIntent( context = applicationContext, - message = getString(R.string.share_page_info, manga.title, chapter.name, page.number), + message = stringResource(MR.strings.share_page_info, manga.title, chapter.name, page.number), ) - startActivity(Intent.createChooser(intent, getString(R.string.action_share))) + startActivity(Intent.createChooser(intent, stringResource(MR.strings.action_share))) } /** @@ -702,7 +703,7 @@ class ReaderActivity : BaseActivity() { private fun onSaveImageResult(result: ReaderViewModel.SaveImageResult) { when (result) { is ReaderViewModel.SaveImageResult.Success -> { - toast(R.string.picture_saved) + toast(MR.strings.picture_saved) } is ReaderViewModel.SaveImageResult.Error -> { logcat(LogPriority.ERROR, result.error) @@ -717,9 +718,9 @@ class ReaderActivity : BaseActivity() { private fun onSetAsCoverResult(result: ReaderViewModel.SetAsCoverResult) { toast( when (result) { - Success -> R.string.cover_updated - AddToLibraryFirst -> R.string.notification_first_add_to_library - Error -> R.string.notification_cover_update_failed + Success -> MR.strings.cover_updated + AddToLibraryFirst -> MR.strings.notification_first_add_to_library + Error -> MR.strings.notification_cover_update_failed }, ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderNavigationOverlayView.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderNavigationOverlayView.kt index d270e437ee..a40edf8f10 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderNavigationOverlayView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderNavigationOverlayView.kt @@ -13,6 +13,7 @@ import androidx.core.graphics.withTranslation import androidx.core.view.isVisible import eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation import eu.kanade.tachiyomi.ui.reader.viewer.navigation.DisabledNavigation +import tachiyomi.core.i18n.stringResource import kotlin.math.abs class ReaderNavigationOverlayView(context: Context, attributeSet: AttributeSet) : View( @@ -82,8 +83,8 @@ class ReaderNavigationOverlayView(context: Context, attributeSet: AttributeSet) // Calculate center of rect height on screen val y = height * (abs(rect.top - rect.bottom) / 2) - drawText(context.getString(region.type.nameRes), x, y, textBorderPaint) - drawText(context.getString(region.type.nameRes), x, y, textPaint) + drawText(context.stringResource(region.type.nameRes), x, y, textBorderPaint) + drawText(context.stringResource(region.type.nameRes), x, y, textPaint) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/SaveImageNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/SaveImageNotifier.kt index 54e20d98b7..24e31fab8a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/SaveImageNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/SaveImageNotifier.kt @@ -15,6 +15,8 @@ import eu.kanade.tachiyomi.util.system.cancelNotification import eu.kanade.tachiyomi.util.system.getBitmapOrNull import eu.kanade.tachiyomi.util.system.notificationBuilder import eu.kanade.tachiyomi.util.system.notify +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR /** * Class used to show BigPictureStyle notifications @@ -56,8 +58,8 @@ class SaveImageNotifier(private val context: Context) { fun onError(error: String?) { // Create notification with(notificationBuilder) { - setContentTitle(context.getString(R.string.download_notifier_title_error)) - setContentText(error ?: context.getString(R.string.unknown_error)) + setContentTitle(context.stringResource(MR.strings.download_notifier_title_error)) + setContentText(error ?: context.stringResource(MR.strings.unknown_error)) setSmallIcon(android.R.drawable.ic_menu_report_image) } updateNotification() @@ -65,7 +67,7 @@ class SaveImageNotifier(private val context: Context) { private fun showCompleteNotification(uri: Uri, image: Bitmap?) { with(notificationBuilder) { - setContentTitle(context.getString(R.string.picture_saved)) + setContentTitle(context.stringResource(MR.strings.picture_saved)) setSmallIcon(R.drawable.ic_photo_24dp) image?.let { setStyle(NotificationCompat.BigPictureStyle().bigPicture(it)) } setLargeIcon(image) @@ -78,13 +80,13 @@ class SaveImageNotifier(private val context: Context) { // Share action addAction( R.drawable.ic_share_24dp, - context.getString(R.string.action_share), + context.stringResource(MR.strings.action_share), NotificationReceiver.shareImagePendingBroadcast(context, uri.path!!, notificationId), ) // Delete action addAction( R.drawable.ic_delete_24dp, - context.getString(R.string.action_delete), + context.stringResource(MR.strings.action_delete), NotificationReceiver.deleteImagePendingBroadcast( context, uri.path!!, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt index 5156127bd9..96d0add1dd 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt @@ -2,17 +2,18 @@ package eu.kanade.tachiyomi.ui.reader.loader import android.content.Context import com.github.junrar.exception.UnsupportedRarV5Exception -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.manga.MangaDownloadManager import eu.kanade.tachiyomi.data.download.manga.MangaDownloadProvider import eu.kanade.tachiyomi.source.MangaSource import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.system.logcat import tachiyomi.domain.entries.manga.model.Manga import tachiyomi.domain.source.manga.model.StubMangaSource +import tachiyomi.i18n.MR import tachiyomi.source.local.entries.manga.LocalMangaSource import tachiyomi.source.local.io.Format import uy.kohesive.injekt.injectLazy @@ -49,7 +50,7 @@ class ChapterLoader( val pages = loader.getPages() .onEach { it.chapter = chapter } if (pages.isEmpty()) { - throw Exception(context.getString(R.string.page_list_empty_error)) + throw Exception(context.stringResource(MR.strings.page_list_empty_error)) } // If the chapter is partially read, set the starting page to the last the user read @@ -100,16 +101,16 @@ class ChapterLoader( is Format.Rar -> try { RarPageLoader(format.file) } catch (e: UnsupportedRarV5Exception) { - error(context.getString(R.string.loader_rar5_error)) + error(context.stringResource(MR.strings.loader_rar5_error)) } is Format.Epub -> EpubPageLoader(format.file) } } source is HttpSource -> HttpPageLoader(chapter, source) source is StubMangaSource -> error( - context.getString(R.string.source_not_installed, source.toString()), + context.stringResource(MR.strings.source_not_installed, source.toString()), ) - else -> error(context.getString(R.string.loader_not_implemented_error)) + else -> error(context.stringResource(MR.strings.loader_not_implemented_error)) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderOrientation.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderOrientation.kt index c1d2e9b2db..01073cd606 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderOrientation.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderOrientation.kt @@ -2,54 +2,55 @@ package eu.kanade.tachiyomi.ui.reader.setting import android.content.pm.ActivityInfo import androidx.annotation.DrawableRes -import androidx.annotation.StringRes +import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR enum class ReaderOrientation( val flag: Int, - @StringRes val stringRes: Int, + val stringRes: StringResource, @DrawableRes val iconRes: Int, val flagValue: Int, ) { DEFAULT( ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, - R.string.label_default, + MR.strings.label_default, R.drawable.ic_screen_rotation_24dp, 0x00000000, ), FREE( ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, - R.string.rotation_free, + MR.strings.rotation_free, R.drawable.ic_screen_rotation_24dp, 0x00000008, ), PORTRAIT( ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT, - R.string.rotation_portrait, + MR.strings.rotation_portrait, R.drawable.ic_stay_current_portrait_24dp, 0x00000010, ), LANDSCAPE( ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE, - R.string.rotation_landscape, + MR.strings.rotation_landscape, R.drawable.ic_stay_current_landscape_24dp, 0x00000018, ), LOCKED_PORTRAIT( ActivityInfo.SCREEN_ORIENTATION_PORTRAIT, - R.string.rotation_force_portrait, + MR.strings.rotation_force_portrait, R.drawable.ic_screen_lock_portrait_24dp, 0x00000020, ), LOCKED_LANDSCAPE( ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE, - R.string.rotation_force_landscape, + MR.strings.rotation_force_landscape, R.drawable.ic_screen_lock_landscape_24dp, 0x00000028, ), REVERSE_PORTRAIT( ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT, - R.string.rotation_reverse_portrait, + MR.strings.rotation_reverse_portrait, R.drawable.ic_stay_current_portrait_24dp, 0x00000030, ), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt index 90ce796d98..59ab00d005 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt @@ -1,9 +1,9 @@ package eu.kanade.tachiyomi.ui.reader.setting -import androidx.annotation.StringRes -import eu.kanade.tachiyomi.R +import dev.icerock.moko.resources.StringResource import tachiyomi.core.preference.PreferenceStore import tachiyomi.core.preference.getEnum +import tachiyomi.i18n.MR class ReaderPreferences( private val preferenceStore: PreferenceStore, @@ -168,15 +168,15 @@ class ReaderPreferences( // endregion enum class TappingInvertMode( - @StringRes val titleResId: Int, + val titleRes: StringResource, val shouldInvertHorizontal: Boolean = false, val shouldInvertVertical: Boolean = false, ) { - NONE(R.string.tapping_inverted_none), - HORIZONTAL(R.string.tapping_inverted_horizontal, shouldInvertHorizontal = true), - VERTICAL(R.string.tapping_inverted_vertical, shouldInvertVertical = true), + NONE(MR.strings.tapping_inverted_none), + HORIZONTAL(MR.strings.tapping_inverted_horizontal, shouldInvertHorizontal = true), + VERTICAL(MR.strings.tapping_inverted_vertical, shouldInvertVertical = true), BOTH( - R.string.tapping_inverted_both, + MR.strings.tapping_inverted_both, shouldInvertHorizontal = true, shouldInvertVertical = true, ), @@ -194,28 +194,28 @@ class ReaderPreferences( const val WEBTOON_PADDING_MAX = 25 val TapZones = listOf( - R.string.label_default, - R.string.l_nav, - R.string.kindlish_nav, - R.string.edge_nav, - R.string.right_and_left_nav, - R.string.disabled_nav, + MR.strings.label_default, + MR.strings.l_nav, + MR.strings.kindlish_nav, + MR.strings.edge_nav, + MR.strings.right_and_left_nav, + MR.strings.disabled_nav, ) val ImageScaleType = listOf( - R.string.scale_type_fit_screen, - R.string.scale_type_stretch, - R.string.scale_type_fit_width, - R.string.scale_type_fit_height, - R.string.scale_type_original_size, - R.string.scale_type_smart_fit, + MR.strings.scale_type_fit_screen, + MR.strings.scale_type_stretch, + MR.strings.scale_type_fit_width, + MR.strings.scale_type_fit_height, + MR.strings.scale_type_original_size, + MR.strings.scale_type_smart_fit, ) val ZoomStart = listOf( - R.string.zoom_start_automatic, - R.string.zoom_start_left, - R.string.zoom_start_right, - R.string.zoom_start_center, + MR.strings.zoom_start_automatic, + MR.strings.zoom_start_left, + MR.strings.zoom_start_right, + MR.strings.zoom_start_center, ) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReadingMode.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReadingMode.kt index 963aa830bf..81c64c0cc0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReadingMode.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReadingMode.kt @@ -1,7 +1,7 @@ package eu.kanade.tachiyomi.ui.reader.setting import androidx.annotation.DrawableRes -import androidx.annotation.StringRes +import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.reader.ReaderActivity import eu.kanade.tachiyomi.ui.reader.viewer.Viewer @@ -9,21 +9,22 @@ import eu.kanade.tachiyomi.ui.reader.viewer.pager.L2RPagerViewer import eu.kanade.tachiyomi.ui.reader.viewer.pager.R2LPagerViewer import eu.kanade.tachiyomi.ui.reader.viewer.pager.VerticalPagerViewer import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer +import tachiyomi.i18n.MR enum class ReadingMode( - @StringRes val stringRes: Int, + val stringRes: StringResource, @DrawableRes val iconRes: Int, val flagValue: Int, val direction: Direction? = null, val type: ViewerType? = null, ) { - DEFAULT(R.string.label_default, R.drawable.ic_reader_default_24dp, 0x00000000), - LEFT_TO_RIGHT(R.string.left_to_right_viewer, R.drawable.ic_reader_ltr_24dp, 0x00000001), - RIGHT_TO_LEFT(R.string.right_to_left_viewer, R.drawable.ic_reader_rtl_24dp, 0x00000002), - VERTICAL(R.string.vertical_viewer, R.drawable.ic_reader_vertical_24dp, 0x00000003), - WEBTOON(R.string.webtoon_viewer, R.drawable.ic_reader_webtoon_24dp, 0x00000004), + DEFAULT(MR.strings.label_default, R.drawable.ic_reader_default_24dp, 0x00000000), + LEFT_TO_RIGHT(MR.strings.left_to_right_viewer, R.drawable.ic_reader_ltr_24dp, 0x00000001), + RIGHT_TO_LEFT(MR.strings.right_to_left_viewer, R.drawable.ic_reader_rtl_24dp, 0x00000002), + VERTICAL(MR.strings.vertical_viewer, R.drawable.ic_reader_vertical_24dp, 0x00000003), + WEBTOON(MR.strings.webtoon_viewer, R.drawable.ic_reader_webtoon_24dp, 0x00000004), CONTINUOUS_VERTICAL( - R.string.vertical_plus_viewer, + MR.strings.vertical_plus_viewer, R.drawable.ic_reader_continuous_vertical_24dp, 0x00000005, ), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ViewerNavigation.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ViewerNavigation.kt index 8b549117f8..61b7647a20 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ViewerNavigation.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ViewerNavigation.kt @@ -3,32 +3,32 @@ package eu.kanade.tachiyomi.ui.reader.viewer import android.graphics.Color import android.graphics.PointF import android.graphics.RectF -import androidx.annotation.StringRes -import eu.kanade.tachiyomi.R +import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.util.lang.invert +import tachiyomi.i18n.MR abstract class ViewerNavigation { - sealed class NavigationRegion(@StringRes val nameRes: Int, val color: Int) { + sealed class NavigationRegion(val nameRes: StringResource, val color: Int) { data object MENU : NavigationRegion( - R.string.action_menu, + MR.strings.action_menu, Color.argb(0xCC, 0x95, 0x81, 0x8D), ) data object PREV : NavigationRegion( - R.string.nav_zone_prev, + MR.strings.nav_zone_prev, Color.argb(0xCC, 0xFF, 0x77, 0x33), ) data object NEXT : NavigationRegion( - R.string.nav_zone_next, + MR.strings.nav_zone_next, Color.argb(0xCC, 0x84, 0xE2, 0x96), ) data object LEFT : NavigationRegion( - R.string.nav_zone_left, + MR.strings.nav_zone_left, Color.argb(0xCC, 0x7D, 0x11, 0x28), ) data object RIGHT : NavigationRegion( - R.string.nav_zone_right, + MR.strings.nav_zone_right, Color.argb(0xCC, 0xA6, 0xCF, 0xD5), ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerTransitionHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerTransitionHolder.kt index 7ba46f5e00..6adb5fcef1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerTransitionHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerTransitionHolder.kt @@ -10,7 +10,6 @@ import android.view.ViewGroup.LayoutParams.WRAP_CONTENT import android.widget.LinearLayout import androidx.appcompat.widget.AppCompatTextView import com.google.android.material.progressindicator.CircularProgressIndicator -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.reader.model.ChapterTransition import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import eu.kanade.tachiyomi.ui.reader.viewer.ReaderButton @@ -21,6 +20,8 @@ import kotlinx.coroutines.Job import kotlinx.coroutines.MainScope import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR /** * View of the ViewPager that contains a chapter transition. @@ -104,7 +105,7 @@ class PagerTransitionHolder( val textView = AppCompatTextView(context).apply { wrapContent() - setText(R.string.transition_pages_loading) + text = context.stringResource(MR.strings.transition_pages_loading) } pagesContainer.addView(progress) @@ -117,13 +118,13 @@ class PagerTransitionHolder( private fun setError(error: Throwable) { val textView = AppCompatTextView(context).apply { wrapContent() - text = context.getString(R.string.transition_pages_error, error.message) + text = context.stringResource(MR.strings.transition_pages_error, error.message ?: "") } val retryBtn = ReaderButton(context).apply { viewer = this@PagerTransitionHolder.viewer wrapContent() - setText(R.string.action_retry) + text = context.stringResource(MR.strings.action_retry) setOnClickListener { val toChapter = transition.to if (toChapter != null) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonTransitionHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonTransitionHolder.kt index 6ac3c9813d..65629799e4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonTransitionHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonTransitionHolder.kt @@ -9,7 +9,6 @@ import androidx.appcompat.widget.AppCompatTextView import androidx.core.view.isNotEmpty import androidx.core.view.isVisible import com.google.android.material.progressindicator.CircularProgressIndicator -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.reader.model.ChapterTransition import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import eu.kanade.tachiyomi.ui.reader.viewer.ReaderTransitionView @@ -18,6 +17,8 @@ import kotlinx.coroutines.Job import kotlinx.coroutines.MainScope import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR /** * Holder of the webtoon viewer that contains a chapter transition. @@ -106,7 +107,7 @@ class WebtoonTransitionHolder( val textView = AppCompatTextView(context).apply { wrapContent() - setText(R.string.transition_pages_loading) + text = context.stringResource(MR.strings.transition_pages_loading) } pagesContainer.addView(progress) @@ -119,12 +120,12 @@ class WebtoonTransitionHolder( private fun setError(error: Throwable, transition: ChapterTransition) { val textView = AppCompatTextView(context).apply { wrapContent() - text = context.getString(R.string.transition_pages_error, error.message) + text = context.stringResource(MR.strings.transition_pages_error, error.message ?: "") } val retryBtn = AppCompatButton(context).apply { wrapContent() - setText(R.string.action_retry) + text = context.stringResource(MR.strings.action_retry) setOnClickListener { val toChapter = transition.to if (toChapter != null) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/security/UnlockActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/security/UnlockActivity.kt index 09ec00169a..557da5bdd5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/security/UnlockActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/security/UnlockActivity.kt @@ -3,13 +3,14 @@ package eu.kanade.tachiyomi.ui.security import android.os.Bundle import androidx.biometric.BiometricPrompt import androidx.fragment.app.FragmentActivity -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.base.activity.BaseActivity import eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegate import eu.kanade.tachiyomi.util.system.AuthenticatorUtil import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.startAuthentication import logcat.LogPriority +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.system.logcat +import tachiyomi.i18n.MR /** * Blank activity with a BiometricPrompt. @@ -19,7 +20,7 @@ class UnlockActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) startAuthentication( - getString(R.string.unlock_app_title, getString(R.string.app_name)), + stringResource(MR.strings.unlock_app_title, stringResource(MR.strings.app_name)), confirmationRequired = false, callback = object : AuthenticatorUtil.AuthenticationCallback() { override fun onAuthenticationError( diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsTab.kt index 44b54740ac..79d7ed0bcd 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsTab.kt @@ -6,7 +6,6 @@ import androidx.compose.animation.graphics.vector.AnimatedImageVector import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import cafe.adriel.voyager.navigator.tab.LocalTabNavigator import cafe.adriel.voyager.navigator.tab.TabOptions import eu.kanade.presentation.components.TabbedScreen @@ -16,6 +15,8 @@ import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.stats.anime.animeStatsTab import eu.kanade.tachiyomi.ui.stats.manga.mangaStatsTab import kotlinx.collections.immutable.persistentListOf +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource data class StatsTab( private val isManga: Boolean = false, @@ -28,7 +29,7 @@ data class StatsTab( val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_updates_enter) return TabOptions( index = 8u, - title = stringResource(R.string.label_stats), + title = stringResource(MR.strings.label_stats), icon = rememberAnimatedVectorPainter(image, isSelected), ) } @@ -38,7 +39,7 @@ data class StatsTab( val context = LocalContext.current TabbedScreen( - titleRes = R.string.label_stats, + titleRes = MR.strings.label_stats, tabs = persistentListOf( animeStatsTab(), mangaStatsTab(), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/stats/anime/AnimeStatsTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/stats/anime/AnimeStatsTab.kt index a66818662a..c17686aa40 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/stats/anime/AnimeStatsTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/stats/anime/AnimeStatsTab.kt @@ -10,7 +10,7 @@ import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.components.TabContent import eu.kanade.presentation.more.stats.AnimeStatsScreenContent import eu.kanade.presentation.more.stats.StatsScreenState -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR import tachiyomi.presentation.core.screens.LoadingScreen @Composable @@ -25,7 +25,7 @@ fun Screen.animeStatsTab(): TabContent { } return TabContent( - titleRes = R.string.label_anime, + titleRes = MR.strings.label_anime, content = { contentPadding, _ -> if (state is StatsScreenState.Loading) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/stats/manga/MangaStatsTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/stats/manga/MangaStatsTab.kt index 0ad219fe05..eedde8c364 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/stats/manga/MangaStatsTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/stats/manga/MangaStatsTab.kt @@ -10,7 +10,7 @@ import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.components.TabContent import eu.kanade.presentation.more.stats.MangaStatsScreenContent import eu.kanade.presentation.more.stats.StatsScreenState -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR import tachiyomi.presentation.core.screens.LoadingScreen @Composable @@ -25,7 +25,7 @@ fun Screen.mangaStatsTab(): TabContent { } return TabContent( - titleRes = R.string.label_manga, + titleRes = MR.strings.label_manga, content = { contentPadding, _ -> if (state is StatsScreenState.Loading) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/storage/StorageTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/storage/StorageTab.kt index 8cd4111330..5f9c376a55 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/storage/StorageTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/storage/StorageTab.kt @@ -6,7 +6,6 @@ import androidx.compose.animation.graphics.vector.AnimatedImageVector import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import cafe.adriel.voyager.navigator.tab.LocalTabNavigator import cafe.adriel.voyager.navigator.tab.TabOptions import eu.kanade.presentation.components.TabbedScreen @@ -16,6 +15,8 @@ import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.storage.anime.animeStorageTab import eu.kanade.tachiyomi.ui.storage.manga.mangaStorageTab import kotlinx.collections.immutable.persistentListOf +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource data class StorageTab( private val isManga: Boolean = false, @@ -28,7 +29,7 @@ data class StorageTab( val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_updates_enter) return TabOptions( index = 8u, - title = stringResource(R.string.label_storage), + title = stringResource(MR.strings.label_storage), icon = rememberAnimatedVectorPainter(image, isSelected), ) } @@ -38,7 +39,7 @@ data class StorageTab( val context = LocalContext.current TabbedScreen( - titleRes = R.string.label_storage, + titleRes = MR.strings.label_storage, tabs = persistentListOf( animeStorageTab(), mangaStorageTab(), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/storage/anime/AnimeStorageTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/storage/anime/AnimeStorageTab.kt index b0739763f3..66ebcf64dd 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/storage/anime/AnimeStorageTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/storage/anime/AnimeStorageTab.kt @@ -9,7 +9,7 @@ import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.components.TabContent import eu.kanade.presentation.more.storage.StorageScreenContent -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR @Composable fun Screen.animeStorageTab(): TabContent { @@ -19,7 +19,7 @@ fun Screen.animeStorageTab(): TabContent { val state by screenModel.state.collectAsState() return TabContent( - titleRes = R.string.label_anime, + titleRes = MR.strings.label_anime, content = { contentPadding, _ -> StorageScreenContent( state = state, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/storage/manga/MangaStorageTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/storage/manga/MangaStorageTab.kt index b6996841b2..c7c9e4f347 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/storage/manga/MangaStorageTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/storage/manga/MangaStorageTab.kt @@ -9,7 +9,7 @@ import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.components.TabContent import eu.kanade.presentation.more.storage.StorageScreenContent -import eu.kanade.tachiyomi.R +import tachiyomi.i18n.MR @Composable fun Screen.mangaStorageTab(): TabContent { @@ -19,7 +19,7 @@ fun Screen.mangaStorageTab(): TabContent { val state by screenModel.state.collectAsState() return TabContent( - titleRes = R.string.label_manga, + titleRes = MR.strings.label_manga, content = { contentPadding, _ -> StorageScreenContent( state = state, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesTab.kt index b1ad1ed1e2..5ddc5bc77e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesTab.kt @@ -6,7 +6,6 @@ import androidx.compose.animation.graphics.vector.AnimatedImageVector import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.tab.LocalTabNavigator import cafe.adriel.voyager.navigator.tab.TabOptions @@ -18,6 +17,8 @@ import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.updates.anime.animeUpdatesTab import eu.kanade.tachiyomi.ui.updates.manga.mangaUpdatesTab import kotlinx.collections.immutable.persistentListOf +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource data class UpdatesTab( private val fromMore: Boolean, @@ -32,7 +33,7 @@ data class UpdatesTab( val index: UShort = if (fromMore) 5u else if (inMiddle) 2u else 1u return TabOptions( index = index, - title = stringResource(R.string.label_recent_updates), + title = stringResource(MR.strings.label_recent_updates), icon = rememberAnimatedVectorPainter(image, isSelected), ) } @@ -45,7 +46,7 @@ data class UpdatesTab( val context = LocalContext.current TabbedScreen( - titleRes = R.string.label_recent_updates, + titleRes = MR.strings.label_recent_updates, tabs = persistentListOf( animeUpdatesTab(context, fromMore), mangaUpdatesTab(context, fromMore), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/updates/anime/AnimeUpdatesTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/updates/anime/AnimeUpdatesTab.kt index 003bc09cfe..1c04f12afe 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/updates/anime/AnimeUpdatesTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/updates/anime/AnimeUpdatesTab.kt @@ -11,7 +11,6 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.ui.res.stringResource import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.LocalNavigator @@ -22,14 +21,16 @@ import eu.kanade.presentation.components.TabContent import eu.kanade.presentation.entries.anime.EpisodeOptionsDialogScreen import eu.kanade.presentation.updates.UpdatesDeleteConfirmationDialog import eu.kanade.presentation.updates.anime.AnimeUpdateScreen -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.entries.anime.AnimeScreen import eu.kanade.tachiyomi.ui.home.HomeScreen import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.flow.collectLatest +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchIO +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import uy.kohesive.injekt.injectLazy @Composable @@ -52,7 +53,7 @@ fun Screen.animeUpdatesTab( } return TabContent( - titleRes = R.string.label_anime_updates, + titleRes = MR.strings.label_anime_updates, searchEnabled = false, content = { contentPadding, _ -> AnimeUpdateScreen( @@ -107,17 +108,17 @@ fun Screen.animeUpdatesTab( screenModel.events.collectLatest { event -> when (event) { AnimeUpdatesScreenModel.Event.InternalError -> screenModel.snackbarHostState.showSnackbar( - context.getString( - R.string.internal_error, + context.stringResource( + MR.strings.internal_error, ), ) is AnimeUpdatesScreenModel.Event.LibraryUpdateTriggered -> { val msg = if (event.started) { - R.string.updating_library + MR.strings.updating_library } else { - R.string.update_already_running + MR.strings.update_already_running } - screenModel.snackbarHostState.showSnackbar(context.getString(msg)) + screenModel.snackbarHostState.showSnackbar(context.stringResource(msg)) } } } @@ -144,12 +145,12 @@ fun Screen.animeUpdatesTab( if (screenModel.state.collectAsState().value.selected.isNotEmpty()) { persistentListOf( AppBar.Action( - title = stringResource(R.string.action_select_all), + title = stringResource(MR.strings.action_select_all), icon = Icons.Outlined.SelectAll, onClick = { screenModel.toggleAllSelection(true) }, ), AppBar.Action( - title = stringResource(R.string.action_select_inverse), + title = stringResource(MR.strings.action_select_inverse), icon = Icons.Outlined.FlipToBack, onClick = { screenModel.invertSelection() }, ), @@ -157,7 +158,7 @@ fun Screen.animeUpdatesTab( } else { persistentListOf( AppBar.Action( - title = stringResource(R.string.action_update_library), + title = stringResource(MR.strings.action_update_library), icon = Icons.Outlined.Refresh, onClick = { screenModel.updateLibrary() }, ), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/updates/manga/MangaUpdatesTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/updates/manga/MangaUpdatesTab.kt index 97fc588b6e..12fbd3df42 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/updates/manga/MangaUpdatesTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/updates/manga/MangaUpdatesTab.kt @@ -10,7 +10,6 @@ import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue -import androidx.compose.ui.res.stringResource import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.LocalNavigator @@ -19,13 +18,15 @@ import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.TabContent import eu.kanade.presentation.updates.UpdatesDeleteConfirmationDialog import eu.kanade.presentation.updates.manga.MangaUpdateScreen -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.entries.manga.MangaScreen import eu.kanade.tachiyomi.ui.home.HomeScreen import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.reader.ReaderActivity import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.flow.collectLatest +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource @Composable fun Screen.mangaUpdatesTab( @@ -39,7 +40,7 @@ fun Screen.mangaUpdatesTab( val navigateUp: (() -> Unit)? = if (fromMore) navigator::pop else null return TabContent( - titleRes = R.string.label_updates, + titleRes = MR.strings.label_updates, searchEnabled = false, content = { contentPadding, _ -> MangaUpdateScreen( @@ -80,17 +81,17 @@ fun Screen.mangaUpdatesTab( screenModel.events.collectLatest { event -> when (event) { MangaUpdatesScreenModel.Event.InternalError -> screenModel.snackbarHostState.showSnackbar( - context.getString( - R.string.internal_error, + context.stringResource( + MR.strings.internal_error, ), ) is MangaUpdatesScreenModel.Event.LibraryUpdateTriggered -> { val msg = if (event.started) { - R.string.updating_library + MR.strings.updating_library } else { - R.string.update_already_running + MR.strings.update_already_running } - screenModel.snackbarHostState.showSnackbar(context.getString(msg)) + screenModel.snackbarHostState.showSnackbar(context.stringResource(msg)) } } } @@ -117,12 +118,12 @@ fun Screen.mangaUpdatesTab( if (screenModel.state.collectAsState().value.selected.isNotEmpty()) { persistentListOf( AppBar.Action( - title = stringResource(R.string.action_select_all), + title = stringResource(MR.strings.action_select_all), icon = Icons.Outlined.SelectAll, onClick = { screenModel.toggleAllSelection(true) }, ), AppBar.Action( - title = stringResource(R.string.action_select_inverse), + title = stringResource(MR.strings.action_select_inverse), icon = Icons.Outlined.FlipToBack, onClick = { screenModel.invertSelection() }, ), @@ -130,7 +131,7 @@ fun Screen.mangaUpdatesTab( } else { persistentListOf( AppBar.Action( - title = stringResource(R.string.action_update_library), + title = stringResource(MR.strings.action_update_library), icon = Icons.Outlined.Refresh, onClick = { screenModel.updateLibrary() }, ), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt index 1d9974cc18..ccf49ccb32 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt @@ -22,6 +22,7 @@ import okhttp3.HttpUrl.Companion.toHttpUrl import tachiyomi.core.util.system.logcat import tachiyomi.domain.source.anime.service.AnimeSourceManager import tachiyomi.domain.source.manga.service.MangaSourceManager +import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy class WebViewActivity : BaseActivity() { @@ -41,7 +42,7 @@ class WebViewActivity : BaseActivity() { super.onCreate(savedInstanceState) if (!WebViewUtil.supportsWebView(this)) { - toast(R.string.information_webview_required, Toast.LENGTH_LONG) + toast(MR.strings.information_webview_required, Toast.LENGTH_LONG) finish() return } diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/AniSkipApi.kt b/app/src/main/java/eu/kanade/tachiyomi/util/AniSkipApi.kt index e6b62e908c..4ff2ec5d37 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/AniSkipApi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/AniSkipApi.kt @@ -4,7 +4,6 @@ import android.annotation.SuppressLint import android.view.View import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.view.updateLayoutParams -import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.databinding.PlayerActivityBinding import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST @@ -13,13 +12,14 @@ import eu.kanade.tachiyomi.ui.player.PlayerActivity import `is`.xyz.mpv.MPVLib import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable -import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json import kotlinx.serialization.json.buildJsonObject import kotlinx.serialization.json.put import okhttp3.OkHttpClient import okhttp3.RequestBody.Companion.toRequestBody +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.withUIContext +import tachiyomi.i18n.MR import uy.kohesive.injekt.injectLazy class AniSkipApi { @@ -70,14 +70,14 @@ class AniSkipApi { internal suspend fun showSkipButton(skipType: SkipType) { val skipButtonString = when (skipType) { - SkipType.ED -> R.string.player_aniskip_ed - SkipType.OP -> R.string.player_aniskip_op - SkipType.RECAP -> R.string.player_aniskip_recap - SkipType.MIXED_OP -> R.string.player_aniskip_mixedOp + SkipType.ED -> MR.strings.player_aniskip_ed + SkipType.OP -> MR.strings.player_aniskip_op + SkipType.RECAP -> MR.strings.player_aniskip_recap + SkipType.MIXED_OP -> MR.strings.player_aniskip_mixedOp } withUIContext { playerControls.binding.controlsSkipIntroBtn.visibility = View.VISIBLE - playerControls.binding.controlsSkipIntroBtn.text = activity.getString( + playerControls.binding.controlsSkipIntroBtn.text = activity.stringResource( skipButtonString, ) } @@ -96,8 +96,8 @@ class AniSkipApi { if (waitingTime > 0) { withUIContext { playerControls.binding.controlsSkipIntroBtn.visibility = View.VISIBLE - playerControls.binding.controlsSkipIntroBtn.text = activity.getString( - R.string.player_aniskip_dontskip, + playerControls.binding.controlsSkipIntroBtn.text = activity.stringResource( + MR.strings.player_aniskip_dontskip, ) } } else { @@ -111,8 +111,8 @@ class AniSkipApi { } fun skipAnimation(skipType: SkipType) { - binding.secondsView.binding.doubleTapSeconds.text = activity.getString( - R.string.player_aniskip_skip, + binding.secondsView.binding.doubleTapSeconds.text = activity.stringResource( + MR.strings.player_aniskip_skip, skipType.getString(), ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/lang/DateExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/lang/DateExtensions.kt index 797890ef58..9c8f7bfc9b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/lang/DateExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/lang/DateExtensions.kt @@ -2,6 +2,8 @@ package eu.kanade.tachiyomi.util.lang import android.content.Context import eu.kanade.tachiyomi.R +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR import java.text.DateFormat import java.time.Instant import java.time.LocalDateTime @@ -61,7 +63,7 @@ fun Date.toRelativeString( val days = difference.floorDiv(MILLISECONDS_IN_DAY).toInt() return when { difference < 0 -> dateFormat.format(this) - difference < MILLISECONDS_IN_DAY -> context.getString(R.string.relative_time_today) + difference < MILLISECONDS_IN_DAY -> context.stringResource(MR.strings.relative_time_today) difference < MILLISECONDS_IN_DAY.times(7) -> context.resources.getQuantityString( R.plurals.relative_time, days, diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/AuthenticatorUtil.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/AuthenticatorUtil.kt index 1de4158189..ce3a091417 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/system/AuthenticatorUtil.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/AuthenticatorUtil.kt @@ -10,8 +10,9 @@ import androidx.biometric.auth.AuthPromptCallback import androidx.biometric.auth.startClass2BiometricOrCredentialAuthentication import androidx.core.content.ContextCompat import androidx.fragment.app.FragmentActivity -import eu.kanade.tachiyomi.R import kotlinx.coroutines.suspendCancellableCoroutine +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR import kotlin.coroutines.resume object AuthenticatorUtil { @@ -48,7 +49,7 @@ object AuthenticatorUtil { suspend fun FragmentActivity.authenticate( title: String, - subtitle: String? = getString(R.string.confirm_lock_change), + subtitle: String? = stringResource(MR.strings.confirm_lock_change), ): Boolean = suspendCancellableCoroutine { cont -> if (!isAuthenticationSupported()) { cont.resume(true) diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt index 6061181494..423c7067d0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/ContextExtensions.kt @@ -24,7 +24,9 @@ import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.util.lang.truncateCenter import logcat.LogPriority import rikka.sui.Sui +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.system.logcat +import tachiyomi.i18n.MR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.io.File @@ -45,11 +47,11 @@ fun Context.copyToClipboard(label: String, content: String) { // Android 13 and higher shows a visual confirmation of copied contents // https://developer.android.com/about/versions/13/features/copy-paste if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) { - toast(getString(R.string.copied_to_clipboard, content.truncateCenter(50))) + toast(stringResource(MR.strings.copied_to_clipboard, content.truncateCenter(50))) } } catch (e: Throwable) { logcat(LogPriority.ERROR, e) - toast(R.string.clipboard_copy_error) + toast(MR.strings.clipboard_copy_error) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/IntentExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/IntentExtensions.kt index ac26265cd8..ed4ce04f53 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/system/IntentExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/IntentExtensions.kt @@ -6,7 +6,8 @@ import android.content.Intent import android.net.Uri import android.os.Build import androidx.core.content.IntentCompat -import eu.kanade.tachiyomi.R +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR import java.io.Serializable fun Uri.toShareIntent(context: Context, type: String = "image/*", message: String? = null): Intent { @@ -27,7 +28,7 @@ fun Uri.toShareIntent(context: Context, type: String = "image/*", message: Strin flags = Intent.FLAG_GRANT_READ_URI_PERMISSION } - return Intent.createChooser(shareIntent, context.getString(R.string.action_share)).apply { + return Intent.createChooser(shareIntent, context.stringResource(MR.strings.action_share)).apply { flags = Intent.FLAG_ACTIVITY_NEW_TASK } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/LocaleHelper.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/LocaleHelper.kt index bb24c849b4..e78619af0c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/system/LocaleHelper.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/LocaleHelper.kt @@ -2,7 +2,8 @@ package eu.kanade.tachiyomi.util.system import android.content.Context import androidx.core.os.LocaleListCompat -import eu.kanade.tachiyomi.R +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR import java.util.Locale /** @@ -28,10 +29,10 @@ object LocaleHelper { */ fun getSourceDisplayName(lang: String?, context: Context): String { return when (lang) { - LAST_USED_KEY -> context.getString(R.string.last_used_source) - PINNED_KEY -> context.getString(R.string.pinned_sources) - "other" -> context.getString(R.string.other_source) - "all" -> context.getString(R.string.multi_lang) + LAST_USED_KEY -> context.stringResource(MR.strings.last_used_source) + PINNED_KEY -> context.stringResource(MR.strings.pinned_sources) + "other" -> context.stringResource(MR.strings.other_source) + "all" -> context.stringResource(MR.strings.multi_lang) else -> getDisplayName(lang) } } diff --git a/app/src/main/java/eu/kanade/test/DummyTracker.kt b/app/src/main/java/eu/kanade/test/DummyTracker.kt index 5b1d411452..5b9e39218b 100644 --- a/app/src/main/java/eu/kanade/test/DummyTracker.kt +++ b/app/src/main/java/eu/kanade/test/DummyTracker.kt @@ -1,6 +1,7 @@ package eu.kanade.test import android.graphics.Color +import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.track.Tracker import eu.kanade.tachiyomi.data.track.model.AnimeTrackSearch @@ -8,6 +9,7 @@ import eu.kanade.tachiyomi.data.track.model.MangaTrackSearch import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import okhttp3.OkHttpClient +import tachiyomi.i18n.MR data class DummyTracker( override val id: Long, @@ -31,15 +33,15 @@ data class DummyTracker( override fun getLogo(): Int = valLogo - override fun getStatus(status: Int): Int? = when (status) { - 1 -> R.string.reading - 2 -> R.string.plan_to_read - 3 -> R.string.completed - 4 -> R.string.on_hold - 5 -> R.string.dropped - 6 -> R.string.repeating - 7 -> R.string.watching - 8 -> R.string.plan_to_watch + override fun getStatus(status: Int): StringResource? = when (status) { + 1 -> MR.strings.reading + 2 -> MR.strings.plan_to_read + 3 -> MR.strings.completed + 4 -> MR.strings.on_hold + 5 -> MR.strings.dropped + 6 -> MR.strings.repeating + 7 -> MR.strings.watching + 8 -> MR.strings.plan_to_watch else -> null } diff --git a/build.gradle.kts b/build.gradle.kts index 6295920a15..20ad0c1b28 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,6 +8,7 @@ buildscript { classpath(libs.android.shortcut.gradle) classpath(libs.aboutLibraries.gradle) classpath(libs.sqldelight.gradle) + classpath(libs.moko.gradle) } } diff --git a/buildSrc/src/main/kotlin/Commands.kt b/buildSrc/src/main/kotlin/Commands.kt index 2154489897..774daf8fee 100644 --- a/buildSrc/src/main/kotlin/Commands.kt +++ b/buildSrc/src/main/kotlin/Commands.kt @@ -1,8 +1,8 @@ +import org.gradle.api.Project import java.io.ByteArrayOutputStream import java.text.SimpleDateFormat import java.util.Date import java.util.TimeZone -import org.gradle.api.Project // Git is needed in your system PATH for these commands to work. // If it's not installed, you can return a random value as a workaround diff --git a/buildSrc/src/main/kotlin/LocalesConfigPlugin.kt b/buildSrc/src/main/kotlin/LocalesConfigPlugin.kt index 45d526abd3..59d254a85e 100644 --- a/buildSrc/src/main/kotlin/LocalesConfigPlugin.kt +++ b/buildSrc/src/main/kotlin/LocalesConfigPlugin.kt @@ -9,18 +9,19 @@ private val valuesPrefix = "values(-(b\\+)?)?".toRegex() fun TaskContainerScope.registerLocalesConfigTask(project: Project): TaskProvider { return with(project) { register("generateLocalesConfig") { - val languages = fileTree("$projectDir/src/main/res/") + val languages = fileTree("$projectDir/src/commonMain/resources/MR/") .matching { include("**/strings.xml") } .filterNot { it.readText().contains(emptyResourcesElement) } - .map { it.parentFile.name } - .sorted() - .joinToString(separator = "\n") { - val language = it - .replace(valuesPrefix, "") + .map { + it.parentFile.name + .replace("base", "en") .replace("-r", "-") .replace("+", "-") .takeIf(String::isNotBlank) ?: "en" - " " + } + .sorted() + .joinToString(separator = "\n") { + " " } val content = """ @@ -30,7 +31,7 @@ $languages """.trimIndent() - val localeFile = file("$projectDir/src/main/res/xml/locales_config.xml") + val localeFile = file("$projectDir/src/androidMain/res/xml/locales_config.xml") localeFile.parentFile.mkdirs() localeFile.writeText(content) } diff --git a/buildSrc/src/main/kotlin/tachiyomi.lint.gradle.kts b/buildSrc/src/main/kotlin/tachiyomi.lint.gradle.kts index d739b0caf3..21612468e6 100644 --- a/buildSrc/src/main/kotlin/tachiyomi.lint.gradle.kts +++ b/buildSrc/src/main/kotlin/tachiyomi.lint.gradle.kts @@ -11,5 +11,13 @@ extensions.configure("ktlint") { filter { exclude("**/generated/**") + + // For some reason this is needed for Kotlin MPP + exclude { tree -> + val path = tree.file.path + listOf("/generated/").any { + path.contains(it) + } + } } } diff --git a/core/src/main/java/eu/kanade/tachiyomi/core/security/SecurityPreferences.kt b/core/src/main/java/eu/kanade/tachiyomi/core/security/SecurityPreferences.kt index f27b1a44c4..faf2683146 100644 --- a/core/src/main/java/eu/kanade/tachiyomi/core/security/SecurityPreferences.kt +++ b/core/src/main/java/eu/kanade/tachiyomi/core/security/SecurityPreferences.kt @@ -1,9 +1,10 @@ package eu.kanade.tachiyomi.core.security -import eu.kanade.tachiyomi.core.R +import dev.icerock.moko.resources.StringResource import tachiyomi.core.preference.Preference import tachiyomi.core.preference.PreferenceStore import tachiyomi.core.preference.getEnum +import tachiyomi.i18n.MR class SecurityPreferences( private val preferenceStore: PreferenceStore, @@ -26,9 +27,9 @@ class SecurityPreferences( 0, ) - enum class SecureScreenMode(val titleResId: Int) { - ALWAYS(R.string.lock_always), - INCOGNITO(R.string.pref_incognito_mode), - NEVER(R.string.lock_never), + enum class SecureScreenMode(val titleRes: StringResource) { + ALWAYS(MR.strings.lock_always), + INCOGNITO(MR.strings.pref_incognito_mode), + NEVER(MR.strings.lock_never), } } diff --git a/core/src/main/java/eu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor.kt b/core/src/main/java/eu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor.kt index 25b5a140a6..2d48c05217 100644 --- a/core/src/main/java/eu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor.kt +++ b/core/src/main/java/eu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor.kt @@ -5,16 +5,16 @@ import android.content.Context import android.webkit.WebView import android.widget.Toast import androidx.core.content.ContextCompat -import eu.kanade.tachiyomi.core.R import eu.kanade.tachiyomi.network.AndroidCookieJar import eu.kanade.tachiyomi.util.system.WebViewClientCompat import eu.kanade.tachiyomi.util.system.isOutdated -import eu.kanade.tachiyomi.util.system.toast import okhttp3.Cookie import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.Interceptor import okhttp3.Request import okhttp3.Response +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR import java.io.IOException import java.util.concurrent.CountDownLatch @@ -44,7 +44,7 @@ class CloudflareInterceptor( // Because OkHttp's enqueue only handles IOExceptions, wrap the exception so that // we don't crash the entire app catch (e: CloudflareBypassException) { - throw IOException(context.getString(R.string.information_cloudflare_bypass_failure), e) + throw IOException(context.stringResource(MR.strings.information_cloudflare_bypass_failure), e) } catch (e: Exception) { throw IOException(e) } @@ -126,7 +126,7 @@ class CloudflareInterceptor( if (!cloudflareBypassed) { // Prompt user to update WebView if it seems too outdated if (isWebViewOutdated) { - context.toast(R.string.information_webview_outdated, Toast.LENGTH_LONG) + context.stringResource(MR.strings.information_webview_outdated, Toast.LENGTH_LONG) } throw CloudflareBypassException() diff --git a/core/src/main/java/eu/kanade/tachiyomi/network/interceptor/WebViewInterceptor.kt b/core/src/main/java/eu/kanade/tachiyomi/network/interceptor/WebViewInterceptor.kt index 356a993665..4052cbbf42 100644 --- a/core/src/main/java/eu/kanade/tachiyomi/network/interceptor/WebViewInterceptor.kt +++ b/core/src/main/java/eu/kanade/tachiyomi/network/interceptor/WebViewInterceptor.kt @@ -5,17 +5,17 @@ import android.os.Build import android.webkit.WebSettings import android.webkit.WebView import android.widget.Toast -import eu.kanade.tachiyomi.core.R import eu.kanade.tachiyomi.util.system.DeviceUtil import eu.kanade.tachiyomi.util.system.WebViewUtil import eu.kanade.tachiyomi.util.system.setDefaultSettings -import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.DelicateCoroutinesApi import okhttp3.Headers import okhttp3.Interceptor import okhttp3.Request import okhttp3.Response +import tachiyomi.core.i18n.stringResource import tachiyomi.core.util.lang.launchUI +import tachiyomi.i18n.MR import java.util.Locale import java.util.concurrent.CountDownLatch import java.util.concurrent.TimeUnit @@ -59,7 +59,7 @@ abstract class WebViewInterceptor( if (!WebViewUtil.supportsWebView(context)) { launchUI { - context.toast(R.string.information_webview_required, Toast.LENGTH_LONG) + context.stringResource(MR.strings.information_webview_required, Toast.LENGTH_LONG) } return response } diff --git a/core/src/main/java/eu/kanade/tachiyomi/util/system/ToastExtensions.kt b/core/src/main/java/eu/kanade/tachiyomi/util/system/ToastExtensions.kt index de11490687..5089db233f 100644 --- a/core/src/main/java/eu/kanade/tachiyomi/util/system/ToastExtensions.kt +++ b/core/src/main/java/eu/kanade/tachiyomi/util/system/ToastExtensions.kt @@ -2,7 +2,8 @@ package eu.kanade.tachiyomi.util.system import android.content.Context import android.widget.Toast -import androidx.annotation.StringRes +import dev.icerock.moko.resources.StringResource +import tachiyomi.core.i18n.stringResource /** * Display a toast in this context. @@ -11,11 +12,11 @@ import androidx.annotation.StringRes * @param duration the duration of the toast. Defaults to short. */ fun Context.toast( - @StringRes resource: Int, + resource: StringResource, duration: Int = Toast.LENGTH_SHORT, block: (Toast) -> Unit = {}, ): Toast { - return toast(getString(resource), duration, block) + return toast(stringResource(resource), duration, block) } /** diff --git a/core/src/main/java/tachiyomi/core/i18n/Localize.kt b/core/src/main/java/tachiyomi/core/i18n/Localize.kt new file mode 100644 index 0000000000..3c0c7e2169 --- /dev/null +++ b/core/src/main/java/tachiyomi/core/i18n/Localize.kt @@ -0,0 +1,26 @@ +package tachiyomi.core.i18n + +import android.content.Context +import dev.icerock.moko.resources.PluralsResource +import dev.icerock.moko.resources.StringResource +import dev.icerock.moko.resources.desc.Plural +import dev.icerock.moko.resources.desc.PluralFormatted +import dev.icerock.moko.resources.desc.Resource +import dev.icerock.moko.resources.desc.ResourceFormatted +import dev.icerock.moko.resources.desc.StringDesc + +fun Context.stringResource(resource: StringResource): String { + return StringDesc.Resource(resource).toString(this) +} + +fun Context.stringResource(resource: StringResource, vararg args: Any): String { + return StringDesc.ResourceFormatted(resource, *args).toString(this) +} + +fun Context.pluralStringResource(resource: PluralsResource, count: Int): String { + return StringDesc.Plural(resource, count).toString(this) +} + +fun Context.pluralStringResource(resource: PluralsResource, count: Int, vararg args: Any): String { + return StringDesc.PluralFormatted(resource, count, *args).toString(this) +} diff --git a/core/src/main/java/tachiyomi/core/provider/AndroidStorageFolderProvider.kt b/core/src/main/java/tachiyomi/core/provider/AndroidStorageFolderProvider.kt index ba00dd036a..fc2859868b 100644 --- a/core/src/main/java/tachiyomi/core/provider/AndroidStorageFolderProvider.kt +++ b/core/src/main/java/tachiyomi/core/provider/AndroidStorageFolderProvider.kt @@ -3,7 +3,8 @@ package tachiyomi.core.provider import android.content.Context import android.os.Environment import androidx.core.net.toUri -import eu.kanade.tachiyomi.core.R +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR import java.io.File class AndroidStorageFolderProvider( @@ -13,7 +14,7 @@ class AndroidStorageFolderProvider( override fun directory(): File { return File( Environment.getExternalStorageDirectory().absolutePath + File.separator + - context.getString(R.string.app_name), + context.stringResource(MR.strings.app_name), ) } diff --git a/data/src/main/java/tachiyomi/data/entries/anime/AnimeRepositoryImpl.kt b/data/src/main/java/tachiyomi/data/entries/anime/AnimeRepositoryImpl.kt index 89c1368d1d..b2b41e21e3 100644 --- a/data/src/main/java/tachiyomi/data/entries/anime/AnimeRepositoryImpl.kt +++ b/data/src/main/java/tachiyomi/data/entries/anime/AnimeRepositoryImpl.kt @@ -24,7 +24,7 @@ class AnimeRepositoryImpl( } override suspend fun getAnimeByUrlAndSourceId(url: String, sourceId: Long): Anime? { - return handler.awaitOneOrNull(inTransaction = true) { + return handler.awaitOneOrNull { animesQueries.getAnimeByUrlAndSource( url, sourceId, diff --git a/data/src/main/java/tachiyomi/data/entries/manga/MangaRepositoryImpl.kt b/data/src/main/java/tachiyomi/data/entries/manga/MangaRepositoryImpl.kt index 50e64f26a6..f09a386c45 100644 --- a/data/src/main/java/tachiyomi/data/entries/manga/MangaRepositoryImpl.kt +++ b/data/src/main/java/tachiyomi/data/entries/manga/MangaRepositoryImpl.kt @@ -24,7 +24,7 @@ class MangaRepositoryImpl( } override suspend fun getMangaByUrlAndSourceId(url: String, sourceId: Long): Manga? { - return handler.awaitOneOrNull(inTransaction = true) { + return handler.awaitOneOrNull { mangasQueries.getMangaByUrlAndSource( url, sourceId, diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index adc97e9ea0..71202d4e08 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,6 @@ [versions] aboutlib_version = "10.9.2" +moko = "0.23.0" okhttp_version = "5.0.0-alpha.11" shizuku_version = "12.2.0" sqlite = "2.4.0" @@ -7,6 +8,14 @@ sqldelight = "2.0.0" leakcanary = "2.12" voyager = "1.0.0-rc10" richtext = "0.17.0" +agp = "8.1.4" +kotlin = "1.9.0" +core-ktx = "1.12.0" +junit = "4.13.2" +androidx-test-ext-junit = "1.1.5" +espresso-core = "3.5.1" +appcompat = "1.6.1" +material = "1.10.0" [libraries] desugar = "com.android.tools:desugar_jdk_libs:2.0.4" @@ -61,6 +70,9 @@ compose-materialmotion = "io.github.fornewid:material-motion-compose-core:1.1.0" swipe = "me.saket.swipe:swipe:1.2.0" +moko-core = { module = "dev.icerock.moko:resources", version.ref = "moko" } +moko-gradle = { module = "dev.icerock.moko:resources-generator", version.ref = "moko" } + logcat = "com.squareup.logcat:logcat:0.1" acra-http = "ch.acra:acra-http:5.11.3" @@ -98,6 +110,12 @@ arthenica-smartexceptions = "com.arthenica:smart-exception-java:0.1.1" seeker = "io.github.2307vivek:seeker:1.1.1" truetypeparser = "io.github.yubyf:truetypeparser-light:2.1.4" +core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "core-ktx" } +junit-junit = { group = "junit", name = "junit", version.ref = "junit" } +androidx-test-ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "androidx-test-ext-junit" } +espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espresso-core" } +appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } +com-google-android-material-material = { group = "com.google.android.material", name = "material", version.ref = "material" } [bundles] okhttp = ["okhttp-core", "okhttp-logging", "okhttp-brotli", "okhttp-dnsoverhttps"] @@ -109,3 +127,6 @@ sqldelight = ["sqldelight-android-driver", "sqldelight-coroutines", "sqldelight- voyager = ["voyager-navigator", "voyager-tab-navigator", "voyager-transitions"] richtext = ["richtext-commonmark", "richtext-m3"] test = ["junit", "kotest-assertions", "mockk"] +[plugins] +androidLibrary = { id = "com.android.library", version.ref = "agp" } +kotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } diff --git a/i18n/.gitignore b/i18n/.gitignore index 13d1ad6973..601f2b1cd0 100644 --- a/i18n/.gitignore +++ b/i18n/.gitignore @@ -1,5 +1,2 @@ -# Hebrew assets are copied on build -/src/main/res/values-iw/ - # Generated locales_config.xml \ No newline at end of file diff --git a/i18n/build.gradle.kts b/i18n/build.gradle.kts index d2b67c1ba8..891eae7923 100644 --- a/i18n/build.gradle.kts +++ b/i18n/build.gradle.kts @@ -1,16 +1,41 @@ plugins { + kotlin("multiplatform") id("com.android.library") - kotlin("android") + id("dev.icerock.mobile.multiplatform-resources") +} + +kotlin { + androidTarget() + sourceSets { + val commonMain by getting { + dependencies { + api(libs.moko.core) + } + } + val androidMain by getting { + dependsOn(commonMain) // https://github.com/icerockdev/moko-resources/issues/562 + } + } } android { namespace = "tachiyomi.i18n" + sourceSets { + named("main") { + res.srcDirs("src/commonMain/resources", "src/aniyomiMain/resources") + } + } + lint { disable.addAll(listOf("MissingTranslation", "ExtraTranslation")) } } +multiplatformResources { + multiplatformResourcesPackage = "tachiyomi.i18n" +} + tasks { val localesConfigTask = registerLocalesConfigTask(project) @@ -22,7 +47,7 @@ tasks { } preBuild { - dependsOn(copyHebrewStrings, localesConfigTask) + dependsOn(localesConfigTask) } withType { kotlinOptions.freeCompilerArgs += listOf( diff --git a/i18n/src/commonMain/resources/MR/am/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/am/plurals-aniyomi.xml new file mode 100644 index 0000000000..902246dab5 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/am/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/am/plurals.xml b/i18n/src/commonMain/resources/MR/am/plurals.xml new file mode 100644 index 0000000000..651a93e011 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/am/plurals.xml @@ -0,0 +1,15 @@ + + + + %d ምድብ + %d ምድቦች + + + ከ 1 ደቂቃ በኋላ + ከ %1$s ደቂቃዎች በኋላ + + + ከ %2$s ስህተት ጋር በ %1$s ውስጥ ተከናውኗል + ከ %2$s ስህተት ጋር በ %1$s ውስጥ ተከናውኗል + + \ No newline at end of file diff --git a/i18n/src/main/res/values-am/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/am/strings-aniyomi.xml similarity index 72% rename from i18n/src/main/res/values-am/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/am/strings-aniyomi.xml index 1116514adc..804cbd73bc 100644 --- a/i18n/src/main/res/values-am/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/am/strings-aniyomi.xml @@ -4,10 +4,10 @@ ታቺዮሚን ይክፈቱ ነባሪ ምድብ ይህ ቅጥያ ባልታመነ የእውቅና ማረጋገጫ ተፈርሟል እና አልነቃም። -\n -\nተንኮል አዘል ቅጥያ በአኒዮሚ ውስጥ የተከማቸውን ማንኛውንም የሚስጥር ማስረጃዎችን በማንበብ ወይም ያልተፈለገ ስራ ሊፈጽም ይችላል ፡፡ -\n -\nይህን የምስክር ወረቀት በመተማመን እነዚህን አደጋዎች ይቀበላሉ ፡፡ + \n + \nተንኮል አዘል ቅጥያ በአኒዮሚ ውስጥ የተከማቸውን ማንኛውንም የሚስጥር ማስረጃዎችን በማንበብ ወይም ያልተፈለገ ስራ ሊፈጽም ይችላል ፡፡ + \n + \nይህን የምስክር ወረቀት በመተማመን እነዚህን አደጋዎች ይቀበላሉ ፡፡ ምዕራፎችን ሰርዝ በእጅ እንደተነበበ ምልክት ከተደረገ በኋላ ካነበብኩ በኋላ @@ -18,7 +18,8 @@ የምዕራፍ ዝመናዎች የማንጋ ምንጮች የአኒሜ ምንጮች - ማስጠንቀቂያ፡ ቅንብሮችን በምትኬ ላይ ማስቀመጥ የትራኪንግ የይለፍ ቃሎችዎንም ያከማቻል፣ ይህን የምትኬ ፋይል ለሌላ አያጋሩ! + ማስጠንቀቂያ፡ ቅንብሮችን በምትኬ ላይ ማስቀመጥ የትራኪንግ የይለፍ ቃሎችዎንም ያከማቻል፣ + ይህን የምትኬ ፋይል ለሌላ አያጋሩ! ምዕራፎች እና ክፍሎች ክፍሎች የአኒሜ ምድቦች @@ -30,34 +31,6 @@ ማንጋ አኒሜ የእይታ ቆይታ - - - - - - - - - - - - - - - - - - - - - - - - - - - - የማንጋ ዕቃዎች በአንድ ረድፍ የአኒም ዕቃዎች በአንድ ረድፍ ዓለም አቀፍ ማንጋ ፍለጋ diff --git a/i18n/src/main/res/values-am/strings.xml b/i18n/src/commonMain/resources/MR/am/strings.xml similarity index 92% rename from i18n/src/main/res/values-am/strings.xml rename to i18n/src/commonMain/resources/MR/am/strings.xml index 816a12117a..6e374070f2 100644 --- a/i18n/src/main/res/values-am/strings.xml +++ b/i18n/src/commonMain/resources/MR/am/strings.xml @@ -16,11 +16,8 @@ አዘምን ዝመናዎች በመጠባበቅ ላይ ናቸው ሁሉም - - %d ምድብ - %d ምድቦች - ሁል ጊዜም ይጠይቁ + ነባሪ ምድብ ቤተ-መጽሐፍትን ሲያዘምኑ አዲስ ሽፋን እና ዝርዝሮችን ይፈልጉ ዲበ ውሂብን በራስ-ሰር አድስ ቀጣይ ማንጋን ብቻ ያዘምኑ @@ -42,17 +39,12 @@ የማሳወቂያ ይዘትን ደብቅ መተግበሪያዎችን ሲቀይሩ የመተግበሪያ ይዘቶችን ደብቅ እና ቅጽበታዊ ገጽ እይታዎችን ያግዳል ደህንነቱ የተጠበቀ ማያ ገጽ - - ከ 1 ደቂቃ በኋላ - ከ %1$s ደቂቃዎች በኋላ - በጭራሽ ሁል ጊዜ ስራ ሲፈታ ቆልፍ በባዮሜትሪክስ ቆልፍ ደህንነት ማሳወቂያዎችን ያቀናብሩ - መውጫውን ያረጋግጡ የቀን ቅርጸት በርቷል ጠፍቷል @@ -82,7 +74,6 @@ ወደ ላይ ውሰድ በጣም ጥንታዊ በጣም አዲስ - እንደገና አስተካክል ደርድር ሁሉንም ሰርዝ ሰርዝ @@ -136,16 +127,15 @@ ማጣሪያውን ያስወግዱ ያልተነበበ ዕልባት ተደርጓል - ወርዷል ማጣሪያ ምናሌ ማስተካከያዎች - ለመውጣት እንደገና ተመልሰው ይጫኑ ኢክስቴንሽኖች ታሪክ መከታተል ምዕራፎች ማንጋ + ምድቦች ምንም ምድቦች የሉዎትም። ቤተ-መጽሐፍትዎን ለማደራጀት አንድ ለመፍጠር የመደመር አዝራሩን መታ ያድርጉ። ቤተ-መጽሐፍትዎ ባዶ ነው ተከታታዮችን ከአሰሳ ወደ ቤተ-መጽሐፍትዎ ያክሉ። በቅርቡ የተነበበ ነገር የለም @@ -159,16 +149,12 @@ ታሪክ ዝመናዎች ቤተ መጻሕፍት + የሚወርድ ወረፋ ማስተካከያዎች ተጨማሪ ስም ብጁ አካባቢ አካባቢን ያውርዱ - 25% - 20% - 15% - 10% - የለም የጎን ሽፋን ንባብ የንባብ ሁነታ @@ -239,11 +225,12 @@ የለም ተገልብጦ መታ ማድረግ የቅጥያ ዝመናዎች + የምዕራፍ ዝመናዎች ስህተቶች ተጠናቀቀ እድገት የተለመደ - ማውረድ ተጠናቅቋል + ማውረድ ለአፍታ ቆሟል @@ -251,13 +238,11 @@ ምትኬ ተፈጥሯል ከፍተኛ መጠባበቂያዎች የመጠባበቂያ ድግግሞሽ - ራስ-ሰር መጠባበቂያዎች የመጠባበቂያ ቦታ ቤተ-መጽሐፍት ከመጠባበቂያ ፋይል ይመልሱ ምትኬ ወደነበረበት የአሁኑን ቤተ-መጽሐፍት ወደነበረበት ለመመለስ ሊያገለግል ይችላል ምትኬን ይፍጠሩ - የታሰሩ ምንጮችን ብቻ ያካትቱ በክትትል አገልግሎቶች ውስጥ የምዕራፍ እድገትን ለማዘመን የአንድ-መንገድ ማመሳሰል። ከመከታተያ አዝራራቸው የግለሰቦችን የማንጋ ግቤቶች መከታተልን ያዘጋጁ። አገልግሎቶች አዳዲስ ምዕራፎችን ያውርዱ @@ -283,14 +268,9 @@ ምትኬን መፍጠር ምትኬ ለማስቀመጥ ምን ይፈልጋሉ\? ምትኬ ቀድሞውኑ በሂደት ላይ ነው - - ከ %2$s ስህተት ጋር በ %1$s ውስጥ ተከናውኗል - ከ %2$s ስህተት ጋር በ %1$s ውስጥ ተከናውኗል - %02d ደቂቃ ፣ %02d ሰከንድ እነበረበት መልስ ተጠናቅቋል መከታተያዎች አልገቡም: የጠፋ ምንጮች: ምትኬ ማንኛውንም ማንጋ አልያዘም ፡፡ -የሚወርድ ወረፋ - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ar/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/ar/plurals-aniyomi.xml new file mode 100644 index 0000000000..f37ccb003a --- /dev/null +++ b/i18n/src/commonMain/resources/MR/ar/plurals-aniyomi.xml @@ -0,0 +1,59 @@ + + + + ثانية + %d ثانية واحدة + %d ثانيتان + %d ثواني + %d ثانية + %d ثانية + + + حلقة جديدة + 1 حلقة جديدة + حلقتين جديدتين + %1$d حلقات جديدة + %1$d حلقة جديدة + %1$d حلقات جديدة + + + حلقة + أول حلقة + حلقتان + %1$s حلقات + %1$s حلقة + %1$s حلقة + + + الحلقة الغير مشاهدة التالية + الحلقة الغير مشاهدة التالية + الحلقتين الغير مشاهدة التالية + بعض الحلقات %d الغير مشاهدة التالية + الحلقات %d الغير مشاهدة التالية + الحلقات %d الغير مشاهدة التالية + + + لعنوان واحد + لـ 1 عنوان + لعنوانين + لـ %d عناوين + لـ %d عنوان + لـ %d عناوين + + + الحلقات %1$s و 1 أخرى + الحلقات %1$s و 1 أخرى + الحلقات %1$s و حلقتين أخرى + الحلقات %1$s و %2$d أخرى + الحلقات %1$s و %2$d أخرى + الحلقات %1$s و %2$d أخرى + + + لا يوجد + الحلقة التالية + الحلقتان التالية + الحلقات التالية + الحلقات التالية + الحلقات التالية + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ar/plurals.xml b/i18n/src/commonMain/resources/MR/ar/plurals.xml new file mode 100644 index 0000000000..64f4492f9d --- /dev/null +++ b/i18n/src/commonMain/resources/MR/ar/plurals.xml @@ -0,0 +1,131 @@ + + + + لايوجد تحديث للإضافة + يتوفر تحديث لإضافة + يتوفر تحديث لإضافتان + يتوفر تحديث %d إضافات + يتوفر تحديث %d إضافات + يتوفر تحديث %d إضافات + + + الفصول %1$s + الفصول %1$s وفصل آخر + الفصول %1$s و%2$d فصول أخرى + الفصول %1$s و%2$d فصول أخرى + الفصول %1$s و%2$d فصول أخرى + الفصول %1$s و%2$d فصول أخرى + + + لا توجد فصول جديدة + فصل جديد + فصلان جديدان + %1$d فصول جديدة + %1$d فصول جديدة + %1$d فصول جديدة + + + لا شيء + إدخال واحد + إدخالين + ادخالات %d ل + ادخالات %d ل + ادخالات %d ل + + + %1$s عنصر متبقي + عنصر واحد متبقي + عنصران متبقيان + %1$s عناصر متبقية + %1$s عناصر متبقية + %1$s عناصر متبقية + + + بعد أقل من دقيقة + بعد دقيقة + بعد دقيقتين + بعد %1$s دقائق + بعد %1$s دقائق + بعد %1$s دقائق + + + لا يوجد فئات + فئة + فئتان + %d فئات + %d فئات + %d فئات + + + تمَّ في %1$s وبدون أخطاء + تمَّ في %1$s وفيه خطأ + تمَّ في %1$s وفيه خطآن + تمَّ في %1$s وفيه %2$s أخطاء + تمَّ في %1$s وفيه %2$s خطأً + تمَّ في %1$s وفيه %2$s خطأ + + + لا متتبّع + متتبّع واحد + متتبعان + بضعة متتبّعين (%d) + عدّة متتبّعين (%d) + %d متتبّعاً + + + لا فصول + فصل واحد + فصلين + %1$s فصول + %1$s فصول + %1$s فصول + + + لا يُتخطَّى أيُّ فصل + يُتخطَّى فصل، وذلك إما لأن المصدر مفقود أو لأنه مصفًّى + يُتخطَّى فصلان، وذلك إما لأن المصدر مفقود أو لأنهما مصفَّان + تُتخطَّى %d فصول، وذلك إما لأن المصدر مفقود أو لأنهم مصفَّون + يُتخطَّى %d فصلًا، وذلك إما لأن المصدر مفقود أو لأنهم مصفَّون + يُتخطَّى %d فصل، وذلك إما لأن المصدر مفقود أو لأنهم مصفَّون + + + الأمس + منذ %1$d أيام + منذ %1$d أيام + منذ %1$d أيام + منذ %1$d أيام + منذ %1$d أيام + + + لا يوجد فصل تالٍ لم يُقرأ + الفصل غير المقروء التالي + الفصلان غير المقروءين التاليان + %d فصول تالية لم تُقرأ + %d فصلًا تاليًا لم يُقرؤوا + %d فصل تالٍ لم يُقرؤوا + + + الفصل التالي + الفصل التالي + %d فصول تالية + %d فصول تالية + %d فصل تالي + %d فصل تالي + + + لا يوجد أيُّ فصل مفقود + فصل واحد مفقود + فصلان مفقودان + %1$s فصول مفقودة + %1$s فصلًا مفقودًا + %1$s فصل مفقود + + + لا يوم + يوم واحد + يومان + %d أيام + %d يومًا + %d يوم + + \ No newline at end of file diff --git a/i18n/src/main/res/values-ar/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/ar/strings-aniyomi.xml similarity index 90% rename from i18n/src/main/res/values-ar/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/ar/strings-aniyomi.xml index 7c5cb1b87e..59ce681cc7 100644 --- a/i18n/src/main/res/values-ar/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/ar/strings-aniyomi.xml @@ -96,22 +96,6 @@ التقدم: %1$s/%2$s دائما إستخدام مشغل الوسائط الخارجي عرض الأنمي - - ثانية - %d ثانية واحدة - %d ثانيتان - %d ثواني - %d ثانية - %d ثانية - - - حلقة جديدة - 1 حلقة جديدة - حلقتين جديدتين - %1$d حلقات جديدة - %1$d حلقة جديدة - %1$d حلقات جديدة - إضافة الأنمي إلى المكتبة؟ الحفاظ على موضع المشاهدة على الحلقات التي تمت مشاهدتها حذف الحلقات المحملة؟ @@ -141,14 +125,6 @@ إضغط مرتين لتخطي المقدمة مانغا شاهد - - حلقة - أول حلقة - حلقتان - %1$s حلقات - %1$s حلقة - %1$s حلقة - الوضع الأفقي حسب المستشعر تنزيل تلقائي أثناء المشاهدة الحلقات المحملة @@ -230,14 +206,6 @@ تذكر وقم بالتغيير إلى آخر مستوى صوت تم إستخدامه تذكر وقم بالتغيير إلى آخر سطوع تم استخدامه استخدم دائمًا أداة التحميل الخارجية للأنمي - - الحلقة الغير مشاهدة التالية - الحلقة الغير مشاهدة التالية - الحلقتين الغير مشاهدة التالية - بعض الحلقات %d الغير مشاهدة التالية - الحلقات %d الغير مشاهدة التالية - الحلقات %d الغير مشاهدة التالية - مصادر المانغا المحلية رقم الحلقة 7 ثواني @@ -252,14 +220,6 @@ تم تخطي %s 5 ثواني ترحيل المانغا - - لعنوان واحد - لـ 1 عنوان - لعنوانين - لـ %d عناوين - لـ %d عنوان - لـ %d عناوين - تفعيل التخطي التلقائي الحلقة %1$s و%2$d أخرى الحلقات %1$s @@ -269,14 +229,6 @@ تخطي في %d ثواني إعدادات الحلقة ترحيل الأنمي - - الحلقات %1$s و 1 أخرى - الحلقات %1$s و 1 أخرى - الحلقات %1$s و حلقتين أخرى - الحلقات %1$s و %2$d أخرى - الحلقات %1$s و %2$d أخرى - الحلقات %1$s و %2$d أخرى - خيارات النسخ الاحتياطي ملحقات المانغا ملحقات الأنمي @@ -290,14 +242,6 @@ هذا الملحق ليس من قائمة ملحقات انيومي الرسمية. وضعية صورة داخل صورة (PiP) البحث عن - - لا يوجد - الحلقة التالية - الحلقتان التالية - الحلقات التالية - الحلقات التالية - الحلقات التالية - إظهار وقت بث الحلقة القادمة حفظ لقطة شاشة تقييم الحلقة diff --git a/i18n/src/main/res/values-ar/strings.xml b/i18n/src/commonMain/resources/MR/ar/strings.xml similarity index 78% rename from i18n/src/main/res/values-ar/strings.xml rename to i18n/src/commonMain/resources/MR/ar/strings.xml index 0aaa2382bf..09dc1e5b0c 100644 --- a/i18n/src/main/res/values-ar/strings.xml +++ b/i18n/src/commonMain/resources/MR/ar/strings.xml @@ -1,18 +1,19 @@ الاسم - مانجا + الفئات + إدخالات المكتبة الفصول التعقب التاريخ اﻹعدادات + قائمة التنزيلات المكتبة السجل التحديثات النسخ الاحتياطي والاستعادة اﻹعدادات الترتيب حسب - تم التنزيل المحفوظة غير مقروءة إزالة الترتيب @@ -110,7 +111,7 @@ اليسار اليمين المركز - نوع التدوير الافتراضي + التدوير الافتراضي حر الوضع الرأسي اﻹجباري الوضع الأفقي الإجباري @@ -123,15 +124,14 @@ من الفصل الرابع قبل اﻷخير من الفصل الخامس قبل اﻷخير تنزيل الفصول الجديدة - الخدمات + المتتبِّعات إنشاء نسخة إحتياطية يمكن استخدامها لإستعادة المكتبة الحالية إستعادة النسخة الإحتياطية إستعادة مكتبة من ملف نسخة إحتياطية موقع النسخ الإحتياطي - النسخ الاحتياطيّة التلقائيّة - معدل النسخ الإحتياطي - أقصى عدد للنسخ الاحتياطيّة + معدل النسخ الاحتياطي التلقائي + أقصى عدد للنسخ الاحتياطية التلقائية أُنشئت نسخة احتياطية اكتملت الاستعادة ما الذي تريد نسخه احتياطيّاً؟ @@ -147,8 +147,9 @@ حدث خطأ أثناء محو ذاكرة التخزين المؤقت محو ملفات تعريف الارتباط تم محو ملفات تعريف الارتباط + محو قاعدة البيانات + مسح سجلّ الإدخالات التي ليست محفوظة في مكتبتك تم حذف المدخلات - تحديث بيانات التتبع اﻹصدار إرسال تقارير الأعطال هذا يساعد فى حل أي مشاكل. لن يتم إرسال أيّة بيانات حساسة @@ -172,12 +173,13 @@ حذف الفصول المنزلة؟ الفصل %1$s جاري التنزيل (%1$d/%2$d) + خطأ + متوقّف عنوان المصدر رقم الفصل حسب المصدر حسب رقم الفصل تنزيل - الكل غير مقروء هل أنت متأكد من أنك تريد حذف الفصول المحددة؟ التتبع @@ -192,6 +194,7 @@ توجد بالفعل فئة بهذا الاسم! تم حذف الفئات سيؤدي هذا إلى إزالة تاريخ قراءة هذا الفصل. هل أنت متأكد؟ + إضافة إلى المكتبة؟ تم حفظ الصورة مُرشح مخصص عيِّنها غلافًا @@ -203,14 +206,13 @@ فشل تنزيل الفصول. يمكنك إعادة المحاولة في قسم التنزيلات تم إيجاد فصول جديدة فشل تحديث الغلاف - من فضلك أضف المانجا إلى مكتبتك قبل القيام بذلك + الرجاء إضافة الإدخال إلى مكتبتك قبل القيام بذلك اختر صورة الغلاف اختر ملف النسخة الاحتياطية تنزيل لا تتوفر تحديثات جديدة - البحث عن التحديثات… جار التنزيل… - اضغط للتثبيت + اضغط لتثبيت التحديث حدث خطأ في التنزيل نسخة جديدة متوفرة! لا توجد تنزيلات @@ -222,7 +224,8 @@ فشل تنزيل الفصل بسبب حدوث خطأ غير متوقع لا يتوفر اتصال واي فاي لا يتوفر اتصال بالشبكة - عامٌّ + توقفت التنزيلات + عام نقل الإضافات معلومات الإضافة @@ -242,7 +245,6 @@ لا مؤثرات طبيعي سريع - محلّي تم الإضافة إلى المكتبة تم الإزالة من المكتبة نُسخ إلى الحافظة: @@ -250,7 +252,6 @@ المصدر غير مثبت: %1$s إعادة القراءة الحالة - تم البدء فيها النوع اختر بيانات لتضمينها رحِّل @@ -264,7 +265,7 @@ لا يوجدُ فصل سابق جار تحميل الصّفحات… فشل تحميل الصّفحات: %1$s - إظهار عند النقر لفترة طويلة + أظهر الإجراءات عند الضغط المطوَّل فتح في WebView ألوان 32bit تخطي الفصول المقروءة @@ -285,7 +286,6 @@ نقل إلى الأعلى الأقدم الأَحدثْ - إعادة ترتيب إلغاء الكل عرض الفصول أحدث فصل @@ -310,7 +310,7 @@ اظهار فواصل الانتقال بين الفصول تخطي الفصول المُرشحة اظهار محتوى المناطق المقطوعة - هذه الإضافة لم تعد متوفرة. + هذه الإضافة لم تعد متوفرة. قد لا تعمل بشكل صحيح ويمكن أن تسبب بمشاكل في التطبيق. يوصى بإلغائه. قديم جدًا التحديثات معلقة التحديث العام @@ -328,54 +328,16 @@ فشل النسخ الاحتياطي يُنسخ احتياطيًّا بالفعل %02d دقيقة و %02d ثانية - ٢٥٪ - ٢٠٪ - ١٥٪ - ١٠٪ - بلا - تأكيد الخروج إلغاء التثبيت تثبيت عكس التحديد - اضغط رجوع مرة أخرى للخروج تحديثات اﻹضافات + تحديثات الفصول يرجى تحديث تطبيق WebView لتوافق أفضل فشل في تجاوز Cloudflare - - لايوجد تحديث للإضافة - يتوفر تحديث لإضافة - يتوفر تحديث لإضافتان - يتوفر تحديث %d إضافات - يتوفر تحديث %d إضافات - يتوفر تحديث %d إضافات - - - الفصول %1$s - الفصول %1$s وفصل آخر - الفصول %1$s و%2$d فصول أخرى - الفصول %1$s و%2$d فصول أخرى - الفصول %1$s و%2$d فصول أخرى - الفصول %1$s و%2$d فصول أخرى - الفصول %1$s الفصل %1$s و%2$d فصول أخرى الفصل %1$s - - لا توجد فصول جديدة - فصل جديد - فصلان جديدان - %1$d فصول جديدة - %1$d فصول جديدة - %1$d فصول جديدة - - - لا شيء - لمانجا واحدة - ل%d مانجا - ل%d مانجا - ل%d مانجا - ل%d مانجا - جارٍ التحقق من وجود فصول جديدة الفصل %1$s - %2$s تُحدَّث المكتبة @@ -390,60 +352,26 @@ دليل استخدام المصادر المحلية المثبتة آخر مصدر مُستخدم - التحقق من الموقع الإلكتروني في WebView تم تسجيل الخروج تسجيل الخروج تسجيل الخروج من %1$s؟ البريد الإلكتروني - - %1$s عنصر متبقي - عنصر واحد متبقي - عنصران متبقيان - %1$s عناصر متبقية - %1$s عناصر متبقية - %1$s عناصر متبقية - - يقوم بترشيح المانجا ضمن مكتبتك - البحث فقط عن مصادر مثبتة في البحث العالمي - المساحة الجانبية + تصفية جميع الإدخالات في مكتبتك + الإزاحة الجانبية شريط طويل بين أجزائه فجوات رمادي يزيد من سلاسة تدرج الالوان بالصور، ولكن قد يؤثر على الأداء - - بعد أقل من دقيقة - بعد دقيقة - بعد دقيقتين - بعد %1$s دقائق - بعد %1$s دقائق - بعد %1$s دقائق - - - لا يوجد فئات - فئة - فئتان - %d فئات - %d فئات - %d فئات - تعذر فتح إعدادات الجهاز نقل البيانات المصادر المفقودة: - النسخة الإحتياطية لا تحتوي على أيّة مانجا. + النسخة الإحتياطية لا تحتوي على أيّة إدخالات المكتبة. ملفُّ النسخ الاحتياطيِّ غير صالح - مزامنة أحاديّة لتحديث تقدم الفصول في خدمات التتبع. قم بإعداد التتبع الخاص بمانجا محدّدة من زر التتبع الخاص بها. - هذه الإضافة ليست من قائمة إضافات Tachiyomi الرسمية. + مزامنة أحادية تُحدِّث قراءة الفصول في المتتبعات الخارجية، ولك تعيين التتبِّع لكلِّ مدخلة على حدى، وذلك من زرِّ التتبع فيهم. + ليست هذه الإضافة من القائمة الرسمية. غير رسمي تحقق من وجود غلاف جديد وتفاصيل جديدة عند تحديث المكتبة تحديث البيانات الوصفية تلقائياً - - تمَّ في %1$s وبدون أخطاء - تمَّ في %1$s وفيه خطأ - تمَّ في %1$s وفيه خطآن - تمَّ في %1$s وفيه %2$s أخطاء - تمَّ في %1$s وفيه %2$s خطأً - تمَّ في %1$s وفيه %2$s خطأ - حسب تاريخ الرفع حدّث صور اغلفة المكتبة شبكة مريحة @@ -460,7 +388,7 @@ تاريخ الإضافة ما الجديد يتطلب إعادة تشغيل التطبيق ليتم تفعيله - شبكة الاتصال + التشبيك أجهزة التتبع التي لم يتم تسجيل الدخول إليها: وضع القراءة بعض المصادر من هذا الامتداد قد تحتوى على محتوى للبالغين (+18) @@ -474,38 +402,13 @@ أخطاء مُكتمل التقدّم - إكتمل التنزيل لم يتم العثور على المصدر - - لا متتبّع - متتبّع واحد - متتبعان - بضعة متتبّعين (%d) - عدّة متتبّعين (%d) - %d متتبّعاً - - - لا فصول - فصل واحد - فصلين - %1$s فصول - %1$s فصول - %1$s فصول - حالة غير معروفة مؤلّف غير معروف لا تمتلك أيّة مصادر مثبّتة إبحث عن \"%1$s\" بشكلٍ شامل حُدِّث إلى الإصدار v%1$s - - لا يُتخطَّى أيُّ فصل - يُتخطَّى فصل، وذلك إما لأن المصدر مفقود أو لأنه مصفًّى - يُتخطَّى فصلان، وذلك إما لأن المصدر مفقود أو لأنهما مصفَّان - تُتخطَّى %d فصول، وذلك إما لأن المصدر مفقود أو لأنهم مصفَّون - يُتخطَّى %d فصلًا، وذلك إما لأن المصدر مفقود أو لأنهم مصفَّون - يُتخطَّى %d فصل، وذلك إما لأن المصدر مفقود أو لأنهم مصفَّون - - لم يتم العثور على الفصول + لم يُعثر على فصول %1$s: %2$s, صفحة %3$d إعدادات الفصل الإفتراضية المُحدثة تعيين كافتراضي @@ -518,7 +421,7 @@ الوضع المخفي مسح السجل الصفحة التالية - الصفحة سابقة + الصفحة السابقة دليل ترحيل المصدر محتوى +18 اعرض في قوائم المصادر والامتدادات @@ -555,26 +458,27 @@ تاريخ الرفع افقي رأسي - نوع التدوير - تلقائيا - إنشاء مجلدات وفقا لعنوان المانجا - حفظ الصفحات في مجلدات منفصلة + التدوير + تلقائيًّا + يُنشِئ مجلدات وفقًا لعناوين المدخلات + احفظ الصفحات في مجلدات منفصلة الإجراءات تدرج رمادي إستثناء: %s تضمين: %s لا شيء + الإدخالات في الفئات المستبعدة لن يتم تحديثها حتى و ان كانت أيضا في الفئات المضمنة. اضغط لإظهار التفاصيل التنزيل التلقائي - المانجا في الفئات المستبعدة لن يتم تنزيلها حتى و ان كانت أيضا في الفئات المضمنة. + لن يتم تنزيل الإدخالات في الفئات المستبعدة حتى إذا كانت موجودة أيضًا في الفئات المضمنة. إلغاء تفعيل الوضع الخفي فشل النسخ إلى الحافظة نسخة الاندرويد هذه اصبحت غير مدعومة المصدر غير مدعوم - يُقرأ + لم يُقرأ التاريخ ترتيب حسب - لم يتم العثور على الفصل + لم يُعثر على الفصل إيقاف تشغيل قيود: %s @@ -583,12 +487,11 @@ خطأ في حفظ الغلاف حُفظ الغلاف غطاء - صيغة الفصل غير صالح + تنسيق الفصل غير صالح تعليمات التعقب - اعدادات فرز والعرض لكل صنف - تحديث المتعقبات عند تحديث المكتبة - تحديث المتعقبات تلقائياً + إعدادات فرز كل صنف إلغاء الكل لهذه السلسلة + مصدر محلّي ليس لديك اي قوائم بعد. ابدأ التحميل الآن أحمر @@ -605,41 +508,27 @@ ين & يانغ تاكو ديناميك - جار تحديث المكتبة…( (%2$d) / (%1$d) ) - هذا المتتبّع متوافق فقط مع المصدر (‌Komga)۔ تقوم بعض الشركات المصنعة بوضع قيود إضافية على التطبيقات التي قد تقضي على الخدمات التي تعمل في الخلفية. يحتوي هذا الموقع على مزيد من المعلومات حول كيفية إصلاحه. قد لا يعمل النسخ الاحتياطيُّ أو الاستعادة إن عطِّلت أمثَلَة MIUI. - الخدمات التي تقدم ميزات محسنة لأجل مصادر معينه. المانجات سوف يتم تتبعها عندما يتم إضافتها الي المكتبة. - خدمات محسَّنة + يُحسِّن مصادر معينة، وتُتابَع المدخلات حال إضافتها للمكتبة. + المتتبِّعات المحسَّنة اليوم - مؤخراً المصادقة لتأكيد التغيير الافتراضي الأنشطة التي تعمل في الخلفية - - الأمس - منذ %1$d أيام - منذ %1$d أيام - منذ %1$d أيام - منذ %1$d أيام - منذ %1$d أيام - - قصير (اليوم، الأمس) تتبع معكوس - طويل (القصير، +منذ كم يوم) - الوقت النسبي - الوقت ازرق مخضر و فيروز المظهر دليل البدء ساعد بالترجمة واجهة مستخدم الجهاز اللوحي - المثبت - مجموع المانجا + الفئات المستثناة + المثبِّت + إجمالي الإدخالات تحذير اللغة - يجب عليك الإحتفاظ بنُسخ في أماكن أخرى أيضًا. + زد على ذلك حفظ الاحتياط في غير هذا المكان، وتنبَّه لوجود الخطير فيها ككلمات السر، وتحفَّظ من مشاركتها. التحديثات الكبيرة تضر بالمصادر، وتؤدي لتحديثات أبطأ، وقد تسبب زيادة في استهلاك البطارية۔ اضغط لمعرفة المزيد۔ التسجيل المطول معلومات التطبيق @@ -656,22 +545,20 @@ للحصول على المساعده في إصلاح أخطاء تحديث المكتبة، أنظر هنا%1$s احفظ كأرشيف CBZ سياسة الخصوصية - تخطي تحديث العناوين + تخطي تحديث الإدخالات قياسي لا شئ للتنظيف - عدد المانغا غير المتواجدة بقاعدة بيانات المكتبه%1$d + %1$d مدخلةً في قاعدة البيانات وليست في المكتبة فشل الحصول على قائمة الملحقات ثبِّت «شيزوكو» وشغِّله لتستخدمه مثبِّت إضافات. الاسئله الشائعه والأدلة - ٥٪ - بدأت شبكة بالاغلفة تُخُطِّيت بسبب عدم وجود فصول قُرئت تُخُطِّيت لوجود فصول لم تُقرأ لم يبدأ هذا بعد تُخُطِّيت لأنها تمِّت حرِّك الصور الواسعة - كبر الصوره الأفقية + كبِّر الصور العريضة تلقائيًّا متجاوَز خطأ أثناء حفظ الصورة معطل @@ -679,16 +566,13 @@ فشل %1$d تحديث أو تحديثات تُخُطِّي %1$d تحديث أو تحديثات اضغط لقراءة المزيد - نسخة جديدة متاحة من الإصدارات الرسمية. انقر لمعرفة كيفية الهجرة من إصدارات F-Droid غير الرسمية. + نسخة جديدة متاحة من الإصدارات الرسمية. انقر لمعرفة كيفية التحويل من إصدارات F-Droid غير الرسمية. نقل سلسلة الفصول للأعلى لا توجد مدخلات في المكتبة لإجراء نسخة احتياطي‮‮ة اغلاق فتح في GitHub احذف بيانات WebView - عرض المصادر المثبتة المتكررة حُذفت بيانات WebView - عند ارتفاع نسبة الشحن‌ - تكرار المصادر المثبتة في مجموعات اللغة الخاصة بها لا يوجد مصادر مثبته لا يوجد مصدر المانجا الغير مقروءة @@ -726,70 +610,78 @@ تنسيق RARv5 ليس مدعومًا موجة مد و جزر متعدد - إنقسام الصور الطويلة (بيتا) هنالك تحديث جارٍ بالفعل التنزيل المسبق - يعمل فقط على الإدخالات في المكتبة وإذا كان الفصل الحالي بالإضافة إلى الفصل التالي قد تم تنزيلهم بالفعل + ينفع حين كون الفصل الحاليِّ والذي يليه منزَّلين. التحميل تلقائيا أثناء القراءة هل أنت واثق؟ - آخر تحديث للمكتبة: %1$s + آخر تحديث للمكتبة: %s سلسلة وكيل المستخدم لا يمكن أن تكون فارغة شائع أنت على وشك أن تحذف \"%s\" من مكتبتك - - لا يوجد فصل تالٍ لم يُقرأ - الفصل غير المقروء التالي - الفصلان غير المقروءين التاليان - %d فصول تالية لم تُقرأ - %d فصلًا تاليًا لم يُقرؤوا - %d فصل تالٍ لم يُقرؤوا - لم يتم منح أذن التخزين بحث… تُخُطِّيت لأن السلسلة لا تتطلب تحديثات واجه %s خطأً غير متوقَّع. تنبغي لك مشاركة سجلَّات الانهيار في قناة الدعم في دسكورد. عفوًا! أعد تشغيل التطبيق - لغة التطبيق، الإشعارات مظهر، التاريخ والوقت الفئات، التحديث الشامل، تمرير الفصول وضع القراءة، العرض، التنقل التحميل التلقائي، التحميل مقدما تزامن التقدم أحادي الاتجاه، مزامنة محسّنة المصادر، الامتدادات، البحث العالمي - النسخ الاحتياطي اليدوي والآلي + النسخ الاحتياطي اليدوي والآلي وحيِّز التخزين قفل التطبيق، شاشة آمنة تفريغ سجلات الأعطال وتحسينات البطارية + لا يتم دعم إصدارات F-Droid رسميا. +\nانقر لمعرفة المزيد. + موقع غير صالح: %s + إزالة التاريخ؟ + %s سيؤدي هذا إلى إزالة تاريخ البدء المحدد مسبقًا من + في هذه اللحظة + %s سيؤدي ذلك إلى إزالة تاريخ الانتهاء المحدد مسبقا من + فهرس التنزيلات غير صالح + عنوان غير معروف التحقق من التنزيلات - قائمة التنزيلات + فتح إدخال عشوائي + سلسلة وكيل المستخدم المبدئية غير صالحة + لم يتم العثور على إدخالات في هذه الفئة + إحصائيات + بدأت + محلي + المنزَّل + نظرة عامة + إدخالات مكتملة + مدة القرائة + إدخالات + في التحديث العام + الكل + إقرا + متتبعين + إدخالات متتبعة + يعني النتيجة + مستعمل + غير متوفر + %d ي + %d س + %d د + %d ث + الفئة فارغة + ليس الان تجاوز الفصول المكررة متوفر ولكن المصدر غير مثبت: %s - لديك إدخال في مكتبتك بنفس الاسم. + لديك إدخال في مكتبتك بنفس الاسم. \n \nهل مازلت ترغب في الاستمرار؟ نسخ الى الحافظة %1$s خطأ: %2$s *مطلوب نسخ إلى الحافظة - - الفصل التالي - الفصل التالي - %d فصول تالية - %d فصول تالية - %d فصل تالي - %d فصل تالي - إخفاء الإدخالات الموجودة بالفعل في المكتبة تحديث الفئة + افصل الصور الطويلة التراكب - - لا يوجد أيُّ فصل مفقود - فصل واحد مفقود - فصلان مفقودان - %1$s فصول مفقودة - %1$s فصلًا مفقودًا - %1$s فصل مفقود - دوِّر الصفحات العريضة لتلائم الشاشة اعكس اتِّجاه الصفحات العريضة المدوَّرة معلومات التنقيح @@ -798,4 +690,56 @@ إجراء التمرير الأيسر إجراء التمرير الأيمن %d كلَّ صفٍّ - \ No newline at end of file + عيِّد المدة + مدة جلب مخصَّصة + اجلب كلَّ شهر (٢٨ يومًا) + مرت مدة الالتماس + ١٠+ التماسات متأخرة + ربما أُلغيت؟ ٢٠ التماسًا متأخرًا وشهران + قدِّر كلَّ + ليس ضمن مدة الإصدار المتوقعة + خصِّص المدة + تُخُطِّيت بسبب عدم توقع صدور اليوم + عيِّن التحديث كلَّ + المدة + التحديث المتوقع القادم + أأزيل تتبع %s؟ + هذا يزيل التتبع محليًّا. + حسنًا + وكذلك أزله من %s + احذف ما نُزِّل + تُزامن المكتبة + انتهت مزامنة المكتبة + وُجدت نتائج + تعذَّر إنشاء ملفِّ نسخ احتياطيِّ + مرخَّصة - لا فصول + ولوج المتتبِّع + أُفسد فهرس التنزيلات + اضغط هنا للمساعدة فى Cloudflare + لا اتصال بالإنترنت + خطأ HTTP %d، انظر في WebView + لا يمكن الوصول إلى %s + افتح %s + انقل السلسلة للقعر + التوقيت النسبي + «%1$s» بدلًا عن «%2$s» + رتِّب الفئات + تُنعَش المكتبة… (%s) + أتريد ترتيب الفئات حسب الحروف؟ + إعدادات المصادر + إعدادات التطبيق + لا ملفات حُدِّدت + البيانات والتخزين + أبدًا + يخفِّف الحرق في شاشات الحبر + آخر احتياط تلقائي: %s + أشرق الشاشة بِيضًا إذا تغيرت الصفحة + التخزين + نقاط المتتبع + أنشئ + نفِّذ + صفِّر + لم يُعثَر على مترجمين + المترجم + احجب بعض المترجمين + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/base/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/base/plurals-aniyomi.xml new file mode 100644 index 0000000000..8b1038dcc8 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/base/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + Next unseen episodes + Next %d unseen episodes + + + %1$s episode + %1$s episodes + + + Next episode + Next %d episodes + + + For 1 title + For %d titles + + + 1 new episode + %1$d new episodes + + + %d second + %d seconds + + + Episodes %1$s and 1 more + Episodes %1$s and %2$d more + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/base/plurals.xml b/i18n/src/commonMain/resources/MR/base/plurals.xml new file mode 100644 index 0000000000..99043d9517 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/base/plurals.xml @@ -0,0 +1,67 @@ + + + + After %1$s minute + After %1$s minutes + + + Yesterday + %1$d days ago + + + %d category + %d categories + + + Next unread chapter + Next %d unread chapters + + + Done in %1$s with %2$s error + Done in %1$s with %2$s errors + + + %1$s remaining + %1$s remaining + + + 1 day + %d days + + + Missing %1$s item + Missing %1$s items + + + %1$s chapter + %1$s chapters + + + Next chapter + Next %d chapters + + + %d tracker + %d trackers + + + Skipping %d chapter, either the source is missing it or it has been filtered out + Skipping %d chapters, either the source is missing them or they have been filtered out + + + For %d entry + For %d entries + + + %1$d new chapter + %1$d new chapters + + + Chapters %1$s and 1 more + Chapters %1$s and %2$d more + + + Extension update available + %d extension updates available + + \ No newline at end of file diff --git a/i18n/src/main/res/values/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/base/strings-aniyomi.xml similarity index 94% rename from i18n/src/main/res/values/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/base/strings-aniyomi.xml index 43e792a7e1..311cb3d36e 100644 --- a/i18n/src/main/res/values/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/base/strings-aniyomi.xml @@ -1,8 +1,6 @@ - Hide - All Category Manga Categories @@ -83,7 +81,6 @@ Sensor portrait Sensor landscape This extension is not from the official list. - Player Progress At what point to mark the episode as seen @@ -125,10 +122,8 @@ Enable the use of PiP mode Show episode toasts when switching episodes in PiP mode Automatically switch to PiP mode on exiting the player - Remember and switch to the last used brightness Remember and switch to the last used volume - Edit MPV configuration file for further player settings Reset MPV configuration file Edit MPV input file for keyboard mapping configuration @@ -148,10 +143,6 @@ Downloader app preference Download new episodes Auto download while watching - - Next unseen episodes - Next %d unseen episodes - Only works on entries in library and if the current episode plus the next one are already downloaded Update progress after reading/watching Open track menu on adding to library @@ -176,10 +167,6 @@ Episode not found Invalid episode format Unknown studio - - %1$s episode - %1$s episodes - Are you sure you wish to delete \"%s\"? Delete downloaded episodes? Add manga to library? @@ -190,10 +177,6 @@ Paused Episode number By episode number - - Next episode - Next %d episodes - Unseen Are you sure you want to delete the selected episodes? Also apply to all manga in my library @@ -232,16 +215,7 @@ Warning: large bulk downloads may lead to sources becoming slower and/or blocking Aniyomi. Tap to learn more. No video found New episodes found - - For 1 title - For %d titles - - - 1 new episode - %1$d new episodes - Nothing watched recently - WebView is required for the app to function Updated default episode settings Chapter download paused @@ -249,10 +223,6 @@ Chapter/Episode updates Force app to recheck downloaded chapters and episodes +%1$d s - - %d second - %d seconds - Licensed - No items to show Next Episode not found! Storage @@ -267,7 +237,6 @@ "Cropped to screen" "Stretched to screen" "Custom aspect ratio" - Change playback speed: Reset Player settings @@ -301,10 +270,6 @@ Episode %1$s Episode %1$s and %2$d more Episodes %1$s - - Episodes %1$s and 1 more - Episodes %1$s and %2$d more - Episode settings Backup options Manga Extensions @@ -315,22 +280,14 @@ Copied video quality link to clipboard Choose video quality: Extension settings - - Cotton Candy Mocha - Save screenshot - Episode swipe Swipe to right action Swipe to left action - Hide hidden categories from categories and storage screen - Expected anime release grace period - - Lorem ipsum dolor sit amet. Delay Font @@ -353,8 +310,6 @@ Border Background Font Name - - Exclude from data saver Stop excluding from data saver Data Saver diff --git a/i18n/src/main/res/values/strings.xml b/i18n/src/commonMain/resources/MR/base/strings.xml similarity index 91% rename from i18n/src/main/res/values/strings.xml rename to i18n/src/commonMain/resources/MR/base/strings.xml index af3dbdb07f..7384cd81c2 100644 --- a/i18n/src/main/res/values/strings.xml +++ b/i18n/src/commonMain/resources/MR/base/strings.xml @@ -1,12 +1,15 @@ - Aniyomi On Off + Selected + Not selected + More options + Navigate up - + Aniyomi Name Categories Manga @@ -15,8 +18,6 @@ Delete downloaded History Scanlator - - More Settings Download queue @@ -33,16 +34,11 @@ Help Default Warning - - Started Local Downloaded - Authenticate to confirm change Press back again to exit - - Settings Menu Filter @@ -56,7 +52,6 @@ Late 10+ check Dropped? Late 20+ and 2 months Passed check period - Remove filter Alphabetically Total entries @@ -109,7 +104,6 @@ Resume Open in browser Copy to clipboard - Open in WebView WebView Migrate @@ -149,7 +143,6 @@ Save Reset Revert to default - Undo Close Open log @@ -161,16 +154,9 @@ Start downloading now FAQ and Guides Not now - - Loading… InternalError: Check crash logs for further information - - App not available - - - General Appearance Library @@ -179,7 +165,6 @@ Tracking Advanced About - App language, notifications Theme, date & time format Categories, global update, chapter/episode swipe @@ -190,8 +175,6 @@ Manual & automatic backups, storage space App lock, secure screen Dump crash logs, battery optimizations - - Theme Dark mode Follow system @@ -214,43 +197,27 @@ Tidal Wave Pure black dark mode Relative timestamps - \"%1$s\" instead of \"%2$s\" Date format - Manage notifications App language - Security and privacy Require unlock Lock when idle Always Never - - After %1$s minute - After %1$s minutes - Hide notification content Secure screen Secure screen hides app contents when switching apps and block screenshots - NSFW (18+) sources Show in sources and extensions lists This does not prevent unofficial or potentially incorrectly flagged extensions from surfacing NSFW (18+) content within the app. - Today - - Yesterday - %1$d days ago - - - Display Grid size %d per row Portrait Landscape - Global update Automatic updates Off @@ -265,32 +232,22 @@ Only on unmetered network When charging Restrictions: %s - Skip updating entries With \"Completed\" status That haven\'t been started Outside expected release period - Automatically refresh metadata Check for new cover and details when updating library - Default category Always ask Per-category settings for sort - - %d category - %d categories - All None Include: %s Exclude: %s - Chapter swipe Swipe to right action Swipe to left action - - Multi Updates pending Update @@ -323,8 +280,6 @@ Shizuku is not running Private Install and start Shizuku to use Shizuku as extension installer. - - Fullscreen Show tap zones overlay Briefly show when reader is opened @@ -432,8 +387,6 @@ High Low Lowest - - Excluded categories Invalid location: %s Disabled @@ -447,17 +400,11 @@ Entries in excluded categories will not be downloaded even if they are also in included categories. Download ahead Auto download while reading - - Next unread chapter - Next %d unread chapters - Only works if the current chapter/episode + the next one are already downloaded. Save as CBZ archive Split tall images Improves reader performance Maximum downloads - - Tracking guide Trackers One-way sync to update the chapter progress in external tracker services. Set up tracking for individual entries from their tracking button. @@ -466,11 +413,7 @@ Provides enhanced features for specific sources. Entries are automatically tracked when added to your library. Track Tracker login - - Hide entries already in library - - Storage location Used for automatic backups, chapter downloads, and local source. Create backup @@ -487,10 +430,6 @@ Data from the backup file will be restored.\n\nYou will need to install any missing extensions and log in to tracking services afterwards to use them. Restore completed %02d min, %02d sec - - Done in %1$s with %2$s error - Done in %1$s with %2$s errors - Backup is already in progress What do you want to backup? Creating backup @@ -509,12 +448,8 @@ Used: %1$s Cache cleared. %1$d files have been deleted Error occurred while clearing - - Syncing library Library sync complete - - Networking Clear cookies DNS over HTTPS (DoH) @@ -550,8 +485,6 @@ Verbose logging Print verbose logs to system log (reduces app performance) Debug info - - Website Version What\'s new @@ -560,25 +493,13 @@ Privacy policy Check for updates Updated to v%1$s - - Send crash reports Helps fix any bugs. No sensitive data will be sent - - - F-Droid builds are not officially supported.\nTap to learn more. Downloaded only Incognito mode Disable incognito mode Filters all entries in your library - - %1$s remaining - %1$s remaining - - - - Log in to %1$s Username Email address @@ -589,18 +510,12 @@ Log out You are now logged out Unknown error - - Updating category Local Downloaded chapters Intervals - Overlay Tabs - - - No more results No results found Local source @@ -619,18 +534,6 @@ Invalid chapter format Order by Date - - 1 day - %d days - - - - - Missing %1$s item - Missing %1$s items - - - Ongoing Unknown Unknown author @@ -641,7 +544,6 @@ On hiatus Add to library In library - Remove from library Unknown title You have an entry in your library with the same name.\n\nDo you still wish to continue? @@ -649,18 +551,12 @@ Removed from library More Less - - %1$s chapter - %1$s chapters - Delete downloaded chapters? Copied to clipboard Copied to clipboard:\n%1$s Failed to copy to clipboard Source not installed: %1$s No description - - Chapter %1$s Estimate every Set to update every @@ -672,10 +568,6 @@ By chapter number By upload date Download - - Next chapter - Next %d chapters - Unread Custom cover Cover @@ -690,13 +582,7 @@ Are you sure? Exclude scanlators No scanlators found - - Tracking - - %d tracker - %d trackers - Add tracking Unread Reading @@ -728,20 +614,11 @@ Remove %s tracking? This will remove the tracking locally. Also remove from %s - - A category with this name already exists! - Categories deleted - - This will remove the read date of this chapter. Are you sure? - - Picture saved Error saving picture - - Custom filter Set as cover Cover updated @@ -763,47 +640,28 @@ No pages found Source not found RARv5 format is not supported - - Skipping %d chapter, either the source is missing it or it has been filtered out - Skipping %d chapters, either the source is missing them or they have been filtered out - - - Updating library An update is already running Unable to open last read chapter Library last updated: %s Just now Never - - Ch. %1$s - %2$s Clear history History deleted Are you sure? All history will be lost. - - No source found - - No installed source found - - Source migration guide Select data to include Select a source to migrate from Migrate - Copy Well, this is awkward Not installed - - Whoops! %s ran into an unexpected error. We suggest you share the crash logs in our support channel on Discord. Restart the application - - Overview Completed entries Read duration @@ -820,29 +678,13 @@ %dh %dm %ds - - Couldn\'t download chapters. You can try again in the downloads section - - Updating library… (%s) Large updates harm sources and may lead to slower updates and also increased battery usage. Tap to learn more. New chapters found - - For %d entry - For %d entries - - - %1$d new chapter - %1$d new chapters - Chapter %1$s Chapter %1$s and %2$d more Chapters %1$s - - Chapters %1$s and 1 more - Chapters %1$s and %2$d more - %1$d update(s) failed %1$d update(s) skipped Tap to learn more @@ -854,34 +696,19 @@ Skipped because no chapters are read Skipped because series does not require updates Skipped because no release was expected today - - Select cover image Select backup file No file picker app found No file selected - - Download Open on GitHub - This Android version is no longer supported No new updates available - - Downloading… Tap to install update Download error New version available! A new version is available from the official releases. Tap to learn how to migrate from unofficial F-Droid releases. - - - - Extension update available - %d extension updates available - - - No downloads No recent updates Nothing read recently @@ -894,11 +721,8 @@ Failed to bypass Cloudflare Tap here for help with Cloudflare *required - Please update the WebView app for better compatibility Updated default chapter settings - - Downloader Error Could not download chapter due to unexpected error @@ -909,8 +733,6 @@ Page %d not found while splitting Couldn\'t find file path of page %d Checking downloads - - Common Progress Complete @@ -918,19 +740,12 @@ Skipped App updates Extension updates - - Previous page Next page - - See your recently updated library entries Widget not available when app lock is enabled You are about to remove \"%s\" from your library - - - HTTP %d, check website in WebView No Internet connection Couldn\'t reach %s - + \ No newline at end of file diff --git a/i18n/src/main/res/values-sdh/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/be/plurals-aniyomi.xml similarity index 64% rename from i18n/src/main/res/values-sdh/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/be/plurals-aniyomi.xml index a5a13d3f33..e1b6b83879 100644 --- a/i18n/src/main/res/values-sdh/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/be/plurals-aniyomi.xml @@ -1,37 +1,45 @@ - کاتیگۆرییەکان - بکەرەوەTachiyomi - کۆتانوێکردنەوەی مانگا - نیشاندانی مانگا - مانگای ناوخۆیی - زیادکردنی مانگا بۆ کۆکراوەکان؟ - + + + + + - + + + - + + + - + + + - + + + - + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/be/plurals.xml b/i18n/src/commonMain/resources/MR/be/plurals.xml new file mode 100644 index 0000000000..b7fbd1413d --- /dev/null +++ b/i18n/src/commonMain/resources/MR/be/plurals.xml @@ -0,0 +1,15 @@ + + + + %d катэгорыя + %d катэгорыі + %d катэгорый + %d катэгорый + + + Пасля %1$s хвіліны + Пасля %1$s хвілін + Пасля %1$s хвілін + Пасля %1$s хвілін + + \ No newline at end of file diff --git a/i18n/src/main/res/values-be/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/be/strings-aniyomi.xml similarity index 63% rename from i18n/src/main/res/values-be/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/be/strings-aniyomi.xml index 35dbedc162..2e57d4ec78 100644 --- a/i18n/src/main/res/values-be/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/be/strings-aniyomi.xml @@ -19,46 +19,4 @@ Аўтаматычна пасля чытання Дазволіць выдаленне частак з закладкамі Абнаўляць прагрэс пасля чытання - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-be/strings.xml b/i18n/src/commonMain/resources/MR/be/strings.xml similarity index 90% rename from i18n/src/main/res/values-be/strings.xml rename to i18n/src/commonMain/resources/MR/be/strings.xml index d08dd93535..0125cebee5 100644 --- a/i18n/src/main/res/values-be/strings.xml +++ b/i18n/src/commonMain/resources/MR/be/strings.xml @@ -7,7 +7,6 @@ Найноўшы Па нумару часткi Па даце загрузкі - Пераупарадкаваць Сартаваць Адмяніце ўсе для гэтай серыі Адмяніць усе @@ -17,6 +16,7 @@ Адключыць Паказаць колькасць прадметаў Паказаць укладкі катэгорый + Значкі лакальных Значкі загружаных Спіс Зручная сетка @@ -69,11 +69,9 @@ Фільтр Меню Налады - Націсніце назад яшчэ раз, каб выйсці Дапамога Інфармацыя аб пашырэнні Назва - Загружаны Пашырэння перанесці дадзеныя Рэзервовае капіяванне і аднаўленне @@ -81,12 +79,14 @@ Гісторыя Абнаўленні Бібліятэка + Чарга загрузак Налады Яшчэ Гісторыя Адсочванне Часткi Манга + Катэгорыі Выдаліць Ненадзейны Неафіцыйны @@ -103,16 +103,10 @@ Уключаць: %s Ніхто Усе - - %d катэгорыя - %d катэгорыі - %d катэгорый - %d катэгорый - + Манга ў выключаных катэгорыях не будзе абнаўляцца, нават калі яны таксама знаходзяцца ў уключаных катэгорыях. Налады для кожнай катэгорыі для сартавання і адлюстравання Заўсёды пытацца - Абнаўляць адсочванне пры абнаўленні бібліятэкі - Аўтаматычна абнаўляць адсочванне + Катэгорыя па змаўчанні Правераць наяўнасць новай вокладкі і дэталяў пры абнаўленні бібліятэкі Аўтаматычнае абнаўленне метададзеных Абнаўляць толькі незавершаную мангу @@ -137,19 +131,12 @@ Схаваць змесціва апавяшчэнняў Схаваць змесціва прыкладання пры пераключэнні на іншыя прыкладання і блакаваць скрыншоты Абарона экрана - - Пасля %1$s хвіліны - Пасля %1$s хвілін - Пасля %1$s хвілін - Пасля %1$s хвілін - Ніколі Заўсёды Блакаванне пры бяздзейнасці Патрабаваць разблакоўку Бяспека Кіраванне апавяшчэннямі - Пацвярджаць выхад Фармат даты Чысты чорны цёмны рэжым Ёцуба @@ -223,8 +210,6 @@ Шэры Белы Колер фону - Ствараць тэчкі ў адпаведнасці з назвай мангі - Захоўваць старонкі ў асобныя тэчкі Паказаць пры доўгім націску Дзеяння Абодва @@ -272,18 +257,6 @@ Змясціць у экран Маштабаванне Колеры наадварот - - Учора - %1$d дні таму - %1$d дзён таму - %1$d дзён таму - - Сёння - Нядаўна - Доўгія (Кароткія+, n дзён таму) - Кароткі (Сёння, Учора) - Адносныя часовыя пазнакі - Пазнакі часу Бірузовы Знешнасць Аўтэнтыфікацыя для пацверджання змяненняў @@ -313,11 +286,6 @@ Высокая Найвышэйшая Аўтаматычнае утойванне меню пры адчувальнасці да прагортцы - 25% - 20% - 15% - 10% - Не Бакавой водступ Чытаньне Рэжым чытання @@ -333,7 +301,6 @@ Заблакаваная партрэтная Тып арыентацыі Тып арыентацыі па змаўчанні - Пачата папярэджанне Выдаліць катэгорыю Вы хочаце выдаліць катэгорыю \"%s\"\? @@ -356,7 +323,6 @@ Прапусціць абнаўленні Shizuku не працуе Закрыць - калі батарэя зараджана Устаноўка пашырэнняў… Перамясціць у пачатак спісу Усталёўнік @@ -364,5 +330,4 @@ Выдаліць усё Кожныя 3 дні Толькі па Wi-Fi - Чарга загрузак - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/src/main/res/values-uz/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/bg/plurals-aniyomi.xml similarity index 89% rename from i18n/src/main/res/values-uz/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/bg/plurals-aniyomi.xml index 671d8dfc9c..45bf8a3f11 100644 --- a/i18n/src/main/res/values-uz/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/bg/plurals-aniyomi.xml @@ -1,32 +1,30 @@ - Kategoriyalar - Aniyomini ochish - + - + - + - + - + - + - + diff --git a/i18n/src/commonMain/resources/MR/bg/plurals.xml b/i18n/src/commonMain/resources/MR/bg/plurals.xml new file mode 100644 index 0000000000..2f6165169a --- /dev/null +++ b/i18n/src/commonMain/resources/MR/bg/plurals.xml @@ -0,0 +1,55 @@ + + + + 1 наличен ъпдейт за разширение + %d налични ъпдейта за разширения + + + Глави %1$s и още 1 + Глави %1$s и още %2$d + + + 1 нова глава + %1$d нови глави + + + За 1 заглавие + За %d заглавия + + + 1 оставаща + %1$s оставащи + + + След 1 минута + След %1$s минути + + + Направено за %1$s с %2$s грешка + Направено за %1$s с %2$s грешки + + + %d категория + %d категории + + + 1 глава + %1$s глави + + + 1 тракер + %d тракери + + + Има 1 липсваща глава, източникът липса или е филтриран + Има %d липсващи глави, източникът липса или е филтриран + + + Вчера + Преди %1$d дни + + + Следващата непрочетена глава + Следващите %d непрочетени глави + + \ No newline at end of file diff --git a/i18n/src/main/res/values-bg/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/bg/strings-aniyomi.xml similarity index 84% rename from i18n/src/main/res/values-bg/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/bg/strings-aniyomi.xml index 3be5729326..c5e6c6203a 100644 --- a/i18n/src/main/res/values-bg/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/bg/strings-aniyomi.xml @@ -38,32 +38,4 @@ WebView е необходим за Tachiyomi Изтеглянето спряно Нови глави - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-bg/strings.xml b/i18n/src/commonMain/resources/MR/bg/strings.xml similarity index 89% rename from i18n/src/main/res/values-bg/strings.xml rename to i18n/src/commonMain/resources/MR/bg/strings.xml index e2d733803e..885d8b9925 100644 --- a/i18n/src/main/res/values-bg/strings.xml +++ b/i18n/src/commonMain/resources/MR/bg/strings.xml @@ -1,16 +1,14 @@ Име - Настройки + Изтегляния Библиотека История Нови глави Запази и възстанови - Настройки Филтрирай - Изтеглени Отбелязани Непрочетени Премахни филтрирането @@ -51,17 +49,13 @@ Запази Изчисти Върни - Зареждане… - - Основни настройки Четец Изтегляния Следене Разширени настройки За приложението - Манга на ред Портретно Пейзажно @@ -111,7 +105,6 @@ G B A - Директория на изтеглянията Персонализирана директория Изключено @@ -121,40 +114,33 @@ Четвърта предпоследна прочетена глава Пета предпоследна прочетена глава Изтегляй нови глави - Услуги - Използвани: %1$s Кеш изчистен. %1$d файла бяха изчистени Възникна грешка при изчистването на кеша Изчисти бисквитки Бисквитки изчистени + Изчисти базата данни + Изтрий историята на манги, които не са запазени в библиотеката Базата данни изчистена - Версия - Изпращай данни за сривове Помага за оправянето на бъгове. Няма да се изпращат лични данни - Влизане в %1$s Потребителско име Парола Влез Влязохте Неизвестна грешка - Обновяване на категорията - Няма повече резултати - - Излизаща Неизвестно Лицензирана Премахни от библиотеката - Глава %1$s Изтегляне (%1$d/%2$d) + Грешка Оригинално заглавие Номер на главата По източник @@ -162,7 +148,6 @@ Изтегли Непрочетени Сигурни ли сте, че искате да изтриете избраните глави? - Следене Чета Завършена @@ -173,13 +158,11 @@ Заглавие Статус Глави - Категория със същото име вече съществува! Категориите бяха изтрити - Това ще премахне датата на прочитане на главата. Сигурни ли сте? + Добавяне на мангата към библиотеката\? Изображението запазено - Персонализиран филтър Постави за корица Корицата обновена @@ -187,38 +170,28 @@ Не беше намерена следваща глава Неуспешно декодиране на изображението Желаете ли да използвате това изображение за корица? - - - Не можахме да изтеглим главите. Може да опитате пак в секцията на изтеглянията - Нови глави Грешка при обновяването на корицата Моля, добавете мангата в библиотеката си, преди да направите това - Изберете корица Изберете резервно копие - Изтегли Няма налични актуализации - Търсене на актуализации… - Изтегля се… Изтегляне завършено Грешка при изтегляне Има нова версия! - - Нямате изтегляния Нямате нови глави Не сте чели нищо наскоро Библиотеката Ви е празна - Изтегли Грешка Получи се неочаквана грешка при изтеглянето на главата Няма налична Wi-Fi връзка Няма налична мрежова връзка + Категории Манга Следене История @@ -227,6 +200,7 @@ Възстанови Приложението не е достъпно Ежеседмично + Категория по подразбиране Питай всеки път Изрязвай границите Обърнати бутони за звука @@ -235,7 +209,6 @@ Възстанови резервно копие Възстанови библиотеката от резервно копие Директория за резервното копие - Автоматично запазване Честота на запазване Максимален брой копия Резервно копие създадено @@ -243,12 +216,8 @@ Какво искате да запазите? Възстановяване на копие Създаване на резервно копие - Обнови проследяването Локални Да се изтрият ли изтеглените глави? - За възстановяването се изтеглят данни от източника, за които може да бъде отчетен разход на данни. -\n -\nСъщо проверете дали сте изтеглили всички необходими разширения и сте влезли коректно в източниците и услугите за проследяване преди възстановяването. На пауза Изтеглянето спряно Глобално търсене @@ -258,7 +227,6 @@ Търсене Общи Изтеглени глави - Локална Нямате категории. Натиснете плюса, за да създадете такава и да организирате библиотеката си. Мигриране Разширения @@ -288,7 +256,6 @@ Източникът не е инсталиран: %1$s Препрочитане Статус - Начало Тип Завършени: Текущи: @@ -325,27 +292,12 @@ На пауза Сигурност Ъпдейти на разширенията + Нови глави Моля, обновете WebView за по-добра съвместимост Грешка при минаването през Cloudflare - - 1 наличен ъпдейт за разширение - %d налични ъпдейта за разширения - - - Глави %1$s и още 1 - Глави %1$s и още %2$d - Глави %1$s Глава %1$s и %2$d още Глава %1$s - - 1 нова глава - %1$d нови глави - - - За 1 заглавие - За %d заглавия - Проверяване за нови глави Гл. %1$s - %2$s Обновяване на библиотеката @@ -357,12 +309,7 @@ Помощ за локални източници Закачени Последно използвани - Виж уебсайта в WebView Имейл адрес - - 1 оставаща - %1$s оставащи - Филтрира мангата в цялата Ви библиотека Само изтеглени Провери за ъпдейт @@ -377,12 +324,6 @@ Съхраняването неуспешно Копието вече се запазва %02d мин, %02d сек - Включвай само закачени източници - 25% - 20% - 15% - 10% - Никакво Странично разстояние Четене Винаги показвай прехода между главите @@ -393,17 +334,12 @@ Показване Скривай съдържанието на уведомленията Скрий съдържанието на приложението и блокирай снимките на екрана - - След 1 минута - След %1$s минути - Никога Винаги Заключи при неактивност Изисквай отключване Сигурност Уведомления - Потвърждение при излизане Система на абонаментите Включено Изключено @@ -412,7 +348,6 @@ Премести най-долу Най-стари Най-нови - Пренареди Отмени всичко Откачи Закачи @@ -420,32 +355,19 @@ Избери обратно Последна глава Меню - Натиснете назад още веднъж, за да излезете Източници Още Режим на четене За тази поредица Системните настройки не бяха отворени Обнови кориците - - Направено за %1$s с %2$s грешка - Направено за %1$s с %2$s грешки - Еднопосочна синхронизация на прочетените глави. Установи проследяване за отделни манги от индивидуалния бутон за проследяване. Сиво Намалява бандинга, но се отразява на производителността - - %d категория - %d категории - Мигрирай Източникът не е намерен Няма намерени страници По дата на качване - - 1 глава - %1$s глави - Раздели Данни Изисква рестартиране, за да влезе в сила @@ -472,11 +394,6 @@ Грешки Готово Прогрес - Изтеглянето е завършено - - 1 тракер - %d тракери - Неизвестен статус Неизвестен автор Нямате отметнати източници @@ -491,10 +408,6 @@ Тема Добавено на Не са намерени глави - - Има 1 липсваща глава, източникът липса или е филтриран - Има %d липсващи глави, източникът липса или е филтриран - NSFW (18+) източници Низходящ Възходящ @@ -525,18 +438,11 @@ Пейзаж Работа на заден план Изключи инкогнито - Обновяване на библиотеката… (%1$d/%2$d) - Времеотметки - Къси (Днес, Вчера) - Дълги (Къси+, преди х дни) Облик - Относителни времеотметки Да L-образно Kindle-подобно - Създава папки според заглавието на мангата Автоматично - Обновявай тракерите при обновявания на библиотеката Схема на навигацията Преди След @@ -547,13 +453,10 @@ DNS пред HTTPS Общ брой манга Дата на получаване + Локална манга Чувствителност за скриване на менюто при превъртане Най-висока Непрочетена - - Вчера - Преди %1$d дни - Корица Предупреждение Удостоверете, за да потвърдите промяната @@ -569,8 +472,8 @@ Ин и Янг Йоцуба Ограничения: %s - Автоматично обновявай тракерите Различно сортиране и показване за всяка категоря + Манга в изключените категории няма да бъде обновявана дори ако се намира във включените категории. Никоя Включва: %s Изключва: %s @@ -582,12 +485,12 @@ Черно-бяло Инвертирай докосване Действия - Запазвай страниците в отделни папки Дясно и Ляво Ориентация Портрет Ниска Най-ниска + Изключени категории Автоматично изтегляне Манга в изключени категории няма да бъде изтеглена, дори да се намира във включени категории. Наръчник при проследяване @@ -601,7 +504,6 @@ Корицата запазена Сигурни ли сте, че искате да наложите тези настройки\? Направи по подразбиране - Този тракер е съвместим само с източника Komga. Дата на започване Изчисти историята Историята изтрита @@ -615,7 +517,6 @@ Следваща страница Език Показвай в списъка с източници и разширения - Скорошни Днес Информация Покажи зони за натискане, когато четецът се отвори @@ -643,7 +544,6 @@ Неуспешно получаване на списък с разширения На всеки 3 дена Само през Wi-Fi - Започнати Често задавани въпроси и ръководства Решетка само с корици Искате ли да изтриете категорията \"%s\"\? @@ -653,14 +553,11 @@ Не е инсталиран Пропуснати Обърнат портрет - Когато батерията не е паднала Език Случи се неочаквана грешка - 5% Автоматично изтегляне при четене Няма описание Няма заглавия в библиотеката за резервно копие - Разделяй високите изображения (БЕТА) Нулирай режима на четене и ориентацията на всички поредици Сигурни ли сте\? Популярни @@ -689,8 +586,6 @@ Работи само със заглавия в библиотеката и ако текущата и следващата глава са вече изтеглени Виж наскоро обновената манга Не можа да бъде намерен файловият път на страница %d - Показвай дубликати на закачените източници - Повтаряй закачените източници в дадените езикови групи Изчисти данните на WebView Това е неудобно %1$d пропуснати обновление/я @@ -703,10 +598,6 @@ Лавандула Език на приложението Изтрий категория - - Следващата непрочетена глава - Следващите %d непрочетени глави - Възрастово ограничение Списък с желания Запази като CBZ архив @@ -725,7 +616,6 @@ Затвори Всички настройки на четеца нулирани Форматът RARv5 не се поддържа - Език на приложението, известия Тема, формат на датата и времето Категории, глобални обновления Режим на четене, показване, навигация @@ -742,5 +632,4 @@ Приключено издаване Достъпна е нова версия от официалните източници. Научете как да мигрирате от неофициалните версии на F-Droid. Страница %d не беше намерена при разделяне -Изтегляния - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/src/main/res/values-te/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/bn/plurals-aniyomi.xml similarity index 85% rename from i18n/src/main/res/values-te/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/bn/plurals-aniyomi.xml index dde318b105..a37972076a 100644 --- a/i18n/src/main/res/values-te/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/bn/plurals-aniyomi.xml @@ -1,32 +1,30 @@ - విభాగములు - టచియోమిని తెరవండి - + - + - + - + - + - + - + diff --git a/i18n/src/commonMain/resources/MR/bn/plurals.xml b/i18n/src/commonMain/resources/MR/bn/plurals.xml new file mode 100644 index 0000000000..77fb973bcc --- /dev/null +++ b/i18n/src/commonMain/resources/MR/bn/plurals.xml @@ -0,0 +1,55 @@ + + + + %1$s অধ্যায়সমূহ এবং ১টি আরও + %1$s অধ্যায়সমূহ এবং %2$dটি আরও + + + %1$s সময়ে %2$s ত্রুটি সম্পন্ন + %1$s সময়ে %2$sটি ত্রুটি সম্পন্ন + + + %dটি বিভাগ + %dটি বিভাগসমূহ + + + ১ মিনিট পর + %1$s মিনিট পর + + + এক্সটেনশন হালনাগাদ উপলব্ধ + %d এক্সটেনশন হালনাগাদ উপলব্ধ + + + ১টি নতুন অধ্যায় + %1$dটি নতুন অধ্যায় + + + ১টি শিরোনামের জন্য + %dটি শিরোনামের জন্য + + + 1 অধ্যায় এড়িয়ে জাছি, হয় উৎসটি অনুপস্থিত বা এটি ফিল্টার করা হয়েছে + %d অধ্যায় কিপ করা হচ্ছে, হয় উৎসটি তাদের অনুপস্থিত অথবা সেগুলি ফিল্টার করা হয়েছে + + + 1টি ট্র্যাকার + %dটি ট্র্যাকার + + + ১টি অধ্যায় + %1$sটি অধ্যায় + + + ১টি বাকি আছে + %1$sটি বাকি আছে + + + গতকাল + %1$d দিন আগে + + + পরবর্তী অপঠিত অধ্যায় + পরবর্তী %d টি অপঠিত অধ্যায় + + \ No newline at end of file diff --git a/i18n/src/main/res/values-bn/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/bn/strings-aniyomi.xml similarity index 91% rename from i18n/src/main/res/values-bn/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/bn/strings-aniyomi.xml index cfe0ec31b3..d8dee6994d 100644 --- a/i18n/src/main/res/values-bn/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/bn/strings-aniyomi.xml @@ -76,32 +76,4 @@ গ্লোবাল মাঙ্গা অনুসন্ধান গ্লোবাল অ্যানিমে অনুসন্ধান আনবুকমার্ক পর্ব - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-bn/strings.xml b/i18n/src/commonMain/resources/MR/bn/strings.xml similarity index 89% rename from i18n/src/main/res/values-bn/strings.xml rename to i18n/src/commonMain/resources/MR/bn/strings.xml index 0342796b01..6b8764480b 100644 --- a/i18n/src/main/res/values-bn/strings.xml +++ b/i18n/src/commonMain/resources/MR/bn/strings.xml @@ -1,18 +1,19 @@ নাম + বিভাগসমূহ পুস্তক সংগ্রহ অধ্যায়সমূহ ট্র্যাকিং ইতিহাস সেটিংস + ডাউনলোড সারি লাইব্রেরি ইতিহাস হালনাগাদসমূহ ব্যাকআপ এবং পুনরুদ্ধার সেটিংস বিশোধন - ডাউনলোড হয়েছে বুকমার্ককৃত অপঠিত ফিল্টার সরান @@ -80,6 +81,7 @@ নিজেথেকে আপডেটের সীমাবদ্ধতা চার্জ হচ্ছে \"সম্পূর্ন\" শর্তসহিত + সাধারণ বিভাগ সর্বদা জিজ্ঞাসা করুন সম্পূর্ণ পর্দা পৃষ্ঠা পালটানো এনিমেট করুন @@ -134,7 +136,6 @@ ব্যাকআপ পুনরুদ্ধার ব্যাকআপ ফাইল থেকে সংগ্রহশালা পুনরুদ্ধার করুন ব্যাকআপের স্থান - স্বয়ংক্রিয় ব্যাকআপ ব্যাকআপ ফ্রিকোয়েন্সি সর্বোচ্চ ব্যাকআপ ব্যাকআপ তৈরী হয়েছে @@ -147,8 +148,9 @@ ক্যাচ পরিষ্কারের সময় একটি ত্রুটি দেখা দিয়েছে কুকিস পরিষ্কার করুন কুকিস পরিষ্কার হয়েছে + ডাটাবেজ পরিষ্কার করুন + আপনার সংগ্রহশালাতে যেসব মাংগা সংরক্ষিত নেই সেগুলোর ইতিহাস মুছে ফেলুন এন্ট্রিগুলো মুছে ফেলা হয়েছে - ট্র্যাকিং হালনাগাদ করুন সংস্করণ ক্র‍্যাশের প্রতিবেদন পাঠান বাগ ঠিক করার জন্য সাহায্য করুন। কোন সংবেদনশীল তথ্য পাঠানো হবে না @@ -159,7 +161,6 @@ প্রবেশ হয়েছে অজানা ত্রুটি বিভাগের হালনাগাদ হচ্ছে - স্থানীয় আর কোনও ফলাফল নেই স্থানীয় উৎস অন্যান্য @@ -173,6 +174,8 @@ ডাউনলোডকৃত অধ্যায়গুলো মুছে ফেলতে চান? অধ্যায় %1$s ডাউনলোড হচ্ছে (%1$d/%2$d) + ত্রুটি + থেমে আছে উৎস শিরোনাম অধ্যায় নাম্বার উৎস অনুযায়ী @@ -192,6 +195,7 @@ এই নামের একটি বিভাগ ইতিমধ্যে বিদ্যমান! বিভাগগুলি মোছা হয়েছে এটা এই অধ্যায়ের পড়ার সময়কাল সরিয়ে ফেলবে। আপনি নিশ্চিত? + সংগ্রহশালায় মাঙ্গা যোগ করবেন\? ছবি সংরক্ষিত হয়েছে স্বনির্ধারিত ফিল্টার প্রচ্ছদ হিসাবে সংরক্ষণ করুন @@ -208,7 +212,6 @@ ব্যাকআপ ফাইল নির্বাচন করুন ডাউনলোড নতুন কোন হালনাগাদ নেই - হালনাগাদের অনুসন্ধান হচ্ছে… ডাউনলোড হচ্ছে… ডাউনলোড সম্পন্ন হয়ে গেছে ডাউনলোড ত্রুটি দেখা গিয়েছে @@ -223,6 +226,7 @@ অপ্রত্যাশিত ত্রুটির কারণে অধ্যায় ডাউনলোড করা যায়নি কোন ওয়াই-ফাই সংযোগ খুঁজে পাওয়া যায়নি কোন নেটওয়ার্ক সংযোগ খুঁজে পাওয়া যায়নি + ডাউনলোড বিরতি সাধারণ স্থানান্তর করুন এক্সটেনশন গুলো @@ -252,7 +256,6 @@ উৎস ইন্সটল করা নেই: %1$s পুনরায় পড়া স্থিতি - শুরু হয়েছে ধরণ শেষ: বর্তমান: @@ -290,7 +293,6 @@ তারিখে যোগকৃত সর্বশেষ অধ্যায় তালিকা - প্রস্থান করতে আবার ব্যাক চাপুন উৎস সমূহ আরও প্রদর্শন @@ -302,7 +304,6 @@ আনলক প্রয়োজন নিরাপত্তা বিজ্ঞপ্তিগুলি নিয়ন্ত্রণ করুন - বের হতে নিশ্চিত করুন তারিখের রীতি চালু করুন বন্ধ করুন @@ -313,7 +314,6 @@ শীর্ষে সরান প্রবীণতম নবীনতম - পুনরায় সাজান সব বাতিল করুন আলগা করুন আটকান @@ -345,12 +345,6 @@ উৎস অনুপলব্ধ: ব্যাকআপে কোনো মাংগা নেই। ব্যাকআপ ফাইল গ্রহণযোগ্য নয় - শুধু আটকানো উৎস যোগ করুন - ২৫% - ২০% - ১৫% - ১০% - কিছুই না পার্শ্ব প্যাডিং পড়া হচ্ছে পঠন ধরন @@ -367,59 +361,27 @@ অনুমোদনহীন অনিষ্পন্ন হালনাগাদ সংগ্রহশালা হালনাগেদের সময় নতুন মোড়ক এবং বর্ণনা খুঁজুন - - %1$s অধ্যায়সমূহ এবং ১টি আরও - %1$s অধ্যায়সমূহ এবং %2$dটি আরও - গাঁথুনিকৃত - - %1$s সময়ে %2$s ত্রুটি সম্পন্ন - %1$s সময়ে %2$sটি ত্রুটি সম্পন্ন - ট্র্যাকারগুলিতে প্রবেশ হয়নি: রিডার খোলা থাকলে বর্তমান মোড সংক্ষেপে দেখান - - %dটি বিভাগ - %dটি বিভাগসমূহ - - - ১ মিনিট পর - %1$s মিনিট পর - উভয় উল্লম্ব অনুভূমিক কিছুই না উল্টানো ট্যাপিং এক্সটেনশনের হালনাগাদগুলো + অধ্যায়ের হালনাগাদগুলো ত্রুটিসমূহ সম্পূর্ণ অগ্রগতি - ডাউনলোড সম্পন্ন হয়েছে অনুগ্রহ করে উন্নততর সামঞ্জস্যতার জন্য ওয়েবভিউ অ্যাপটি হালনাগাদ করুন ক্লাউডফ্লেয়ার বাইপাস করতে ব্যর্থ - - এক্সটেনশন হালনাগাদ উপলব্ধ - %d এক্সটেনশন হালনাগাদ উপলব্ধ - অধ্যায়গুলি %1$s অধ্যায় %1$s এবং %2$d আরও অধ্যায় %1$s - - ১টি নতুন অধ্যায় - %1$dটি নতুন অধ্যায় - - - ১টি শিরোনামের জন্য - %dটি শিরোনামের জন্য - নতুন অধ্যায়ের জন্য অনুসন্ধান করা হচ্ছে অঃ %1$s - %2$s সংগ্রহশালার হালনাগাদ হচ্ছে - - 1 অধ্যায় এড়িয়ে জাছি, হয় উৎসটি অনুপস্থিত বা এটি ফিল্টার করা হয়েছে - %d অধ্যায় কিপ করা হচ্ছে, হয় উৎসটি তাদের অনুপস্থিত অথবা সেগুলি ফিল্টার করা হয়েছে - উৎস খুঁজে পাওয়া যায়নি কোনও পৃষ্ঠা পাওয়া যায় নি পঠন ধরন @@ -427,34 +389,21 @@ %1$s: %2$s, পৃষ্ঠা %3$d বিরতি ট্র্যাকিং যোগ করুন - - 1টি ট্র্যাকার - %dটি ট্র্যাকার - কোনও অধ্যায় পাওয়া যায় নি অধ্যায় সেটিংস আপলোডের তারিখ অনুযায়ী সংগ্রহশালার মাঙ্গার মোড়ক হালনাগাদ করুন - - ১টি অধ্যায় - %1$sটি অধ্যায় - অজানা অবস্থা অজানা লেখক আপনার কোন পিন করা উৎস নেই স্থানীয় উৎস নির্দেশিকা \"%1$s\" সার্বজনীনভাবে খুঁজুন সর্বশেষ ব্যবহৃত - ওয়েবসাইটটি ওয়েবভিউতে পরীক্ষা করুন ট্যাব গুলি ডাউনলোড করা অধ্যায় আপনি এখন প্রস্থান করেছেন প্রস্থান প্রস্থান করবেন %1$s থেকে\? - - ১টি বাকি আছে - %1$sটি বাকি আছে - আপনার লাইব্রেরীর সব মাঙ্গা ফিলটার করে ছদ্মবেশী মোড কেবল ডাউনলোড হয়েছে এমন @@ -495,7 +444,6 @@ পাওয়া যায়নি উৎস সমর্থিত নয় অপঠিত - এই ট্র্যাকারটি কেবল কমগা উৎসের সাথে সামঞ্জস্যপূর্ণ। কভার শেয়ার করার সময় ত্রুটি কভার সংরক্ষণে ত্রুটি কভার সংরক্ষিত @@ -533,8 +481,6 @@ পরবর্তী পূর্ববর্তী স্বয়ংক্রিয় - মাঙ্গা শিরোনাম অনুযায়ী ফোল্ডার তৈরি করে - পৃষ্ঠাগুলি পৃথক ফোল্ডারে সংরক্ষণ করুন ক্রিয়া উল্টানো ধূসর স্কেল @@ -548,20 +494,10 @@ বাদ দিন: %s অন্তর্ভুক্ত করুন: %s শূন্য + বাদ দেওয়া ক্যাটাগরিতে মঙ্গা আপডেট করা হবে না যদিও সেগুলি অন্তর্ভুক্ত ক্যাটাগরিতেও থাকে। সাজানোর এবং প্রদর্শনের জন্য প্রতি শ্রেণীর সেটিংস - লাইব্রেরি আপডেট করার সময় ট্র্যাকার আপডেট করুন - স্বয়ংক্রিয়ভাবে রিফ্রেশ ট্র্যাকার বিধিনিষেধ: %s - - গতকাল - %1$d দিন আগে - সম্প্রতি - সম্প্রতি - দীর্ঘ (সংক্ষিপ্ত+, n দিন আগে) - সংক্ষিপ্ত (আজ, গতকাল) - আপেক্ষিক টাইমস্ট্যাম্প - টাইমস্ট্যাম্প বিশুদ্ধ কালো অন্ধকার মোড চার পাতা ইয়িন এবং ইয়াং @@ -576,11 +512,13 @@ এখনই ডাউনলোড শুরু করুন সকল ত্রুটি দেখুন এই সিরিজের সব বাতিল করুন + স্থানীয় উৎস আপনার এখনও কোন বিভাগ নেই | এই অ্যান্ড্রয়েড সংস্করণটি আর সমর্থিত নয় পরিবর্তন নিশ্চিত করতে প্রমাণীকরণ করুন প্রাপ্তির তারিখ সাধারণ + বর্জিত বিভাগ গুলি অ্যাপের তথ্য শব উপদাতে কর স্বয়ংক্রিয় ব্যাকআপ অত্যন্ত সুপারিশময়. আপনি অন্যান্য জায়গায়ও কপি রাখা উচিত। @@ -601,7 +539,6 @@ প্রতি ৩ দিন সুধু মাত্র ওয়িফি তে সতর্কতা: বড় আপডেটগুলি উত্সের ক্ষতি করে এবং ধীরগতির আপডেটের দিকে নিয়ে যেতে পারে এবং ব্যাটারি ব্যবহারও বাড়িয়ে দিতে পারে - লাইব্রেরি আপডেট করা হচ্ছে... (%1$d/%2$d) তথ্যশালা পরিষ্কার তথ্যশালায় %1$d টি মাঙ্গা যেগুলি লাইব্রেরীতে নেই গোপনীয়তা নীতি @@ -612,14 +549,9 @@ বিরতিতে রয়েছে %1$d আপডেট(গুলি) ব্যর্থ হয়েছে সম্পূর্ণ প্রকাশিত - শুরু করা হয়েছে আপনি কি \"%s\" বিভাগটি মুছে ফেলতে চান\? সম্প্রতি আপনার হালনাগাদকৃত মাঙ্গা দেখুন আপনি কি নিশ্চিত\? - - পরবর্তী অপঠিত অধ্যায় - পরবর্তী %d টি অপঠিত অধ্যায় - অপঠিত সংখ্যা সবকিছু মুছুন বিভাগ মুছুন @@ -640,14 +572,14 @@ ওয়েবভিইউ ডাটা মুছুন বহু FAQ এবং নির্দেশনা - অ্যাপ ভাষা, বিজ্ঞপ্তি বিভাগসমূহ, সার্বজনীন হালনাগাদ অ্যাপ ভাষা থিম,সময় ও তারিখের ধরন পঠনের ধরন, ডিসপ্লে,নেভিগেশন ম্যানুয়াল ও সয়ংক্রিয় ব্যাকআপ অ্যাপ লক,নিরাপদ পর্দা - ডাউনলোড সারি + RARv5 ধরন সমর্থিত নয় + অপঠিত অধ্যায় থাকায় এড়িয়ে যাওয়া হয়েছে স্থানীয় ক্লিপবোর্ডে কপি করুন সমস্ত পাঠক সেটিংস আবার @@ -657,11 +589,10 @@ অ্যাপ লক চালু থাকলে Widget পাওয়া যায় না বিভাগ আপডেট করুন এলোমেলো এন্ট্রি খুলুন - পড়া চালিয়ে যান বোতাম ডাউনলোড চেক করা হচ্ছে পৃষ্ঠার ফাইল পাথ খুঁজে পাওয়া যায়নি %d অবৈধ ডাউনলোড সমুহ এখন না ডিবাগ তথ্য বাদ দেওয়া হয়েছে কারণ সিরিজের আপডেটের প্রয়োজন নেই৷ - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ca/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/ca/plurals-aniyomi.xml new file mode 100644 index 0000000000..34aa96bd72 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/ca/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + 1 nou episodi + %1$d nous episodis + + + %d segon + %d segons + + + Per 1 títol + Per %d títols + + + %1$s episodi + %1$s episodis + + + Episodis %1$s i 1 més + Episodis %1$s i %2$d més + + + Següent episodi pendent de visualització + Següents episodis %d pendents de visualització + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ca/plurals.xml b/i18n/src/commonMain/resources/MR/ca/plurals.xml new file mode 100644 index 0000000000..0309ac347c --- /dev/null +++ b/i18n/src/commonMain/resources/MR/ca/plurals.xml @@ -0,0 +1,67 @@ + + + + Després d’%1$s minut + Després de %1$s minuts + + + %1$d capítol nou + %1$d capítols nous + + + Capítols %1$s i 1 més + Capítols %1$s i %2$d més + + + Per a %d element + Per a %d elements + + + Hi ha una actualització d’una extensió + Hi ha actualitzacions de %d extensions + + + En resta %1$s + En resten %1$s + + + Fet en %1$s amb %2$s error + Fet en %1$s amb %2$s errors + + + %d categoria + %d categories + + + %1$s capítol + %1$s capítols + + + %d servei de seguiment + %d serveis de seguiment + + + S’ha omès %d capítol. És possible que manqui a la font o que hagi estat filtrat + S’han omès %d capítols. És possible que manquin a la font o que hagin estat filtrats + + + Ahir + Fa %1$d dies + + + El següent capítol no llegit + Els següents %d capítols no llegits + + + El següent capítol + Els següents %d capítols + + + Manca %1$s capítol + Manquen %1$s capítols + + + 1 dia + %d dies + + \ No newline at end of file diff --git a/i18n/src/main/res/values-ca/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/ca/strings-aniyomi.xml similarity index 94% rename from i18n/src/main/res/values-ca/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/ca/strings-aniyomi.xml index d0d27f630f..a67f153f23 100644 --- a/i18n/src/main/res/values-ca/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/ca/strings-aniyomi.xml @@ -178,10 +178,6 @@ Activar estil Netflix Episodis %1$s Opcions de còpia de seguretat - - 1 nou episodi - %1$d nous episodis - Mode ajustament de pantalla Sensor vertical Apaisat per defecte @@ -212,10 +208,6 @@ Actualment llegint Anime 8 segons - - %d segon - %d segons - +%1$d s Qualitat de vídeo Categoria anime per defecte @@ -235,15 +227,7 @@ Salta la introducció per defecte Activa l\'ús del mode d\'imatge a imatge Utilitza sempre un gestor de descàrregues extern per l\'anime - - Per 1 títol - Per %d títols - Episodis descarregats - - %1$s episodi - %1$s episodis - Eliminar els episodis descarregats\? Descarregant (%d%%) Vols eliminar els episodis sel·leccionats\? @@ -255,21 +239,9 @@ Canviar la velocitat de reproducció: AniSkip requereix que l\'anime sigui rastrejat amb MAL o Anilist perquè funcioni Episodi %1$s i %2$d més - - Episodis %1$s i 1 més - Episodis %1$s i %2$d més - Extensions del manga Saltar ending - - Següent episodi pendent de visualització - Següents episodis %d pendents de visualització - Manga en font local Amaga les entrades dels animes que ja siguin a la biblioteca Amaga les entrades dels mangas que ja siguin a la biblioteca - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-ca/strings.xml b/i18n/src/commonMain/resources/MR/ca/strings.xml similarity index 64% rename from i18n/src/main/res/values-ca/strings.xml rename to i18n/src/commonMain/resources/MR/ca/strings.xml index 18786a184f..43bd567e69 100644 --- a/i18n/src/main/res/values-ca/strings.xml +++ b/i18n/src/commonMain/resources/MR/ca/strings.xml @@ -1,21 +1,22 @@ Nom - Mangues + Categories + Elements de la biblioteca Capítols En seguiment Historial Configuració + Cua de baixades Biblioteca Historial Novetats Còpia de seguretat i restauració Migració Extensions - Informació de l\'extensió + Informació de l’extensió Configuració Filtra - Baixats Marcats No llegits Elimina el filtre @@ -61,7 +62,7 @@ Desfés Obre el registre Restaura - S\'està carregant… + S’està carregant… Aplicació no disponible General Lector @@ -69,7 +70,7 @@ Seguiment Avançat Quant a - Elements per fila + Mida de la quadrícula Vertical Horitzontal Actualitzacions automàtiques @@ -81,14 +82,15 @@ Cada setmana Tot Restriccions del dispositiu per a les actualitzacions automàtiques - Quan s\'estigui carregant - Amb l\'estat «Completat» + Quan s’estigui carregant + Amb l’estat «Completat» + Categoria per defecte Demana-ho sempre Actualitza Instal·la Pendent - S\'està baixant - S\'està instal·lant + S’està baixant + S’està instal·lant Instal·lades Confia-hi No és de confiança @@ -108,19 +110,19 @@ Blanc Negre Mode de lectura per defecte - D\'esquerra a dreta - De dreta a esquerra - Vertical - Webtoons + Paginat (d’esquerra a dreta) + Paginat (de dreta a esquerra) + Paginat (vertical) + Tira vertical Paginat - Tipus d\'escalat + Tipus d’escalat Ajusta a la pantalla Estira - Ajusta a l\'amplada - Ajusta a l\'alçada + Ajusta a l’amplada + Ajusta a l’alçada Mida original Ajust intel·ligent - Posició d\'inici de l\'ampliació + Posició d’inici de l’ampliació Automàtica Esquerra Dreta @@ -128,7 +130,7 @@ Sense animació Normal Ràpida - Tipus de rotació per defecte + Rotació per defecte Lliure Vertical forçada Horitzontal forçada @@ -137,7 +139,7 @@ B A Ubicació de les baixades - Velocitat de l\'animació del doble toc + Velocitat de l’animació del doble toc Ubicació personalitzada Desactivat Darrer capítol llegit @@ -146,38 +148,37 @@ Anteantepenúltim capítol llegit Anteanteantepenúltim capítol llegit Baixa capítols nous - Serveis + Serveis de seguiment Crea una còpia de seguretat Es pot utilitzar per a restaurar la biblioteca actual Restaura una còpia de seguretat Restaura la biblioteca del fitxer de còpia de seguretat Ubicació de la còpia de seguretat - Còpies de seguretat automàtiques - Freqüència de la còpia de seguretat - Màxim de còpies de seguretat - S\'ha creat la còpia de seguretat - S\'ha completat la restauració + Freqüència de la còpia de seguretat automàtica + Màxim de còpies de seguretat automàtiques + S’ha creat la còpia de seguretat + S’ha completat la restauració De què voleu fer una còpia de seguretat\? - S\'està restaurant la còpia de seguretat - S\'està creant la còpia de seguretat + S’està restaurant la còpia de seguretat + S’està creant la còpia de seguretat Ús: %1$s - S\'ha buidat la memòria cau. S\'han suprimit %1$d fitxers - S\'ha produït un error en netejar + S’ha buidat la memòria cau. S’han suprimit %1$d fitxers + S’ha produït un error en netejar Esborra les galetes - S\'han esborrat les galetes - S\'han suprimit les entrades - Refresca el seguiment + S’han esborrat les galetes + Buida la base de dades + Suprimeix l’historial dels elements que no siguin a la biblioteca + S’han suprimit les entrades Versió - Envia informes d\'errors - Ajuda a solucionar errades. No s\'enviaran dades sensibles + Envia informes d’errors + Ajuda a solucionar errades. No s’enviaran dades sensibles Inicia la sessió a %1$s - Nom d\'usuari + Nom d’usuari Contrasenya Inicia la sessió - S\'ha iniciat la sessió - S\'ha produït un error desconegut - S\'està actualitzant la categoria - Local + S’ha iniciat la sessió + S’ha produït un error desconegut + S’està actualitzant la categoria No hi ha més resultats Font local Altres @@ -188,14 +189,16 @@ Desconegut Llicenciat Elimina de la biblioteca - S\'ha afegit a la biblioteca - S\'ha eliminat de la biblioteca + S’ha afegit a la biblioteca + S’ha eliminat de la biblioteca Voleu suprimir els capítols baixats\? - S\'ha copiat al porta-retalls: + S’ha copiat al porta-retalls: \n%1$s Font no instal·lada: %1$s Capítol %1$s - S\'està baixant (%1$d/%2$d) + S’està baixant (%1$d/%2$d) + Error + Pausat Títol de la font Número de capítol Per font @@ -214,18 +217,18 @@ Títol Estat Estat - Començat Tipus Ja hi ha una categoria amb aquest nom! - S\'han suprimit les categories - S\'eliminarà la data de lectura d\'aquest capítol. N\'esteu segur\? - S\'ha desat la imatge + S’han suprimit les categories + S’eliminarà la data de lectura d’aquest capítol. N’esteu segur\? + Voleu afegir-lo a la biblioteca\? + S’ha desat la imatge Filtre personalitzat Defineix com a portada - S\'ha actualitzat la portada + S’ha actualitzat la portada Pàgina: %1$d - No s\'ha trobat el capítol següent - No s\'ha pogut carregar la imatge + No s’ha trobat el capítol següent + No s’ha pogut carregar la imatge Voleu fer servir aquesta imatge com a portada\? Finalitzat: Actual: @@ -233,22 +236,21 @@ Anterior: No hi ha capítol següent No hi ha capítol anterior - S\'estan carregant les pàgines… - No s\'han pogut carregar les pàgines: %1$s + S’estan carregant les pàgines… + No s’han pogut carregar les pàgines: %1$s Seleccioneu les dades a incloure Migra Copia - No s\'han pogut baixar els capítols. Podeu tornar-ho a provar a la secció de baixades - S\'han trobat nous capítols - No s\'ha pogut actualitzar la portada - Afegiu l\'element a la vostra biblioteca abans de fer això + No s’han pogut baixar els capítols. Podeu tornar-ho a provar a la secció de baixades + S’han trobat nous capítols + No s’ha pogut actualitzar la portada + Afegiu l’element a la vostra biblioteca abans de fer això Seleccioneu la imatge de portada Seleccioneu el fitxer de còpia de seguretat Baixa No hi ha cap nova actualització disponible - S\'estan cercant actualitzacions… - S\'està baixant… - Premeu per a instal·lar l\'actualització + S’està baixant… + Premeu per a instal·lar l’actualització Error de baixada Nova versió disponible! No hi ha baixades @@ -258,11 +260,12 @@ No teniu categories. Premeu el botó més per a crear-ne una i organitzar la vostra biblioteca. Baixades Error - No s\'ha pogut baixar el capítol a causa d\'un error inesperat + No s’ha pogut baixar el capítol a causa d’un error inesperat No hi ha cap connexió Wi-Fi disponible No hi ha cap connexió de xarxa disponible + Baixades pausades General - Mostra amb un toc llarg + Mostra les accions amb un toc llarg Obre en una WebView Color de 32 bits Omet capítols marcats com a llegits @@ -273,19 +276,19 @@ Esquiva / Il·lumina Crema / Enfosqueix Ajuda - No s\'ha trobat cap resultat + No s’ha trobat cap resultat Seleccioneu una font a migrar Endarrere Endavant Actualitza Biblioteca Obsoleta - Aquesta extensió ja no està disponible. És possible que no funcioni correctament i pot causar problemes a l\'aplicació. És recomanable que la desinstal·leu. + Aquesta extensió ja no està disponible. És possible que no funcioni correctament i pot causar problemes a l’aplicació. És recomanable que la desinstal·leu. Format de data Actualització global Voleu tancar la sessió a %1$s\? Tanca la sessió - S\'ha tancat la sessió + S’ha tancat la sessió Pausat Més Darrer capítol @@ -301,52 +304,31 @@ Bloca per inactivitat Sempre Mai - - Després d\'%1$s minut - Després de %1$s minuts - Mode discret Actualitzacions pendents - Mostra el contingut a l\'àrea de retall - No s\'ha pogut evitar el Cloudflare - Actualitzeu l\'aplicació de WebView per a tenir més bona compatibilitat - El mode discret amaga el contingut de l\'aplicació en canviar entre aplicacions i bloca les captures de pantalla + Mostra el contingut a l’àrea de retall + No s’ha pogut evitar el Cloudflare + Actualitzeu l’aplicació WebView per a tenir més bona compatibilitat + Novetats de capítols + El mode discret amaga el contingut de l’aplicació en canviar entre aplicacions i bloca les captures de pantalla Visualització - - %1$d capítol nou - %1$d capítols nous - Capítol %1$s Capítol %1$s i %2$d més Capítols %1$s - - Capítols %1$s i 1 més - Capítols %1$s i %2$d més - Amaga el contingut de les notificacions - S\'està comprovant si hi ha capítols nous - Desactiva l\'optimització de la bateria + S’està comprovant si hi ha capítols nous + Desactiva l’optimització de la bateria Fa que funcionin millor les actualitzacions de la biblioteca en segon pla i les còpies de seguretat - L\'optimització de la bateria ja està desactivada + L’optimització de la bateria ja està desactivada Adreça electrònica Mostra sempre la transició de capítol - - Per a %d element - Per a %d elements - Menú - Reordena Els més nous Els més antics Mou a dalt de tot Mou a sota de tot - - Hi ha una actualització d\'una extensió - Hi ha actualitzacions de %d extensions - - Actualitzacions d\'extensions - Comproveu el lloc web en una WebView - S\'està actualitzant la biblioteca + Actualitzacions d’extensions + S’està actualitzant la biblioteca Lectura Omet els capítols filtrats Fonts @@ -354,13 +336,8 @@ Fixades Fixa Segueix - 25% - 20% - 15% - 10% - Cap Espaiat lateral - Continu en vertical + Tira vertical amb separació Desfixa A la biblioteca Afegeix a la biblioteca @@ -368,41 +345,26 @@ Més Llicències de codi obert Lloc web - Confirma la sortida - Torneu a prémer Endarrere per a sortir Només els baixats Cap. %1$s - %2$s Ha fallat la restauració de la còpia de seguretat Ha fallat la còpia de seguretat - S\'ha cancel·lat la restauració - Ja s\'està fent una restauració - Ja s\'està fent una còpia de seguretat + S’ha cancel·lat la restauració + Ja s’està fent una restauració + Ja s’està fent una còpia de seguretat Guia de fonts locals Utilitzada per darrera vegada Comprova si hi ha actualitzacions %02d min i %02d s Filtra tots els elements de la vostra biblioteca - - En resta %1$s - En resten %1$s - - Cerca només a les fonts fixades a la cerca global Gris Mode de lectura Per a aquesta sèrie - No s\'ha pogut obrir la configuració del dispositiu - - Fet en %1$s amb %2$s error - Fet en %1$s amb %2$s errors - + No s’ha pogut obrir la configuració del dispositiu Redueix les bandes de colors, però pot afectar el rendiment - - %d categoria - %d categories - - La sincronització és unidireccional per a actualitzar el progrés dels capítols als serveis de seguiment. Configureu el seguiment d\'elements individuals al seu botó de seguiment. + La sincronització és unidireccional per a actualitzar el progrés dels capítols als serveis de seguiment externs. Configureu el seguiment d’elements individuals al seu botó de seguiment. Refresca les portades de la biblioteca - Aquesta extensió no pertany a la llista d\'extensions oficials del Tachiyomi. + Aquesta extensió no pertany a la llista d’extensions oficials. No oficial Per data de pujada Dades @@ -415,7 +377,7 @@ Migra Pestanyes Mostra les pestanyes de les categories - No s\'ha trobat cap pàgina + No s’ha trobat cap pàgina Desactiva-ho tot Activa-ho tot En totes dues direccions @@ -423,17 +385,13 @@ En horitzontal Cap Inverteix les zones de toc - No s\'ha trobat la font - - %1$s capítol - %1$s capítols - + No s’ha trobat la font Estat desconegut Autor desconegut Cerca «%1$s» globalment - S\'ha actualitzat a la v%1$s + S’ha actualitzat a la v%1$s Novetats - Cal reiniciar l\'aplicació perquè tingui efecte + Cal reiniciar l’aplicació perquè tingui efecte Xarxa Mode de lectura Mostra breument el mode actual en obrir el lector @@ -441,26 +399,17 @@ Tema Desactiva Inicia - Data d\'incorporació - - %d seguidor - %d seguidors - + Data d’incorporació No teniu cap origen fixat - Baixada completada Completada Progrés Errors - Seguidors sense sessió iniciada: - Les fonts d\'aquesta extensió poden contenir contingut NSFW (+18) + Serveis de seguiment sense sessió iniciada: + Les fonts d’aquesta extensió poden contenir contingut NSFW (+18) +18 - Això no evita que les extensions no oficials o possiblement mal etiquetades puguin mostrar contingut NSFW (+18) a l\'aplicació. - - S\'ha omès %d capítol. És possible que manqui a la font o que hagi estat filtrat - S\'han omès %d capítols. És possible que manquin a la font o que hagin estat filtrats - - No s\'ha trobat cap capítol - S\'ha actualitzat la configuració per defecte dels capítols + Això no evita que les extensions no oficials o possiblement mal etiquetades puguin mostrar contingut NSFW (+18) a l’aplicació. + No s’ha trobat cap capítol + S’ha actualitzat la configuració per defecte dels capítols Estableix com a per defecte Esteu segur que voleu desar aquesta configuració com a configuració per defecte\? Configuració dels capítols @@ -468,56 +417,55 @@ Configuració de la cerca Capítols baixats N’esteu segur\? Es perdrà tot l’historial. - Mode d\'incògnit - Suprimeix l\'historial - S\'ha buidat l\'historial + Mode d’incògnit + Suprimeix l’historial + S’ha buidat l’historial Pàgina següent Pàgina anterior Guia de migració de fonts Fonts NSFW (+18) - No s\'ha trobat cap aplicació de selecció de fitxers + No s’ha trobat cap aplicació de selecció de fitxers Mostra a la llista de fonts i extensions Torneu a iniciar la sessió a MAL Data de finalització Data d’inici - Desa els registres d\'errors en un fitxer perquè el pugueu compartir amb els desenvolupadors - Bolca els registres de fallades + Desa els registres d’errors en un fitxer perquè el pugueu compartir amb els desenvolupadors + Comparteix el registre d’errors Zones de toc Vora Semblant al Kindle - En forma d\'L + En forma d’L Descendent Ascendent Per número de capítol Per data de pujada En seguiment - Mostra el nombre d\'elements - A la dreta i a l\'esquerra + Mostra el nombre d’elements + A la dreta i a l’esquerra Divideix les pàgines amples Si la ubicació de les pàgines amples dividides no encaixa amb la direcció de lectura Inverteix la ubicació de la divisió de pàgines Es restauraran les dades del fitxer de còpia de seguretat. \n \nCaldrà que instal·leu les extensions que manquin i que després inicieu la sessió als serveis de seguiment per a utilitzar-los. - Aquesta versió d\'Android ja no està suportada - No s\'ha trobat cap coincidència + Aquesta versió d’Android ja no està suportada + No s’ha trobat cap coincidència La font no està suportada No llegit - No s\'ha pogut copiar al porta-retalls - Desactiva el mode d\'incògnit + No s’ha pogut copiar al porta-retalls + Desactiva el mode d’incògnit DNS sobre HTTPS (DoH) Els elements de les categories excloses no es baixaran encara que també siguin a les categories incloses. + Els elements de les categories excloses no s’actualitzaran encara que també siguin a les categories incloses. Baixada automàtica Horitzontal Vertical - Tipus de rotació + Rotació Dreta Esquerra Següent Anterior Automàtic - Crea carpetes segons el títol dels elements - Desa les pàgines en carpetes separades Accions Escala de grisos Mostra breument les zones de toc en obrir el lector @@ -525,35 +473,30 @@ Inclou: %s Exclou: %s Cap - Premeu per a veure\'n els detalls + Premeu per a veure’n els detalls Cancel·la-ho tot per a aquesta sèrie - Data d\'obtenció dels capítols + Data d’obtenció dels capítols Data Ordena per El format del capítol no és vàlid - Actualitza els seguidors en actualitzar la biblioteca - Actualitza automàticament els seguidors - No s\'ha trobat el capítol - S\'ha produït un error en compartir la portada - S\'ha produït un error en desar la portada - S\'ha desat la portada + No s’ha trobat el capítol + S’ha produït un error en compartir la portada + S’ha produït un error en desar la portada + S’ha desat la portada Portada Guia de seguiment Desactivat Activat - Opcions de visualització i ordenació per categoria + Opcions d’ordenació per categoria Restriccions: %s + Font local La més baixa Baixa Alta La més alta + Categories excloses Encara no teniu cap categoria. - S’està actualitzant la biblioteca… (%1$d/%2$d) - Serveis millorats - - Ahir - Fa %1$d dies - + Serveis de seguiment millorats Avui Per defecte Advertència @@ -561,167 +504,152 @@ Verd poma Aparença Inicia la baixada ara - Nombre total d\'elements - Tema de l\'aplicació + Nombre total d’elements + Tema de l’aplicació Dinàmic - Recentment Llengua Capvespre Daiquiri de maduixa Tako Xarxet i turquesa - Ying i yang + Yin i yang Yotsuba Mode fosc negre pur - Marques de temps - Marques de temps relatives Cada 3 dies Només amb Wi-Fi - Curtes (Avui, Ahir) - Llargues (Curtes+, fa N dies) - Instal·leu i inicieu el Shizuku per a utilitzar-lo com a instal·lador d\'extensions. - Sensibilitat a l\'hora d\'amagar el menú en desplaçar + Instal·leu i inicieu el Shizuku per a utilitzar-lo com a instal·lador d’extensions. + Sensibilitat a l’hora d’amagar el menú en desplaçar Registre detallat Actualitza-ho tot - El Shizuku no s\'està executant + El Shizuku no s’està executant Invertits - És possible que la còpia de seguretat i la restauració no funcionin correctament si l\'Optimització del MIUI està desactivada. + És possible que la còpia de seguretat i la restauració no funcionin correctament si l’Optimització del MIUI està desactivada. Activitat en segon pla Interfície de tauleta Ajudeu a traduir - Guia d\'introducció + Guia d’introducció Política de privadesa - S\'està instal·lant l\'extensió… + S’està instal·lant l’extensió… Instal·lador Antic - Aquests serveis proporcionen funcionalitats millorades per a fonts específiques. Els elements se segueixen automàticament en afegir-los a la vostra biblioteca. + Proporciona funcionalitats millorades per a fonts específiques. Els elements se segueixen automàticament en afegir-los a la vostra biblioteca. Alguns fabricants tenen restriccions addicionals per a les aplicacions que finalitzen els serveis en segon pla. Aquest lloc web té més informació de com solucionar-ho. Hi ha %1$d elements a la base de dades que no són a la biblioteca Cancel·lada - Per a obtenir ajuda per a resoldre errors d\'actualització de la biblioteca, vegeu %1$s - No s\'ha pogut obtenir la llista d\'extensions + Per a obtenir ajuda per a resoldre errors d’actualització de la biblioteca, vegeu %1$s + No s’ha pogut obtenir la llista d’extensions PMF i guies Omet les actualitzacions dels elements - 5% Desa com a arxiu CBZ - També hauríeu de desar còpies de les còpies de seguretat en altres llocs. + També hauríeu de desar còpies de les còpies de seguretat en altres llocs. Les còpies de seguretat poden contenir dades sensibles, incloent-hi les contrasenyes desades; aneu amb compte si les compartiu. No hi ha res que calgui buidar - Imprimeix registres detallats al registre del sistema (redueix el rendiment de l\'aplicació) + Imprimeix registres detallats al registre del sistema (redueix el rendiment de l’aplicació) Publicació finalitzada En pausa - Aquest seguidor només és compatible amb la font de Komga. - Actualitzacions de l\'aplicació + Actualitzacions de l’aplicació Segueix - Informació de l\'aplicació - Les actualitzacions grosses perjudiquen les fonts i poden implicar actualitzacions més lentes i un augment en l\'ús de bateria. Premeu per a obtenir-ne més informació. - Amplia la imatge en horitzontal - Fes panoràmiques les imatges amples en fer un toc + Informació de l’aplicació + Les actualitzacions grosses perjudiquen les fonts i poden implicar actualitzacions més lentes i un augment en l’ús de bateria. Premeu per a obtenir-ne més informació. + Amplia automàticament les imatges amples + Fes panoràmiques les imatges amples Graella només a la portada - Començats - Que no s\'hagin començat - S\'ha omès perquè la sèrie està completada - S\'ha omès perquè no hi ha cap capítol llegit - S\'ha omès perquè hi ha capítols no llegits + Que no s’hagin començat + S’ha omès perquè la sèrie està completada + S’ha omès perquè no hi ha cap capítol llegit + S’ha omès perquè hi ha capítols no llegits Premeu per a obtenir més informació Omesa Han fallat %1$d actualitzacions - S\'han omès %1$d actualitzacions + S’han omès %1$d actualitzacions Vertical inversa Mou la sèrie a dalt de tot Desactivat Obre al GitHub - S\'ha produït un error en desar la imatge + S’ha produït un error en desar la imatge No hi ha cap element a la biblioteca del qual fer còpia de seguretat - Hi ha una nova versió disponible als llançaments oficials. Premeu per a obtenir informació de com migrar a partir dels llançaments no oficials d\'F-Droid. - Neteja les dades del WebView - S\'han netejat les dades del WebView + Hi ha una nova versió disponible als llançaments oficials. Premeu per a obtenir informació de com migrar a partir dels llançaments no oficials d’F-Droid. + Neteja les dades de la WebView + S’han netejat les dades de la WebView Tanca - Mostra les fonts fixades duplicades - Repeteix les fonts fixades a llurs grups de llengua - Quan la bateria no sigui baixa - No s\'ha trobat cap font instal·lada - No s\'ha trobat cap font + No s’ha trobat cap font instal·lada + No s’ha trobat cap font Nombre de no llegits Millora el rendiment del lector - No s\'ha trobat la pàgina %d en dividir - No s\'ha trobat el camí del fitxer de la pàgina %d + No s’ha trobat la pàgina %d en dividir + No s’ha trobat el camí del fitxer de la pàgina %d Restableix les opcions del lector per sèrie - Restableix el mode de lectura i l\'orientació de totes les sèries - S\'han restablert tota la configuració del lector - No s\'ha pogut restablir la configuració del lector - Ostres, que estrany... + Restableix el mode de lectura i l’orientació de totes les sèries + S’han restablert tota la configuració del lector + No s’ha pogut restablir la configuració del lector + Ostres, que estrany Llengua Versió - Valoració d\'edat + Valoració d’edat Llista de lectura Llista de desitjos Llista de completats Llista de pausats - Llista d\'inacabats + Llista d’inacabats Només en xarxes sense límits de dades - No s\'ha pogut obrir el darrer capítol llegit + No s’ha pogut obrir el darrer capítol llegit Portada personalitzada No instal·lat - Llengua de l\'aplicació + Llengua de l’aplicació Voleu eliminar la categoria «%s»\? Elimina la categoria Lavanda Sense descripció Error intern: Reviseu els registres de fallades per a més informació - Cadena d\'agent d\'usuari per defecte - Restableix la cadena d\'agent d\'usuari per defecte - El widget no està disponible quan hi ha activat el blocatge de l\'aplicació + Cadena d’agent d’usuari per defecte + Restableix la cadena d’agent d’usuari per defecte + El widget no està disponible quan hi ha activat el blocatge de l’aplicació El format RARv5 no està suportat Vegeu els elements de la biblioteca actualitzats recentment Elimina-ho tot - Ja s\'està executant una actualització + Ja s’està executant una actualització Tsunami - La cadena de l\'agent d\'usuari no pot estar buida + La cadena de l’agent d’usuari no pot estar buida Tema, formats de data i hora - Categories i actualitzacions globals - N\'esteu segur\? + Categories, actualitzacions globals i lliscament en capítols + N’esteu segur\? Ubicació invàlida: %s Baixa automàticament mentre es llegeix - Només funciona en elements de la biblioteca i si el capítol actual i el següent ja estan baixats + Només funciona si el capítol actual i el següent ja estan baixats. Ups! - S\'ha produït un error inesperat al %s. Us suggerim que feu una captura de pantalla d\'aquest missatge, bolqueu els registres d\'errors i els compartiu amb el nostre canal d\'assistència al Discord. - - El següent capítol no llegit - Els següents %d capítols no llegits - - No s\'han concedit permisos d\'emmagatzematge + S’ha produït un error inesperat al %s. Us suggerim que compartiu el registre d’errors al nostre canal d’assistència al Discord. + No s’han concedit permisos d’emmagatzematge Populars - Còpies de seguretat automàtiques i manuals + Còpies de seguretat automàtiques i manuals i espai d’emmagatzematge Mode de lectura, visualització i navegació Baixades automàtiques i per avançat Múltiples - La cadena d\'agent d\'usuari no és vàlida + La cadena d’agent d’usuari no és vàlida Títol desconegut Ara mateix Baixa per avançat - Llengua de l\'aplicació i notificacions Sincronització en un sentit o millorada Fonts, extensions i cerca global - Blocatge de l\'aplicació i mode discret - Bolcatge de registres d\'errors i optimitzacions de la bateria - Reinicia l\'aplicació - S\'ha omès perquè no cal actualitzar la sèrie + Blocatge de l’aplicació i mode discret + Bolcatge de registres d’errors i optimitzacions de la bateria + Reinicia l’aplicació + S’ha omès perquè no cal actualitzar la sèrie Suprimireu «%s» de la vostra biblioteca - Divideix les imatges altes (BETA) Cerca… Biblioteca actualitzada per darrera vegada: %s - S\'estan comprovant les baixades - Memòria cau de baixades + S’estan comprovant les baixades Obre un element aleatori Les compilacions de F-Droid no tenen assistència oficial. \nPremeu per a obtenir-ne més informació. - No s\'ha trobat cap element en aquesta categoria -Cua de baixades + No s’ha trobat cap element en aquesta categoria + Invalida l’índex de baixades + S’eliminarà la data de finalització seleccionada de %s + Voleu eliminar-ne la data\? + S’eliminarà la data d’inici seleccionada de %s Estadístiques Local Baixats Començats - S\'ha copiat al porta-retalls + S’ha copiat al porta-retalls Llegits Totals Omet els capítols duplicats @@ -734,16 +662,12 @@ Elements completats Error %1$s: %2$s Ara no - A l\'actualització global + A l’actualització global Resum - Seguidors + Serveis de seguiment Elements seguits Puntuació mitjana *obligatori - - El següent capítol - Els següents %d capítols - La categoria és buida En ús N/A @@ -755,4 +679,65 @@ Copia al porta-retalls Actualitza la categoria Divideix les imatges altes - \ No newline at end of file + %d per fila + Lliscament en capítols + Acció en lliscar cap a la dreta + Acció en lliscar cap a l’esquerra + Toca dues vegades per a ampliar + Superposició + Inverteix l’orientació de les pàgines amples rotades + Rota les pàgines amples perquè s’ajustin a la pantalla + Informació de depuració + Estableix l’interval + Interval d’obtenció personalitzat + Pròxima actualització prevista + Obtén mensualment (28 dies) + Endarrerit 10 o més dies + Abandonat\? Endarrerit 20 o més dies i 2 mesos + D’acord + Fora del període esperat de publicació + Intervals + Estima cada + S’actualitzarà cada + Personalitza l’interval + Voleu deixar de seguir %s\? + Elimina també de %s + Se n’eliminarà el seguiment local. + S’ha omès perquè no se n’espera cap publicació avui + Període de comprovació superat + Suprimeix els baixats + Té resultats + S’està sincronitzant la biblioteca + S’ha completat la sincronització de la biblioteca + No s’ha pogut crear un fitxer de còpia de seguretat + Llicenciat: no hi ha capítols a mostrar + Inici de sessió al servei de seguiment + S’ha invalidat l\'índex de baixades + Premeu aquí per a obtenir ajuda amb el Cloudflare + Desbloca %s + No hi ha connexió a Internet + HTTP %d, comproveu el lloc web en una WebView + No s’ha pogut accedir a %s + Mou la sèrie a baix de tot + Marques de temps relatives + «%1$s» en comptes de «%2$s» + Ordena les categories + S’està actualitzant la biblioteca… (%s) + Voleu ordenar les categories alfabèticament\? + Configuració de la font + Configuració de l’aplicació + No s’ha seleccionat cap fitxer + Crea + Mai + Redueix l’efecte fantasma en pantalles de tinta electrònica + Aplica + Torna a la configuració per defecte + Darrera còpia de seguretat automàtica: %s + No s’ha trobat cap scanlator + Scanlator + Centelleig blanc en canviar de pàgina + Ús de l’emmagatzematge + Puntuació del servei de seguiment + Dades i emmagatzematge + Exclou scanlators + \ No newline at end of file diff --git a/i18n/src/main/res/values-da/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/ceb/plurals-aniyomi.xml similarity index 58% rename from i18n/src/main/res/values-da/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/ceb/plurals-aniyomi.xml index 2d681b816d..d1695c2dea 100644 --- a/i18n/src/main/res/values-da/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/ceb/plurals-aniyomi.xml @@ -1,38 +1,30 @@ - Kategorier - Lås op for Tachiyomi - Nyeste manga opdateringer - Vis manga - Lokale manga - Med ulæst kapitler - Standard kategori - Manga i ekskluderede kategorier vil ikke blive opdateret selv hvis de også er i inkluderede kategorier. - + - + - + - + - + - + - + diff --git a/i18n/src/commonMain/resources/MR/ceb/plurals.xml b/i18n/src/commonMain/resources/MR/ceb/plurals.xml new file mode 100644 index 0000000000..431598699c --- /dev/null +++ b/i18n/src/commonMain/resources/MR/ceb/plurals.xml @@ -0,0 +1,23 @@ + + + + %d Kategoriya + %d Mga kategoriya + + + Human sa %1$s ka minuto + Human sa %1$s ka minuto + + + Kagahapon + %1$d ka adlaw ang milabay + + + Nabuhat sa %1$s nga adunay %2$s nga sayup + Nabuhat sa %1$s nga adunay %2$s nga mga sayop + + + %1$s ang nahibilin + %1$s ang nahibilin + + \ No newline at end of file diff --git a/i18n/src/main/res/values-ceb/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/ceb/strings-aniyomi.xml similarity index 74% rename from i18n/src/main/res/values-ceb/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/ceb/strings-aniyomi.xml index 62cf101a5c..a816c81629 100644 --- a/i18n/src/main/res/values-ceb/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/ceb/strings-aniyomi.xml @@ -26,32 +26,4 @@ Sigurado ka\? Basaha ang mga kapitulo ug ang pag-uswag sa dili librarya nga manga mawala Mga update sa status, score ug katapusang kapitulo nga gibasa gikan sa mga serbisyo sa pagsubay Paghunong sa pagbasa sa kasaysayan - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-ceb/strings.xml b/i18n/src/commonMain/resources/MR/ceb/strings.xml similarity index 91% rename from i18n/src/main/res/values-ceb/strings.xml rename to i18n/src/commonMain/resources/MR/ceb/strings.xml index 3caa93e7e9..752c8d5b9b 100644 --- a/i18n/src/main/res/values-ceb/strings.xml +++ b/i18n/src/commonMain/resources/MR/ceb/strings.xml @@ -3,7 +3,6 @@ Kasaysayan Mga update Panghimatuod aron makumpirma ang pagbag-o - Pindota balik pag-usab aron makagawas Mga setting Menu Gi-bookmark @@ -31,9 +30,11 @@ Mga setting Tinubdan Default + Pila sa Pag-download Mga entri sa basahonan Pagsubay Librarya + Mga Kategoriya Molalin Pagpadako Impormasyon sa Extension @@ -44,14 +45,10 @@ Pasidaan Pinakabag-o nga kapitulo Kuhaa ang filter - - %d Kategoriya - %d Mga kategoriya - Tanan Walay bag-o nga mga update Matag-kategorya nga mga setting alang sa paghan-ay ug pagpakita - Walay downloads + Walay mga pag-download Walay nabasa bag-o lang Wala kay mga kategorya. i-tap ang plus button aron makahimo og usa para sa pag-organisar sa imong library. Walay sulod ang imong library @@ -87,6 +84,7 @@ Ibutang ang mga kategorya Paghunong Ablihi sa browser + Lokal nga tinubdan Ablihi sa WebView Komportable nga grid Display mode @@ -96,7 +94,6 @@ Cancel tanan Ikansela ang tanan alang niini nga serye Pagsunud-sunod - Pag-order pag-usab Pinakabag-o Lihok sa ubos Pag-instalar @@ -132,7 +129,6 @@ Tagoa ang sulod sa pahibalo Lig-on nga screen NSFW (18+) Mga Tinubdan - Bag-o lang Karon Pagpakita Mga butang kada laray @@ -146,20 +142,11 @@ Kada 2 ka adlaw Kada semana Sa dihang nag-charge - Dili ubos ang baterya Mga pagdili: %s Laktawan ang pag-update sa mga titulo Wala pa kana nagsugod Awtomatikong i-refresh ang metadata Pangutana kanunay - - Human sa %1$s ka minuto - Human sa %1$s ka minuto - - - Kagahapon - %1$d ka adlaw ang milabay - Nagpaubos Pinaagi sa petsa sa pag-upload Pinaagi sa numero sa kapitulo @@ -179,15 +166,10 @@ Sugdi ang pag-download karon Sunda ang sistema Strawberry Daiquiri - Dugay (Mubo+, n adlaw ang milabay) Pagdumala sa mga pahibalo Seguridad Ipakita sa mga tinubdan ug mga lista sa mga extension Purong itom nga dark mode - Kumpirma ang paggawas - Mga timestamp - Relatibo nga mga timestamp - Mubo (Karon, Kagahapon) Dili kini makapugong sa dili opisyal o posibleng sayop nga gi-flag nga mga extension gikan sa pag-surf sa NSFW (18+) nga sulod sulod sa app. Kanunay Ang luwas nga screen nagtago sa mga sulod sa app sa dihang nagbalhin-balhin og mga app ug nag-block sa mga screenshot @@ -195,8 +177,7 @@ Awtomatikong pag-update sa mga pagdili sa device Sa Wi-Fi lang Uban sa \"Nakumpleto\" nga kahimtang - Pag-update sa mga tracker kung nag-update sa librarya - Awtomatikong i-refresh ang mga tracker + Default nga kategorya Kada 3 ka adlaw Susiha ang bag-ong hapin ug mga detalye kung mag-update sa librarya Apil ang: %s @@ -244,8 +225,6 @@ Pahigda Ang duha Mga aksyon - I-save ang mga panid sa lainlaing mga folder - Naghimo ug mga folder sumala sa titulo sa manga Puti Gray Itom @@ -265,6 +244,7 @@ Dili iapil: %s Pag-instalar Nag-download + Ang manga sa wala iapil nga mga kategorya dili ma-update bisan kung naa usab sila sa mga gilakip nga kategorya. Wala Naghulat Impormasyon sa app @@ -291,7 +271,6 @@ Paged A Padding sa kilid - 10% Pinakataas Kinaubsan Pag-zoom sa posisyon sa pagsugod @@ -306,13 +285,10 @@ Kanunay ipakita ang transisyon sa kapitulo Mode sa pagbasa Pagbasa - Wala - 5% - 15% - 20% Taas Ubos Lokasyon sa pag-download + Wala iapil nga mga kategorya Pasadya nga lokasyon Nabaldado Ikalima hangtod sa kataposang pagbasa sa kapitulo @@ -344,7 +320,6 @@ Smart angay Awtomatiko Pagkasensitibo sa pagtago sa menu sa scroll - 25% Katapusan nga nabasa nga kapitulo Ikatulo hangtod sa kataposang pagbasa sa kapitulo Ika-upat hangtod sa kataposang pagbasa sa kapitulo @@ -355,7 +330,6 @@ Nagpauswag sa pasundayag sa magbabasa pinaagi sa pagbahin sa taas nga na-download nga mga imahe. Mga serbisyo Pag-tap sa mga zone - Iapil lang ang mga pinned nga tinubdan Paghimo og backup Mahimong gamiton aron mapasig-uli ang kasamtangan nga librarya Uri sa sukdanan sa hulagway @@ -386,12 +360,7 @@ \nKinahanglan nimo nga i-install ang bisan unsang nawala nga mga extension ug mag-log in sa mga serbisyo sa pagsubay pagkahuman aron magamit kini. Nakompleto ang pag-uli Paghimo og backup - Awtomatikong pag-backup Ang mga tracker wala naka-log in: - - Nabuhat sa %1$s nga adunay %2$s nga sayup - Nabuhat sa %1$s nga adunay %2$s nga mga sayop - Pag-uli sa backup Gilimpyohan ang mga cookies Data @@ -409,8 +378,10 @@ Dump crash logs I-print ang verbose logs ngadto sa system log (gipamenos ang performance sa app) Ang ubang mga tiggama adunay dugang nga mga pagdili sa app nga nagpatay sa mga serbisyo sa background. Kini nga website adunay dugang nga impormasyon kon unsaon kini pag-ayo. + Klaro nga database %1$d non-library manga sa database Gitipigan ang mga log sa sayup sa usa ka file aron ipaambit sa mga nag-develop + I-delete ang history para sa manga nga wala ma-save sa imong library I-disable ang pag-optimize sa baterya Tablet UI I-zoom ang hulagway sa talan-awon @@ -423,7 +394,6 @@ Gitangtang ang mga entry Tin-aw ang datos sa WebView Ang datos sa WebView gitangtang - I-refresh ang pagsubay I-reset ang mga setting sa matag-serye nga magbabasa I-reset ang mode sa pagbasa ug oryentasyon sa tanan nga serye Ang tanan nga mga setting sa magbabasa gi-reset @@ -444,10 +414,6 @@ Susiha ang mga update Mga update sa v%1$s Ipadala ang mga taho sa pagkahagsa - - %1$s ang nahibilin - %1$s ang nahibilin - Naka-log out ka na karon Password Login @@ -458,7 +424,6 @@ Email Address Wala mailhi nga sayup Username - Ipakita ang buton sa pagpadayon sa pagbasa Pangitaa… Abli nga random ang pagsulod Istatistika @@ -466,7 +431,6 @@ Gi-download Lokal Tema, format sa petsa ug panahon - Pinulongan sa app, pagpahibawo Dili karon - Pag-download sa Pila - \ No newline at end of file + *gikinahanlan + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/cs/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/cs/plurals-aniyomi.xml new file mode 100644 index 0000000000..f0de61e37b --- /dev/null +++ b/i18n/src/commonMain/resources/MR/cs/plurals-aniyomi.xml @@ -0,0 +1,38 @@ + + + + Další nezhlédnuté epizody + Další %d nezhlédnuté epizody + Dalších %d nezhlédnutých epizod + + + 1 epizoda + %1$s epizody + %1$s epizod + + + %d sekunda + %d sekundy + %d sekund + + + Pro 1 titul + Pro %d tituly + Pro %d titulů + + + 1 nová epizoda + %1$d nové epizody + %1$d nových epizod + + + Epizody %1$s a 1 další + Epizody %1$s a další %2$d + Epizody %1$s a dalších %2$d + + + + + + + \ 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 new file mode 100644 index 0000000000..c2e6fa6a8c --- /dev/null +++ b/i18n/src/commonMain/resources/MR/cs/plurals.xml @@ -0,0 +1,83 @@ + + + + Po %1$s minutě + Po %1$s minutách + Po %1$s minutách + + + %1$s kapitola + %1$s kapitoly + %1$s kapitol + + + %1$s zbývá + %1$s zbývají + %1$s zbývá + + + Dokončeno za %1$s s %2$s chybou + Dokončeno za %1$s s %2$s chybami + Dokončeno za %1$s s %2$s chybami + + + %d kategorie + %d kategorie + %d kategorií + + + Je dostupná aktualizace rozšíření + Jsou dostupné %d aktualizace rozšíření + Je dostupných %d aktualizací rozšíření + + + Kapitoly %1$s a 1 další + Kapitoly %1$s a %2$d další + Kapitoly %1$s a %2$d dalších + + + %1$d nová kapitola + %1$d nové kapitoly + %1$d nových kapitol + + + Pro %d položku + Pro %d položky + Pro %d položek + + + Přeskočena %d kapitola, buď chybí ve zdroji nebo byla vyfiltrována + Přeskočeny %d kapitoly, buď chybí ve zdroji nebo byly vyfiltrovány + Přeskočeno %d kapitol, buď chybí ve zdroji nebo byly vyfiltrovány + + + %d sledovač + %d sledovače + %d sledovačů + + + Včera + Před %1$d dny + Před %1$d dny + + + Další nepřečtená kapitola + Další %d nepřečtené kapitoly + Dalších %d nepřečtených kapitol + + + Další kapitola + Další %d kapitoly + Dalších %d kapitol + + + Chybí %1$s kapitola + Chybí %1$s kapitoly + Chybí %1$s kapitol + + + 1 den + %d dny + %d dní + + \ No newline at end of file diff --git a/i18n/src/main/res/values-cs/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/cs/strings-aniyomi.xml similarity index 92% rename from i18n/src/main/res/values-cs/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/cs/strings-aniyomi.xml index 3c420868e8..9d4b30c7cb 100644 --- a/i18n/src/main/res/values-cs/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/cs/strings-aniyomi.xml @@ -56,11 +56,6 @@ Zobrazit obsah v oblasti výřezu displeje Skrýt ovládání přehrávače při jeho otevření Externí přehrávač - - Další nezhlédnuté epizody - Další %d nezhlédnuté epizody - Dalších %d nezhlédnutých epizod - Automaticky stahovat při sledování Stahování (%d%%) Přidat anime do knihovny\? @@ -135,11 +130,6 @@ Stažené epizody Lokální zdroj mangy Lokální zdroj anime - - 1 epizoda - %1$s epizody - %1$s epizod - Podle čísla epizody Neshlédnuto Jste si jistí, že chcete smazat vybrané epizody\? @@ -162,11 +152,6 @@ Anime z knihovny Hrát uvnitř aplikace Vynutit aplikaci, aby znovu zkontrolovala stažené kapitoly a epizody - - %d sekunda - %d sekundy - %d sekund - Toto smaže datum sledování této epizody. Jste si jistí\? Manga Ep. %1$s - %2$s @@ -206,27 +191,12 @@ Změnit zvukovou stopu: Rychlost přehrávání Kvalita videa - - Pro 1 titul - Pro %d tituly - Pro %d titulů - - - 1 nová epizoda - %1$d nové epizody - %1$d nových epizod - Manga Anime Automatické přerávání je vypnuté Možnosti přehrávání Manga rozšíření Epizoda %1$s - - Epizody %1$s a 1 další - Epizody %1$s a další %2$d - Epizody %1$s a dalších %2$d - Přenést anime Hrát mimio aplikaci Snímek na výšku @@ -266,9 +236,4 @@ Miniokno Globální vyhledávání mangy Globální vyhledávání anime - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-cs/strings.xml b/i18n/src/commonMain/resources/MR/cs/strings.xml similarity index 84% rename from i18n/src/main/res/values-cs/strings.xml rename to i18n/src/commonMain/resources/MR/cs/strings.xml index 87b53aaf59..12d9c7b1fc 100644 --- a/i18n/src/main/res/values-cs/strings.xml +++ b/i18n/src/commonMain/resources/MR/cs/strings.xml @@ -1,6 +1,7 @@ - Manga + Kategorie + Záznamy v knihovně Kapitoly Historie Nastavení @@ -12,7 +13,6 @@ Informace o rozšíření Nastavení Filtr - Staženo Nepřečteno Odstranit filtr Abecedně @@ -70,7 +70,7 @@ Černá Stránkované (zleva doprava) Stránkované (zprava doleva) - Výchozí typ otáčení + Výchozí otáčení Volné Zamknuto na výšku Zamknuto na šířku @@ -96,6 +96,8 @@ Zdroj není nainstalován: %1$s Kapitola %1$s Stahování (%1$d/%2$d) + Chyba + Pozastaveno Podle zdroje Stáhnout Stáhnout nepřečtené @@ -107,6 +109,7 @@ Skóre Název Typ + Přidat do knihovny\? Obrázek uložen Vlastní filtr Stránka: %1$d @@ -126,7 +129,6 @@ Vybrat záložní soubor Stáhnout Žádné nové aktualizace - Hledání aktualizací… Klepnutím nainstalujte aktualizaci Chyba při stahování Dostupná aktualizace! @@ -136,6 +138,8 @@ Při stahování kapitoly došlo k neznámé chybě WiFi připojení není dostupné Síťové připojení není dostupné + Stahování pozastaveno + Stahovací fronta Název Sledování Aktualizace @@ -167,6 +171,7 @@ Nikdy Vše Při nabíjení + Výchozí kategorie Vždy se zeptat Rychlost animace při dvojkliku Oříznout okraje @@ -190,12 +195,11 @@ Bez animace Normální Rychle - Služby + Sledovače Vytvořit zálohu Obnovit zálohu Místo zálohy - Automatické zálohy - Frekvence zálohy + Frekvence automatických záloh Záloha vytvořena Obnova dokončena Co chcete zálohovat\? @@ -206,13 +210,13 @@ Během vymazávání došlo k chybě Vymazat cookies Cookies vymazány + Vyčistit databázi + Smazat historii položek, které nejsou uloženy ve vaší knihovně Položky byly smazány - Obnovit sledování Verze Odesílat hlášení o pádu Pomáhá opravit chyby. Nebudou odeslány žádné citlivé údaje Aktualizuji kategorie - Lokální Lokální zdroj Ostatní Nejnovější @@ -227,7 +231,6 @@ Pozastaveno Stav Stav - Započato Kategorie smazány Nastavit jako obal Obal aktualizován @@ -244,7 +247,7 @@ Pátá předposlední přečtená kapitola Lze použít k obnovení aktuální knihovny Obnovit knihovnu ze záložního souboru - Maximum záloh + Maximum automatických záloh Přihlásit se do %1$s Název zdroje Číslo kapitoly @@ -264,7 +267,7 @@ Běžný Nápověda Otevřít ve WebView - Zobrazit na dlouhém podržení + Zobrazit akce dlouhým stisknutím 32bitová barva Přeskakovat přečtené kapitoly Režim mísení filtru barev @@ -293,11 +296,6 @@ Předchozí stránka Následující stránka Skrýt obsah oznámení - - Po %1$s minutě - Po %1$s minutách - Po %1$s minutách - Nikdy Vždy Uzamknout při nečinnosti @@ -313,11 +311,6 @@ Jsi si jistý, že chceš tato nastavení uložit jako výchozí\? Nastavení kapitoly Podle data nahrání - - %1$s kapitola - %1$s kapitoly - %1$s kapitol - Méně Více V knihovně @@ -329,15 +322,9 @@ Hledat \"%1$s\" globálně Připnuté Naposledy použitý - Zobrazit stránku ve WebView Karty Stažené kapitoly Emailová adresa - - %1$s zbývá - %1$s zbývají - %1$s zbývá - Anonymní režim Pouze staženo Aktualizováno na verzi v%1$s @@ -361,11 +348,6 @@ Obnovení již probíhá Zálohování selhalo Zálohování již probíhá - - Dokončeno za %1$s s %2$s chybou - Dokončeno za %1$s s %2$s chybami - Dokončeno za %1$s s %2$s chybami - %02d minut, %02d sekund Data ze zálohy budou obnovena. \n @@ -374,12 +356,7 @@ Chybějící zdroje: Záloha neobsahuje žádné položky knihovny. Neplatný soubor se zálohou - Jednosměrná synchronizace pro aktualizaci počtu přečtených kapitol ve sledovacích službách. Nastavení sledování pro každou položku je možné z jejich tlačítka sledování. - 25% - 20% - 15% - 10% - Žádné + 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í. Režim čtení Oblasti dotyku Další @@ -392,13 +369,8 @@ Žádné Zdroje z tohoto rozšíření mohou obsahovat NSFW (18+) obsah 18+ - Toto rozšíření není z oficiálního seznamu rozšíření pro Tachiyomi. + Toto rozšíření není z oficiálního seznamu rozšíření. Neoficiální - - %d kategorie - %d kategorie - %d kategorií - Kontrolovat dostupnost nových přebalů a detailů při aktualizaci knihovny Automaticky obnovovat metadata Toto nastavení nemůže zamezit neoficiálním nebo špatně označeným rozšířením v zobrazování NSFW (18+) obsahu v aplikaci. @@ -407,7 +379,6 @@ Secure screen skryje obsah aplikace při přepínání aplikací a blokuje tvorbu snímků obrazovky Chráněná obrazovka Vyžadovat odemknutí - Potvrdit opuštění Zapnuto Vypnuto Temný vzhled @@ -415,7 +386,6 @@ Přesunout nahoru Sestupně Vzestupně - Seřadit Podle čísel kapitol Podle data nahrání Odepnout @@ -424,36 +394,16 @@ Zobrazovat počet položek Začít Aktualizace rozšíření + Aktualizace kapitol Chyby Dokončeno Postup - Stahování dokončeno Výchozí nastavení kapitol aktualizováno Prosím aktualizujte aplikaci WebView pro lepší kompatibilitu Nastala chyba při obcházení služby Cloudflare - - Je dostupná aktualizace rozšíření - Jsou dostupné %d aktualizace rozšíření - Je dostupných %d aktualizací rozšíření - - - Kapitoly %1$s a 1 další - Kapitoly %1$s a %2$d další - Kapitoly %1$s a %2$d dalších - Kapitoly %1$s Kapitola %1$s a %2$d dalších Kapitola %1$s - - %1$d nová kapitola - %1$d nové kapitoly - %1$d nových kapitol - - - Pro %d položku - Pro %d položky - Pro %d položek - Hledám nové kapitoly Návod k přesunu zdrojů Jste si jistý/á\? Všechna historie bude navždy ztracena. @@ -461,11 +411,6 @@ Historie vymazána Kap. %1$s - %2$s Aktualizuji knihovnu - - Přeskočena %d kapitola, buď chybí ve zdroji nebo byla vyfiltrována - Přeskočeny %d kapitoly, buď chybí ve zdroji nebo byly vyfiltrovány - Přeskočeno %d kapitol, buď chybí ve zdroji nebo byly vyfiltrovány - Zdroj nenalezen Žádné stránky nenalezeny Prosím přihlašte se do MAL znovu @@ -482,17 +427,10 @@ Nastavení vyhledávání Datum přidání Sledováno - Opětovným stisknutím tlačítka aplikaci opustíte Režim čtení Ukazovat režim čtení Pro tuto sérii %1$s: %2$s, strana %3$d - - %d sledovač - %d sledovače - %d sledovačů - - V globálním vyhledávání prohledávejte pouze připnuté zdroje Čtení Při otevření čtečky krátce zobrazí aktuální režim Čekajících aktualizací @@ -509,6 +447,7 @@ Vynechat: %s Zahrnout: %s Žádné + Položky ve vynechaných kategoriích nebudou aktualizovány, i kdyby byly také v zahrnutých kategoriích. Zobrazení Zobrazovat karty kategorií Tato verze systému Android již není podporována @@ -523,15 +462,13 @@ Datum načtení kapitoly Na šířku Na výšku - Typ otočení - Vytváří složky podle názvu položky - Uložit stránky do samostatných složek + Otáčení Akce Vpravo Vlevo Předchozí Zakázat anonymní režim - Automaticky + Auto Odstíny šedé Zrušit vše pro tuto sérii Žádná shoda nenalezena @@ -541,24 +478,21 @@ Seřadit podle Neplatný formát kapitoly Kapitola nenalezena - Aktualizovat sledovače při aktualizaci knihovny - Automaticky aktualizovat sledovače Omezení: %s + Lokální zdroj Při sdílení přebalu došlo k chybě Při ukládání přebalu došlo k chybě Přebal uložen Přebal Vypnuto Zapnuto - Nastavení zobrazení a řazení pro jednotlivé kategorie + Nastavení řazení pro jednotlivé kategorie Nemáte žádné kategorie. Začít stahovat nyní - Aktualizuji knihovnu… (%1$d / %2$d) - Tento sledovač je kompatibilní pouze se zdrojem Komga. Někteří výrobci používají další omezení aplikací, která vypíná služby na pozadí. Na této webové stránce najdete další informace o tom, jak to opravit. Pokud je MIUI optimalizace vypnutá, zálohování/obnovování nemusí fungovat správně. - Služby, které poskytují rozšířené funkce pro konkrétní zdroje. Položky jsou po přidání do knihovny automaticky sledovány. - Rozšířené služby + Poskytují rozšířené funkce pro konkrétní zdroje. Záznamy jsou po přidání do knihovny automaticky sledovány. + Vylepšené sledovače Návod ke sledování Čistě černý tmavý režim Jotsuba @@ -578,22 +512,13 @@ Příručka Začínáme Uživatelské rozhraní tabletu Sledovat - - Včera - Před %1$d dny - Před %1$d dny - Dnes - Nedávno - Dlouhé (Krátké+, před n dny) - Krátký (dnes, včera) - Relativní časová razítka - Časová razítka Modrozelená a Tyrkysová Vzhled Potvrďte změnu ověřením Výchozí Pomozte s překladem + Vyloučené kategorie Nainstalujte a spusťte Shizuku, abyste jej mohli používat jako instalátor rozšíření. Shizuku neběží Původní @@ -602,7 +527,7 @@ Info o Aplikaci Invertované Varování - Kopie záloh by jste také měli uchovat na více místech. + Kopie záloh byste také měli uchovat na více místech. Zálohy mohou obsahovat citlivé informace, včetně jakýchkoliv uložených hesel; při sdílení buďte opatrní. Celkem položek Vybrat obráceně Jazyk @@ -625,13 +550,11 @@ Zveřejnění dokončeno Zrušeno Mřížka jen s přebaly - 5% Které nebyly rozečteny %1$d aktualizace(í) selhalo %1$d aktualizace(í) přeskočena(y) Má pauzu Přeskočeno, protože obsahuje nepřečtené kapitoly - Zahájeno Přeskočeno Přesunout sérii na začátek Klepnutím se dozvíte více @@ -641,7 +564,7 @@ Žádné záznamy v knihovně k zálohování Žádný zdroj nenalezen Nová oficiální verze je dostupná. Pro informace pro přechod z neoficiálních F-Droid verzí klepněte sem. - Zvětšit obrázek na šířku + Automatické přiblížení širokých obrázků Žádný nainstalovaný zdroj nenalezen Otevřít na GitHubu Chyba při ukládání obrázku @@ -649,7 +572,6 @@ Obrácené na výšku Vyčistit data WebView Data z WebView vyčištěna - Opakovat připnuté zdroje v jejich příslušných jazykových skupinách Seznam četby Seznam přání Pouze na neměřené síti @@ -659,7 +581,6 @@ Seznam dokončených Seznam pozastavených Seznam nedokončených - Zobrazit duplicitní připnuté zdroje Jazyk Věkové hodnocení Verze @@ -670,7 +591,6 @@ Nepodařilo se najít cestu k souboru stránky %d Posunutí širokých snímků Počet nepřečtených - Když baterie není vybitá Nelze otevřít poslední přečtenou kapitolu Vlastní obal Nenainstalováno @@ -690,23 +610,16 @@ Řetězec uživatelského agenta nemůže být prázdný Přílivová Vlna Stáhování dopředu - - Další nepřečtená kapitola - Další %d nepřečtené kapitoly - Dalších %d nepřečtených kapitol - Automatické stahování při čtení - Funguje pouze na položky v knihovně a pokud je již stažena aktuální kapitola a následující kapitola + Funguje pouze v případě, že aktuální kapitola + následující kapitola jsou již staženy. Jste si jistí\? Chystáte se odstranit \"%s\" ze své knihovny Více - Rozdělit vysoké obrázky (BETA) Poslední aktualizace knihovny: %s Populární Nebyla udělena oprávnění k úložišti Přeskočeno, protože série nevyžaduje aktualizace Vyhledat… - Jazyk aplikace, oznámení Režim čtení, displej, navigace Jednosměrná synchronizace postupu, rozšířená synchronizace Téma, formát data a času @@ -717,19 +630,44 @@ Výpis protokolů selhání, optimalizace baterie %s narazil na neočekávanou chybu. Doporučujeme vám sdílet protokoly o selhání a poté je sdílet v našem kanálu podpory na Discordu. Restartujte aplikaci - Ruční a automatické zálohování - Došlo k neočekávané chybě + Ruční a automatické zálohování, místo v úložišti + Ups! Neplatné umístění: %s Neznámý titul Neplatný řetězec uživatelského agenta Právě teď Kontrola stahování - Stáhnout mezipaměť V této kategorii nebyly nalezeny žádné položky Otevřít náhodnou položku F-Droid sestavení nejsou oficiálně podporovány. \nKlepnutím zobrazíte další informace. -Stahovací fronta + Odstranit datum\? + Tím se odstraní dříve vybrané datum ukončení z %s + Tím se odstraní dříve vybrané datum zahájení z %s + Zneplatnit index stahování + Započato + Lokální + Staženo + Dokončené položky + V globální aktualizaci + Celkem + Přečteno + Sledovače + Sledované položky + Průměrné skóre + Použité + N/A + %dm + Položky + Statistiky + Přehled + Doba čtení + %dh + %dd + %ds + Teď ne + Kategorie je prázdná + Zkopírováno do schránky K dispozici, ale zdroj není nainstalován: %s Přeskakovat duplicitní kapitoly Ve své knihovně máte položku se stejným názvem. @@ -738,27 +676,67 @@ %1$s chyba: %2$s *vyžadováno Skrýt položky, které jsou již v knihovně - - Další kapitola - Další %d kapitoly - Dalších %d kapitol - Zkopírovat do schránky Aktualizovat kategorii Rozdělit vysoké obrázky Překrytí Překlopení orientace otočených širokých stránek Otočení širokých stránek tak, aby se vešly - - Chybí %1$s kapitola - Chybí %1$s kapitoly - Chybí %1$s kapitol - - Mohou chybět kapitoly Ladící informace Přejetí po kapitole Přejetí prstem doprava Přejetí prstem doleva Přiblížení dvojitým klepnutím %d na řádek - \ No newline at end of file + Přizpůsobit interval + Uplynulé kontrolní období + Přizpůsobený interval načítání + Načíst měsíčně (28 dní) + Pozdní kontrola 10+ + Další očekávaná aktualizace + Odhadovat každý + Nastavit aktualizaci každých + Nastavit interval + Opuštěný\? Pozdě 20+ a 2 měsíce + Mimo očekávané období 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í. + Odebrat také z %s + OK + Odebrat sledování %s\? + Odstranit stažené + Má výsledky + Synchronizace knihovny + Synchronizace knihovny dokončena + Přihlášení sledovače + Klepněte zde pro pomoc s Cloudflare + Index stažených zneplatněn + Nelze vytvořit soubor zálohy + Licencováno - Žádné kapitoly k zobrazení + Bez připojení k internetu + Nelze dosáhnout %s + HTTP %d, zkontrolovat web v WebView + Odemknout %s + Přesunout sérii na konec + Relativní časová razítka + \"%1$s\" namísto \"%2$s\" + Nastavení aplikace + Nastavení zdroje + Aktualizace knihovny... (%s) + Seřadit kategorie + Chtěli byste seřadit kategorie abecedně? + Vytvořit + Nikdy + Snižuje vytváření artefaktů na e-ink displejích + Použít + Vrátit na výchozí + Poslední automatická záloha: %s + Žádní překladatelé nenalezeni + Překladatel + Ukázat bílo při změně stránky + Využití úložiště + Data a úložiště + Nevybrán žádný soubor + Vynechat překladatele + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/cv/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/cv/plurals-aniyomi.xml new file mode 100644 index 0000000000..a6a136c622 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/cv/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/cv/plurals.xml b/i18n/src/commonMain/resources/MR/cv/plurals.xml new file mode 100644 index 0000000000..612cb2ab5a --- /dev/null +++ b/i18n/src/commonMain/resources/MR/cv/plurals.xml @@ -0,0 +1,51 @@ + + + + %d пухмӑш + %d пухмӑш + + + 1 минут хыҫҫӑн + %1$s минут хыҫҫӑн + + + %1$s,%2$s йӑнӑшпа тӑвӑннӑ + %1$s, %2$s йӑнӑшпа тӑвӑннӑ + + + Хушма валли ҫӗнетӳ пур + %d хушма валли ҫӗнетӳ пур + + + %1$s сыпӑкӗсем + %1$s сыпӑкӗсем тата ытти %2$d + + + 1 ҫӗнӗ сыпӑк + %1$d ҫӗнӗ сыпӑк + + + Ҫӗнӗ сыпӑксем 1 хайлав валли тупӑннӑ + Ҫӗнӗ сыпӑксем %d хайлав валли тупӑннӑ + + + 1 сыпӑк + %1$s сыпӑк + + + 1 юлчӗ + %1$s юлчӗ + + + 1 сӑнану + %d сӑнану + + + 1 сыпӑк ҫук + %d сыпӑк ҫук + + + Ӗнер + %1$d кун кайалла + + \ No newline at end of file diff --git a/i18n/src/main/res/values-cv/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/cv/strings-aniyomi.xml similarity index 79% rename from i18n/src/main/res/values-cv/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/cv/strings-aniyomi.xml index 771d9a7e59..00ee3b5474 100644 --- a/i18n/src/main/res/values-cv/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/cv/strings-aniyomi.xml @@ -32,32 +32,4 @@ Tachiyomi валли WebView кирлӗ Тиеве вӑхӑтлӑха чарнӑ Сыпӑксен ҫӗнетӗвӗсем - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-cv/strings.xml b/i18n/src/commonMain/resources/MR/cv/strings.xml similarity index 80% rename from i18n/src/main/res/values-cv/strings.xml rename to i18n/src/commonMain/resources/MR/cv/strings.xml index 9ae42926e3..0c34b4467f 100644 --- a/i18n/src/main/res/values-cv/strings.xml +++ b/i18n/src/commonMain/resources/MR/cv/strings.xml @@ -7,10 +7,10 @@ Тетел %02d минут та %02d ҫеккунт Сервиссем - Ҫӗнӗ сыпӑксене тиесе илмелле + Ҫӗнӗ сыпӑксене тийесе илмелле Юлашки вуланӑ сыпăк Сӳнтернӗ - Тиев вырӑнӗ + Тийев вырӑнӗ Вулани Кӑвак Симӗс @@ -26,7 +26,7 @@ Хура Шурӑ Ӳкерчĕк хыҫӑн тӗсӗ - Экран + Екран Хутлани Катерт Лартнӑ @@ -34,11 +34,7 @@ Тиесе илӗнет Ларт Ҫӗнет - Веҫех - - %d пухмӑш - %d пухмӑш - + Пурне те Кашнинчех ыйтмалла Петтерей тулнӑ чух Хатӗр валли хӑй-хальлӗн ҫӗнетӳ чарӑвӗсем @@ -51,13 +47,8 @@ Пӗтӗмӗшле ҫӗнетӳ Кӑтарт Ыкран сыхлавӗ - - 1 минут хыҫҫӑн - %1$s минут хыҫҫӑн - Сыхлав тата вӑрттӑнлӑх Систерӳсене ӗнер - Тухнине ҫирӗплет Ҫул-кун хармачӗ Ҫутнӑ Сӳнтернӗ @@ -65,7 +56,7 @@ Тийевсем Вулавӑш Тӗп - Хушӑма кӗме май ҫук + Апа кӗме май ҫук Ҫӗнет Малалла Кайалла @@ -95,73 +86,72 @@ Сыпӑксем пӑх Хуплашка улӑштар Пухмӑша хуш - Пухмӑш ячӗне улӑштар - Пухмӑшсене тӳрлет - Пухмӑша хуш + Пухмӑш йатне улӑштар + Пухмӑшсене улӑштар + Пухмӑш хуш Хуш Умӗнхине вуланӑ пек паллӑ ту - Тухма тепӗр хут пус Улӑштар - Веҫех сӳнтер - Веҫех ҫут - Вулавӑша ҫӗнет + Пурне те сӳнтер + Пурне те ҫут + Вулавӑш ҫӗнет Катерт - Сыпӑк картне катерт + Сыпӑк картнине катерт Сыпӑк карт - Тиесе ил + Тийесе ил Вуламан пек паллӑ ту Вуланӑ пек паллӑ ту - Веҫех суйла - Пур ҫӗрте шыра - Шырав - Юлашки сыпӑкпа - Юлашки вуланипе - Сыпӑксен шучӗпе + Пурне те суйла + Пур ҫӗрте те шыра + Шыра + Йулашки сыпӑкпа + Йулашки вуланипе + Сыпӑк шучӗпе Сас паллисен йӗркипе Алана катерт Вуламан - Карт - Тиенӗ + Картнӑ Ала Менӳ - Ӗнерлев + Ӗнерӳ Кун-ҫул Сыпӑксем + Пухмӑшсем Санӑн вулавӑш пушӑ Кун-ҫул - Ят + Тийев черечӗ + Йат Тетел ҫыхӑну ҫук Wi-Fi ҫыхӑну ҫук Йӑнӑш Ҫӗнӗ версси пур! - Тиев йӑнӑшӗ + Тийев йӑнӑшӗ Тиенсе пӗтрӗ %1$s-мӗш сыпӑк Ҫӗнӗ сыпӑксем тупӑнман - Юлашки вӑхӑтра нимӗнте вуламан - Пӗр ҫӗнӗ ҫӗнетӳ те ҫук - Пӗр тиев те ҫук + Йулашки вӑхӑтра нимӗн те вуламан + Пӗр ҫӗнетӳ те ҫук + Пӗр тийев те ҫук Пулӑшу Хушма ҫинчен Хушмасем Ҫӑл куҫсем Ҫӗнӗлӗх Вулавӑш - Ӗнерлев + Ӗнерӳсем Тата Пухмӑш кантӑкӗсене кӑтарт Меллӗ сетке Ҫӑтӑ сетке Тепӗр майлӑ суйла Сӳнтернӗ - Серилӗхсен шучӗ + Сетке пысӑкӑшӗ Урлӑ Тӑрӑх Ыкран сыхлавӗ тепӗр апсем ҫине куҫнӑ чух ку апӑн мӗн пуррине пытарать тата ыкрана сӑн ҫапма чарать Систерӳсенче мӗн ҫырнине пытарни Нихӑҫан Йаланах - Ҫӗнӗрен йӗркеле Тӑвӑм-пулӑм кӗнекине уҫ Тасат Уйӑр @@ -175,24 +165,24 @@ Куҫар Хыҫҫӑнхи сыпӑк Умӗнхи сыпӑк - Сӑнану + Йӗрлев Чи лайӑх пӗрлӗхшӗн WebView-а ҫӗнет Cloudflare-ран иртеймерӗ - Санӑн пухмӑшсем ҫук. Хӑвӑн вулавӑша йӗркелеме + пускӑч ҫине пус. - Куҫар - Янтӑллани тата тавӑрни + Санӑн пухмӑшсем ҫук. Хӑвӑн вулавӑша пухмӑшсем туса йӗркелеме «Хуш» пускӑч ҫине пус. + Куҫару + Янтӑлав тата тавӑру Кивелнӗ - Ҫӗнетӳсем кӗтеҫҫӗ + Ҫӗнетӳ кӗтеҫҫӗ + Йаланхилле пухмӑш Вулавӑша ҫӗнетнӗ чухне ҫӗнӗ хуплашка тата вак-тӗвек пуррине тӗрӗслени Хӑй-халлӗн метта пӗлӗмсене ҫӗнетмелле Серилӗх вӗҫленнӗ Ап ҫинчен Шанчӑклӑ мар - Официаллӑ мар + Чӑнлавлӑ мар Шанчӑклӑ Кӗтет Ҫук ҫӑл куҫсем: - Ҫакнӑ ҫӑл куҫсене ҫеҫ кӗрт Сӑнану сервиссенче сыпӑкӑн ӳсӗмне ҫӗнетме пӗр енлӗ пӗрлӗхлени. Манкӑн уйрӑм ҫыравӗсемпе вӗсен сӑнану пускӑчсем валли сӑнану ӗнерле. Вуланӑ сыпӑкран пиллӗкмӗшӗ Вуланӑ сыпӑкран тӑваттӑмӗшӗ @@ -205,16 +195,11 @@ Тӗс алипе хутӑштармалли тытӑм Вулӑш уҫӑ пулсан хальхи тытӑма кӗскен палӑртмалла Вулав тытӑма кӑтарт - Тулли экран + Тулли ыкран Шанчӑклӑ мар хушма Ним туман чух ҫаклатни - 10% %1$s-мӗш сыпӑк Ҫаклатӑва уҫма пӳрне йӗрӗ ыйтни - 25% - 20% - 15% - Чакусӑр Аяккинчи чаку Сыпӑксем урлӑ каҫнине яланах кӑтарт Тӑрӑлӑх мар @@ -222,11 +207,11 @@ Ҫаклатнӑ урлӑскер Ирӗклӗ Яланхилле урлӑ-тӑрӑх - Энимсӗр + Енимсӗр Пысӑклатни пуҫламӑш тӑрӑмӗ Тӑнлӑ Тӑс - Экранпа + Екранпа Сарӑмлани Вӗҫӗмсӗрех урлӑ Вӑрӑм елсем @@ -240,7 +225,7 @@ Куҫӑм Аланӑ сыпӑксене сиктермелле Вуланӑ сыпӑксене сиктермелле - Экрана ҫутӑ тыт + Екрана ҫутӑ тыт Тӗттӗмлетӳ Ҫутату Витӗм @@ -254,13 +239,8 @@ Елсем хушшипе енимлӗ куҫни Ҫак хушма Tachiyomi-н ӗҫ йӗркиллӗ хушмасен йат-йышне кӗмест. Ҫак хушмана урӑх кӗме май ҫук. Вӑл тӗрӗс мар ӗҫлеме тата апа йӑнӑшлаттарма пултарать. Ӑна катертме сӗнетпӗр. - - %1$s,%2$s йӑнӑшпа тӑвӑннӑ - %1$s, %2$s йӑнӑшпа тӑвӑннӑ - Сӑнану хуш Сӑна - Сӑнанӑва ҫӗнет Усӑҫ али Кирек мӗнле йӑнӑшсене тӳрлетме пулӑшать. Нимӗнле харкам пӗлӗм те ярӑнмасть Тиенӗсене ҫеҫ @@ -272,15 +252,12 @@ Тӑрӑх Ҫук Хушмасен ҫӗнетӗвӗсем + Сыпӑксен ҫӗнетӗвӗсем Яланхи - Кӗтмен йӑнӑша пула сыпӑксене тиесе илеймест - Тиевҫӗ - - Хушма валли ҫӗнетӳ пур - %d хушма валли ҫӗнетӳ пур - - Тиев… - Ҫӗнетӳсем шырани… + Тийеве вӑхӑтлӑха чарнӑ + Кӗтмен йӑнӑша пула сыпӑксене тийесе илеймест + Тийевҫӗ + Тийев… Ҫӗнетӳсем тупӑнман Тиесе ил Хуплашка суйла @@ -288,20 +265,8 @@ Хуплашкана ҫӗнетеймерӗ %1$s сыпӑкӗ тата ытти %2$d %1$s сыпӑкӗсем - - %1$s сыпӑкӗсем - %1$s сыпӑкӗсем тата ытти %2$d - - - 1 ҫӗнӗ сыпӑк - %1$d ҫӗнӗ сыпӑк - - - Ҫӗнӗ сыпӑксем 1 хайлав валли тупӑннӑ - Ҫӗнӗ сыпӑксем %d хайлав валли тупӑннӑ - Ҫӗнӗ сыпӑксен пуррине тӗрӗслени - Сыпӑксене тиесе илес ҫук. Тиевсем пайӗнче ҫӗнӗрен хӑтланса пӑхма пултаратӑн + Сыпӑксене тийесе илме пулмасть. Тийевсем пайӗнче ҫӗнӗрен хӑтланса пӑхма пултаратӑн Ӑтавла Куҫар Куҫарма ҫӑл куҫ суйла @@ -331,7 +296,6 @@ Пухмӑшсем катертнӗ Ун пек ятпа пухмӑш пур ӗнтӗ! Тӗс - Пуҫланӑ Хал Хал Ят @@ -343,7 +307,7 @@ Пӑрахнӑ Вӗҫленӗ Вулатӑп - Эсӗ суйланӑ сыпӑксене катертесшӗнех-и\? + Есӗ суйланӑ сыпӑксене катертесшӗнех-и\? Вуламанине Тиесе ил Тиенӗ вӑхӑчӗпе @@ -351,15 +315,14 @@ Ҫӑл куҫпа Сыпӑк шучӗ Ҫӑл куҫ ячӗ + Вӑхӑтлӑха чарнӑ + Йӑнӑш Тиенет (%1$d/%2$d) + Манкка вулавăша хушмалла-и\? Ҫӑл куҫа лартман: %1$s Пайлашу буфере ӑтавланӑ: \n%1$s Тиенӗ сыпӑксене катертмелле-и\? - - 1 сыпӑк - %1$s сыпӑк - Сахалрах Ытларах Вулавӑшран катерт @@ -380,15 +343,13 @@ Юлашки усӑ курни Ыттисем Вырӑнти ҫӑл куҫ - Эле WebView-ра тӗрӗсле Пӗр тупсӑм та тупӑнман Урӑх тупсӑмсем ҫук Кантӑксем Тӗрӗс мар янтӑв файлӗ - Вырӑнти Пухмӑша ҫӗнетни Паллӑ мар йӑнӑш - Эсӗ тухрӑн + Есӗ тухрӑн Тух “%1$s тухмалла-и\? Ӑнӑҫлӑ кӗни @@ -397,10 +358,6 @@ Ылӑккӑтрунлӑ пуштӑ тӗлӗ Усӑҫ ячӗ %1$s кӗр - - 1 юлчӗ - %1$s юлчӗ - Санӑн вулавӑшри манкка алат Ӳкнисем ҫинчен тишереревсем ямалла Ҫӗнетӳсем пуррине тӗрӗсле @@ -414,6 +371,8 @@ Янтӑвлани тӑтӑшлӑхӗ Вулавӑшри манкӑсен хуплашкисене ҫӗнет Ҫыравсене катертнӗ + Санӑн вулавӑшра упранман манкӑн вуланӑ кун-ҫулне катерт + Пӗлӗмсен кӗлете тасат Кеше тасатнӑ чух йӑнӑш тухрӗ Кеша тастнӑ. %1$d файла катертнӗ Пӗлӗмсем @@ -431,7 +390,6 @@ Янтӑвра манкӑсем ҫук. Янтӑв тӑвӑннӑ Май килнӗ таран янтӑвсем - Хӑй-халлӗн янтӑвлани Янтӑв вырнаҫни Вулавӑша янтӑвран тавӑр Янтӑв тавӑр @@ -439,33 +397,24 @@ v%1$s верссиччен ҫӗнетнӗ Мӗн ҫӗнни Темӑ - Хушнӑ вӑхӑтпа + Хушни вӑхӑчӗпе \"%1$s\" пур ҫӗрте шыра Вулав тытӑмӗ - - 1 сӑнану - %d сӑнану - Санӑн ҫакнӑ ҫӑл куҫ ҫук Вӗҫленӗ Ӳсӗм - Тиев вӗҫленӗ Йӑнӑшсем Кӗмен сӑнанусем: NSFW (18+) шалаш пулма пултарать 18+ - Ҫакӑ хушӑмра официаллӑ мар е тӗрӗс мар палӑртнӑ хушмасен NSFW (18+) шалашне кӑтартма чӑрмантармасть. - - 1 сыпӑк ҫук - %d сыпӑк ҫук - + Ҫакӑ апра чӑнлавлӑ мар йе тӗрӗс мар палӑртнӑ хушмасен NSFW (18+) шалашне кӑтартма чӑрмантармасть. Сыпӑксем ҫук Яланхилле сыпӑк ӗнерлев ҫӗнетнӗ Яланхилле Ҫак ӗнерелевсене яланхилле упрасшӑнах-и\? %1$s: %2$s, %3$d-мӗш ел Сыпӑк ӗнерлеве - Шырав ӗнерлевӗ + Ӗнерӳ шыра Тиесе илнӗ сыпӑксем Кун-ҫул тасат Кун-ҫула катертнӗ @@ -489,21 +438,21 @@ Тийесе илни вӑхӑчӗпе Йӗрленет Файлсенчи йӑнӑшсен логсене хатерлевҫӗсем патне яма упрать - Тухса кайни инчен логсене тиесе яни + Йӑнӑш кӗнекине тийесе йар Куҫӑм палли Сылтӑмран сулахаялла Анлӑ елсене пайлани вулав майлӑ мар пулсан Анлӑ елсене тепӗр майлӑ пайлани Анлӑ елсене пайлани - Серилӗхсен шутне кӑтарт + Ҫыравсен шутне кӑтарт Сылтӑм Сулахай Малалли Унченхи HTTPS урлӑ DNS - Хӑй хальлӗн тиени + Хӑй хальлӗн тийени Кӑлар: %s - Ҫут: %s + Кӗрт: %s Ҫук Йулашки сыпӑк илнипе Ҫак Android версси урӑх @@ -511,55 +460,46 @@ Тӑрӑх Урлӑ Урлӑ-тӑрӑх тӗсӗ - Папкӑсене сери ячӗпе туни - Елсене уйрӑм папкӑсенче упрамалла Тӑвӑмсем Пусма вырӑнсене вулӑш уҫӑ чухне кӑтартмалла Йӑнӑшсене кӑтарт Ҫак серилӗх валли пурне те пӑрахӑҫла Хӑй-хальлӗн тийесе илни, малтанах тийени - Юлнӑ сыпӑксем - Пурӗ ҫырав + Йулнӑ сыпӑксемпе + Ҫырав шучӗпе Пурне те катерт - «%s» пухмӑша катертесшӗнех-и\? + «%s» пухмӑш катертесшӗнех-и\? Пухмӑш катерт + Вырӑнти ҫӑл куҫран Асӑрхаттару Йатсӑр сетке Серилӗхе пуҫламӑша куҫар Улшӑнӑва ҫирӗплетме есӗлӗхе ҫирӗплет - Пуҫланӑ Кӑтартусем тата ыйту-хурав Чӗлхе Шыра… Хуп - Тийеве халь пуҫла + Тийеве халех пуҫла InternalError: Хушма пӗлӗме пӑхма тӑвӑм-пулӑм кӗнекине пӑх - Кӑтартӑнни + Кӑтартӑну Ҫутнӑ Сӳнтернӗ Темӑ, кун тата вӑхӑт хармачӗ - Пухмӑшсем, пӗтӗмӗшле ҫӗнетӳ + Пухмӑшсем, пӗтӗмӗшле ҫӗнетӳ, сыпӑксене туртни Вулав тытӑмӗ, кӑтартӑнни, куҫӑм - Ап чӗлхи, систерӳсем - Тийев черечӗ + Йаланхилле + Ӑнсӑрт ҫырав уҫ Ҫӗр ҫырли тайккирийӗ Ҫур ҫӗр ӗнтрӗкӗ Пӗр йенлӗ ӳсӗм килӗштерӗвӗ, анлӑлатнӑ килӗштерӳ Wi-Fi урлӑ ҫеҫ - «Малалла вула» пускӑч Апа ҫаклатни, ыкран хӳтӗлевӗ - Петтерей тулли чух Чарусем: %s - Вуламан сыпӑк(сем) пур Пуҫланӑ Вырӑнти Тийесе илнӗ Шыв хӑпарнин хумӗ - Вӑхӑт паллисем - Чухлавлӑ вӑхӑт палли - Вӑрӑм (кӗске+, n кун кайалла) Ап темми - Анчахрах Пайан Лавантӑ Ин тата Йан @@ -567,17 +507,12 @@ Симӗс пан улми Йутсупа Серилӗхсене ҫӗнетнине сиктер - - Ӗнер - %1$d кун кайалла - Чараксӑр тетел урлӑ ҫеҫ Серилӗхе пуҫламан Такку Хуп-хура темӑ Ап чӗлхи Халь мар - Кӗске (пайан, ӗнер) Кашни 3 кун Симӗс кӑвак Куҫӑмлӑ @@ -586,15 +521,12 @@ Хӑй тӗллӗн тата хӑй-хальлӗн йантӑлав Пухмӑш ҫӗнет Йӑнӑш кӗнекине тийесе йани, петтерей лайӑхлатни - Вуламан сыпӑксен шутне «Ҫӗнӗлӗх» ыккун ҫинче кӑтартни Сӑна тӑрӑх пысӑклатни Нумай чӗлхеллӗ Хӑй-хальлӗн Сӳнтернӗ Хушмасен йат-йышне илесси пулаймарӗ - Вулавӑша ҫӗнетнӗ май йӗрлеве те ҫӗнетни - Вӑрӑм сӑнсене пайлани (ПЕТТӖ) - Кашни пухмӑшӑн хӑйӗн ӗнерӳсем + Кашни пухмӑшӑн хӑйӗн ала ӗнерӗвӗсем Ап ҫинчен Вулӑшӑн тухӑҫа лайӑхлатать User agent пушӑ пулмалла мар @@ -603,6 +535,28 @@ Вӑрӑм сӑнсене пайлани Управ ирӗкӗсене паман Версси - Йӗрлеве хӑй-хальлӗн ҫӗнетни Пурне те ҫӗнет - \ No newline at end of file + Тийесе илнисене катерт + Ретре %d + Кӗтӗнекен кӑларӑм тапхӑрӗ тулашӗнче + Сылтӑмалла туртни + Сулахайалла туртни + Ларткӑч + Shizuku ӗҫлемест + Ҫул-ӳсӗм чаравӗ + Иртнӗ тапхӑр тӗрӗслевӗ + Тепӗр кӗтӗнекен ҫӗнетӳпе + Сыпӑк туртни + Хушма лартни… + Тӑтӑшлӑх палӑрт + Ӗнерӳллӗ илӳ тӑтӑшлӑхӗ + Уйӑхлӑ илӳ (28 кун) + Йулашки 10+ куна тӗрӗслени + Пӑрахнӑ\? Йулашки 20+ кун тата 2 уйӑх + Малтанхилле + Shizuku-н хушма ларткӑча усӑ курма Shizuku ларт тата ҫут. + Йурӗ + %s уҫ + Серилӗхе вӗҫе куҫар + Кӗртнӗ пухмӑшсенче пулнӑ пулсан та кӑларса пӑрахнӑ пухмӑшсенче пулнӑ серилӗхсем ҫӗнелмӗҫ. + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/da/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/da/plurals-aniyomi.xml new file mode 100644 index 0000000000..722f87c35b --- /dev/null +++ b/i18n/src/commonMain/resources/MR/da/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/da/plurals.xml b/i18n/src/commonMain/resources/MR/da/plurals.xml new file mode 100644 index 0000000000..7f24d8b750 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/da/plurals.xml @@ -0,0 +1,19 @@ + + + + I går + %1$d dage siden + + + Efter %1$s minut + Efter %1$s minutter + + + %d kategori + %d kategorier + + + Næste ulæste kapitel + Næste %d ulæste kapitler + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/da/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/da/strings-aniyomi.xml new file mode 100644 index 0000000000..40505359be --- /dev/null +++ b/i18n/src/commonMain/resources/MR/da/strings-aniyomi.xml @@ -0,0 +1,11 @@ + + + Kategorier + Lås op for Tachiyomi + Nyeste manga opdateringer + Vis manga + Lokale manga + Med ulæst kapitler + Standard kategori + Manga i ekskluderede kategorier vil ikke blive opdateret selv hvis de også er i inkluderede kategorier. + \ No newline at end of file diff --git a/i18n/src/main/res/values-da/strings.xml b/i18n/src/commonMain/resources/MR/da/strings.xml similarity index 58% rename from i18n/src/main/res/values-da/strings.xml rename to i18n/src/commonMain/resources/MR/da/strings.xml index cb9217e445..69ed4438fa 100644 --- a/i18n/src/main/res/values-da/strings.xml +++ b/i18n/src/commonMain/resources/MR/da/strings.xml @@ -7,11 +7,10 @@ Migerering Standard Advarsel - Downloadet Bogmærket Fjern filter Inverter valg - Makér som læst + Markér som læst Markér som ulæst Markér tidligere som læst Download @@ -19,7 +18,7 @@ Aktivér alt Rediger Omdøb kategori - Rediger cover + Rediger omslag Se kapitler Komfortabelt grid Kun covers som grid @@ -27,7 +26,8 @@ Du har ikke nogen kategorier. Tryk på plusset for at oprette en og organisere dit bibliotek. Mere Bibliotek - Manga + Kategorier + Biblioteksposter Kapitler Sporing Kilder @@ -38,27 +38,26 @@ Filter Alfabetisk Fjern + Download kø Historik Backup og gendannelse Udvidelser Intet læst for nyligt Ingen downloads Dato hentet - Startet - Tryk tilbage igen for at afslutte Indstillinger Ulæst Manga ialt Menu Dato tilføjet Vælg alt - Søge indstillinger + Søgeindstillinger Opdater bibliotek Tilføj kategori Næste kapitel Forsøg igen Sprog - Kapitler ialt + Kapitler i alt Seneste kapitel Global søgning Slet @@ -79,15 +78,15 @@ Kompakt grid Liste Downloaded kapitler + Lokale manga Sporet Vælg kategorier - Vis kategori tabs + Vis kategorifaner Godkend for at bekræfte ænding Vis antal genstande Deaktivér Fastgør Frigør - Omarranger Efter upload dato Efter kapitelnummer Ældste @@ -140,28 +139,14 @@ Yin-yang Yotsuba Kulsort - Tidsstempler - Lang (Kort+, n dage siden) Dato format - Relative tidsstempler - Kort (I dag, I går) - Bekræft afslut Håndter notifikationer Sikkerhed Kræv oplåsning - - I går - %1$d dage siden - NSFW (18+) kilder Vis i kilder og udvidelsesliste Dette forhindrer ikke uofficielle eller potentielt ukorrekt markerede udvidelser fra at vise NSFW (18+) indhold i appen. - For nylig I dag - - Efter %1$s minut - Efter %1$s minutter - Lås ved inaktivitet Altid Aldrig @@ -184,7 +169,6 @@ Hver tredje dag Ugentligt Kun under opladning - Når batteriet ikke et lavt Begrænsninger: %s Spring over opdatering af titler Med \"Færdig\" status @@ -194,17 +178,13 @@ Tidevandsbølge Søg efter nyt cover og detaljer, når biblioteket opdateres Opdater automatisk metadata + Standard kategori Antal ulæst - Opdater automatisk trackere Slet kategori - - %d kategori - %d kategorier - Ekskluder: %s Lavendel - Opdater trackere når biblioteket opdateres Spørg altid + Manga i ekskluderede kategorier vil ikke blive opdateret selv hvis de også er i inkluderede kategorier. Alle Ingen Inkluder: %s @@ -220,5 +200,123 @@ I Biblioteket Fjern fra biblioteket Log af -Download kø - \ No newline at end of file + Tilpas højde + Statistik + Fuldskærmsvisning + Hvid + Ventende + %d pr. række + Installationsprogram + Kopiér til udklipsholder + Lås op for %s + Spring over filtrerede kapitler + Nedhentet + Version + Angiv interval + Slet nedhentede + Anvend + Tilpas bredde + Baggrundsfarve + Sprog + Standardlæsetilstand + Nulstil til standard + Installér + Til + Deaktiveret + Søg… + Næste + Sortér kategorier + Spring over kapitler markeret som læst + Automatisk nedhentning, nedhent forud + Installerer + Lodret + Opdatér kategori + Opdater alle + Opdateringer venter + Fra + Manuel og automatisk sikkerhedskopiering, lagerplads + Flyt serie til bunden + Scanlator + Opdater + Begge + Vandret + Data og lagring + Vil du sortere kategorierne i alfabetisk rækkefølge? + Læsetilstand, skærmvisning, navigation + Højre + Forrige + Henter ned + 18+ + Afinstallér + Ikke nu + Installerer udvidelse… + Vis sidetal + Påbegyndt + Vis læsetilstand + Uden for forventet udgivelsesperiode + Installeret + OK + Højre og Venstre + Stræk + Sort + Automatisk + Tema, dato- og tidsformat + Relative tidsstempler + Forældet + Grå + \"%1$s\" i stedet for \"%2$s\" + Næste forventede opdatering + Uofficiel + Kilder, udvidelser, global søgning + Venstre + Sikkerhedskopi oprettet + Vis altid kapitelovergang + Opret + Gendan sikkerhedskopi + Sprunget over + Brugt: %1$s + Laveste + Rotation + Opret sikkerhedskopi + Stående + Læser + Udvidelsesopdateringer + Sikkerhedskopiering mislykkedes + Placering af sikkerhedskopi + Fri + Fejl + Gendannelse fuldført + Udelukkede kategorier + Femtesidst læste kapitel + Ugyldig sikkerhedskopieringsfil + Appopdateringer + Næste side + Ingen internetforbindelse + Data + Læsetilstand + Du er ved at fjerne \"%s\" fra dit bibliotek + Højeste + Maksimale antal automatiske sikkerhedskopier + Lav + Kildeindstillinger + App-indstillinger + Fjerdesidst læste kapitel + Liggende + Kræver genstart af appen for at træde i kraft + Automatisk sikkerhedskopieringsfrekvens + Opdel høje billeder + Deaktiveret + Senest læste kapitel + %02d min, %02d sek + Høj + Gendan biblioteket fra sikkerhedskopi + Forrige side + Tredjesidst læste kapitel + Ugyldig placering: %s + Kan bruges til at gendanne nuværende bibliotek + HTTP %d, tjek websiden i WebView + Næstsidst læste kapitel + Opretter sikkerhedskopi + Kunne ikke nå %s + Kapitelopdateringer + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/de/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/de/plurals-aniyomi.xml new file mode 100644 index 0000000000..3f5777f530 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/de/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + Nächste ungesehene Folgen + Nächste %d Folgen + + + 1 Folge + %1$s Folgen + + + Für 1 Titel + Für %d Titel + + + 1 neue Folge + %1$d neue Folgen + + + %d Sekunde + %d Sekunden + + + Folgen %1$s und 1 mehr + Folgen %1$s und %2$d mehr + + + Nächste Folge + Nächste %d Folgen + + \ 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 new file mode 100644 index 0000000000..f7d3181d7b --- /dev/null +++ b/i18n/src/commonMain/resources/MR/de/plurals.xml @@ -0,0 +1,67 @@ + + + + Nach %1$s Minute + Nach %1$s Minuten + + + %1$d neues Kapitel + %1$d neue Kapitel + + + Kapitel %1$s und 1 mehr + Kapitel %1$s und %2$d mehr + + + Für %d Eintrag + Für %d Einträge + + + Erweiterungsaktualisierung verfügbar + %d Erweiterungsaktualisierungen verfügbar + + + %1$s verbleibend + %1$s verbleibend + + + %d Kategorie + %d Kategorien + + + Erledigt in %1$s mit %2$s Fehler + Erledigt in %1$s mit %2$s Fehlern + + + %1$s Kapitel + %1$s Kapitel + + + %d Tracker + %d Tracker + + + %d Kapitel wird übersprungen, da die Quelle dieses entweder nicht besitzt, oder weil es rausgefiltert wurde + %d Kapitel werden übersprungen, da die Quelle diese entweder nicht besitzt, oder weil sie rausgefiltert wurden + + + Gestern + Vor %1$d Tagen + + + Nächstes ungelesenes Kapitel + Nächste %d ungelesene Kapitel + + + Nächstes Kapitel + Nächste %d Kapitel + + + %1$s Kapitel fehlt + %1$s Kapitel fehlen + + + 1 Tag + %d Tage + + \ No newline at end of file diff --git a/i18n/src/main/res/values-de/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/de/strings-aniyomi.xml similarity index 94% rename from i18n/src/main/res/values-de/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/de/strings-aniyomi.xml index bd683c18fc..43b869828e 100644 --- a/i18n/src/main/res/values-de/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/de/strings-aniyomi.xml @@ -105,10 +105,6 @@ Bevorzugte Downloader-App Neue Folgen herunterladen Beim Schauen automatisch herunterladen - - Nächste ungesehene Folgen - Nächste %d Folgen - Funktioniert nur mit Bibliothekseinträgen und wenn die aktuelle Folge und die nächste bereits heruntergeladen sind Fortschritt nach dem Lesen aktualisieren Beim Hinzufügen zur Bibliothek das Tracking-Menü öffnen @@ -131,10 +127,6 @@ Folge nicht gefunden Ungültiges Folgen-Format Unbekanntes Studio - - 1 Folge - %1$s Folgen - Heruntergeladene Folgen löschen\? Zur Bibliothek hinzufügen\? Anime zur Bibliothek hinzufügen\? @@ -176,14 +168,6 @@ Achtung: Große Downloads könnten dazu führen, dass Quellen langsamer werden und/oder Tachiyomi blockieren. Tippe, um mehr zu erfahren. Kein Video gefunden Neue Folgen gefunden - - Für 1 Titel - Für %d Titel - - - 1 neue Folge - %1$d neue Folgen - Nichts kürzlich geschaut WebView ist für Tachiyomi erforderlich Standard-Folgeneinstellungen aktualisiert @@ -191,10 +175,6 @@ Folgendownload pausiert Kapitelaktualisierungen +%1$d s - - %d Sekunde - %d Sekunden - Nächste Folge nicht gefunden! Manga Anime @@ -237,10 +217,6 @@ Folge %1$s Folge %1$s und %2$d mehr Folgen %1$s - - Folgen %1$s und 1 mehr - Folgen %1$s und %2$d mehr - Folgeneinstellungen Sicherungsoptionen Manga-Erweiterungen @@ -267,10 +243,6 @@ Bild-im-Bild (PiP) Suchen Mangaeinträge verstecken, die schon in der Bibliothek sind - - Nächste Folge - Nächste %d Folgen - Videolink in die Zwischenablage kopiert Animeeinträge verstecken, die schon in der Bibliothek sind Videoqualität auswählen: diff --git a/i18n/src/main/res/values-de/strings.xml b/i18n/src/commonMain/resources/MR/de/strings.xml similarity index 82% rename from i18n/src/main/res/values-de/strings.xml rename to i18n/src/commonMain/resources/MR/de/strings.xml index aba7b93df5..102409c651 100644 --- a/i18n/src/main/res/values-de/strings.xml +++ b/i18n/src/commonMain/resources/MR/de/strings.xml @@ -1,19 +1,20 @@ Name - Manga + Kategorien + Bibliothekseinträge Kapitel Verlauf Einstellungen + Download-Warteschlange Bibliothek Verlauf Sichern und Wiederherstellen Einstellungen Filter - Heruntergeladen Lesezeichen Ungelesen - Filter löschen + Filter entfernen Alphabetisch Kapitelanzahl Zuletzt gelesen @@ -76,6 +77,7 @@ Geräteeinschränkungen für automatische Aktualisierungen Beim Laden Mit dem Status „Abgeschlossen“ + Standardkategorie Immer fragen Vollbild Animierte Seitenübergänge @@ -107,7 +109,7 @@ Links Rechts Mitte - Standard-Ausrichtungstyp + Standardausrichtung Frei Hochformat erzwingen Querformat erzwingen @@ -124,15 +126,14 @@ Ab viertletzt gelesenem Kapitel Ab fünftletzt gelesenem Kapitel Neue Kapitel herunterladen - Anbieter + Tracker Datensicherung erstellen Kann benutzt werden, um die aktuelle Bibliothek wiederherzustellen Datensicherung wiederherstellen Bibliothek mit Hilfe einer Datensicherung wiederherstellen Sicherungsspeicherort - Automatische Datensicherungen - Datensicherungshäufigkeit - Maximale Datensicherungen + Automatische Datensicherungshäufigkeit + Maximale Anzahl automatischer Datensicherungen Datensicherung erstellt Wiederherstellen abgeschlossen Was möchtest du sichern\? @@ -143,8 +144,9 @@ Fehler während dem Leeren aufgetreten Cookies löschen Cookies gelöscht + Datenbank leeren + Verlauf für Einträge löschen, die nicht in deiner Bibliothek gespeichert sind Einträge gelöscht - Tracking aktualisieren Version Fehlerberichte senden Hilft bei der Behebung von Fehlern. Keine sensiblen Daten werden gesendet @@ -160,10 +162,12 @@ Fortlaufend Unbekannt Lizenziert - Aus Bibliothek entfernen + Aus der Bibliothek entfernen Heruntergeladene Kapitel löschen? Kapitel %1$s Wird heruntergeladen (%1$d/%2$d) + Fehler + Pausiert Quellentitel Kapitelnummer Quelle @@ -183,6 +187,7 @@ Eine Kategorie mit diesem Namen existiert bereits! Kategorien gelöscht Das Lesedatum dieses Kapitels wird gelöscht. Bist du sicher\? + Zur Bibliothek hinzufügen\? Bild gespeichert Eigener Filter Als Vorschaubild festlegen @@ -199,7 +204,6 @@ Wähle eine Sicherungsdatei Herunterladen Keine neue Aktualisierung verfügbar - Suche nach Aktualisierungen… Herunterladen… Tippe, um die Aktualisierung zu installieren Fehler beim Herunterladen @@ -213,6 +217,7 @@ Kapitel konnte aufgrund eines unerwarteten Fehlers nicht heruntergeladen werden Keine WLAN-Verbindung verfügbar Kein Netzwerk verfügbar + Downloads pausiert Tracking Neues Globale Suche @@ -222,7 +227,6 @@ Stöbern Allgemein Heruntergelade Kapitel - Lokal Keine Kategorien vorhanden. Tippe auf die Plus-Schaltfläche, um eine Kategorie zum Sortieren deiner Bibliothek zu erstellen. Migrieren Erweiterungen @@ -252,7 +256,6 @@ Quelle nicht installiert: %1$s Am Wiederlesen Status - Angefangen Typ Beendet: Aktuell: @@ -265,7 +268,7 @@ In WebView öffnen 32-Bit-Farben Gelesene Kapitel überspringen - Bei langem Antippen anzeigen + Aktionen bei langem Antippen anzeigen Overlay Multiplizieren Bildschirm @@ -301,62 +304,36 @@ Während Inaktivität sperren Immer Nie - - Nach %1$s Minute - Nach %1$s Minuten - Sicherer Bildschirm Aktualisierungen ausstehend Inhalt im Ausschnittbereich anzeigen Fehler beim Umgehen von Cloudflare Bitte aktualisiere die WebView-App für eine bessere Kompatibilität + Kapitelaktualisierungen Sicherer Bildschirm verbirgt App-Inhalte beim Wechseln von Apps und blockiert Screenshots Anzeige - - %1$d neues Kapitel - %1$d neue Kapitel - Kapitel %1$s Kapitel %1$s und %2$d mehr Kapitel %1$s - - Kapitel %1$s und 1 mehr - Kapitel %1$s und %2$d mehr - Benachrichtigungsinhalt verbergen Überprüfe auf neue Kapitel Akkuverbrauch-Optimierung deaktivieren Hilft bei Bibliotheksaktualisierungen und -sicherungen im Hintergrund - Optimierung des Akkuverbrauchs ist schon deaktiviert + Akkuverbrauch-Optimierung ist bereits deaktiviert E-Mail-Adresse Kapitelübergang immer anzeigen - - Für %d Eintrag - Für %d Einträge - Menü - Umordnen Neueste Älteste Nach oben verschieben Nach unten verschieben - - Erweiterungsaktualisierung verfügbar - %d Erweiterungsaktualisierungen verfügbar - Erweiterungsaktualisierungen - Webseite in WebView prüfen Bibliothek wird aktualisiert Gefilterte Kapitel überspringen Beim Lesen Quellen Auswahl umkehren Langer Streifen mit Lücken - 25% - 20% - 15% - 10% - Keine Seitenränder Angeheftet Loslösen @@ -366,10 +343,8 @@ Mehr In der Bibliothek Zur Bibliothek hinzufügen - Zum Beenden nochmal die Zurück-Taste drücken - Quelloffene Lizenzen + Open-Source-Lizenzen Webseite - Beenden bestätigen Nur Heruntergeladenes Kap. %1$s - %2$s Sicherungswiederherstellung fehlgeschlagen @@ -380,29 +355,16 @@ Nach Aktualisierungen suchen Zuletzt genutzt Anleitung für lokale Quellen - %02d Min., %02d Sek. + %02d min, %02d s Filtert alle Einträge in deiner Bibliothek - - %1$s verbleibend - %1$s verbleibend - - Nur angeheftete Quellen in der globalen Suche durchsuchen Grau Lesemodus Für diese Serie Reduziert Streifenbildung, könnte aber die Leistung beeinflussen - - %d Kategorie - %d Kategorien - Geräteeinstellungen konnten nicht geöffnet werden - - Erledigt in %1$s mit %2$s Fehler - Erledigt in %1$s mit %2$s Fehlern - - Einweg-Synchronisation zum Aktualisieren der Kapitelfortschritte in den Trackingdiensten. Richte Tracking für einzelne Einträge über deren jeweiligen Tracking-Button ein. + Einweg-Synchronisation zum Aktualisieren der Kapitelfortschritte in den externen Trackingdiensten. Richte Tracking für einzelne Einträge über deren jeweiligen Trackingbutton ein. Bibliothekscover aktualisieren - Diese Erweiterung stammt nicht von der offiziellen Tachiyomi-Erweiterungsliste. + Diese Erweiterung stammt nicht aus der offiziellen Liste. Inoffiziell Nach Uploaddatum Daten @@ -423,12 +385,8 @@ Starten Quelle nicht gefunden Deaktivieren - - %1$s Kapitel - %1$s Kapitel - - Erfordert einen Neustart der Anwendung, um wirksam zu werden - Netzwerk + Erfordert einen Neustart der App, um wirksam zu werden + Vernetzung Tippzonen umkehren Beide Vertikal @@ -438,16 +396,11 @@ Unbekannter Autor Auf v%1$s aktualisiert Was ist neu - Nach „%1$s“ überall suchen + Überall nach „%1$s“ suchen Hinzufügedatum Lesemodus Thema - - %d Tracker - %d Tracker - Du hast keine angehefteten Quellen - Download abgeschlossen Abgeschlossen Fortschritt Fehler @@ -455,10 +408,6 @@ Quellen dieser Erweiterung könnten NSFW/Ü18-Inhalte enthalten Ü18 Dies verhindert nicht, dass inoffizielle oder möglicherweise falsch gekennzeichnete Erweiterungen NSFW/Ü18-Inhalte in der App anzeigen. - - %d Kapitel wird übersprungen, da die Quelle dieses entweder nicht besitzt, oder, weil es rausgefiltert wurde - %d Kapitel werden übersprungen, da die Quelle diese entweder nicht besitzt, oder, weil sie rausgefiltert wurden - Keine Kapitel gefunden Standard-Kapiteleinstellungen aktualisiert Als Standard setzen @@ -512,14 +461,15 @@ Abrufdatum des Kapitels Einträge in ausgeschlossenen Kategorien werden nicht heruntergeladen, auch wenn sie in eingeschlossenen Kategorien vorhanden sind. Automatisches Herunterladen + Einträge in ausgeschlossenen Kategorien werden nicht aktualisiert, auch wenn sie in eingeschlossenen Kategorien vorhanden sind. Tippe, um Details anzuzeigen Diese Android-Version wird nicht mehr unterstützt Kopieren in die Zwischenablage fehlgeschlagen Querformat Hochformat - Erstellt Ordner nach dem Titel der Einträge - Speichere Seiten in separate Ordner - Ausrichtungstyp + Erstellt Ordner nach den Titeln der Einträge + Seiten in separaten Ordnern speichern + Ausrichtung Aktionen Graustufen Inkognito-Modus deaktivieren @@ -532,21 +482,19 @@ Sortiere nach Ungültiges Kapitelformat Kapitel nicht gefunden - Tracker aktualisieren, wenn die Bibliothek aktualisiert wird - Tracker automatisch aktualisieren Einschränkungen: %s + Lokale Quelle Aus An Fehler beim Teilen des Covers Fehler beim Speichern des Covers Cover gespeichert Cover - Sortierungs- und Anzeigeeinstellungen pro Kategorie + Sortierungseinstellungen pro Kategorie Tracking-Anleitung Du hast noch keine Kategorien. Download jetzt starten - Aktualisiere Bibliothek… (%1$d/%2$d) - Einige Hersteller haben zusätzliche Anwendungsbeschränkungen, die Hintergrunddienste stoppen. Diese Webseite hat mehr Informationen darüber, wie man dies beheben kann. + Einige Hersteller haben zusätzliche App-Beschränkungen, die Hintergrunddienste stoppen. Diese Webseite hat mehr Informationen darüber, wie man dies beheben kann. Die Sicherung/Wiederherstellung funktioniert möglicherweise nicht richtig, wenn die MIUI-Optimierung deaktiviert ist. Tiefschwarzer Dunkelmodus Yotsuba @@ -556,9 +504,8 @@ Mitternachtsdämmerung Grüner Apfel App-Design - Erweiterte Anbieter - Anbieter, die für bestimmte Quellen erweiterte Funktionen anbieten. Einträge werden automatisch getrackt, wenn sie deiner Bibliothek hinzugefügt werden. - Dieser Tracker ist nur mit der Komga-Quelle kompatibel. + Erweiterte Tracker + Bieten für bestimmte Quellen erweiterte Funktionen an. Einträge werden automatisch getrackt, wenn sie deiner Bibliothek hinzugefügt werden. Dynamisch Hintergrundaktivität Niedrigste @@ -567,16 +514,7 @@ Höchste Empfindlichkeit für das Menü-Ausblenden beim Scrollen Invertiert - Kurz (Heute, Gestern) - Relative Zeitstempel - Kürzlich - Lang (Kurz+, vor n Tagen) - - Gestern - vor %1$d Tagen - Heute - Zeitstempel Blaugrün & Türkis Erscheinungsbild Authentifiziere dich, um die Änderungen zu bestätigen @@ -584,8 +522,9 @@ Tracken Leitfaden für den Einstieg Tablet-Benutzeroberfläche + Ausgeschlossene Kategorien Beim Übersetzen mithelfen - Anwendungsinfos + App-Informationen Installiere und starte Shizuku, um Shizuku als Installationsprogramm für Erweiterungen zu verwenden. Shizuku läuft nicht Legacy @@ -593,15 +532,15 @@ Erweiterung wird installiert… Einträge insgesamt Ausführliche Protokollierung - Ausführliche Protokolle im Systemprotokoll ausgeben (verringert die Anwendungsleistung) + Ausführliche Protokolle im Systemprotokoll ausgeben (verringert die App-Leistung) Sprache Warnung Große Aktualisierungen schaden Quellen und könnten zu langsameren Aktualisierungen sowie höherem Akkuverbrauch führen. Tippe, um mehr zu erfahren. - Du solltest auch Kopien der Sicherungen an anderen Orten aufbewahren. + Du solltest Kopien der Sicherungen auch an anderen Orten aufbewahren. Sicherungen beinhalten möglicherweise sensible Daten, einschließlich gespeicherter Passwörter. Sei vorsichtig beim Teilen. Nur über WLAN Alle 3 Tage Alle aktualisieren - Anwendungsaktualisierungen + App-Aktualisierungen %1$d Nicht-Bibliothekseinträge in der Datenbank Nichts zu bereinigen Herunterladen der Erweiterungsliste ist fehlgeschlagen @@ -613,11 +552,9 @@ Unterbrochen Veröffentlichung abgeschlossen Häufige Fragen und Leitfäden - 5% Nur-Cover-Kacheln - Bild im Querformat vergrößern + Bei breiten Bildern automatisch hineinzoomen Innerhalb breiter Seiten navigieren - Angefangen Die noch nicht begonnen wurden Übersprungen, da die Serie abgeschlossen ist Übersprungen, weil es ungelesene Kapitel gibt @@ -636,12 +573,9 @@ WebView-Daten löschen WebView-Daten gelöscht Schließen - Wenn der Akkustand nicht niedrig ist - Angeheftete Quellen in ihren jeweiligen Sprachgruppen wiederholen - Doppelte angeheftete Quellen anzeigen Keine installierte Quelle gefunden Keine Quelle gefunden - Ungelesenenanzahl + Anzahl an Ungelesenem Verbessert die Leserleistung Seite %d während dem Aufteilen nicht gefunden Dateipfad der Seite %d konnte nicht gefunden werden @@ -673,19 +607,14 @@ Alles entfernen Das RARv5-Format wird nicht unterstützt Deine kürzlich aktualisierten Bibliothekseinträge ansehen - Widget nicht verfügbar, wenn die App-Sperre aktiviert ist + Widget ist nicht verfügbar, wenn die App-Sperre aktiviert ist Eine Aktualisierung ist bereits im Gange User-Agent-Text darf nicht leer sein Flutwelle Im Voraus herunterladen Automatisch während dem Lesen herunterladen - - Nächstes ungelesenes Kapitel - Nächste %d ungelesene Kapitel - - Funktioniert nur bei Werken in der Bibliothek und wenn das aktuelle Kapitel sowie das darauf folgende bereits heruntergeladen sind + Funktioniert nur, wenn das aktuelle Kapitel sowie das darauf folgende bereits heruntergeladen sind. Bist du dir sicher\? - Hohe Bilder aufteilen (BETA) Du bist gerade dabei, „%s“ aus deiner Bibliothek zu entfernen Mehrere Sprachen Bibliothek zuletzt aktualisiert: %s @@ -693,17 +622,16 @@ Speicherberechtigungen nicht erteilt Übersprungen, da die Serie keine Aktualisierung benötigt Suchen… - App-Sprache, Benachrichtigungen Thema, Datums- und Zeitformat Lesemodus, Anzeige, Navigation Automatische Downloads, im Voraus herunterladen - Kategorien, globale Aktualisierungen, Kapitelstreichen - Anwendung neustarten + Kategorien, globale Aktualisierungen, Kapitelaktionen + App neustarten Einweg-Synchronisation, erweiterte Synchronisation Quellen, Erweiterungen, globale Suche - Ein unerwarteter Fehler ist aufgetreten + Ups! Absturzprotokolle ausgeben, Akkuverbrauch-Optimierung - Manuelle und automatische Datensicherungen + Manuelle und automatische Datensicherungen, Speicherplatz %s ist auf einen unerwarteten Fehler gestoßen. Wir empfehlen dir, die Absturzprotokolle in unserem Support-Kanal auf Discord zu teilen. App-Sperre, sicherer Bildschirm Unbekannter Titel @@ -715,7 +643,33 @@ Keine Einträge in dieser Kategorie gefunden F-Droid-Builds werden nicht offiziell unterstützt. \nTippe, um mehr zu erfahren. - Download-Warteschlange + Index der Downloads invalidieren + Datum entfernen\? + Dies wird dein zuvor gewähltes Startdatum von %s entfernen + Dies wird dein zuvor gewähltes Enddatum von %s entfernen + Übersicht + Heruntergeladen + Lesedauer + In der globalen Aktualisierung + Insgesamt + Gelesen + Durchschnittswert + Verwendet + n. a. + %d d + %d h + Lokal + Getrackte Einträge + Abgeschlossene Einträge + Statistiken + Gestartet + Einträge + Tracker + %d min + %d s + Nicht jetzt + Kategorie ist leer + In die Zwischenablage kopiert Verfügbar, aber Quelle ist nicht installiert: %s Doppelte Kapitel überspringen In deiner Bibliothek gibt es einen Eintrag mit dem gleichen Namen. @@ -724,25 +678,68 @@ %1$s-Fehler: %2$s *erforderlich Einträge verbergen, die bereits in der Bibliothek sind - - Nächstes Kapitel - Nächste %d Kapitel - In die Zwischenablage kopieren Kategorie aktualisieren Hohe Bilder teilen Overlay Breite Seiten drehen, damit sie passen - - %1$s Kapitel fehlt - %1$s Kapitel fehlen - - Es könnten Kapitel fehlen Ausrichtung gedrehter breiter Seiten spiegeln Debug-Info - Kapitelstreichen + Kapitelaktionen Aktion beim Streichen nach rechts Aktion beim Streichen nach links Zum Zoomen doppeltippen %d pro Zeile - \ No newline at end of file + Intervalle + Benutzerdefiniertes Abrufintervall + Intervall einstellen + Monatlich abrufen (28 Tage) + Nächste erwartete Aktualisierung + Außerhalb des erwarteten Veröffentlichungszeitraums + Intervall anpassen + Übersprungen, da heute keine Veröffentlichung erwartet wurde + Schätzt alle + Aktualisiert alle + Abgebrochen\? Um 20+ Tage und 2 Monate verspätet + Überprüfungszeitraum überschritten + Um 10+ Tage verspätet + Dies wird das lokale Tracking entfernen. + Auch aus %s entfernen + OK + Tracking von %s entfernen\? + Heruntergeladenes löschen + Hat Ergebnisse + Bibliothek wird synchronisiert + Bibliothekssynchronisierung abgeschlossen + Tippe hier, um Hilfe zu Cloudflare zu erhalten + Index der Downloads invalide + Tracker-Login + Sicherungsdatei konnte nicht erstellt werden + Lizenziert - Keine Kapitel zu zeigen + HTTP %d, überprüfe die Webseite in WebView + Keine Internetverbindung + %s konnte nicht erreicht werden + %s entsperren + Serie nach unten verschieben + Relative Zeitstempel + „%1$s“ anstelle von „%2$s“ + App-Einstellungen + Quelleneinstellungen + Bibliothek wird aktualisiert… (%s) + Kategorien sortieren + Möchtest du die Kategorien alphabetisch sortieren\? + Keine Datei ausgewählt + Nie + Reduziert Ghosting auf E-Papier-Displays + Zuletzt automatisch gesichert: %s + Bei Umblättern weiß aufleuchten + Daten und Speicher + Erstellen + Anwenden + Auf Standard zurücksetzen + Keine Scanlatoren gefunden + Scanlator + Speichernutzung + Tracker-Bewertung + Scanlatoren ausschließen + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/el/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/el/plurals-aniyomi.xml new file mode 100644 index 0000000000..4bba4c6ea1 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/el/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 new file mode 100644 index 0000000000..9431ff6b80 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/el/plurals.xml @@ -0,0 +1,67 @@ + + + + %1$d νέο κεφάλαιο + %1$d νέα κεφάλαια + + + Για %d καταχώριση + Για %d καταχωρίσεις + + + Διαθέσιμη ενημέρωση επέκτασης + %d διαθέσιμες ενημερώσεις επεκτάσεων + + + Μετά από %1$s λεπτό + Μετά από %1$s λεπτά + + + Κεφάλαια %1$s και 1 ακόμη + Κεφάλαια %1$s και %2$d ακόμη + + + %1$s που απομένει + %1$s που απομένουν + + + %d κατηγορία + %d κατηγορίες + + + Έγινε σε %1$s με %2$s σφάλμα + Έγινε σε %1$s με %2$s σφάλματα + + + %1$s κεφάλαιο + %1$s κεφάλαια + + + %d ιχνηλάτης + %d ιχνηλάτες + + + Παραλείπεται %d κεφάλαιο, είτε λείπει από την πηγή είτε έχει φιλτραριστεί + Παραλείπονται %d κεφάλαια, είτε λείπουν από την πηγή είτε έχουν φιλτραριστεί + + + Εχθές + %1$d μέρες πριν + + + Επόμενο αδιάβαστο κεφάλαιο + Επόμενα %d αδιάβαστα κεφάλαια + + + Επόμενο κεφάλαιο + Επόμενα %d κεφάλαια + + + Λείπει %1$s κεφάλαιο + Λείπουν %1$s κεφάλαια + + + 1 ημέρα + %d ημέρες + + \ No newline at end of file diff --git a/i18n/src/main/res/values-el/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/el/strings-aniyomi.xml similarity index 85% rename from i18n/src/main/res/values-el/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/el/strings-aniyomi.xml index 24bd89695c..3bca00521a 100644 --- a/i18n/src/main/res/values-el/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/el/strings-aniyomi.xml @@ -38,32 +38,4 @@ Το WebView απαιτείται για το Tachiyomi Λήψη σε παύση Ενημερώσεις κεφαλαίων - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-el/strings.xml b/i18n/src/commonMain/resources/MR/el/strings.xml similarity index 84% rename from i18n/src/main/res/values-el/strings.xml rename to i18n/src/commonMain/resources/MR/el/strings.xml index b14be6d72a..70e32c4ea1 100644 --- a/i18n/src/main/res/values-el/strings.xml +++ b/i18n/src/commonMain/resources/MR/el/strings.xml @@ -1,11 +1,13 @@ Όνομα - Manga + Κατηγορίες + Καταχωρήσεις βιβλιοθήκης Κεφάλαια - Tracking + Παρακολούθηση Ιστορικό Ρυθμίσεις + Ουρά λήψεων Βιβλιοθήκη Ιστορικό Ενημερώσεις @@ -15,7 +17,6 @@ Πληροφορίες επέκτασης Ρυθμίσεις Φίλτρο - Λήψεις Στους Σελιδοδείκτες Αδιάβαστα Αφαίρεση φίλτρου @@ -66,7 +67,7 @@ Γενικά Αναγνώστης Λήψεις - Tracking + Παρακολούθηση Για προχωρημένους Περί Μέγεθος πλέγματος @@ -83,6 +84,7 @@ Περιορισμοί αυτόματων ενημερώσεων συσκευής Κατά τη φόρτιση Με κατάσταση \"Ολοκληρωμένο\" + Προεπιλεγμένη κατηγορία Ερώτηση πάντα Ενημέρωση Εγκατάσταση @@ -129,7 +131,7 @@ Χωρίς κίνηση Κανονική Γρήγορη - Προεπιλεγμένος τύπος περιστροφής + Προεπιλεγμένη περιστροφή Ελεύθερο Κλειδωμένο κατακόρυφα Κλειδωμένο οριζόντια @@ -146,15 +148,14 @@ Προ-προ-προτελευταίο αναγνωσμένο κεφάλαιο Προ-προ-προ-προτελευταίο αναγνωσμένο κεφάλαιο Λήψη νέων κεφαλαίων - Υπηρεσίες + Ιχνηλάτες Δημιουργία αντιγράφου ασφαλείας Μπορεί να χρησιμοποιηθεί για επαναφορά τρέχουσας βιβλιοθήκης Επαναφορά αντιγράφου ασφαλείας Επαναφορά βιβλιοθήκης από αρχείο αντιγράφου ασφαλείας Τοποθεσία αντιγράφων ασφαλείας - Αυτόματα αντίγραφα ασφαλείας - Συχνότητα αντίγραφου ασφάλειας - Μέγιστα αντίγραφα ασφαλείας + Συχνότητα αυτόματων αντιγράφων ασφαλείας + Μέγιστα αυτόματα αντίγραφα ασφαλείας Δημιουργήθηκε αντίγραφο ασφαλείας Η επαναφορά ολοκληρώθηκε Τι αντίγραφο ασφαλείας θέλετε να δημιουργήσετε; @@ -165,8 +166,9 @@ Παρουσιάστηκε σφάλμα κατά την εκκαθάριση Διαγραφή cookies Τα cookies διαγράφηκαν + Καθαρισμός βάσης δεδομένων + Διαγραφή ιστορικού για καταχωρήσεις που δεν έχουν αποθηκευτεί στη βιβλιοθήκη σας Οι καταχωρίσεις διαγράφηκαν - Ανανέωση tracking Έκδοση Αποστολή αναφορών σφαλμάτων Βοηθά στην επιδιόρθωση τυχόν σφαλμάτων. Δεν θα αποστέλλονται ευαίσθητα δεδομένα @@ -177,7 +179,6 @@ Συνδεθήκατε επιτυχώς Άγνωστο σφάλμα Ενημέρωση κατηγορίας - Τοπικό Δεν υπάρχουν άλλα αποτελέσματα Τοπική πηγή Άλλα @@ -196,6 +197,8 @@ Η πηγή δεν είναι εγκατεστημένη: %1$s Κεφάλαιο %1$s Λήψη (%1$d/%2$d) + Σφάλμα + Παύση Τίτλος πηγής Αριθμός κεφαλαίου Με βάση την πηγή @@ -203,7 +206,7 @@ Λήψη Αδιάβαστα Είστε βέβαιοι ότι θέλετε να διαγράψετε τα επιλεγμένα κεφάλαια; - Tracking + Παρακολούθηση Ανάγνωση Ολοκληρωμένο Παραλείφθηκε @@ -214,11 +217,11 @@ Τίτλος Κατάσταση Κατάσταση - Ξεκίνησε Τύπος Μια κατηγορία με αυτό το όνομα υπάρχει ήδη! Οι κατηγορίες διαγράφηκαν Αυτό θα αφαιρέσει την ημερομηνία ανάγνωσης αυτού του κεφαλαίου. Είστε σίγουροι; + Προσθήκη στη βιβλιοθήκη; Η εικόνα αποθηκεύτηκε Προσαρμοσμένο φίλτρο Ορισμός ως εξώφυλλο @@ -246,7 +249,6 @@ Επιλέξτε αρχείο αντιγράφου ασφαλείας Λήψη Δεν υπάρχουν διαθέσιμες νέες ενημερώσεις - Αναζήτηση για ενημερώσεις… Γίνεται λήψη… Πατήστε για να εγκαταστήσετε την ενημέρωση Σφάλμα λήψης @@ -261,8 +263,9 @@ Το κεφάλαιο δεν μπορούσε να ληφθεί λόγο μη αναμενόμενου σφάλματος Δεν υπάρχει διαθέσιμη σύνδεση Wi-Fi Δεν υπάρχει διαθέσιμη σύνδεση δικτύου + Λήψεις σε παύση Κοινό - Εμφάνιση με παρατεταμένο πάτημα + Εμφάνιση ενεργειών με παρατεταμένο πάτημα Άνοιγμα στο WebView Χρώμα 32-bit Προσπέραση διαβασμένων κεφαλαίων @@ -285,22 +288,14 @@ Χρησιμοποιήθηκε τελευταία Προσθήκη tracking Καρφιτσωμένα - Πατήστε ξανά για έξοδο %02d λεπτά, %02d δευτερόλεπτα Επιλογή αντίστροφου Ενημερώσεις επεκτάσεων + Ενημερώσεις κεφαλαίων Παρακαλώ ενημερώστε την εφαρμογή WebView για καλύτερη συμβατότητα Κεφάλαιο %1$s και %2$d ακόμη Κεφάλαια %1$s Κεφάλαιο %1$s - - %1$d νέο κεφάλαιο - %1$d νέα κεφάλαια - - - Για %d τίτλο - Για %d τίτλους - Έλεγχος για νέα κεφάλαια Κεφ. %1$s - %2$s Ενημέρωση βιβλιοθήκης @@ -311,11 +306,6 @@ Προσθήκη στη βιβλιοθήκη Οδηγός τοπικής πηγής Αποτυχία παράκαμψης του Cloudflare - - Διαθέσιμη ενημέρωση επέκτασης - %d διαθέσιμες ενημερώσεις επεκτάσεων - - Ελέγξτε τον ιστότοπο στο WebView Έχετε αποσυνδεθεί Αποσύνδεση Αποσύνδεση από %1$s; @@ -331,11 +321,6 @@ Η επαναφορά βρίσκεται ήδη σε εξέλιξη Η δημιουργία αντιγράφων ασφαλείας απέτυχε Η δημιουργία αντιγράφων ασφαλείας βρίσκεται ήδη σε εξέλιξη - 25% - 20% - 15% - 10% - Κανένα Πλευρικό γέμισμα Ανάγνωση Να εμφανίζεται πάντα η μετάβαση κεφαλαίου @@ -348,17 +333,12 @@ Απόκρυψη περιεχομένου ειδοποιήσεων Η ασφαλής οθόνη αποκρύπτει τα περιεχόμενα εφαρμογών κατά την εναλλαγή εφαρμογών και εμποδίζει τα στιγμιότυπα οθόνης Ασφάλισε την οθόνη - - Μετά από %1$s λεπτό - Μετά από %1$s λεπτά - Ποτέ Πάντα Κλείδωμα όταν είναι αδρανής Απαιτείται ξεκλείδωμα Ασφάλεια και ιδιωτικότητα Διαχείριση ειδοποιήσεων - Επιβεβαίωση εξόδου Μορφή ημερομηνίας Ακολουθήστε το σύστημα Ενεργοποιημένο @@ -376,33 +356,15 @@ Πηγές Παλαιότερο Νεότερο - Αναδιάταξη - - Κεφάλαια %1$s και 1 ακόμη - Κεφάλαια %1$s και %2$d ακόμη - Φιλτράρει όλες τις καταχωρήσεις στη βιβλιοθήκη σας - Αναζήτηση μόνο καρφιτσωμένων πηγών στην καθολική αναζήτηση - - %1$s που απομένει - %1$s που απομένουν - Γκρι Μειώνει το banding, αλλά μπορεί να επηρεάσει την απόδοση Λειτουργία ανάγνωσης Για αυτήν τη σειρά - - %d κατηγορία - %d κατηγορίες - Δεν ήταν δυνατό το άνοιγμα των ρυθμίσεων της συσκευής - - Έγινε σε %1$s με %2$s σφάλμα - Έγινε σε %1$s με %2$s σφάλματα - - Μονόδρομος συγχρονισμός για ενημέρωση των υπηρεσιών παρακολούθησης προόδου κεφαλαίων. Ρυθμίστε την παρακολούθηση για μεμονωμένες καταχωρήσεις από το κουμπί παρακολούθησης τους. + Μονόδρομος συγχρονισμός για ενημέρωση των υπηρεσιών εξωτερικής παρακολούθησης προόδου κεφαλαίων. Ρυθμίστε την παρακολούθηση για μεμονωμένες καταχωρήσεις από το κουμπί παρακολούθησης τους. Ανανέωση εξώφυλλων βιβλιοθήκης - Αυτή η επέκταση δεν προέρχεται από την επίσημη λίστα επεκτάσεων Tachiyomi. + Αυτή η επέκταση δεν προέρχεται από την επίσημη λίστα. Ανεπίσημη Από ημερομηνία μεταφόρτωσης Δεδομένα @@ -423,10 +385,6 @@ Έναρξη Δεν βρέθηκε πηγή Απενεργοποίηση - - %1$s κεφάλαιο - %1$s κεφάλαια - Απαιτείται επανεκκίνηση της εφαρμογής για να τεθεί σε ισχύ Δίκτυο Και τα δυο @@ -442,23 +400,14 @@ Λειτουργία ανάγνωσης Θέμα Ημερομηνία προσθήκης - - %d tracker - %d trackers - Δεν έχετε καρφιτσωμένες πηγές Ολοκληρωμένο Η λήψη ολοκληρώθηκε - Η λήψη ολοκληρώθηκε Σφάλματα Trackers που δεν έχουν συνδεθεί: Πηγές από αυτήν την επέκταση ενδέχεται να περιέχουν περιεχόμενο NSFW (18+) 18+ Αυτό δεν εμποδίζει τις ανεπίσημες ή ενδεχομένως εσφαλμένα επισημασμένες επεκτάσεις να εμφανίζουν περιεχόμενο NSFW (18+) μέσα στην εφαρμογή. - - Παραλείπεται %d κεφάλαιο, είτε λείπει από την πηγή είτε έχει φιλτραριστεί - Παραλείπονται %d κεφάλαια, είτε λείπουν από την πηγή είτε έχουν φιλτραριστεί - Δεν βρέθηκαν κεφάλαια Ενημερώθηκαν οι προεπιλεγμένες ρυθμίσεις κεφαλαίου Ορισμός ως προεπιλογής @@ -512,43 +461,40 @@ Ημερομηνία ανάκτησης κεφαλαίου Οι καταχωρήσεις σε εξαιρούμενες κατηγορίες δε θα ληφθούν ακόμη και αν βρίσκονται επίσης σε κατηγορίες που περιλαμβάνονται. Αυτόματη λήψη + Οι καταχωρίσεις σε εξαιρούμενες κατηγορίες δε θα ενημερώνονται ακόμη και αν περιλαμβάνονται επίσης σε κατηγορίες που περιλαμβάνονται. Πατήστε για να δείτε λεπτομέρειες Αυτή η έκδοση Android δεν υποστηρίζεται πλέον Απέτυχε η αντιγραφή στο πρόχειρο Οριζόντια Κατακόρυφα - Δημιουργεί φακέλους σύμφωνα με τους τίτλους των καταχωρήσεων - Αποθήκευση σελίδων σε ξεχωριστούς φακέλους Ενέργειες - Τύπος περιστροφής + Περιστροφή Κλίμακα του γκρι Απενεργοποίηση λειτουργίας ανώνυμης περιήγησης - Αυτόματα + Αυτόματο Ακύρωση όλων για αυτήν τη σειρά Δεν βρέθηκε αντιστοιχία Η πηγή δεν υποστηρίζεται Αδιάβαστα Ημερομηνία Ταξινόμηση κατά - Ενημέρωση των trackers κατά την ενημέρωση της βιβλιοθήκης - Αυτόματη ανανέωση των trackers Μη έγκυρη μορφή κεφαλαίου Το κεφάλαιο δε βρέθηκε Περιορισμοί: %s + Τοπική πηγή Απενεργοποιημένο Ενεργοποιημένο Σφάλμα κοινής χρήσης του εξωφύλλου Σφάλμα αποθήκευσης εξωφύλλου Το εξώφυλλο αποθηκεύτηκε Εξώφυλλο - Ρυθμίσεις για ταξινόμηση και εμφάνιση ανά κατηγορία + Ρυθμίσεις για ταξινόμηση ανά κατηγορία Οδηγός tracking Δεν έχετε κατηγορίες ακόμα. Έναρξη λήψης τώρα Midnight Dusk Πράσινο Μήλο Θέμα εφαρμογής - Ενημέρωση βιβλιοθήκης… (%1$d/%2$d) Ορισμένοι κατασκευαστές έχουν πρόσθετους περιορισμούς εφαρμογών που εξουδετερώνουν τις υπηρεσίες παρασκηνίου. Αυτός ο ιστότοπος έχει περισσότερες πληροφορίες για το πώς να το διορθώσετε. Η δημιουργία αντιγράφων ασφαλείας/επαναφορά ενδέχεται να μη λειτουργεί σωστά εάν είναι απενεργοποιημένη η Βελτιστοποίηση MIUI. Απόλυτα μαύρη σκοτεινή λειτουργία @@ -556,9 +502,8 @@ Γιν και Γιανγκ Tako Φράουλα Daiquiri - Υπηρεσίες που παρέχουν βελτιωμένες δυνατότητες για συγκεκριμένες πηγές. Οι καταχωρήσεις παρακολουθούνται αυτόματα όταν προστίθενται στη βιβλιοθήκη σας. - Αυτό το tracker είναι συμβατό μόνο με την πηγή Komga. - Βελτιωμένες υπηρεσίες + Παρέχει βελτιωμένες δυνατότητες για συγκεκριμένες πηγές. Οι καταχωρήσεις παρακολουθούνται αυτόματα όταν προστίθενται στη βιβλιοθήκη σας. + Ενισχυμένοι trackers Δυναμικό Δραστηριότητα παρασκηνίου Χαμηλότερη @@ -566,24 +511,16 @@ Ύψιστη Υψηλή Ευαισθησία για την απόκρυψη του μενού κατά την κύλιση - - Εχθές - %1$d μέρες πριν - Αντεστραμμένο - Μακρύ (Σύντομη+, n ημέρες πριν) - Σύντομη (Σήμερα, Χθες) - Σχετικές χρονικές σημάνσεις - Πρόσφατα Σήμερα Teal & Τιρκουάζ Έλεγχος ταυτότητας για επιβεβαίωση αλλαγής Προεπιλογή - Χρονικές ενδείξεις Εμφάνιση Παρακολούθηση Οδηγός για τα πρώτα βήματα Διεπαφή χρήστη tablet + Εξαιρούμενες κατηγορίες Βοηθήστε στη μετάφραση Πληροφορίες εφαρμογής Εγκαταστάτης @@ -596,7 +533,7 @@ Εκτύπωση λεπτομερών αρχείων καταγραφής στο αρχείο καταγραφής συστήματος (μειώνει την απόδοση της εφαρμογής) Γλώσσα Προειδοποίηση - Θα πρέπει να διατηρείτε αντίγραφα αντιγράφων ασφαλείας και σε άλλα μέρη. + Θα πρέπει να κρατάτε αντίγραφα αντιγράφων ασφαλείας και σε άλλα μέρη. Τα αντίγραφα ασφαλείας ενδέχεται να περιέχουν ευαίσθητα δεδομένα, συμπεριλαμβανομένων τυχόν αποθηκευμένων κωδικών πρόσβασης, να είστε προσεκτικοί αν τα μοιράζεστε. Οι μεγάλες ενημερώσεις βλάπτουν τις πηγές και μπορεί να οδηγήσουν σε πιο αργές ενημερώσεις και σε αυξημένη χρήση της μπαταρίας. Πατήστε για να μάθετε περισσότερα. Μόνο σε Wi-Fi Κάθε 3 ημέρες @@ -606,17 +543,15 @@ Τίποτα προς εκκαθάριση Απέτυχε η λήψη λίστας επεκτάσεων Πολιτική απορρήτου - Παράλειψη ενημέρωσης τίτλων + Παράλειψη ενημέρωσης καταχωρήσεων Για βοήθεια σχετικά με τον τρόπο διόρθωσης σφαλμάτων ενημέρωσης βιβλιοθήκης, ανατρέξτε στο %1$s Αποθήκευση ως αρχείο CBZ Ακυρώθηκε Σε αναστολή Η έκδοση ολοκληρώθηκε Συχνές ερωτήσεις και οδηγοί - 5% - Ζουμ οριζόντιας εικόνας + Αυτόματο ζουμ σε ευρείες εικόνες Πλέγμα μόνο με εξώφυλλα - Ξεκίνησε Που δεν έχουν ξεκινήσει Μετατόπιση πλατιών εικόνων Παραλείφθηκε επειδή η σειρά ολοκληρώθηκε @@ -627,7 +562,7 @@ Παραλήφθηκαν %1$d ενημέρωση(εις) παραλείφθηκε(-αν) Αντίστροφο πορτρέτο - Μετακίνηση σειράς στην κορυφή + Μετακίνηση σειράς προς τα πάνω Απενεργοποιημένο Μια νέα έκδοση είναι διαθέσιμη από τις επίσημες κυκλοφορίες. Πατήστε για να μάθετε πώς να μεταβείτε από ανεπίσημες κυκλοφορίες του F-Droid. Σφάλμα κατά την αποθήκευση της εικόνας @@ -636,9 +571,6 @@ Τα δεδομένα WebView διαγράφηκαν Διαγραφή δεδομένων WebView Κλείσιμο - Εμφάνιση διπλότυπων καρφιτσωμένων πηγών - Επανάληψη των καρφιτσωμένων πηγών στις αντίστοιχες γλωσσικές ομάδες τους - Όταν η μπαταρία δεν είναι χαμηλή Δε βρέθηκε εγκατεστημένη πηγή Αριθμός μη αναγνωσμένων Δε βρέθηκε πηγή @@ -679,13 +611,8 @@ Παλιρροϊκό κύμα Λήψη εκ των προτέρων Αυτόματη λήψη κατά την ανάγνωση - - Επόμενο αδιάβαστο κεφάλαιο - Επόμενα %d αδιάβαστα κεφάλαια - - Λειτουργεί μόνο σε καταχωρήσεις στη βιβλιοθήκη και αν το τρέχον κεφάλαιο και το επόμενο έχουν ήδη ληφθεί + Λειτουργεί μόνο εάν το τρέχον κεφάλαιο + το επόμενο έχουν ήδη ληφθεί. Είστε σίγουροι; - Διαχωρισμός ψηλών εικόνων (BETA) Πολλαπλό Δημοφιλή Τελευταία ενημέρωση βιβλιοθήκης: %s @@ -694,13 +621,12 @@ Παραλείφθηκε επειδή η σειρά δεν απαιτεί ενημερώσεις Αναζήτηση… Πηγές, επεκτάσεις, καθολική αναζήτηση - Προέκυψε ένα μη αναμενόμενο σφάλμα - Γλώσσα εφαρμογής, ειδοποιήσεις + Ουπς! Θέμα, μορφή ημερομηνίας και ώρας Κατηγορίες, καθολική ενημέρωση, σύρσιμο κεφαλαίου Λειτουργία ανάγνωσης, οθόνη, πλοήγηση Μονόδρομος συγχρονισμός προόδου, ενισχυμένος συγχρονισμός - Χειροκίνητα & αυτόματα αντίγραφα ασφαλείας + Χειροκίνητα & αυτόματα αντίγραφα ασφαλείας, χώρος αποθήκευσης Κλείδωμα εφαρμογής, ασφαλής οθόνη Επανεκκίνηση της εφαρμογής Αυτόματη λήψη, λήψη εκ των προτέρων @@ -715,7 +641,33 @@ \nΠατήστε για να μάθετε περισσότερα. Άνοιγμα τυχαίας καταχώρησης Δε βρέθηκαν καταχωρήσεις σε αυτή την κατηγορία -Ουρά λήψεων + Κατάργηση ημερομηνίας; + Αυτό θα καταργήσει την ημερομηνία λήξης που επιλέξατε προηγουμένως από το %s + Αυτό θα καταργήσει την ημερομηνία έναρξης που επιλέξατε προηγουμένως από το %s + Ακύρωση ευρετηρίου λήψεων + Στατιστικά + Τοπικό + Ξεκίνησε + Ολοκληρωμένες καταχωρήσεις + Διάρκεια ανάγνωσης + Σύνολο + Αναγνωσμένα + Ιχνηλάτες + Δ/Υ + %dημ + %dω + %dδ + Σε χρήση + %dλ + Σύνοψη + Καταχωρήσεις + Παρακολουθούμενες καταχωρήσεις + Μέση βαθμολογία + Κατεβασμένο + Σε καθολική ενημέρωση + Όχι τώρα + Η κατηγορία είναι άδεια + Αντιγράφηκε στο πρόχειρο Έχετε μια καταχώρηση στη βιβλιοθήκη σας με το ίδιο όνομα. \n \nΘέλετε να συνεχίσετε; @@ -723,20 +675,11 @@ Διαθέσιμο αλλά η πηγή δεν έχει εγκατασταθεί: %s %1$s σφάλμα: %2$s *απαιτούμενο - - Επόμενο κεφάλαιο - Επόμενα %d κεφάλαια - Απόκρυψη καταχωρήσεων που βρίσκονται ήδη στη βιβλιοθήκη Αντιγραφή στο πρόχειρο Ενημέρωση κατηγορίας Διαχωρισμός ψηλών εικόνων Επικάλυψη - - Λείπει %1$s κεφάλαιο - Λείπουν %1$s κεφάλαια - - Μπορεί να λείπουν κεφάλαια Περιστροφή πλατιών σελίδων για να χωρέσουν Αναστροφή του προσανατολισμού των πλατιών σελίδων που έχουν περιστραφεί Πληροφορίες εντοπισμού σφαλμάτων @@ -745,4 +688,56 @@ Ενέργεια συρσίματος προς τα αριστερά Ενέργεια συρσίματος προς τα δεξιά %d ανά σειρά - \ No newline at end of file + Ορισμός χρονικού διαστήματος + Προσαρμοσμένο διάστημα ανάκτησης + Dropped\? Αργά 20+ και 2 μήνες + Αργός έλεγχος 10+ + Πέρασε την περίοδο ελέγχου + Εκτός αναμενόμενης περιόδου κυκλοφορίας + Διαστήματα + Εκτίμηση κάθε + Ρύθμιση για ενημέρωση κάθε + Ανάκτηση μηνιαίως (28 ημέρες) + Επόμενη αναμενόμενη ενημέρωση + Προσαρμογή διαστήματος + Παραλείφθηκε επειδή δεν αναμενόταν κυκλοφορία σήμερα + Εντάξει + Κατάργηση παρακολούθησης %s; + Επίσης, αφαιρέστε από %s + Αυτό θα καταργήσει την παρακολούθηση τοπικά. + Διαγραφή ληφθέντων + Έχει αποτελέσματα + Συγχρονισμός βιβλιοθήκης + Ο συγχρονισμός βιβλιοθήκης ολοκληρώθηκε + Πατήστε εδώ για βοήθεια με το Cloudflare + Το ευρετήριο λήψεων ακυρώθηκε + Σύνδεση παρακολούθησης + Δεν ήταν δυνατή η δημιουργία αντιγράφου ασφαλείας + Αδειοδοτημένο - Δεν υπάρχουν κεφάλαια προς εμφάνιση + Δεν μπορούσε να φτάσει το %s + HTTP %d, ελέγξτε την ιστοσελίδα στο WebView + Δεν υπάρχει σύνδεση στο διαδίκτυο + Ξεκλείδωμα %s + Μετακίνηση σειράς προς τα κάτω + Σχετικές χρονικές σημάνσεις + \"%1$s\" αντί του \"%2$s\" + Ρυθμίσεις εφαρμογής + Ταξινόμηση κατηγοριών + Ενημέρωση βιβλιοθήκης… (%s) + Θέλετε να ταξινομήσετε τις κατηγορίες αλφαβητικά; + Ρυθμίσεις πηγών + Δεν έχει επιλεγεί αρχείο + Ποτέ + Μειώνει το ghosting σε οθόνες e-ink + Τελευταία αυτόματη δημιουργία αντιγράφων ασφαλείας: %s + Λευκό φλας κατά την αλλαγή σελίδας + Χρήση αποθηκευτικού χώρου + Σκορ tracker + Δεδομένα και χώρος αποθήκευσης + Δημιουργία + Υποβολή + Επαναφορά προεπιλογής + Δε βρέθηκαν scanlators + Scanlator + Εξαίρεση scanlator + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/eo/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/eo/plurals-aniyomi.xml new file mode 100644 index 0000000000..f910aea0bb --- /dev/null +++ b/i18n/src/commonMain/resources/MR/eo/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 new file mode 100644 index 0000000000..be5c82ed55 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/eo/plurals.xml @@ -0,0 +1,43 @@ + + + + Post 1 minuto + Post %1$s minutoj + + + %d kategorio + %d kategorioj + + + 1 ĉapitro + %1$s ĉapitroj + + + Ĉapitroj %1$s kaj 1 pli + Ĉapitroj %1$s kaj %2$d pli + + + 1 nova ĉapitro + %1$d novaj ĉapitroj + + + Por 1 titolo + Por %d titoloj + + + Mankas 1 ĉapitron + Mankas %d ĉapitrojn + + + 1 ŝanĝspurilo + %d ŝanĝspuriloj + + + 1 restas + %1$s restas + + + Farita en %1$s kun %2$s eraro + Farita en %1$s kun %2$s eraroj + + \ No newline at end of file diff --git a/i18n/src/main/res/values-eo/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/eo/strings-aniyomi.xml similarity index 57% rename from i18n/src/main/res/values-eo/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/eo/strings-aniyomi.xml index 5789f75787..57f9f9168c 100644 --- a/i18n/src/main/res/values-eo/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/eo/strings-aniyomi.xml @@ -15,32 +15,4 @@ Ankaŭ apliki al ĉiuj mangaoj en mia biblioteko Elŝutito paŭzigita Ĉapitraj ĝisdatigoj - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-eo/strings.xml b/i18n/src/commonMain/resources/MR/eo/strings.xml similarity index 88% rename from i18n/src/main/res/values-eo/strings.xml rename to i18n/src/commonMain/resources/MR/eo/strings.xml index 780d855c69..bf96ab5ef2 100644 --- a/i18n/src/main/res/values-eo/strings.xml +++ b/i18n/src/commonMain/resources/MR/eo/strings.xml @@ -48,14 +48,11 @@ Agordoj Historio Ĉapitroj - Mangao + Biblioteka kontribuoj + Kategorioj Via biblioteko malplenas Neniu legita laste Kaŝi enhavon de sciigoj - - Post 1 minuto - Post %1$s minutoj - Neniam Ĉiam Sekureco @@ -76,7 +73,6 @@ Instali Plej malnovaj Plej novaj - Reordigi Ordigi Nuligi ĉiujn Nuligi @@ -105,10 +101,6 @@ Ekskluzivi: %s Inkluzivi: %s Nenio - - %d kategorio - %d kategorioj - Ĉiam demandi Ĉiusemajne Ĉiutage @@ -133,20 +125,11 @@ Sekv\' Antaŭ\' Foliumi - - 1 ĉapitro - %1$s ĉapitroj - Elŝutitaj ĉapitroj En biblioteko Aldonita al biblioteko Aldoni al biblioteko Propra dosierujo - 25% - 20% - 15% - 10% - Neniu Legada Legada reĝimo Vid\' @@ -196,7 +179,6 @@ Montrado Montri en fontlisto kaj kromaĵlisto MPL/NSFW (18+) fontoj - Konfirmi eliron Ĝenerala Apo maldisponebla Restaŭro @@ -229,25 +211,12 @@ Elŝutada eraro Elŝutado finita Elŝutas… - Serĉas ĝisdatigojn… Neniu nova ĝisdatigo disponebla Elŝuti Elekti savkopian dosieron - - Ĉapitroj %1$s kaj 1 pli - Ĉapitroj %1$s kaj %2$d pli - Ĉapitroj %1$s Ĉapitro %1$s kaj %2$d pli Ĉapitro %1$s - - 1 nova ĉapitro - %1$d novaj ĉapitroj - - - Por 1 titolo - Por %d titoloj - Novaj ĉapitroj trovitaj Kopii Migri @@ -256,10 +225,6 @@ Viŝi historion Ĉap. %1$s - %2$s Ĝisdatigas bibliotekon - - Mankas 1 ĉapitron - Mankas %d ĉapitrojn - Fonto ne trovita Neniu paĝo trovita Ne estas antaŭa ĉapitro @@ -285,10 +250,6 @@ Finitaj Legata Aldoni ŝanospuron - - 1 ŝanĝspurilo - %d ŝanĝspuriloj - Ŝanĝspurado Neniu ĉapitro trovita Agordi kiel defaŭlta @@ -333,10 +294,6 @@ Ensalutita Ensaluti Ensaluti al %1$s - - 1 restas - %1$s restas - Nur elŝutitaj Ĝisdatigita al v%1$s Malfermitkodaj permesiloj @@ -354,13 +311,8 @@ Kreado de savkopio fiaskis Kreas savkopion Kion vi volas savkopii\? - - Farita en %1$s kun %2$s eraro - Farita en %1$s kun %2$s eraroj - %02d min, %02d sek Mankantaj fontoj: - Aŭtomataj savkopioj Aŭtomata elŝuto Laste legita ĉapitro Orientiĝa speco @@ -380,12 +332,6 @@ Malŝaltita Ŝaltita Elementoj vice - - Hieraŭ - Antaŭ %1$d tagoj - - Hodiaŭ - Laste Jino kaj Jango Verda pomo Apa etoso @@ -405,7 +351,6 @@ Vi havas neniun kategorion. Tuŝeti la butonon kun plus por krei unu por organizi vian bibliotekon. Kromaĵaj ĝisdatigoj Elŝutilo - Ĝisdatigas bibliotekon... (%1$d/%2$d) Kontrolas por trovi novajn ĉapitrojn Por ĉi-serion Propra filtrilo @@ -421,7 +366,6 @@ Nevalida ĉapitra formato Ĉapitro netrovita Loka fonta - Kontroli retejon en WebView Ĝisdatigi kategorion Kontroli por trovi ĝisdatigojn Helpu traduki @@ -438,14 +382,11 @@ Malfidinda kromaĵo Ŝarĝas Ŝlosi kiam senokupas - Relativaj tempindikoj - Tempindikoj Klara nigra Tako Meznokta Vesperiĝo Ŝargas… Nuligi ĉiujn por ĉi tiu serio - Premi «reen» denove por eliri Aŭtentigi por konfirmi ŝanĝon Rezignita restaŭro Restaŭro fiaskis @@ -456,18 +397,13 @@ Restaŭri savkopion Ŝanĝspuri Servoj - Kreas dosierujojn laŭ mangaaj titoloj Inversigi laŭtec-butonojn Inversigita Du-paĝa divido Ĉi tiu kromaĵo ne estas de la oficiala Tachiyomi kromaĵlisto. Atendantaj - Aktualigi ŝanĝspurilojn kiam ĝisdatigi bibliotekon - Aŭtomate aktualigi ŝanĝspurilojn Nur ĝisdatigi okazantaj mangaojn Limigoj: %s - Longa (Mallonga+, antaŭ n tagoj) - Mallonga (Hodiaŭ, Hieraŭ) Jotsuba Bluverda k verdblua Fraga Dajkŭiri @@ -479,7 +415,6 @@ Aktualigi limigojn Findato Komencdato - Aktualigi ŝanĝspuradon Ŝanĝspuriloj ne ensalutintaj al: Ŝanĝspurata Animi transpaso de paĝoj @@ -512,5 +447,10 @@ Kaŝi aplikaĵan enhavon kiam ŝaltumas aplikaĵojn kaj malebligi ekrankopion Statistiko Averto -Elŝutvico - \ No newline at end of file + Komenciĝis + Loka + Elŝutita + Meti intervalon + Personaligita intervalo de elŝutoj + Prenu ĉiumonate (28 tagoj) + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/es/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/es/plurals-aniyomi.xml new file mode 100644 index 0000000000..f8587687b4 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/es/plurals-aniyomi.xml @@ -0,0 +1,38 @@ + + + + Siguiente episodio sin ver + Siguientes %d episodios sin ver + Siguientes %d episodios sin ver + + + %1$s episodio + %1$s episodios + %1$s episodios + + + Para 1 título + Para %d títulos + Para %d títulos + + + 1 nuevo episodio + %1$d nuevos episodios + %1$d nuevos episodios + + + %d segundo + %d segundos + %d segundos + + + Episodios %1$s y 1 más + Episodios %1$s y %2$d más + Episodios %1$s y %2$d más + + + Siguiente episodio + Próximos %d episodios + Próximos %d episodios + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/es/plurals.xml b/i18n/src/commonMain/resources/MR/es/plurals.xml new file mode 100644 index 0000000000..6c760f9545 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/es/plurals.xml @@ -0,0 +1,83 @@ + + + + Tras %1$s minuto + Tras %1$s minutos + Tras %1$s minutos + + + %1$d nuevo capítulo + %1$d nuevos capítulos + %1$d nuevos capítulos + + + Capítulos %1$s y 1 más + Capítulos %1$s y %2$d más + Capítulos %1$s y %2$d más + + + Para %d título + Para %d títulos + Para %d títulos + + + Actualización de extensión disponible + %d actualizaciones de extensiones disponibles + %d actualizaciones de extensiones disponibles + + + Queda %1$s + Quedan %1$s + Quedan %1$s + + + %d categoría + %d categorías + %d categorías + + + Completada en %1$s con %2$s error + Completada en %1$s con %2$s errores + Completada en %1$s con %2$s errores + + + %1$s capítulo + %1$s capítulos + %1$s capítulos + + + %d servicio de seguimiento + %d servicios de seguimiento + %d servicios de seguimiento + + + Se omite %d capítulo, o bien falta en la fuente o ha sido filtrado + Se omiten %d capítulos, o bien faltan en la fuente o han sido filtrados + Se omiten %d capítulos, o bien faltan en la fuente o han sido filtrados + + + Ayer + Hace %1$d días + Hace %1$d días + + + El siguiente capítulo sin leer + Los siguientes %d capítulos sin leer + Los siguientes %d capítulos sin leer + + + El siguiente capítulo + Los siguientes %d capítulos + Los siguientes %d capítulos + + + Falta %1$s capítulo + Faltan %1$s capítulos + Faltan %1$s capítulos + + + Un día + %d días + %d días + + \ No newline at end of file diff --git a/i18n/src/main/res/values-es/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/es/strings-aniyomi.xml similarity index 93% rename from i18n/src/main/res/values-es/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/es/strings-aniyomi.xml index 4ad7834b85..48ca69f67d 100644 --- a/i18n/src/main/res/values-es/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/es/strings-aniyomi.xml @@ -105,11 +105,6 @@ Preferencia para el administrador de descargas Descargar nuevos episodios Descarga automática mientras se reproduce - - Siguiente episodio sin ver - Siguientes %d episodios sin ver - Siguientes %d episodios sin ver - Solo funciona en elementos de la biblioteca y si el episodio actual más el siguiente ya están descargados Actualizar progreso al terminar de leer/ver Abrir menú de seguimiento al agregar a la biblioteca @@ -132,11 +127,6 @@ Episodio no encontrado Formato de episodio no válido Estudio desconocido - - %1$s episodio - %1$s episodios - %1$s episodios - ¿Borrar episodios descargados\? ¿Añadir manga a la biblioteca\? ¿Agregar anime a la biblioteca\? @@ -178,16 +168,6 @@ Advertencia: Las descargas grandes pueden llevar a que las fuentes se vuelvan cada vez más lentas y en casos extremos que los servidores limiten o impidan el acceso a Tachiyomi. Toca aquí para más información. No se encontró ningún vídeo Nuevos episodios encontrados - - Para 1 título - Para %d títulos - Para %d títulos - - - 1 nuevo episodio - %1$d nuevos episodios - %1$d nuevos episodios - No he visto nada recientemente Tachiyomi necesita WebView Actualizados los ajustes por defecto de los episodios @@ -195,11 +175,6 @@ Descarga del episodio en pausa Nuevos episodios y capítulos +%1$d s - - %d segundo - %d segundos - %d segundos - ¡Próximo episodio no encontrado! Manga Anime @@ -242,11 +217,6 @@ Episodio %1$s Episodio %1$s y %2$d más Episodios %1$s - - Episodios %1$s y 1 más - Episodios %1$s y %2$d más - Episodios %1$s y %2$d más - Ajustes del episodio Opciones de la copia de seguridad Extensiones del manga @@ -274,11 +244,6 @@ Habilitar el uso del modo PiP Ocultar las entradas del manga que ya están en la biblioteca Ocultar las entradas del anime que ya están en la biblioteca - - Siguiente episodio - Próximos %d episodios - Próximos %d episodios - Enlace de calidad del video copiado al portapapeles Elige la calidad del vídeo: Configuración de las extensiones diff --git a/i18n/src/main/res/values-es/strings.xml b/i18n/src/commonMain/resources/MR/es/strings.xml similarity index 82% rename from i18n/src/main/res/values-es/strings.xml rename to i18n/src/commonMain/resources/MR/es/strings.xml index 0dac18e44e..55564e6493 100644 --- a/i18n/src/main/res/values-es/strings.xml +++ b/i18n/src/commonMain/resources/MR/es/strings.xml @@ -1,16 +1,14 @@ Nombre - Ajustes + Cola de descargas Biblioteca Historial Actualizaciones Copia de seguridad y restauración - Ajustes Filtrar - Descargados Sin leer Quitar filtro Buscar @@ -38,17 +36,13 @@ Cancelar Ordenar Instalar - Cargando… - - General Lector Descargas Seguimiento Avanzado Acerca de - Tamaño de cuadrícula En vertical En horizontal @@ -60,7 +54,7 @@ Cada 2 días Restricciones de actualización automática del dispositivo Mientras se carga la batería - Series completadas + Marcadas como completadas Pantalla completa Transiciones de página animadas Mostrar el número de página @@ -72,9 +66,9 @@ Blanco Negro Sentido de lectura normal - Por páginas; de izquierda a derecha - Páginas (de derecha a izquierda) - Por páginas; vertical + Por páginas (de izquierda a derecha) + Por páginas (de derecha a izquierda) + Por páginas, de arriba abajo Tira vertical continua Método de ampliación Ajustar al tamaño de pantalla @@ -92,42 +86,34 @@ Cualquier dirección Forzar en vertical Forzar en horizontal - Carpeta de descarga Ubicación personalizada - - - Servicios - + Servicios de seguimiento Usado: %1$s Se vació la caché. Se han eliminado %1$d archivos Se produjo un error al limpiar Borrar cookies Cookies borradas + Borrar la base de datos + Borrar el historial de los elementos que no estén guardados en tu biblioteca Entradas eliminadas - Versión - Enviar informes de fallos Ayuda a corregir cualquier error. No se enviará ninguna información personal - Iniciar sesión en %1$s Nombre de usuario Contraseña Iniciar sesión Conectado Error desconocido - Actualizando categoría - - En publicación Desconocido Con licencia Eliminar de biblioteca - Capítulo %1$s Descargando (%1$d/%2$d) + Error Título de la fuente Número de capítulo Por fuente @@ -136,7 +122,6 @@ Descargar Sin leer ¿Seguro que quieres eliminar los capítulos seleccionados\? - Leyendo Completado Abandonado @@ -146,41 +131,30 @@ Título Estado Capítulos - Esto eliminará la fecha de lectura de este capítulo. ¿Estás seguro? Pág: %1$d Siguiente capítulo no encontrado No se pudo cargar la imagen - - - No se pudieron descargar los capítulos. Puedes volver a intentarlo en la sección de descargas - Nuevos capítulos encontrados Primero tienes que añadir el manga a tu biblioteca - Elige una imagen de portada Elige una copia de respaldo - Descargar No hay nuevas actualizaciones disponibles - Buscando actualizaciones… - Descargando… Toca aquí para instalar la actualización Error de descarga ¡Nueva versión disponible! - - No hay descargas No hay actualizaciones recientes No has leído nada últimamente Tu biblioteca está vacía - Error No se ha podido descargar el capítulo debido a un error inesperado No estás conectado a ninguna red Wi-Fi - Manga + Categorías + Entradas en la biblioteca Seguimiento Historial Favoritos @@ -191,6 +165,7 @@ Quitar como favorito Añadir No hay conexión de red disponible + Descarga pausada ¿Usar esta imagen como portada\? Apariencia Cuadrícula compacta @@ -204,6 +179,7 @@ Aplicación no disponible Semanales Todos + Categoría predeterminada Preguntar siempre Recortar bordes Filtro de color personalizado @@ -224,21 +200,21 @@ Restaurar copia de seguridad Restaurar la biblioteca a partir de una copia de seguridad Ubicación de la copia de respaldo - Copias de seguridad automáticas - Frecuencia de respaldo - Copias de seguridad máximas + Frecuencia de la copia de seguridad automática + Copias de seguridad automáticas máximas Copia de seguridad creada Restauración completada ¿De qué quieres hacer una copia de seguridad\? Restaurando copia de seguridad Creando copia de seguridad - Descargar datos actualizados de seguimiento No hay más resultados Fuente local ¿Eliminar los capítulos descargados\? + Pausado Seguimiento ¡Ya existe una categoría con este nombre! Categorías eliminadas + ¿Añadir manga a la biblioteca\? Imagen guardada Filtro personalizado Establecer como cubierta @@ -247,7 +223,6 @@ Descargador Búsqueda global Capítulos descargados - Local Otros Búsqueda global… Recientes @@ -283,7 +258,6 @@ Fuente no instalada: %1$s Releyendo Estado - Empezado Tipo Finalizado: Actual: @@ -291,7 +265,7 @@ Error al cargar páginas: %1$s Seleccionar datos para incluir Velocidad de animación de doble toque - Paginado + Por páginas Menú de pulsación prolongada Abrir en WebView Saltar capítulos leídos @@ -331,31 +305,17 @@ Bloquear por inactividad Siempre Nunca - - Tras %1$s minuto - Tras %1$s minutos - Tras %1$s minutos - Pantalla segura Actualizaciones pendientes Mostrar contenido en el área recortada Fallo al evitar Cloudflare Actualiza la aplicación WebView para mejorar la compatibilidad + Nuevos capítulos Pantalla segura oculta el contenido al cambiar de aplicación y bloquea las capturas de pantalla Visualización - - %1$d nuevo capítulo - %1$d nuevos capítulos - %1$d nuevos capítulos - Capítulo %1$s Capítulo %1$s y %2$d más Capítulos %1$s - - Capítulos %1$s y 1 más - Capítulos %1$s y %2$d más - Capítulos %1$s y %2$d más - Ocultar el contenido de las notificaciones Buscando nuevos capítulos Desactivar la optimización de batería @@ -363,48 +323,29 @@ Mejora la cadencia de las actualizaciones y las copias de respaldo que se hagan en segundo plano La optimización de la batería ya está desactivada Hacer transición entre capítulos - - Para %d título - Para %d títulos - Para %d títulos - Menú - Reordenar Lo más nuevo Lo más antiguo Mover al principio Mover al final - - Actualización de extensión disponible - %d actualizaciones de extensiones disponibles - %d actualizaciones de extensiones disponibles - Actualizando biblioteca - Abrir sitio en WebView Actualizaciones de extensiones Saltar capítulos excluidos por filtros Lectura Fuentes Invertir selección Tira vertical discontinua - 25% - 20% - 15% - 10% - Ninguno Espaciado lateral Ancladas Desanclar Anclar Añadir seguimiento En biblioteca - Añadir a biblioteca + Añadir a la biblioteca Menos Más Licencias de código abierto Página web - Confirmar salida - Pulsa atrás de nuevo para salir Sólo ya descargados Caps. %1$s-%2$s Se ha cancelado la restauración @@ -416,37 +357,21 @@ Usado recientemente Buscar actualizaciones Guía de fuente local - - Queda %1$s - Quedan %1$s - Quedan %1$s - Filtra todos los elementos de tu biblioteca para ver solo los que estén disponibles sin conexión - Solo incluir fuentes ancladas en la búsqueda global Modo de lectura Para esta serie Gris Reduce el efecto anillado en los degradados y mejora la calidad de los grises, pero puede afectar al rendimiento - - %d categoría - %d categorías - %d categorías - No se pudieron abrir los ajustes del dispositivo Volver a descargar las portadas en la biblioteca - - Completada en %1$s con %2$s error - Completada en %1$s con %2$s errores - Completada en %1$s con %2$s errores - La sincronización de estos servicios solo funciona en un solo sentido. Cada elemento en tu biblioteca tiene un botón de seguimiento y tendrás que configurarlo a mano, uno a uno. - Esta extensión no es de la lista oficial de extensiones de Tachiyomi. + Esta extensión no es de la lista oficial de extensiones. No oficial Datos Fuentes que faltan: - La copia de seguridad no contiene ningún elemento de la biblioteca. + La copia de seguridad no contiene ningun elemento; la biblioteca está vacía. El archivo de copia de respaldo no es correcto - Comprobar si hay una nueva portada y detalles al actualizar la biblioteca + Comprueba si hay una nueva portada, información y descripción al actualizar la biblioteca Actualizar automáticamente los metadatos Cuadrícula amplia Migrar @@ -459,14 +384,9 @@ Mostrar modo de lectura Empezar No se ha encontrado la fuente - - %1$s capítulo - %1$s capítulos - %1$s capítulos - Desactivar Es necesario reiniciar la aplicación para que surja efecto - Red + Networking Estado desconocido Ambos Vertical @@ -480,13 +400,7 @@ Modo de lectura Tema de colores Por fecha en la biblioteca - - %d servicio de seguimiento - %d servicios de seguimiento - %d servicios de seguimiento - Todavía no has anclado ninguna fuente - Descarga completada Terminadas En progreso Con errores @@ -494,11 +408,6 @@ Puede contener contenido para adultos (+18) 18+ Esto no evita que las extensiones extraoficiales o que estén mal clasificadas muestren contenido para mayores de 18 años en la aplicación. - - Se omite %d capítulo, o bien falta en la fuente o ha sido filtrado - Se omiten %d capítulos, o bien faltan en la fuente o han sido filtrados - Se omiten %d capítulos, o bien faltan en la fuente o han sido filtrados - No hay capítulos Se han actualizado los ajustes predeterminados de capítulo Establecer como predeterminado @@ -522,7 +431,7 @@ Fecha de finalización Fecha de inicio Guarda los registros de errores en un archivo para compartirlos con los desarrolladores - Volcar registros de fallos + Compartir los registros de fallos Zonas de toque Borde En forma de L @@ -538,7 +447,7 @@ Esta versión de Android ya no es compatible No se pudo copiar al portapapeles DNS por HTTPS (DoH) - El manga de las categorías excluidas no se descargará, ni siquiera si pertenece a alguna de las categorías que sí estén incluidas. + Los elementos de las categorías excluidas no se descargarán, ni siquiera si pertenecen a alguna de las categorías que sí estén incluidas. Descarga automática En horizontal En vertical @@ -554,12 +463,13 @@ Excluir: %s Incluir: %s Ninguna + Los elementos de las categorías excluidas no se actualizarán, ni siquiera si pertenecen a alguna de las categorías que sí estén incluidas. Toca para ver los detalles del error Mostrar el número de elementos Fecha de obtención del capítulo Tipo de rotación - Crea carpetas según el título de los elementos - Guardar páginas en carpetas separadas + Crea carpetas según el título de las entradas + Guardar las páginas en carpetas independientes Acciones Escala de grises Es posible que las funciones de copia de respaldo y restauración no funcionen correctamente si la opción «Optimización de MIUI» está desactivada. @@ -575,13 +485,12 @@ Tema de la aplicación Empezar a descargar ahora Cancelar todo para esta serie + Fuente local Algunos fabricantes tienen restricciones adicionales para aplicaciones que detienen los servicios en segundo plano. Esta página web tiene más información sobre cómo solucionarlo. Todavía no existen categorías. - Actualizando biblioteca… (%1$d/%2$d) No se han encontrado coincidencias Fuente no soportada Sin leer - Este servicio de seguimiento sólo es compatible con la fuente Komga. Error al compartir portada Error al guardar portada Portada guardada @@ -591,15 +500,13 @@ El formato del capítulo no es correcto No se ha encontrado el capítulo Desactivar el modo incógnito - Servicios que ofrecen funciones mejoradas para ciertas fuentes. Se hace un seguimiento automático de los elementos al añadirlos a la biblioteca. - Servicios mejorados + Ofrece funciones mejoradas para ciertas fuentes. Se hace un seguimiento automático de los elementos al añadirlos a la biblioteca. + Servicios de seguimiento mejorados Guía de seguimiento Automático No - Ajustes propios de ordenar y mostrar para cada categoría - Actualizar los servicios de seguimiento al actualizar la biblioteca - Actualizar automáticamente los servicios de seguimiento + Establecer el tipo de orden para cada categoría Actividad en segundo plano Seguir Guía de introducción @@ -610,21 +517,12 @@ Más alta Sensibilidad para ocultar automáticamente el menú al desplazarse Invertido - - Ayer - Hace %1$d días - Hace %1$d días - Hoy - Recientemente - Largas (Cortas+, hace X días) - Cortas (Hoy, ayer) - Marcas de tiempo relativas - Marcas de tiempo Azul marino y turquesa Apariencia Identifícate para confirmar el cambio Predeterminado + Categorías excluidas Ayudar a traducir Número total de elementos Instalador @@ -638,13 +536,13 @@ Advertencia Las actualizaciones grandes pueden implicar un mayor uso de la batería y que los distintos servicios bloqueen o ralenticen el acceso a tu dispositivo. Toca aquí para más información. Idioma - Es una buena idea tener copias de respaldo fuera de tu dispositivo. + También deberías guardar las copias de seguridad en otros lugares. Las copias de seguridad pueden contener datos confidenciales, incluidas las contraseñas almacenadas. Solo con Wi-Fi Cada 3 días Actualizar todas Actualizaciones de la aplicación Base de datos limpia - Hay %1$d elementos en la base de datos que no están en la biblioteca + %1$d entradas que no pertenecen a la biblioteca en la base de datos No se pudo descargar el listado de extensiones Política de privacidad Omitir actualizaciones @@ -654,13 +552,11 @@ Serie terminada Cancelada Guías y soluciones - 5% Desplazarse por el resto de la página antes de cambiar Cuadrícula sólo de portadas Acercar la vista en horizontal - Empezados - Series sin empezar - Omitido porque la serie está completa + Sin empezar + Omitido, ya que su publicación ha terminado Omitido porque hay capítulos sin leer Omitido porque no hay capítulos leídos Ver más detalles @@ -677,9 +573,6 @@ Se han limpiado los datos del WebView Limpiar datos del WebView Cerrar - Repetir fuentes ancladas en sus respectivos grupos de idiomas - Mostrar fuentes duplicadas ancladas - Cuando la batería tenga suficiente carga Todavía no se ha instalado ninguna fuente No se ha encontrado ninguna fuente Capítulos restantes @@ -713,40 +606,33 @@ Restablecer el nombre del navegador («user agent») Quitar todo La app no soporta el formato RARv5 - Ver el manga actualizado de forma reciente + Aquí aparecerá el contenido más reciente de tu biblioteca El widget no está disponible cuando el bloqueo de aplicación está activo Ya se está actualizando Marea La cadena con el agente de usuario no puede estar vacía - Solo funciona con elementos que ya estén en tu biblioteca y si el capítulo actual y el que va después ya están descargados + Solo funciona si el capítulo actual y el que va después ya están descargados. Descargar por adelantado Descarga los capítulos siguientes mientras lees - - El siguiente capítulo sin leer - Los siguientes %d capítulos sin leer - Los siguientes %d capítulos sin leer - ¿Estás seguro\? - Separar imágenes más altas que anchas (en desarrollo) La biblioteca se actualizó: %s Estás a punto de borrar «%s» de tu biblioteca - Popular - Multi + Populares + Varios idiomas No se han concedido los permisos de almacenamiento - Saltando, porque este manga no necesita actualizarse + Omitido, ya que no es necesario actualizarse Buscar… Sincroniza tu progreso de lectura; unidireccional o mejorada Descargas automáticas y por adelantado Categorías, actualizaciones generales y acciones al deslizar el dedo %s se ha cerrado por un problema inesperado. Te sugerimos que compartas todos tus registros de depuración, enviándolos a nuestro canal de apoyo en Discord, en inglés. Modos de lectura, apariencia y navegación - Idioma de la interfaz y notificaciones Temas de colores y formatos de fecha Volcar datos del cuelgue y estado de ahorro de batería Pantalla segura y desbloqueo biométrico - Copias de seguridad manuales y automáticas + Copias de seguridad manuales y automáticas, y el espacio de almacenamiento Fuentes, extensiones y búsqueda global - Tenemos un problema + ¡Vaya! Reiniciar la aplicación Título desconocido Ubicación incorrecta: %s @@ -754,39 +640,106 @@ El nombre de agente de usuario no vale Reindexando descargas Abrir un elemento al azar - No se ha encontrado ningún manga en esta categoría - No damos soporte oficial a las versiones de F-Droid. + Parece que esta categoría está vacía + No damos soporte oficial a las versiones de F-Droid. \nToca para más información. - Cola de descargas + Al hacer esto %s ya no aparecerá como empezado ese día + ¿Quieres quitar esta fecha\? + Al hacer esto %s ya no aparecerá como terminado ese día + Reconstruir el índice de descargas + Empezados + En el dispositivo + Manga completado + Tiempo de lectura + Leídos + Con seguimiento + En total + Actualizados de forma global + Puntuación media + %dd + %dh + %dm + En uso + No disponible + Manga en servicios de seguimiento + Descargados + Estadísticas + Resumen + Manga + %ds + Ahora no + La categoría está vacía + Se ha copiado al portapapeles Saltarse los capítulos repetidos Está disponible, pero la fuente todavía no se ha instalado: %s Ya tienes un elemento en la biblioteca con este mismo nombre. - \n +\n \n¿Seguro que quieres continuar\? %1$s error: %2$s *necesaria - - El siguiente capítulo - Los siguientes %d capítulos - Los siguientes %d capítulos - Saltar elementos que ya estén en la biblioteca Copiar al portapapeles Actualizar categoría Dividir las imágenes altas Superposición - - Falta %1$s capítulo - Faltan %1$s capítulos - Faltan %1$s capítulos - Girar las páginas anchas para adaptarlas a la pantalla - Puede que le falte algún capítulo Girar las páginas anchas en la dirección opuesta - Información de depuración + Información sobre la depuración Deslizamiento de dedo en capítulos Deslizar a la izquierda Deslizar a la derecha Ampliar tocando dos veces la pantalla %d por fila - \ No newline at end of file + Tras 10 o más días + Próxima actualización prevista + Fuera del período de publicación esperado + Intervalos + Ha pasado el período de comprobación + Estimar cada + Personalizar intervalo + ¿Abandonado\? Tras más de 20 días y 2 meses + Forzar actualización cada + No se ha comprobado ninguna actualización hoy al no esperar ningún cambio + Establecer intervalo + Intervalo de descarga personalizado + Comprobar de forma mensual (28 días) + Aceptar + ¿Quitar el rastreo de %s\? + Esto eliminará el seguimiento localmente. + Quitar también de %s + Borrar los ya descargados + Con resultados + La biblioteca se ha sincronizado correctamente + Sincronizando la biblioteca + Toca aquí para solucionar problemas de acceso con Cloudflare + Se ha borrado el índice de descargas + Iniciar sesión en el servicio + No se ha podido crear un archivo de respaldo + Con licencia oficial, sin capítulos que mostrar + No se ha podido acceder a %s + HTTP %d, comprueba la página web en WebView + Sin conexión a Internet + Desbloquear %s + Mover al último puesto + Marcas de tiempo relativas + «%1$s» en vez de «%2$s» + Actualizando biblioteca... (%s) + Ajustes de la fuente + Ajustes de la aplicación + Ordenar categorías + ¿Quieres ordenar las categorías de forma alfabética\? + Ningún archivo seleccionado + Nunca + Reducir el ghosting en las pantallas de tinta electrónica + Última copia de seguridad automática: %s + Parpadeo en blanco al cambiar de página + Datos y almacenamiento + Almacenamiento utilizado + Puntuación del rastreador + Aplicar + Volver a la configuración predeterminada + Crear + Sin ningún scanlators + Scanlator + Omitir a los scanlators + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/eu/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/eu/plurals-aniyomi.xml new file mode 100644 index 0000000000..9cd8b2a93c --- /dev/null +++ b/i18n/src/commonMain/resources/MR/eu/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/eu/plurals.xml b/i18n/src/commonMain/resources/MR/eu/plurals.xml new file mode 100644 index 0000000000..d510178849 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/eu/plurals.xml @@ -0,0 +1,51 @@ + + + + %1$s-n egin da errore %2$s-ekin + %1$s-n egin da %2$s errorerekin + + + Atzo + Duela %1$d egun + + + Minutu baten ostean + %1$s minuturen ostean + + + Kapitulu bat saltatzen, iturria falta da edo iragazia izan da + %d kapitulu saltatzen, iturria falta da edo iragaziak izan dira + + + Titulu baterako + %d titulurako + + + 1 geratzen da + %1$s geratzen dira + + + kategoria %d + %d kategoria + + + kapitulu 1 + %1$s kapitulu + + + jarraitzaile 1 + %d jarraitzaile + + + Kapitulu berri bat + %1$d kapitulu berri + + + Luzapen baten eguneraketa eskuragarri + %d luzapenen eguneraketak eskuragarri + + + %1$s kapituluak eta bat gehiago + %1$s kapituluak eta %2$d gehiago + + \ No newline at end of file diff --git a/i18n/src/main/res/values-eu/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/eu/strings-aniyomi.xml similarity index 79% rename from i18n/src/main/res/values-eu/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/eu/strings-aniyomi.xml index 8f359062d6..e06b21447a 100644 --- a/i18n/src/main/res/values-eu/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/eu/strings-aniyomi.xml @@ -37,32 +37,4 @@ WebView beharrezkoa da Tachiyomi-rentzat Deskarga pausatu da Kapituluaren eguneraketak - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-eu/strings.xml b/i18n/src/commonMain/resources/MR/eu/strings.xml similarity index 89% rename from i18n/src/main/res/values-eu/strings.xml rename to i18n/src/commonMain/resources/MR/eu/strings.xml index 441fda15a4..834f445068 100644 --- a/i18n/src/main/res/values-eu/strings.xml +++ b/i18n/src/commonMain/resources/MR/eu/strings.xml @@ -10,9 +10,11 @@ Hasiberrientzako gida Manga Kapituluak + Kategoriak Izena Historiala Blokeatu geldi geratzean + Kategoria lehentsia Lizentziatua Kapitulua ez da aurkitu Kargatzen… @@ -20,12 +22,7 @@ Titulua Bukatua Irakurri gabea - %25 L formakoa - Ezer ez - %10 - %15 - %20 Kindle erakoa Egde erakoa Ezkerra eta eskuma @@ -58,10 +55,6 @@ Instalatu eta abiarazi Shizuku luzapen instalatzaile gisa erabiltzeko. Shizuku ez dago martxan Berreskuratu egin da - - %1$s-n egin da errore %2$s-ekin - %1$s-n egin da %2$s errorerekin - Cookieak garbitu dira Alde batera utzia Egoera @@ -77,6 +70,7 @@ Laguntza Gehiago Ezarpenak + Deskarga-ilara Liburutegia Eguneraketak Historiala @@ -152,6 +146,7 @@ Deskargatutako kapituluak ezabatu nahi dituzu\? Arbelean kopiatu da: \n%1$s + Gelditurik Kapituluaren zenbakia Irakurri gabea Azala @@ -166,7 +161,6 @@ Ez dira orrialderik aurkitu Ez da iturria aurkitu Deskargatu - Eguneraketak bilatzen… Deskarga bukatua Errorea Ondare @@ -189,21 +183,15 @@ Ez dago aurreko kapitulurik Kopiatu Android bertsio hau jada ez da onartzen - - Atzo - Duela %1$d egun - Zaharkitua Desinstalatu Erakutsi orrialdearen zenbakia - Freskatu jarraipena Liburutegian Gehiago %1$s Kapitulua Kapituluaren ezarpenak Egoera Mota - Hasia Iragazki pertsonalizatua Kategoriak ezabatuak Hautatu azaleko irudia @@ -213,6 +201,7 @@ Deskargatzailea Ezin izan da kapitulua deskargatu ustekabeko errore baten ondorioz Ez dago sare-konexiorik erabilgarri + Kapituluaren eguneraketak Aplikazioen eguneraketak Hurrengo orrialdea Luzapenen eguneraketak @@ -252,10 +241,6 @@ Beltza Hurrengoa Orrikaldekatua - - Minutu baten ostean - %1$s minuturen ostean - Automatikoa Sakaketa bikoitzaren animazioaren abiadura Automatikoa @@ -279,18 +264,19 @@ Animaziorik ez Irakurketa modua Sarea + Baztertutako kategoriak Azkenaurreko irakurritako kapitulua Atzetik hasita bosgarren irakurritako kapitulua Deskarga automatikoa + Garbitu datu-basea Erroreen erregistroak fitxategi batean gordetzen ditu garatzaileekin partekatzeko Kategoria eguneratzen - Lokala Fitxak Kapitulu zenbakiaren arabera Igoera dataren arabera Irudi hau azaleko arte gisa erabili\? - Liburutegia eguneratzen… (%1$d/%2$d) Eguneratze handiek bateriaren erabilera areagotzea eta iturriak motelagoak izatea eragin dezakete + Deskarga pausatu da Baxua Baxuena Deskargatu kapitulu berriak @@ -331,16 +317,10 @@ Honi buruz Gaia Sortu erroreen erregistroak - - Kapitulu bat saltatzen, iturria falta da edo iragazia izan da - %d kapitulu saltatzen, iturria falta da edo iragaziak izan dira - %1$s Kapitulua %1$s Kapituluak Mantendu pantaila piztuta Saltatu irakurriak bezala markatutako kapituluak - Gorde orrialdeak karpeta ezberdinetan - Sortu karpetak manga izenburuaren arabera Altua Saltatu iragazitako kapituluak Bolumen-teklak @@ -351,12 +331,13 @@ \n \nFalta diren luzapenak instalatu eta jarraipen-zerbitzuetan saioa hasi beharko duzu ondoren horiek erabiltzeko. Deskargatzen (%1$d/%2$d) + Errorea Liburutegitik kendua Gutxiago Iturria ez dago instalatuta: %1$s + Manga liburutegira gehitu\? Hautatu babeskopia fitxategia Ezin izan da azala eguneratu - Deskarga bukatua Saltatu eguneraketak Gehiketa data Bilatu @@ -399,7 +380,6 @@ Ezeztatu Utzi guztiak alde batera Ordenatu - Berrantolatu Igoera dataren arabera Kapitulu zenbakiaren arabera Sistemarena erabili @@ -408,10 +388,7 @@ Aplikazioaren gaia Dinamikoa Sagar Berdea - Laburra (Gaur, Atzo) - Luzea (Laburra+, duela n egun) Dataren formatua - Berretsi irteera Kudeatu jakinarazpenak Segurtasuna Beti @@ -419,7 +396,6 @@ NSFW (18+) iturriak Erakutsi iturrien eta luzapenen zerrendetan Honek ez du eragozten ofizialak ez diren edo oker markatutako luzapenek NSFW (18+) edukia aplikazioan erakustea. - Duela gutxi Gaur Bistaratu Errenkada bakoitzeko elementu kopurua @@ -427,7 +403,6 @@ Eguneratze automatikoak Sartu: %s G - Ikusi webgunea WebView-n Besteak Bilaketa globala… Historia ezabatu da @@ -459,21 +434,17 @@ B A Altuena - Sartu ainguratutako iturriak soilik Babeskopia erabili Berreskuratu liburutegia babeskopia fitxategitik Babeskopiaren kokapena - Babeskopia automatikoak Babeskopien maiztasuna Gehienezko babeskopiak Alfabetikoki Oharra Autentifikatu aldaketa berresteko - Sakatu atzera berriro irteteko Ezarpenak Menua Iragazi - Deskargatuak Orri-markatzailea jarria Jarraitua Irakurri gabea @@ -512,8 +483,6 @@ Yin eta Yang Yotsuba Beltz hutseko modu iluna - Denbora-zigiluak - Denbora-zigilu erlatiboak Itzali 6 orduro 12 orduro @@ -536,15 +505,9 @@ Mugaketak: %s Argitalpen bukatua al da Freskatu metadatuak automatikoki - Freskatu jarraitzaileak automatikoki - Eguneratu jarraitzaileak liburutegia eguneratzean Babeskopiak ez du mangarik. Jarraipena Berrirakurtzen - - Titulu baterako - %d titulurako - Erakutsi erabilitako irakurketa modua laburki irakurlea irekitzen denean Jarraipen gida Jarraitu @@ -552,42 +515,18 @@ Atzeko planoko ekintzak Liburutegiaren eguneraketak eta babeskopiak atzeko planoan egiten laguntzen du Ezin izan dira gailuaren ezarpenak ireki - - 1 geratzen da - %1$s geratzen dira - Ordenatu honen arabera - - kategoria %d - %d kategoria - - - kapitulu 1 - %1$s kapitulu - Eguneraketak egiteke Erakutsi edukia eremu ebakian - - jarraitzaile 1 - %d jarraitzaile - Ezin izan dira kapituluak deskargatu. Berriro saia zaitezke deskargen atalean - - Kapitulu berri bat - %1$d kapitulu berri - Gorde CBZ artxibo gisa Eguneratu liburutegiko manga azalak Tablet interfazea %1$s: %2$s, %3$d orrialdea Oraindik ez duzu kategoriarik sortu. - - Luzapen baten eguneraketa eskuragarri - %d luzapenen eguneraketak eskuragarri - Ezin izan da luzapenen zerrenda lortu Bilatu azal eta xehetasun berriak liburutegia eguneratzean - Jarraitzaile hau Komga iturriarekin bakarrik da bateragarria. + Baztertutako kategorietako mangak ez dira eguneratuko, sarturiko kategorietan egon arren. Pantaila mugitzean menua ezkutatzeko sentikortasuna Liburutegian ez dauden %1$d manga datubasean Erregistroaren bertsio luzea @@ -598,34 +537,39 @@ Bertan behera utzia Etenaldian Liburutegi eguneraketen akatsak nola konpondu jakiteko, ikusi %1$s - - %1$s kapituluak eta bat gehiago - %1$s kapituluak eta %2$d gehiago - + Manga lokala %1$s kapitulua eta %2$d gehiago Norabide bakarreko sinkronizazioa jarraipen-zerbitzuetan kapituluaren aurrerapena eguneratzeko. Konfiguratu manga bakoitzaren jarraipena haien jarraipen botoia erabilita. Nabigazio-diseinuaren geruza erakutsi Erakutsi ukipen-zonak irakurgailua irekitzen denean Iturri zehatzetarako ezaugarri hobetuak eskaintzen dituzten zerbitzuak. Mangen jarraipena automatikoki egiten da zure liburutegira gehitzen direnean. + Ezabatu zure liburutegian gordeta ez dauden mangen historia Argitarapena amaitua Orrialde biko zatiketa Alderantzikatu orrialde bikoitzeko zatiketa Orrialde bikoitzeko zatiketaren kokapena irakurketa noranzkoarekin bat ez badator Eguneraketa automatikoentzako gailuaren murrizketak Ohiko galderak eta gidak - %5 Saltatu egin da irakurri gabeko kapituluak daudelako Kapitulurik irakurri gabe Saltatu egin da seriea bukatua dagoelako Saltatua ez daudelako irakurritako kapitulurik - Hasia Bertsioa Multi Ezabatu kategoria Itxi App hizkuntza - Bateria baxu ez dagoenean Hizkuntza Bilatu… -Deskarga-ilara - \ No newline at end of file + \"%s\" kategoria ezabatu nahi duzu\? + Guztia kendu + Estatistikak + Hasia + Lokala + Deskargatuak + Jaso hilabetero (28 egun) + Kopiatu arbelera + Orain ez + Ezabatu deskargatuak + %d ilara bakoitzeko + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/fa/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/fa/plurals-aniyomi.xml new file mode 100644 index 0000000000..58bef3219c --- /dev/null +++ b/i18n/src/commonMain/resources/MR/fa/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + 1 قسمت جدید + %1$d قسمت جدید + + + برای 1 عنوان + برای %d عنوان + + + %d ثانیه + %d ثانیه + + + %1$s قسمت + %1$s قسمت + + + قسمت‌های %1$s و 1 قسمت دیگر + قسمت‌های %1$s و %2$d قسمت دیگر + + + قسمت‌های دیده نشده بعدی + %d قسمت دیده نشده بعدی + + + قسمت بعدی + %d قسمت بعدی + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/fa/plurals.xml b/i18n/src/commonMain/resources/MR/fa/plurals.xml new file mode 100644 index 0000000000..560caa806e --- /dev/null +++ b/i18n/src/commonMain/resources/MR/fa/plurals.xml @@ -0,0 +1,55 @@ + + + + آپدیت برای یک افرونه موجود است + آپدیت برای %d افرونه موجود است + + + قسمت های %1$s و 1 قسمت دیگر + ‬قسمت های %1$s و %2$d قسمت دیگر‬ + + + 1 قسمت جدید + %1$d قسمت جدید + + + برای ۱ مانگا + برای %d مانگا + + + %d دسته + %d دسته + + + بعد از %1$s دقیقه + بعد از %1$s دقیقه + + + ۱ عدد باقی مانده + %1$s عدد باقی مانده + + + در %1$s با %2$s خطا انجام شد + در %1$s با %2$s خطا انجام شد + + + ۱ ردیاب + %d ردیاب + + + 1 قسمت + %1$s قسمت + + + 1 قسمت جا افتاده است + %d قسمت جا افتاده است + + + دیروز + %1$d روز پیش + + + قسمت خوانده نشده بعدی + %d قسمت خوانده نشده بعدی + + \ No newline at end of file diff --git a/i18n/src/main/res/values-fa/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/fa/strings-aniyomi.xml similarity index 95% rename from i18n/src/main/res/values-fa/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/fa/strings-aniyomi.xml index d17f3e7768..fb78a0d59e 100644 --- a/i18n/src/main/res/values-fa/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/fa/strings-aniyomi.xml @@ -38,34 +38,6 @@ وب نما برای تاچیومی مورد نیاز است دانلود متوقف شد به روزرسانی قسمت‌ها - - 1 قسمت جدید - %1$d قسمت جدید - - - برای 1 عنوان - برای %d عنوان - - - %d ثانیه - %d ثانیه - - - %1$s قسمت - %1$s قسمت - - - قسمت‌های %1$s و 1 قسمت دیگر - قسمت‌های %1$s و %2$d قسمت دیگر - - - قسمت‌های دیده نشده بعدی - %d قسمت دیده نشده بعدی - - - قسمت بعدی - %d قسمت بعدی - از حذف قسمت‌های انتخاب شده مطمئمن هستید؟ هیچ قسمتی پیدا نشد همچنین بر همه انیمه‌های کتابخانه اعمال کن diff --git a/i18n/src/main/res/values-fa/strings.xml b/i18n/src/commonMain/resources/MR/fa/strings.xml similarity index 87% rename from i18n/src/main/res/values-fa/strings.xml rename to i18n/src/commonMain/resources/MR/fa/strings.xml index fe79a3dd5e..337fe19999 100644 --- a/i18n/src/main/res/values-fa/strings.xml +++ b/i18n/src/commonMain/resources/MR/fa/strings.xml @@ -1,24 +1,15 @@ - - آپدیت برای یک افرونه موجود است - آپدیت برای %d افرونه موجود است - نسخه جدید موجود است! خطا در دانلود دانلود کامل شد در حال دانلود… - در حال جستجوی آپدیت‌ها … آپدیت جدیدی موجود نیست دانلود فایل پشتیبان را انتخاب کنید عکس روی جلد را انتخاب کنید لطفا قبل این کار مانگای موردنظر را به کتابخانه اضافه کنید آپدیت عکس روی جلد با خطا مواجه شد - - قسمت های %1$s و 1 قسمت دیگر - ‬قسمت های %1$s و %2$d قسمت دیگر‬ - قسمت های %1$s قسمت %1$s و %2$d قسمت دیگر قسمت %1$s @@ -52,7 +43,6 @@ دسته بندی ها حذف شدند دسته بندی با این نام قبلا ساخته شده است! نوع - شروع شده وضعیت وضعیت عنوان @@ -75,8 +65,11 @@ بر اساس شماره قسمت شماره قسمت عنوان منبع + متوقف + خطا درحال بارگیری (%1$d/%2$d) قسمت %1$s + مانگا به کتابخانه اضافه شود؟ منبع نصب نشده است: %1$s کپی شد: \n%1$s @@ -87,8 +80,8 @@ به کتابخانه اضافه شد حذف از کتابخانه در کتابخانه - تازه کردن ردیابی - برای به روز رسانی وضعیت پیشرفت قسمت ها، در سایت های خدمات ردیابی، همگام سازی یک طرفه انجام دهید. برای ردیابی هر داده از تب ردیابی اقدام کنید. وب تون(Webtoon) + برای به روز رسانی وضعیت پیشرفت قسمت ها، در سایت های خدمات ردیابی، همگام سازی یک طرفه انجام دهید. برای ردیابی هر داده از تب ردیابی اقدام کنید. + وب تون(Webtoon) Burn / Darken Dodge / Lighten هر ۱۲ ساعت یکبار @@ -105,9 +98,10 @@ پشتیبان گیری و بازیابی منابع سابقه - آپدیت ها + به روز رسانی‌ها کتابخانه - تنضیمات + صف دانلود + تنظیمات بیشتر نام افزودن به کتابخانه @@ -122,19 +116,16 @@ آخرین استفاده دیگر منبع محلی - وب سایت را در WebView بررسی کنید هیچ نتیجه ای یافت نشد نتیجه بیشتری یافت نشد تب ها حداکثر تعداد نسخه‌های پشتیبان زمان پشتیبان گیری - پشتیبان گیری خودکار محل پشتیبان گیری بازگرداندن کتابخانه از فایل پشتیبان برگرداندن نسخه پشتیبان می تواند برای بازگرداندن کتابخانه فعلی استفاده شود تهیه نسخه پشتیبان - فقط افزونه‌های پین شده شامل شوند خدمات دانلود قسمت‌های جدید پنجم به آخرین قسمت خوانده‌شده @@ -143,22 +134,9 @@ دوم به آخرین قسمت خوانده‌شده آخرین قسمت خوانده شده غیرفعال شده - ۲۵٪ - ۲۰٪ - ۱۵٪ - ۱۰٪ - هیچ فاصله از کنار صفحه درحال خواندن همیشه انتقال قسمت را نشان داده شود - - 1 قسمت جدید - %1$d قسمت جدید - - - برای ۱ مانگا - برای %d مانگا - برای این مجموعه بازکردن عکس با خطا مواجه شد قصد خواندن دارم(Plan to read) @@ -170,13 +148,11 @@ نوار نوار بودن صفحه را کاهش می‌دهد، ولی ممکن است در عملکرد تاثیر بگذارد Double tap animation speed نصب - - %d دسته - %d دسته - نشانک قسمت آپدیت افزونه‌ها + به روزرسانی قسمت‌ها عمومی + دانلود متوقف شد اتصال شبکه در دسترس نیست اتصال وای فای در دسترس نیست به علت خطای غیرمنتظره بارگیری این چپتر، ممکن نیست @@ -235,7 +211,7 @@ انمیشن‌های تغییر صفحه تمام صفحه این افزونه در لیست افزونه‌های رسمی تاچیومی نیست. - این افزونه دیگر موجود نیست. + این افزونه دیگر در دسترس نیست. ممکن است به درستی کار نکند و باعث ایجاد مشکلاتی در برنامه شود. حذف نصب آن توصیه می شود. افزونه نامطمئن حذف نصب نامطمئن @@ -250,6 +226,7 @@ آپدیت‌های در انتظار همه همیشه بپرس + دسته بندی پیشفرض هنگام آپدیت عکس روی جلد و اطلاعات مانگا ها (در صورت تغییر) آپدیت شوند متادیتا فقط به صورت خودکار آپدیت شود با وضعیت \"کامل‌شده\" @@ -269,17 +246,12 @@ مخفی کردن اعلان‌ها \"صفحه نمایش امن\" محتویات برنامه را هنگام عوض کردن برنامه‌ها مخفی می‌کند و همچنین اسکرین‌شات را مسدود می‌کند صفحه نمایش امن - - بعد از %1$s دقیقه - بعد از %1$s دقیقه - هرگز همیشه قفل صفحه هنگام بیکاری نیاز به باز کردن قفل امنیت مدیریت اعلان‌ها - هنگام خروج از برنامه تایید گرفته شود فرمت تاریخ روشن خاموش @@ -308,7 +280,6 @@ جابه‌جایی به بالا قدیمی ترین جدیدترین - دوباره مرتب کردن مرتب سازی لغو همه لغو @@ -332,7 +303,6 @@ قسمت قبل مکث مشاهده قسمت ها - محلی درحال به روز رسانی دسته بندی ها خطای ناشناخته شما خارج شدید @@ -344,10 +314,6 @@ آدرس ایمیل نام کاربری ورود به %1$s - - ۱ عدد باقی مانده - %1$s عدد باقی مانده - همه مانگاهای موجود در کتابخانه را فیلتر می کند فقط دانلود شده ها به رفع اشکالات برنامه کمک می کند. هیچ گونه داده حساسی ارسال نخواهد شد @@ -362,6 +328,8 @@ غیر فعال کردن بهینه سازی باتری تازه کردن عکس روی جلد مانگاها اطلاعات حذف شدند + حذف سابقه برای مانگاهایی که در کتابخانه ذخیره نشده اند + پاک کردن پایگاه داده کوکی ها پاک شدند پاک کردن کوکی ها هنگام پاک کردن حافظه نهان خطایی روی داد @@ -376,10 +344,6 @@ درحال ایجاد نسخه پشتیبان چه چیزی را می خواهید پشتیبان گیری کنید ؟ پشتیبان گیری هنوز در حال انجام است - - در %1$s با %2$s خطا انجام شد - در %1$s با %2$s خطا انجام شد - %02d دقیقه, %02d ثانیه بازیابی کامل شد منابع ناموجود: @@ -412,27 +376,17 @@ حذف فیلتر خوانده ‌نشده بوک مارک شده - دانلود شده فیلتر منو تنضیمات - برای بستن دکمه بازگشت را یک بار دیگر بزنید تاریخچه قسمت ها - مانگا + کتابخانه ورودی‌ها + دسته بندی ها خطاها تکمیل شده پیشرفت - دانلود تکمیل شد منبع یافت نشد - - ۱ ردیاب - %d ردیاب - - - 1 قسمت - %1$s قسمت - وضعیت ناشناخته نویسنده ناشناخته شما هیچ منبع پین‌شده‌ای ندارید @@ -470,10 +424,6 @@ لطفا دوباره به MAL وارد شوید تنظیمات قسمت ها هیچ نرم افزار انتخاب فایلی یافت نشد - - 1 قسمت جا افتاده است - %d قسمت جا افتاده است - راهنمای تعویض منبع پاک کردن سابقه نمایش در لیست منابع و افزونه‌ها @@ -481,14 +431,11 @@ راست قدیمی نصب کننده - ساخت پوشه بر اساس نام مانگا - شروع شده آپدیت همگی فعالیت در پس زمینه - کل مانگاها + مجموع ورودی ها پیش فرض دنبال شده - ذخیره صفحات در پوشه های جداگانه هیچ مورد مشابهی پیدا نشد در حال نصب کردن افزونه … دریافت لیست افزونه ها ناموفق بود @@ -501,12 +448,13 @@ راهنمای شروع شما هنوز هیچ دسته‌بندی ندارید. بروزرسانی برنامه - هدایت به پن + هنگام ضربه زدن تصاویر را عریض کنید بزرگنمایی تصویر چشم انداز نسخه جدیدی از نسخه‌های رسمی موجود است. برای یادگیری نحوه انتقال از نسخه‌های غیررسمی اف دروید، ضربه بزنید. رد شده تعداد نخوانده‌ها به دلیل کامل‌بودن سری، رد شد + منبع محلی نمایش تعداد موارد نزولی ظاهر @@ -533,25 +481,13 @@ فقط روی شبکه‌ی نامحدود که شروع نشده‌اند محدودیت‌ها: %s - - دیروز - %1$d روز پیش - - برچسب‌های زمانی - برچسب‌های زمانی نسبی - کوتاه (امروز، دیروز) - طولانی (کوتاه+، n روز پیش) - ردیاب‌ها را به طور خودکار تازه کن - هنگامی که باتری کم نیست - تیترهای در حال به‌روزرسانی را رد کن - اخیراً + از به‌روزرسانی ورودی‌ها صرف‌نظر کنید امروز هر 3 روز فقط روی Wi-Fi - به‌روزرسانی ردیاب‌ها هنگام به‌روزرسانی کتابخانه تنظیمات بر اساس دسته‌بندی برای ترتیب و نمایش اطلاعات برنامه - معکوس کردن جای دو صفحه‌ی جدا + معکوس کردن جای دو صفحه‌ی تقسیم شده بعدی Shizuku در حال اجرا نمی‌باشد یک لحظه هنگام باز شدن متن‌خوان نمایش بده @@ -563,9 +499,10 @@ عمودی معکوس حساسیت مخفی کردن منو هنگام بالا و پایین بردن صفحه بالاترین + دسته‌بندی‌های محذوف بالا - دو صفحه جدا - اگر قرارگیری دو صفحه‌ی جدا با جهت خوانش تطابق ندارد + تقسیم صفحات عریض + اگر محل قرارگیری صفحات عریض تقسیم شده با حالت خواندن مطابقت نداشته باشد سیاه و سفید معکوس‌شده اقدامات @@ -573,7 +510,6 @@ L شکل حالت دوران عمودی - 5% پایین الگوی فقط جلد پایین‌ترین @@ -591,22 +527,40 @@ هیچ‌کدام شامل: %s بدون: %s + ورودی هایی که در دسته‌بندی های حذف‌شده هستند، حتی اگر هم‌زمان در دسته‌بندی های مشمول باشند به‌روزرسانی نمی‌شوند. ذخیره به عنوان فایل آرشیو CBZ انتشار به پایان رسید قالب فصل نامعتبر است لغو شد - صف دانلود + قفل برنامه، صفحه امن + گزارش‌های خرابی، بهینه‌سازی باتری + ارغوانی + تم جزر و مدی + زبان برنامه + مکان نامعتبر: %s + ورودی ها در دسته بندی های حذف شده حتی اگر در دسته بندی های در نظر گرفته شده نیز باشند، دانلود نخواهند شد. + قالب تم، تاریخ و زمان + دسته‌ها، به روز رسانی سراسری + حالت خواندن، نمایش، نوار وضعیت + همگام سازی پیشرفت یک طرفه، همگام سازی پیشرفته + چند + آیا می خواهید دسته \"%s\" را حذف کنید؟ + حذف دسته + بارگیری شود + دانلود خودکار در حین خواندن + جستجو… + باز کردن ورودی تصادفی + حذف همه‌چیز + خطای داخلی: برای اطلاعات بیشتر گزارش خطا را بررسی کنید + دانلود خودکار، دانلود از قبل + منابع، برنامه های افزودنی، جستجوی سراسری + پشتیبان گیری دستی و خودکار آمار من شروع کردم شیرین شده دانلود شد الان نه - نمایش دکمه ادامه خواندن بهبود کارکرد ابزار خواندن - - قسمت خوانده نشده بعدی - %d قسمت خوانده نشده بعدی - اگر قسمت فعلی و بعدی دانلود شده باشند، تنها برای ورودی‌های کتابخانه کار می‌کند اجازه دسترسی به حافظه داده نشده. داده ها از فایل پشتیبان برگردانده میشوند. @@ -622,4 +576,4 @@ شما باید از پشتیبانی ها در جا های دیگر هم کپی داشته باشید. بروزرسانی دسته بندی کپی کردن به کلیپ‌برد - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/fi/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/fi/plurals-aniyomi.xml new file mode 100644 index 0000000000..8b508dba82 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/fi/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + 1 uusi jakso + %1$d uutta jaksoa + + + %d sekunti + %d sekuntia + + + %1$s jakso + %1$s jaksoa + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/fi/plurals.xml b/i18n/src/commonMain/resources/MR/fi/plurals.xml new file mode 100644 index 0000000000..3c6adea0bc --- /dev/null +++ b/i18n/src/commonMain/resources/MR/fi/plurals.xml @@ -0,0 +1,55 @@ + + + + Minuutin jälkeen + %1$s minuutin jälkeen + + + 1 uusi luku + %1$d uutta lukua + + + Luku %1$s ja 1 lisää + Luvut %1$s ja %2$d lisää + + + Yhdelle sarjalle + %d sarjalle + + + Laajennuspäivitys saatavilla + %d laajennuspäivitystä saatavilla + + + 1 jäljellä + %1$s jäljellä + + + %d kategoria + %d kategoriaa + + + Valmistui %1$s virheitä löytyi %2$s + Valmistui %1$s virheitä löytyi %2$s + + + 1 luku + %1$s lukua + + + 1 seurantapalvelin + %d seurantapalvelinta + + + 1 puuttuva luku + %d puuttuvaa lukua + + + Eilen + %1$d päivää sitten + + + Seuraava lukematon luku + Seuraavat %d lukematonta lukua + + \ No newline at end of file diff --git a/i18n/src/main/res/values-fi/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/fi/strings-aniyomi.xml similarity index 92% rename from i18n/src/main/res/values-fi/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/fi/strings-aniyomi.xml index 6ad6df56b0..f962c08ff1 100644 --- a/i18n/src/main/res/values-fi/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/fi/strings-aniyomi.xml @@ -61,18 +61,6 @@ 7 sekuntia 9 sekuntia 8 sekuntia - - 1 uusi jakso - %1$d uutta jaksoa - - - %d sekunti - %d sekuntia - - - %1$s jakso - %1$s jaksoa - Toista sisäisesti Näytä katsomisen tai lukemisen jatkamispainike Aseta suunta videon koon mukaisesti @@ -172,20 +160,4 @@ Anime Mangalähteet Animelähteet - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-fi/strings.xml b/i18n/src/commonMain/resources/MR/fi/strings.xml similarity index 89% rename from i18n/src/main/res/values-fi/strings.xml rename to i18n/src/commonMain/resources/MR/fi/strings.xml index 90ccded5d9..a765757880 100644 --- a/i18n/src/main/res/values-fi/strings.xml +++ b/i18n/src/commonMain/resources/MR/fi/strings.xml @@ -1,10 +1,12 @@ Nimi + Kategoriat Manga Seuranta Historia Asetukset + Latausjono Kirjasto Historia Asetukset @@ -49,7 +51,6 @@ Valitse varmuuskopio-tiedosto Lataa Ei päivityksiä saatavilla - Etsitään päivityksiä… Ladataan… Lataus valmis Latausvirhe @@ -64,13 +65,13 @@ Lukua ei voitu ladata odottamattoman virheen vuoksi Ei Wi-Fi yhteyttä saatavilla Ei verkkoyhteyttä + Lataus pysäytetty Tavallinen Varmuuskopiointi ja palautus Siirrä Laajennukset Laajennuksen tiedot Suodatus - Ladattu Kirjanmerkki Lukemattomat Poista suodattimet @@ -127,6 +128,7 @@ Automaattisen päivityksen laitteistorajoitukset Latauksessa Sarja on päättynyt + Oletus kategoria Kysy aina Päivitä Asenna @@ -196,7 +198,6 @@ Palvelut Voidaan käyttää nykyisen kirjaston palauttamiseen Palauta kirjasto varmuuskopiointi-tiedostosta - Automaattiset varmuuskopiot Varmuuskopioinnin tiheys Varmuuskopioiden enimmäismäärä Varmuuskopio luotu @@ -209,8 +210,9 @@ Virhe tapahtui välimuistia tyhjentäessä Tyhjennä keksit Keksit tyhjennetty + Tyhjennä tietokanta + Poista mangan historia, jota ei ole tallennettu kirjastoosi Tiedot poistettu - Päivitä seuranta Versio Lähetä kaatumisilmoituksia Auttaa korjaamaan bugeja. Arkaluonteista tietoa ei lähetetä @@ -221,7 +223,6 @@ Kirjauduttu sisään Tuntematon virhe Päivitetään kategoriaa - Paikallinen Ei enempää tuloksia Globaali haku… Poista ladatut luvut\? @@ -230,6 +231,8 @@ Lähdettä ei ole asennettu: %1$s Luku %1$s Ladataan (%1$d/%2$d) + Virhe + Pysäytetty Nimike Luvun numero Lähteen mukaan @@ -242,7 +245,6 @@ Nimike Tila Tila - Aloitettu Tyyppi Tämän niminen kategoria on jo olemassa! Kategoriat poistettu @@ -265,6 +267,7 @@ Aikomus lukea Uudelleenluettava Tämä poistaa luvun lukupäivän. Haluatko jatkaa\? + Lisää sarja kirjastoon\? Kuva tallennetu Värisuodattimen sekoitus tyyppi Päällys @@ -300,25 +303,14 @@ Vaadi lukituksen avaaminen Aina Ei koskaan - - Minuutin jälkeen - %1$s minuutin jälkeen - Cloudflaren ohittaminen epäonnistui + Lukujen päivitykset Näyttö Päivitettävät Päivitä WebView-sovellus yhteensopivuuden parantamiseksi - - 1 uusi luku - %1$d uutta lukua - Luku %1$s Luku %1$s ja %2$d lisää Luvut %1$s - - Luku %1$s ja 1 lisää - Luvut %1$s ja %2$d lisää - Piilota ilmoitusten sisältö Etsitään uusia lukuja Lukitse käyttämättömänä @@ -330,30 +322,16 @@ Sähköpostiosoite Näytä sisältö leikkausalueella Näytä aina luvun vaihdos - - Yhdelle sarjalle - %d sarjalle - Valikko - Uudelleenjärjestä Uusin Vanhin Siirrä alkuun Siirrä loppuun - - Laajennuspäivitys saatavilla - %d laajennuspäivitystä saatavilla - Laajennuspäivitykset Palautus peruttu Varmuuskopion palautus epäonnistui Varmuuskopiointi epäonnistui - 25% - 20% - 15% - 10% Ohita suodatetut luvut - Paina takaisin uudestaan poistuaksesi Ladatut Lähteet Päivittää kirjastoa @@ -364,7 +342,6 @@ Poista kiinnitys Kiinnitä Valitse käänteinen - Vahvista poistuminen Jatkuva pystysuora Palautus on jo käynnissä Varmuuskopiointi on jo käynnissä @@ -374,29 +351,14 @@ Vähemmän Enemmän Kiinnitetyt - Katso sivu WebViewissä - Ei yhtään Luettavana Tarkista päivitykset Viimeksi käytetty Paikallinen lähdeopas %02d min, %02d sek Suodattaa kaikki sarjat kirjastossasi - - 1 jäljellä - %1$s jäljellä - - Sisällytä vain kiinnitetyt lähteet Harmaa Tälle sarjalle - - %d kategoria - %d kategoriaa - - - Valmistui %1$s virheitä löytyi %2$s - Valmistui %1$s virheitä löytyi %2$s - Vähentää juovia, mutta vaikuttaa suorituskykyyn Lukutila Laiteasetuksia ei voitu avata @@ -423,10 +385,6 @@ Aloita Lähdettä ei löytynyt Poista käytöstä - - 1 luku - %1$s lukua - Edellyttää sovelluksen käynnisstämisen uudelleen Verkko Molemmat @@ -442,23 +400,14 @@ Lukutila Teema Lisäyspäivämäärä - - 1 seurantapalvelin - %d seurantapalvelinta - Sinulla ei ole kiinnitettyjä lähteitä Valmis Edistyminen - Lataus valmis Virheet Seurantapalvelimet joihin et ole kirjautunut sisään: Voi sisältää NSFW (18+) -sisältöä 18+ Tämä ei estä epävirallisia tai mahdollisesti väärin merkittyjä laajennuksia näyttämästä NSFW 18+ sisältöä sovelluksessa. - - 1 puuttuva luku - %d puuttuvaa lukua - Lukuja ei löytynyt Päivitetyt luvun oletusasetukset Aseta oletukseksi @@ -512,13 +461,12 @@ Haettu päivämäärä Poissuljettuihin kategorioihin kuuluvia mangoja ei ladata, vaikka ne olisivat myös sisällytetyissä kategorioissa. Automaattinen lataus + Poissuljettuihin kategorioihin sisältyvää mangaa ei päivitetä, vaikka ne olisivat myös sisällytetyissä kategorioissa. Näytä lisätiedot Tätä Android-versiota ei enää tueta Kopiointi leikepöydälle epäonnistui Vaakatasossa Pystysuunnassa - Luo kansioita manga-otsikon mukaan - Tallenna sivut erillisiin kansioihin Toiminnot Kierron tyyppi Harmaasävy @@ -535,18 +483,11 @@ Pois päältä Päällä Aloitusopas - Päivitä seurantapalvelimet kirjaston päivityksen yhteydessä - - Eilen - %1$d päivää sitten - Kansikuva ruudukko Dynaaminen Vihreä omena - Viimeaikoina Oletus - Aloitettu - Päivitä seurantapalvelimet automaattisesti + Laitteelle tallennettu manga Yhteenlaskettu manga Aloita lataaminen nyt Ying ja Yang @@ -557,15 +498,11 @@ Yotsuba Täysin musta pimeätila Ei lukemattomia lukuja - Suhteelliset aikamerkit - Lyhyt (tänään, eilen) - Pitkä (lyhyt+, N päivää sitten) Tänään Sovelluksen teema Varoitus Tunnistaudu vahvistaaksesi muutokset Kieli - Aikaleimat Usein kysytyt kysymykset ja oppaat Ohita päivitys Siirrä sarja päällimmäiseksi @@ -573,7 +510,6 @@ Joka 3. Päivä Ainoastaan WiFillä Käänteisväri - 5% Sovelluksen tiedot Perinteinen Käänteinen kuva @@ -589,22 +525,17 @@ Lukemattomien määrä Poista kategoria Jäljitä - - Seuraava lukematon luku - Seuraavat %d lukematonta lukua - Alhainen + Poissuljetut kategoriat Alhaisin Ei varmuuskopioitavia sarjoja kirjastossa Useampi - Jaa korkeat kuvat (BETA) Panoroi leveitä kuvia napauttamalla Tallenna CBZ-arkistona Zoomaa vaakasuuntaisiin kuviin Korkein Kieli Haku… - Kun akku ei ole vähissä Laventeli Sovelluksen kieli Versio @@ -654,7 +585,6 @@ Järjestä Kansikuva Virhe jakaessa kansikuvaa - Päivitetään kirjastoa… (%1$d/%2$d) Napauta saadaksesi lisätietoja Ikäluokitus Seurantaopas @@ -663,7 +593,6 @@ Kansikuva tallennettu Virhe tallentaessa kansikuvaa %1$d päivitys(tä) ohitettu - Tämä seurantapalvelu on yhteensopiva vain Komga-lähteen kanssa. RARv5-muoto ei ole tuettu Ohitettu, koska sarjassa on luettomia lukuja Ohitettu, koska sarja ei vaadi päivityksiä @@ -674,5 +603,4 @@ Varmuuskopioita kannattaa säilyttää myös muissa paikoissa. Toivelista Viimeksi luettua lukua ei voitu avata -Latausjono - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/fil/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/fil/plurals-aniyomi.xml new file mode 100644 index 0000000000..0216137f48 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/fil/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + Mga Episode %1$s at 1 pa + Mga Episode %1$s at %2$d pa + + + %d segundo + %d (mga) segundo + + + Para sa 1 palabas + Para sa %d na mga palabas + + + Susunod na hindi nakitang episode + Susunod na %d hindi nakitang mga episode + + + %1$s na episode + %1$s na mga episode + + + 1 bagong episode + %1$d (na) mga bagong episode + + + Susunod na episode + Susunod na %d (mga) episode + + \ 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 new file mode 100644 index 0000000000..2a3677be43 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/fil/plurals.xml @@ -0,0 +1,67 @@ + + + + Pagkatapos ng %1$s minuto + Pagkatapos ng %1$s (na) minuto + + + %d kategorya + %d (na) kategorya + + + Ang extension ay available upang i-update + Ang mga %d (na) extension ay available upang i-update + + + Mga kabanata %1$s at isa pa + Mga kabanata %1$s at %2$d pa + + + %1$d bagong kabanata + %1$d (na) bagong kabanata + + + Para sa %d na entry + Para sa %d na mga entry + + + %1$s kabanata + %1$s (na) kabanata + + + %1$s na lang + %1$s pa ang nasa queue + + + Na-restore sa loob ng %1$s na may %2$s error + Na-restore sa loob ng %1$s na may %2$s (na) error + + + %d tracker + %d na mga tracker + + + Nilaktawan ang %d na kabanata, maaaring ito ay wala sa source o na-filter ang mga ito + Nilaktawan ang %d na mga kabanata, maaaring wala sa source o na-filter ang mga ito + + + Kahapon + %1$d araw na ang makalipas + + + Susunod na hindi pa nababasa na kabanata + Susunod na %d di pa nababasa na kabanata + + + Sunod na kabanata + Susunod na %d kabanata + + + Nawawalang %1$s na kabanata + Nawawalang %1$s mga kabanata + + + 1 araw + %d (mga) araw + + \ No newline at end of file diff --git a/i18n/src/main/res/values-fil/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/fil/strings-aniyomi.xml similarity index 95% rename from i18n/src/main/res/values-fil/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/fil/strings-aniyomi.xml index 045cb7e145..e629f858da 100644 --- a/i18n/src/main/res/values-fil/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/fil/strings-aniyomi.xml @@ -118,18 +118,6 @@ Mga opsyon sa pag-backup Episode %1$s Isama lang ang mga naka-pin na mga manga source - - Mga Episode %1$s at 1 pa - Mga Episode %1$s at %2$d pa - - - %d segundo - %d (mga) segundo - - - Para sa 1 palabas - Para sa %d na mga palabas - Oryentasyon Lokal na anime Panatilihin ang posisyon ng panonood sa mga nakitang episode @@ -157,15 +145,7 @@ Itago ang mga kontrol ng player kapag binubuksan ang player I-edit ang MPV configuration file para sa karagdagang mga setting ng player Anong impormasyon ang isama sa backup file - - Susunod na hindi nakitang episode - Susunod na %d hindi nakitang mga episode - Ginamit ng anime: %1$s, ginamit ng manga: %2$s - - %1$s na episode - %1$s na mga episode - Pilitin ang app na tingnan kung may naka-download na mga kabanata at episode 8 segundo 9 segundo @@ -195,10 +175,6 @@ Ilipat ang Bago sa Higit Pa na tab Sa anong punto upang markahan ang episode bilang nakita Laktawan sa %d segundo - - 1 bagong episode - %1$d (na) mga bagong episode - Pahina 3 I-edit ang mga kategorya ng manga Ipakita ang pindutan sa tuluyang panonood/pagbasa @@ -266,10 +242,6 @@ Anime Mga Source ng Manga Mga Source ng Anime - - Susunod na episode - Susunod na %d (mga) episode - Mga Setting ng extension Pag-swipe ng episode Mag-swipe ng pakanang pagkilos diff --git a/i18n/src/main/res/values-fil/strings.xml b/i18n/src/commonMain/resources/MR/fil/strings.xml similarity index 78% rename from i18n/src/main/res/values-fil/strings.xml rename to i18n/src/commonMain/resources/MR/fil/strings.xml index c77a5003c3..af76b66c1d 100644 --- a/i18n/src/main/res/values-fil/strings.xml +++ b/i18n/src/commonMain/resources/MR/fil/strings.xml @@ -14,10 +14,9 @@ Itaas Pinakaluma Pinakabago - Isaayos Ayusin - Ikansela lahat - Ikansela + Kanselahin lahat + Kanselahin I-unpin I-pin Isara @@ -40,42 +39,41 @@ Ihinto Tingnan ang mga kabanata Palitan ang cover - Ikategorya - Magdagdag - Ayusin - Palitan ng pangalan + I-set ang kategorya + Magdagdag ng kategorya + Ayusin ang kategorya + Palitan ang pangalan ng kategorya Magdagdag Isaayos Isara lahat Buksan lahat I-update ang Aklatan Burahin - Wag na\'ng tandaan - Tandaan + I-unbookmark ang kabanata + I-bookmark ang kabanata I-download Markahang nabasa ang nauna - Markahang nabasa + Markahang nabasa na Markahang babasahin Baligtarin Piliin lahat - Panlahatang Paghanap + Pangkalahatang Paghanap Maghanap Pinakabagong kabanata Huling binasa Dami ng kabanata Pa-alpabeto - Tanggalin ang filter - Babasahin + Tanggalin ang pansala + Hindi Nabasa Tinandaan - Na-download - I-filter + Pansala Menu - Pagsasaayos - Pindutin muli para umalis + Mga setting Nakaraan Tina-track Mga Kabanata Mga entry 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 Walang binasa kamakailan @@ -84,26 +82,22 @@ Tulong Tungkol sa extension Mga Extension - Paglipat + Lumipat Pag-backup at Pag-restore Mga Source Nakaraan Bago Aklatan - Mga Settings + Dina-download + Mga Setting Higit pa Pangalan - - Pagkatapos ng %1$s minuto - Pagkatapos ng %1$s (na) minuto - Hindi Palagi Isara kung nakatambay Nangangailangang i-unlock Pamahalaan ang mga abiso Seguridad at privacy - Kumpirmahing aalis Ayos ng petsa Nakabukas Nakasara @@ -122,12 +116,7 @@ Huling nabasang kabanata Sarado Pinili kong lugar - Lugar ng paglalagyan - 25% - 15% - 20% - 10% - Wala + Lokasyon sa pag-download Kapal ng gilid Pagbabasa Ipakita palagi ang paglipat-kabanata @@ -138,7 +127,7 @@ Piliting nakahiga Piliting nakatayo Malaya - Pag-ikot + Default na pag-ikot Mabilis Normal Walang animasyon @@ -165,7 +154,7 @@ Abo Puti Likurang kulay - Ipakita kapag mahabang pindot + Ipakita ang mga aksyon sa mahabang tap Baligtarin ang pindutan ng volume Pindutan ng volume Nabigasyon @@ -190,7 +179,7 @@ I-animate ang paglipat-pahina Ipakita ang laman sa cutout area Naka-fullscreen - Wala sa opisyal na listahan ng mga extension ng Tachiyomi ang extension na ito. + Wala sa opisyal na listahan ang extension na ito. 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. Kaduda-dudang extension I-uninstall @@ -204,13 +193,10 @@ I-install Di-suportado I-update - Dapat i-update + Nakabinbin ang mga update Lahat - - %d kategorya - %d (na) kategorya - Palaging tanungin + Default na kategorya Maghanap ng mga bagong cover at detalye kapag nag-a-update ng Aklatan Kusang sariwain ang metadata May \"Kumpleto\" na estado @@ -233,33 +219,33 @@ Bantayan ang screen Baligtarin ang mga tap zone Nawawalang mga source: - Ang backup ay hindi naglalaman ng anumang mga entry sa library. + Hindi naglalaman ang backup ng kahit anong mga entry sa Aklatan. Invalid na backup Nai-backup na - Dami ng backup - Dalas ng pag-backup - Kusang mag-backup - Lugar ng backup + Pinakamarami na awtomatikong pag-backup + Awtomatikong dalas ng pag-backup + Lokasyon ng backup I-restore ang Aklatan mula sa backup I-restore ang backup Magagamit para ma-restore ang kasalukuyang Aklatan Mag-backup - Hanapin lamang ang mga naka-pin na source sa pangkalahatang paghahanap - One-way na pag-sync upang i-update ang pag-unlad ng kabanata sa mga serbisyo sa pagsubaybay. I-set up ang pagsubaybay para sa mga indibidwal na entry mula sa kanilang button sa pagsubaybay. - Mga Serbisyo + Isahang pagsabay (sync) para mai-update ang progress sa mga kabanata sa mga external na tracking service. Ayusin ang pagta-track para sa mga indibidwal na entry gamit ang button na Pagta-track. + Mga Tracker I-download ang mga bagong kabanata Panlima sa huling nabasa Pang-apat sa huling nabasa Pangatlo sa huling nabasa Pagbasa Tema - Petsa dinagdag + Petsa ng pagdagdag Pareho Patayo Pahiga Mga update sa extension Wala + Mga update sa kabanata Komon + Nakahinto ang mga pag-download Walang koneksyon sa Internet Walang koneksyon sa Wifi Di ma-download ang kabanata dahil sa isang di-inaasahang error @@ -267,43 +253,26 @@ Taga-download Paki-update po ang WebView app para sa mas maayos na paggana Bigong ma-bypass ang Cloudflare - - Ang extension ay available upang i-update - Ang mga %d (na) extension ay available upang i-update - May bagong bersyon! Nagka-error sa pag-download I-tap upang ma-install ang update Dina-download… - Naghahanap ng mga update… Walang bagong update I-download Pumili ng backup Pumili ng cover Maaaring ilagay ang entry sa iyong library bago ito gawin Bigong mapalitan ang cover - - Mga kabanata %1$s at isa pa - Mga kabanata %1$s at %2$d pa - Mga kabanata %1$s Kabanata %1$s at karagdagang %2$d pa Kabanata %1$s - - %1$d bagong kabanata - %1$d (na) bagong kabanata - - - Para sa %d serye - Para sa %d (na) serye - May mga bagong kabanata Naghahanap ng mga bagong kabanata Di ma-download ang mga kabanata. Subukan mo uli ito sa Dina-download Kopyahin Ilipat Pumili ng paglilipatang source - Pumili ng data na isasama + Pumili ng data na isama Kab. %1$s - %2$s Ina-update ang Aklatan Di makita ang source @@ -311,7 +280,7 @@ Bigong mai-load ang mga pahinang: %1$s Nilo-load ang mga pahina… Walang kabanata bago ito - Wala na\'ng susunod + Wala nang susunod na kabanata Nakaraan: Susunod: Kasalukuyan: @@ -330,7 +299,6 @@ Binura na ang mga kategorya Mayroong kapangalan ang kategoryang ito! Uri - Sinimulan Estado Estado Pamagat @@ -352,16 +320,15 @@ Base sa source Pangalan ng source Kabanata + Nakahinto + Nagka-error Dina-download (%1$d/%2$d) Kabanata %1$s + Idagdag sa Aklatan\? Di naka-install ang source: %1$s Kinopya sa clipboard: \n%1$s Burahin ang mga na-download na kabanata\? - - %1$s kabanata - %1$s (na) kabanata - Palawakin Bawasan Tinanggal sa Aklatan @@ -374,7 +341,7 @@ Di alam ang may-akda Di alam Patuloy - Gabay sa Lokal na Source + Gabay sa Lokal na source Maghanap Pinakabago Hinanap ang \"%1$s\" sa lahat @@ -382,12 +349,10 @@ Naka-pin Huling ginamit Iba pa - Lokal na Source - Bisitahin ang site sa WebView + Lokal na source Walang nakitang resulta Wala na\'ng resulta Mga Tab - Lokal Ina-update ang kategorya Di matukoy na error Naka-logout ka na @@ -397,12 +362,8 @@ Mag-login Password Email address - Username + Username (pangalan) Mag-login sa %1$s - - %1$s na lang - %1$s pa ang nasa queue - Pini-filter ang lahat ng mga entry sa iyong akalatan Mga na-download lang Nakatutulong sa pag-ayos sa mga bug. Walang sensitibong data ang ipapadala @@ -417,9 +378,10 @@ Nakapatay na ang pag-o-optimisa sa baterya Patayin ang pag-o-optimisa sa baterya Nakatutulong sa pag-update ng aklatan sa background at pag-backup - Sariwain ang pagta-track I-refresh ang mga cover sa aklatan Binura na + Burahin ang nakaraan ng mga entry na hindi naka-save sa aklatan mo + Linisin ang database Nagka-error habang nililinis Nalinis na ang cache. Binura ang %1$d (na) file Nagamit: %1$s @@ -427,14 +389,10 @@ Nalinis na ang mga cookie Nangangailangang buksan muli ang app para gumana Linisin ang mga cookie - Network + Networking Bigong ma-restore ang backup Kinansela ang pag-restore Inire-restore na - - Na-restore sa loob ng %1$s na may %2$s error - Na-restore sa loob ng %1$s na may %2$s (na) error - Na-restore na Rine-restore ang backup Bigong ma-backup @@ -442,23 +400,14 @@ Anong iba-backup mo\? Bina-backup na %02d (na) min, %02d (na) seg - - %d tracker - %d na mga tracker - - Wala kang naka-pin na pinagkukunan + Wala kang naka-pin na source Tapos na Mga error Takbo - Tapos na sa pag-download - Di naka-login sa (mga) tracker: + Di naka-login sa mga tracker: Hindi nito naiiwasan ang pagpapakita ng mga NSFW (18+) sa mga di-opisyal o posibleng maling naka-flag na extension sa loob ng app. Posibleng may NSFW (18+) content ang mga source mula sa extension na ito 18+ - - Nilaktawan ang %d na kabanata, maaaring ito ay wala sa source o na-filter ang mga ito - Nilaktawan ang %d na mga kabanata, maaaring wala sa source o na-filter ang mga ito - Walang nakitang kabanata Gusto mo bang i-save at ipagpaubaya ang pagsasaayos na ito\? Ipagpaubaya @@ -466,16 +415,16 @@ %1$s: %2$s, pahina %3$d Pagsasaayos ng Kabanata Bilang ng na-download - Maghanap + Maghanap ng setting Nakatago Linisin ang nakaraan Nalinis na ang nakaraan Sigurado ka ba talaga\? Mawawala ang buong nakaraan. - Gabay sa Paglipat ng Source + Gabay sa Paglipat ng source Abante Balik Walang nakitang app para makapili - Ipakita sa mga source at extension + Ipakita sa mga listahan ng source at extension Mga source na NSFW (18+) Mag-login muli po sa MAL Natapos basahin @@ -492,10 +441,10 @@ Petsa in-upload Sinundan Kaliwa at Kanan - Hatiin sa dalawa ang malapad na pahina - Ipakita ang dami - Kung sakaling hindi sumasakto ang direksyon ng hating pahina - Pag baliktarin ang hinating pahina + Hatiin ang mga malalapad na pahina + Ipakita ang bilang ng mga item + Kung sakaling hindi sumasakto sa direksyon ng pagbabasa ang paghahati sa malalapad na pahina + Baligtarin ang paghahati sa pahina Ire-restore ang mga datos mula sa backup file. \n \nKailangan mong i-install muli ang mga nawawalang extension at mag-login muli sa mga tracker pagkatapos para magamit ang mga ito. @@ -511,7 +460,8 @@ Di-kasama: %s Kasama: %s Wala - Petsa kinuha + Hindi ia-update ang mga entry na nasa mga di kasamang kategorya kahit na nasa mga kasamang kategorya rin sila. + Petsa ng pagkuha ng kabanata I-tap para makita ang detalye Di na suportado ang bersyong ito ng Android Bigong makopya sa clipboard @@ -523,10 +473,8 @@ Pag-ikot Maabo Isara ang incognito - Kusa - Ikansela lahat para sa seryeng ito - I-update ang tracker tuwing nag-a-update ang Aklatan - Kusang sariwain ang tracker + Awto + Kanselahin lahat para sa seryeng ito Ayusin ayon sa Restriksyon: %s Walang nahanap na kapares @@ -539,18 +487,17 @@ Di ma-save ang cover Na-save na ang cover Takip ng manga - Patayin - Buksan - Pagpapakita kada kategorya + Naka-off + Naka-on + Lokal na source + Mga setting ng bawat kategorya para sa pag-aayos Wala ka pang kategorya. Gabay sa pag-track I-download na - Ina-update ang Aklatan... (%1$d/%2$d) - Gumagana lang ang tracker na ito gamit ang source ng Komga. May dagdag na mga restriksyon sa app ang ilang mga modelo ng phone na pumapatay sa mga serbisyo sa background. May impormasyon sa site na ito para maayos ang naturang problema. Maaaring hindi gumana nang maayos ang pag-backup/pag-restore kung nakasara ang MIUI optimization. - Mga serbisyong nagbibigay ng mga pinahusay na mga feature para sa ilang mga source. Kusang tina-track ang mga entry kapag naidagdag ito sa iyong aklatan. - Pinahusay na serbisyo + Nagbibigay ng mga pinahusay na mga feature para sa ilang mga source. Kusang tina-track ang mga entry kapag naidagdag ito sa iyong aklatan. + Pinahusay na tracker Hatinggabi Berdeng Mansanas Nagbabago @@ -567,42 +514,34 @@ Pinakamataas Sensitivity para sa pagtatago ng menu sa scroll Baligtad - Mahaba (Maiksi+, n (na) araw ang nakalipas) - Maiksi (Ngayon, Kahapon) - Pagpepetsa - - Kahapon - %1$d araw na ang makalipas - - Kamakailan Ngayon - Petsa Teal at Turquoise Hitsura Patotohanan para makumpirma ang pagbabago - Ipaubaya + Default Sundan Gabay sa Pagsisimula Pang-tablet na UI Tumulong sa pagsalin - Patungkol + Kategoryang di-kasama + Tungkol sa app Paki-install at buksan ang Shizuku para magamit ito bilang taga-install ng extension. Di tumatakbo ang Shizuku Legasiya Taga-install Ini-install ang extension… - Dami ng mga entry + Dami ng entry Verbose na pagla-log Mag-print ng mga verbose na log sa log ng sistema (dagdag-pasanin sa app) Babala: Nakasasama ang mga malalaking update sa source at maaaring humantong sa mabagal na update at pagtaas ng paggamit sa baterya. I-tap para matuto pa. Wika Babala - Dapat nagtatabi rin kayo ng mga kopya ng backup sa ibang mga lugar. + Dapat nagtatabi rin kayo ng mga kopya ng backup sa ibang mga lugar. Ang mga backup ay naglalaman ng sensitibong data tulad ng nakaimbak na password; mag-ingat kung ibahagi ito. Sa Wi-Fi lang Kada 3 araw Mga update sa app I-update lahat - May %1$d na mga entry na non-library sa database + %1$d na entry sa database na wala sa aklatan Walang malilinis Bigong makuha ang listahan ng mga extension Patakaran sa Pagkapribado @@ -613,14 +552,12 @@ Naka-hiatus Kinansela Mga Madalas Itanong (FAQ) at Gabay - 5% - Nasimulan Pabalat lang Nilaktawan dahil kumpleto na ang serye Hindi pa nasisimulan Nilaktawan dahil may di pa nabasang mga kabanata Nilaktawan dahil wala pang nabasang mga kabanata - Mag-zoom sa pahigang larawan + Kusang mag-zoom sa mga malalawak na larawan I-pan ang mga malalapad na larawan Matuto pa Nilaktawan @@ -636,9 +573,6 @@ Nalinis na ang WebView data Linisin ang WebView data Isara - Kapag di lowbat - Ipakita ang mga dinobleng naka-pin na source - Ulitin ang pag-pin sa mga source sa kani-kanilang mga wika Walang nakitang naka-install na source Walang nakitang source Dami ng di pa nabasa @@ -679,43 +613,58 @@ Daluyong I-download agad Kusang mag-download habang nagbabasa - Gumagana lamang sa mga entry sa aklatan at kung ang kasalukuyang kabanata at ang susunod na kabanata ay na-download na + Gumagana lamang sa kasalukuyang kabanata + ang susunod ay na-download na. Sigurado ka ba\? - - Susunod na hindi pa nababasa na kabanata - Susunod na ang %d na hindi pa nababasa na kabanata - Marami - Tatanggalin mo na ang \"%s\" mula sa iyong aklatan + Tatanggalin mo na ang \"%s\" mula sa aklatan mo Huling update sa aklatan: %s - Hatiin ang mga matatangkad na larawan (BETA) Sikat Hindi binigay ang mga permiso sa storage Nilaktawan dahil hindi kailangan ang pag-update sa serye Maghanap… Paraan ng pagbasa, pagpapakita, nabigasyon Kusang pag-download, i-download agad - Isahang pagsabay ng progress, karagdagang pagsabay - Tema, Ayos ng petsa at oras - Manu-mano at kusang backups - Lock ng app, bantayan ang screen + Isahang pagsabay sa progress, pinahusay na pagsabay + Tema, ayos ng petsa & oras + Mano-mano at kusang pag-backup + Pag-lock aa app, bantayan ang screen Itambak ang mga crash log, pag-o-optimisa sa baterya Mga kategorya, panlahatang update, pag-swipe ng kabanata Mga source, extension, panlahatang paghanap Nagkaroon ng hindi inaasahang error ang %s. Iminumungkahi naming ibahagi mo ang mga crash log sa aming support channel sa Discord. Ay! - Wika ng App, mga abiso Buksan muli ang app - Hindi wastong lokasyon: %s - Hindi alam ang Pamagat - Hindi wasto ang string ng user agent + Invalid na lugar: %s + Di alam na pamagat + Invalid na string ng user agent Ngayon lang Tinitignan ang mga download Walang mga entry ang nahanap sa kategoryang ito Buksan ang random na entry Ang mga build mula sa F-Droid ay hindi opisyal na sinusuportahan. - \nI-tap para matuto pa. - Dina-download +\nI-tap para matuto pa. + Tanggalin ang petsa\? + Tatanggalin nito ang huling petsa na ipinili mo na simula sa %s + Aalisin nito ang lahat ng mga nauna mong napiling petsa ng kayarian magmula sa %s + Ipawalang-bisa ang indise ng mga download + Mga natapos na entry + Nasimulan + Lokal + Na-download + Sa panlahatang update + Mga Entry + Kabuuang dami + Mga Tracker + Pangkalahatang-ideya + Nabasa na + Mean score + Nagamit na + Tagal ng binasa + Mga na-track na entry + Walang laman ang kategoryang ito + Hindi muna ngayon + N/A + Istatistika Laktawan ang mga magkaparehong kabanata Kinopya sa clipboard *kailangan @@ -730,15 +679,7 @@ %ds Kopyahin sa clipboard Itago ang mga entry na nasa aklatan na - - Susunod na kabanata - Susunod na %d kabanata - I-update ang kategorya - - Nawawalang %1$s na kabanata - Nawawalang %1$s mga kabanata - I-rotate ang malalawak na pahina upang magkasya I-flip ang oryentasyon ng mga pinaikot na malalawak na pahina Nakapatong (Overlay) @@ -749,4 +690,56 @@ I-double tap para mag-zoom %d kada hilera Mag-swipe ng pakanang pagkilos - \ No newline at end of file + Itakda ang pagitan + Ipasadya ang fetch interval + Huling 10+ pagsusuri + Susunod na inaasahang update + Itinigil\? Huli ng 20+ at 2 buwan + Lumipas ang check period + Kunin kada buwan (kada ika-28 na araw) + Tantyahin bawat + Itakdang i-update bawat + Sa labas ng inaasahang release period + Mga pagitan + Ayusin ang interval + Nilaktawan dahil walang inaasahang release ngayong araw + May mga resulta + Tanggalin ang na-download + OK + Tanggalin ang %s tracking\? + Tatanggalin nito ang lokal na pag-track. + Tanggalin din mula sa %s + Nagsi-sync ang aklatan + Natapos na ang pag-sync ng aklatan + I-tap dito para sa tulong sa Cloudflare + Napawalang-bisa ang indise ng mga download + Hindi makalikha ng backup file + Pag-login sa tracker + Lisensyado - Walang mapakitang kabanata + I-unlock ang %s + Walang koneksyon sa Internet + HTTP %d, tignan ang website sa WebView + Hindi maabot ang %s + Ilagay sa ibaba ang serye + Mga relatibong timestamp + \"%1$s\" sa halip na \"%2$s\" + Mag-ayos ng kategorya + Nag-a-update ang aklatan... (%s) + 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 + Binabawasan ang ghosting sa mga e-ink na display + Mag-flash ng puti kada pagbabago ng pahina + Hindi kailanman + Huling awtomatikong na-back up: %s + Paggamit ng storage + Iskor sa tracker + Gamitin + Ibalik sa default + Walang scanlator ang nahanap + Scanlator + Ibukod ang mga scanlator + Lumikha + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/fr/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/fr/plurals-aniyomi.xml new file mode 100644 index 0000000000..d116b9f10c --- /dev/null +++ b/i18n/src/commonMain/resources/MR/fr/plurals-aniyomi.xml @@ -0,0 +1,38 @@ + + + + Épisode non vu suivant + %d épisodes non vus suivants + %d épisodes non vus suivants + + + %1$s épisode + %1$s épisodes + %1$s épisodes + + + Pour 1 titre + Pour %d titres + Pour %d titres + + + 1 nouvel épisode + %1$d nouveaux épisodes + %1$d nouveaux épisodes + + + %d seconde + %d secondes + %d secondes + + + Épisodes %1$s et 1 autre + Épisodes %1$s et %2$d autres + Épisodes %1$s et %2$d autres + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/fr/plurals.xml b/i18n/src/commonMain/resources/MR/fr/plurals.xml new file mode 100644 index 0000000000..e3c52a33d7 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/fr/plurals.xml @@ -0,0 +1,83 @@ + + + + Après %1$s minute + Après %1$s minutes + Après %1$s minutes + + + %1$d nouveau chapitre + %1$d nouveaux chapitres + %1$d nouveaux chapitres + + + Chapitre %1$s et 1 autre + Chapitres %1$s et %2$d autres + Chapitres %1$s et %2$d autres + + + Pour %d titre + Pour %d titres + Pour %d titres + + + Mise à jour d\'extension disponible + %d mises à jour d\'extensions disponibles + %d mises à jour d\'extensions disponibles + + + %1$s restant + %1$s restants + %1$s restants + + + %d catégorie + %d catégories + %d catégories + + + Effectuée en %1$s avec %2$s erreur + Effectuée en %1$s avec %2$s erreurs + Effectuée en %1$s avec %2$s erreurs + + + %1$s chapitre + %1$s chapitres + %1$s chapitres + + + Suivi par %d service + Suivi par %d services + Suivi par %d services + + + %d chapitre a été sauté, soit la source ne l\'a pas, soit il a été filtré + %d chapitres ont été sautés, soit la source ne les a pas, soit ils ont été filtrés + %d chapitres ont été sautés, soit la source ne les a pas, soit il ont été filtrés + + + Hier + Il y a %1$d jours + Il y a %1$d jours + + + Chapitre suivant non lu + Les %d suivants non lus + Les %d suivants non lus + + + Chapitre suivant + %d chapitres suivants + %d chapitres suivants + + + %1$s chapitre manquant + %1$s chapitres manquants + %1$s chapitres manquants + + + 1 jour + %d jours + %d jours + + \ No newline at end of file diff --git a/i18n/src/main/res/values-fr/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/fr/strings-aniyomi.xml similarity index 93% rename from i18n/src/main/res/values-fr/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/fr/strings-aniyomi.xml index 85bf960e7e..03e86c936a 100644 --- a/i18n/src/main/res/values-fr/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/fr/strings-aniyomi.xml @@ -93,11 +93,6 @@ Catégories exclues Catégories d\'animé exclues Téléchargeur externe - - Épisode non vu suivant - %d épisodes non vus suivants - %d épisodes non vus suivants - Ne fonctionne que sur les entrées de la bibliothèque et si l\'épisode actuel et le suivant sont déjà téléchargés Synchroniser la progression après lecture Effacer le cache des chapitres @@ -118,11 +113,6 @@ Épisode non trouvé Format d\'épisode invalide Studio inconnu - - %1$s épisode - %1$s épisodes - %1$s épisodes - Supprimer les épisodes téléchargés \? Ajouter à la bibliothèque \? Ajouter un animé à la bibliothèque \? @@ -163,27 +153,12 @@ Attention : les téléchargements massifs peuvent entraîner un ralentissement des sources ou le blocage de Tachiyomi. Appuyez pour en savoir plus. Aucune vidéo trouvée Nouveaux épisodes trouvés - - Pour 1 titre - Pour %d titres - Pour %d titres - - - 1 nouvel épisode - %1$d nouveaux épisodes - %1$d nouveaux épisodes - Rien regardé récemment WebView est requis par Tachiyomi Mise à jour des paramètres par défaut des épisodes Téléchargement en pause Mises à jour des chapitres +%1$d s - - %d seconde - %d secondes - %d secondes - L\'épisode suivant n\'a pas été trouvé ! Manga Animé @@ -208,11 +183,6 @@ Sauter la fin Paramètres Forcer l\'application à revérifier les chapitres et épisodes télécharger - - Épisodes %1$s et 1 autre - Épisodes %1$s et %2$d autres - Épisodes %1$s et %2$d autres - 9 secondes 10 secondes Ne pas passer @@ -272,9 +242,4 @@ Si activé, la recherche ne va pas se concentrer sur les images-clés, permettant de faire une recherche plus précise mais plus lente Toujours utiliser un outil de téléchargement externe pour les animés Activer le passage d\'intro automatique - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-fr/strings.xml b/i18n/src/commonMain/resources/MR/fr/strings.xml similarity index 85% rename from i18n/src/main/res/values-fr/strings.xml rename to i18n/src/commonMain/resources/MR/fr/strings.xml index 899dc6025b..781798ec22 100644 --- a/i18n/src/main/res/values-fr/strings.xml +++ b/i18n/src/commonMain/resources/MR/fr/strings.xml @@ -1,16 +1,14 @@ Nom - Paramètres + File de téléchargement Bibliothèque Historique Mises à jour Sauvegarder et restaurer - Paramètres Filtre - Téléchargés Favori Non lus Retirer le filtre @@ -50,17 +48,13 @@ Partager Télécharger la page Réinitialiser - Chargement… - - Général Lecteur Téléchargements Suivi Avancé À propos - Taille de grille Portrait Paysage @@ -102,7 +96,7 @@ Gauche Droite Centre - Type de rotation par défaut + Rotation par défaut Libre Bloqué sur portrait Bloqué sur paysage @@ -110,7 +104,6 @@ V B O - Répertoire de téléchargement Désactivé Dernier chapitre lu @@ -118,43 +111,35 @@ Troisième chapitre avant le dernier lu Quatrième chapitre avant le dernier lu Télécharger les nouveaux chapitres - Services - Utilisé : %1$s Cache effacé. %1$d fichiers ont été supprimés Une erreur est survenue lors de l\'effacement du cache Effacer les cookies Cookies effacés + Effacer la base de données + Supprimer l\'historique des entrées qui ne sont pas enregistrées dans votre bibliothèque Entrées supprimées - Version - Envoyer des rapports de plantage Aident à corriger les bugs. Aucune donnée sensible ne sera envoyée - Connexion à %1$s Nom d\'utilisateur Mot de passe Se connecter Erreur inconnue - - - - En cours Inconnu Licencié Retirer de la bibliothèque - Chapitre %1$s En téléchargement (%1$d/%2$d) + Erreur Titre de la source Numéro de chapitre Par numéro de chapitre Télécharger Non lus - Suivi En cours Terminé @@ -165,12 +150,10 @@ Titre Statut Chapitres - Une catégorie avec ce nom existe déjà ! - Ceci enlèvera la date de lecture de ce chapitre. Êtes-vous sûr(e) \? + Ajouter à la bibliothèque \? Image sauvegardée - Filtre personnalisé Ajouter comme couverture Couverture mise à jour @@ -178,33 +161,22 @@ Chapitre suivant non trouvé L\'image n\'a pas pu être chargée Voulez-vous mettre cette image comme couverture ? - - - Une erreur est survenue lors du téléchargement des chapitres. Vous pouvez réessayer dans la section téléchargements - Des nouveaux chapitres ont été trouvés La mise à jour de la couverture a échoué Veuillez ajouter ce titre à votre bibliothèque avant de faire cela - Sélectionner l\'image de couverture Sélectionner fichier de sauvegarde - Télécharger Aucune mise à jour disponible - Vérification des mises à jour… - Téléchargement en cours… Appuyer pour installer Erreur lors du téléchargement Mise à jour disponible ! - - Aucun téléchargement en cours Pas de mises à jour récentes Rien de lu récemment Votre bibliothèque est vide - Téléchargement Erreur Aucune connexion disponible @@ -219,15 +191,18 @@ Pas d\'autres résultats Catégories supprimées Annuler - Manga + Catégories + Entrées de la bibliothèque Historique Application indisponible Chaque semaine + Catégorie par défaut + Téléchargement en pause Source locale + En pause Ouvrir le fichier Restaurer Dossier de sauvegarde - Sauvegardes automatiques Restauration terminée Que voulez-vous sauvegarder \? Supprimer les chapitres téléchargés ? @@ -242,7 +217,6 @@ Sauvegarde créée Restauration de sauvegarde en cours Création de sauvegarde en cours - Actualiser les métadonnées de suivi Toujours demander Inverser les boutons de volume Rogner les bordures @@ -252,7 +226,6 @@ Récents Explorer Chapitres téléchargés - Local Général Vous n\'avez aucune catégorie. Appuyez sur le bouton « + » pour en créer une afin d\'organiser votre bibliothèque. Extensions @@ -274,7 +247,6 @@ \na été copié dans le presse papier Sources non installées : %1$s Statut - Démarré Type Sélectionner les données à inclure Migrer @@ -293,7 +265,7 @@ Échec du chargement des pages : %1$s Déplacer Copier - Afficher en cas d\'appui long + Afficher les actions en appuyant longuement Ouvrir dans WebView Couleurs à 32 bits Passer les chapitres marqués comme lus @@ -307,7 +279,7 @@ Aucun résultat trouvé Sélectionnez une source depuis laquelle migrer Bibliothèque - Cette extension n’est plus disponible. + Cette extension n\'est plus disponible. Elle peut ne pas fonctionner correctement et causer des problèmes avec l\'application. Il est recommandé de la désinstaller. Format de date Mises à jour Précédent @@ -332,31 +304,17 @@ Verrouiller en cas d\'inactivité Toujours Jamais - - Après %1$s minute - Après %1$s minutes - Après %1$s minutes - Mode discret Mises à jour en attente Utiliser la zone de l\'encoche Impossible de contourner Cloudflare Veuillez mettre à jour l\'application WebView pour une meilleure compatibilité + Mises à jour des chapitres L\'écran sécurisé cache le contenu lors du changement d\'application et bloque les captures d\'écran Affichage - - %1$d nouveau chapitre - %1$d nouveaux chapitres - %1$d nouveaux chapitres - Chapitre %1$s Chapitre %1$s et %2$d autres Chapitres %1$s - - Chapitre %1$s et 1 autre - Chapitres %1$s et %2$d autres - Chapitres %1$s et %2$d autres - Cacher le contenu des notifications Recherche de nouveaux chapitres Désactiver la fonction d\'optimisation de la batterie @@ -364,31 +322,14 @@ La fonction d\'optimisation de la batterie est déjà désactivée Adresse courriel Toujours afficher la transition entre les chapitres - - Pour %d titre - Pour %d titres - Pour %d titres - Menu - Réorganiser Plus récent Plus ancien Déplacer au début Déplacer à la fin Mises à jour d\'extensions - - Mise à jour d\'extension disponible - %d mises à jour d\'extensions disponibles - %d mises à jour d\'extensions disponibles - - Consultez le site Web de WebView Mise à jour de la bibliothèque Sources - 25 % - 20 % - 15 % - 10 % - Aucun En cours Bande continue avec espaces Passer les chapitres filtrés @@ -409,39 +350,21 @@ Moins Plus Site web - Confirmer la fermeture Ch. %1$s – %2$s Licences à code source ouvert - Appuyer à nouveau pour quitter Dernière utilisée Rechercher des mises à jour %02d min, %02d s Guide des sources locales - - %1$s restant - %1$s restants - %1$s restants - Filtrer toutes les entrées dans la bibliothèque - Rechercher uniquement les sources épinglées dans la recherche globale Gris Pour cette série Réduit les bandes de couleur, mais peut impacter les performances - - %d catégorie - %d catégories - %d catégories - Mode de lecture - - Effectuée en %1$s avec %2$s erreur - Effectuée en %1$s avec %2$s erreurs - Effectuée en %1$s avec %2$s erreurs - Impossible d\'ouvrir les paramètres de l\'appareil Actualiser les couvertures de la bibliothèque Synchronisation à sens unique pour mettre à jour la progression du chapitre dans les services de suivi. Configurez le suivi des entrées individuelles à partir de leur bouton de suivi. - Cette extension ne fait pas partie de la liste des extensions officielles de Tachiyomi. + Cette extension ne fait pas partie de la liste officielle. Non officiel Vérifier s\'il y a une nouvelle couverture ou synopsis lors des mises à jour de la bibliothèque Par date de téléversement @@ -461,11 +384,6 @@ Afficher le mode de lecture Commencer Source non trouvée - - %1$s chapitre - %1$s chapitres - %1$s chapitres - Désactiver Nécessite un redémarrage de l\'application pour prendre effet Réseau @@ -482,25 +400,14 @@ Date ajoutée Mode de lecture Thème - - Suivi par %d service - Suivi par %d services - Suivi par %d services - Vous n\'avez aucune source épinglée Compléter Progression - Téléchargement terminé Erreurs Traceurs non connectés : Les sources de cette extension peuvent contenir du contenu NSFW (18+) 18+ Ceci n\'empêche pas les extensions non officielles ou potentiellement mal signalées de diffuser du contenu +18 dans l\'application. - - %d chapitre a été sauté, soit la source ne l\'a pas, soit il a été filtré - %d chapitres ont été sautés, soit la source ne les a pas, soit ils ont été filtrés - %d chapitres ont été sautés, soit la source ne les a pas, soit il ont été filtrés - Aucun chapitre trouvé Appliquer ce paramétrage par défaut \? Paramètres du chapitre @@ -552,6 +459,7 @@ Inclure : %s Aucun(e) Date de récupération du chapitre + Les entrées dans les catégories exclues ne seront pas mises à jour même si elles sont aussi dans les catégories inclues. Les entrées des catégories exclues ne seront pas mis à jour même si elles appartiennent aussi à des catégories incluses. Téléchargement automatique Appuyez pour voir les détails @@ -560,8 +468,6 @@ Paysage Portrait Désactiver le mode incognito - Crée des dossiers en fonction du titre des entrées - Enregistrer les pages dans des dossiers séparés Actions Niveaux de gris Aucune correspondance trouvée @@ -571,12 +477,11 @@ Trier par Format de chapitre invalide Chapitre non trouvé - Mode de rotation - Automatique - Mettre à jour les services de suivi lors de la mise à jour de la bibliothèque - Actualiser automatiquement les services de suivi + Rotation + Auto Restrictions : %s Tout annuler pour cette série + Source locale Erreur de partage de couverture Erreur lors de l\'enregistrement de la couverture Couverture enregistrée @@ -584,11 +489,9 @@ Manuel de suivi Désactivé Activé - Rendre les réglages de tri et d\'affichage propres à chaque catégorie + Rendre les réglages de tri propres à chaque catégorie Vous n\'avez pas encore de catégories. Commencer à télécharger - Mise à jour de la bibliothèque… (%1$d/%2$d) - Ce traqueur est uniquement compatible avec la source Komga. La sauvegarde/restauration peut ne pas fonctionner correctement si l\'optimisation MIUI est désactivée. Services qui fournissent des fonctionnalités améliorées pour des sources spécifiques. Les entrées sont automatiquement suivies lorsqu\'elles sont ajoutées à votre bibliothèque. Services avancés @@ -609,25 +512,16 @@ Maximale Sensibilité pour masquer le menu lors du défilement Inversé - Long (Court+, il y a n jours) - Court (Aujourd\'hui, Hier) - Horodatages relatifs - - Hier - Il y a %1$d jours - Il y a %1$d jours - Aujourd\'hui - Récemment Bleu canard et turquoise Authentifiez-vous pour confirmer les changements - Horodatage Apparence Par défaut Suivre Guide de démarrage Mode tablette Aider à traduire + Catégories exclues Infos sur l\'application Installez et démarrez Shizuku pour utiliser Shizuku comme installateur d\'extensions. Shizuku n\'est pas en cours d\'exécution @@ -656,12 +550,10 @@ Publication terminée Annulé FAQ et guides - 5 % Grille avec seulement la couverture Panoramique des images larges - Agrandir les images en paysage + Zoom automatique dans les images larges Qui n\'ont pas encore commencé - Commencé Sauté car la série est terminée Sauté car aucun chapitre n\'est lu Sauté car il y a des chapitres non lus @@ -679,9 +571,6 @@ Effacer les données WebView Données WebView effacées Fermer - Quand la batterie n\'est pas faible - Répéter les sources épinglées dans leurs groupes linguistiques respectifs - Afficher les sources épinglées en double Aucune source installée trouvée Nombre de non-lus Aucune source trouvée @@ -722,29 +611,22 @@ Raz-de-marée Téléchargement anticipé Téléchargement anticipé pendant la lecture - - Chapitre suivant non lu - Les %d suivants non lus - Les %d suivants non lus - - Fonctionne seulement sur les entrées de la bibliothèque et si le chapitre actuel et le suivant sont déjà téléchargés + Fonctionne seulement si le chapitre actuel et le suivant sont déjà téléchargés. Êtes-vous sûr(e) \? Populaire - Diviser les grandes images (BETA) Multiple Dernière mise à jour de la bibliothèque le : %s Vous êtes sur le point de retirer « %s » de votre bibliothèque Autorisations de stockage non accordées Recherche… - Passées car la série ne nécessite pas de mise à jour - Une erreur inattendue s\'est produite + Ignorée car la série ne nécessite pas de mises à jour + Oups ! Thème, format de la date et de l\'heure Téléchargement automatique, téléchargement anticipé Synchronisation unidirectionnelle de la progression, synchronisation améliorée Sauvegardes manuelles et automatiques Rapports de plantage, optimisations de la batterie Redémarrer l\'application - Langage d\'application, notifications Sources, extensions, recherche globale Catégories, mise à jour globale, faire glisser le chapitre Mode de lecture, affichage, navigation @@ -754,7 +636,37 @@ Chaîne d\'agent utilisateur invalide Titre inconnu À l\'instant - File de téléchargement + Ouvrir un titre au hasard + Les versions de F-Droid ne sont pas officiellement prises en charge. +\nAppuyez pour en savoir plus. + Aucune entrée trouvée dans cette catégorie + Vérification des téléchargements + Ceci supprimera la date de début que vous avez précédemment sélectionnée dans la base de données de %s + Retirer la date \? + Ceci supprimera la date de fin que vous aviez précédemment sélectionnée dans la base de données de %s + Invalider l\'index des téléchargements + Statistiques + Aperçu + Total + Local + Commencé + Téléchargé + La catégorie est vide + Entrées + Dans la mise à jour globale + Lus + Traqueurs + Utilisé + s. o. + %d j + %d h + %d min + %d s + Pas maintenant + Entrées terminées + Durée de lecture + Entrées suivies + Note moyenne Copié dans le presse-papier Ignorer les chapitres en double Un titre de votre bibliothèque porte le même nom. @@ -764,20 +676,10 @@ Disponible mais la source n\'est pas installée : %s *obligatoire Masquer les entrées déjà présentes dans la bibliothèque - - Chapitre suivant - %d chapitres suivants - %d chapitres suivants - Copier dans le presse-papier Mettre à jour la catégorie Diviser les grandes images Superposition - - %1$s chapitre manquant - %1$s chapitres manquants - %1$s chapitres manquants - Inverser l\'orientation des pages larges retournées Tourner les pages larges pour qu\'elles rentrent Informations de débogage @@ -786,4 +688,30 @@ Glissement de chapitre Action de glisser à droite Appuyez deux fois pour zoomer - \ No newline at end of file + Recherche mensuelle (28 jours) + Vérification tardive 10+ + Abandonné \? En retard de 20+ et 2 mois + Période de contrôle réussie + Prochaine mise à jour prévue + Période de diffusion prévue + Définir l\'intervalle + Valider + Intervalle de recherche personnalisé + Appuyez ici pour de l\'aide sur Cloudflare + Débloquer %s + Synchronisation de la bibliothèque + Intervalles + Synchronisation de la bibliothèque complété + Licenciés - Aucun chapitres à montrer + Aucune connexion internet + Indice de téléchargement invalidé + Ignoré car aucune sortie n\'était attendue aujourd\'hui + A des résultats + Estimer chaque + HTTP %d, consulter le site Web dans WebView + Configurer pour mettre à jour tous les + Personnaliser l\'intervalle + Déplacer la série vers le bas + Supprimez également de %s + Impossible de joindre %s + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/gl/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/gl/plurals-aniyomi.xml new file mode 100644 index 0000000000..da5afbf89f --- /dev/null +++ b/i18n/src/commonMain/resources/MR/gl/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/gl/plurals.xml b/i18n/src/commonMain/resources/MR/gl/plurals.xml new file mode 100644 index 0000000000..0c75de0e05 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/gl/plurals.xml @@ -0,0 +1,63 @@ + + + + %d categoría + %d categorías + + + Despois de 1 minuto + Despois de %1$s minutos + + + Seguinte capítulo sen ler + Seguintes %d capítulos sen ler + + + Queda %1$s + Quedan %1$s + + + Onte + Fai %1$d días + + + Feito en %1$s con %2$s erro + Feito en %1$s con %2$s erros + + + %d servizo de seguemento + %d servizos de seguemento + + + Hai unha actualización dunha extensión + Hai actualizacións de %d extensións + + + %1$s capítulo + %1$s capítulos + + + Capítulos %1$s e 1 máis + Capítulos %1$s e %2$d máis + + + Saltouse %d capítulo: falta na fonte ou ignorouse + Saltáronse %d capítulos: faltan na fonte ou ignoráronse + + + Por %d elemento + Por %d elementos + + + %1$d capítulo novo + %1$d capítulos novos + + + O seguinte capítulo + Os seguintes %d capítulos + + + Falta %1$s capítulo + Faltan %1$s capítulos + + \ No newline at end of file diff --git a/i18n/src/main/res/values-gl/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/gl/strings-aniyomi.xml similarity index 51% rename from i18n/src/main/res/values-gl/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/gl/strings-aniyomi.xml index d375816bdc..964ec1d1ea 100644 --- a/i18n/src/main/res/values-gl/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/gl/strings-aniyomi.xml @@ -12,32 +12,4 @@ Despois de marcar manualmente como lido Despois de ler Eliminar capítulos marcados - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-gl/strings.xml b/i18n/src/commonMain/resources/MR/gl/strings.xml similarity index 87% rename from i18n/src/main/res/values-gl/strings.xml rename to i18n/src/commonMain/resources/MR/gl/strings.xml index b95e6f383a..3204b7c8f7 100644 --- a/i18n/src/main/res/values-gl/strings.xml +++ b/i18n/src/commonMain/resources/MR/gl/strings.xml @@ -7,15 +7,11 @@ Historial Actualizacións Biblioteca + Cola de baixadas Último capítulo lido Deshabilitado Ubicación personalizada Localización das baixadas - 25% - 20% - 15% - 10% - Ningún Recheo lateral Lendo Modo de lectura @@ -82,7 +78,8 @@ As fontes desta extensión poden ter contido NSFW (+18) +18 Esta extensión non é da lista de extensións oficiais de Tachiyomi. - Esta extensión xa non está dispoñible. Pode que non funcione ben e cause problemas na aplicación. Recoméndase desinstalala. Extensión non confiable + Esta extensión xa non está dispoñible. Pode que non funcione ben e cause problemas na aplicación. Recoméndase desinstalala. + Extensión non confiable Non confiable Desinstalar Non oficial @@ -96,11 +93,8 @@ Actualizar Actualizacións pendentes Todas - - %d categoría - %d categorías - Preguntar sempre + Categoría por defecto Procurar novas portadas e detalles cando se actualice a biblioteca Refrescar os metadatos automaticamente Co estado de \"Rematados\" @@ -122,10 +116,6 @@ Esconde os contidos das notificacións O modo discreto esconde os contidos da app ao cambiar de app e bloquea as capturas de pantalla Modo discreto - - Despois de 1 minuto - Despois de %1$s minutos - Nunca Sempre Bloquear por inactividade @@ -137,7 +127,6 @@ Fontes NSFW (+18) Seguridade e privacidade Xestionar notificacións - Confirmar a saída Formato da data Activado Desactivado @@ -167,7 +156,6 @@ Mover ao principio Máis antigos Os máis novos - Reordenar Ordenar Cancelar todos Cancelar @@ -225,10 +213,10 @@ Filtro Menú Axustes - Preme atrás novamente para saír Historial Seguimento Capítulos + Categorías Non tes categorías. Toca o botón cun máis para crear unha e organizar a túa biblioteca. A túa biblioteca está vacía Explorar @@ -249,7 +237,6 @@ En curso Descoñecido Non se atoparon capítulos - Cola de baixadas Mover a serie ao primeiro posto Comezar a descarga agora Tema da aplicación @@ -258,7 +245,6 @@ Baixar os rexistros de erros, optimizacións de batería Maremoto Hoxe - Con capítulos sin ler Os elementos das categorías excluídas non se actualizarán aínda se están tamén nas categorías incluídas. Versión Instalando a extensión… @@ -268,8 +254,6 @@ Invertido Vertical Ambos - Gardar as páxinas en carpetas separadas - Crea carpetas segundo o título dos elementos Vertical Horizontal Mellora o rendemento do lector @@ -291,15 +275,9 @@ Desactivar o modo incógnito Iniciar sesión Capítulos baixados - Da biblioteca Eliminar categoría Dispoñible, mais a fonte non se instalou: %s Fixados - - Seguinte capítulo sen ler - Seguintes %d capítulos sen ler - - Amosar o número de capítulos por ler na icona de actualizacións Excluír: %s Saltar os capítulos duplicados Baixar automaticamente durante a lectura @@ -314,8 +292,6 @@ Nome do axente de usuario (\"user agent\") por defecto O axente de usuario non pode estar vacío Usado: %1$s - Borrar a caché dos capítulos ao pechar a aplicación - Actualizar o estado, as puntuacións e os últimos capítulos lidos dende os servizos de seguemento Non se puideron abrir os axustes do dispositivo Enviar informes de erros Lapelas @@ -343,7 +319,6 @@ Os elementos das categorías excluídas non se baixarán aínda se están en categorías incluídas. Baixa Creando a copia de seguridade - Idioma da interface, notificacións Categorías, actualización global, accións ao arrastrar Modo de lectura, aparencia e navegación Baixadas automáticas e por adiantado @@ -353,7 +328,6 @@ Actualizar todo A sincronización destos servizos é unidireccional. Configura o seguemento para os elementos individuais dende o seus botóns de seguemento. Seguir - Só buscar as fontes fixadas na búsqueda global Hai %1$d elementos na base de datos que non están na biblioteca Versión Mostrar brevemente ao abrir o lector @@ -364,15 +338,12 @@ Baixados Idioma da aplicación ErroInterno: Revisa o rexistro de erros para máis información - Marcas de tempo relativas - Cando a batería non estea baixa Información da aplicación Shizuku non se está executando Instala e inicia Shizuku para utilizalo como instalador de extensións. Automático En forma de L Desprazarse polas imaxes anchas - Actualizar o progreso ao rematar a lectura Servizos Cancelouse a restauración Rede @@ -384,15 +355,11 @@ Servizos mellorados Estes servizos proporcionan funcións melloradas para fontes concretas. Faise un seguemento automático dos elementos ao engadilos á biblioteca. Localización da copia de seguridade - Copias de seguridade automáticas Xa se está facendo unha copia de seguridade Compartir os rexistros de erros Error ao compartir a portada Produciuse un erro ao borrar - Curto (Hoxe, Onte) - Longo (Curto+, fai n días) Varios idiomas - Separar as imaxes altas (BETA) Horizontal Esquerda Ampliar a imaxe en horizontal @@ -415,7 +382,6 @@ O arquivo da copia de seguridade non é válido A copia de seguriade non contén ningún elemento da biblioteca. DNS por HTTPS (DoH) - Marcas de tempo Cada 3 días Filtra tódolos elementos da túa biblioteca Engadir á biblioteca\? @@ -428,24 +394,16 @@ Non hai nada que borrar Borrar os datos do WebView Restablecer o modo de lectura e a orientación de tódalas series - Actualizar o seguemento Número de non lidos - Mostrar o elemento Data de obtención dos capítulos Advertencia Identifícate para confirmar o cambio Fonte local Quitar todo - Recentemente Lavanda Inverter as zonas de toque Dereita - 5% Guía de seguemento - - Queda %1$s - Quedan %1$s - En pausa Por número de capítulo Preguntas frecuentes e guías @@ -458,8 +416,6 @@ Azul mariño e turquesa Yin e Yang Modo negro puro - Actualizar automaticamente os servizos de seguemento - Actualizar os servizos de seguemento ao actualizar a biblioteca Incluír: %s Non se puido baixar a listaxe de extensións Borrar a base de datos @@ -468,7 +424,6 @@ Só en conexións ilimitadas Borráronse os datos do WebView Procura global… - Última comprobación de actualizacións Número total de entradas Agora non Estilo Kindle @@ -502,22 +457,16 @@ Rexistro detallado Só os baixados Modo incógnito - Pausar o historial de lectura Correo electrónico Na biblioteca Título descoñecido Pechar Tema, formatos de data e hora Aparencia - Botón de seguir lendo Mostrar o número de elementos Cancelar todo para esta serie Por data de subida Preme para ver os detalles do erro - - Onte - Fai %1$d días - Omitir actualizacións Restricións: %s Opcións de ordenación e visualización por categoría @@ -535,19 +484,12 @@ Restaurar a biblioteca dende unha copia de seguridade Creouse a copia de seguridade Fallou a restauración da copia de seguridade - - Feito en %1$s con %2$s erro - Feito en %1$s con %2$s erros - Servizos de seguemento sen conectar: Restaurando a copia de seguridade Xa se está facendo a restauración Borrar o historial dos elementos que non estean gardados na túa biblioteca Cookies borradas - Borrar a caché dos capítulos Borrouse a caché. Elimináronse %1$d ficheiros - Forzar á aplicación a comprobar de novo os capítulos baixados - Estás seguro\? Perderanse os capítulos lidos e o progreso dos elementos que non estean na biblioteca Restablecer os axustes do lector en cada serie Desactivar a optimización de batería A optimización de batería xa está desactivada @@ -558,8 +500,6 @@ Iniciar sesión en %1$s Actualizando a categoría Erro descoñecido - Aplicar tamén a tódolos elementos da miña biblioteca - Procurando actualizacións… En pausa Título da fonte Por número de capítulo @@ -571,7 +511,6 @@ Non hai ningún capítulo anterior Non se atopou ningunha páxina Non foi posible descargar os capítulos. Podes tentar de novo na sección de descargas - Non se puideron descargar os capítulos por falta de espazo de almacenamento Capítulo %1$s Omitiuse porque a serie está rematada Actualiza a aplicación de WebView para mellorar a compatibilidade @@ -585,10 +524,6 @@ Isto eliminará a data de comezo seleccionada de %s Está dispoñible unha nova versión oficial. Preme para saber como migrar das versións non oficiais de F-Droid. Páxina seguinte - - %d servizo de seguemento - %d servizos de seguemento - Migrar Eliminado da biblioteca Máis @@ -637,12 +572,7 @@ %s pechouse por un problema inesperado. Aconsellámoste que compartas os rexistros de erros na canle de soporte no Discord (en inglés). Reinicia a aplicación Non se atopou ninguna fonte instalada - Advertencia: As baixadas grandes poden facer que as fontes se volvan máis lentas e/ou bloqueen Tachiyomi. Preme para saber máis. Abrir no GitHub - - Hai unha actualización dunha extensión - Hai actualizacións de %d extensións - Xestor de descargas Erro Descargas en pausa @@ -656,7 +586,6 @@ Non hai ningún capítulo máis Non se puideron cargar as páxinas: %1$s Non se atopou a fonte - Actualizando biblioteca… (%1$d/%2$d) En uso %dd Se necesitas axuda para arranxar os erros de actualización da biblioteca, consulta %1$s @@ -664,19 +593,11 @@ Esta versión de Android xa non ten soporte Non hai ningunha conexión de rede dispoñible Eliminar da biblioteca - - %1$s capítulo - %1$s capítulos - Actualizáronse os axustes por defecto dos capítulos Ver os elementos da biblioteca actualizados recentemente Vas eliminar \"%s\" da túa biblioteca Non se atopou a o capítulo seguinte Cargando páxinas… - - Capítulos %1$s e 1 máis - Capítulos %1$s e %2$d máis - Rematado: Páxina: %1$d Produciuse un erro ao gardar a imaxe @@ -690,7 +611,6 @@ Rematada Omitidas Actualizacións de capítulos - Tachiyomi necesita WebView Non se atopou a páxina %d ao separar Xeral Vaia! @@ -723,7 +643,6 @@ Páxina anterior Lista de lectura Estás seguro\? - Abrir o sitio web no WebView Outros Estado descoñecido Fonte non instalada: %1$s @@ -734,13 +653,8 @@ Non se atoparon coincidencias Queres usar esta imaxe como portada\? Xa hai unha categoría con este nome! - Reiniciar tódolos capítulos deste elemento Modo de lectura O formato RARv5 non está soportado - - Saltouse %d capítulo: falta na fonte ou ignorouse - Saltáronse %d capítulos: faltan na fonte ou ignoráronse - Actualizando a biblioteca Última actualización da biblioteca: %s Cap. %1$s - %2$s @@ -750,16 +664,8 @@ %dseg Elementos en seguimento Puntuación media - - Por %d elemento - Por %d elementos - Actualizacións omitidas: %1$d Omitiuse porque non hai capítulos lidos - - %1$d capítulo novo - %1$d capítulos novos - Capítulo %1$s e %2$d máis Capítulos %1$s Omitiuse porque esta serie non require actualizarse @@ -773,14 +679,6 @@ Actualizar categoría Ocultar elementos que xa estén na biblioteca Copiar ao portapapeis - - O seguinte capítulo - Os seguintes %d capítulos - - - Falta %1$s capítulo - Faltan %1$s capítulos - Xirar as páxinas anchas para adaptalas á pantalla Voltear a orientación das páxinas anchas xiradas Superposición diff --git a/i18n/src/commonMain/resources/MR/he/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/he/plurals-aniyomi.xml new file mode 100644 index 0000000000..a4043dde84 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/he/plurals-aniyomi.xml @@ -0,0 +1,45 @@ + + + + פרק %1$s + %1$s פרקים + %1$s פרקים + + + + הפרק הבא + הפרקים הבאים + הפרקים הבאים + + + + לסדרה אחת + ל-%d סדרות + ל-%d סדרות + + + + פרקים %1$s ועוד 1 + פרקים %1$s ו-%2$d נוספים + פרקים %1$s ו-%2$d נוספים + + + + הפרק הבא שלא נצפה + ה-%d פרקים הבאים שלא נצפו + + + + + %d שנייה + %d שניות + %d שניות + + + + פרק אחד חדש + %1$d פרקים חדשים + %1$d פרקים חדשים + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/he/plurals.xml b/i18n/src/commonMain/resources/MR/he/plurals.xml new file mode 100644 index 0000000000..548c4564c2 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/he/plurals.xml @@ -0,0 +1,99 @@ + + + + עדכון לתוסף זמין + עדכונים ל-%d תוספים זמינים + עדכונים ל-%d תוספים זמינים + עדכונים ל-%d תוספים זמינים + + + פרקים %1$s ואחד נוסף + פרקים %1$s ו-%2$d נוספים + פרקים %1$s ו-%2$d נוספים + פרקים %1$s ו-%2$d נוספים + + + פרק אחד חדש + %1$d פרקים חדשים + %1$d פרקים חדשים + %1$d פרקים חדשים + + + עבור כותר אחד + עבור %d כותרים + עבור %d כותרים + עבור %d כותרים + + + לאחר דקה אחת + לאחר שתי דקות + לאחר %1$s דקות + לאחר %1$s דקות + + + קטגורייה אחת + שתי קטגוריות + %d קטגוריות + %d קטגוריות + + + אתמול + לפני יומיים + לפני %1$d ימים + לפני %1$d ימים + + + פרק אחד + שני פרקים + %1$s פרקים + %1$s פרקים + + + 1 נשאר + 2 נשארו + %1$s נשארו + + + + הושלם ב %1$s עם שגיאה אחת + הושלם ב %1$s עם שתי שגיאות + הושלם ב %1$s עם %2$s שגיאות + + + + דולג פרק אחד, המקור חסר או שהוא סונן החוצה + דולגו שני פרקים, המקור חסר או שהם סוננו החוצה + דולגו %d פרקים, המקור חסר או שהם סוננו החוצה + + + + הפרק הבא + שני הפרקים הבאים + %d הפרקים הבאים + + + + מעקב אחד + שני מעקבים + %d מעקבים + + + + הפרק הבא שלא נקרא + שני הפרקים הבאים שלא נקראו + %d הפרקים הבאים שלא נקראו + + + + יום אחד + יומיים + %d ימים + + + + חסר פרק אחד + חסרים שני פרקים + חסרים %1$s פרקים + + + \ No newline at end of file diff --git a/i18n/src/main/res/values-he/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/he/strings-aniyomi.xml similarity index 92% rename from i18n/src/main/res/values-he/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/he/strings-aniyomi.xml index 4caefa1bff..8039bea36a 100644 --- a/i18n/src/main/res/values-he/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/he/strings-aniyomi.xml @@ -37,48 +37,6 @@ WebView נדרש עבור Aniyomi הורדת החלק מושהית עדכונים לפרק/חלק - - פרק %1$s - %1$s פרקים - %1$s פרקים - - - - הפרק הבא - הפרקים הבאים - הפרקים הבאים - - - - לסדרה אחת - ל-%d סדרות - ל-%d סדרות - - - - פרקים %1$s ועוד 1 - פרקים %1$s ו-%2$d נוספים - פרקים %1$s ו-%2$d נוספים - - - - הפרק הבא שלא נצפה - ה-%d פרקים הבאים שלא נצפו - - - - - %d שנייה - %d שניות - %d שניות - - - - פרק אחד חדש - %1$d פרקים חדשים - %1$d פרקים חדשים - - חיפוש מנגה גלובלי הורד חלקים שלא נקראו הורדת פרקים שלא נראו diff --git a/i18n/src/main/res/values-he/strings.xml b/i18n/src/commonMain/resources/MR/he/strings.xml similarity index 68% rename from i18n/src/main/res/values-he/strings.xml rename to i18n/src/commonMain/resources/MR/he/strings.xml index 1175a32e85..53b3a98478 100644 --- a/i18n/src/main/res/values-he/strings.xml +++ b/i18n/src/commonMain/resources/MR/he/strings.xml @@ -1,7 +1,9 @@ עדכונים לתוסף + עדכונים לפרק נפוץ + ההורדות מושהות אין חיבור רשת זמין אין חיבור Wi-Fi זמין לא ניתן להוריד את הפרק בגלל שגיאה בלתי צפויה @@ -11,44 +13,19 @@ אין לך קטגוריות. לחץ על כפתור הפלוס כדי ליצור אחד לארגון הספרייה שלך. הספרייה שלך ריקה אין הורדות - - עדכון לתוסף זמין - עדכונים ל-%d תוספים זמינים - עדכונים ל-%d תוספים זמינים - עדכונים ל-%d תוספים זמינים - גרסה חדשה זמינה! שגיאה בהורדה - לחץ כדי להתקין + לחץ כדי להתקין עדכון מוריד… - מחפש עדכונים… אין עדכונים חדשים זמינים הורדה בחר קובץ גיבוי בחר תמונת כריכה - אנא הוסף את המנגה לספרייה שלך לפני שתעשה זאת + אנא הוסף את הפריט לספרייה שלך לפני שתעשה זאת עדכון הכריכה נכשל - - פרקים %1$s ואחד נוסף - פרקים %1$s ו-%2$d נוספים - פרקים %1$s ו-%2$d נוספים - פרקים %1$s ו-%2$d נוספים - פרקים %1$s פרק %1$s ו-%2$d נוספים פרק %1$s - - פרק אחד חדש - %1$d פרקים חדשים - %1$d פרקים חדשים - %1$d פרקים חדשים - - - עבור כותר אחד - עבור %d כותרים - עבור %d כותרים - עבור %d כותרים - נמצאו פרקים חדשים מחפש פרקים חדשים לא ניתן להוריד פרקים. אפשר לנסות שוב בדף ההורדות @@ -77,7 +54,6 @@ הקטגוריות נמחקו קטגוריה עם שם זה כבר קיימת! סוג - הותחל סטטוס סטטוס כותרת @@ -94,8 +70,11 @@ לפי מקור מספר פרק כותרת + מושהה + שגיאה מוריד (%1$d/%2$d) פרקים %1$s + להוסיף לספרייה\? המקור לא הותקן: %1$s למחוק פרקים שירדו\? נוסף לספרייה @@ -107,10 +86,8 @@ חיפוש גלובלי… אחר מאנגה מקומית - בדוק אתר ב-WebView לא נמצאו תוצאות אין תוצאות נוספות - מקומי מעדכן קטגוריה שגיאה לא ידועה אתה עכשיו מנותק @@ -134,6 +111,7 @@ עדכונים ממתינים הכל שאל תמיד + קטגוריית ברירת המחדל במצב \"נגמרה\" טוען הגבלות עדכונים אוטומטיים @@ -149,17 +127,11 @@ מאונך הסתר תוכן התראות מסך מאובטח מסתיר את תוכן האפליקציה בעת החלפת אפליקציות וחוסם צילומי מסך - - לאחר דקה אחת - לאחר שתי דקות - לאחר %1$s דקות - לאחר %1$s דקות - לעולם לא תמיד נעילה כאשר אינו פעיל - דורש ביטול נעילה - אבטחה + ביטול נעילה דרוש + אבטחה ופרטיות ניהול התראות תבנית תאריך פעיל @@ -185,11 +157,9 @@ עבור לראש הדף הישן ביותר החדש ביותר - סדר מחדש מיון בטל הכל תצוגה - ירד מעקב עוד ביטול @@ -216,6 +186,8 @@ עוזר בעדכוני ספריות רקע וגיבויים השבתת האופטימיזציה של הסוללה הרשומות נמחקו + מחק את היסטוריית הפריטים שאינם שמורים בספריה שלך + נקה את מסד הנתונים עוגיות נוקו נקה עוגיות אירעה שגיאה במהלך הניקוי @@ -228,7 +200,6 @@ גיבוי נוצר מספר גיבויים מקסימלי תדירות גיבוי - גיבויים אוטומטיים מיקום גיבוי שחזר ספרייה מקובץ גיבוי שחזור גיבוי @@ -267,10 +238,10 @@ למתוח התאם לגודל מסך סוג קנה מידה - Webtoon - אנכי - ימין לשמאל - שמאל לימין + רצועה מוארכת + סידור עמודים (אנכי) + סידור עמודים (ימין לשמאל) + סידור עמודים (שמאל לימין) ברירת המחדל של מצב הקריאה שחור לבן @@ -292,7 +263,7 @@ הנפשת מעברי דפים הצג תוכן באזור החתוך תוסף לא מאומת - תוסף זה אינו זמין עוד. + תוסף זה אינו זמין עוד. ייתכן שאינו פועל כצפוי ויכול לגרום לבעיות באפליקציה. מומלץ להסיר את התקנת התוסף. מסך מלא הוסף ערוך @@ -325,24 +296,22 @@ היסטוריה עדכונים ספרייה + תור ההורדות הגדרות היסטוריה פרקים - מנגה + פריטים בספריה + קטגוריות שם - לחץ אחורה שוב כדי לסגור - שום דבר נקרא לאחרונה + שום דבר לא נקרא לאחרונה אין עידכונים אחרונים סומן - לאחרונה - קצר (היום, אתמול) - רענון עוקבים אוטומטית ברירת המחדל ערכת הנושא של האפליקציה התחל להוריד עכשיו נעץ מסך מאובטח - פריטים לשורה + גודל רשת עקוב אחר המערכת בדוק אם יש כריכה ופרטים חדשים בעת עדכון הספרייה סה\"כ פריטים @@ -363,19 +332,17 @@ מצב קריאה מעקב נושא - ארוך (קצר+, לפני n ימים) - אשר יציאה מקורות NSFW (18+) הצג ברשימות מקורות ותוספים זה לא מונע תוספים לא רשמיים או תוספים שעלולים לסמן באופן שגוי מלהציג תוכן NSFW (18+) בתוך האפליקציה. היום תצוגה - עדכן עוקבים בעת עדכון הספרייה אפשר הכל השבת הכל התחל העברה רשת נוחה + מקור מקומי טורקיז צהבהב מצב שחור כהה טהור ירוק תפוח @@ -391,10 +358,8 @@ תאריך הוספה תאריך האחזור של הפרקים דינמי - התחיל + פריט הנמצא בקטגוריית מנועי העדכונים לא יעודכן גם אם הוא נכלל בקטגורייה אחרת שכן מתעדכנת. העבר סדרה לראש - חותמת זמן - חותמות זמן קשורות מיושן זה עוד לא התחיל עדכן הכל @@ -402,26 +367,14 @@ ההרחבה הזאת לא נמצאת ברשימת ההרחבות הרשמיות של Tachiyomi. עלול להכיל תוכן שלא מתאים למקום העבודה (18+) מתקין הרחבה… - - קטגורייה אחת - שתי קטגוריות - %d קטגוריות - %d קטגוריות - כלול: %s הראה לזמן קצר כשפותחים את מצב הקריאה הראה מצב קריאה בלתי רשמי פרטי האפליקצייה - דלג על עדכוני כותרות + דלג על עדכוני פריטים נכשל בקבלת רשימת ההרחבות שו\"ת ומדריכים - - אתמול - לפני יומיים - לפני %1$d ימים - לפני %1$d ימים - 18+ אין כל 3 ימים @@ -440,15 +393,13 @@ סוג הסיבוב מאונך מאוזן - 5% - 10% - 15% רגישות החבאת התפריט בגלילה הכי גבוה גבוה נמוך הכי נמוך - מנגה הנמצאת בקטגוריית מנועי ההורדות לא תעודכן גם אם היא נכללת בקטגוריה אחרת שכן נכללת (בהורדות). + קטגוריות מוחרגות + פריט הנמצא בקטגוריית מנועי ההורדות לא יעודכן גם אם הוא נכלל בקטגוריה אחרת שכן נכללת (בהורדות). שמור כארכיון CBZ שירותים משופרים גבול @@ -456,41 +407,29 @@ שמאל הקודם קריאה - 20% - 25% מצב קריאה - ללא הורדה אוטומטית אפור - אנכי מתמשך - עמודים + רצועה מוארכת עם רווחים + סידור עמודים מאונך הפוך - שמור דפים בתיקיות נפרדות אנכי שניהם פעולות - הראה בלחיצה ארוכה + הצג פעולות בלחיצה ארוכה אוטומטי מנוע - צור תיקיות בהתאם לכותרת המנגה - שירותים המספקים שירותים משופרים למקורות ספציפיים. מנגות יהיו במעקב אוטומטי אחרי הוספה לספרייה שלך. + שירותים המספקים שירותים משופרים למקורות ספציפיים. פריטים יהיו במעקב אוטומטי אחרי הוספה לספרייה שלך. מקורות חסרים: קובץ גיבוי לא תקין - הגיבוי לא מכיל שום מנגה. - כלול רק מקורות נעוצים + הגיבוי לא מכיל שום פריטים. מעקב - יש %1$d מנגה שנמצאות במסד הנתונים אבל לא בספרייה + יש %1$d פריטים שנמצאים במסד הנתונים אבל לא בספרייה לשוניות חפש את \"%1$s\" גלובלית מצב לא ידוע מורשה, בעל רישיון הפרסום הסתיים - - פרק אחד - שני פרקים - %1$s פרקים - %1$s פרקים - נכשלה ההעתקה ללוח לפי תאריך העלאה הכריכה נשמרה @@ -527,36 +466,24 @@ דפדפן לא נקרא קריאה - - 1 נשאר - 2 נשארו - %1$s נשארו - %1$s נשארו - התחברות נעוץ %02d דקות, %02d שניות השחזור בוטל - עדכונים אוטומטיים מאוד מומלצים. רצוי לשמור עותקים נוספים במקומות אחרים. - מסד הנתונים נקי + רצוי לשמור עותקים נוספים של גיבויים במקומות אחרים בנוסף. + אין מה לנקות בדוק עדכונים סדר ע\"י תאריך מחבר לא ידוע מצב פרטי - סינון כל המנגה בספרייה שלך + סינון כל הפריטים בספרייה שלך אתר מידע שגיאה בשמירת התמונה %1$s: %2$s עמוד %3$d ביטול מצב פרטי הורדה - - הושלם ב %1$s עם שגיאה אחת - הושלם ב %1$s עם שתי שגיאות - הושלם ב %1$s עם %2$s שגיאות - הושלם ב %1$s עם %2$s שגיאות - רשת בוטל/ה בתוך הספרייה @@ -583,28 +510,20 @@ נקה היסטוריה נכשל איפוס הגדרות מצב הקריאה לא נקראו - אין קצת סוללה - הגדרות מיון ותצוגה לכל קטגוריה בנפרד + הגדרות מיון לכל קטגוריה בנפרד מקור לא נמצא %1$d עדכונים דולגו גרסת האנדרואיד הזאת כבר לא נתמכת - ההורדה הושלמה רשת רק של הכריכות פתח את יומן האירועים %1$d עדכונים נכשלו - הגדל תמונה אופקית - משפר את ביצועי מצב הקריאה ע\"י חיתוך תמונות גבוהות שירדו. + בצע קירוב לתמונות אופקיות באופן אוטומטי + משפר את ביצועי מצב הקריאה דולג בגלל שהסדרה נגמרה דולג בגלל שיש פרקים שלא נקראו דולג בגלל שאין פרקים שנקראו סגור דולגו - - דולג פרק אחד, המקור חסר או שהוא סונן החוצה - דולגו שני פרקים, המקור חסר או שהם סוננו החוצה - דולגו %d פרקים, המקור חסר או שהם סוננו החוצה - דולגו %d פרקים, המקור חסר או שהם סוננו החוצה - מפחית פסים, אך עשוי להשפיע על הביצועים שגיאות אפס את הגדרות מצב הקריאה של כל סדרה בנפרד @@ -613,11 +532,10 @@ הראה את פרישת מיקומי הלחיצה אתה בטוח\? כל ההיסטוריה תמחק. מדריך נדידת מקורות - מעדכן ספרייה... (%1$d/%2$d) פורמט פרק לא תקין בהפסקה האם תרצה למחוק את הקטגוריה %s\? - פיצול לשני עמודים + פצל עמודים רחבים כמו ספר אלקטרוני גרסה כיסוי @@ -625,20 +543,178 @@ שפה פילטר צבע משתלב להכפיל - הראה מקורות שמורים כפולים מחק קטגוריה הגבלה מורשת שפת אפליקציה - היפוך שני העמודים + הפוך מיקום של עמודים מפוצלים מדריך מעקב מחק הכל - אם המקום של הפיצול עמוד לא תואם לכיוון הקריאה + אם המקום של העמוד המפוצל לא תואם לכיוון הקריאה כלום איזורי נגיעה הפורמט RARv5 לא נתמך חיפוש… פתיחת פריט אקראי מדריך למתחיל -תור ההורדות - \ No newline at end of file + סטטיסטיקות + מקומי + *דרוש + שגיאה פנימית: בדוק ביומני קריסה למידע נוסף + נעילת אפליקציה, מסך מוגן + אתה עומד למחוק את \"%s\" מהספריה שלך + הותחלו + הורדו + גלים + קבע מרווח זמן + קבע מרווח זמן מותאם מראש לטעינה + טען חודשית (28 ימים) + כותרת לא מוכרת + בחר מרווח זמן מותאם אישית + מנהל ההורדות + HTTP %d, בדוק באתר ב-WebView + אין חיבור אינטרנט + קטגוריה ריקה + קטגוריית עדכון + מקורות, הרחבות, חיפוש כללי + מצב קריאה, תצוגה, ניווט + העתק ללוח הכתיבה + הגדרות פרק דיפולטי עודכנו + לא עכשיו + בודק הורדות + מחק הורדות + בדוק 10+ באיחור + נפל\? באיחור 20+ וחודשיים + תקופת בדיקה עברה + העדכון הצפוי הבא + הורד קבצי קריסה, אופטימיזציה לסוללה + לבנדר + %d בכל שורה + לחץ כאן לעזרה עם Cloudflare + עמוד %d לא נמצא בעת פיצול + צפה בפריטי הספריה העדכניים ביותר + נכשל במציאת כתובת עמוד %d + כבר קיים פריט בספריה בעל אותו שם. +\n +\nלהמשיך בכל זאת\? + הורדה אוטומטית, הורד את הבאים + נושא, פורמט תאריך וזמן + קטגוריות, עדכון כללי, החלקת פרק + סנכרון חד צדדי, סנכרון משופר + מדריך וגיבויים אוטומטיים + לא נמצאו פריטים בקטגוריה זו + בסדר + ספריה עודכנה לאחרונה ב: %s + שטח תמונה רחבה + הסתר פריטים שכבר בספרייה + הרשאות אחסון לא ניתנו + אין פרטי ספרייה לגיבוי + נכשל ביצירת קובץ גיבוי + מחרוזת משתמש לא תקינה + איפוס מחרוזת משתמש דיפולטית + לא הצליח לפתוח הגדרות מכשיר + לוג מפורט + הדפס דוחות שגיאה מפורטים ליומן המערכת (מוריד ביצועים לאפליקציה) + שכבת על + %d ימים + פתח ב-GitHub + פעולה בהחלקה ימינה + בטל תוקף של אינדקס ההורדות + זמין אבל המקור לא מותקן: %s + סנכרון חד צדדי לעדכון ההתקדמות בפרקים בשיקות המעקב. קבע מעקב עבור פריטים ספציפיים מכפתור המעקב שלהם. + פצל תמונה מוארכת + שומר דוח שגיאות לקובץ עבור שיתוף עם המפתחים + כריכה מותאמת אישית + להסיר תאריך\? + הורד הלאה + פעילות רקע + פריטים במעקב + מחרוזת משתמש דיפולטית + מעבר פרק + בעל רישיון - אין פרקים להראות + הועתק ללוח כתיבה + האם אתה בטוח\? + המקור לא נתמך + לא נמצאה התאמה + לא מותקן + משך קריאה + בעדכון כללי + N/A + לזערה לגבי איך לתקן בעיות בעדכוני ספריה, ראה %1$s + לא יכל להשיג את %s + מחוץ לתקופת הפרסום הצפויה + סובב עמודים רחבים להתאמה + ממש עכשיו + הורד אוטומטית בזמן קריאה + פרטי התחברות למעקב + מיקום לא תקין: %s + מסנכרן ספריה + מחרזות משתמש לא יכולה להיות ריקה + שומש לאחרונה + בבקשה התחבר ל-MAL שוב + פריטים שהושלמו + %s נתקל בשגיאה בלתי צפויה. אנו ממליצים שתשתף את דוחות השגיאה שלך בערוץ התמיכה שלנו בדיסקורד. + נקראו + פריטים + %d שניות + רשימת פריטים בעצירה זמנית + רשימת פריטים שלא הושלמו + פעולת עדכון כבר פועלת + מעקבים + החלף אוריינטציה של עמודים רחבים מסובבים + מעקבים שדורשים התחברות: + רשימת פריטים שהושלמו + ממשק משתמש טאבלט + F-Droid builds לא נתמכים באופן רשמי. +\nלחץ כדי ללמוד עוד. + להסיר את %s ממעקב\? + פעולה זו תסיר את המעקב שלך מקומית. + הסר גם מ-%s + רק ברשת בלתי מוגבלת + שתף יומני קריסה + פעולה זו תסיר את תאריך ההתחלה הקודם שלך מ-%s + רשימת קריאה + רשימת תכנונים + רבים + להתחמק / להאיר + רפד בצדדים + סנכרון ספריה הושלם + מרווחי זמן + לא מסוגל לפתוח את הפרק שנקרא לאחרונה + פעולה בהחלקה שמאלה + לחיצה כפולה לקירוב (זום) + עודכן לגרסה %1$s + בסך הכל + שגיאה %1$s: %2$s + עובד רק אם הפרק הנוכחי והפרק הבא כבר הורדו. + דלג על פרקים כפולים + DNS over HTTPS (DoH) + תוקף אינדקס ההורדות בוטל + מידע של WebView נוקה בהצלחה + אפס מצב קריאה ואוריינטציה לכל הסדרות + מידע דיבוג + רישיונות מקורות פתוחים + פופולרי + הוסף מעקב + לחלק מהיצרנים יש הגבלות אפליקציה שהורגות תהליכים ברקע. באתר הזה יש עוד מידע לגבי איך לתקן את זה. + פעולה זו תסיר את תאריך הסיום הקודם שלך מ-%s + אופס! + אתחל את האפליקציה + %d שעות + דולג בגלל שהספריה לא דורשת עדכונים + דולג בגלל שלא צפוי פרסום היום + לא נמצאה אפליקציה לאסוף קבצים + במעקב + אין תיאור + בצע אומדן בכל + קבע לעדכון בכל + פרקים %1$s-%2$s + סקירה + יישומון לא זמין כשנעילת האפליקציה מופעלת + נקה מידע של WebView + רענן כריכות ספרייה + בעל תוצאות + ציון ממוצע + בשימוש + %d דקות + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/hi/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/hi/plurals-aniyomi.xml new file mode 100644 index 0000000000..5455b08ea5 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/hi/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/hi/plurals.xml b/i18n/src/commonMain/resources/MR/hi/plurals.xml new file mode 100644 index 0000000000..d399e52c5e --- /dev/null +++ b/i18n/src/commonMain/resources/MR/hi/plurals.xml @@ -0,0 +1,63 @@ + + + + %1$s मिनट के बाद + %1$s मिनटो के बाद + + + %1$d नया अध्याय + %1$d नए अध्याय + + + अध्याय %1$s और 1 अधिक + अध्याय %1$s और %2$d अधिक + + + %d आइटम के लिए + %d आइटम के लिए + + + एक्सटेंशन अपडेट उपलब्ध + %d एक्सटेंशन अपडेट उपलब्ध + + + %1$s बचा हुआ + %1$s बचे हुए + + + %d श्रेणी + %d श्रेणियाँ + + + %1$s में %2$s त्रुटि के साथ किया गया + %1$s में %2$s त्रुटियों के साथ किया गया + + + अध्याय %1$s + %1$s अध्याय + + + %d ट्रैकर + %d ट्रैकरस + + + %d अध्याय को छोड़ा जा रहा है, या तो स्रोत में यह नहीं है या इसे फ़िल्टर कर दिया गया है + %d अध्यायों को छोड़ा जा रहा है, या तो स्रोत उन्हें याद कर रहा है या उन्हें फ़िल्टर कर दिया गया है + + + कल + %1$d दिन पहले + + + अगला अपठित अध्याय + अगले %d अपठित अध्याय + + + 1 दिन + %d दिन + + + अगला अध्याय + अगले %d अध्याय + + \ No newline at end of file diff --git a/i18n/src/main/res/values-hi/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/hi/strings-aniyomi.xml similarity index 90% rename from i18n/src/main/res/values-hi/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/hi/strings-aniyomi.xml index 97350ccb3c..b45e3f40be 100644 --- a/i18n/src/main/res/values-hi/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/hi/strings-aniyomi.xml @@ -36,34 +36,6 @@ ताचियोमी के लिए WebView आवश्यक है डाउनलोड रोक दिया है अध्याय अद्यतन - - - - - - - - - - - - - - - - - - - - - - - - - - - - अपडेट टैब के स्थान पर मोर टैब ले जाएं वैश्विक एनीमे खोज अनदेखे diff --git a/i18n/src/main/res/values-hi/strings.xml b/i18n/src/commonMain/resources/MR/hi/strings.xml similarity index 87% rename from i18n/src/main/res/values-hi/strings.xml rename to i18n/src/commonMain/resources/MR/hi/strings.xml index 709f2b466f..142ac809c5 100644 --- a/i18n/src/main/res/values-hi/strings.xml +++ b/i18n/src/commonMain/resources/MR/hi/strings.xml @@ -1,18 +1,19 @@ नाम + श्रेणियाँ लाइब्रेरी के आइटम अध्याय पदचिह्न इतिहास सेटिंग्स + डाउनलोड कतार पुस्तकालय इतिहास नए अपडेट बैकअप और पुनर्स्थापना सेटिंग फिल्टर - डाउनलोड किया हुआ पृष्ठ स्मृति करा हुआ अपठित फिल्टर हटाए @@ -20,7 +21,7 @@ कुल अध्याय आखिर में पढ़ा हुआ खोज - विश्वीय खोज + वैश्विक खोज सभी का चयन करे पढ़ा हुआ चिह्न करे अपठित चिह्न करे @@ -66,7 +67,7 @@ पदचिह्न विकसित संबंध में - मद प्रति पंक्ति + ग्रिड आकार चित्र लैंडस्केप स्वचालित अद्यतन @@ -80,6 +81,7 @@ स्वचालित अपडेट डिवाइस प्रतिबंध चार्ज होते समय पूरी की गई श्रृंखला + डिफ़ॉल्ट श्रेणी हमेशा पूछे पूर्ण स्क्रीन चेतन पृष्ठ संक्रमण @@ -97,8 +99,8 @@ डिफ़ॉल्ट रीडिंग मोड बाएं से दाएं दाएं से बाएं - शीर्ष से असंतत - वेबटून + सीधा + लंबी पट्टी मापन प्ररूप उपयुक्त स्क्रीन खींचें @@ -134,7 +136,6 @@ बैकअप पुनर्स्थापित करे बैकअप फ़ाइल से लाइब्रेरी पुनर्स्थापित करें बैकअप निर्देशिका - स्वचालित बैकअप बैकअप फ़्रीक्वेंसी अधिकतम बैकअप बैकअप बनाया गया है @@ -147,10 +148,9 @@ साफ़ करने के दौरान त्रुटि हुई कुकीज़ को साफ़ करें कुकीज़ को साफ़ किया हुआ + डेटाबेस साफ़ करें उन आइटम का इतिहास हटाएं जो आपकी पुस्तकालय में सहेजी नहीं गई हैं - क्या आपको यकीन है\? आपके द्वारा पढ़े गए अध्याय और गैर-पुस्तकालय आइटम की प्रगति खो जाएगी प्रविष्टियां हटाई गईं - रिफ्रेश ट्रैकिंग संस्करण क्रैश रिपोर्ट भेजें किसी भी बग को ठीक करने में मदद करता है कोई संवेदनशील डेटा नहीं भेजा जाएगा @@ -161,7 +161,6 @@ लॉग इन किया गया अज्ञात त्रुटि श्रेणी अपडेट कर रहा है - लोकल कोई और परिणाम नहीं है स्थानीय स्रोत अन्य @@ -175,6 +174,8 @@ डाउनलोड किए गए अध्याय हटाएं? अध्याय %1$s डाउनलोड किया जा रहा है (%1$d/%2$d) + त्रुटि + रोके गए स्रोत शीर्षक अध्याय संख्या स्रोत से @@ -194,13 +195,14 @@ इस नाम के साथ एक श्रेणी पहले से मौजूद है! श्रेणियाँ हटाई गयी यह इस अध्याय की पठन तिथि को निकाल देगा क्या आप निश्चित है? + पुस्तकालय में जोड़ें\? चित्र सहेजा गया इच्छा अनुसार फिल्टर कवर के रूप में सेट करें कवर अपडेट किया गया पृष्ठ: %1$d अगले अध्याय नहीं मिला - छवि को लोड नहीं कर पायें + छवि को लोड नहीं किया जा सका कवर कला के रूप में इस छवि का उपयोग करें\? अध्याय डाउनलोड नहीं कर सका। आप डाउनलोड अनुभाग में फिर से कोशिश कर सकते हैं नए अध्याय पाए गए @@ -210,7 +212,6 @@ बैकअप फ़ाइल का चयन करें डाउनलोड कोई नया अद्यतन उपलब्ध नहीं है - अपडेट्स ढूंढ रहे हैं… डाउनलोडिंग… अपडेट इंस्टॉल करने के लिए यहा टेप करें डाउनलोड त्रुटि @@ -225,6 +226,7 @@ अनपेक्षित त्रुटि के कारण अध्याय डाउनलोड नहीं किया जा सका कोई वाई-फ़ाई कनेक्शन उपलब्ध नहीं है कोई नेटवर्क कनेक्शन उपलब्ध नहीं है + डाउनलोड रोक दिया है सामान्य प्रवास विस्तार @@ -254,7 +256,6 @@ स्रोत स्थापित नहीं है : %1$s फिर से पढाना स्थिति - शुरू कर दिया है प्रकार समाप्त: प्रचलित: @@ -264,7 +265,7 @@ कोई पिछला अध्याय नहीं है पेज लोड हो रहे है … पृष्ठों को लोड करने में विफल है: %1$s - संवाद के लिए लंबी प्रेस + लंबे टैप पर क्रियाएँ दिखाएँ WebView में खोलें 32 बिट रंग पढ़े हुए अध्यायों को छोड़ें @@ -284,7 +285,7 @@ अप्रचलित यह एक्सटेंशन अब उपलब्ध नहीं है। यह अब शायद ठीक से काम न करे और मसला खड़ा करे। इसे अनइंस्टॉल करने की सलाह दी गई है। दिनांक स्वरूप - अद्यतन + वैश्विक अपडेट %1$s से लॉगआउट करें\? लॉग आउट अब आप लॉग आउट है @@ -299,32 +300,21 @@ सिस्टम का पालन करें सूचनाओं का प्रबंधन सुरक्षा और गोपनीयता - अनलॉक की आवश्यकता है + खोलने की आवश्यकता है निष्क्रिय होने पर लॉक करें हमेशा कभी नहीँ - - %1$s मिनट के बाद - %1$s मिनटो के बाद - स्क्रीन सुरक्षित करें अपडेट लंबित हैं कटआउट क्षेत्र में सामग्री दिखाएं Cloudflare को बायपास करने में विफल बेहतर संगतता के लिए कृपया WebView ऐप को अपडेट करें + अध्याय अद्यतन सुरक्षित स्क्रीन एप्लिकेशन स्विच करते समय एप्लिकेशन सामग्री छिपाता हैं और स्क्रीनशॉट ब्लॉक करता हैं प्रदर्शन - - %1$d नया अध्याय - %1$d नए अध्याय - अध्याय %1$s अध्याय %1$s और %2$d अधिक अध्याय %1$s - - अध्याय %1$s और 1 अधिक - अध्याय %1$s और %2$d अधिक - अधिसूचना सामग्री छुपाएं नए अध्यायों के लिए जांच बैटरी अनुकूलन को अक्षम करना @@ -332,34 +322,19 @@ बैटरी अनुकूलन पहले से ही अक्षम है ईमेल पता हमेशा अध्याय संक्रमण दिखाएं - - %d आइटम के लिए - %d आइटम के लिए - मेन्यू - पुनःक्रमित नवीनतम सबसे पुराना शीर्ष पर ले जाएँ नीचे की ओर ले जाएं - - एक्सटेंशन अपडेट उपलब्ध - %d एक्सटेंशन अपडेट उपलब्ध - एक्सटेंशन अपडेट - WebView में वेबसाइट देखें अद्यतन पुस्तकालय पठन फ़िल्टर किए गए अध्यायों को छोड़ें स्रोत पिन की गई - 25% - 20% - 15% - 10% - कुछ नहीं साइड पैडिंग - लगातार लंबवत + गैप के साथ लंबी पट्टी अनपिन पिन विलोम का चयन करें @@ -370,8 +345,6 @@ अधिक ओपन सोर्स लाइसेंस वेबसाइट - बाहर निकलने की पुष्टि करें - बाहर निकलने के लिए फिर से वापस दबाएं केवल डाउनलोड किए गए अध्याय %1$s – %2$s बैकअप बहाल करने में विफल रहा @@ -384,24 +357,11 @@ स्थानीय स्रोत गाइड %02d मिनट,%02d सेकंड आपकी पुस्तकालय में सभी आइटम को फ़िल्टर करता है - - %1$s बचा हुआ - %1$s बचे हुए - - केवल पिन किए गए स्रोत शामिल हैं पढ़न मोड इस श्रृंखला के लिए ग्रे बैंडिंग को कम करता है, लेकिन प्रदर्शन को प्रभावित कर सकता है - - %d श्रेणी - %d श्रेणियाँ - डिवाइस सेटिंग नहीं खोल सका - - %1$s में %2$s त्रुटि के साथ किया गया - %1$s में %2$s त्रुटियों के साथ किया गया - ट्रैकिंग सेवाओं में अध्याय की प्रगति को अद्यतन करने के लिए एकतरफा सिंक। अपने ट्रैकिंग बटन से व्यक्तिगत प्रविष्टियों के लिए ट्रैकिंग सेट अप करें। रिफ्रेश पुस्तकालय मंगा कवर यह एक्सटेंशन आधिकारिक ताचियोमी एक्सटेंशन सूची से नहीं है। @@ -425,10 +385,6 @@ स्रोत नहीं मिला बंद करें प्रारंभ - - अध्याय %1$s - %1$s अध्याय - नेटवर्क दोनों शीर्ष से असंतत @@ -444,23 +400,14 @@ पढ़न मोड थीम तारीख को जोड़ा गया - - %d ट्रैकर - %d ट्रैकरस - कोई पिन किया हुआ सोर्स नही है पूर्ण प्रगती - डाउनलोड सम्पन्न हुआ त्रुटियाँ ट्रैकर्स में लॉग इन नहीं किया गया: इसमें NSFW (18+) सामग्री हो सकती है 18+ यह अनौपचारिक या संभावित रूप से फ़्लैग किए गए एक्सटेंशन को ऐप के भीतर NSFW (18+) सामग्री के सामने आने से नहीं रोकता है। - - %d अध्याय को छोड़ा जा रहा है, या तो स्रोत में यह नहीं है या इसे फ़िल्टर कर दिया गया है - %d अध्यायों को छोड़ा जा रहा है, या तो स्रोत उन्हें याद कर रहा है या उन्हें फ़िल्टर कर दिया गया है - अपडेट किए गए डिफ़ॉल्ट अध्याय सेटिंग्स कोई अध्याय नहीं मिला डिफ़ॉल्ट के रूप में सेट करें @@ -483,7 +430,7 @@ समाप्ति की तिथि आरंभ करने की तिथि डेवलपर्स के साथ साझा करने के लिए फ़ाइल में त्रुटि लॉग सहेजता है - डंप क्रैश लॉग + क्रैश लॉग शेयर करें टैप ज़ोन दाएं और बाएं धार @@ -504,6 +451,7 @@ अभी डाउनलोड करना शुरू करें विवरण देखने के लिए टैप करें इस श्रृंखला के लिए सभी रद्द करें + स्थानीय स्रोत पूरा काला मोड़ टाको स्ट्रॉबेरी @@ -515,7 +463,6 @@ यीन और यैंन्ग टील रूप - ट्रैकर्स को स्वचालित रूप से रीफ्रेश करें कोई नहीं बहिष्कृत करें: %s बंद @@ -526,6 +473,7 @@ कार्रवाई डिफॉल्ट स्रोत समर्थित नहीं है + बहिष्कृत श्रेणियां ट्रैक एक्सटेंशन इंस्टॉल किया जा रहा है… इंस्टालर @@ -535,7 +483,7 @@ कम निम्नतम प्रतिबंध: %s - स्वचालित + ऑटो पिछला अगला बाएं @@ -545,43 +493,31 @@ परिदृश्य कुल आइटम मिडनाइट डस्क - लघु (आज, कल) - लंबा (लघु+, n दिन पहले) - हाल ही में आज - पुस्तकालय अपडेट करते समय ट्रैकर्स को अपडेट करें शामिल करें: %s ऐप की जानकारी शिज़ुकु नहीं चल रहा है उल्टी काला और सफेद - आइटम के शीर्षक अनुसार फोल्डर बनाता है ट्रैकिंग गाइड उन्नत सेवाएं MIUI ऑप्टिमाइज़ेशन अक्षम होने पर बैकअप/पुनर्स्थापना ठीक से काम नहीं कर सकता है। पृष्ठभूमि गतिविधि कुछ निर्माताओं के पास अतिरिक्त ऐप प्रतिबंध हैं जो पृष्ठभूमि सेवाओं को मारते हैं। इस वेबसाइट में इसे ठीक करने के बारे में अधिक जानकारी है। - - कल - %1$d दिन पहले - अमान्य अध्याय प्रारूप के अनुसार ऑर्डर करें क्लिपबोर्ड पर कॉपी करने में विफल कवर पेज सहेजने में त्रुटि अपठित कोई मेल नहीं मिला - पुस्तकालय अपडेट हो रही है… (%1$d/%2$d) आपके पास अभी तक कोई श्रेणी नहीं है। परिवर्तन की पुष्टि करने के लिए प्रमाणित करें अध्याय लाई की तिथि - मुहर - सापेक्ष टाइमस्टैम्प + बहिष्कृत श्रेणियों की पुस्तकें अपडेट नहीं की जाएंगी, भले ही वे भी शामिल श्रेणियों में हों। शिज़ुकु को एक्सटेंशन इंस्टॉलर के रूप में उपयोग करने के लिए शिज़ुकु को इंस्टॉल और प्रारंभ करें। अनुवाद में मदद करें दिनांक कवर पृष्ठ - पृष्ठों को अलग-अलग फ़ोल्डरों में सहेजें बहिष्कृत श्रेणियों की आइटम डाउनलोड नहीं की जाएंगी, भले ही वे शामिल श्रेणियों में भी हों। सिस्टम लॉग में वर्बोज़ लॉग प्रिंट करें (ऐप प्रदर्शन को कम करता है) ऐसी सेवाएँ जो विशिष्ट स्रोतों के लिए उन्नत सुविधाएँ प्रदान करती हैं। आपकी पुस्तकालय में जोड़े जाने पर आइटम को स्वचालित रूप से ट्रैक किया जाता है। @@ -593,7 +529,6 @@ कवर पेज साझा करने में त्रुटि यह एंड्राइड संस्करण अब समर्थित नहीं है प्रारंभिक मार्गदर्शन - यह ट्रैकर केवल Komga स्रोत के साथ संगत है। रीडर खोले जाने पर थोड़ी देर दिखाएं सॉर्ट और डिस्प्ले के लिए प्रति-श्रेणी सेटिंग्स सभी अद्यतन करें @@ -615,26 +550,23 @@ रद्द किया गया अंतराल पर है प्रकाशन समाप्त - ५% छोड़े गए अधिक जानकारी के लिए दबाए छोड़े गए क्योंकि श्रृंखला पूरी हो गई है छोड़ दिया गया क्योंकि वहाँ अपठित अध्याय हैं छोड़ दिया गया क्योंकि कोई अध्याय पढ़ा नहीं गया जो शुरू नहीं हुए हैं - शुरू किया गया केवल कवर ग्रिड अक्षम रिवर्स पोर्ट्रेट %1$d अपडेट विफल %1$d अपडेट छोड़े गए - टैप करते समय छवियों को पैन करें + चौड़ी छवियां पैन करें ज़ूम लैंडस्केप इमेज श्रृंखला को शीर्ष पर ले जाएं कोई स्रोत नहीं मिला कोई स्थापित स्रोत नहीं मिला अपठित गिनती - जब बैटरी कम नहीं WebView डेटा साफ हो गया गिटहब में खोलें चित्र सहेजने में त्रुटि @@ -642,8 +574,6 @@ पेज %d हिस्से करते वक्त नहीं मिला बंद करे WebView डाटा साफ करें - एक जैसे पिन किए गए स्रोत दिखाएँ - उनके संबंधित भाषा समूहों में पिन किए गए स्रोतों को फिर से दिखाएं चित्र %d का फ़ाइल पथ नहीं खोजा जा सका बैकअप करने के लिए कोई पुस्तकालय प्रविष्टि नहीं एक नया संस्करण आधिकारिक रिलीज के द्वारा उपलब्ध है। अनौपचारिक F-Droid रिलीज से माइग्रेट करने का तरीका जानने के लिए यह टैप करें । @@ -669,19 +599,14 @@ केवल अनमीटर्ड कनेक्शन पर RARv5 प्रारूप समर्थित नहीं है पुस्तकालय पिछली बार अपडेट किया गया: %s - अपना हाल ही में अपडेट किया गया मांगा देखें - केवल लाइब्रेरी में प्रविष्टियों पर काम करता है। और यदि वर्तमान अध्याय और अगला अध्याय पहले ही डाउनलोड हो चुका है + अपनी हाल ही में अपडेट की गई पुस्तकालय एन्ट्री देखें + केवल तभी काम करता है जब वर्तमान अध्याय + अगला पहले से ही डाउनलोड किया गया हो। कस्टम कवर चूक यूजर एजेंट स्ट्रिंग (User agent string) आगे डाउनलोड करें पढ़ते समय ऑटो डाउनलोड करे - - अगला अपठित अध्याय - अगले अपठित अध्याय %d - सब कुछ हटा दें लोकप्रिय - लंबी इमेज को विभाजित करें (BETA) टाइडल वेव्ह यूजर एजेंट स्ट्रिंग (User Agent String) खाली नहीं रखा जा सकता मल्टी @@ -692,13 +617,43 @@ अंतिम पढ़ा गया अध्याय खोलने में असमर्थ यूजर एजेंट स्ट्रिंग(User agent string) डिफॉल्ट रिसेट करें होल्ड लिस्ट में - डाउनलोड कतार आंकड़े शुरू किए गए आइटम डाउनलोड किए गए क्लिपबोर्ड पर कॉपी करें खोजें… - पढ़ना जारी रखने वाला बटन दिखाए स्थानीय कोई भी आइटम खोल दे - \ No newline at end of file + डुप्लिकेट अध्याय छोड़ें + अभी नहीं + स्रोत, विस्तार, वैश्विक खोज + अवैध स्थान: %s + श्रेणी अपडेट करें + थीम, दिनांक और समय प्रारूप + स्वचालित डाउनलोड, आगे डाउनलोड करें + उपलब्ध है लेकिन स्रोत स्थापित नहीं है: %s + पुस्तकालय में पहले से ही रही आइटम को छिपाएँ + श्रेणियाँ, वैश्विक अपडेट, अध्याय स्वाइप + फिट होने के लिए चौड़े पृष्ठों को घुमाएं + मैनुअल और स्वचालित बैकअप + ऐप लॉक, सुरक्षित स्क्रीन + अंतराल निर्धारित करें + अनुकूलित लाने का अंतराल + मासिक प्राप्त करें (28 दिन) + देर से 10+ की जाँच + छोड़ा हुआ\? देर से 20+ और 2 महीने + अंतराल + दाईं ओर स्वाइप करने पर + अध्याय स्वाइप + अगला अपेक्षित अपडेट + डीबग जानकारी + डंप क्रैश लॉग, बैटरी अनुकूलन + अपेक्षित रिलीज़ अवधि से बाहर + बाईं ओर स्वाइप करने पर + लाइब्रेरी सिंक पूरा + डाउनलोड अनुक्रमणिका अमान्य + ठीक है + डाउनलोड अनुक्रमणिका अमान्य करें + क्लिपबोर्ड पर कॉपी हो गया है + %s से भी हटा दें + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/hr/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/hr/plurals-aniyomi.xml new file mode 100644 index 0000000000..4c3e961fd8 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/hr/plurals-aniyomi.xml @@ -0,0 +1,38 @@ + + + + Sljedeće nepogledane epizode + Sljedeće %d nepogledane epizode + Sljedećih %d nepogledanih epizoda + + + Za jedan naslov + Za %d naslova + Za %d naslova + + + %1$s epizoda + %1$s epizode + %1$s epizoda + + + Jedna nova epizoda + %1$d nove epizode + %1$d novih epizoda + + + %d sekunda + %d sekunde + %d sekunda + + + Epizode %1$s i još jedna + Epizode %1$s i još %2$d + Epizode %1$s i još %2$d + + + Sljedeća epizoda + Sljedeće %d epizode + Sljedećih %d epizoda + + \ 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 new file mode 100644 index 0000000000..66fa95de15 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/hr/plurals.xml @@ -0,0 +1,83 @@ + + + + Nakon %1$s minute + Nakon %1$s minute + Nakon %1$s minuta + + + %d kategorija + %d kategorije + %d kategorija + + + Poglavlja %1$s i još jedno + Poglavlja %1$s i još %2$d + Poglavlja %1$s i još %2$d + + + Za %d stavku + Za %d stavke + Za %d stavku + + + %1$s preostalo + %1$s preostala + %1$s preostalih + + + Dostupna je %d nova verzija proširenja + Dostupne su %d nove verzije proširenja + Dostupno je %d novih verzija proširenja + + + %1$d novo poglavlje + %1$d nova poglavlja + %1$d novih poglavlja + + + Obavljeno u %1$s s %2$s greškom + Obavljeno u %1$s s %2$s greške + Obavljeno u %1$s s %2$s grešaka + + + %1$s poglavlje + %1$s poglavlja + %1$s poglavlja + + + %d usluga praćenja + %d usluge praćenja + %d usluga praćenja + + + Preskače se %d poglavlje. Ne postoji u izvoru ili je filtrirano + Preskaču se %d poglavlja. Ne postoje u izvoru ili su filtrirana + Preskače se %d poglavlja. Ne postoje u izvoru ili su filtrirana + + + Prije %1$d dan + Prije %1$d dana + Prije %1$d dana + + + Sljedeće nepročitano poglavlje + Sljedeća %d nepročitana poglavlja + Sljedećih %d nepročitanih poglavlja + + + Sljedeće poglavlje + Sljedeća %d poglavlja + Sljedećih %d poglavlja + + + Nedostaje %1$s poglavlje + Nedostaju %1$s poglavlja + Nedostaje %1$s poglavlja + + + %d dan + %d dana + %d dana + + \ No newline at end of file diff --git a/i18n/src/main/res/values-hr/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/hr/strings-aniyomi.xml similarity index 93% rename from i18n/src/main/res/values-hr/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/hr/strings-aniyomi.xml index 4aadb82dd2..ed61f10747 100644 --- a/i18n/src/main/res/values-hr/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/hr/strings-aniyomi.xml @@ -38,41 +38,6 @@ Za Aniyomi je potreban WebView Preuzimanje poglavlja je zaustavljeno Ažuriranja poglavlja - - Sljedeće nepogledane epizode - Sljedeće %d nepogledane epizode - Sljedećih %d nepogledanih epizoda - - - Za jedan naslov - Za %d naslova - Za %d naslova - - - %1$s epizoda - %1$s epizode - %1$s epizoda - - - Jedna nova epizoda - %1$d nove epizode - %1$d novih epizoda - - - %d sekunda - %d sekunde - %d sekunda - - - Epizode %1$s i još jedna - Epizode %1$s i još %2$d - Epizode %1$s i još %2$d - - - Sljedeća epizoda - Sljedeće %d epizode - Sljedećih %d epizoda - Označi kao nepogledano Preuzmi nepogledane epizode Izbriši zabilješku epizode diff --git a/i18n/src/main/res/values-hr/strings.xml b/i18n/src/commonMain/resources/MR/hr/strings.xml similarity index 74% rename from i18n/src/main/res/values-hr/strings.xml rename to i18n/src/commonMain/resources/MR/hr/strings.xml index 7e7bd8c52a..be3b253bc2 100644 --- a/i18n/src/main/res/values-hr/strings.xml +++ b/i18n/src/commonMain/resources/MR/hr/strings.xml @@ -1,14 +1,9 @@ - - Nakon %1$s minute - Nakon %1$s minute - Nakon %1$s minuta - Nikada Uvijek Cjeloekranski prikaz - Ovo proširenje više nije dostupno. + Ovo proširenje više nije dostupno. Možda neće ispravno funkcionirati i može uzrokovati probleme s aplikacijom. Preporučuje se deinstalacija. Nepovjerljivo proširenje Deinstaliraj Nepovjerljivo @@ -22,12 +17,8 @@ Aktualiziraj Aktualiziranja na čekanju Sve - - %d kategorija - %d kategorije - %d kategorija - Uvijek pitaj + Standardna kategorija Sa stanjem „Završeno“ Kad se puni Ograničenja uređaja za automatska aktualiziranja @@ -47,10 +38,9 @@ Siguran ekran skriva sadržaj programa prilikom prebacivanja između programa i blokira snimke ekrana Siguran ekran Zaključaj prilikom mirovanja - Zatraži otključavanje + Zahtijevaj otključavanje Sigurnost i privatnost Upravljaj obavijestima - Potvrdi zatvaranje programa Format datuma Slijedi sustav Uključeno @@ -68,8 +58,8 @@ Osvježi Naprijed Natrag - Preuzeto Poglavlja + Kategorije Nemaš kategorija. Za stvaranje kategorije i organiziranje biblioteke dodirni gumb plus. Tvoja biblioteka je prazna Ništa nije nedavno čitano @@ -84,6 +74,7 @@ Povijest Aktualiziranja Biblioteka + Popis preuzimanja Postavke Više Ime @@ -98,7 +89,6 @@ Premjesti na vrh Najstarije Najnovije - Promijeni redoslijed Razvrstaj Prekini sve Prekini @@ -147,23 +137,20 @@ Filtar Izbornik Postavke - Za zatvaranje programa ponovo pritisni natrag Povijest Praćenje - Manga + Unosi u biblioteci %02d min, %02d s Obnavljanje je završeno Sigurnosna kopija je stvorena Maksimalni broj sigurnosnih kopija - Učestalost spremanja sigurnosnih kopija - Automatsko spremanje sigurnosnih kopija + Učestalost automatskog spremanja sigurnosnih kopija Mjesto spremanja sigurnosnih kopija Obnovi biblioteku iz sigurnosne kopije Obnovi sigurnosnu kopiju Može se koristiti za obnavljanje trenutačne biblioteke Stvori sigurnosnu kopiju - Uključi samo označene izvore - Usluge + Usluge praćenja Preuzmi nova poglavlja Peto prije zadnjeg pročitanog poglavlja Četvrto prije zadnjeg pročitanog poglavlja @@ -173,11 +160,6 @@ Deaktivirano Prilagođeno mjesto Mjesto preuzimanja - 25 % - 20 % - 15 % - 10 % - Bez Odmak od ruba Čitanje Uvijek prikaži prijelaze između poglavlja @@ -231,7 +213,7 @@ Animiraj prijelaze stranica Prikaži sadržaj u izrezanom području Boja pozadine - Prikaži pri dugom dodiru + Prikaži radnje pri dugom dodiru Preokreni tipke za glasnoću Tipke za glasnoću Navigacija @@ -239,28 +221,17 @@ Preskoči pročitana poglavlja Dostupna je nova verzija! Greška pri preuzimanju - Dodirni za instaliranje + Dodirnite da biste instalirali ažuriranje Preuzimanje … - Traženje novih verzija … Nema novih verzija Preuzmi Odaberi datoteku sigurnosne kopije Odaberi sliku naslovnice - Prije toga, dodaj manga u biblioteku + Prije toga, dodajte stavku u biblioteku Neuspjelo ažuriranje naslovnice - - Poglavlja %1$s i još jedno - Poglavlja %1$s i još %2$d - Poglavlja %1$s i još %2$d - Poglavlja %1$s Poglavlje %1$s i još %2$d Poglavlje %1$s - - Za %d naslov - Za %d naslova - Za %d naslova - Pronađena su nova poglavlja Traženje novih poglavlja Neuspjelo preuzimanje poglavlja. Pokušaj ponovo u odjeljku preuzimanja @@ -279,7 +250,7 @@ Trenutačno: Završeno: Modus čitanja - Za ovaj serijal + Za ovu seriju Ovu sliku koristiti kao naslovnicu\? Nije bilo moguće učitati sliku Sljedeće poglavlje nije pronađeno @@ -292,7 +263,6 @@ Izbrisane kategorije Kategorija s ovim imenom već postoji! Vrsta - Započeto Stanje Stanje Naslov @@ -313,8 +283,11 @@ Po izvoru Broj poglavlja Naslov izvora + Zaustavljeno + Greška Preuzimanje (%1$d/%2$d) Poglavlje %1$s + Dodati u biblioteku\? Izvor nije instaliran: %1$s Kopirano u međuspremnik: \n%1$s @@ -337,10 +310,8 @@ Zadnji korišteni Drugi Lokalni izvor - Provjeri web-stranice pomoću WebView Nema rezultata Nema daljnjih rezultata - Lokalno Ažuriranje kategorije Nepoznata greška Odjava uspjela @@ -352,12 +323,7 @@ Adresa e-pošte Korisničko ime Prijavi se na %1$s - - %1$s preostalo - %1$s preostala - %1$s preostalih - - Filtrira sve mange u tvojoj biblioteci + Filtrira sve unose u biblioteci Samo preuzeto Pomaže pri ispravljanju grešaka. Ne šalju se nikoji privatni podaci Pošalji izvještaj o padu programa @@ -369,8 +335,9 @@ Optimiranje baterije je već isključeno Pomaže pri ažuriranju biblioteke u pozadini i spremanju sigurnosnih kopija Deaktiviraj optimiranje baterije - Aktualiziraj praćenje Unosi su izbrisani + Izbriši povijest za unose koji nisu spremljeni u biblioteci + Isprazni bazu podataka Kolačići su izbrisani Ukloni kolačiće Došlo je do greške prilikom brisanja @@ -385,18 +352,10 @@ Što želiš spremiti kao sigurnosnu kopiju\? Spremanje sigurnosne kopije je već u tijeku Neuspjelo zaobilaženje Cloudflare-a - - Dostupna je %d nova verzija proširenja - Dostupne su %d nove verzije proširenja - Dostupno je %d novih verzija proširenja - - - %1$d novo poglavlje - %1$d nova poglavlja - %1$d novih poglavlja - Ažuriranja proširenja + Ažuriranja poglavlja Opće + Preuzimanje zaustavljeno Nema mrežne veze Nema dostupne Wi-Fi veze Poglavlje nije moguće preuzeti zbog neočekivane pogreške @@ -406,16 +365,11 @@ Aktualiziraj naslovnice biblioteke Po datumu prijenosa Podaci - - Obavljeno u %1$s s %2$s greškom - Obavljeno u %1$s s %2$s greške - Obavljeno u %1$s s %2$s grešaka - Nedostaju izvori: - Sigurnosna kopija ne sadrži nijedan manga. + Sigurnosna kopija ne sadrži unose u biblioteci. Neispravna datoteka sigurnosne kopije - Jednosmjerna sinkronizacija za aktualiziranje napretka poglavlja u usluzi praćenja. Postavi praćenje pojedinačnih unosa manga putem gumba za praćenje. - Ovo proširenje nije sa službenog popisa Tachiyomi proširenja. + Jednosmjerna sinkronizacija za aktualiziranje napretka poglavlja u eksternoj usluzi praćenja. Postavi praćenje pojedinačnih unosa manga putem gumba za praćenje. + Ovo proširenje nije iz službenog popisa. Neslužbeno Provjeri nove naslovnice i pojedinosti prilikom aktualiziranja biblioteke Automatski osvježi metapodatke @@ -431,13 +385,8 @@ Pokreni Deaktiviraj Izvor nije pronađen - - %1$s poglavlje - %1$s poglavlja - %1$s poglavlja - Zahtijeva ponovno pokretanje programa - Mreža + Umreženi rad Oboje Okomito Vodoravno @@ -451,25 +400,14 @@ Modus čitanja Tema Datum dodavanja - - %d praćenje - %d praćenja - %d praćenja - Nemaš označenih izvora Gotovo Napredak - Preuzimanje gotovo Greške Izvori ovog proširenja mogu sadržavati neprikladan sadržaj (18+) 18+ - Praćenja bez prijave: + Usluge praćenja bez prijave: To ne sprečava neslužbene ili potencijalno krivo označena proširenja prikazati neprikladan sadržaj (18+) unutar aplikacije. - - Preskače se %d poglavlje. Izvoru nedostaje poglavlje ili je izdvojeno filtrom - Preskaču se %d poglavlja. Izvoru nedostaju poglavlja ili su izdvojena filtrom - Preskaču se %d poglavlja. Izvoru nedostaju poglavlja ili su izdvojena filtrom - Nema poglavlja Standardne postavke poglavlja su aktualizirane %1$s: %2$s, %3$d. stranica @@ -518,10 +456,11 @@ Prikaži raspored navigacije DNS preko HTTPS-a (DoH) Ništa - Manga u isključenim kategorijama neće se preuzeti čak niti ako se također nalaze u uključenim kategorijama. + Unosi u isključenim kategorijama neće se ažurirati čak i ako su također u uključenim kategorijama. Automatsko preuzimanje Isključi: %s Uključi: %s + Unosi u isključenim kategorijama neće se ažurirati čak i ako su također u uključenim kategorijama. Datum preuzimanja poglavlja Dodirni za prikaz detalja Ove verzija androida više nije podržana @@ -532,12 +471,13 @@ Deaktiviraj anonimni modus Okretanje Automatski - Stvara mape na osnovi naslova mange + Stvara mape na osnovi naslova unosa Spremi stranice u zasebne mape Radnje Prekini sve za ovu seriju Poglavlje nije pronađeno Nepročitano + Lokalni izvor Greška tijekom dijeljenja naslovnice Greška tijekom spremanja naslovnice Naslovnica spremljena @@ -551,9 +491,7 @@ Vodič za praćenje Isključeno Uključeno - Postavke prikaza i sortiranja po kategorijama - Aktualiziraj pratioce prilikom aktualiziranja biblioteke - Automatski osvježi pratioce + Postavke kategorija za sortiranje Ograničenja: %s Pokreni preuzimanje sada Neki proizvođači imaju dodatna programska ograničenja koja onemogućuju pozadinske usluge. Ova web-stranica sadrži daljnje informacije o tome kako to popraviti. @@ -565,17 +503,7 @@ Yotsuba Jin i Jang Invertirano - - Prije %1$d dan - Prije %1$d dana - Prije %1$d dana - Danas - Nedavno - Dugo (Kratko+, n proteklih dana) - Kratko (danas, jučer) - Relativna vremenska oznaka - Vremenska oznaka Potpuno crna tamna tema Strawberry Daiquiri Izgled @@ -584,7 +512,7 @@ Zadano Spremanje sigurnosne kopije i obnavljanje možda neće ispravno raditi, ako MIUI optimizacija nije aktivirana. Pomogni prevoditi - Ukupan broj manga + Ukupan broj unosa Jezik Upozorenje Shizuku ne radi @@ -595,28 +523,27 @@ Podaci programa Samo putem Wi-Fi veze Plavozelena i tirkiz - Broj manga u bazi odataka koje nisu u zbirci: %1$d + Broj unosa u bazi odataka koje nisu u zbirci: %1$d Opširno zapisivanje Ispiši opširan zapis u zapisnik sustava (smanjuje performanse aplikacije) - Ovaj način pračenja je kompatibilan samo s izvorom Komga. - Aktualiziranje zbirke … (%1$d/%2$d) - Čuvaj sigurnosne kopije i na drugim mjestima. + Čuvaj sigurnosne kopije i na drugim mjestima. Sigurnosne kopije mogu sadržati osjetljive podatke uključujući sve spremljene lozinke; oprez pri dijeljenju podataka. Korisničko sučelje tableta Velika aktualiziranja štete izvorima i mogu usporiti aktualiziranja i povećati potrošnju baterije. Dodirni i saznaj više. Niska Aktivnost u pozadini Osjetljivost za skrivanje izbornika pri pomicanju Ažuriranja aplikacije - Čišćenje baze podataka - Poboljšane usluge - Usluge koje pružaju poboljšane funkcije za određene izvore. Manga se automatski prati kad se doda u tvoju biblioteku. + Nema se što raščistiti + 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 - Preskoči aktuliziranje naslova + Preskoči ažuriranje unosa Neuspjelo preuzimanje popisa proširenja - Instaler + Instalacijski program Stari način Najviša + Isključene kategorije Visoka Najniža Objavljivanje završeno @@ -626,10 +553,8 @@ Spremi kao CBZ arhivu ČPP i vodiči Samo naslovnice - 5 % Panoramski prikaz širokih slika - Zumiraj slike u ležećem formatu - Započeto + Automatski zumiraj u široke slike Koja još nisu pokrenuta Preskočeno, jer je serija kompletna Preskočeno, jer nijedno poglavlje nije pročitano @@ -639,7 +564,7 @@ Preskočeno Preskočena aktualiziranja: %1$d Preokrenuto uspravno - Pomakni serijal na vrh + Pomakni seriju na vrh Deaktivirano Nema unosa u biblioteci za spremanje u sigurnosnu kopiju Poboljšava performanse čitača @@ -652,15 +577,8 @@ Popis nedovršenih Stranica %d nije pronađena tijekom rastavljanja RARv5 format nije podržan - Radi samo na unosima u biblioteci i ako je trenutačno poglavlje plus sljedeće već preuzeto - - Sljedeće nepročitano poglavlje - Sljedeća %d nepročitana poglavlja - Sljedećih %d nepročitanih poglavlja - - Rastavi visoke slike (BETA) + Radi samo ako je trenutačno i sljedeće poglavlje već preuzeto. Samo na mrežom bez ograničenja - Kad se baterija nije slaba Broj nepročitanih Izbriši kategoriju Želiš li izbrisati kategoriju „%s”\? @@ -676,36 +594,152 @@ Dobna granica Preuzmi unaprijed Višejezičnost - Nedostaje dozvola za spremanje + Dozvole za spremanje nisu odobrena Tsunami -Popis preuzimanja + Nevažeća lokacija: %s + Zapisnici iznenadnog gašenja aplikacije, optimizacije baterije + Započeto + Lokalno + Traži … + Kategorije, globalno ažuriranje, prelistavanje poglavlja + Ručne i automatske sigurnosne kopije, memorija + Statistike + Preuzeto + Tema, format datuma i vremena + Izvori, ekstenzije, globalno pretraživanje + Način čitanja, zaslon, navigacija + Automatsko preuzimanje, preuzimanje unaprijed + Zaključavanje aplikacije, siguran zaslon + Jednosmjerna sinkronizacija napretka, poboljšana sinkronizacija + Otvori nasumični unos + Obnovi standardni izraz korisničkog agenta + Nevažeći niz korisničkog agenta + Zadani niz korisničkog agenta + Niz korisničkog agenta ne može biti prazan + Poništi indeks preuzimanja + Obnovi postavke čitača serija + Nije moguće otvoriti posljednje čitanje poglavlja + Prilagođena naslovnica + Nema opisa + Unosi + Globalno aktualiziranje + Usluge praćenja + Srednja ocjena + Korišteno + %dd + %ds + Pa, ovo je nezgodno + Nepoznat naslov + Zadnje aktualiziranje biblioteke: %s + Sigurno\? + %s je naišao na neočekivanu grešku. Predlažemo da podijeliš zapis o prekidu programa u našem kanalu za podršku na Discordu. + Pregled + Dovršene stavke + Trajanje čitanja + Ukupno + Pročitano + Praćeni unosi + N/A + %dh + %dm + Izvor nije pronađen + Ažuriranje je već pokrenuto + Neuspjelo obnavljanje postavki čitača + Sve postavke čitača su obnovljene + Ukloniti datum\? + Time ćete ukloniti prethodno odabrani datum početka iz %s + Time ćete ukloniti prethodno odabrani datum završetka iz %s + Nije pronađen instalirani izvor + Obnavlja modus čitanja i položaj svih serija + Pogreška pri spremanju slike + Ponovno pokretanje aplikacije + Ups! + Nije instalirano + Upravo sada + F-Droid verzije nisu službeno podržane. +\nDodirnite da biste saznali više. + Provjeravanje preuzimanja + Otvorite na GitHubu + Preskočeno jer serija ne zahtijeva aktualiziranja + Nova verzija dostupna je u službenim izdanjima. Dodirnite da biste saznali kako migrirati iz neslužbenih F-Droid izdanja. + Pogledajte nedavno aktualizirane unose u biblioteci + Upravo ćete ukloniti \"%s\" iz svoje biblioteke + Widget nije dostupan kada je omogućeno zaključavanje aplikacije + Nije pronađen nijedan unos u ovoj kategoriji + Nije moguće pronaći put datoteke stranice %d + Ne sada + Kategorija je prazna + Kopirano u međuspremnik Dostupne, ali izvor nije instaliran: %s U tvojoj biblioteci imaš unos s istim imenom. \n \nŽeliš li svejedno nastaviti\? Preskoči dupla poglavlja %1$s greška: %2$s + *obavezno Sakrij unose koji se već nalaze u biblioteci Kopiraj u međuspremnik - - Sljedeće poglavlje - Sljedeća %d poglavlja - Sljedećih %d poglavlja - Aktualiziraj katogoriju Rastavi visoke slike Oznake - - Nedostaje %1$s poglavlje - Nedostaju %1$s poglavlja - Nedostaje %1$s poglavlja - Prilagodi prikaz širokih stranica okretanjem Preokreni položaj širokih stranica - Informacije otklanjanja grešaka + Informacije o otklanjanju grešaka %d po retku - Povuci prstom ulijevo + Prelistaj ulijevo Dodirni dvaput za zumiranje - Listanje u poglavljima - Povuci prstom udesno - \ No newline at end of file + Prelistaj poglavlja + Prelistaj udesno + Postavi interval + Prilagođeni interval dohvaćanja + Mjesečno dohvaćanje (28 dana) + Procijeni svakih + Prilagodi interval + Sljedeće očekivano aktualiziranje + Postavi za aktualiziranje svakih + U redu + Izvan očekivanog razdoblja izdavanja + Intervali + Ukloniti praćenje %s\? + Preskočeno, jer se danas nije očekivalo izdanje + Ovo će ukloniti lokalno praćenje. + Također ukloni iz %s + Izbriši preuzete + Ima rezultate + Sinkroniziranje biblioteke + Sinkroniziranje biblioteke završeno + Dodirni ovdje za pomoć s Cloudflareom + Ispušteno\? Zadnjih 20 dana i 2 mjeseca + Prijava za uslugu praćenja + Prekoraöeno razdoblje provjere + Provjera zadnjih 10 i više dana + Indeks preuzimanja poništen + Nije bilo moguće stvoriti datoteku sigurnosne kopije + Licencirano – Nema poglavlja za prikaz + Otključaj %s + Ne postoji veza s internetom + HTTP %d, provjeri web stranicu u WebView + Nije bilo moguće povezati se s računalom %s + Pomakni seriju na kraj + Relativne vremenske oznake + „%1$s” umjesto „%2$s” + Razvrstaj kategorije + Aktualiziranje biblioteke … (%s) + Želiš li razvrstati kategorije po abecedi\? + Nije odabrana nijedna datoteka + Postavke izvora + Postavke aplikacije + Podaci i spremište + Nikada + Smanjuje artefakte na ekranima s e-tintom + Zadnja automatska sigurnosna kopija: %s + Zabljesni prilikom mijenjanja stranice + Stvori + Primijeni + Obnovi standardne vrijednosti + Nije pronađen nijedan amaterski prevoditelj + Amaterski prevoditelj + Korištenje memorije + Rezultat tragača + Isključi amaterske prevoditelje + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/hu/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/hu/plurals-aniyomi.xml new file mode 100644 index 0000000000..ae0431fa35 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/hu/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/hu/plurals.xml b/i18n/src/commonMain/resources/MR/hu/plurals.xml new file mode 100644 index 0000000000..1ed5bf5a5c --- /dev/null +++ b/i18n/src/commonMain/resources/MR/hu/plurals.xml @@ -0,0 +1,63 @@ + + + + Egy új bővítményfrissítés érhető el + %d bővítményfrissítés érhető el + + + 1 perc után + %1$s percek után + + + %d kategória + %d kategóriák + + + 1 fejezet + %1$s fejezet + + + 1 új fejezet + %1$d új fejezet + + + Tegnap + %1$d napja + + + %d tracker + %d trackerek + + + %d-nak/nek + %d-nak/nek + + + %d fejezet kihagyása, hiányzik a forrás, vagy ki lett szűrve + %d fejezet kihagyása, hiányoznak a források, vagy ki lettek szűrve + + + %1$s van hátra + %1$s van hátra + + + Befejezve %1$s alatt, %2$s hibával + Befejezve %1$s alatt, %2$s hibával + + + %1$s fejezet és még 1 + %1$s fejezet és még %2$d + + + Következő olvasatlan fejezet + Következő %d olvasatlan fejezet + + + Következő fejezet + Következő %d fejezetek + + + Hiányzó %1$s fejezet + Hiányzó %1$s fejezetek + + \ No newline at end of file diff --git a/i18n/src/main/res/values-hu/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/hu/strings-aniyomi.xml similarity index 80% rename from i18n/src/main/res/values-hu/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/hu/strings-aniyomi.xml index afe9783e08..2a50b1d451 100644 --- a/i18n/src/main/res/values-hu/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/hu/strings-aniyomi.xml @@ -38,32 +38,4 @@ A Tachiyomi működéséhez WebView szükséges Letöltés szüneteltetve Fejezetfrissítések - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-hu/strings.xml b/i18n/src/commonMain/resources/MR/hu/strings.xml similarity index 86% rename from i18n/src/main/res/values-hu/strings.xml rename to i18n/src/commonMain/resources/MR/hu/strings.xml index 203c70f9f9..f93b9cc051 100644 --- a/i18n/src/main/res/values-hu/strings.xml +++ b/i18n/src/commonMain/resources/MR/hu/strings.xml @@ -1,7 +1,8 @@ Név - Manga + Kategóriák + Könyvtár bejegyzések Fejezetek Követés Előzmények @@ -26,7 +27,7 @@ Nyilvántartás Speciális Névjegy - Tételek soronként + Rács mérete Álló Fekvő Frissítések gyakorisága @@ -40,6 +41,7 @@ Frissítések korlátozása Töltés közben Csak a jelenleg is folyamatban lévőket frissítse + Alapértelmezett kategória Mindig kérdezzen rá Teljes képernyő Oldalszám megjelenítése @@ -60,10 +62,10 @@ %1$d oldal Nem található a következő fejezet A hálózat nem érhető el + Letöltési sor Könyvtár Frissítések Szűrők - Letöltve Könyvjelzőzve Olvasatlan Szűrők eltávolítása @@ -106,10 +108,10 @@ Fehér Fekete Alapértelmezett olvasás mód - Balról jobbra - Jobbról balra - Függőlegesen - Folytonos (pl. Webtoon) + Lapozott (balról jobbra) + Lapozott (jobbról balra) + Lapozott (függőlegesen) + Hosszú szalag Képernyőhöz igazítás Áttelepítés Bővítmények @@ -145,20 +147,17 @@ Összes engedélyezése Kiválasztás megfordítása Menü - A befejezéshez nyomd meg újfent a Vissza gombot A könyvtárad üres Nincs új frissítés Nincs letöltés folyamatban Bővítményfrissítések + Fejezetfrissítések Gyakori + Letöltés szüneteltetve Nincs Wi-Fi kapcsolat Egy váratlan hiba miatt nem sikerült letölteni a fejezetet Hiba A jobb kompatibilitás érdekében kérlek, frissítsd a WebView alkalmazást - - Egy új bővítményfrissítés érhető el - %d bővítményfrissítés érhető el - Új verzió érhető el! Letöltési hiba Érints meg a telepítéshez @@ -173,14 +172,9 @@ Kevesebb Értesítés tartalmának elrejtése Az alkalmazás tartalmának elrejtése az alkalmazások közötti váltáskor és a képernyőképek készítésének blokkolása - - 1 perc után - %1$s percek után - Mindig Biztonság Értesítések kezelése - Kilépés megerősítése Rendszerbeállítás követése Sötét mód Téma @@ -192,10 +186,6 @@ Nem hivatalos Elavult Függőben lévő frissítések - - %d kategória - %d kategóriák - Új borító és részletek keresése a könyvtár frissítésekor Metaadatokat frissítse automatikusan Minden frissítése @@ -226,21 +216,14 @@ Vágólapra másolva: \n%1$s Törli a kijelölt fejezeteket\? - - 1 fejezet - %1$s fejezet - Előző oldal + Hiba Weboldal Frissítések keresése Nyílt forráskódú licenc Lapok Előző %1$s. fejezet - - 1 új fejezet - %1$d új fejezet - Borító frissítve Beállítás borítóként Egyedi szűrő @@ -270,6 +253,8 @@ Újraolvasás Biztosan törölni akarja a kijelölt fejezeteket\? Olvasatlan + Szünetel + Manga könyvtárhoz adása\? Forrás nincs telepítve: %1$s Folyamatban van Utoljára használt @@ -291,7 +276,8 @@ Tiltott: %s Kedvelt: %s Semmi - Mangák a tiltott kategóriákban nem lesznek letöltve, még akkor se, ha a kedvelt kategóriában is vannak. + Bejegyzések a tiltott kategóriákban nem lesznek letöltve, még akkor se, ha a kedvelt kategóriában is vannak. + Mangák a tiltott kategóriákban nem lesznek frissítve, még akkor se, ha a kedvelt kategóriákban is vannak. Biztonságos képernyő Zárás tétlen állapotban Biometrikus zár @@ -302,7 +288,6 @@ Növekvő Fejezet száma szerint Feltöltési idő szerint - Újrarendezés Mégse az összesre a sorozatból Mégse az összesre Tűzés visszavonása @@ -314,27 +299,16 @@ Lekérési dátum Korlátozások: %s Tartalom mutatása a levágott területen - Ha a kétoldalú kettévágás elhelyezése nem egyezik az olvasás irányával - Kétoldalú kettévágás elhelyezésének fordítása - Kétoldalú kettévágása + Ha a szétvágott oldalak elhelyezése nem egyezik az olvasás irányával + Szétvágott oldalak elhelyezésének fordítása + Szétvágása a széles oldalaknak Pillanatnyilag megjelníti, amikor az olvasó meg van nyitva Érintési zónák átfedésének mutatása Alkalmazás információ - Kategóriakénti beállítások rendezés és megjelenítésre - Követők frissítése könyvtár frissítésekor - Követők automatikus frissítése + Kategóriakénti beállítások rendezéshez Polip Eper koktél - - Tegnap - %1$d napja - Ma - Nem rég - Hosszú (Rövid+, x napja) - Rövid (Ma, Holnap) - Mától függő (relatív) időbélyegek - Időbélyegek Teljesen fekete sötét mód Yotsuba Jin és Jang @@ -345,6 +319,7 @@ Alkalmazás témája Kinézet Letöltés elkezdése most + Helyi forrás Követve Hitelesítsd magad a változtatás elfogadásához Alapértelmezett @@ -358,16 +333,12 @@ Utolsó előtti befejezett fejezet Kikapcsolva Egyedi hely + Tiltott kategóriák Legalacsonyabb Alacsony Magas Legmagasabb Görgetés közbeni menü-elrejtés érzékenysége - 25% - 20% - 15% - 10% - Semennyi Bélés oldalon Olvasási mód Mindig mutasson fejezet áttűnést @@ -396,12 +367,10 @@ Skálázási típus Érintési zónák Lapozott - Folytonos függőleges + Hosszú szalag lyukakkal Automatikus Szürke - Mappák létrehozása manga cím szerint - Mentse a lapokat külön mappákba - Mutassa hosszú koppintáson + Cselekmények mutatása hosszú koppintáskor Műveletek Egyik sem Érintési zónák fordítása @@ -421,7 +390,7 @@ Dupla koppintás animációjának sebessége Telepítő Bővítmény telepítése… - Összes manga + Összes bejegyzés Az összes frissítése Nyelv Telepítsd és indítsd el a Shizukut, hogy kiegészítő telepítőként használd. @@ -429,13 +398,9 @@ Figyelmeztetés A Shizuku nem fut Régi - Egyirányú szinkronizálás, hogy a fejezetben való előrehaladás frissítve legyen a követési szolgáltatásokban. Állíts be követést egyéni manga bejegyzésekre, a követési gomb lenyomásával. + Egyirányú szinkronizálás, hogy a fejezetben való előrehaladás frissítve legyen a követési szolgáltatásokban. Állíts be követést egyéni bejegyzésekre, a követési gomb lenyomásával. 3 naponta Csak Wi-Fi-n keresztül - - %d tracker - %d trackerek - Ajánlott az automatikus biztonsági mentése. Ezen kívül máshol is legyenek másolatok. Nincs könyvtári elem, amit menteni lehetne Helyi forrás @@ -449,13 +414,11 @@ Beállítás alapértelmezettként Tablet mód Lista elejére - Nézze meg a web oldalt WebView-ban Globális keresés \"%1$s\"-ra/re Nincs több találat Nincs találat Globális keresés… Feltöltési dátum szerint - Ez a tracker csak a Komga forrással kompatibilis. Ez eltávolítja a fejezet olvasási dátumát. Biztos benne\? Törölni akarja a %s kategóriát \? InternalError: Nézze meg a hibaüzenetet további információért @@ -465,6 +428,8 @@ Biztonsági mentés/helyreállítás nem biztos,hogy működik ha a MIUI Optimalizáció ki van kapcsolva. Helyreállítás folyamatban van Felhasznált gyorsítótár: %1$s + Adatbázis törlése + Nem könyvtári elemek előzményeinek törlése %1$d nem könyvtári manga az adatbázisban Helytelen fejezet formátum Hálózat @@ -477,15 +442,10 @@ Sütik törlése Gyorsítótár törölve: %1$d fájl lett törölve Hiba történt törlés közben - Könyvtár frissítése...(%1$d/%2$d) - - %d-nak/nek - %d-nak/nek - Nem található fájl választó alkalmazás Nincsenek még kategóriáid. Nem sikerült megkerülni a Cloudflare-t - Közelítés fekvő képre + Automatikusan nagyítsa a széles képeket Helyreállítás befejeződött %02d perc, %02d másodperc Adatok visszaállítása a biztonsági mentésből. @@ -499,10 +459,8 @@ Tartva Kategóriák törölve Válasszon képet a fedlapnak - Frissítések keresése… Nem található új frissítés Kihagyott - Tracking frissítése Verzió Nyelv Korhatár @@ -510,10 +468,6 @@ Jelentkezz be %1$s-ba/be Típus A forrás nem található - - %d fejezet kihagyása, hiányzik a forrás, vagy ki lett szűrve - %d fejezet kihagyása, hiányoznak a források, vagy ki lettek szűrve - Olvasatlanok száma Kizárólag fedlapok mutatása Hiányzó források: @@ -535,7 +489,6 @@ Nem található oldal Fej. %1$s - %2$s Kezdési útmutató - Elkezdett Adatbázis törlése Még nem lett elindítva Új fejezet @@ -555,19 +508,14 @@ Alkalmazás frissítések Nem sikerült megnyitni az utolsó olvasott fejezetet v%1$s-ra/re frissült - Navigálás a pan-hez + Széles képek pásztázása Mentés CBZ archívumkén Levendula WebView adatok törlése Feljegyzi a hibát egy fájlba, hogy meg lehessen osztani a fejlesztővel - A biztonsági mentés nem tartalmaz mangát. + A biztonsági mentés nem tartalmaza a bejegyzéseket. Megszakított helyreállítás - - %1$s van hátra - %1$s van hátra - Letöltés - Helyi Befejezett Nincs leírás Letöltés (%1$d/%2$d) @@ -595,8 +543,6 @@ Szűri a könyvtár összes tartalmát Hiba a fedlap megosztása közben Bezár - Többször megjelenő források megjelenítése - Ha nem alacsony az akkumulátor tözöttség Fordított álló Megállítva Olvasási lista @@ -604,7 +550,6 @@ Teljes lista Befejezetlen lista Állapot - Elkezdett Kezdés dátuma Befejezés dátuma Kérjük, jelentkezzen be MAL-ba újra @@ -616,27 +561,19 @@ Egyéni fedlap Következő: Előző: - Nincs többe fejezet + Nincs több fejezet Nincs előző fejezet %1$s oldalt nem lehetett betölteni Oldalak betöltése… Követ Nem sikerült a kiterjesztési lista megnyitása Kikapcsolva - 5% - Szolgáltatások, melyek fejlett funkciókat kínálnak. A manga automatikusan könyvtárhoz lesz adva és frissítve lesz. - Ismételje meg a rögzített forrásokat a megfelelő nyelvi csoportokban - Csak kitűzött forrásokból + Szolgáltatások, melyek fejlett funkciókat kínálnak. A bejegyzés automatikusan könyvtárhoz lesz adva és frissítve lesz. Biztonsági mentés készítése Felhasználható az aktuális könyvtár visszaállítására Biztonsági mentés visszaállítása Könyvtár visszaállítása biztonsági mentésről - Automatikus biztonsági mentések Biztonsági mentések gyakorisága - - Befejezve %1$s alatt, %2$s hibával - Befejezve %1$s alatt, %2$s hibával - Biztonsági mentés helyreállítása Nem sikerült a biztonsági mentés helyreállítása Elemek törölve @@ -659,14 +596,9 @@ Fejezetek száma szerint Könyvtárfrissítési hibák kijavításához sgítségért, tekintese meg %1$s Átugorva, mivel a sorozat befejeződött - Letöltés befejeződött %d oldal nem található felosztás közben Nem található az útvonal a %d-ik oldalhoz Ez a kép legyen a fedlap\? - - %1$s fejezet és még 1 - %1$s fejezet és még %2$d - Biztonsági mentési fájl kiválasztása Alap hálózati kliens szöveg Alap hálózati kliens szöveg visszaállítása @@ -674,10 +606,35 @@ RARv5 formátum nem támogatót Lásd nemrég frissített mangádat Widget nem elérhető amikor az alkalmazás zárolva van - Alkalmazás nyelve, értesítések Téma, dátum és idő formátuma Keresés… - Letöltési sor + Automatikus letöltés olvasás közben + Elkezdett + Letöltött + Helyi + Statisztika + Ismeretlen cím + Áttekintés + Összes + Olvasott + Átlagos értékelés + Véletlenszerű manga megnyitása + Könyvtár utoljára frissítve: %s + Követők + Kategóriák, globális frissítés, fejezet csúsztatás + Alkalmazás zárolás, képernyő zár + Összeomlás naplók kiírása, akkumulátor optimalizálások + Hibás hely: %s + Csak akkor működik, ha az aktuális és a következő fejezet már letöltött. + Letöltés előre + Olvasó mód, kijelző, navigáció + Szökőár + Ne most + Automatikus letöltés, letöltés előre + Egyirányú haladás szinkronizálás, fejlesztett szinkronizálás + Manuális és automatikus biztonsági mentés + Több + Források, bővítmények, globális keresés Másolás a vágólapra Kategória frissítése Vágólapra másolva @@ -691,18 +648,10 @@ Hoppá! Elérhető de a forrás nincs telepítve: %s Tárhely engedély nincs megadva - - Következő fejezet - Következő %d fejezetek - Használt %1$s error: %2$s Biztos vagy benne\? Kategória üres - - Hiányzó %1$s fejezet - Hiányzó %1$s fejezetek - Ez eltávolítja az eddig kiválasztott befejezési dátumot a/az %s Olvasási idő Nem található bejegyzés ebben a kategóriában @@ -717,4 +666,25 @@ Applikáció újrainditása Globális frissités *kötelező - \ No newline at end of file + Fejezet csúsztatás + Balra csúsztatási cselekmény + Duplikált fejezetek átugrása + Időköz állítása + Egyedi lekérési időköz + Lekérés hónaponta (28 nap) + Késő 10+ ellenőrzés + Dobott\? Késő 20+ és 2 hónap + Átment az ellenőrzési időszakon + Következő várt frissítés + Dupla koppintás a nagyításhoz + Már könyvtári bejegyzések elrejtése + Követéshez bejelentkezés + Letöltött törlése + Magas képek szétvágása + %d soronként + Kivül az elvárt kijönési időszakon + Széles oldalak forgatása az illeszkedéshez + Jobbra csúsztatási cselekmény + Forgatott széles oldalak megfordítása + Ok + \ No newline at end of file diff --git a/i18n/src/main/res/values-ie/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/ie/plurals-aniyomi.xml similarity index 100% rename from i18n/src/main/res/values-ie/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/ie/plurals-aniyomi.xml diff --git a/i18n/src/commonMain/resources/MR/ie/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/ie/strings-aniyomi.xml new file mode 100644 index 0000000000..e86b2f3374 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/ie/strings-aniyomi.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/in/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/in/plurals-aniyomi.xml new file mode 100644 index 0000000000..4cb53c997e --- /dev/null +++ b/i18n/src/commonMain/resources/MR/in/plurals-aniyomi.xml @@ -0,0 +1,24 @@ + + + + Berikut %d episode yang belum dilihat + + + %1$s episode + + + Untuk judul %d + + + episode baru %1$d + + + %d detik + + + Episode %1$s dan %2$d lainnya + + + %d Episode selanjutnya + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/in/plurals.xml b/i18n/src/commonMain/resources/MR/in/plurals.xml new file mode 100644 index 0000000000..e661939a07 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/in/plurals.xml @@ -0,0 +1,51 @@ + + + + Setelah %1$s menit + + + %1$d bab baru + + + Bab %1$s dan %2$d lainnya + + + Untuk entri %d + + + Terdapat %d perbaruan ekstensi + + + %1$s lagi + + + %d kategori + + + Selesai dalam %1$s dengan %2$s kesalahan + + + %1$s bab + + + %d pelacak + + + Melewati %d bab, entah sumbernya hilang atau telah difilter + + + %1$d hari yang lalu + + + Selanjutnya chapter %d yang belum dibaca + + + berikutnya %d chapter + + + Bab %1$s yang hilang + + + %d hari + + \ No newline at end of file diff --git a/i18n/src/main/res/values-in/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/in/strings-aniyomi.xml similarity index 96% rename from i18n/src/main/res/values-in/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/in/strings-aniyomi.xml index 3ab3ba852d..1ade6f93e4 100644 --- a/i18n/src/main/res/values-in/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/in/strings-aniyomi.xml @@ -105,9 +105,6 @@ Pemilihan app pengunduhan yang digunakan Unduh episode terbaru Otomatis mengunduh saat sedang menonton - - Berikut %d episode yang belum dilihat - Hanya bekerja pada entri di perpustakaan dan jika episode saat ini ditambah yang berikutnya sudah diunduh Perbarui kemajuan setelah membaca Buka menu sinkronisasi saat menambahkan ke pustaka @@ -130,9 +127,6 @@ episode tidak ditemukan format episode tidak ditemukan Studio tidak diketahui - - %1$s episode - Hapus episode yang sudah diunduh\? Tambahkan manga ke pustaka\? Tambahkan anime ke pustaka\? @@ -174,12 +168,6 @@ Peringatan: mengunduh dalam jumlah besar bisa menyebabkan sumber menjadi lambat dan/atau memblokir Tachiyomi. Ketuk untuk mempelajari lebih lanjut. Video tidak ditemukan Ada episode baru nihh - - Untuk judul %d - - - episode baru %1$d - Tidak ada yang ditonton baru-baru ini WebView dibutuhkan untuk Tachiyomi Ubah pengaturan standar episode @@ -187,9 +175,6 @@ Unduhan episode dijeda Pembaruan chapter/episode +%1$d d - - %d detik - episode selanjutnya tidak ditemukan! Manga Anime @@ -232,9 +217,6 @@ Episode %1$s Episode %1$s dan %2$d lainnya Episode %1$s - - Episode %1$s dan %2$d lainnya - Pengaturan episode Opsi cadangan Manga Ekstension @@ -262,9 +244,6 @@ Picture-in-Picture (PiP) Sembunyikan entri manga yang sudah ada di pustaka Sembunyikan entri anime yang sudah ada di pustaka - - %d Episode selanjutnya - Tautan kualitas video yang disalin ke papan klip Pilih kualitas video: Pengaturan ekstensi diff --git a/i18n/src/main/res/values-in/strings.xml b/i18n/src/commonMain/resources/MR/in/strings.xml similarity index 80% rename from i18n/src/main/res/values-in/strings.xml rename to i18n/src/commonMain/resources/MR/in/strings.xml index a0957b203b..19b3c7ad8f 100644 --- a/i18n/src/main/res/values-in/strings.xml +++ b/i18n/src/commonMain/resources/MR/in/strings.xml @@ -1,17 +1,18 @@ - Manga + Kategori + Entri pustaka Bab Pelacakan Riwayat Pengaturan + Antrean unduhan Pustaka Riwayat Pembaruan Pencadangan dan pemulihan Pengaturan Filter - Terunduh Ditandai Belum dibaca Hapus filter @@ -78,6 +79,7 @@ Pembatasan pembaruan otomatis Saat mengisi daya Dengan status \"Selesai\" + Kategori bawaan Selalu tanya Layar penuh Animasikan transisi halaman @@ -100,14 +102,14 @@ Rentangkan Pas lebar Pas tinggi - Ukuran sebenarnya + Ukuran asli Pas pintar Posisi awal zoom Otomatis Kiri Kanan Tengah - Tipe rotasi bawaan + rotasi bawaan Bebas Terkunci tegak Terkunci mendatar @@ -124,15 +126,14 @@ Bab keempat dari terakhir dibaca Bab kelima dari terakhir dibaca Unduh bab baru - Layanan + Pelacakan Buat cadangan Dapat digunakan untuk memulihkan isi pustaka saat ini Pulihkan cadangan Pulihkan isi pustaka dari berkas cadangan Tempat pencadangan - Pencadangan otomatis - Frekuensi cadangan dibuat - Jumlah maksimum cadangan + Frekuensi pencadangan otomatis + Jumlah maksimum pencadangan otomatis Cadangan dibuat Pemulihan selesai Apa saja yang ingin Anda cadangkan\? @@ -143,8 +144,9 @@ Terjadi kesalahan saat membersihkan Hapus cookies Cookies dihapus + Hapus database + Hapus riwayat untuk entri yang tidak disimpan di perpustakaan Anda Entri dihapus - Segarkan pelacakan metadata Versi Kirim laporan kerusakan Bantu memperbaiki bug. Tidak ada data sensitif yang akan dikirim @@ -153,7 +155,7 @@ Kata sandi Masuk Sudah Masuk - Terdapat suatu kesalahan + Kesalahan tidak diketahui Memperbarui kategori Tidak ada hasil lainnya Sumber lokal @@ -164,6 +166,8 @@ Hapus bab terunduh\? Bab %1$s Mengunduh (%1$d/%2$d) + Kesalahan + Jeda Judul Nomor bab Sumber @@ -183,6 +187,7 @@ Kategori dengan nama ini sudah ada! Kategori dihapus Ini akan menghapus tanggal baca bab ini. Apakah Anda yakin\? + Tambahkan ke pustaka\? Gambar disimpan Filter khusus Tetapkan sebagai sampul @@ -194,18 +199,17 @@ Tidak dapat mengunduh bab. Anda bisa mencoba lagi di bagian unduhan Bab baru ditemukan Gagal memperbarui sampul - Tolong tambahkan manga ke pustaka Anda sebelum melakukan ini + Tolong tambahkan entri ke pustaka Anda sebelum melakukan ini Pilih gambar sampul Pilih berkas cadangan Unduh Pembaruan tidak tersedia - Mencari pembaruan… Mengunduh… - Ketuk untuk menginstal + Ketuk untuk menginstal pembaruan Terjadi kesalahan saat mengunduh Versi baru tersedia! Tidak ada unduhan - Tidak ada pembaruan + Tidak ada pembaruan terkini Tidak ada yang dibaca baru-baru ini Pustaka Anda kosong Pengunduh @@ -213,9 +217,9 @@ Terjadi kesalahan saat mengunduh bab Tidak terhubung dengan Wi-Fi Tidak ada koneksi jaringan yang tersedia + Unduhan dijeda Pencarian Global Diunduh - Lokal Lainnya Pencarian global… Terbaru @@ -224,7 +228,7 @@ Anda belum memiliki kategori. Tekan tombol tambah untuk menambahkan kategori baru untuk mengatur pustaka Anda. Migrasi Ekstensi - Info ekstensi + Info Ekstensi Perbarui Pasang Tertunda @@ -250,7 +254,6 @@ Sumber tidak terpasang: %1$s Baca ulang Status - Dimulai Tipe Selesai: Saat ini: @@ -263,7 +266,7 @@ Buka dalam WebView Warna 32-bit Lewati bab yang sudah dibaca - Tampilkan saat tekan lama + Tampilkan tindakan saat tekan lama Mode saringan warna campur Lapisan Gandakan @@ -278,7 +281,7 @@ Muat ulang Pustaka Usang - Ekstensi ini sudah tidak tersedia. + Ekstensi ini tidak lagi tersedia. Ini mungkin tidak berfungsi dengan baik dan dapat menyebabkan masalah dengan aplikasi. Disarankan untuk menghapus instalasi. Format tanggal Bab terbaru Lihat bab @@ -290,7 +293,6 @@ Kelola notifikasi Keamanan dan privasi Menu - Susun ulang Terbaru Terlama Pindahkan ke atas @@ -301,9 +303,6 @@ Kunci saat diam Selalu Tidak pernah - - Setelah %1$s menit - Pembaruan tertunda Tampilkan konten di area yang terpotong Sembunyikan konten aplikasi saat berpindah aplikasi dan blokir tangkapan layar @@ -314,6 +313,7 @@ Dijeda Gagal untuk menembus Cloudflare Harap perbarui aplikasi WebView untuk kompatibilitas yang lebih baik + Pembaruan bab Memeriksa bab baru Nonaktifkan optimisasi baterai Optimalisasi baterai sudah dimatikan @@ -321,25 +321,13 @@ Amankan layar Keluar dari %1$s\? Tampilan - - %1$d bab baru - Bab %1$s Bab %1$s dan %2$d lainnya Bab %1$s - - Bab %1$s dan %2$d lainnya - Membantu pembaruan pustaka dan pencadangan di latar belakang - - Untuk judul %d - Sumber Pembaruan ekstensi Membaca - - Terdapat %d perbaruan ekstensi - Bab %1$s - %2$s Memperbarui pustaka Tambahkan pelacak @@ -347,59 +335,41 @@ Selengkapnya Di pustaka Tambahkan ke pustaka - Cek dalam WebView Lisensi terbuka Gagal memulihkan data dari cadangan Pencadangan data gagal - 10% - Tidak ada Pinggiran samping Lewati bab yang difilter - Konfirmasi keluar Hilangkan tanda Tandai Pilih kebalikan - Tekan lagi untuk keluar Hanya yang sudah diunduh Tersemat Situs web - 25% - 20% - 15% Strip panjang dengan celah Petunjuk sumber lokal Terakhir digunakan - - %1$s lagi - - Saring semua manga di pustaka + Saring semua entri di perpustakaan Anda Periksa pembaruan Pemulihan dibatalkan Pemulihan masih dalam proses Pencadangan masih dalam proses %02d menit, %02d detik - Hanya mencari pada sumber di-sematkan dalam pencarian global Mode membaca Mengurangi banding, namun berdampak pada performa - - %d kategori - Abu-abu Untuk seri ini Tidak dapat membuka pengaturan perangkat Muat ulang sampul pustaka - - Selesai dalam %1$s dengan %2$s kesalahan - - Sinkronisasi satu arah untuk memperbarui kemajuan bab dalam layanan pelacakan. Siapkan pelacakan untuk entri manga individual dari tombol pelacakan. - Ekstensi ini bukan dari daftar ekstensi resmi Tachiyomi. + Sinkronisasi satu arah untuk memperbarui kemajuan bab di layanan pelacak eksternal. Siapkan pelacakan untuk setiap entri dari tombol pelacaknya. + Ekstensi ini bukan dari daftar resmi. Tidak resmi Periksa sampul dan detail baru saat memperbarui pustaka Segarkan metadata secara otomatis Pindah Data Sumber yang hilang: - Cadangan tidak berisi manga apapun. + Cadangan tidak berisi entri perpustakaan apa pun. Berkas cadangan tidak valid Menurut tanggal pengunggahan Grid nyaman @@ -412,9 +382,6 @@ Tampilkan mode membaca Mulai Sumber tidak ditemukan - - %1$s bab - Mulai ulang aplikasi untuk menerapkan pengaturan Jaringan Matikan @@ -431,21 +398,14 @@ Mode membaca Tema Tanggal ditambahkan - - %d pelacak - Anda tidak memiliki sumber yang disematkan Lengkap Kemajuan - Unduhan selesai Masalah Pelacakan tidak tersinkronisasi di: Sumber dari ekstensi ini mungkin berisi konten DEWASA (18+) 18+ Hal ini tidak mencegah ekstensi yang tidak resmi atau berpotensi salah ditandai untuk menampilkan konten NSFW (18+) di dalam aplikasi. - - Melewati %d bab, entah sumbernya hilang atau telah difilter - Tidak ada bab yang ditemukan Pengaturan bab bawaan diperbarui Tetapkan sebagai bawaan @@ -488,8 +448,8 @@ Lanjut Sblm Otomatis - Simpan halaman di folder terpisah - Buat folder sesuai judul manga + Menyimpan halaman ke dalam folder terpisah + Membuat folder menurut judul entri Kecuali: %s Termasuk: %s Membagi halaman lebar @@ -508,10 +468,11 @@ Belum dibaca Layar mendatar Layar Tegak - Manga dalam kategori yang dikecualikan tidak akan diunduh meskipun termasuk dalam kategori yang disertakan. - Jenis rotasi + Entri dalam kategori yang dikecualikan tidak akan diunduh meskipun mereka juga termasuk dalam kategori yang disertakan. + Rotasi Skala abu-abu Tampilkan zona ketukan + Entri dalam kategori yang dikecualikan tidak akan diperbarui meskipun mereka juga termasuk dalam kategori yang disertakan. Tanggal Urutkan menurut Format bab tidak valid @@ -519,9 +480,8 @@ Jika penempatan halaman lebar terpisah tidak sesuai dengan arah membaca Balikkan penempatan halaman pemisah Tunjukkan secara singkat saat pembaca dibuka - Perbarui pelacak ketika memperbarui pustaka - Segarkan pelacak secara otomatis Batasan: %s + Sumber lokal Gagal berbagi sampul Gagal menyimpan sampul Sampul disimpan @@ -529,15 +489,13 @@ Nonaktif Aktif Panduan pelacakan - Pengaturan per-kategori untuk tampilan dan urutan + Pengaturan per-kategori untuk urutan Anda belum memiliki kategori apapun. Mulai mengunduh sekarang Beberapa pabrikan mempunyai batasan aplikasi tambahan yang mematikan layanan latar belakang. Website ini memiliki info lebih lanjut untuk memperbaikinya. - Memperbarui pustaka... (%1$d/%2$d) - Pelacak ini hanya kompatibel dengan sumber Komga. Pencadangan/pemulihan mungkin tidak berfungsi jika Optimisasi MIUI dimatikan. - Layanan yang menyediakan fitur yang ditingkatan untuk sumber tertentu. Manga dilacak secara otomatis ketika ditambahkan ke pustaka Anda. - Layanan yang ditingkatkan + Menyediakan fitur yang disempurnakan untuk sumber tertentu. Entri secara otomatis dilacak ketika ditambahkan ke perpustakaan Anda. + Pelacak yang ditingkatkan Mode gelap hitam pekat yotsuba Yin dan Yang @@ -547,28 +505,21 @@ Hijau Apel Dinamis Tema aplikasi - Aktivitas dibelakang layar + Aktivitas latar belakang Terendah Rendah Sensitivitas untuk menyembunyikan menu dalam gulir Tinggi Tertinggi Terbalik - Panjang (Pendek+, n hari yang lalu) - Pendek (Hari Ini, Kemarin) - Waktu relatif - - %1$d hari yang lalu - - Baru saja Hari Ini Panduan awal mulai Lacak - Stempel waktu Teal & Pirus Penampilan Autentikasi untuk mengonfirmasi perubahan Bawaan + Kategori yang dikecualikan Bantu terjemahkan UI tablet Informasi aplikasi @@ -577,11 +528,11 @@ Memasang ekstensi… Warisan Pemasang - Total manga + Total entri Pembaruan berskala besar membahayakan sumber, dapat membuat pembaruan lambat dan meningkatkan penggunaan baterai. Ketuk untuk mempelajari lebih lanjut. Peringatan Cetak catatan berlebih ke catatan sistem (mengurangi kinerja aplikasi) - Anda juga harus menyimpan salinan cadangan di tempat lain. + Anda juga harus menyimpan salinan cadangan di tempat lain. Cadangan mungkin berisi data sensitif termasuk kata sandi yang tersimpan; berhati-hatilah jika berbagi. Pencatatan berlebihan Filter warna kustom Atur kecerahan @@ -591,9 +542,9 @@ Pembaruan aplikasi Perbarui semuanya Tidak ada yang perlu dibersihkan - %1$d manga diluar kategori pustaka pada database + %1$d entri non-perpustakaan dalam database Gagal mendapatkan daftar ekstensi - Lewati pembaruan judul + Lewati pembaruan entri Kebijakan privasi Penerbitan selesai Dibatalkan @@ -601,14 +552,12 @@ Untuk bantuan cara memperbaiki kesalahan pembaruan pustaka, lihat %1$s Simpan sebagai arsip CBZ Tanya Jawab dan Panduan - 5% Grid sampul saja Yang belum dibaca - Dimulai Dilewati karena seri telah selesai Dilewati karena ada bab yang belum dibaca Dilewati karena tidak ada bab yang dibaca - Perbesar gambar lanskap + Secara otomatis melebarkan gambar Geser gambar lebar %1$d pembaruan terlewat Pelajari lebih lanjut @@ -624,9 +573,6 @@ Membersihkan data WebView Data WebView telah dibersihkan Tutup - Saat baterai tidak lemah - Tampilkan duplikasi sumber yang ditandai - Ulang sumber ditandai pada kelompok bahasa masing-masing Sumber yang diinstal tidak ditemukan Tidak ada sumber yang ditemukan Jumlah belum dibaca @@ -660,23 +606,19 @@ Setel ulang string agen pengguna default Hapus semuanya Format RARv5 tidak didukung - Lihat manga Anda yang baru saja diperbarui + Lihat entri pustaka Anda yang baru saja diperbarui Widget tidak tersedia saat kunci aplikasi diaktifkan Pembaruan sudah berjalan String agen pengguna wajib diisi Gelombang pasang Unduh di depan Unduh otomatis ketika sedang membaca - - Selanjutnya chapter %d yang belum dibaca - - Hanya berfungsi pada entri di perpustakaan dan jika bab saat ini ditambah yang berikutnya sudah diunduh + Hanya berfungsi jika bab saat ini + bab berikutnya sudah diunduh. Kamu akan menghapus \"%s\" dari pustaka Pustaka terakhir diperbarui: %s banyak - Potong gambar panjang (BETA) Apa kamu yakin\? - Popular + Populer Izin penyimpanan tidak diberikan Dilewati karena seri ini tidak memerlukan pembaruan Cari… @@ -686,41 +628,118 @@ %s mengalami kesalahan tak terduga. Kami menyarankan Anda membagi log kerusakan di saluran dukungan kami di Discord. Unduh otomatis, unduh di depan Kunci aplikasi, layar aman - Bahasa aplikasi, notifikasi Tema, format tanggal & waktu Kategori, pembaruan global, geser chapter - Pencadangan manual & otomatis + Pencadangan manual & otomatis, ruang penyimpanan Buat log kerusakan, pengoptimalan baterai - Terjadi Kesalahan Yang Tak Terduga + Aduh! Mulai ulang aplikasi Lokasi tidak valid: %s Judul tidak diketahui String agen pengguna tidak valid Baru saja - Antrian unduhan + Buka entri acak + Memeriksa unduhan + Tidak ada entri yang ditemukan dalam kategori ini + Build F-Droid tidak didukung secara resmi. +\n Ketuk untuk mempelajari lebih lanjut. + Hapus tanggal\? + Membatalkan indeks unduhan + Ini akan menghapus tanggal mulai yang Anda pilih sebelumnya dari %s + Ini akan menghapus tanggal selesai yang Anda pilih sebelumnya dari %s + Statistik + Entri + Dalam pembaruan global + Total + Baca + Rata-rata nilai + Telah digunakan + %djam + Dimulai + Lokal + Terunduh + Durasi baca + Pelacak + Entri yang dilacak + %ddetik + %dmenit + Ringkasan + Entri selesai + Tidak tersedia + %dhari + Tidak sekarang + Kategori ini kosong + Tersalin di papan klip Tersedia tetapi sumber tidak terpasang: %s Melewati bab terduplikasi Kamu memiliki entri di pustaka dengan nama yang sama. \n \nApakah kamu ingin melanjutkan\? %1$seror%2$s + *dibutuhkan Semua catatan tersembunyi sudah ada di perpustakaan - - berikutnya %d chapter - Salin ke papan klip Perbarui kategori Potong gambar tinggi Lapisan awal Memutar halaman lebar agar pas Orientasi balik halaman lebar yang diputar - - Bab %1$s yang hilang - Info debug Geser chapter Geser kekanan Geser kekiri Ketuk dua kali untuk memperbesar %d per baris - \ No newline at end of file + Tetapkan jeda waktu + Interval pengambilan disesuaikan + Ambil bulanan (28 hari) + Cek 10+ terlambat + Sesuaikan Interval + Dilewati karena tidak ada rilis yang diharapkan hari ini + Berkurang\? Akhir 20+ dan 2 bulan + Melewati periode pemeriksaan + Pembaruan yang diharapkan berikutnya + Interval + Di luar periode rilis yang diharapkan + Perkirakan setiap + Atur untuk memperbarui setiap + Hapus %s pelacakan\? + Oke + Ini akan menghapus pelacakan lokal. + Hapus juga dari %s + Hapus unduhan + Memiliki hasil + Sinkronisasi pustaka + Sinkronisasi pustaka selesai + Ketuk di sini untuk bantuan dengan Cloudflare + Indeks unduhan tidak valid + Pelacak login + Tidak dapat membuat file cadangan + Lisensi - Tidak ada chapter untuk ditampilkan + Buka kunci %s + Tidak ada koneksi Internet + HTTP %d, periksa situs web di WebView + Tidak dapat mencapai %s + Pindahkan seri ke bawah + Penanda waktu + \"%1$s\" seharusnya \"%2$s\" + Mengurutkan kategori + Memperbarui pustaka... (%s) + Apakah Anda ingin mengurutkan kategori menurut abjad\? + Tidak ada file yang dipilih + Pengaturan sumber + Pengaturan aplikasi + Buat + Tidak pernah + Mengurangi ghosting pada tampilan e-ink + Terapkan + Kembalikan ke default + Terakhir dicadangkan secara otomatis: %s + Tidak ditemukan pemindai + Pemindai + Berkedip putih pada perubahan halaman + Penggunaan penyimpanan + Skor pelacak + Data dan penyimpanan + Kecualikan pemindai + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/it/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/it/plurals-aniyomi.xml new file mode 100644 index 0000000000..16679e34a2 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/it/plurals-aniyomi.xml @@ -0,0 +1,38 @@ + + + + Prossima puntata non vista + Prossime %d puntate non viste + Prossime %d puntate non viste + + + 1 episodio + %1$s episodi + %1$s episodi + + + 1 nuovo episodio + %1$d nuovi episodi + %1$d nuovi episodi + + + Episodi %1$s e 1 altro + Episodi %1$s e altri %2$d + Episodi %1$s e altri %2$d + + + Per 1 titolo + Per %d titoli + Per %d titoli + + + %d secondo + %d secondi + %d secondi + + + Prossimo episodio + Prossimi %d episodi + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/it/plurals.xml b/i18n/src/commonMain/resources/MR/it/plurals.xml new file mode 100644 index 0000000000..29e0d9b291 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/it/plurals.xml @@ -0,0 +1,83 @@ + + + + Dopo %1$s minuto + Dopo %1$s minuti + Dopo %1$s minuti + + + Aggiornamento estensione disponibile + %d estensioni hanno aggiornamenti disponibili + %d estensioni hanno aggiornamenti disponibili + + + Capitoli %1$s e un altro + Capitoli %1$s e altri %2$d + Capitoli %1$s e altri %2$d + + + %1$d nuovo capitolo + %1$d nuovi capitoli + %1$d nuovi capitoli + + + Per %d voce + Per %d voci + Per %d voci + + + %1$s rimanente + %1$s rimanenti + %1$s rimanenti + + + Completato in %1$s con %2$s errore + Completato in %1$s con %2$s errori + Completato in %1$s con %2$s errori + + + %d categoria + %d categorie + %d categorie + + + %1$s capitolo + %1$s capitoli + %1$s capitoli + + + %d tracker + %d trackers + %d trackers + + + %d capitolo saltato, la fonte non ce l\'ha o è stato filtrato + %d capitoli saltati, la fonte non li ha o sono stati filtrati + %d capitoli saltati, la fonte non li ha o sono stati filtrati + + + Ieri + %1$d giorni fa + %1$d giorni fa + + + Il prossimo capitolo non letto + I prossimi %d capitoli non letti + I prossimi %d capitoli non letti + + + Prossimo capitolo + Prossimo %d capitoli + Prossimo %d capitoli + + + Manca %1$s capitolo + Mancano %1$s capitoli + Mancano %1$s capitoli + + + Un giorno + %d giorni + %d giorni + + \ No newline at end of file diff --git a/i18n/src/main/res/values-it/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/it/strings-aniyomi.xml similarity index 93% rename from i18n/src/main/res/values-it/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/it/strings-aniyomi.xml index 0a8fe949ca..e4766eec76 100644 --- a/i18n/src/main/res/values-it/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/it/strings-aniyomi.xml @@ -55,17 +55,7 @@ Anime Tempo di visione Sposta Aggiornamenti nella scheda Altro - - Prossima puntata non vista - Prossime %d puntate non viste - Prossime %d puntate non viste - Forza l\'app a ricontrollare i capitoli e gli episodi scaricati - - 1 episodio - %1$s episodi - %1$s episodi - Usa un downloader esterno Usa un downloader interno Categoria anime predefinita @@ -96,22 +86,12 @@ Attiva regolazione Volume e Retroilluminazione attraverso i gesti Attiva movimento di ricerca orizzontale attraverso i gesti Nulla è stato guardato di recente - - 1 nuovo episodio - %1$d nuovi episodi - %1$d nuovi episodi - Salta l\'Opening Salta MixedOp Opzioni di riproduzione Cambia la lunghezza dell\'intro Salta l\'Ending Estensioni Anime - - Episodi %1$s e 1 altro - Episodi %1$s e altri %2$d - Episodi %1$s e altri %2$d - Salva e utilizza l\'ultimo livello di retroilluminazione impostato Salva e utilizza l\'ultimo livello di volume impostato Player esterno scelto @@ -125,17 +105,7 @@ Nessun episodio trovato Leggendo Nessun video trovato - - Per 1 titolo - Per %d titoli - Per %d titoli - +%1$d s - - %d secondo - %d secondi - %d secondi - 6 secondi 9 secondi Attiva lo stile Netflix @@ -272,11 +242,6 @@ Abilita l\'uso della modalità PiP Volume e Luminosità Picture in Picture (PiP) - - Prossimo episodio - Prossimi %d episodi - - Mostra statistiche CPU Nascondi manga già in libreria diff --git a/i18n/src/main/res/values-it/strings.xml b/i18n/src/commonMain/resources/MR/it/strings.xml similarity index 85% rename from i18n/src/main/res/values-it/strings.xml rename to i18n/src/commonMain/resources/MR/it/strings.xml index 789b8c936e..d3fe61a7a0 100644 --- a/i18n/src/main/res/values-it/strings.xml +++ b/i18n/src/commonMain/resources/MR/it/strings.xml @@ -1,16 +1,14 @@ Nome - Impostazioni + Coda download Libreria Cronologia Novità Backup e ripristino - Impostazioni Filtro - Scaricati Segnalibri Non letti Rimuovi filtro @@ -48,16 +46,12 @@ Installa Condividi Salva - Caricamento… - - Generale Lettore Download Avanzate Info - Dimensione della griglia Verticale Orizzontale @@ -99,7 +93,7 @@ Sinistra Destra Centro - Orientamento predefinito + Rotazione predefinita Libero Bloccato verticale Bloccato orizzontale @@ -107,7 +101,6 @@ G B A - Posizione dei download Posizione personalizzata Disabilitato @@ -117,39 +110,32 @@ Quartultimo capitolo letto Quintultimo capitolo letto Scarica nuovi capitoli - - Servizi - + Servizi di tracking Usati: %1$s Cache cancellata. %1$d file sono stati cancellati Errore durante la cancellazione Cancella cookie Cookie cancellati + Pulisci database + Elimina la cronologia delle voci che non sono presenti nella libreria Elementi eliminati - Versione - Invia segnalazioni crash Aiuta a correggere eventuali bug. Non verranno inviati dati sensibili - Accedi a %1$s Nome utente Password Accedi Accesso riuscito Errore sconosciuto - Aggiornamento categoria - - - In corso Sconosciuto Concesso in licenza Rimuovi dalla libreria - Capitolo %1$s Scaricando (%1$d/%2$d) + Errore Titolo della fonte Numero del capitolo Per fonte @@ -157,7 +143,6 @@ Scarica Non letti Sei sicuro di voler eliminare i capitoli selezionati\? - In lettura Completato Abbandonato @@ -167,12 +152,9 @@ Titolo Stato Capitoli - Esiste già una categoria con questo nome! - Questo rimuoverà la data lettura di questo capitolo. Sei sicuro\? Immagine salvata - Filtro personalizzato Imposta come copertina Copertina aggiornata @@ -180,39 +162,29 @@ Capitolo successivo non trovato Non è stato possibile caricare l\'immagine Usare questa immagine come copertina\? - - - Impossibile scaricare i capitoli. Puoi riprovare nella sezione download - Nuovi capitoli trovati Impossibile aggiornare la copertina Prima di compiere questa azione per favore aggiungi la voce alla libreria - Seleziona immagine di copertina Seleziona file di backup - Scarica Non ci sono nuovi aggiornamenti disponibili - Ricerca aggiornamenti… - Download in corso… Tocca per installare l\'aggiornamento Errore di scaricamento Nuova versione disponibile! - - Nessun download Nessuna novità recente Nessuna lettura recente La tua libreria è vuota - Gestione Download Errore Impossibile scaricare il capitolo a causa di un errore imprevisto Nessuna connessione Wi-Fi disponibile Nessuna connessione di rete disponibile - Manga + Categorie + Voci della libreria Cronologia Capitoli totali Aggiungi @@ -221,6 +193,7 @@ Ripristina App non disponibile Ogni settimana + Categoria predefinita Tracking Tracking Chiedi sempre @@ -231,19 +204,19 @@ Ripristina backup Ripristina la libreria da un file di backup Posizione dei backup - Frequenza dei backup - Massimo numero di backup + Frequenza dei backup automatici + Massimo numero di backup automatici Backup creato Ripristino completato - Backup automatici Di cosa vuoi fare il backup\? Ripristino backup Creazione backup - Aggiorna tracking Nessun altro risultato Fonte locale Eliminare i capitoli scaricati? + In pausa Tracking + Aggiungere alla libreria\? Download in pausa Migra Estensioni @@ -266,7 +239,6 @@ Senza animazione Normale Veloce - Locale Altro Ricerca globale… Ultimi @@ -278,7 +250,6 @@ Fonte non installata: %1$s Rileggendo Stato - Iniziato Tipo Categorie rimosse Seleziona i dati da includere @@ -298,7 +269,7 @@ Colori a 32 bit Salta i capitoli segnati come letti Schermo - Mostra alla pressione lunga + Mostra azioni con un tocco prolungato Modalità di fusione del filtro colore Sovrimpressione Moltiplica @@ -333,45 +304,19 @@ Blocca quando inattivo Sempre Mai - - Dopo %1$s minuto - Dopo %1$s minuti - Dopo %1$s minuti - Schermo sicuro Aggiornamenti in sospeso Mostra il contenuto dell\'area ritagliata Impossibile bypassare Cloudflare Per favore aggiorna l\'app WebView per una migliore compatibilità + Aggiornamenti capitoli Schermo sicuro nasconde i contenuti dell\'app quando cambi applicazione e blocca gli screenshot Visualizzazione - Riordina Aggiornamenti estensione - - Aggiornamento estensione disponibile - %d estensioni hanno aggiornamenti disponibili - %d estensioni hanno aggiornamenti disponibili - - - Capitoli %1$s e un altro - Capitoli %1$s e altri %2$d - Capitoli %1$s e altri %2$d - Capitoli %1$s Capitolo %1$s e altri %2$d Capitolo %1$s - - %1$d nuovo capitolo - %1$d nuovi capitoli - %1$d nuovi capitoli - - - Per %d titolo - Per %d titoli - Per %d titoli - Cercando nuovi capitoli - Controlla il sito in WebView Indirizzo e-mail Ottimizzazione batteria già disattivata Facilita gli aggiornamenti e i backup in secondo piano @@ -392,11 +337,6 @@ Nella libreria Aggiungi alla libreria Fissato - 25% - 20% - 15% - 10% - Nessuno Riempimento laterale Verticale lungo con interruzioni Sblocca @@ -411,36 +351,18 @@ Ripristino già in corso Backup fallito Il backup è già in corso - Conferma uscita - Premi indietro nuovamente per uscire Solo scaricati Modalità di lettura Per questa serie Guida alle fonti locali Ultimo usato - - %1$s rimanente - %1$s rimanenti - %1$s rimanenti - Filtra tutte le voci nella tua libreria Controlla aggiornamenti Impossibile aprire le impostazioni del dispositivo Aggiorna le copertine della libreria - - Completato in %1$s con %2$s errore - Completato in %1$s con %2$s errori - Completato in %1$s con %2$s errori - %02d min, %02d sec - Usa solo le fonti fissate per la ricerca globale - Sincronizzazione a senso unico per aggiornare l\'avanzamento del capitolo sui servizi di tracking. Imposta il tracking per le singole voci dai loro pulsanti di tracking. + Sincronizzazione a senso unico per aggiornare l\'avanzamento dei capitoli sui servizi di tracking. Imposta il tracking per le singole voci dai loro pulsanti di tracking. Riduce il banding, ma potrebbe influire sulle prestazioni - - %d categoria - %d categorie - %d categorie - Grigio Nessuna pagina trovata Per data di aggiunta @@ -449,7 +371,7 @@ Fonti mancanti: Il backup non contiene alcuna voce di libreria. File di backup invalido - Questa estensione non è presente nella lista ufficiale delle estensioni di Tachiyomi. + Questa estensione non è dalla lista ufficiale. Non ufficiale Controlla nuove copertine e descrizioni durante l\'aggiornamento della libreria Ricarica metadati automaticamente @@ -464,11 +386,6 @@ Nessuno Inverti le zone di tocco Fonte non trovata - - %1$s capitolo - %1$s capitoli - %1$s capitoli - Stato sconosciuto Autore sconosciuto Aggiornato alla v%1$s @@ -483,23 +400,12 @@ Modalità di lettura Tema Data di aggiunta - - %d tracker - %d trackers - %d trackers - Progresso Errori Completo - Download completato Non hai fonti fissate Fonti di questa estensione potrebbero contenere materiale NSFW (18+) 18+ - - %d capitolo saltato, la fonte non ce l\'ha o è stato filtrato - %d capitoli saltati, la fonte non li ha o sono stati filtrati - %d capitoli saltati, la fonte non li ha o sono stati filtrati - Tracker non collegati: Nessun capitolo trovato Questo non impedisce a estensioni non ufficiali oppure incorrettamente segnalate di mostrare contenuti 18+ all\'interno dell\'applicazione. @@ -552,20 +458,19 @@ Le voci che si trovano in categorie escluse non saranno scaricate nonostante si trovino anche in categorie incluse. Destra Sinistra + Le voci in categorie escluse non saranno aggiornati nonostante si trovino anche in categorie incluse. DNS su HTTPS (DoH) Mostra sovrapposizione con zone di tocco Mostra brevemente quando il lettore viene aperto Tocca per vedere i dettagli Questa versione di Android non è più supportata Impossibile copiare negli appunti - Orientamento + Rotazione Disabilita modalità incognito Orizzontale Verticale - Automatico - Crea cartelle in base ai titoli delle voci + Auto Annulla tutti per questa serie - Salva pagine in cartelle separate Azioni Scala di grigi Nessun risultato trovato @@ -578,35 +483,23 @@ Errore nel salvataggio della copertina Copertina salvata Non letti - Impostazioni di ordinamento e visualizzazione per categoria + Impostazioni di ordinamento per categoria Non hai ancora nessuna categoria. Attivo Restrizioni: %s + Fonte locale Copertina Formato capitolo non valido Guida al tracking - Aggiorna i tracker all\'aggiornarsi della libreria - Aggiorna automaticamente i tracker Inizia a scaricare ora Alcuni produttori hanno restrizioni aggiuntive per le app che chiudono i servizi in secondo piano. Questo sito ha più informazioni su come risolvere il problema. - Aggiornando libreria... (%1$d/%2$d) - Questo tracker è compatibile solo con la fonte Komga. Più basso Basso Alto Più alto Sensibilità per nascondere il menù allo scorrimento Inversa - Lunga (Corta+, n giorni fa) - Corta (Oggi, Ieri) - Data e Ora relativi - - Ieri - %1$d giorni fa - %1$d giorni fa - Oggi - Recentemente Modalità scura con nero puro Yotsuba Yin e Yang @@ -621,13 +514,13 @@ Predefinita Attività in secondo piano Le funzioni di backup e ripristino potrebbero non funzionare correttamente se le ottimizzazioni MIUI sono disabilitate. - Servizi che offrono funzioni migliorate per fonti specifiche. Le voci sono tracciate automaticamente quando aggiunte alla libreria. - Servizi migliorati - Data e Ora + Offrono funzioni migliorate per fonti specifiche. Le voci sono tracciate automaticamente quando aggiunte alla libreria. + Servizi di tracking migliorati Aspetto Traccia Guida introduttiva Interfaccia tablet + Categorie escluse Aiuta a tradurre Informazioni app Installa e avvia Shizuku per usarlo come installatore delle estensioni. @@ -640,7 +533,7 @@ Registrazione dettagliata Lingua Attenzione - Dovresti tenere delle copie dei backup anche in altri posti. + Dovresti tenere delle copie dei backup anche in altri posti. I backup possono contenere dati sensibili comprese le password memorizzate; fate attenzione al condividerli. Grossi aggiornamenti danneggiano le fonti, possono rallentare gli aggiornamenti e aumentare il consumo di batteria. Tocca per saperne di più. Solo su Wi-Fi Ogni 3 giorni @@ -650,18 +543,16 @@ Niente da Pulire Impossibile ottenere l\'elenco estensioni Politica sulla privacy - Salta l\'aggiornamento di serie + Salta l\'aggiornamento delle voci Per un aiuto su come risolvere gli errori di aggiornamento della libreria vedi %1$s Salva come archivio CBZ Cancellata In pausa Pubblicazione terminata Domande frequenti e guide - 5% Scorri le immagini larghe - Ingrandisci le immagini orizzontali + Ingrandisci automaticamente le immagini larghe Griglia con solo copertine - Iniziati Che non sono state iniziate Saltato perché la serie è completa Saltato perché ci sono capitoli non letti @@ -680,9 +571,6 @@ Cancella dati WebView Dati WebView cancellati Chiudi - Mostra fonti duplicate appuntate - Ripetere le fonti appuntate nei rispettivi gruppi di lingue - Quando la batteria non è scarica Nessuna fonte installata trovata Nessuna fonte trovata Conteggio non letti @@ -698,7 +586,7 @@ Versione Lingua In Pausa - In Lettura + Lista di lettura Da Leggere Completati Non Completati @@ -722,23 +610,16 @@ La sringa «user agent» non può essere vuota Maremoto Scarica i prossimi - - Il prossimo capitolo non letto - I prossimi %d capitoli non letti - I prossimi %d capitoli non letti - Download automatico durante la lettura - Funziona solo sui manga nella libreria e se il capitolo corrente e quello successivo sono già stati scaricati + Funziona se il capitolo corrente e quello successivo sono già stati scaricati. Sei sicuro\? Multiple Ultimo aggiornamento libreria: %s - Dividi immagini alte (BETA) Stai per rimuovere «%s» dalla tua libreria Popolare Autorizzazioni per l\'archiviazione non concesse Saltato perché la serie non richiede aggiornamenti Ricerca… - Lingua dell\'app, notifiche Tema, formato data e ora %s ha riscontrato un errore imprevisto. Ti suggeriamo di condividere il registro degli arresti anomali nel nostro canale di supporto su Discord. Categorie, aggiornamenti globali, azioni di scorrimento capitoli @@ -746,10 +627,10 @@ Fonti, estensioni, ricerca globale Modalità di lettura, aspetto, navigazione Sincronizzazione unidirezionale avanzamenti, sincronizzazione migliorata - Backup manuali e automatici + Backup manuali e automatici, spazio di archiviazione Blocco app, schermo protetto Registro arresti anomali, ottimizzazioni batteria - Si è verificato un errore imprevisto + Ops! Riavvia l\'applicazione Posizione invalida: %s Titolo sconosciuto @@ -760,7 +641,33 @@ Nessuna voce trovata in questa categoria Le versioni F-Droid non sono ufficialmente supportate. \nToccare per saperne di più. - Coda download + Rimuovere la data\? + Verrà rimossa la data di fine precedentemente selezionata da %s + Verrà rimossa la data di inizio precedentemente selezionata da %s + Invalida l\'indice dei download + Iniziati + Panoramica + Voci + Statistiche + Voci completate + In locale + Durata lettura + Voci tracciate + In uso + N/D + %d min + Scaricati + Nell\'aggiornamento globale + Letti + Punteggio medio + %d o + Totale + Trackers + %d s + %d g + Non ora + La categoria è vuota + Copiato negli appunti Disponibile ma la fonte non è installata: %s Salta i capitoli duplicati Hai già una voce in libreria con lo stesso nome. @@ -768,27 +675,57 @@ \nVuoi comunque continuare\? %1$s errore: %2$s *obbligatorio - - Prossimo capitolo - Prossimo %d capitoli - Prossimo %d capitoli - Nascondi le voci già in libreria Copia negli appunti Aggiorna categoria Dividi immagini alte Sovrimpressione - Ruota le pagine larghe per adattareaallo schermo + Ruota le pagine larghe per adattarle allo schermo Capovolgi l\'orientamento delle pagine larghe ruotate - - Manca %1$s capitolo - Mancano %1$s capitoli - Mancano %1$s capitoli - Informazioni di debug Scorrimento capitolo Doppio tocco per ingrandire Azione di scorrimento a destra Azione di scorrimento a sinistra %d per riga - \ No newline at end of file + Imposta intervallo + Recupera mensilmente (28 giorni) + Abbandonato\? In ritardo tra 20 giorni e 2 mesi + Fuori dal periodo di rilascio previsto + Personalizza intervallo + Intervalli + Stima ogni + Intervallo di recupero personalizzato + Periodo di controllo superato + In ritardo di 10+ giorni + Prossimo aggiornamento previsto + Imposta l\'aggiornamento ogni + Saltato perché oggi non era previsto alcun rilascio + Rimuovere il tracking di %s\? + Rimuovi anche da %s + OK + Questo rimuoverà il tracciamento locale. + Cancella scaricati + Con risultati + Sincronizzazione libreria completata + Sincronizzazione libreria + Tocca qua per assistenza con Cloudflare + Indice dei download invalidato + Login del trakcer + Non è stato possibile creare un file di backup + Licenziato - Nessun capitolo da mostrare + HTTP %d, controlla il sito nella WebView + Nessuna connessione ad internet + %s non raggiungibile + Sblocca %s + Spostare la serie in fondo + Timestamp relativi + «%1$s» invece di «%2$s» + Impostazioni app + Impostazioni delle fonti + Aggiornando libreria... (%s) + Ordinamento categorie + Vuoi ordinare le categorie alfabeticamente\? + Il selettore di file ha restituito file all\'app + Dati e archiviazione + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ja/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/ja/plurals-aniyomi.xml new file mode 100644 index 0000000000..e86b2f3374 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/ja/plurals-aniyomi.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ja/plurals.xml b/i18n/src/commonMain/resources/MR/ja/plurals.xml new file mode 100644 index 0000000000..8c6bfcfacb --- /dev/null +++ b/i18n/src/commonMain/resources/MR/ja/plurals.xml @@ -0,0 +1,51 @@ + + + + %1$s分後 + + + %1$d新しい章 + + + 残り%1$s件 + + + %1$sで完成済み %2$s件のエラーが発生しました + + + %d件のカテゴリー + + + %d件の拡張機能の更新が利用可能 + + + 第%1$s章とその他%2$d章 + + + %d件の項目 + + + %1$s章 + + + %d個のトラッカー + + + ソースには存在しないか、フィルターによって排除されたため、%d章がスキップされました + + + %1$d日前 + + + 次の未読の%d章 + + + 次の%d章 + + + %1$s章が欠けています + + + %d日 + + \ No newline at end of file diff --git a/i18n/src/main/res/values-ja/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/ja/strings-aniyomi.xml similarity index 100% rename from i18n/src/main/res/values-ja/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/ja/strings-aniyomi.xml diff --git a/i18n/src/main/res/values-ja/strings.xml b/i18n/src/commonMain/resources/MR/ja/strings.xml similarity index 81% rename from i18n/src/main/res/values-ja/strings.xml rename to i18n/src/commonMain/resources/MR/ja/strings.xml index 7d4112efba..eb9bdcde94 100644 --- a/i18n/src/main/res/values-ja/strings.xml +++ b/i18n/src/commonMain/resources/MR/ja/strings.xml @@ -1,17 +1,18 @@ 名前 - 漫画 + カテゴリー + ライブラリの項目 履歴 設定 + ダウンロードキュー ライブラリ 履歴 新着 バックアップと復元 設定 絞り込む - ダウンロード済み お気に入り 未読 フィルタを削除 @@ -27,14 +28,14 @@ コンパクトグリッド リスト ソート - 追跡 + トラッキング 拡張機能 拡張機能の情報 移行 既読にする 未読にする 削除する - ライブラリを更新する + ライブラリを更新 編集 カテゴリを追加 カテゴリを編集 @@ -73,6 +74,7 @@ 自動更新の条件 充電中 ステータスが「完結済み」 + デフォルトカテゴリー 毎回尋ねる 更新 インストール @@ -115,7 +117,7 @@ 中央 通常 速い - 既定の回転モード + 既定の画面向き 自動回転 縦向き画面を強制 R @@ -132,11 +134,12 @@ バックアップを復元 バックアップファイルからライブラリを復元する バックアップディレクトリ - 自動バックアップ - バックアップ頻度 - 最大バックアップ数 + 自動バックアップの頻度 + 最大の自動バックアップ数 バックアップが作成されました 消去中にエラーが発生しました + データベースをクリア + ライブラリにない項目の履歴を削除 バージョン クラッシュレポートを送信する %1$sにログイン @@ -150,9 +153,9 @@ 削除 インストール 取り消し - 説明 + ヘルプ 前の章を既読にする - WebViewで開く + WebView で開く ビューア 同期 ページ数を表示 @@ -164,21 +167,19 @@ 最後に読んだ章の3番目 最後に読んだ章の4番目 最後に読んだ章の5番目 - サービス + トラッカー 復元が完了しました バックアップしたいのは? バックアップを復元中 バックアップを作成中 - サイズ:%1$s + サイズ: %1$s キャッシュを削除しました。%1$d件のファイルは削除されました Cookiesを削除 Cookiesを削除しました エントリーを削除しました - 追跡情報を更新 バグの修正などに役立ちます。個人情報を送信しません 不明なエラー カテゴリーを更新中 - ローカル これ以上の結果はありません グローバル検索… 最近の更新 @@ -190,10 +191,12 @@ ライブラリに追加しました ライブラリから削除しました ダウンロードした章を削除してもよろしいですか? - 次をクリップボードにコピーしました: + 次をクリップボードにコピーしました: \n%1$s 第%1$s章 ダウンロード中(%1$d/%2$d) + エラー + 一時停止済み ソースタイトル 章の数 ソースに基づいた順 @@ -211,16 +214,16 @@ タイトル ステータス ステータス - 開始済み タイプ この名前が既に存在しています! カテゴリーが削除されました この章の読書日時を削除してもよろしいですか? + ライブラリに追加しますか? 画像を保存しました カスタム フィルタ カバーとして設定 カバーとして設定しました - ページ:%1$d + ページ: %1$d 次の章が見つかりません 画像をロードできませんでした カバーとして設定しますか? @@ -235,14 +238,13 @@ バックアップファイルを選択 ダウンロード 新しいバージョンがありません - アップデートを確認中… ダウンロード中… タップでアップデートをインストール ダウンロード中にエラー発生 アップデート利用可能! ダウンロードがありません 最近の更新はありません - 最近に読んだ漫画がありません + 最近は何も読んでいません ライブラリは空です カテゴリーがありません。「+」をタップしてカテゴリーを追加し、ライブラリを整理できます。 ダウンロード @@ -250,18 +252,19 @@ 予期せぬエラーが発生したため、ダウンロードは失敗しました Wi-Fi接続は利用できません ネットワーク接続が利用できません + ダウンロード一時停止済み 一般設定 読み返し中 - 未インストールのソース:%1$s - 読み終わりました: - 読んでいます: - 次: - 前: + 未インストールのソース: %1$s + 読み終わりました: + 読んでいます: + 次: + 前: 次の章がありません 前の章がありません ページをロード中… - ページのロードに失敗:%1$s - 長押しで表示 + ページのロードに失敗: %1$s + 長押しでアクションを表示 32ビットカラー 読み終わった章をスキップ カラーフィルターブレンドモード @@ -271,7 +274,7 @@ 移行元を選択 前へ 次へ - 再ロード + 更新 ライブラリ 廃止済み この拡張機能は利用不可になったため、正常に機能しなかったり、アプリでエラーを起こしたりする恐れがあります。アンインストールすることをお勧めします。 @@ -285,34 +288,24 @@ その他 最新章の更新順 章を見る - 全てキャンセル + すべてキャンセル ダークモード オフ オン - システム設定 + システムに従う 通知設定 セキュリティとプライバシー アンロックを必要とする タイムアウトロック 常時 しない - - %1$s分後 - セキュア画面 - - %1$d新しい章 - 第%1$s章 最新 ソース ローカルソース - WebViewでサイトを開く タブ メールアドレス - - 残り%1$s件 - ライブラリにある項目はフィルターされます ダウンロード済みのみ 更新を確認 @@ -329,20 +322,11 @@ 既に復元中です バックアップできませんでした 既にバックアップ中です - - %1$sで完成済み %2$s件のエラーが発生しました - %02d分%02d秒 - ソースがありません: + ソースがありません: バックアップにはライブラリの項目が含まれません。 バックアップファイルは無効です - ピン留め済みのソースのみで検索 - 一方同期の追跡サービスにある章の読書進捗を更新します。個別の項目の「同期」ボタンで追跡サービスを設定してください。 - 25% - 20% - 15% - 10% - なし + 一方同期の外部追跡サービスにある章の読書進捗を更新します。個別の項目の「同期」ボタンで追跡サービスを設定してください。 余白 読書中 章の間の遷移ページを常に表示 @@ -354,23 +338,18 @@ 乗算 バンディングを軽減しますが、パフォーマンスを影響するかもしれません 画面の切り抜きエリアにも内容を表示 - この拡張機能はTachiyomiの公式拡張機能リストに含まれていません。 + この拡張機能は公式リストに含まれていません。 非公式 更新あり - - %d件のカテゴリー - ライブラリを更新時、新しい表紙と情報を確認します メタデータを自動で更新 グリッドの項目数 画面 通知内容を非表示 セキュア画面はアプリを切り替える時アプリの内容を非表示し、画面キャプチャを無効化します - 終了時に確認 底に移動 トップに移動 最古 - 再並び替え ピン留めを外す ピン留め カテゴリータブを表示 @@ -380,25 +359,16 @@ 全て有効にする 選択を反転 メニュー - もう一度押して終了します + 章の更新 WebViewアプリを更新して互換性を向上させてください - - %d件の拡張機能の更新が利用可能 - 新しい章を確認中 ライブラリを更新中 ビューアモード 詳細を非表示 拡張機能の更新 Cloudflareをバイパスできませんでした - - 第%1$s章とその他%2$d章 - 第%1$s章とその他%2$d章 第%1$s章 - - %d件の項目 - 第%1$s章 - %2$s ページが見つかりません このシリーズでは @@ -413,9 +383,6 @@ 現在のビューアモードを、ビューアが立ち上がるとしばらく表示します ビューアモードを表示 ソースが見つかりませんでした - - %1$s章 - 無効化 開始 両方 @@ -432,25 +399,18 @@ 読み方 完了 プログレス - ダウンロード完了 - - %d個のトラッカー - ピンソースがありません グローバルで「%1$s」を探す テーマ ライブラリへの追加日付順 エラー - ログインしていないトラッカー: + ログインしていないトラッカー: この拡張機能のソースには成人向けのコンテンツが含まれる可能性があります 成人向け 非公式や誤ってフラグ付けされた可能性のある拡張機能の成人向けのコンテンツはこれからも表示される恐れがあります。 - - ソースには存在しないか、フィルターによって排除されたため、%d章がスキップされました - 章が見つかりません デフォルトの章設定を更新しました - %1$s:%2$s、第%3$dページ + %1$s: %2$s、第%3$dページ デフォルトとして設定 デフォルト設定として保存しますか? 章の設定 @@ -497,9 +457,10 @@ DNS over HTTPS(DoH) 含まれているカテゴリーに入っていても、除外対象カテゴリーにある項目は更新されません。 自動ダウンロード - 下記を除外:%s - 下記を含む:%s + 下記を除外: %s + 下記を含む: %s なし + 含まれているカテゴリーに入っていても、除外対象カテゴリーにある項目は更新されません。 タップで詳細を表示 章の取得された日付順 まだカテゴリを登録していません。 @@ -518,59 +479,47 @@ 章が見つかりませんでした シークレットモードを無効にする 追跡ガイド - 回転モード + 画面向き 自動 - 項目のタイトルに基づいてフォルダを作成 - 別々のフォルダにページを保存 操作 グレースケール - OFF - ON - カテゴリ別のソート及び表示設定 - ライブラリを更新時、トラッカーも更新する - トラッカーを自動でリロード - 制限:%s + オフ + オン + カテゴリ別のソート設定 + 制限: %s このシリーズの全項目をキャンセル + ローカル ソース 横向き 縦向き 真っ黒モード - 四葉 + Yotsuba 陰陽 - + Tako ストロベリーダイキリ 黄昏 - 青林檎 + 青りんご アプリテーマ ダウンロードを開始します - ライブラリを更新中... (%1$d/%2$d) ダイナミック - このトラッカーはKomgaにのみ対応します。 一部のスマホメーカーはバックグラウンドサービスを終了する追加のアプリ制限を施しています。修正する方法についてはこのWebサイトをご覧ください。 - バックアップアクティビティ + 背景活動 MIUI最適化が有効な場合はバックアップ・復元が正常に機能しない恐れがあります。 最低 低い 高い 最高 反転配色 - 長め(短め、n日前) - 短め(今日、昨日) - 相対的なタイムスタンプ - - %1$d日前 - 今日 - 最近 翻訳に協力 入門ガイド タブレットUI 追跡 + 除外されるカテゴリー メニューを自動非表示するスクロール量 - タイムスタンプ - 青緑&土耳古石 + ティール & ターコイズ 外観 認証を行って変更を確認してください - 既定 + デフォルト レガシー インストーラ アプリの情報 @@ -578,9 +527,9 @@ Shizukuは実行中ではありません 項目数 拡張機能をインストール中… - 高度なサービス - 特定ソース専用の高度な機能を提供するサービスです。項目はライブラリに追加される時、自動で追跡され始めます。 - ほかの場所にもバックアップのコピーを保管してください。 + 高度な追跡サービス + 特定ソース専用の高度な機能を提供します。項目はライブラリに追加される時、自動で追跡され始めます。 + ほかの場所にもバックアップのコピーを保管してください。バックアップには保存されたパスワードなどの機密性の高い情報が含まれることがあります。共有時に十分ご注意ください。 システムログにverboseログを出力(アプリのパフォーマンスが低下します) 大規模のアップデートはソースに有害で、ソースを遅くし、電池の消耗を増加する可能性があります。詳しくはタップでご覧ください。 言語 @@ -601,12 +550,10 @@ キャンセル済み 休載中 よくあるご質問とガイド - 5% 表紙グリッド - 開始済み 読み始めていない 未読の章がある為スキップしました - 横長の画像をズーム + 横長の画像に自動でズームイン 完結済みの為スキップしました 読了した章がない為スキップしました 幅広い画像を左右に移動 @@ -622,15 +569,12 @@ 公式リリースで新しいバージョンが取得可能です。非公式のF-Droidリリースからの移行については、タップで手順をご覧ください。 画像の保存時にエラー発生 閉じる - ピン留め中のソースを重複して表示 WebViewデータを消去 WebViewデータを消去しました - バッテリー残量が十分な場合 - 各言語グループでもピン留め済みのソースを重複して表示します ソースが見つかりません インストール済みのソースが見つかりません 未読の章数 - ビューアのパフォーマンスを改善します + ビューアのパフォーマンスを向上させます 分割時にページ%dが見つかりませんでした シリーズ別のビューア設定をリセット 各シリーズのビューアモードと画面向きをリセットします @@ -651,30 +595,26 @@ カスタム表紙 未インストール アプリ言語 - 香草色 + ラベンダー 説明がありません カテゴリー「%s」を削除しますか? カテゴリーを削除 - InternalError:詳しくはクラッシュ ログをご参照ください + InternalError: 詳しくはクラッシュ ログをご参照ください デフォルトのユーザーエージェント文字列 デフォルトのユーザーエージェント文字列をリセットする - 全て除去 + 全て削除 フォーマットRARv5は未対応です 最近更新されたライブラリの項目を見る アプリロックがONの時、ウィジェットは利用できません アップデートはすでに進行中です ユーザーエージェント文字列を入力してください - 海の波 + 津波 事前ダウンロード 読書中に自動でダウンロード - - 次の未読の%d章 - - 現在のと次の章は既にダウンロード済みの場合のみ、そしてライブラリの項目にのみ有効です + 現在のと次の章は既にダウンロード済みの場合のみ有効です 本当に実行しますか? 多言語 - 前回のライブラリ更新:%s - 長い画像の分割(BETA) + 前回のライブラリ更新: %s ライブラリから「%s」を削除しようとしています 人気 ストレージ権限を持っていません @@ -684,15 +624,14 @@ 無効な場所: %s 不明なタイトル ユーザー エージェント文字列が無効です - 予期せぬエラーが発生しました + おっと! ちょうど今 アプリケーションを再起動 - アプリの言語、通知 ビューアモード、表示、ナビゲーション 自動ダウンロード、事前ダウンロード 一方同期、高度な同期 ソース、拡張機能、グローバル検索 - 手動および自動バックアップ + 手動・自動バックアップ、ストレージ領域 アプリロック、セキュア画面 クラッシュ ログのダンプ、バッテリーの最適化 テーマ、日付と時刻の形式 @@ -702,31 +641,103 @@ ダウンロード内容を検査しています F-Droidビルドは正式にサポートされていません。 \n詳細はタップしてご覧ください。 -ダウンロードキュー - 利用可能ですが、ソースがインストールされていません: %s + 日付を削除しますか? + ダウンロードのインデックスを消去 + %sで指定された終了日付を消去します + %sで指定された開始日付を消去します + ローカル + 開始済み + 閲覧時間 + 項目 + グローバルアップデート対象 + 総計 + 閲覧済み + トラッカー + 追跡中の作品 + 使用中 + N/A + %d時間 + %d分 + %d秒 + 統計情報 + 概要 + 読了した作品 + ダウンロード済み + 平均点数 + %d日 + 後で + カテゴリが空です + クリップボードにコピーしました + 利用可能ですが未インストールのソース: %s 重複の章をスキップ ライブラリにはもう同名の項目が存在しています。 \n \nそれでも続行しますか? - %1$s エラー:%2$s + %1$s エラー: %2$s *必須 クリップボードにコピー ライブラリにある項目を非表示 - - 次の%d章 - カテゴリを更新 長い画像を分割 オーバーレイ 画面に合わせるように幅広いページを回転 回転した幅広いページの向きを反転 - - %1$s章が欠けています - デバッグ情報 左へスワイプ時の操作 右へスワイプ時の操作 列あたり%d件の項目 章の間のスワイプ ダブルタップでズーム - \ No newline at end of file + 間隔を設定 + カスタマイズした取得間隔 + 1か月毎に取得 (28日) + 次の更新予定 + 更新予定時間外 + 間隔 + 今日、連載更新が予想されていないためスキップしました + 間隔を設定 + 結果あり + %s の追跡を削除しますか\? + 毎に評価 + ごとに更新するように設定する + ローカルの追跡が削除されます。 + %s からも削除 + ダウンロードを削除 + 10+チェック後半 + 落とした\? 20歳以上後半と2ヶ月 + チェック期間を過ぎました + OK + ライブラリを同期しています + ライブラリを同期しました + Cloudflareに関するヘルプ情報はこちら + ダウンロード インデックスを消去しました + バックアップ ファイルを作成できませんでした + 追跡サービスにログイン + ライセンス制限あり—章を表示できません + HTTP %d、WebViewでこのWebサイトを確認してください + インターネット接続がありません + %sにアクセスできませんでした + %sをアンロック + シリーズを底に移動 + 相対的なタイムスタンプ + 「%2$s」の代わりに「%1$s」を使用 + カテゴリの並べ替え + ライブラリの更新中…(%s) + カテゴリをアルファベット順で並べ替えますか? + ソース設定 + アプリ設定 + 選択したファイルがありません + なし + Eインク画面の焼き付きを軽減 + 前回の自動バックアップ: %s + ページめくりの時、画面を点滅させる + 使用中のストレージ領域 + データとストレージ + トラッカーの評価点数 + 作成 + 適用 + デフォルトに戻す + スキャンレーターが見つかりませんでした + スキャンレーター + スキャンレーターを除外 + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/jv/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/jv/plurals-aniyomi.xml new file mode 100644 index 0000000000..e86b2f3374 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/jv/plurals-aniyomi.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/jv/plurals.xml b/i18n/src/commonMain/resources/MR/jv/plurals.xml new file mode 100644 index 0000000000..3294a1b8f0 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/jv/plurals.xml @@ -0,0 +1,9 @@ + + + + Sawise %1$s menit + + + %d kategori + + \ No newline at end of file diff --git a/i18n/src/main/res/values-jv/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/jv/strings-aniyomi.xml similarity index 100% rename from i18n/src/main/res/values-jv/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/jv/strings-aniyomi.xml diff --git a/i18n/src/main/res/values-jv/strings.xml b/i18n/src/commonMain/resources/MR/jv/strings.xml similarity index 90% rename from i18n/src/main/res/values-jv/strings.xml rename to i18n/src/commonMain/resources/MR/jv/strings.xml index 0b56c6bc5a..53d27e5342 100644 --- a/i18n/src/main/res/values-jv/strings.xml +++ b/i18n/src/commonMain/resources/MR/jv/strings.xml @@ -98,8 +98,8 @@ Setelan Liyane Jeneng - Manga - Donlotan rampung + Entri perpustakaan + Donlotan mandheg Donloder Komplit durung maca apa apa @@ -119,7 +119,6 @@ Kelacak Diwenehi tandha Menu - Pencet bali maneh kanggo metu Ngelacak Bab Sampeyan ora duwe kategori. Dhemok tombol tambah kanggo nggawe siji kategori kanggo ngatur perpustakaane sampeyan. @@ -146,7 +145,6 @@ Munggah Miturut tanggal unggah Miturut nomer bab - Atur maneh Urutke Batalke kabeh seri iki Batalke kabeh @@ -164,17 +162,13 @@ Teruske Mulai Hapus - Total manga + Total entri Otentikasi kanggo konfirmasi perubahan Default Mulai Awas basa Tutup - 5% - 25% - 10% - 15% Batesan: %s Karo status \"Rampung\" Kothak sampul @@ -183,25 +177,12 @@ Dinamis Ijo apel Takon jawab lan panduan - Stempel wektu - Cendhak (Dina iki, Wingi) - Dawa(Cendhak+, n dina kang rumiyin) Iki ora nyegah ekstensi kang ora resmi utawa salah dilabeli kanggo nampilake konten NSFW (18+) ing aplikasi. - Nembe mawon - Dinten puniki - - %1$d dinten kala-wingi - Mati - 20% Kaamanan Tansah Sumber NSFW (18+) Tampilaken ing sumber lan dhaptar ekstensi - - Sawise %1$s menit - - Konfirmasi metu Kelola notifikasi Amanaken layar sembunikan konten aplikasi wektu ngaleh aplikasi lan blokir tangkapan layar Surup wengi @@ -216,9 +197,6 @@ Amanaken layar Saben 3 dinten Namung ing Wi-Fi - - %d kategori - Ora kapracaya Iku durung diwiwiti periksa sampul lan rinci anyar wektu memerbarui pustaka @@ -260,14 +238,12 @@ Tombol volume Wangun L Total gak diwoco - Stempel wektu sing relatif Updatean umum Updatean otomatis Mbutuhake mbukak kunci Nganyari metadata otomatis Jaringan gak kebates tok Lewati updatean judul - Pas baterai ora titik Bohoso aplikasi Ekstensi iki ora saka dhaptar ekstensi Tachiyomi resmi. Ndownload @@ -281,8 +257,6 @@ Tampilake kanthi ringkes nalika maca dibukak Pamisahan kaca kaping pindho Nganyari otomatis watesan piranti - Nganyari jejak otomatis - Nganyari pelacak nalika nganyari perpustakaan Setelan saben kategori kanggo ngurutake lan tampilan Apa sampeyan pengin mbusak kategori \"%s\"\? Busak kategori @@ -300,7 +274,6 @@ Kacepetan animasi tutul kaping pindho Walik zona tutul Horisontal - Nggawe folder miturut judhul manga Numpuki Layar Pandhu arah @@ -321,6 +294,9 @@ Layar urip terus Aksi Tampilake ing tunyuk dawa - Simpen kaca menyang folder sing kapisah -Antrian Donlot - \ No newline at end of file + Statistik + Lokal + Diwiwiti + Diundhuh + Telusuri… + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ka-rGE/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/ka-rGE/plurals-aniyomi.xml new file mode 100644 index 0000000000..399ce947e8 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/ka-rGE/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ka-rGE/plurals.xml b/i18n/src/commonMain/resources/MR/ka-rGE/plurals.xml new file mode 100644 index 0000000000..4eec3c155f --- /dev/null +++ b/i18n/src/commonMain/resources/MR/ka-rGE/plurals.xml @@ -0,0 +1,39 @@ + + + + ნაპოვნია გაფართოების განახლება + ნაპოვნია %d გაფართოების განახლება + + + თავები %1$s და კიდევ 1 + თავები %1$s და კიდევ %2$d + + + ნაპოვნია ახალი თავი + ნაპოვნია %1$d ახალი თავი + + + %d ჩანაწერისთვის + %d ჩანაწერისთვის + + + 1 თავი + %1$s თავი + + + დარჩა 1 + დარჩა %1$s + + + დასრულების დრო %1$s. %2$s შეცდომა + დასრულების დრო %1$s. %2$s შეცდომა + + + %d კატეგორია + %d კატეგორიები + + + 1 წუთის შემდეგ + %1$s წუთის შემდეგ + + \ No newline at end of file diff --git a/i18n/src/main/res/values-ka-rGE/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/ka-rGE/strings-aniyomi.xml similarity index 81% rename from i18n/src/main/res/values-ka-rGE/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/ka-rGE/strings-aniyomi.xml index b580d7306a..4542b78ed7 100644 --- a/i18n/src/main/res/values-ka-rGE/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/ka-rGE/strings-aniyomi.xml @@ -26,32 +26,4 @@ WebView არის აუცილებელი Tachiyomi-ს სამუშაოდ გადმოწერა დაპაუზებულია თავების განახლებები - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-ka-rGE/strings.xml b/i18n/src/commonMain/resources/MR/ka-rGE/strings.xml similarity index 92% rename from i18n/src/main/res/values-ka-rGE/strings.xml rename to i18n/src/commonMain/resources/MR/ka-rGE/strings.xml index a4cc9d9034..b418800e3e 100644 --- a/i18n/src/main/res/values-ka-rGE/strings.xml +++ b/i18n/src/commonMain/resources/MR/ka-rGE/strings.xml @@ -1,10 +1,12 @@ სახელი + კატეგორიები ბიბლიოთეკის ჩანაწერები ისტორია მეტი პარამეტრები + გადმოწერის რიგი ბიბლიოთეკა განახლებები ისტორია @@ -54,7 +56,6 @@ გააუქმე გააუქმე ყველა დალაგება - გადალაგება უახლესი უძველესი თავში ატანა @@ -83,7 +84,6 @@ მსუბუქი ჩართული თარიღის ფორმატი - გამოსვლის დადასტურება შეტყობინებების მართვა უსაფრთხოება და კონფიდენციალობა განბლოკვის მოთხოვნა @@ -109,6 +109,7 @@ მხოლოდ განაახლე მიმდინარე მანგა ავტომატურად განაახლე მეტადატა მიგრაცია + ნაგულისხმევი კატეგორია ყოველთვის მკითხე ყველა განაცლება @@ -172,11 +173,6 @@ ყოველთვის აჩვენე თავებს შორის გადასვლა კითხვა ცარიელი არეა გვერდებზე - არ არის - 10% - 15% - 20% - 25% გადმოწერის ადგილი დისკზე ინდივიდუალური ადგილმდებარეობა გამორთული @@ -192,7 +188,6 @@ რეზერვის აღდგენა ბიბლიოთეკის აღდგენა რეზერვიდან რეზერვის ლოკაცია - ავტომატურად რეზერვის შექმნა რეზერვის შექმნის სიხშირე მაქსიმალური რეზერვი რეზერვი შექმნილია @@ -215,9 +210,10 @@ შსევდომა დაფიქსირდა ქეშის გასუფთავებისას Cookie -ების გასუფთავება Cookie -ები გასუფთავებულია + მონაცემთა ბაზის გასუფთავება + ისტორიიდან წაიშლება ჩანაწერები, რომლებიც თქვენს ბიბლიოთეკაში არაა შენახული ჩანაწერები წაშლილია ბიბლიოთეკის მანგების ყდის ცვლილება - თვალყურის დევნების განახლება ელემენტის ოპტიმიზაცუა უკვე გამორთულია ვერ მოხერხდა მოწყობილობის პარამეტრების გახსნა ვებსაიტი @@ -241,7 +237,6 @@ ჩანართები შედეგების სიის დასასრული შედეგი ვერ მოიძებნა - ვებსაიტის ნახვა WebView-ში ლოცალური წყარო სხვა ბოლოს გამოყენებული @@ -262,8 +257,11 @@ დაკოპირებულია ბუფერში: \n%1$s წყარო არ არის დაინსტალირებული: %1$s + დავამატო ბიბლიოთეკაში\? თავი %1$s მიმდინარეობს გადმოწერა (%1$d/%2$d) + შეცდომა + დაპაუზებულია წყაროს სათაური თავის ნომერი წყაროს მიხედვით @@ -322,7 +320,6 @@ ამოირჩიე რეზერვის ფაილი გადმოწერა განახლება ვერ მოიძებნა - განახლების ძებნა… გადმოწერა… განახლების დასაყენებლად დაატყაპუნეთ გადმოწერის შეცდომა @@ -332,7 +329,9 @@ თქვენი ბიბლიოთეკა ცარიელია Wi-Fi კავშირი არ არის ხელმისაწვდომი ინტერნეტთან კავშირი არ არის ხელმისაწვდომი + გადმოწერა შეჩერებულია საერთო + თავების განახლებები გავრცობის განახლებები თავები თვალყურის დევნება @@ -340,7 +339,6 @@ რეზერვი გავრცობები გავრცობის შესახებ - გასასვლელად დააჭირეთ ისევ უკან გლობალური ძებნა კატეგორიების მინიჭება ყდის რედაქტირება @@ -363,7 +361,6 @@ დიალოგი ხანგრძლივი დაჭერისას ვებ კომიქსი დანომრილი - გლობალურ ძებნაში მხოლოდ მიჭიკარტებულ წყაროებში ძებნა გამორთე ბატარეის ოპტიმიზაცია ეხმარება უკანა ფონში მიმდინარე ბიბლიოთეკის განახლებებსდა რეზერვს ღია კოდის ლიცენზია @@ -390,51 +387,15 @@ ჰორიზონტალური არცერთი დაჭერის ინვერსია - - ნაპოვნია გაფართოების განახლება - ნაპოვნია %d გაფართოების განახლება - - - თავები %1$s და კიდევ 1 - თავები %1$s და კიდევ %2$d - - - ნაპოვნია ახალი თავი - ნაპოვნია %1$d ახალი თავი - - - %d ჩანაწერისთვის - %d ჩანაწერისთვის - წყარო ვერ მოიძებნა - - 1 თავი - %1$s თავი - უცნობი სტატუსი უცნობი ავტორი მოიძებნოს \"%1$s\"-თვის გლობალურად - - დარჩა 1 - დარჩა %1$s - განახლებულია v%1$s-მდე რა არის ახალი ასამოქმედებლად საჭიროა აპლიკაციის გადატვირთვა ქსელი - - დასრულების დრო %1$s. %2$s შეცდომა - დასრულების დრო %1$s. %2$s შეცდომა - კითხვის რეჟიმი - - %d კატეგორია - %d კატეგორიები - - - 1 წუთის შემდეგ - %1$s წუთის შემდეგ - თემა გამორთვა დაწყება @@ -456,6 +417,5 @@ გარეგნობა ნაგულისხმევი დააჭირე დეტალების სანახავად -გადმოწერის რიგი წაუკითხავი - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/kk/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/kk/plurals-aniyomi.xml new file mode 100644 index 0000000000..fc3061d0e3 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/kk/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/kk/plurals.xml b/i18n/src/commonMain/resources/MR/kk/plurals.xml new file mode 100644 index 0000000000..e5edb4f2dc --- /dev/null +++ b/i18n/src/commonMain/resources/MR/kk/plurals.xml @@ -0,0 +1,63 @@ + + + + Кеше + %1$d күн бұрын + + + %1$s минуттан кейін + %1$s минуттан кейін + + + %d санат + %d санаттар + + + %1$s дегеннен кейін %2$s қателікпен орындалды + %1$s дегеннен кейін %2$s қателікпен орындалды + + + Келесі оқылмаған тарау + Келесі %d оқылмаған тарау + + + %1$s тарау қалды + %1$s тарау қалды + + + %d бақылау + %d бақылаулар + + + %1$s тарау + %1$s тарау + + + %1$s тарау және біреу + %1$s тарау мен %2$d + + + Дереккөзі жоқ немесе сүзілген %d тарау өткізіліп жіберілді + Дереккөзі жоқ немесе сүзілген %d тарау өткізіліп жіберілді + + + %1$d жаңа тарау + %1$d жаңа тарау + + + Кеңейту үшін жаңарту бар + %d кеңейту үшін жаңарту бар + + + %d жазбасы үшін + %d жазбасы үшін + + + Келесі тарау + Келесі %d тарау + + + + Жоқ %1$s тараулары + + \ No newline at end of file diff --git a/i18n/src/main/res/values-kk/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/kk/strings-aniyomi.xml similarity index 83% rename from i18n/src/main/res/values-kk/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/kk/strings-aniyomi.xml index e8ca169c05..1cd8961ac1 100644 --- a/i18n/src/main/res/values-kk/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/kk/strings-aniyomi.xml @@ -34,32 +34,4 @@ Жадыда орын аз болғандықтан тараулар жүктелмеді Ескерту: Көп жүктеулер саны дереккөздер жұмысын баяулата алады және/немесе Tachiyomi бұғатталына алады. Толығырақ оқу үшін басыңыз. Tachiyomi-ны қолдану үшін WebView керек - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-kk/strings.xml b/i18n/src/commonMain/resources/MR/kk/strings.xml similarity index 84% rename from i18n/src/main/res/values-kk/strings.xml rename to i18n/src/commonMain/resources/MR/kk/strings.xml index 5589647e59..7a36ee1a8d 100644 --- a/i18n/src/main/res/values-kk/strings.xml +++ b/i18n/src/commonMain/resources/MR/kk/strings.xml @@ -1,6 +1,7 @@ - Баптаулар + Баптау + Жүктеулер кезегі Кітапхана Жаңартулар Дереккөздер @@ -8,14 +9,14 @@ Кеңейтулер Кеңейту ақпары Көмек - Маңга + Санаттар + Кітапхана жазбалары Тараулар Бақылау Көшу Әдепкі Ескерту Өзгертуді растау үшін аутентификация өтіңіз - Шығу үшін қайтадан басыңыз Мәзір Сүзгі Бетбелгіленген @@ -32,26 +33,20 @@ Көбірек Тарих Тарих - Баптаулар - Жүктелген + Баптау Сол Оң Бет (солдан оңға қарай) Санаттарыңыз жоқ. Жаңа санат жасау үшін және кітапханаңызды ұйымдастыру үшін қосу батырмасын басыңыз. Келесі - - Кеше - %1$d күн бұрын - Оқылмаған тараулар Тізім Жүктелген тараулар Қолданба экранын қорғау - Батарея қуаты аз емес кезінде Қолданба кейпі Динамикалық Жасыл Алма - Түн ортасы ымырт + Ымырт Бақылау Ақпарат Жабу @@ -60,22 +55,22 @@ Оқыма Жүктеулер Толығырақ - Қолданба нұсқасы - Күңгірт + Кейіп + Қараңғы режим Жүйе бойынша Өшірулі Қосулы - Құлпынай дайкири + Құлпынай Дайкири Тако - Ёцуба - Ақшыл және көгілдір - Таза қара қараңғы режим - Инь және Йянь + Йотсуба + Қызғылт пен жасыл + Қап-қараңғы режим + Инь мен Йянь Бүгін Өшірулі Әр 6 сағат сайын Әр 12 сағат сайын - Күнде + Күн сайын Әр 2 күн сайын Әр 3 күн сайын Апта сайын @@ -83,21 +78,15 @@ Тек Wi-Fi болғанда Қуаттандыру кездінде Шектеулер: %s - - %1$s минуттан кейін - %1$s минуттан кейін - Қауіпсіз экран қолданбаларды ауыстырған кезде қолданба мазмұнын жасырады және скриншот жасауды бұғаттайды NSFW (18+) дереккөздері Дереккөздер мен кеңейтулер тізімінде көрсету Бұл қолданбадағы NSFW (18+) мазмұнын көрсетуге бейресми немесе ықтимал қате белгіленген кеңейтулерге кедергі жасамайды. - Жақында Оқылған деп белгілеу Оқылмаған деп белгілеу Алдыңғысын оқылған деп белгілеу Бақылауда Оқылмаған - Басталған Сүзгіні алып тастау Әліпби бойынша Түгел жазбалар @@ -107,7 +96,7 @@ Тараудың келген күні бойынша Қосылған күні Іздеу - Баптауларды іздеу + Баптау іздеу Ауқымды іздеу Түгелін таңдау Жүктеп алу @@ -137,6 +126,7 @@ WebView-де ашу Көшу Бейнебет режимі + Локалды дереккөз Тіл Санат қойындыларын көрсету Элементтер санын көрсету @@ -147,7 +137,6 @@ Барлығын болдырмау Осы туынды үшін барлығын болдырмау Сұрыптау - Қайта реттеу Жүктелген күні бойынша Тарау нөмірі бойынша Жаңарақ @@ -173,13 +162,11 @@ Жүктелуде… Қолданба қолжетімсіз Жалпы - Қысқа (бүгін, кеше) - Дата пішімі - Шығуды растау + Күн пішімі Хабарландыруларды басқару Қауіпсіздік пен құпиялық Құлыпты ашуды талап етеді - Бос режимде блоктау + Әрекетсіз болғанда бұғаттау Әрдайым Ешқашан Хабарландыру мазмұнын жасыру @@ -187,17 +174,17 @@ Көрсету Портрет Пейзаж - Жаһандық жаңарту + Ауқымды жаңарту Автоматты жаңартулар Жалғастыру Қолданба тілі - Трекерлерді автоматты түрде жаңарту Әрқашан сұраңыз - Сұрыптау және көрсету үшін әр санат параметрлері + Әдепкі санат + Сұрыптау және көрсету үшін әр санат баптауы Жою Жаңарту Күтілуде - Бұл кеңейту енді қолжетімсіз. + Бұл кеңейту енді қолжетімсіз. Ол дұрыс жұмыс істемеуі немесе қолданбада ақаулық тудыруы мүмкін. Оны жойып тастауға кеңес береміз. Орнатушы Әдепкі қалпы Shizuku қосылмаған @@ -217,6 +204,7 @@ Ыңғайлы кесте Атаусыз кесте Метадеректерді автоматты түрде жаңарту + Шығарылған санаттардағы жазбалар енгізілген санаттарда болса да жаңартылмайды. Барлығы Ешқайсы Шығару: %s @@ -231,27 +219,19 @@ Оқыма ашылғаннан кейін қысқаша көрсету Қең беттерді бөлу Бет нөмірін көрсету - Түс фильтрін араластыру режимі + Жарықты сүзу режимі «Аяқталған» күйімен - - %d санат - %d санаттар - Қос бетті бөлуді инверттеу Ықшам кесте Оқыма ашылғаннан кейін оқу түрін қысқаша көрсету 32-битті түс Жолақты азайтады, бірақ өнімділікке әсер етуі мүмкін Кесу жиектері - Уақыт белгісі - Жуық уақыт белгісі - Ұзақ (Қысқа+, n күн бұрын) Кеңейтулер тізімін алу сәтсіз өтті Мазмұнды кесу аймағында көрсету - Туындыларды жаңартуды өткізіп жіберу + Жазбаларды жаңартуды өткізіп жіберу Бұл басталған жоқ Кітапхананы жаңарту кезінде жаңа мұқаба мен мәліметтерді тексеру - Кітапхананы жаңарту кезінде трекерлерді жаңарту Жаңартулар күтілуде Барлығын жаңарту Ескірген @@ -290,11 +270,9 @@ Ені бойынша Бастапқы мөлшері Кері портрет - Бумаларды жазбалар атауына сәйкес жасау Көлденең Бүйірлік шегініс Қ - Жоқ Кескінді көлденеңінен үлкейту Үлкейтудің бастапқы қалпы Қара @@ -305,8 +283,8 @@ Әдепкі оқу режимі Ең жоғары Жүктеу орны + Саналмайтын санаттар Реттелетін орын - Қайталанған бекітілген дереккөздерді көрсету Жоқ дереккөздер: CBZ архивы ретінде сақтау Дерек @@ -325,10 +303,6 @@ К Ақ %02d мин, %02d сек - - %1$s дегеннен кейін %2$s қателікпен орындалды - %1$s дегеннен кейін %2$s қателікпен орындалды - Тараулардың ауысуын әрдайым көрсету Құлыпталған портрет Жоғары @@ -341,8 +315,7 @@ Соңғы оқылғаннан төртінші тарау Қызметтер Сақтық көшірме жасау - Беттерді бөлек бумаларға сақтау - Ая түсі + Түсқағаз Алдыңғ Биіктігі бойынша Ақылды @@ -356,32 +329,22 @@ Жаңа тарауларды жүктеу Саналмайтын санаттардағы жазбалар саналатын санаттарда болса да жүктелмейді. Күшейтілген қызметтер - Көп + Көптілді Көлденең Оқығанда дағдылы жүктеу Алдын ала жүктеу - Көтерілу толқыны + Көтерілу Толқыны Жарық қылу Қараңғы қылу Басу аймағын терістету Тік Kindle тәріздес - Қос үлкен суреттер (Бета) - Кітапханадағы жазбаларда ғана жұмыс істейді және ағымдағы және келесі тарау әлдеқашан жүктелген болса + Кітапханадағы жазбаларда ғана жұмыс істейді, сондай-ақ ағымдағы және келесі тарау әлдеқашан жүктелген болса Шеті Дыбыс пернелері - 25% Екеуі де - 5% - 10% - 15% - 20% Оқыманың өнімділігін жақсартады - Кең суреттерді басқанда панорамалау - - Келесі оқылмаған тарау - Келесі %d оқылмаған тарау - + Кең суретті басқанда панорамалау L тәріздес Іздеу… Айналдырғандағы мәзірді жасыру сезгіштігі @@ -391,7 +354,7 @@ Теріс дыбыс пернелері Жоқ Беттеп - Іздеу нұсқаулығы + Бақылау нұсқаулығы Бақылау қызметтеріндегі прогрессті жаңарту үшін бір жақты үйлестіру. Бақылау батырмасын пайдаланып бақылауды орнатыңыз. Сақтық көшірме құрылды Сақтық көшірмесінің қате файлы @@ -408,12 +371,12 @@ Қателіктер тіркеуін әзірлеушілерге жіберу үшін файлға сақтайды Аялық кітапхананың жаңартуымен және сақтық көшірмесіне көмектеседі Баттареяның оңтайландыруы әлдеқашан өшірілу - Инкогнито түрін өшіру + Инкогнито режимін өшіру Жан-жақты тіркеуді жүйелі тіркеуге жазу (қолданба өнімділігін азайтады) Электрондық пошта мекенжайы Шығу Белгісіз қателік - WebView-де сайтты тексеру + Дерекқорды тазалау Қателіктер туралы есептерді жіберу Сізде бекітілген дереккөздер жоқ Кітапханада сақтайтын түк жоқ @@ -425,11 +388,10 @@ Жазбалар жойылды Тазалайтын түк жоқ Туындылар мұқабасын жаңарту - Бақылауды жаңарту Cloudflare айналып өтілмеді Жақсырақ үйлесімділік үшін WebView-ді жаңартыңыз Сақтық көшірме бумасы - Бақылау сервисіне кірілмеген: + Бақылау қызметіне кірілмеген: Соңғы Сұрыптау Нұсқа @@ -439,17 +401,12 @@ Күн Шығып жатыр Қалпына келтіру әлдеқашан орындалуда - Бекітілген дереккөздерді тілдер топтарына қарай қайталау - Максималды сақтық көшірмелері + Сақтық көшірме саны Сақтық көшірмесіне нені қалайсыз\? Сақтық көшірмесін қалпына келтіру Сақтық көшірмесі әлдеқашан орындалуда - Оқыма баптаулары қалпына келтірілмеді - - %1$s тарау қалды - %1$s тарау қалды - - Оқыманың барлық баптаулары қалпына келді + Оқыма баптауы қалпына келтірілмеді + Оқыманың барлық баптауы қалпына келді Не жаңалық Аудармамен көмектесу Сақтық көшірмесін қалпына келтіру сәтсіз өтті @@ -458,11 +415,11 @@ Танымал Сақтық көшірме файлынан дерек қалпына келеді. \n -\nОны қолдану үшін сізге түгел жетпей тұрған кеңейтулерді жүктеп, бақылау сервистеріне кіру керек. +\nОны қолдану үшін сізге түгел жетпей тұрған кеңейтулерді жүктеп, бақылау қызметтеріне кіру керек. Тарау табылмады Бақылау Планшетті интерфейс - Инкогнито түрі + Инкогнито режимі Қойындылар Басқа нәтиже жоқ Пайдаланушының есімі @@ -472,20 +429,19 @@ Басқа Сақтық көшірмелерін басқа жерлерде де сақтауыңызға кеңес береміз. User agent бос бола алмайды - Оқыма баптауларын әрбір туынды үшін қалпына келтіру + Оқыма баптауын әрбір туынды үшін қалпына келтіру Барлық туындылар үшін оқу режимі мен бағдарын қалпына келтіреді Аялық белсенділік Батареяның оңтайландыруын өшіру - Құрылғы баптаулары ашылмады + Құрылғы баптауы ашылмады Құпиялық саясаты Барлық мүмкін қателерді түзетуге көмектеседі. Пайдаланушы деректері жіберілмейді - Жүктелгендерді ғана + Жүктелгенді ғана %1$s-ге кіру Құпиясөз Кіру Сіз шығып кеттіңіз - Санатты жаңарту - Локал + Санатты жаңартып жатырмыз Нәтиже жоқ Локал дереккөз Ақырғы қолданылған @@ -496,13 +452,13 @@ Үзілісте Белгілі бір дереккөздер үшін жақсартылған мүмкіндіктерді қамтамасыз ететін қызметтер. Кітапханаға қосылған кезде жазбалар автоматты түрде бақыланады. Сақтық көшірмеден қайтару - Ауқымды іздеуде тек бекітілген дереккөздерді табу Қазіргі кітапхананы қалпына келтіру үшін қолдануға болады Сақтық көшірме жиілігі Сақтық көшірмеден кітапхананы қайтару Сақтық көшірмесін жасау Қолданылған: %1$s Тазалауда қателік пайда болды + Кітапханада жоқ жазбалардың тарихын жою WebView дерегін тазалау WebView дерегі тазаланды Кейбір өндірушілерде аялық қызметтерді өшіретін қолданбаларға қосымша шектеулер бар. Бұл сайтта оны қалай түзетуге болатыны туралы толығырақ ақпарат бар. @@ -511,7 +467,6 @@ Ауқымды іздеу… \"%1$s\" ауқымды іздеу Іздеу - Автоматты сақтық көшірме User agent-ті әдепкіге қайтару Кеш тазаланды. %1$d файл жойылды Жаңартуларға тексеру @@ -520,7 +475,6 @@ Оқылмаған тараулар бар болғандықтан өткізіп жіберілді %1$s-Тарау Бақылау - Бұл бақылау сервисі тек Komga дереккөзімен сәйкес. Бақылау қосу Тасталған Кейінге қалған @@ -530,29 +484,16 @@ Жаңалтулар жоқ Әдепкі тарау параметрлері жаңартылды Желі байланысы жоқ - Жүктеп алу аяқталды Сіздің кітапханаңызда санаттар жоқ. Оқылуда Тараулар жоқ Сенімдісіз бе\? - - %d бақылау - %d бақылаулар - Оқылмаған Кітапхана жаңаруда Ақырғы оқылған тарау ашылмай тұр Кітапхананың ақырғы жаңаруы: %s Дереккөз табылмады RARv5 пішімі қолжетімсіз - - %1$s тарау - %1$s тарау - - - %1$s тарау және біреу - %1$s тарау мен %2$d - MyAnimeList-ке қайтадан кіріңіз Ұқсастық табылмады Дереккөз қолжетімсіз @@ -566,10 +507,6 @@ Жаңа нұсқа қолжетімді! %d бет табылмады, бөлінгенде Аяқталды - - Дереккөзі жоқ немесе сүзілген %d тарау өткізіліп жіберілді - Дереккөзі жоқ немесе сүзілген %d тарау өткізіліп жіберілді - Оқу түрі, көрсету, навигация Дереккөздер, кеңейтулер, ауқымды іздеу Қолданбаны бұғаттау, экранды қорғау @@ -583,16 +520,12 @@ Оқылмаған Мұқаба жіберілмеді Мұқаба сақталды - Бұл баптауларды әдепкі қылып сақтағыңыз келеді ме\? - - %1$d жаңа тарау - %1$d жаңа тарау - + Бұл баптауды әдепкі қылып сақтағыңыз келеді ме\? Көбірек білу үшін басу Жүктеп алу Ортақ Прогресс - Тарау баптаулары + Тарау баптауы Қателік Тоқтатылды Күйі @@ -601,8 +534,7 @@ Орнатылмады %1$s Тарау Кітапхананы жаңарту қателіктерін жөндеу үшін %1$s - Қолданба тілі, хабарландырулар - Кейіп, күні мен уақыт форматы + Кейіп, күні мен уақыт пішімі Санаттар, ауқымды жаңарту Прогрессті біржақты синхрондау, кеңейтілген синхрондау Қолмен және автоматты сақтық көшірмелері @@ -611,7 +543,6 @@ (%1$d/%2$d) жүктелуде Тарау нөмірі Тарау нөмірі бойынша - Басталған Түрі Бұндай санат атауы әлдеқашан бар! Сурет сақталды @@ -628,7 +559,7 @@ Оқитын тарау болмағандықтан өткізіп жіберілді Мұқаба таңдау Сақтық көшірме файлын таңдау - Күтпеген қателік пайда болды + Ойбай! %s күтпеген қатеге ұшырады. Жаңылыс журналдарын Discord сайтындағы қолдау арнамызда ортақ пайдалануды ұсынамыз. Қолданбаны өшіріп қосу Тараулар жүктелмеді. Жүктеулер кезегіне барып, сол жерден байқап көре аласыз @@ -638,11 +569,6 @@ Туынды аяқталған үшін өткізіп жіберілді GitHub-та ашу Бұл Android нұсқасы қолжетімсіз - Жаңалтулар ізделуде… - - Кеңейту үшін жаңарту бар - %d кеңейту үшін жаңарту бар - Белгісіз қателіктің кесірінен тарау жүктеп алынбады Бет файлының жолы %d табылмады Өткізуп жіберілді @@ -656,7 +582,7 @@ Туындыға жаңарту керек жоқ болғандықтан өткізіп жіберіледі Жүктелуде… Жүктеу қателігі - Орнату үшін басыңыз + Жаңартуды орнату үшін басыңыз Қателіктер Аяқталмағандар Тізімі Бағалау @@ -673,7 +599,6 @@ Қай жерден көшетін деректі таңдаңыз Көшіру Қателік пайда болды - Кітапхананы жаңарту… (%1$d/%2$d) Жүктеуіш Файл таңдайтын қолданба табылмады Жаңа нұсқа Tachiyomi сайтында қолжетімді. F-Droid қолданбасының бейресми нұсқасынан көшуді білу үшін басыңыз. @@ -688,14 +613,10 @@ Жоспарланған Дереккөздерді тасымалдау нұсқаулары Wi-Fi байланысы жоқ - Жүктеп алу тоқтатылды + Жүктеулер тоқтатылды Биометриялық бұғаттау қосылып тұрғанда виджет қолжетімді емес Жеке сүзгі Көп жаңалтулар саны дереккөздер жұмысын баяулата және батарея жұмысын өтімін көбейте алады. Көбірек білу үшін басыңыз. - - %d туындысы үшін - %d туындысы үшін - %1$s-Тарау Жаңа тараулар табылды Автоматты жүктеу, алдын ала жүктеу @@ -705,6 +626,7 @@ \n%1$s Буферге көшірілмеді Дереккөз орнатылмаған: %1$s + Кітапханаға қосайық па\? Әдепкі қылып орнату Беттер табылмады Келесі тарау жоқ @@ -714,7 +636,37 @@ Жарамсыз орын: %s Жаңа ғана User agent жолы жарамсыз -Жүктеулер кезегі + Бұл санатта жазба жоқ + Кездейсоқ жазбаны ашу + F-Droid құрастыруларына ресми түрде қолдау көрсетілмейді. +\nТолығырақ білу үшін басыңыз. + Жүктеулерді тексеру + Бұл %s ішінен бұрын таңдалған аяқталу күнін жояды + Бұл бұрын таңдалған басталу күнін %s ішінен жояды + Күнің жоямыз ба\? + Жүктеулер индексін тазалау + Статистика + Басталды + Жергілікті + Жүктелген + Аяқталған сессиялар + Оқу ұзақтығы + Барлығы + Орта баға + Қолданылған + Д/Ж + %dкүн + %dмин + %dсек + Қазір емес + Шолу + Оқылған + %dсағ + Жазбалар + Ауқымды жаңартуда + Бақыланудағы жазбалар + Бақылау қызметтері + Бұл санат бос Қолжетімді, бірақ дереккөзі орнатылған жоқ: %s Аралық сақтағышқа көшірілді Қайталанған бөлімдерді өткізіп жіберу @@ -724,10 +676,6 @@ %1$s қателік: %2$s *қажетті Санатты жаңарту - - Келесі тарау - Келесі %d тарау - Айырбастау буферіне көшіріп алу Кітапханада бар туындыларды жасыру Ұзын суреттерді бөлу @@ -735,8 +683,4 @@ Кең беттерді сыйғызу үшін бұрыңыз Бұрылған кең беттерді аудару бағдары Дебаг туралы ақпарат - - - Жоқ %1$s тараулары - - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/km/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/km/plurals-aniyomi.xml new file mode 100644 index 0000000000..e86b2f3374 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/km/plurals-aniyomi.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/km/plurals.xml b/i18n/src/commonMain/resources/MR/km/plurals.xml new file mode 100644 index 0000000000..7931deaeae --- /dev/null +++ b/i18n/src/commonMain/resources/MR/km/plurals.xml @@ -0,0 +1,6 @@ + + + + %d ភាគបន្ទាប់ដែលមិនទាន់អាន + + \ No newline at end of file diff --git a/i18n/src/main/res/values-km/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/km/strings-aniyomi.xml similarity index 100% rename from i18n/src/main/res/values-km/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/km/strings-aniyomi.xml diff --git a/i18n/src/main/res/values-km/strings.xml b/i18n/src/commonMain/resources/MR/km/strings.xml similarity index 95% rename from i18n/src/main/res/values-km/strings.xml rename to i18n/src/commonMain/resources/MR/km/strings.xml index cdaee181a3..8b92109047 100644 --- a/i18n/src/main/res/values-km/strings.xml +++ b/i18n/src/commonMain/resources/MR/km/strings.xml @@ -1,5 +1,6 @@ + កំពុងទាញយក ស្វែងរកក្នុងការកំណត់ ភាគ បំរាម @@ -11,6 +12,7 @@ ប្រវត្តិ តម្រៀបតាមអក្ខរក្រម ឈ្មោះ + ការតម្រៀបថ្នាក់ ប្រវត្តិ ច្រើនទៀត ការកំណត់ @@ -49,6 +51,7 @@ បញ្ជី ជ្រុងដែលមានតែគម្រប ភាគដែលបានទាញយក + ម៊េងហ្គាដែលមានស្រាប់ក្នុងឧបករណ៍ ភាសា បង្ហាញtabនៃថ្នាក់ បិទ @@ -58,7 +61,6 @@ ឈប់ធ្វើទាំងអស់ Cancelទាំងអស់ចំពោះម៊េងហ្គាមួយនេះ តម្រៀប - តម្រៀប តម្រៀបតាមកាលបរិច្ឆេទ តម្រៀបតាមភាគ ថ្មីបំផុត @@ -73,7 +75,6 @@ អ្នកពុំមានការទម្រៀបម៊េងហ្គាឡើយ។ ចុចប៊ូតុងសញ្ញាបូកដើម្បីទម្រៀបម៊េងហ្គាសម្រាប់បណ្ណាល័យរបស់អ្នក។ ម៊េងហ្គា Authenticateដើម្បីបញ្ចាក់ពីការកែប្រែ - ចុចថយម្ដងទៀតដើម្បីចេញ ការកំណត់ កន្លែងកំណត់ បញ្ចាក់ភាគមុនថាបានអាន @@ -130,10 +131,7 @@ បៃតងខ្ចី យីងនិងយ៉ាង ខ្មៅដិត - timestamps - relative timestamps ទម្រង់ថ្ងៃខែ - បញ្ចាក់ការចាកចេញ កំណត់ការជូនដំណឹង សន្តិសុខនិងឯកជនភាព ត្រូវការការបើកសោ @@ -142,11 +140,6 @@ ការពារអេក្រង់ ប្រភពមិនល្អ(១៨+) បង្ហាញនៅក្នុងបញ្ចីប្រភព - ថ្មីៗ - ថ្ងៃនេះ - - %1$d ថ្ងៃមុន - ការបង្ហាញ ធាតុក្នុងមួយជួ បញ្ឈរ @@ -174,6 +167,7 @@ ចំណងជើង បានបញ្ចប់ការចេញផ្សាយ កំពុងតែចេញផ្សាយ + ថ្នាក់ធម្មតា ត្រូវបានផ្អាកការចេញផ្សាយ មិនច្បាស់ ទម្រង់ភាគមិនត្រឹមត្រួវ @@ -184,17 +178,13 @@ កំពុងតែធ្វើបច្ចុប្បន្នភាពបណ្ណាល័យ មានឡាយសិន ទម្រង់RARv5មិនត្រូវបានទទួលយកទេ - កំពុងទាញយក ម​គ្គុ​ទេស​ក៍​ ស្វែងរក ទាំងអស់ - - %d ភាគបន្ទាប់ដែលមិនទាន់អាន - កំពុងទាញយក… ស្ថិតិ បានទាញយក បរាជ័យក្នុងការឆ្លងកាត់Cloudflare ស្វែងរក… មានភាគថ្មី - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/kn/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/kn/plurals-aniyomi.xml new file mode 100644 index 0000000000..9b3adfb867 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/kn/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/kn/plurals.xml b/i18n/src/commonMain/resources/MR/kn/plurals.xml new file mode 100644 index 0000000000..4dc9745333 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/kn/plurals.xml @@ -0,0 +1,47 @@ + + + + 1 ನಿಮಿಷದ ನಂತರ + %1$s ನಿಮಿಷಗಳ ನಂತರ + + + %2$s ದೋಷದೊಂದಿಗೆ %1$s ನಲ್ಲಿ ಮುಗಿದಿದೆ + %2$s ದೋಷಗಳೊಂದಿಗೆ %1$s ನಲ್ಲಿ ಮುಗಿದಿದೆ + + + %d ವರ್ಗ + %d ವರ್ಗಗಳು + + + ವಿಸ್ತರಣೆ ನವೀಕರಣ ಲಭ್ಯವಿದೆ + %d ವಿಸ್ತರಣೆ ನವೀಕರಣಗಳು ಲಭ್ಯವಿದೆ + + + ಅಧ್ಯಾಯಗಳು %1$s ಮತ್ತು 1 ಹೆಚ್ಚು + ಅಧ್ಯಾಯಗಳು %1$s ಮತ್ತು %2$d ಹೆಚ್ಚು + + + 1 ಹೊಸ ಅಧ್ಯಾಯ + %1$d ಹೊಸ ಅಧ್ಯಾಯಗಳು + + + 1 ಶೀರ್ಷಿಕೆಗಾಗಿ + %d ಶೀರ್ಷಿಕೆಗಳಿಗಾಗಿ + + + 1 ಉಳಿದಿದೆ + %1$s ಉಳಿದಿದೆ + + + 1 ಚಾಪ್ಟರ್ + %1$s ಚಾಪ್ಟರಗಳು + + + 1 ಟ್ರಾಕರ್ + %d ಟ್ರಾಕರ್ ಗಳು + + + 1 ಅಧ್ಯಾಯ ಕಾಣೆಯಾಗಿದೆ + %d ಅಧ್ಯಾಯ ಕಾಣೆಯಾಗಿವೆ + + \ No newline at end of file diff --git a/i18n/src/main/res/values-kn/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/kn/strings-aniyomi.xml similarity index 84% rename from i18n/src/main/res/values-kn/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/kn/strings-aniyomi.xml index b5bc3b5027..5b05b6912d 100644 --- a/i18n/src/main/res/values-kn/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/kn/strings-aniyomi.xml @@ -31,32 +31,4 @@ ತಚಿಯೋಮಿಗೆ ವೆಬ್‌ವೀಕ್ಷಣೆ ಅಗತ್ಯವಿದೆ ಡೌನ್‌ಲೋಡ್ ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ ಅಧ್ಯಾಯ ನವೀಕರಣಗಳು - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-kn/strings.xml b/i18n/src/commonMain/resources/MR/kn/strings.xml similarity index 91% rename from i18n/src/main/res/values-kn/strings.xml rename to i18n/src/commonMain/resources/MR/kn/strings.xml index 8878f5d749..96f35aeb60 100644 --- a/i18n/src/main/res/values-kn/strings.xml +++ b/i18n/src/commonMain/resources/MR/kn/strings.xml @@ -7,17 +7,12 @@ ಸೂಚನೆ ವಿಷಯವನ್ನು ಮರೆಮಾಡಿ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಬದಲಾಯಿಸುವಾಗ ಮತ್ತು ಸ್ಕ್ರೀನ್‌ಶಾಟ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸುವಾಗ ಅಪ್ಲಿಕೇಶನ್ ವಿಷಯಗಳನ್ನು ಮರೆಮಾಡಿ ಸುರಕ್ಷಿತ ಪುಟ - - 1 ನಿಮಿಷದ ನಂತರ - %1$s ನಿಮಿಷಗಳ ನಂತರ - ಎಂದಿಗೂ ಇಲ್ಲ ಯಾವಾಗಲೂ ನಿಷ್ಕ್ರಿಯವಾಗಿದ್ದಾಗ ಲಾಕ್ ಮಾಡಿ ಅನ್ ಲಾಕ್ ಅಗತ್ಯವಿದೆ ಭದ್ರತೆ ಸೂಚನೆಗಳನ್ನು ನಿರ್ವಹಿಸಿ - ನಿರ್ಗಮನವನ್ನು ಖಚಿತಪಡಿಸಿ ದಿನಾಂಕ ಸ್ವರೂಪ ಸಿಸ್ಟಮ್ ಅನುಕರಿಸಿ ಆನ್ @@ -46,7 +41,6 @@ ಮೇಲಕ್ಕೆ ಸರಿಸಿ ಹಳೆಯದು ಹೊಸತು - ಮರುಕ್ರಮಗೊಳಿಸಿ ವಿಂಗಡಿಸಿ ಎಲ್ಲವನ್ನೂ ರದ್ದುಮಾಡಿ ರದ್ದುಮಾಡಿ @@ -95,11 +89,11 @@ ಸೋಸು ಸಲಹಾಕಾರ ಸಂಯೋಜನೆಗಳು - ನಿರ್ಗಮಿಸಲು ಮತ್ತೊಮ್ಮೆ ಒತ್ತಿರಿ ಇತಿಹಾಸ ಟ್ರ್ಯಾಕಿಂಗ್ ಅಧ್ಯಾಯಗಳು ಮಾಂಗಾ + ವರ್ಗಗಳು ನೀವು ವರ್ಗಗಳನ್ನು ಹೊಂದಿಲ್ಲ. ನಿಮ್ಮ ಗ್ರಂಥಾಲಯದಲ್ಲಿ ವರ್ಗ ಒಂದನ್ನು ರಚಿಸಲು ಪ್ಲಸ್ ಬಟನ್ ಒತ್ತಿರಿ. ನಿಮ್ಮ ಲೈಬ್ರರಿ ಖಾಲಿಯಾಗಿದೆ, ಯಾವುದೇ ಮೂಲದಿಂದ ನಿಮ್ಮ ಲೈಬ್ರರಿಗೆ ಸರಣಿಯನ್ನು ಸೇರಿಸಿ. ಇತ್ತೀಚೆಗೆ ಏನೂ ಓದಿಲ್ಲ @@ -114,25 +108,20 @@ ಇತಿಹಾಸ ನವೀಕರಣಗಳು ಗ್ರಂಥಾಲಯ + ಡೌನ್‌ಲೋಡ್ ಸಾಲು ಸಂಯೋಜನೆಗಳು ಇನ್ನಷ್ಟು ಹೆಸರು - - %2$s ದೋಷದೊಂದಿಗೆ %1$s ನಲ್ಲಿ ಮುಗಿದಿದೆ - %2$s ದೋಷಗಳೊಂದಿಗೆ %1$s ನಲ್ಲಿ ಮುಗಿದಿದೆ - %02d ನಿಮಿಷ, %02d ಸೆಕೆಂಡು ಮರುಸ್ಥಾಪನೆ ಪೂರ್ಣಗೊಂಡಿದೆ ಬ್ಯಾಕಪ್ ರಚಿಸಲಾಗಿದೆ ಗರಿಷ್ಠ ಬ್ಯಾಕಪ್‌ಗಳು ಬ್ಯಾಕಪ್ ಆವರ್ತನ - ಸ್ವಯಂಚಾಲಿತ ಬ್ಯಾಕಪ್ ಬ್ಯಾಕಪ್ ಸ್ಥಳ ಬ್ಯಾಕಪ್ ಫೈಲ್‌ನಿಂದ ಗ್ರಂಥಾಲಯವನ್ನು ಮರುಸ್ಥಾಪಿಸಿ ಬ್ಯಾಕಪ್ ಮರುಸ್ಥಾಪಿಸಿ ಪ್ರಸ್ತುತ ಗ್ರಂಥಾಲಯವನ್ನು ಪುನಃಸ್ಥಾಪಿಸಲು ಬಳಸಬಹುದು ಬ್ಯಾಕಪ್ ರಚಿಸಿ - ಪಿನ್ ಮಾಡಿದ ಮೂಲಗಳನ್ನು ಮಾತ್ರ ಸೇರಿಸಿ ಟ್ರ್ಯಾಕಿಂಗ್ ಸೇವೆಗಳಲ್ಲಿ ಅಧ್ಯಾಯದ ಪ್ರಗತಿಯನ್ನು ನವೀಕರಿಸಲು ಏಕಮುಖ ಸಿಂಕ್. ಅವರ ಟ್ರ್ಯಾಕಿಂಗ್ ಬಟನ್ ನಿಂದ ಪ್ರತ್ಯೇಕ ಮಾಂಗಾ ನಮೂದುಗಳಿಗಾಗಿ ಟ್ರ್ಯಾಕಿಂಗ್ ಅನ್ನು ಹೊಂದಿಸಿ. ಸೇವೆಗಳು ಹೊಸ ಅಧ್ಯಾಯಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ @@ -144,11 +133,6 @@ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ ಕಸ್ಟಮ್ ಸ್ಥಳ ಡೌನ್‌ಲೋಡ್ ಸ್ಥಳ - 25% - 20% - 15% - 10% - ಯಾವುದೂ ಇಲ್ಲ ಸೈಡ್ ಪ್ಯಾಡಿಂಗ್ ಓದುತ್ತಿರುವ ಅಧ್ಯಾಯ ಪರಿವರ್ತನೆಯನ್ನು ಯಾವಾಗಲೂ ತೋರಿಸಿ @@ -223,11 +207,8 @@ ನವೀಕರಿಸಿ ಬಾಕಿ ಉಳಿದಿರುವ ನವೀಕರಣಗಳು ಎಲ್ಲಾ - - %d ವರ್ಗ - %d ವರ್ಗಗಳು - ಯಾವಾಗಲೂ ಕೇಳಿ + ಡೀಫಾಲ್ಟ್ ವರ್ಗ ಚಾಲ್ತಿಯಿರುವ ಮಾಂಗಾವನ್ನು ಮಾತ್ರ ನವೀಕರಿಸಿ ಚಾರ್ಜಿಂಗ್ ನವೀಕರಣ ನಿರ್ಬಂಧಗಳು @@ -240,7 +221,9 @@ ನವೀಕರಣ ಆವರ್ತನ ನವೀಕರಣಗಳು ವಿಸ್ತರಣೆ ನವೀಕರಣಗಳು + ಅಧ್ಯಾಯ ನವೀಕರಣಗಳು ಸಾಮಾನ್ಯ + ಡೌನ್‌ಲೋಡ್ ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ ಯಾವುದೇ ನೆಟ್‌ವರ್ಕ್ ಸಂಪರ್ಕ ಲಭ್ಯವಿಲ್ಲ ಯಾವುದೇ ವೈ-ಫೈ ಸಂಪರ್ಕ ಲಭ್ಯವಿಲ್ಲ ಅನಿರೀಕ್ಷಿತ ದೋಷದಿಂದಾಗಿ ಅಧ್ಯಾಯವನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ @@ -248,36 +231,19 @@ ಡೌನ್‌ಲೋಡರ್ ಉತ್ತಮ ಹೊಂದಾಣಿಕೆಗಾಗಿ ದಯವಿಟ್ಟು ವೆಬ್‌ವೀಕ್ಷಣೆ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ನವೀಕರಿಸಿ ಕ್ಲೌಡ್‌ಫ್ಲೇರ್ ಅನ್ನು ಬೈಪಾಸ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ - - ವಿಸ್ತರಣೆ ನವೀಕರಣ ಲಭ್ಯವಿದೆ - %d ವಿಸ್ತರಣೆ ನವೀಕರಣಗಳು ಲಭ್ಯವಿದೆ - ಹೊಸ ಆವೃತ್ತಿ ಲಭ್ಯವಿದೆ! ಡೌನ್‌ಲೋಡ್ ದೋಷ ಡೌನ್‌ಲೋಡ್ ಪೂರ್ಣಗೊಂಡಿದೆ ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ… - ನವೀಕರಣಗಳಿಗಾಗಿ ಹುಡುಕಲಾಗುತ್ತಿದೆ… ಹೊಸ ನವೀಕರಣಗಳು ಲಭ್ಯವಿಲ್ಲ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ ಬ್ಯಾಕಪ್ ಫೈಲ್ ಆಯ್ಕೆಮಾಡಿ ಕವರ್ ಇಮೇಜ್ ಆಯ್ಕೆಮಾಡಿ ಇದನ್ನು ಮಾಡುವ ಮೊದಲು ದಯವಿಟ್ಟು ನಿಮ್ಮ ಗ್ರಂಥಾಲಯಕ್ಕೆ ಮಾಂಗಾವನ್ನು ಸೇರಿಸಿ ಕವರ್ ನವೀಕರಿಸಲು ವಿಫಲವಾಗಿದೆ - - ಅಧ್ಯಾಯಗಳು %1$s ಮತ್ತು 1 ಹೆಚ್ಚು - ಅಧ್ಯಾಯಗಳು %1$s ಮತ್ತು %2$d ಹೆಚ್ಚು - ಅಧ್ಯಾಯಗಳು %1$s ಅಧ್ಯಾಯ %1$s ಮತ್ತು %2$d ಹೆಚ್ಚು ಅಧ್ಯಾಯ %1$s - - 1 ಹೊಸ ಅಧ್ಯಾಯ - %1$d ಹೊಸ ಅಧ್ಯಾಯಗಳು - - - 1 ಶೀರ್ಷಿಕೆಗಾಗಿ - %d ಶೀರ್ಷಿಕೆಗಳಿಗಾಗಿ - ಹೊಸ ಅಧ್ಯಾಯಗಳು ಕಂಡುಬಂದಿವೆ ಹೊಸ ಅಧ್ಯಾಯಗಳಿಗಾಗಿ ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ ಅಧ್ಯಾಯಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಡೌನ್‌ಲೋಡ್‌ಗಳ ವಿಭಾಗದಲ್ಲಿ ನೀವು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಬಹುದು @@ -329,8 +295,11 @@ ಮೂಲದ ಪ್ರಕಾರ ಅಧ್ಯಾಯ ಸಂಖ್ಯೆ ಮೂಲ ಶೀರ್ಷಿಕೆ + ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ + ದೋಷ ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ (%1$d/%2$d) ಅಧ್ಯಾಯ %1$s + ಮಾಂಗಾವನ್ನು ಗ್ರಂಥಾಲಯಕ್ಕೆ ಸೇರಿಸುವುದೇ\? ಮೂಲವನ್ನು ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ: %1$s ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸಲಾಗಿದೆ: \n%1$s @@ -353,7 +322,6 @@ ಕೊನೆಯದಾಗಿ ಉಪಯೋಗಿಸಿದ ಇತರೆ ಲೋಕಲ್ ಮೂಲ - ವೆಬ್‌ವೀಕ್ಷಣೆಯಲ್ಲಿ ವೆಬ್‌ಸೈಟ್ ಪರಿಶೀಲಿಸಿ ಯಾವುದೇ ಫಲಿತಾಂಶಗಳು ಕಂಡುಬರಲಿಲ್ಲ ಹೆಚ್ಚಿನ ಫಲಿತಾಂಶಗಳಿಲ್ಲ ವರ್ಗವನ್ನು ನವೀಕರಿಸಲಾಗುತ್ತಿದೆ @@ -367,10 +335,6 @@ ಇಮೇಲ್ ವಿಳಾಸ ಬಳಕೆದಾರ ಹೆಸರು %1$s ಗೆ ಲಾಗ್ ಇನ್ ಮಾಡಿ - - 1 ಉಳಿದಿದೆ - %1$s ಉಳಿದಿದೆ - ನಿಮ್ಮ ಗ್ರಂಥಾಲಯದ ಎಲ್ಲಾ ಮಾಂಗಾವನ್ನು ಫಿಲ್ಟರ್ ಮಾಡುತ್ತದೆ ಡೌನ್ಲೋಡ್ ಮಾಡಿದ ಯಾವುದೇ ದೋಷಗಳನ್ನು ಸರಿಪಡಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಯಾವುದೇ ಸೂಕ್ಷ್ಮ ಡೇಟಾವನ್ನು ಕಳುಹಿಸಲಾಗುವುದಿಲ್ಲ @@ -383,9 +347,10 @@ ಬ್ಯಾಟರಿ ಆಪ್ಟಿಮೈಸೇಶನ್ ಅನ್ನು ಈಗಾಗಲೇ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ ಹಿನ್ನೆಲೆ ಗ್ರಂಥಾಲಯದ ನವೀಕರಣಗಳು ಮತ್ತು ಬ್ಯಾಕಪ್‌ಗಳೊಂದಿಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ ಬ್ಯಾಟರಿ ಆಪ್ಟಿಮೈಸೇಶನ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ - ಟ್ರ್ಯಾಕಿಂಗ್ ಅನ್ನು ರಿಫ್ರೆಶ್ ಮಾಡಿ ಗ್ರಂಥಾಲಯದ ಮಾಂಗಾ ಕವರ್‌ಗಳನ್ನು ರಿಫ್ರೆಶ್ ಮಾಡಿ ನಮೂದುಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ + ನಿಮ್ಮ ಗ್ರಂಥಾಲಯದಲ್ಲಿ ಇಲ್ಲದ ಮಾಂಗಾದ ಇತಿಹಾಸವನ್ನು ಅಳಿಸಿ + ಡೇಟಾಬೇಸ್ ತೆರವುಗೊಳಿಸಿ ಕುಕೀಗಳನ್ನು ತೆರವುಗೊಳಿಸಲಾಗಿದೆ ಕುಕೀಗಳನ್ನು ತೆರವುಗೊಳಿಸಿ ಸಂಗ್ರಹವನ್ನು ತೆರವುಗೊಳಿಸುವಾಗ ದೋಷ ಸಂಭವಿಸಿದೆ @@ -425,10 +390,6 @@ ಅಡ್ಡ ಯಾವುದು ಅಲ್ಲ ಟ್ಯಾಪಿಂಗ ಅನ್ನು ತಿರುಗಿಸಿ - - 1 ಚಾಪ್ಟರ್ - %1$s ಚಾಪ್ಟರಗಳು - ಅಜ್ಞಾತ ಸ್ಥಿತಿ ಅಜ್ಞಾತ ಲೇಖಕ \"%1$s\" ಅನ್ನು ಗ್ಲೋಬಲ್ ಸರ್ಚ್ ಮಾಡಿ @@ -439,20 +400,12 @@ ಓದುವ ಮೊಡ್ ಜನರಲ್ ಸೆಲೆಕ್ಷನ್ ಹಾಕಿದ್ದ ದಿನಾಂಕ - - 1 ಟ್ರಾಕರ್ - %d ಟ್ರಾಕರ್ ಗಳು - ಯಾವುದೆ ಪಿನ್ ಮಾಡಿರುವ ಸೋರ್ಸ್ ಗಳು ಇಲ್ಲ ಪೂರ್ಣ ಪ್ರಗತಿ ಇದು ಅನಧಿಕೃತ ಮತ್ತು ತಪ್ಪಾಗಿ ಚಿಹ್ನಿಸಿದ ವಿಸ್ತರಣೆಗಳಿಂದ 18+ ಮೂಲಗಳನ್ನು ಮರೆಮಾಚಲಾಗುವುದಿಲ್ಲ. ದೋಷಗಳು ಅಧ್ಯಾಯದ ಡೀಫಾಲ್ಟ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ನವೀಕರಿಸಲಾಗಿದೆ - - 1 ಅಧ್ಯಾಯ ಕಾಣೆಯಾಗಿದೆ - %d ಅಧ್ಯಾಯ ಕಾಣೆಯಾಗಿವೆ - %1$s: %2$s, ಪುಟ %3$d ಯಾವುದೇ ಅಧ್ಯಾಯಗಳು ಕಂಡುಬಂದಿಲ್ಲ ಡೀಫಾಲ್ಟ್ ಆಗಿ ಹೊಂದಿಸಿ @@ -508,8 +461,10 @@ ಹೊರಗಿಡಿ: %s ಸೇರಿಸಿ: %s ಯಾವುದು ಅಲ್ಲ + ಹೊರಗಿಡಲಾದ ವರ್ಗಗಳಲ್ಲಿನ ಮಾಂಗಾ ಸೇರಿಸಿದ ವಿಭಾಗಗಳಲ್ಲಿದ್ದರೂ ನವೀಕರಿಸಲಾಗುವುದಿಲ್ಲ. ದೋಷಗಳನ್ನು ತೋರಿಸು ಈ ಸರಣಿಯ ಎಲ್ಲವನ್ನೂ ರದ್ದುಮಾಡಿ + ಸ್ಥಳೀಯ ಬ್ಯಾಡ್ಜ್ ಗಳು ನೀವು ಇನ್ನೂ ಯಾವುದೇ ವರ್ಗಗಳನ್ನು ಹೊಂದಿಲ್ಲ. ಈ ಆಂಡ್ರಾಯ್ಡ್ ಆವೃತ್ತಿಯನ್ನು ಇನ್ನು ಮುಂದೆ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ ಯಾವುದೇ ಹೋಲಿಕೆ ಕಂಡುಬಂದಿಲ್ಲ @@ -530,16 +485,11 @@ ಉದ್ದವಾದ ಪುಟ ತಿರುಗುವಿಕೆಯ ಪ್ರಕಾರ ಸ್ವಯಂಚಾಲಿತ - ಮಾಂಗಾ ಶೀರ್ಷಿಕೆಗೆ ಅನುಗುಣವಾಗಿ ಫೋಲ್ಡರ್ ಗಳನ್ನು ರಚಿಸುತ್ತದೆ - ಪ್ರತ್ಯೇಕ ಫೋಲ್ಡರ್ ಗಳಲ್ಲಿ ಪುಟಗಳನ್ನು ಉಳಿಸಿ ಕ್ರಿಯೆಗಳು ಗ್ರೇಸ್ಕೇಲ್ ಆಫ ಆನ್ ಪ್ರತಿ ವರ್ಗದ ವಿಂಗಡಣೆ ಮತ್ತು ಪ್ರದರ್ಶನಕ್ಕಾಗಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳು - ಲೈಬ್ರರಿಯನ್ನು ನವೀಕರಿಸುವಾಗ ಟ್ರ್ಯಾಕರ್‌ಗಳನ್ನು ನವೀಕರಿಸಿ - ಟ್ರ್ಯಾಕರ್‌ಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ರಿಫ್ರೆಶ್ ಮಾಡಿ ನಿರ್ಬಂಧಗಳು: %s ಈಗಲೇ ಡೌನ್‌ಲೋಡ್ ಪ್ರಾರಂಭಿಸಿ -ಡೌನ್‌ಲೋಡ್ ಸಾಲು - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ko/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/ko/plurals-aniyomi.xml new file mode 100644 index 0000000000..2b847c93df --- /dev/null +++ b/i18n/src/commonMain/resources/MR/ko/plurals-aniyomi.xml @@ -0,0 +1,24 @@ + + + + 보지 않은 다음 %d 에피소드 + + + %1$s개의 에피소드 + + + %d개의 애니메이션 + + + %1$d개의 새로운 에피소드 + + + %d 초 + + + 에피소드 %1$s와 그 외 %2$d + + + 다음 %d 에피스드 + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ko/plurals.xml b/i18n/src/commonMain/resources/MR/ko/plurals.xml new file mode 100644 index 0000000000..03c6fcff6c --- /dev/null +++ b/i18n/src/commonMain/resources/MR/ko/plurals.xml @@ -0,0 +1,51 @@ + + + + %1$s 개 남음 + + + 총 %1$s화 + + + %1$d일 전 + + + 소요 시간: %1$s, 발생한 오류: %2$s + + + %1$s분 후 + + + 항목 %d개 + + + %d개의 트래커 + + + 소스에 존재하지 않거나 필터링되어 있는 %d개의 회차를 건너뛰었습니다 + + + %d개의 확장 앱 업데이트가 있습니다 + + + %d개의 항목 + + + %1$d개의 새로운 회차 + + + %1$s화와 그 외 %2$d화 + + + 읽지 않은 다음 %d 회차 + + + 다음 %d화 + + + 누락된 회차 %1$s개 + + + %d일 + + \ No newline at end of file diff --git a/i18n/src/main/res/values-ko/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/ko/strings-aniyomi.xml similarity index 96% rename from i18n/src/main/res/values-ko/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/ko/strings-aniyomi.xml index eccb34512e..50ff306dea 100644 --- a/i18n/src/main/res/values-ko/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/ko/strings-aniyomi.xml @@ -105,9 +105,6 @@ 다운로더 앱 기본 설정 새로운 에피소드 다운로드 시청 중 자동 다운로드 - - 보지 않은 다음 %d 에피소드 - 항목이 내 서재에 추가되어 있고, 현재 에피소드와 다음 에피소드가 이미 다운로드된 경우에만 작동됩니다 읽은 기록 동기화 서재에 추가할 때 동기화 메뉴 열기 @@ -130,9 +127,6 @@ 에피소드를 찾을 수 없음 잘못된 에피소드 형식 알 수없는 스튜디오 - - %1$s개의 에피소드 - 다운로드한 에피소드를 삭제하시겠습니까\? 서재에 추가합니까\? 서재에 애니메이션을 추가하시겠습니까\? @@ -174,12 +168,6 @@ 경고: 대량 다운로드는 소스가 느려지거나 Tachiyomi를 차단할 수 있습니다. 탭하여 자세히 알아보기. 비디오를 찾을 수 없음 새로운 에피소드 발견 - - %d개의 애니메이션 - - - %1$d개의 새로운 에피소드 - 최근에 본 동영상이 없습니다 Tachiyomi를 사용하려면 WebView가 필요합니다 업데이트된 기본 에피소드 설정 @@ -187,9 +175,6 @@ 에피소드 다운로드가 일시 중지됨 회차 업데이트 +%1$d 초 - - %d 초 - 다음 에피소드를 찾을 수 없습니다! 만화 애니메이션 @@ -232,9 +217,6 @@ 에피소드 %1$s 에피소드 %1$s와 그 외 %2$d 에피소드 %1$s - - 에피소드 %1$s와 그 외 %2$d - 에피소드 설정 백업 옵션 만화 확장 앱 @@ -262,9 +244,6 @@ PiP 모드 사용 활성화 이미 서재에 있는 만화 항목 숨기기 이미 서재에 있는 애니메이션 항목 숨기기 - - 다음 %d 에피스드 - 동영상 화질 선택: 확장 앱 설정 스크린샷 저장 diff --git a/i18n/src/main/res/values-ko/strings.xml b/i18n/src/commonMain/resources/MR/ko/strings.xml similarity index 83% rename from i18n/src/main/res/values-ko/strings.xml rename to i18n/src/commonMain/resources/MR/ko/strings.xml index 21345137fd..779ef6dbe5 100644 --- a/i18n/src/main/res/values-ko/strings.xml +++ b/i18n/src/commonMain/resources/MR/ko/strings.xml @@ -1,13 +1,13 @@ 이름 - 만화 - 범주 + 카테고리 + 서재 항목 + 회차 동기화 백업 및 복원 설정 필터 - 다운로드됨 북마크함 읽지 않음 필터 제거 @@ -42,6 +42,7 @@ 설정 화면 표시 기록 + 다운로드 대기열 서재 기록 업데이트 @@ -65,8 +66,8 @@ 정보 격자 크기 데이터 이전 - 확장기능 - 확장기능 정보 + 확장 앱 + 확장 앱 정보 전체 검색 일시중지 세로 @@ -81,6 +82,7 @@ 전부 자동 업데이트 조건 충전 중일 때만 + 기본 카테고리 업데이트 설치 대기 중 @@ -90,7 +92,7 @@ 신뢰 신뢰되지않음 삭제 - 신뢰할 수 없는 확장기능 + 신뢰할 수 없는 확장 앱 전체화면 더블 탭 애니메이션 속도 페이지 번호 표시 @@ -104,7 +106,7 @@ 페이지 (왼쪽에서 오른쪽) 페이지 (오른쪽에서 왼쪽) 페이지 (수직) - 웹툰 + 긴 스트립 늘리기 가로 맞추기 세로 맞추기 @@ -124,12 +126,11 @@ 끄기 마지막 회차 새로운 화 다운로드 - 서비스 + 트래킹 서비스 백업 생성 백업 복원 백업 파일에서 서재 복원 백업 위치 - 자동 백업 백업 주기 최대 백업 백업 생성됨 @@ -141,7 +142,8 @@ 지우는 동안 오류가 발생했습니다 쿠키 삭제 쿠키 삭제됨 - 트래커 동기화 새로고침 + 데이터베이스 삭제 + 서재에 추가되지 않은 항목의 기록을 삭제합니다 버전 오류 보고서 전송 버그를 수정하는데 도움이 됩니다. 개인 정보는 전송되지 않습니다 @@ -153,7 +155,7 @@ 알 수 없는 오류 카테고리 업데이트중 더이상 결과 없음 - 없음 검색… + 전체 검색… 최신 연재 알 수 없음 @@ -164,6 +166,8 @@ 소스 미설치: %1$s %1$s화 다운로드 중 (%1$d/%2$d) + 오류 + 일시정지 회차 번호 소스 기준 회차 번호 기준 @@ -177,6 +181,7 @@ 상태 카테고리 삭제됨 이 회차의 읽은 기록을 삭제합니다. 계속하시겠습니까\? + 서재에 추가합니까\? 사진 저장됨 이미지 필터 표지로 설정 @@ -199,7 +204,6 @@ 백업 파일 선택 다운로드 새로운 업데이트 없음 - 업데이트를 찾는중… 다운로드 중… 탭하여 업데이트 설치 다운로드 오류 @@ -210,9 +214,10 @@ 다운로더 오류 다운로드 중에 예기치 않은 오류가 발생하였습니다 + 다운로드 일시중지됨 다운로드한 챕터 연재가 끝남 - 기본 카테고리 + 항상 물어보기 현재 서재를 나중에 복구하는 데 사용 가능 네비게이션 페이지 전환 효과 표시 @@ -235,7 +240,6 @@ 끝에서 다섯번째 회차 어떤 항목들을 백업하겠습니까\? 항목 삭제됨 - 로컬 로컬 저장소 기타 찾아보기 @@ -249,7 +253,6 @@ 일시중지중 계획중 다시 읽는 중 - 시작 일자 종류 같은 이름을 가진 카테고리가 이미 존재합니다! 포함할 데이터를 선택하세요 @@ -262,7 +265,7 @@ Wi-Fi 연결 사용 불가능 네트워크 연결 사용 불가능 일반 - 길게 눌러 표시 + 길게 탭하여 액션 표시 WebView로 열기 32비트 컬러 읽음 표시된 회차 건너뛰기 @@ -275,7 +278,6 @@ 도움말 이메일 주소 웹사이트 - 뒤로 가기를 한 번 더 누르면 앱을 종료합니다 메뉴 더 보기 소스 @@ -290,9 +292,6 @@ 로그아웃 되었습니다 로그아웃 %1$s 에서 로그아웃 하시겠습니까\? - - %1$s 개 남음 - 시크릿 모드 끄기 다운로드가 완료된 항목만 표시 시크릿 모드 @@ -304,7 +303,7 @@ MIUI 최적화가 꺼져 있을 경우 백업/복원 기능이 정상 작동하지 않을 수 있습니다. 복원이 이미 진행중 입니다 설정을 적용하기 위해 앱을 재시작해야 합니다 - HTTPS를 통한 DNS (DoH) + DNS over HTTPS (DoH) 데이터 백업이 이미 진행중입니다 백업 복원 실패 @@ -351,82 +350,60 @@ 빈 공간 채우기 회차 변경 항상 표시 작가 미상 - - 총 %1$s화 - 읽기 모드 업데이트 내역 마지막으로 사용 분할 페이지 순서 뒤집기 양쪽 가장자리 챕터 목록 보기 - 읽지 않은 회차 탭 존 경고 번역에 참여하기 회전 설정 메타데이터 자동 갱신 - 트래커 자동 갱신 현재 만화에만 적용 읽기 모드 서재의 모든 항목에 적용됩니다 - - %1$d일 전 - 모서리 여백 - 없음 앱 정보 초기 설정 도움말 모두 활성화 - 웹툰 (이미지 간격 띄움) + 간격이 있는 긴 스트립 없음 - 길게 (오늘, n일 전) 날짜 형식 비활성화 색 반전 서재 서재에 추가 CBZ 파일로 저장 - - 소요 시간: %1$s, 발생한 오류: %2$s - - 서재 업데이트 중… (%1$d/%2$d) - 만화 업데이트 건너뛰기 + 항목 업데이트 건너뛰기 화면 보안을 켜면 앱을 전환할 때 내용이 숨겨지며 스크린샷을 찍을 수 없습니다 서재에 추가됨 데이터 이전 %1$s화 - %2$s 화면 보안 잠금 해제 필요 - 단어 사용 모양 오늘 - 시간 표시 형식 - 짧게 (오늘, 어제) 전역 업데이트 보안 및 개인정보 보호 - - %1$s분 후 - 항상 끄기 자동 잠금 알림 내용 숨기기 + 제외된 카테고리 세로 (거꾸로 보기) - - 항목 %d개 - Wi-Fi 에서만 활성화 서재 업데이트 중 - 가로 이미지 확대 + 넓은 이미지로 자동 확대 읽기 매우 낮음 읽기 모드 표시 높음 스크롤 시 메뉴 숨기기 민감도 낮음 - 행동 + 조작 언어 뷰어가 켜질 때 현재 읽기 모드를 표시합니다 탭 영역 오버레이 표시 @@ -435,10 +412,9 @@ 디스플레이 필터링된 회차 건너뛰기 매우 높음 - 확장기능 업데이트 + 확장 앱 업데이트 기본값으로 설정 알림 설정 - 앱 종료 전에 확인 앱 업데이트 진행 상황 오류 @@ -446,10 +422,11 @@ 터치하여 자세히 알아보기 기본 회차 설정을 업데이트 했습니다 건너뜀 + 회차 업데이트 포함: %s 백그라운드 활동 - 카테고리 별 표시/정렬 설정 - Shizuku를 확장기능 인스톨러로 사용하려면 Shizuku를 먼저 설치해 주세요. + 카테고리 별 정렬 설정 + Shizuku를 확장 앱 인스톨러로 사용하려면 Shizuku를 먼저 설치해 주세요. 전부 업데이트 백업에 항목이 포함되어 있지 않습니다. 개발자와 공유할 수 있는 오류 로그 파일을 생성합니다 @@ -463,7 +440,6 @@ 일부 제조사는 백그라운드 서비스를 종료하는 추가적인 제한 사항이 있습니다. 자세한 사항은 웹사이트를 참조하세요. 태블릿 UI - WebView에서 사이트 열기 핀 설정됨 \"%1$s\"를 전체 검색합니다 로컬 저장소 사용법 @@ -474,18 +450,11 @@ 상세정보 표시 상세정보 숨김 클립보드로 복사에 실패하였습니다 - 이 트래커는 Komga 소스에만 호환됩니다. - - %d개의 트래커 - 트래커 추가 일시정지 MAL에 다시 로그인해 주세요 소스를 찾을 수 없습니다 페이지를 찾을 수 없습니다 - - 소스에 존재하지 않거나 필터링되어 있는 %d개의 회차를 건너뛰었습니다 - 내역 삭제 기록이 삭제되었습니다 새로운 회차 확인 중 @@ -497,22 +466,18 @@ 완결된 만화를 건너 뛰었습니다 읽지 않은 만화를 건너 뛰었습니다 이 안드로이드 버전은 더이상 지원되지 않습니다 - - %d개의 확장기능 업데이트가 있습니다 - Cloudflare를 통과하지 못했습니다 호환성을 위해 WebView 어플리케이션을 업데이트 해 주세요 넓은 이미지 이동 이 확장 프로그램은 더 이상 사용할 수 없습니다. 제대로 작동하지 않을 수 있으며 앱에 문제가 발생할 수 있습니다. 제거하는 것이 좋습니다. - 확장기능 설치 중… + 확장 앱 설치 중… 레거시 - 10% 트래킹 서재 표지 새로고침 오류 로그 공유 회차를 찾을 수 없습니다 결과가 없습니다 - 이 확장기능의 소스는 19금 콘텐츠가 포함될 수 있습니다 + 이 확장 앱의 소스는 성인 컨텐츠가 포함될 수 있습니다 트래커 사용 시작 지금 다운로드 시작 @@ -524,20 +489,17 @@ 취소됨 검색된 회차가 없습니다 지원되지 않는 소스입니다 - 다운로드 완료 이전 페이지 내림차순 다이내믹 표지만 있는 격자 - 재정렬 최신 순 테마 황혼 지원 종료 검색 결과가 없습니다 넓은 페이지 분할 시 배치가 읽는 방향과 다를 경우 - 19금 - 읽는 중 + 성인 컨텐츠 카테고리 탭 보이기 챕터를 가져온 날짜순 전체 항목 개수순 @@ -550,26 +512,19 @@ 오름차순 오래된 순 옥색 - 최근 딸기 칵테일 - 확장기능 목록 취득 실패 - 서재 업데이트 시 트래커 갱신 + 확장 앱 목록 가져오기 실패 제외: %s - 이 확장기능은 공식 확장기능이 아닙니다. - 트래커 서비스에 항목 진행 상황을 동기화합니다. 트래킹 버튼을 이용하여 각각의 항목 별로 트래킹을 설정하세요. - 20% - 25% + 이 확장앱은 공식 확장앱이 아닙니다. + 트래킹 서비스에 항목 진행 상황을 업데이트합니다. 트래킹 버튼을 이용하여 각각의 항목 별로 트래킹을 설정하세요. 트래커 가이드 - 향상된 서비스 - 5% - 15% + 향상된 트래킹 서비스 카테고리가 다운로드에서 제외된 경우 다른 카테고리에 포함되어 있어도 다운로드 되지 않습니다. - 특정 소스에 향상된 서비스를 제공합니다. 서재에 항목이 추가될 시 자동으로 트래킹 됩니다. - 전체 검색 시 핀 설정된 소스만 검색 + 특정 소스에 대해 향상된 기능을 제공합니다. 서재에 항목이 추가될 시 자동으로 트래킹 됩니다. 백업 파일에서 데이터가 복구됩니다. \n \n복구 완료 후 없어진 소스를 다시 설치하고 트래킹 서비스에 로그인 해야 합니다. - 백업 파일은 복사하여 다른 장소에 나눠 보관하세요. + 백업 파일은 복사하여 다른 장소에 나눠 보관하세요. 백업 파일에는 비밀번호 등의 민감한 정보가 포함될 수 있습니다. 백업 파일 공유시 주의하세요. 백그라운드 서재 업데이트와 라이브러리 업데이트를 도울 수 있습니다 자세한 로그 자세한 로그를 시스템 로그에 기록 (성능이 하락할 수 있습니다) @@ -577,17 +532,11 @@ 정렬 읽기 시작한 날짜 다 읽은 날짜 - - %d개의 만화 - - - %1$d개의 새로운 회차 - 읽지 않은 회차가 있는 만화를 건너 뛰었습니다 등록된 카테고리가 없습니다. - 항목 제목에 따라 폴더 생성 소스 이전 설명서 원본 소스를 선택하세요 + 로컬 소스 항목 수 보이기 끄기 고정 @@ -595,28 +544,25 @@ 모두 취소 이 만화의 항목을 모두 취소 앞으로 - 각각의 폴더에 페이지 저장 FAQ 및 설명서 읽지 않음 이 시리즈를 맨 위로 이동 새로고침 청사과 문어 - 음과 양 + Yin & Yang 요츠바 - 후방주의 (19금) 소스 + 성인 콘텐츠 소스 소스 및 확장 기능 목록에 보이기 - 이 옵션을 끄더라도 비공식 또는 분류가 잘못된 확장 기능으로 인하여 후방주의 (19금) 컨텐츠가 표시될 수 있습니다. + 이 옵션을 끄더라도 비공식 또는 분류가 잘못된 확장 기능으로 인하여 성인 컨텐츠가 표시될 수 있습니다. 터치하여 자세히 보기 3일 제한: %s + 카테고리가 업데이트에서 제외된 경우 다른 카테고리에 포함되어 있어도 업데이트 되지 않습니다. 업데이트 대기 중 서재 업데이트 시 새로운 표지와 설명 확인 %1$s화와 그 외 %2$d화 %1$s화 - - %1$s화와 그 외 %2$d화 - 파일 선택 어플리케이션이 없습니다 백업할 서재 항목이 없습니다 새로운 공식 업데이트가 있습니다. F-Droid의 비공식 버전에서 이전을 원하시면 터치해서 방법을 확인하세요. @@ -625,10 +571,7 @@ 출처를 찾을 수 없습니다 설치된 소스를 찾을 수 없습니다 읽지 않은 항목 개수순 - 중복된 고정 소스 표시 - 해당 언어 그룹에서 고정된 소스 반복 닫기 - 배터리가 부족하지 않을 때만 WebView 데이터 지우기 WebView 데이터 삭제됨 리더 성능 향상 @@ -636,21 +579,21 @@ 언어 읽을 목록 위시리스트 - 모든 시리즈의 읽기 모드랑 화면 방향이 초기화하기 + 모든 시리즈의 읽기 모드와 화면 방향 초기화 앱 언어 설치되지 않음 라벤더 - 아닌 연결로 네트워크만 + 무제한 네트워크에서만 \"%s\" 카테고리를 삭제하시겠습니까\? 카테고리 삭제 내부 오류: 더 자세한 정보를 보고 싶으면 충돌 로그를 확인하세요 요약 없음 - 파일 경로 못 찾았습니다 %d + 페이지 %d의 파일 경로를 찾을 수 없습니다 미완성된 목록 와...이거 좀 어색하네 맞춤 표지 연령 등급 - 다 제거하기 + 모두 제거 모든 뷰어 설정을 초기화했습니다 기본 사용자 에이전트 문자열 기본 사용자 에이전트 문자열 초기화 @@ -660,28 +603,23 @@ 마지막 회차를 열 수 없습니다 최근에 업데이트된 항목 보기 보류 목록 - 나누어 짐 중에 %d페이지 안 찾습니다 + 분할하는 동안 %d 페이지를 찾을 수 없습니다 RARv5 포맷은 지원되지 않습니다 - 앱 잠금 사용 중에 위젯 이용할 없습니다 + 앱 잠금 사용 중에는 위젯을 이용할 수 없습니다 파도 업데이트가 이미 실행 중입니다 사용자 에이전트 문자열은 비워 둘 수 없습니다 미리 다운로드 다언어 - 긴 이미지 분할 (BETA) 서재에서 \"%s\"을(를) 제거하려고 합니다 저장공간 사용 권한이 없음 - - 읽지 않은 다음 %d 회차 - 읽을 때 자동 다운로드 마지막 서재 업데이트: %s - 만화가 내 서재에 추가되어 있고, 현재 회차와 다음 회차가 이미 다운로드된 경우에만 작동됩니다 + 현재 회차 + 다음 회차가 이미 다운로드된 경우에만 작동됩니다. 인기 정말로 실행합니까\? 만화에 업데이트가 필요하지 않음으로 건너뜀 검색… - 앱 언어, 알림 카테고리, 전역 업데이트, 회차 스와이프 읽기 모드, 디스플레이, 탐색 단방향 진행 동기화, 향상된 동기화 @@ -691,7 +629,7 @@ 오류 로그 덤프, 배터리 최적화 테마, 날짜 및 시간 형식 자동 다운로드, 미리 다운로드 - 예기치 않은 오류가 발생했습니다 + 앗! 애플리케이션 재시작 %s에 예기치 않은 오류가 발생했습니다. 충돌 로그를 공식 디스코드 채널에 공유하는 것을 추천합니다. 알 수 없는 제목 @@ -703,7 +641,33 @@ 이 카테고리에 항목이 없습니다 F-Droid 빌드는 공식적으로 지원되지 않습니다. \n자세히 알아보려면 탭하세요. - 다운로드 대기열 + %s에서 이전에 선택한 완료 날짜가 제거됩니다 + 다운로드 인덱스 제거 + 날짜를 제거 하시겠습니까\? + %s에서 이전에 선택한 시작 날짜가 제거됩니다 + 완료된 항목 + 전체 + 전역 업데이트 대상 + 사용됨 + N/A + %d분 + %d초 + 통계 정보 + 시작됨 + 로컬 + 다운로드함 + 개요 + 읽은 시간 + 항목 + 동기화 + 동기화된 항목 + 읽음 + 평균 점수 + %d일 + %d시간 + 나중에 + 카테고리가 비어 있습니다 + 클립보드에 복사됨 사용 가능하지만 소스가 설치되지 않음: %s 중복 회차 건너뛰기 %1$s 오류: %2$s @@ -713,21 +677,51 @@ *필수 클립보드에 복사 이미 서재에 있는 항목 숨기기 - - 다음 %d화 - 카테고리 업데이트 긴 이미지 분할 오버레이 화면에 맞게 넓은 페이지 회전 회전된 넓은 페이지의 회전 방향 - - 누락된 회차 %1$s개 - 디버그 정보 행당 %d개 왼쪽으로 스와이프 액션 오른쪽으로 스와이프 액션 회차 스와이프 두 번 탭하여 줌 - \ No newline at end of file + 간격 설정 + 사용자 지정 가져오기 간격 + 매월 가져오기 (28일) + 간격 + 간격 설정 + 다운로드 삭제 + 결과가 있는 것만 보기 + 이렇게 하면 로컬에서 동기화가 제거됩니다. + %s에서도 제거 + OK + 오늘 연재가 예상되지 않았기 때문에 건너뛰었습니다 + %s 동기화를 삭제 하시겠습니까\? + 체크 기간이 지났습니다 + 연재 예정 기간 제외 + 다운로드 인덱스를 제거함 + 다음 업데이트 예정 + 탭하여 Cloudflare에 관한 도움말 보기 + 일별 가져오기 (10일 이상) + %s를 잠금해제 + 항상 업데이트 하도록 설정 + 서재를 동기화합니다 + 백업 파일을 생성할 수 없습니다 + 서재가 동기화되었습니다 + 이 시리즈를 맨 아래로 이동 + 라이센스 제한 - 회차를 표시할 수 없습니다 + 인터넷에 연결되지 않음 + 포기했나요\? 20일 ~ 2달 이내 + 항상 평가하기 + 트래킹 서비스 로그인 + HTTP %d, WebView의 웹 사이트를 확인해 주세요 + %s에 연결할 수 없습니다 + 카테고리 정렬 + 서재 업데이트 중...(%s) + 카테고리를 알파벳 순으로 정렬하시겠습니까\? + 소스 설정 + 앱 설정 + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/lt/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/lt/plurals-aniyomi.xml new file mode 100644 index 0000000000..a734065659 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/lt/plurals-aniyomi.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/lt/plurals.xml b/i18n/src/commonMain/resources/MR/lt/plurals.xml new file mode 100644 index 0000000000..5fa7faf23a --- /dev/null +++ b/i18n/src/commonMain/resources/MR/lt/plurals.xml @@ -0,0 +1,68 @@ + + + + Vakar + Prieš %1$d dienas + Prieš %1$d dienų + + + Po %1$s minutės + Po %1$s minučių + Po %1$s minučių + + + %d kategorija + %d kategorijos + %d kategorijos + + + Skyrius %1$s ir 1 daugiau + Skyriai %1$s ir %2$d daugiau + Skyriai %1$s ir %2$d daugiau + + + %1$d naujas skyrius + %1$d nauji skyriai + %1$d nauji skyriai + + + Atlikta %1$s su %2$s klaida + Atlikta %1$s su %2$s klaidomis + Atlikta %1$s su %2$s klaidomis + + + %d įrašui + %d įrašams + %d įrašų + + + %d plėtinio atnaujinimas pasiekiamas + %d plėtinių atnaujinimai pasiekiami + %d plėtinių atnaujinimai pasiekiami + + + %1$s skyrius + %1$s skyriai + %1$s skyriai + + + Liko vienas + Liko %1$s + Liko %1$s + + + %d stebėjimo įrenginys + %d stebėjimo įrenginiai + %d stebėjimo įrenginių + + + Praleidžiamas %d skyrius, arba jo nėra šaltinyje, arba jis buvo nepasirinktas + Praleidžiami %d skyriai, arba jų nėra šaltinyje, arba jie buvo nepasirinkti + Praleidžiamia %d skyrių, arba jų nėra šaltinyje, arba jie buvo nepasirinkti + + + Kitas neskaitytas skyrius + Kiti %d neskaityti skyriai + Kiti %d neskaitytų skyrių + + \ No newline at end of file diff --git a/i18n/src/main/res/values-lt/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/lt/strings-aniyomi.xml similarity index 76% rename from i18n/src/main/res/values-lt/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/lt/strings-aniyomi.xml index 85f091c45d..91aa22d95b 100644 --- a/i18n/src/main/res/values-lt/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/lt/strings-aniyomi.xml @@ -36,39 +36,4 @@ Nepavyko atsisiųsti skyrių dėl mažos vietos saugykloje Įspėjimas: dėl didelių masinių atsisiuntimų šaltiniai gali tapti lėtesni ir (arba) jie blokuoti \"Tachiyomi\". Bakstelėkite , jei norite sužinoti daugiau. \"WebView\" reikalingas \"Tachiyomi\" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-lt/strings.xml b/i18n/src/commonMain/resources/MR/lt/strings.xml similarity index 88% rename from i18n/src/main/res/values-lt/strings.xml rename to i18n/src/commonMain/resources/MR/lt/strings.xml index 37c2bc7f65..ac3469c73a 100644 --- a/i18n/src/main/res/values-lt/strings.xml +++ b/i18n/src/commonMain/resources/MR/lt/strings.xml @@ -1,14 +1,13 @@ - Atsiųsta Filtras Meniu Nustatymai - Paspauskite atgal, kad išeitumėte Istorija Sekimas Skyriai - Manga + Bibliotekos įrašai + Kategorijos Neturite jokių kategorijų. Paspauskite pliuso simbolį, kad sukurtumėte kategoriją jūsų bibliotekos organizavimui. Jūsų biblioteka tuščia Nėra neseniai skaitytų @@ -23,12 +22,12 @@ Istorija Naujienos Biblioteka + Atsisiuntimų eilė Nustatymai Daugiau Vardas Visada klausti - Naujinti seklius kai biblioteka naujinama - Automatiškai naujinti seklius + Numatyta kategorija Tikrinti naujus viršelius ir informaciją kai biblioteka naujinama Automatiškai naujinti metaduomenis Kai yra \"Perskaityta\" statusas @@ -47,36 +46,20 @@ Portretas Elementai eilutėje Rodinys - - Vakar - Prieš %1$d dienas - Prieš %1$d dienų - Šiandien - Neseniai Tai nesustabdo neoficialių ar potencialiai neteisingai pažymėtų plėtinių nuo N18+ turinio rodymo programoje. Rodyti šaltiniuose ir plėtinių sąrašuose N18+ šaltiniai Slėpti pranešimo turinį Slėpti programos turinį, kai įjungiama kita programa ir neleisti daryti ekrano nuotraukų Saugus užraktas - - Po %1$s minutės - Po %1$s minučių - Po %1$s minučių - Niekada Visada Užrakinti kai neveiksnus Reikalauti atrakinimo Sauga Tvarkyti pranešimus - Patvirtinti išėjimą Datos formatas - Ilgi (Trumpi+, prieš n dienų) - Trumpi(Šiandien,Vakar) - Reliatyvūs laiko štampai - Laiko štampai Visiškai juodas tamsus režimas Yotsuba Jin ir Jang @@ -122,7 +105,6 @@ Naujausi Pagal skyrių skaičių Pagal įkėlimo datą - Pertvarkyti Rikiavimas Atšaukti visus šiam kūriniui Atšaukti visus @@ -132,6 +114,7 @@ Išjungti Rodyti įrašų skaičių Rodyti kategorijų korteles + Vietinis šaltinis Atsisiųsti skyriai Sąrašas Patogus tinklelis @@ -190,7 +173,7 @@ Apkarpyti kraštus Sumažina spalvų gradientą, bet daro įtaką našumui 32-bitų spalva - Trupai parodyti dabartinį rėžimą, kai skaitiniai yra atidaryti + Trumpai parodyti dabartinį rėžimą, kai skaitiniai yra atidaryti Parodyti skaitymo rėžimą Parodyti puslapio numerį Dvigubo paspaudimo animacijos greitis @@ -222,11 +205,7 @@ Įtraukti: %s Nėra Visi - - %d kategorija - %d kategorijos - %d kategorijos - + Įrašai, kurie yra įtraukti į neįtraukiamas kategorijas, nebus atnaujinami, net jei yra įtraukti į įtrauktąsias kategorijas. Atsiuntimo klaida Nauja versija pasiekiama! Pagal aukštį talpinimas @@ -244,8 +223,6 @@ Vertikalus Veiksmai Parodyti ilgiau paspaudus - Išsaugoti puslapius atskiruose aplankuose - Sukuria aplankus pagal įrašo pavadinimą Fono spalva Ankstesnis Pilka @@ -288,7 +265,6 @@ Iš dešinės į kairę Dešiniau A - Pradėta Patamsinti Horizontalus Abu @@ -327,42 +303,30 @@ Žemas Atsisiųsti naujus skyrius Išsaugoti kaip CBZ archyvą - Įtraukti tik prisegtus šaltinius Trūksta šaltinių: - 5% - 15% Paslaugos Priešpaskutinis perskaitytas skyrius Ketvirtas skyrius nuo paskutinio skaityto Penktas nuo paskutinio skaityto Automatinis atsisiuntimas - Automatinės atsarginės kopijos Maksimalus atsarginių kopijų skaičius Sukurta atsarginė kopija aukštas Atsisiuntimo vieta Mažiausias - Ne vienas Patobulintos paslaugos Atkurti biblioteką iš atsarginės failo kopijos Atsarginės kopijos vieta Atsarginėje kopijoje nėra jokių bibliotekos įrašų. Netinkamas atsarginės kopijos failas - 20% - 25% Aukščiausias Kurti atsarginę kopiją Atkurti atsarginę kopiją - 10% + Neįtrauktos kategorijos Pasirinktina vieta Paskiausiai skaitytas skyrius Įrašai neįtrauktose kategorijose nebus atsisiųsti, net jei jie taip pat yra įtraukti į kategorijas. Palieskite, kad sužinotumėte daugiau - - Skyrius %1$s ir 1 daugiau - Skyriai %1$s ir %2$d daugiau - Skyriai %1$s ir %2$d daugiau - Pasirinkti atsarginės kopijos failą Įkeliami puslapiai… Kito skyriaus nėra @@ -372,11 +336,6 @@ Atnaujinama biblioteka Atnaujinkite „WebView“ programą dėl geresnio suderinamumo Skyrius %1$s - - %1$d naujas skyrius - %1$d nauji skyriai - %1$d nauji skyriai - Istorija ištrinta Nepavyko pakrauti paveikslėlio Puslapių nerasta @@ -386,7 +345,6 @@ Baigta: Dabartinis: Ieškoma naujų skyrių - Atnaujinama biblioteka... (%1$d/%2$d) Nepavyko atnaujinti %1$d Prieš atlikdami šį veiksmą, pridėkite įrašą į savo biblioteką Praleista, nes nėra perskaitytų skyrių @@ -401,7 +359,6 @@ Bakstelėkite, kad įdiegtumėte atnaujinimą Ši \"Android\" versija nebepalaikoma Naujų atnaujinimų nėra - Ieškoma naujinimų… Pasirinkite duomenis, kuriuos norite įtraukti Kopijuoti Atrasti nauji skyriai @@ -420,10 +377,13 @@ Atnaujintas viršelis Dabar esate atsijungęs Nustatyti kaip viršelį + Pristabdyta Šaltinis neįdiegtas: %1$s + Pridėti į biblioteką\? Тipas Pradžios data Skyrius %1$s + Klaida Prisijungęs Nežinoma klaida Atsisiųsti skyriai @@ -434,7 +394,6 @@ Skyriaus numeris Baigimo data Šaltinio pavadinimas - Vietinis Prašome dar kartą prisijungti prie MAL Tai pašalins šio skyriaus skaitymo datą. Ar tu tuo tikras\? Atsijungti nuo %1$s\? @@ -449,12 +408,9 @@ Ištrinti viską InternalError: Patikrinkite klaidų žurnalus, kad gautumėte daugiau informacijos Kai duomenys neapmokestinami - Kai baterija nėra išsikrovusi Perkelti seriją į viršų Sekimo priemonės, neprijungtos prie: Pagerina skaitytuvo našumą - Rodyti pasikartojančius prisegtus šaltinius - Pakartokite prisegtus šaltinius atitinkamose kalbų grupėse Kalba Amžiaus reitingas Apverstas portretas @@ -475,13 +431,9 @@ Tinklo ryšis nepasiekiamas Nepavyko atsisiųsti skyriaus dėl netikėtos klaidos Valdiklis nepasiekiamas, kai įjungtas programėlės užraktas - - Atlikta %1$s su %2$s klaida - Atlikta %1$s su %2$s klaidomis - Atlikta %1$s su %2$s klaidomis - Peržiūrėkite neseniai atnaujintus bibliotekos įrašus Talpykla išvalyta. %1$d failai buvo ištrinti + Išvalyti duomenų bazę Nerandama failų rinkiklio programos Atidaryti „GitHub“ svetainėje Programėlių atnaujinimai @@ -493,7 +445,6 @@ Slapukai išvalyti Duomenys %1$d nebibliotekiniai įrašai duomenų bazėje - Atsisiuntimas baigtas Nepavyko atkurti atsarginės kopijos Tinklas Ką norite įtraukti į atsarginę kopiją\? @@ -511,18 +462,8 @@ Iš naujo nustatyti kiekvienos serijos skaitytuvo nustatymus Išmeskite strigčių žurnalus Nepavyko atsisiųsti skyrių. Galite pabandyti dar kartą atsisiųsti - - %d įrašui - %d įrašams - %d įrašų - Numatytoji vartotojo agento eilutė Neįdiegtas - - %d plėtinio atnaujinimas pasiekiamas - %d plėtinių atnaujinimai pasiekiami - %d plėtinių atnaujinimai pasiekiami - Atnaujinti numatytus skyrių nustatymus Parsisiuntėjas Klaida @@ -545,14 +486,14 @@ Skyriaus atnaujinimai Kitas puslapis Išvalyti slapukus + Ištrinkite įrašų istoriją, kurie nėra išsaugoti jūsų bibliotekoje Atsarginės failo kopijos duomenys bus atkurti. \n \nNorėdami jais naudotis, turėsite įdiegti trūkstamus plėtinius ir po to prisijungti prie stebėjimo paslaugų. Iš naujo nustatyti numatytąją vartotojo agento eilutę Išvalyti \"WebView\" duomenis Atnaujinti bibliotekos viršelius - Atnaujinti stebėjimą - Iš naujo nustati visų serijų skaitymo režimą ir orientaciją + Iš naujo nustatyti visų serijų skaitymo režimą ir orientaciją Visų skaitytuvo nustatymų nustatymas iš naujo Nepavyko atstatyti skaitytuvo nustatymų Fono veikla @@ -596,7 +537,6 @@ Viršelis Prisegtas El. pašto adresas - Patikrinkite svetainę \"WebView\" aplinkoje Pasaulinė paieška… Naujausia Vietos šaltinių vadovas @@ -619,11 +559,6 @@ Nežinomas autorius Nežinoma būsena Nebepublikuojamas - - %1$s skyrius - %1$s skyriai - %1$s skyriai - Nėra aprašymo Inkognito režimas Naršyti @@ -646,39 +581,22 @@ Įvyko klaida bendrinant viršelį Skyriaus nustatymai Ar tikrai norite išsaugoti šiuos nustatymus kaip numatytuosius\? - Šis sekimo įrenginys suderinamas tik su \"Komga\" šaltiniu. Pridėti stebėjimą Neskaityta Sulaikytas Norimų sąrašas Pilnas sąrašas - - Liko vienas - Liko %1$s - Liko %1$s - Pavadinimas - - %d stebėjimo įrenginys - %d stebėjimo įrenginiai - %d stebėjimo įrenginių - Klaidą išsaugojant paveikslą Būsena Rezultatas Kategorija su šiuo pavadinimu jau egzistuoja! - Pradėta Kategorijos ištrintos Pasirinktinas filtras Viršelis išsaugotas Būsena Užlaikytų sąrašas Nebaigtų sąrašas - - Praleidžiamas %d skyrius, arba jo nėra šaltinyje, arba jis buvo nepasirinktas - Praleidžiami %d skyriai, arba jų nėra šaltinyje, arba jie buvo nepasirinkti - Praleidžiamia %d skyrių, arba jų nėra šaltinyje, arba jie buvo nepasirinkti - %1$s: %2$s, puslapis %3$d Kitas skyrius nerastas Šaltinis nerastas @@ -690,12 +608,6 @@ Įdiegtų šaltinių nerasta Potvynio banga Ieškoti… - - Kitas neskaitytas skyrius - Kiti %d neskaityti skyriai - Kiti %d neskaitytų skyrių - - Perskirti aukštus paveikslėlius (BETA versija) Vartotojo agento eilutė negali būti tuščia Atnaujinimas jau vykdomas Biblioteka paskutinį kartą atnaujinta: %s @@ -708,7 +620,6 @@ Automatinis atsisiuntimas, atsisiuntimas į priekį Rankinės ir automatinės atsarginės kopijos Programos užraktas, saugus ekranas - Programos kalba, pranešimai Tema, datos ir laiko formatas Skaitymo režimas, rodymas, navigacija Vienpusis progreso sinchronizavimas, patobulintas sinchronizavimas @@ -730,7 +641,31 @@ \nBakstelėkite, kad sužinotumėte daugiau. Šioje kategorijoje įrašų nerasta Atverti atsitiktinį įrašą -Atsisiuntimų eilė + Tai pašalins jūsų anksčiau pasirinktą pabaigos datą iš %s + Pašalinti datą\? + Tai pašalins jūsų anksčiau pasirinktą pradžios datą iš %s + Atsisiuntimų indekso panaikinimas + Atsiųsta + Apžvalga + Iš viso + Perskaityta + Sekliai + Globaliame atnaujinime + Vidutinis įvertinimas + %d d. + %d val. + Naudojama + nėra + %d sek. + Įrašai + Skaitymo trukmė + Sekami įrašai + Užbaigti įrašai + Statistika + Pradėta + Vietiniai + %d min. + Ne dabar Kategorija yra tuščia Nukopijuota į iškarpinę Turima, bet šaltinis nėra įdiegtas: %s @@ -738,4 +673,4 @@ Bibliotekoje jau turite įrašą tokiu pačiu pavadinimu. \n \nAr vis tiek norite tęsti\? - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/lv/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/lv/plurals-aniyomi.xml new file mode 100644 index 0000000000..954497040b --- /dev/null +++ b/i18n/src/commonMain/resources/MR/lv/plurals-aniyomi.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/lv/plurals.xml b/i18n/src/commonMain/resources/MR/lv/plurals.xml new file mode 100644 index 0000000000..9ee680f4a9 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/lv/plurals.xml @@ -0,0 +1,83 @@ + + + + Pabeigts %1$s ar %2$s kļūdām + Pabeigts %1$s ar %2$s kļūdu + Pabeigts %1$s ar %2$s kļūdām + + + Pēc %1$s minūtēm + Pēc %1$s minūtes + Pēc %1$s minūtēm + + + %d kategoriju + %d kategorija + %d kategorijas + + + Šodien + Vakar + Pirms %1$d dienām + + + %1$s atlikušas + %1$s atlikusi + %1$s atlikušas + + + %d izsekotāju + %d izsekotājs + %d izsekotāji + + + Priekš %d ierakstiem + Priekš %d ieraksta + Priekš %d ierakstiem + + + Izlaisti %d nodaļu, vai nu to nav avotā, vai arī tie ir izfiltrēti + Izlaists %d nodaļa, vai nu tā nav avotā, vai arī tā ir izfiltrēta + Izlaistas %d nodaļas, vai nu tās nav avotā, vai arī tās ir izfiltrētas + + + %1$d jaunu nodaļu + %1$d jauna nodaļa + %1$d jaunas nodaļas + + + %1$s nodaļu + %1$s nodaļa + %1$s nodaļas + + + Pieejami %d paplašinājumi atjaunināšanai + Pieejams %d paplašinājums atjaunināšanai + Pieejami %d paplašinājumi atjaunināšanai + + + Nodaļu %1$s + Nodaļa %1$s un vēl 1 + Nodaļa %1$s un vēl %2$d + + + Trūkst %1$s nodaļu + Trūkst %1$s nodaļa + Trūkst %1$s nodaļas + + + Nākošā %d nodaļa + Nākošā %d nodaļa + Nākošās %d nodaļās + + + Nākamā nelasītā nodaļa + Nākamā nelasītā nodaļa + Nākamās %d nelasītas nodaļas + + + %d dienas + %d diena + %d dienas + + \ No newline at end of file diff --git a/i18n/src/main/res/values-lv/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/lv/strings-aniyomi.xml similarity index 75% rename from i18n/src/main/res/values-lv/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/lv/strings-aniyomi.xml index 835754739c..f43f3a99e5 100644 --- a/i18n/src/main/res/values-lv/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/lv/strings-aniyomi.xml @@ -35,39 +35,4 @@ Tachiyomi ir nepieciešams WebView Lejuplāde pauzēta Nodaļu atjauninājumi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-lv/strings.xml b/i18n/src/commonMain/resources/MR/lv/strings.xml similarity index 86% rename from i18n/src/main/res/values-lv/strings.xml rename to i18n/src/commonMain/resources/MR/lv/strings.xml index 9122d031a9..62749c6897 100644 --- a/i18n/src/main/res/values-lv/strings.xml +++ b/i18n/src/commonMain/resources/MR/lv/strings.xml @@ -1,10 +1,12 @@ Nosaukums + Kategorijas Nodaļas Izsekošana Vēsture Iestatījumi + Lejupieladēšanas rinda Bibliotēka Vēsture Atjauninājumi @@ -76,11 +78,6 @@ Izveido dublējumu Ko vēlaties dublēt\? Dublēšana jau notiek - - Pabeigts %1$s ar %2$s kļūdām - Pabeigts %1$s ar %2$s kļūdu - Pabeigts %1$s ar %2$s kļūdām - %02d min, %02d sec Atjaunošana pabeigta Trūkstošie avoti: @@ -93,6 +90,8 @@ Nav Invertētas skāriena zonas Paplašinājumu atjauninājumi + Nodaļu atjauninājumi + Lejupielādes pauzētas Nav lejuplāžu Palīdzība Migrēt @@ -110,40 +109,31 @@ Pievienošanas datums Jaunākā nodaļa Izvēlne - Vēlreiz nospiediet atpakaļ, lai izietu Jums nav nevienas kategorijas. Pieskarieties plus pogai, lai izveidotu kategoriju savas bibliotēkas organizēšanai. Jūsu bibliotēka ir tukša Nekas nesen lasīts Nekas nesen lasīts Jaunākais - Pārkārtot Atcelt visu Atspraust Piespraust Atspējot Rādīt kategoriju cilnes - Notiek jaunu nodaļu meklēšana… Nav pieejamas jaunas nodaļas Lejuplādēt Ainava Portrets - Vienumi rindā + Režģa izmērs Displejs Slēpt paziņojumu saturu Drošs ekrāns paslēpj saturu mainot lietotnes, un bloķē ekrānuzņēmumus Drošs ekrāns - - Pēc %1$s minūtēm - Pēc %1$s minūtes - Pēc %1$s minūtēm - Nekad Vienmēr Bloķēt, ja dīkstāvē Vajadzīgs atbloķēt Drošība un privātums Pārvaldiet paziņojumus - Apstipriniet izeju Datuma formāts Ieslēgts Izslēgts @@ -164,6 +154,7 @@ Parādīt lietu skaitu Atjauninās bibliotēka Izsekots + Noklusētā kategorija Meklēt Uzstādījumos Pabeigts Licencēts @@ -186,13 +177,11 @@ 18+ Autentificējaties, lai apstriprinātu izmaiņas Ar \'\'Pabeigts\'\' statusu - Automātiski atsvaidzina izsekotājus Sākt lejupielādi tūlīt Neizdevās iegūt paplašinājumu sarakstu Īsi parādīt, kad ir atvērts lasītājs Ierobežojums: %s Automātiski atsvaidzina metadatus - Nesen Atjauninot bibliotēku, meklēt jaunu vāku un kopsavilkumu Tikai nemērītā tīklā Uzlādējot @@ -211,32 +200,17 @@ NSFW (18+) avoti Rādīt avotos un paplašinājumu sarakstos Izslēgts - - %d kategoriju - %d kategorija - %d kategorijas - Valoda Nodaļas ieneses datums - - Šodien - Vakar - Pirms %1$d dienām - Izlaist ierakstu atjaunināšanu Biežāk uzdotie jautājumi un rokasgrāmatas Aizvērt - Laikspiedols - Relatīvais laikspiedols Globāls atjauninājums - Īss (Šodien, Vakar) - Garš (Īss+, pirms n dienām) Šis neliedz neoficiāliem vai, iespējams, nepareizi atzīmētiem paplašinājumiem parādīties NSFW (18+) saturu lietotnē. Šodien Automātiskie atjauninājumi Katru nedēļu Automātiskās atjaunināšanas ierīču ierobežojumi - Atjaunināt izsekotājus, atjauninot bibliotēku Izslēgt: %s Novecojis Instalēt @@ -273,10 +247,10 @@ Yotsuba Pilnīgi melns tumšais režīms Aplikācijas valoda - Ja akumalators nav zems Kas nav sāktas Vienmēr jautāt - Kategorijas iestatījumi kārtošanai un rādīšanai + Kategorijas iestatījumi kārtošanai + Izslēgto kategoriju ieraksti netiks atjaunināti, pat ja tie ir iekļautajās kategorijās. Neviens Iekļaut: %s Atjaunināt visu @@ -286,7 +260,7 @@ Neoficiāls Neuzticams Šis paplašinājums vairs nav pieejams. Tas var nedarboties pareizi un var radīt problēmas ar lietotni. Ieteicams to atinstalēt. - Šis paplašinājums nav no oficiālo Tachiyomi paplašinājumu saraksta. + Šis paplašinājums nav no oficiālā saraksta. Sadalīt platas lapas Apvērst dalītās lapas izvietojumu Rādīt saturu izgriezuma apgabalā @@ -299,7 +273,7 @@ Ik pēc 2 dienam Ik pēc 3 dienām Tikai uz Wi-Fi - Automātisks + Auto Turēt ekrānu ieslēgtu Centrs Rotācijas tips @@ -309,8 +283,6 @@ Pa kreisi Pa labi Normāls - 5% - 10% Pēdējā lasītā nodaļa Pirmspēdējā nodaļa Lejupielādē jaunās nodaļas @@ -323,22 +295,19 @@ B A Vienmēr rādīt nodaļu pāreju - 20% - 25% Jutīgums, lai ritinājumā paslēptu izvēlni Aizslēgts ainavas režīmā Zemākais Saglabāt kā CBZ arhīvu Nākamais L formas - 15% Pelēks Atspējots Balts - Nepārtraukta vertikāle - Nekāds + Garā strīpā ar pārtraukumu Sānu platums - Saglabāt lappuses atsevišķās mapēs + Izslēgtās kategorijas + Lokālais avots Iepriekšējais Noklusējuma lasīšanas režīms Kindle-ish @@ -346,8 +315,8 @@ Mala Pa labi un pa kreisi Pa labi - No kreisās puses uz labo - Webtoon + Lapaspuses (no kreisās puses uz labo) + Garā strīpā Skāriena zonas Izstiept Ietilpt platumā @@ -357,8 +326,8 @@ Portrets Aizslēgts portreta režīmā Lasīšanas režīms - No labās puses uz kreiso - Vertikāls + Lapaspuses (no labās puses uz kreiso) + Lapaspuses (vertikāli) Bibliotēkas ieraksti Ātrs Noklusējuma rotācijas tips @@ -373,8 +342,7 @@ Izlaist filtrētās nodaļas Navigācija Invertēt skaļuma regulēšanas taustiņus - Rādīt ar ilgu pieskārienu - Izveido mapes atbilstoši ieraksta nosaukumam + Rādīt darbīūbas ar ilgu pieskārienu Fona krāsa Mēroga tips Ietilpt ekrānā @@ -391,7 +359,6 @@ Izveidot dublējumu Dublējuma atrašanās vieta Nederīgs dublējuma fails - Automātiskā dublēšana Dublējumu biežums Kopijas vajadzētu glabāt arī citās vietās. Dažiem ražotājiem ir papildu lietojumprogrammu ierobežojumi, kas iznīcina fona pakalpojumus. Šajā vietnē ir vairāk informācijas par to, kā to izlabot. @@ -400,9 +367,8 @@ Akumulatora optimizācija jau ir atspējota Drukāt verbose žurnālus sistēmas žurnālā (samazina programmas veiktspēju) Izsekošanas rokasgrāmata - Saglabā avārijas žurnālu + Dalīties ar avārijas žurnālu Saglabā kļūdu žurnālus failā priekš koplietošanas ar izstrādātājiem - Globālajā meklēšanā izmantot tikai piespraustos avotus Atsvaidzināt bibliotēkas vākus Ieraksti izdzēsti Nav bibliotēkas ierakstu, ko dublēt @@ -420,6 +386,8 @@ Izvēlēties DNS pār HTTPS (DoH) Sīkfaili notīrīti Tīrīšanas laikā radās kļūda + Notīrīt datu bāzi + Dzēst vēsturi ierakstiem, kas nav saglabāti jūsu bibliotēkā Atiestatīt atsevišķu sēriju lasītāja iestatījumus Atiestatīt katras sērijas lasīšanas režīmu un orientāciju Planšetdatora lietotāja interfeiss @@ -436,7 +404,6 @@ Nevarēja atvērt ierīces iestatījumus Serviss Dublējums izveidots - Atsvaidzināt izsekošanu Visi lasītāja iestatījumi atiestatīti Nevarēja atiestatīt lasītāja iestatījumus Lai stātos spēkā, ir nepieciešama lietotnes restartēšana @@ -466,7 +433,6 @@ Lapaspušu skats Izrakstīties Piesprausts - Pārbaudīt tīmekļa vietni šeit: WebView Citi Tagad jūs esat izrakstījies Cilnes @@ -481,11 +447,6 @@ Lejupielādētās nodaļas Izslēgt inkognito režīmu Atjaunina kategoriju - - %1$s atlikušas - %1$s atlikusi - %1$s atlikušas - Piektā pirmspēdējā izlasītā nodaļa Globālā meklēšana… Neizdevās apiet Cloudflare @@ -512,17 +473,13 @@ Notīrīt vēsturi %1$s: %2$s, lapa %3$d Pievienots bibliotēkai + Pievienot bibliotēkai\? Avota nosaukums Vāks Aizturēts Nezināms statuss Publicēšana pabeigta Izsekošana - - %d izsekotāju - %d izsekotājs - %d izsekotāji - Neizdevās atjaunināt vāku Izlaists, jo sērija ir pabeigta Nevar atrast lapas %d faila ceļu @@ -544,11 +501,6 @@ Vai izmantot šo attēlu kā vāku\? Priekš šīs sērijas Pamests - - Priekš %d ierakstiem - Priekš %d ieraksta - Priekš %d ierakstiem - Izlaists, jo neviena nodaļa nav izlasīta Atlasiet vāka attēlu Atlasiet dublējuma failu @@ -580,7 +532,6 @@ Kļūda, saglabājot attēlu Vāks atjaunināts Nav instalēts - Bibliotēkas atjaunināšana... (%1$d/%2$d) Daudz atjauninājumi kaitē avotiem un var izraisīt lēnākus atjauninājumus un arī lielāku akumulatora lietojumu. Pieskarieties, lai uzzinātu vairāk. Avots nav instalēts: %1$s Pabeigto saraksts @@ -589,21 +540,11 @@ \n%1$s Kļūda saglabājot vāku Lasīšanas saraksts - - Izlaisti %d nodaļu, vai nu to nav avotā, vai arī tie ir izfiltrēti - Izlaists %d nodaļa, vai nu tā nav avotā, vai arī tā ir izfiltrēta - Izlaistas %d nodaļas, vai nu tās nav avotā, vai arī tās ir izfiltrētas - Nodaļas %1$s Atrastas jaunas nodaļas Nodaļa %1$s un vēl %2$d Nav atrasta failu atlases programma Lūdzu, pievienojiet ierakstu savai bibliotēkai, pirms to darāt - - %1$d jaunu nodaļu - %1$d jauna nodaļa - %1$d jaunas nodaļas - Nodaļa %1$s Sadalīšanas laikā netika atrasta lapa %d Izlaists, jo ir nelasītas nodaļas @@ -612,34 +553,19 @@ Lietotnes atjauninājumi Ir pieejama jauna versija! Atjaunināti noklusējuma nodaļu iestatījumi - Palielināt ainavas attēlu + Automātiski tuvināt ainavas attēlus Nākošā lapa - Pieskaroties izplest platus attēlus + Izplest platus attēlus Nevar atvērt pēdējo lasīto nodaļu Pārlasīšana Vai dzēst lejupielādētās nodaļas\? Datums Pārtraukumā - - %1$s nodaļu - %1$s nodaļa - %1$s nodaļas - - - Pieejami %d paplašinājumi atjaunināšanai - Pieejams %d paplašinājums atjaunināšanai - Pieejami %d paplašinājumi atjaunināšanai - Nodaļa %1$s Vāks saglabāts Vai esat pārliecināts\? Visa vēsture tiks pazaudēta. Nav atrasts avots Neviens instalēts avots nav atrasts - - Nodaļu %1$s - Nodaļa %1$s un vēl 1 - Nodaļa %1$s un vēl %2$d - Pieskarieties, lai instalētu atjauninājumu Pielāgots vāks Nepabeigto saraksts @@ -671,7 +597,6 @@ Nevarēja lejupielādēt nodaļas. Varat mēģināt vēlreiz lejupielādes sadaļā Darba sākšanas rokasgrāmata Jums vēl nav nevienas kategorijas. -Lejupieladēšanas rinda Nederīga lietotāja agent virkne Izlaist vienādas nodaļas Tādējādi no %s tiks noņemts iepriekš atlasītais beigu datums @@ -679,11 +604,10 @@ Lasīšanas režīmi, displejs, navigācija Avārijas žurnāli, akumulatora optimizācija Manuālā un automātiskā dublēšana - Sadalīt augstus attēlus (BETA) Paisuma vilnis Vairāku Lejupielādēt uz priekšu - Darbojas tikai ar ierakstiem bibliotēkā un tad, ja pašreizējā un nākamā nodaļa jau ir lejupielādēta + Darbojas tikai ja pašreizējā nodaļa + nākošā nodaļa ir jau lejupielādēta. Jūsu bibliotēkā ir ieraksts ar tādu pašu nosaukumu. \n \nVai joprojām vēlaties turpināt\? @@ -710,7 +634,6 @@ Atjaunināt kategoriju Atvērt nejaušu ierakstu Noņemt visu - Turpināt lasīt poga Automātiska lejupielāde lasīšanas laikā Pieejams, bet avots nav instalēts: %s Krātuves atļaujas nav piešķirtas @@ -720,33 +643,20 @@ Tādējādi no %s tiks noņemts iepriekš atlasītais sākuma datums Pārklājums Aplikācijas slēdzis, ekrāna aizsargāšana - Aplikācijas valoda, paziņojumi Kopēt starpliktuvē Automātiskā lejupielāde, lejupielādes rinda Vienvirziena progresa sinhronizācija, uzlabota sinhronizācija Avoti, paplašinājumi, globālā meklēšana Tēma, datuma un laika formāti - Kategorijas, globāli atjauninājumi - Rādīt nelasīto skaitu uz atjauninājumu ikonas + Kategorijas, globāli atjauninājumi, nodaļu vilkšana Logrīks nav pieejams, ja ir iespējota lietotņu bloķēšana RARv5 formāts netiek atbalstīts %dh InternalError: Par plašāku informāciju skatiet avārijas žurnālu Vai vēlaties dzēst kategoriju \"%s\"\? - - Trūkst %1$s nodaļu - Trūkst %1$s nodaļa - Trūkst %1$s nodaļas - - Iespējams, trūkst nodaļu - - Nākošā %d nodaļa - Nākošā %d nodaļa - Nākošās %d nodaļās - %1$s kļūda: %2$s Atjauninājums jau darbojas - %s radās neparedzēta kļūda. Mēs iesakām izveidot šo ziņojumu ekrānuzņēmumu, atrast avārijas žurnālu un pēc tam kopīgot to mūsu atbalsta kanālā Discord lietotnē. + %s radās neparedzēta kļūda. Mēs iesakām dalīties ar avārijas žurnālu mūsu atbalsta kanālā Discord lietotnē. Pagrieziet platas lapas, lai tās ietilptu Apvērst orientācija pagrieztām platām lapām Sadalīt augstus attēlus @@ -755,11 +665,6 @@ Kategorija ir tukša Skatiet savus nesen atjauninātos bibliotēkas ierakstus Jūs gatavojaties noņemt \"%s\" no savas bibliotēkas - - Nākamā nelasītā nodaļa - Nākamā nelasītā nodaļa - Nākamās %d nelasītas nodaļas - Ne tagad Meklē… F-Droid versijas netiek oficiāli atbalstītas. @@ -769,7 +674,6 @@ Šajā kategorijā nav atrasts neviens ieraksts Noklusējuma lietotāja agent virkne Atiestatīt noklusējuma lietotāja agent virkni - Piespiediet lietotni atkārtoti pārbaudīt lejupielādētās nodaļas Ak nē! Restartējiet lietotni Pabeigtie ieraksti @@ -778,4 +682,43 @@ Globālajā atjauninājumā Kopā *obligāti - \ No newline at end of file + Nevarēja izveidot dublējuma failu + Lejupielādes indeks ir nederīgs + Licencēts - Nav nevienu nodaļu ko parādīt + Izlaists, jo šodien nebija gaidīta jauna nodaļa + Vilkt uz labās puses darbību + Atkļūdošanas informācija + Pieskarieties šeit, lai iegūtu palīdzību ar Cloudflare + Ir rezultāti + Noņemt arī no %s + Vilkt uz kreisās puses darbību + Novērtēt katru + Iestatīt intervālu + Pielāgots datu iegūšanas intervāls + Iegūt katru mēnesi (28 dienas) + Nokārtots pārbaudes periods + Nākamais gaidāmais atjauninājums + Pieteikšanās izsekošana + Sinhronizē bibliotēku + Bibliotēkas sinhronizācija ir pabeigta + Intervāli + Šis noņems locālo izsekošanu. + Izdzēst lejupielādētos + Vai noņemt %s izsekošanu\? + OK + Ārpus paredzamā izlaišanas perioda + Dubult-pieskarieties, lai tuvinātu + %d katrā rindā + Atbloķēt %s + Par vēlu +10 pārbaudes + Pametāt\? Par vēlu +20 un 2 mēnešus + Vilkt nodaļas + Atjaunināt katru + Pielāgot intervālu + HTTP %d, pārbaudiet vietni iekš WebView + Nav interneta savienojuma + Nevarēja sasniegt %s + Kārtot kategorijas + Izsekošanas rezultāts + Dati un uzglabāšana + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/mr/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/mr/plurals-aniyomi.xml new file mode 100644 index 0000000000..a93694f837 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/mr/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/mr/plurals.xml b/i18n/src/commonMain/resources/MR/mr/plurals.xml new file mode 100644 index 0000000000..92dab4cd2c --- /dev/null +++ b/i18n/src/commonMain/resources/MR/mr/plurals.xml @@ -0,0 +1,11 @@ + + + + %d श्रेणी + %d श्रेण्या + + + 1 मिनीटानंतर + %1$s मिनीटांनंतर + + \ No newline at end of file diff --git a/i18n/src/main/res/values-mr/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/mr/strings-aniyomi.xml similarity index 51% rename from i18n/src/main/res/values-mr/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/mr/strings-aniyomi.xml index cf91748682..6d3e2ef021 100644 --- a/i18n/src/main/res/values-mr/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/mr/strings-aniyomi.xml @@ -8,32 +8,4 @@ \nअसे अविश्वासू एक्सटेन्शन आपले लॉगिन बाबत माहिती चोरू शकते. \n \nव अश्या एक्सटेन्शन वर विश्वास करून तुम्ही ह्या सगद्या जोखीम घेत आहेत. - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-mr/strings.xml b/i18n/src/commonMain/resources/MR/mr/strings.xml similarity index 93% rename from i18n/src/main/res/values-mr/strings.xml rename to i18n/src/commonMain/resources/MR/mr/strings.xml index 823e2ef3c1..a4e36a1363 100644 --- a/i18n/src/main/res/values-mr/strings.xml +++ b/i18n/src/commonMain/resources/MR/mr/strings.xml @@ -27,9 +27,9 @@ सामान्य मेनू बुकमार्क आहे - अॅप बंद करण्यासाठी बॅक पुन्हा दाबा ट्रॅकिंग - मांगा + लायब्ररी इंत्रिज + श्रेण्या तुम्ही श्रेण्या बनविल्या नाही आहेत, प्लस वर दाबून तुम्ही श्रेणी बनवू शकता. तुमची संग्रहालय खाली आहे अलीकडे काहीही वाचले नाही @@ -41,6 +41,7 @@ स्त्रोत अपडेट्स संग्रहालय + डाऊनलोड रांग पुनर्संचयित करा लॉग उघडा पूर्ववत करा @@ -52,7 +53,6 @@ वर हलवा सगळ्यात जुने सगळ्यात नवे - पुन्हा क्रमवारी लावा क्रमवारी लावा सगळे रद्द करा रद्द करा @@ -86,22 +86,13 @@ व्यस्त निवडा जागतिक शोध अ‍ॅप्स स्विच करताना अॅप मधील सामग्री लपवा व स्क्रीनशॉट अवरोधित करा - - %d श्रेणी - %d श्रेण्या - स्क्रीन सुरक्षित करा - - 1 मिनीटानंतर - %1$s मिनीटांनंतर - कधीही नाही नेहमी निष्क्रिय झाल्यावर लॉक करा बिॉमेट्रिकस सह लॉक करा सुरक्षा सुचनेचे व्यवस्थापन - बाहेर पडायसाठी पुन्हा पुष्टी करा तारिकेचा स्वरूप तंत्राचे अनुसरण करा डार्क @@ -140,6 +131,7 @@ प्रलंबित अध्यातणे सगडे नेहमी विचारायचे + मूलभूत श्रेणी फक्त चालू असलेल्याच मांगा आधीतणीत करायचे चार्ज होत आहे लायब्ररी अद्ययावत प्रतिबंधी @@ -211,5 +203,15 @@ नेटवर्क केवळ डाउनलोड केलेले थीम -डाऊनलोड रांग - \ No newline at end of file + चालु केले + लोकल + डाऊनलोड झाले + चालु + बदलांची पुष्टी करण्यासाठी प्रमाणीकरण करा + चेतावणी + बंद + मध्यांतर + ट्रॅक केले + मासिक फेच (२८ दिवस) + कस्टमाईज्ड फेच इंटरवल + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ms/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/ms/plurals-aniyomi.xml new file mode 100644 index 0000000000..e86b2f3374 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/ms/plurals-aniyomi.xml @@ -0,0 +1,2 @@ + + \ 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 new file mode 100644 index 0000000000..ea46560d96 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/ms/plurals.xml @@ -0,0 +1,51 @@ + + + + Selepas %1$s minit + + + %1$d bab baharu + + + Bab %1$s dan %2$d lagi + + + Untuk entri %d + + + %d kemas kini sambungan tersedia + + + %1$s baki + + + %d kategori + + + Selesai dalam %1$s dengan %2$s ralat + + + Jumlah bab: %1$s + + + %d penjejak + + + Melangkau %d bab, sama ada sumber tidak mempunyai bab tersebut, atau ia ditapis keluar + + + %1$d hari lalu + + + %d bab tidak dibaca seterusnya + + + %d bab seterusnya + + + Hilang %1$s bab + + + %d hari + + \ No newline at end of file diff --git a/i18n/src/main/res/values-ms/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/ms/strings-aniyomi.xml similarity index 100% rename from i18n/src/main/res/values-ms/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/ms/strings-aniyomi.xml diff --git a/i18n/src/main/res/values-ms/strings.xml b/i18n/src/commonMain/resources/MR/ms/strings.xml similarity index 87% rename from i18n/src/main/res/values-ms/strings.xml rename to i18n/src/commonMain/resources/MR/ms/strings.xml index 24994deb48..ff50a309e0 100644 --- a/i18n/src/main/res/values-ms/strings.xml +++ b/i18n/src/commonMain/resources/MR/ms/strings.xml @@ -1,18 +1,19 @@ Nama - Manga + Kategori + Entri pustaka Bab-bab Penjejakan Sejarah Tetapan + Giliran muat turun Pustaka Sejarah Kemas kini Sandaran dan memulih Tetapan Tapis - Telah dimuat turun Ditanda Belum dibaca Kosongkan tapisan @@ -79,6 +80,7 @@ Sekatan kemas kini automatik peranti Ketika mengecas Dengan status \"Sudah selesai\" + Kategori lalai Sentiasa tanya Skrin penuh Menggerakkan peralihan muka surat @@ -133,7 +135,6 @@ Pulihkan sandaran Pulihkan pustaka daripada fail sandaran Lokasi sandaran - Sandaran automatik Kekerapan sandaran Sandaran maksimum Sandaran dicipta @@ -146,8 +147,9 @@ Ralat berlaku ketika menghapus Hapus cookies Cookies dihapuskan + Hapus pangkalan data + Hapus sejarah entri yang tidak disimpan di dalam pustaka Entri dihapuskan - Segar semula penjejakan Versi Hantar laporan ranap Bantu membaiki aplikasi. Tiada data sensitif dihantar @@ -158,7 +160,6 @@ Log masuk berjaya Ralat tidak diketahui mengemaskinikan kategori - Setempat Tiada lagi hasil Sumber setempat Lain @@ -172,6 +173,8 @@ Padam bab-bab yang dimuat turun? Bab %1$s Memuat turun (%1$d/%2$d) + Ralat + Ditangguh Tajuk sumber Nombor bab Mengikut sumber @@ -191,6 +194,7 @@ Kategori dengan nama ini sudah wujud! Kategori dipadam Tarikh bacaan bab ini akan dipadam. Adakah anda pasti? + Tambah ke pustaka\? Bab dimuat turun Gambar disimpan Tapisan tersuai @@ -208,7 +212,6 @@ Pilih fail sandaran Muat turun Tiada versi baharu tersedia - Mencari versi baharu… Memuat turun… Ketik untuk memasang kemas kini Ralat muat turun @@ -222,6 +225,7 @@ Ralat tidak diketahui ketika memuat turun bab Tiada sambungan Wi-Fi yang tersedia Tiada sambungan rangkaian tersedia + Muat turun dihentikan sebentar Biasa Pindah sumber Sambungan @@ -240,7 +244,7 @@ Kelajuan animasi ketik dua kali 32-bit warna Langkau bab yang sudah dibaca - Tunjuk dialog bila menahan ketik + Tunjuk tindakan bila menahan ketik Muka surat Tiada animasi Biasa @@ -252,7 +256,6 @@ Sumber tidak dipasang: %1$s Membaca semula Status - Bermula Jenis Selesai: Sekarang: @@ -301,25 +304,17 @@ Kunci apabila terbiar Selalu Tidak - - Selepas %1$s minit - Skrin keselamatan Kemas kini baharu Tunjuk kandungan dalam kawasan bertakuk Gagal untuk memintas Cloudflare Sila kemas kini aplikasi WebView untuk keserasian yang lebih baik + Pengemaskinian bab Skrin keselamatan menyembunyikan kandungan aplikasi apabila menukar aplikasi dan sekat tangkapan skrin Paparan - - %1$d bab baharu - Bab %1$s Bab %1$s dan %2$d lagi Bab %1$s - - Bab %1$s dan %2$d lagi - Sembunyikan kandungan pemberitahuan Mencari bab baharu Nyahdaya pengoptimuman bateri @@ -327,20 +322,12 @@ Pengoptimuman bateri sudah dinyahdayakan Alamat e-mel Sentiasa tunjuk peralihan bab - - Untuk %d tajuk - Menu - Susun semula Terbaru Terlama Naik ke atas Turun ke bawah - - %d kemas kini sambungan tersedia - Kemas kini sambungan - Semak laman web dalam WebView Mengemas kini pustaka Membaca Sebaris panjang dengan sela @@ -348,7 +335,6 @@ Pilih songsang Sumber Tambahan sisi - 10% Bab %1$s - %2$s Tambah penjejakan Tutup @@ -363,43 +349,27 @@ Pemulihan sedang dijalankan Sandaran gagal Sandaran sedang dijalankan - 25% - 20% - 15% - Tiada - Sahkan keluar Buang sematkan Sematkan - Tekan kembali sekali lagi untuk keluar Dimuat turun sahaja Terakhir digunakan Semak untuk kemas kini Panduan penggunaan sumber setempat %02d minit, %02d saat Tapis semua entri di dalam pustaka anda - - %1$s baki - - Hanya cari sumber yang disematkan di dalam carian keseluruhan Kelabu Mod membaca Untuk siri ini Kurangkan jalinan, tapi memberi kesan kepada prestasi - - %d kategori - Tetapan peranti tidak dapat dibuka - - Selesai dalam %1$s dengan %2$s ralat - - Sinkron 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 penjejakan. 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 - Sambungan ini bukan daripada senarai sambungan Tachiyomi yang rasmi. + Sambungan ini bukan daripada senarai yang rasmi. Tidak rasmi Semak muka hadapan dan tentang baharu bila mengemaskini pustaka Segar semula metadata secara automatik @@ -414,9 +384,6 @@ Tunjuk mod membaca Sumber tidak dijumpai Mula - - Jumlah bab: %1$s - Matikan Mulakan semula aplikasi diperlukan untuk berkesan Rangkaian @@ -433,11 +400,7 @@ Cari untuk \"%1$s\" menggunakan carian keseluruhan Mod membaca Tema - - %d penjejak - Tiada sumber yang disematkan - Muat turun selesai Kemajuan Selesai Ralat @@ -445,9 +408,6 @@ Sumber daripada sambungan ini mungkin mengandungi kandungan 18+ tahun keatas 18+ Ini tidak menghalang sambungan yang tidak rasmi atau berpotensi tidak menggunakan tetapan yang betul daripada menayangkan kandungan 18+ tahun keatas dalam aplikasi. - - Melangkau %d bab, sama ada sumber tidak mempunyai bab tersebut, atau ia ditapis keluar - Tiada bab dijumpai Tetapan bab lalai dikemas kini Tetapkan sebagai lalai @@ -499,6 +459,7 @@ Kecuali: %s Hanya: %s Tiada + Entri di dalam kategori berkecuali tidak akan dikemas kini walaupun ianya ada di dalam kategori hanya. Entri di dalam kategori berkecuali tidak akan dimuat turun walaupun ianya ada di dalam kategori hanya. Muat turun automatik Ketik untuk lihat butiran @@ -507,12 +468,10 @@ Landskap Potret Tindakan - Mencipta folder mengikut tajuk entri - Simpan muka surat ke folder berasingan Jenis putaran skrin Skala kelabu Nyahdaya mod inkognito - Automatik + Auto Batalkan semua untuk siri ini Tiada padanan dijumpai Sumber tidak disokong @@ -521,16 +480,15 @@ Susun mengikut Format bab tidak sah Bab tidak dijumpai - Kemas kini penjejak ketika mengemaskini pustaka - Segar semula penjejak secara automatik Sekatan: %s + Sumber setempat Mati Hidup Ralat berkongsi muka hadapan Ralat menyimpan muka hadapan Muka hadapan disimpan Muka hadapan - Tetapan setiap kategori untuk susunan dan paparan + Tetapan setiap kategori untuk susunan Panduan penjejakan Anda belum mempunyai kategori. Mula memuat turun sekarang @@ -543,8 +501,6 @@ Dinamik Tema aplikasi Perkidmatan yang menyediakan fungsi yang dipertingkatkan untuk sumber tertentu. Entri akan dijejaki secara automatik apabila ditambahkan ke pustaka. - Mengemaskini pustaka… (%1$d/%2$d) - Penjejak ini cuma boleh digunakan dengan sumber Komga. 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 @@ -555,23 +511,16 @@ Tertinggi Sensitiviti menyembunyikan menu apabila skrol Aktiviti latar belakang - Baru-baru ini Songsang - Panjang (Pendek+, n hari yang lalu) - Pendek (Hari ini, Semalam) - Cap masa relatif - - %1$d hari lalu - Hari ini Teal & Turquoise Sahkan untuk mengesahkan perubahan Lalai Tampilan - Cap Masa Jejak Panduan penggunaan UI tablet + Kategori dikecualikan Bantu menterjemah Maklumat aplikasi Legasi @@ -594,21 +543,19 @@ %1$d entri bukan pustaka dalam pangkalan data Gagal mendapatkan senarai sambungan Dasar privasi - Langkau mengemas kini tajuk + Langkau mengemas kini entri Untuk bantuan cara menyelesaikan ralat kemas kini pustaka, lihat %1$s Simpan sebagai arkib CBZ Dibatalkan Penerbitan selesai Dalam hiatus Soalan Lazim dan Panduan - 5% - Mula Cuma grid muka hadapan Dilangkau kerana siri sudah lengkap Yang mana bacaan belum dimulakan Dilangkau kerana ada bab yang belum dibaca Dilangkau kerana tiada bab yang dibaca - Zum imej landskap + Zum secara automatik pada imej lebar Panorama imej lebar %1$d kemas kini gagal %1$d kemas kini dilangkau @@ -624,12 +571,9 @@ Hapus data WebView Data WebView dihapuskan Tutup - Ulang sumber yang disematkan dalam kumpulan bahasa masing-masing - Apabila bateri tidak lemah - Tunjuk pendua sumber yang disematkan Tiada sumber dipasang ditemui Tiada sumber ditemui - Kiraan belum dibaca + Bilangan belum dibaca Meningkatkan prestasi pembaca Muka surat %d tidak dijumpai ketika memisah Lokasi fail muka surat %d tidak ditemui @@ -660,36 +604,31 @@ Set semula untaian ejen pengguna lalai Buang semuanya Format RARv5 tidak disokong - Widget tidak tersedia apabila kekunci apl digunakan + Widget tidak tersedia apabila kekunci aplikasi digunakan Lihat kemas kini entri pustaka terkini anda Kemas kini sedang berjalan Untaian ejen pengguna tidak boleh kosong Muat turun automatik semasa membaca Tidal Wave Muat turun maju - Hanya berguna pada kemasukan dalam pustaka dan sekiranya bab sekarang dan seterusnya telah dimuat turun - - %d bab tidak dibaca seterusnya - + Hanya berguna sekiranya bab sekarang + seterusnya telah dimuat turun. Adakah anda pasti\? Pelbagai Terakhir pustaka dikemas kini: %s Anda akan membuang \"%s\" ini daripada pustaka anda - Pisah imej panjang (BETA) Popular Kebenaran storan tidak diberikan Dilangkau kerana siri tidak memerlukan kemas kini Cari… - Bahasa aplikasi, notifikasi Tema, tarikh & format masa Kategori, Kemas kini keseluruhan, leret bab Mod membaca, paparan, navigasi Muat turun automatik, muat turun maju - Sinkron kemajuan satu hala, pertingkat sinkron + Menyelaras kemajuan satu hala, pertingkat menyelaras Manual & sandaran automatik Kumpulan log kerosakan, pengoptimuman bateri Kekunci aplikasi, skrin keselamatan - Ralat Tidak Dijangka Berlaku + Aduhai! Mulakan semula aplikasi Sumber, sambungan, carian keseluruhan %s mengalami ralat tidak dijangka. Kami mencadangkan anda untuk kongsi log kerosakan pada Discord kami di saluran bantuan. @@ -699,10 +638,35 @@ Sebentar tadi Buka entri rawak Tiada entri dijumpai di kategori ini - Mengindeks muat turun + Menyemak muat turun Binaan F-Droid tidak disokong secara rasmi. \nKetik untuk mengetahui lebih lanjut. -Giliran muat turun + Membatalkan indeks muat turun + Buang tarikh\? + Ini akan membuang tarikh mula yang dipilih oleh anda sebelum ini dari %s + Ini akan membuang tarikh selesai yang dipilih oleh anda sebelum ini dari %s + lokal + Dimuat turun + Dalam kemas kini keseluruhan + Jumlah + Dibaca + Entri dijejaki + Skor purata + Digunakan + Statistik + Dimulakan + Keseluruhan + Jangka bacaan + Entri + Penjejak + Entri yang sudah selesai + N/A + %dh + %dj + %dm + %ds + Bukan sekarang + Kategori kosong Langkau bab pendua Tersedia tetapi sumber tidak dipasang: %s Disalin ke papan keratan @@ -711,17 +675,11 @@ \n \nAdakah anda ingin meneruskan\? *diperlukan - - %d bab seterusnya - Sembunyikan entri yang sudah ada di dalam pustaka Salin ke papan keratan Kemas kini kategori Memisah imej yang tinggi Tindanan - - Hilang %1$s bab - Terbalikkan orientasi muka surat lebar yang diputarkan Putar muka surat lebar agar muat Maklumat nyahpepijat @@ -730,4 +688,34 @@ Leret bab Ketik dua kali untuk zum Tindakan leret ke kiri - \ No newline at end of file + Tetapkan jarak masa + Jarak masa diambil tersuai + Ambil bulanan (28 hari) + Lewat semak 10+ + Diabaikan\? Lewat 20+ dan 2 bulan + Kemas kini seterusnya dijangka + Tetapkan untuk kemas kini setiap + Dilangkau kerana tiada keluaran yang dijangkakan hari ini + Jarak masa + Tersuai jarak masa + Diluar jangkaan masa keluaran + Anggaran setiap + Melepasi tempoh semak + Buang penjejakan %s\? + Ini akan membuang penjejakan secara lokal. + OK + Juga buang daripada %s + Padam dimuat turun + Mempunyai hasil + Tidak boleh menghasilkan fail sandaran + Berlesen - Tiada bab untuk ditayangkan + Tidak dapat mencapai %s + Menyelaraskan pustaka + Pustaka selesai diselaraskan + Tiada sambungan Internet + Log masuk penjejakan + Indeks muat turun tidak sah + Ketik di sini untuk bantuan berkenaan Cloudflare + HTTP %d, semak laman web dalam WebView + Buka kunci %s + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/nb-rNO/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/nb-rNO/plurals-aniyomi.xml new file mode 100644 index 0000000000..290adee049 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/nb-rNO/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/nb-rNO/plurals.xml b/i18n/src/commonMain/resources/MR/nb-rNO/plurals.xml new file mode 100644 index 0000000000..26ad5c366f --- /dev/null +++ b/i18n/src/commonMain/resources/MR/nb-rNO/plurals.xml @@ -0,0 +1,67 @@ + + + + Etter %1$s minutt + Etter %1$s minutter + + + %d kategori + %d kateogrier + + + %1$d nytt kapittel + %1$d nye kapitler + + + For %d oppføring + For %d oppføringer + + + %1$s kapittel + %1$s kapitler + + + %1$s gjenstående + %1$s gjenstående + + + Gjort på %1$s med %2$s feil + Gjort på %1$s med %2$s feil + + + %d tracker + %d trackere + + + Hopper over %d kapittel, enten så mangler kilden den eller så har den blitt filtrert ut + Hopper over %d kapitler, enten så mangler kilden de eller så har de blitt filtrert ut + + + Utvidelsesoppdatering tilgjengelig + %d utvidelsesoppdateringer tilgjengelige + + + Kapittel %1$s og 1 til + Kapitler %1$s og %2$d til + + + I går + %1$d dager siden + + + Neste uleste kapittel + Neste %d uleste kapitler + + + Neste kapittel + Neste %d kapitler + + + Mangler %1$s kapittel + Mangler %1$s kapitler + + + %d dag + %d dager + + \ No newline at end of file diff --git a/i18n/src/main/res/values-nb-rNO/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/nb-rNO/strings-aniyomi.xml similarity index 79% rename from i18n/src/main/res/values-nb-rNO/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/nb-rNO/strings-aniyomi.xml index 24200f14f8..7b1a4701b7 100644 --- a/i18n/src/main/res/values-nb-rNO/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/nb-rNO/strings-aniyomi.xml @@ -38,32 +38,4 @@ Tachiyomi krever WebView Nedlasting pauset Kapitteloppdateringer - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-nb-rNO/strings.xml b/i18n/src/commonMain/resources/MR/nb-rNO/strings.xml similarity index 85% rename from i18n/src/main/res/values-nb-rNO/strings.xml rename to i18n/src/commonMain/resources/MR/nb-rNO/strings.xml index 7977c74c35..19486a4cc1 100644 --- a/i18n/src/main/res/values-nb-rNO/strings.xml +++ b/i18n/src/commonMain/resources/MR/nb-rNO/strings.xml @@ -1,10 +1,12 @@ Navn - Manga + Kategorier + Bibliotekoppføringer Kapitler Historikk Innstillinger + Nedlastingskø Bibliotek Historikk Oppdateringer @@ -14,7 +16,6 @@ Utvidelsesinfo Innstillinger Filter - Nedlastet Bokmerket Ulest Fjern filter @@ -73,6 +74,7 @@ Ukentlig Alle Lading + Standard kategori Alltid spør Oppdater Installer @@ -102,10 +104,10 @@ Beskjær kanter Egendefinert lysstyrke Egendefinert fargefilter - Hopp over kapitler markert som leste + Hopp over kapitler markert som lest Lydstyrkejusteringstaster Inverter lydstyrketaster - Vis ved langt trykk + Vis handlinger ved langt trykk Bakgrunnsfarge Hvit Svart @@ -129,7 +131,7 @@ Ingen animasjon Normal Rask - Standard rotasjonstype + Standard rotasjon Fri Låst stående Låst liggende @@ -146,13 +148,12 @@ Fjerde sist leste kapittel Femte sist leste kapittel Last ned nye kapitler - Tjenester + Sporere Opprett sikkerhetskopi Kan brukes til å gjenopprette nåværende bibliotek Gjenopprett sikkerhetskopi Gjenopprett bibliotek fra sikkerhetskopifil Sikkerhetskopi-mappe - Automatisk sikkerhetskopi Sikkerhetskopieringsfrekvens Maks antall sikkerhetskopier Sikkerhetskopi opprettet @@ -165,8 +166,9 @@ Feil oppstod under opprensing Tøm informasjonskapsler Informasjonskapsler slettet + Tøm database + Slett historikk for oppføringer som ikke er lagret i biblioteket ditt Oppføringer slettet - Oppdater sporing Versjon Send krasjrapporter Hjelper til med fiksing av feil. Ingen sensitiv data vil bli sendt @@ -177,7 +179,6 @@ Innlogget Ukjent feil Oppdaterer kategori - Lokal Ingen flere resultater Lokal kilde Andre @@ -196,6 +197,8 @@ Kilde ikke installert: %1$s Kapittel %1$s Laster ned (%1$d/%2$d) + Feil + Pauset Kildetittel Kapittelnummer Etter kilde @@ -214,11 +217,11 @@ Tittel Status Status - Startet Type En kategori ved dette navnet finnes allerede! Kategorier slettet Lesningsdato for dette kapittelet vil bli fjernet. Er du sikker\? + Legg til i bibliotek\? Bilde lagret Egendefinert filter Sett som omslag @@ -253,7 +256,6 @@ Velg omslagsbilde Velg sikkerhetskopifil Ingen nye oppdateringer tilgjengelige - Ser etter oppdateringer… Laster ned… Trykk for å installere oppdatering Feil ved nedlasting @@ -268,6 +270,7 @@ Kunne ikke laste ned kapittel grunnet uventet feil Ingen trådløstilkobling tilgjengelig Ingen nettverkstilkobling tilgjengelig + Nedlastinger pauset Blandingsmodus for fargefilter Overlegg Multiplisere @@ -300,19 +303,12 @@ Lås ved lediggang Alltid Aldri - - Etter %1$s minutt - Etter %1$s minutter - Sikker skjerm + Kapitteloppdateringer Kapittel %1$s E-postadresse I biblioteket Legg til i bibliotek - 25% - 20% - 15% - 10% Flytt til bunnen Flytt til toppen Eldste @@ -329,16 +325,12 @@ Festet Nettside Sikkerhetskopiering mislyktes - Ingen Leser Alltid vis kapittelovergang Lang stripe med mellomrom - Hopp over filtrerte kapittel + Hopp over filtrerte kapitler Skjul merknadsinnhold Sikker skjerm skjuler programinnhold ved bytting av programmer og blokker skjermavbildninger - Bekreft avslutning - Sorter etter - Trykk \"Tilbake\" igjen for å avslutte Kun nedlastet Uoffisiell Lesemodus @@ -351,10 +343,6 @@ %02d min, %02d sek Manglende kilder: Grå - - %d kategori - %d kateogrier - Vis kategorifaner Komfortabelt rutenett Flytt @@ -363,29 +351,12 @@ Loddrett vannrett Ingen - - %1$d nytt kapittel - %1$d nye kapitler - - - For %d oppføring - For %d oppføringer - Søker etter nye kapitler Kilden ikke funnet For denne serien - - %1$s kapittel - %1$s kapitler - Ukjent status Ukjent forfatter Lokal kildeguide - Sjekk nettsted i WebView - - %1$s gjenstående - %1$s gjenstående - Filtrerer alle oppføringer i biblioteket ditt Se etter oppdateringer Kunne ikke åpne enhetens innstillinger @@ -396,13 +367,8 @@ Nettverk Avbrutt gjenoppretting Gjenoppretting allerede underveis - - Gjort på %1$s med %2$s feil - Gjort på %1$s med %2$s feil - - Søk kun festede kilder i globalt søk Vis lesemodus - Denne utvidelsen kommer ikke fra den offisielle Tachiyomi-utvidelseslisten. + Denne utvidelsen kommer ikke fra den offisielle listen. deaktivere deaktiver alle aktiver alle @@ -425,7 +391,6 @@ Kapittel %1$s og %2$d til Du har ingen festede kilder Framdrift - Nedlastet Kan inneholde innhold for 18+ 18+ Dette forhindrer ikke uoffisielle eller potensielt feilaktig kategoriserte tillegg fra å vise innhold for 18+ i appen. @@ -434,26 +399,10 @@ Kapittelinnstillinger Sett som standard Fant ingen kapitler - - %d tracker - %d trackere - - - Hopper over %d kapittel, enten så mangler kilden den eller så har den blitt filtrert ut - Hopper over %d kapitler, enten så mangler kilden de eller så har de blitt filtrert ut - Oppdater WebView-programmet for bedre kompabilitet Oppdaterte standard kapittelinnstillinger Er du sikker på at du vil lagre disse innstillingene som standard\? Søkeinnstillinger - - Utvidelsesoppdatering tilgjengelig - %d utvidelsesoppdateringer tilgjengelige - - - Kapittel %1$s og 1 til - Kapitler %1$s og %2$d til - Kapitler %1$s Søk etter \"%1$s\" globalt Oppdatert til v%1$s @@ -463,7 +412,7 @@ Gjenoppfrisk mangaomslag i biblioteket Sporingstjenester ikke logget inn i: Sikkerhetskopi inneholder ingen bibliotekoppføringer. - Enveissynkronisering for å oppdatere kapittelfremdrift i sporingstjenester. Sett opp sporing for individuelle oppføringer med sporingsknappen. + Enveissynkronisering for å oppdatere kapittelfremdrift i eksterne sporetjenester. Sett opp sporing for individuelle oppføringer med sporingsknappen. Reduserer sjattering, men koster ytelse Sidepolstring Neste side @@ -512,24 +461,17 @@ Dato hentet Oppføringer i utelukkede kategorier vil ikke bli nedlastet selv om de også er i inkluderte kategorier. Last ned automatisk + Oppførninger i utelukkede kategorier vil ikke bli oppdatert selv om de også er i inkluderte kategorier. Trykk for å se detaljer Kunne ikke kopiere til utklippstavlen Denne Android-versjonen støttes ikke lenger Liggende Stående - Rotasjonstype - Oppretter mapper i henhold til oppføringenes tittel - Lagre sider i egne mapper + Rotasjon Handlinger - Oppdater trackere automatisk - Lang (kort+, n dager siden) - Kort (i dag, i går) - Relative tidsstempler - Tidsstempler Helt svart Oppstartsveiledning Du har ingen kategorier enda. - Oppdaterer bibliotek … (%1$d/%2$d) Kilde støttes ikke Ulest Klarte ikke å dele omslag @@ -542,8 +484,9 @@ Fant ikke kapittelet Bakgrunnsaktivitet Spor - Forbedrede tjenester + Forbedret sporere Sporingsveiledning + Utelukkede kategorier Laveste Lav Høy @@ -554,12 +497,7 @@ Av Begrensninger: %s - - I går - %1$d dager siden - I dag - Nylig Dynamisk Programdrakt Utseende @@ -569,21 +507,20 @@ Standard Noen produsenter har ytterligere appbegrensninger som dreper bakgrunnstjenester. Denne nettsiden har mer info om hvordan det kan fikses. Sikkerhetskopier/gjenoppretting kan krangle hvis MIUI-optimalisering er avskrudd. - Tjenester som gir forbedredet funksjoner for spesifikke kilder. Det holdes automatisk øye med oppføringer når de legges til i biblioteket ditt. + Gir forbedredet funksjoner for spesifikke kilder. Det holdes automatisk øye med oppføringer når de legges til i biblioteket ditt. Nettbrettsgrensesnitt Følsomhet for å skjule menyen når du ruller - Innstillinger per kategori for sortering og visning + Innstillinger per kategori for sortering Yin og yang Blågrønn og turkis Tako Jordbær-Daiquiri Midnattsskumring Grønt eple + Lokal kilde Ingen treff funnet - Denne trackeren er kun kompatibel med Komga-kilder. Skru av inkognito-modus Bistå oversettelsen - Oppdater trackere ved oppdatering av bibliotek Yotsuba Installer og start Shizuku for å bruke det som utvidelsesinstallatør. Shizuku kjører ikke @@ -597,13 +534,12 @@ Skriv utfyllende logg til systemloggen (reduserer programytelse) Advarsel Store oppdateringer skader kilder og kan føre til tregere oppdateringer samt økt batteribruk. Trykk for å lære mer. - Du bør oppbevare ekstra kopier av sikkershetskopier andre steder også. + Du bør oppbevare ekstra kopier av sikkershetskopier andre steder også. Sikkerhetskopier kan inneholde sensitiv data, inkludert eventuelle lagrede passord. Vær forsiktig ved deling. Appoppdateringer Hver 3. dag Bare på Wi-Fi Personvernerklæring Ferdig publisert - 5% Kansellert På pause Lagre som CBZ-arkiv @@ -614,10 +550,9 @@ Hoppet over fordi det er uleste kapitler Hoppet over fordi serien er fullført For hjelp til å fikse bibliotekoppdateringsfeil, se %1$s - Startet Kun omslags-rutenett Som ikke er påbegynt - Zoom landskapsbilde + Zoom automatisk inn for brede bilder Panorer brede bilder %1$d ikke-bibliotek oppføringer i databasen Flytt serien til toppen @@ -634,11 +569,8 @@ Feil ved lagring av bilde Åpne på GitHub Lukk - Vis dupliserte festede kilder - Gjenta festede kilder i sine respektive språkgrupper Slett WebView data WebView data slettet - Batteri er ikke lavt Vel, dette er pinlig Enveis fremdriftssynkronisering, forbedret synkronisering Kilder, utvidelser, globalt søk @@ -646,11 +578,10 @@ Lavendel Bare på nettverk uten datamåling Språk - Del høye bilder (BETA) Alle leserinnstillinger tilbakestilt Ukjent tittel Ugyldig plassering: %s - Fungerer kun på oppføringer i biblioteket, og hvis det nåværende kapittelet samt det neste allerede er lastet ned + Fungerer kun hvis det nåværende kapittelet + det neste allerede er lastet ned. Start applikasjonen på nytt Kunne ikke finne filbanen til side %d Applås, sikker skjerm @@ -678,15 +609,11 @@ Last ned automatisk mens du leser Forbedrer leserytelsen Tilbakestiller lesemodus og orientering for alle serier - - Neste uleste kapittel - Neste %d uleste kapitler - Antall uleste Ønsker du å slette kategorien \"%s\"\? Slett kategori InternalError: Sjekk krasjlogger for mer informasjon - En uventet feil oppstod + Oops! %s fikk en uventet feil. Vi foreslår at du deler krasjloggene i vår støttekanal på Discord. Appspråk Ingen beskrivelse @@ -698,9 +625,8 @@ Se de nylig oppdaterte biblotekoppføringene dine Moduler er ikke tilgjengelig når applås er aktivert Standard streng for brukeragent - Appspråk, varslinger Tema, dato- og klokkeslettformat - Kategorier, global oppdatering + Kategorier, global oppdatering, kapittelsveip Automatisk nedlasting, last ned i forkant Lesemodus, skjerm, navigasjon En oppdatering kjører allerede @@ -710,12 +636,38 @@ Ingen installert kilde funnet Ikke installert Akkurat nå - Indeksering av nedlastinger + Sjekker nedlastinger F-Droid-bygg er ikke offisielt støttet. \nTrykk for å finne ut mer. Fant ingen oppføringer i denne kategorien Åpne tilfeldig oppføring -Nedlastingskø + Fjerne dato\? + Dette vil fjerne den tidligere valgte startdatoen fra %s + Dette vil fjerne den tidligere valgte sluttdatoen fra %s + Rydd ut nedlastingsindeksen + Startet + Fullførte oppføringer + Oppføringer + Brukt + %dd + %dt + %dm + %ds + Statistikk + Totalt + Nedlastet + Oversikt + Tid brukt + Globalt oppdaterte + Lest + Tracket oppføringer + Snitt poengsum + I/A + Lokale + Trackere + Ikke nå + Kategorien er tom + Kopiert til utklippstavlen Tilgjengelig, men kilden er ikke installert: %s Du har en oppføring i biblioteket med samme navn. \n @@ -723,21 +675,55 @@ Hopp over dupliserte kapitler %1$s feil: %2$s *påkrevd - - Neste kapittel - Neste %d kapitler - Skjul oppføringer som allerede er i biblioteket Kopier til utklippstavle Oppdater kategori Del opp høye bilder Elementer - - Mangler %1$s kapittel - Mangler %1$s kapitler - - Vend sideretning for roterte brede sider + Vend orienteringen av roterte brede sider Roter brede sider slik at de passer Debug info %d per rad - \ No newline at end of file + Sett til å oppdatere hver + Hoppet over fordi ingen utgivelse var forventet i dag + Kapittelsveip + Oppdater månedlig (28 dager) + Sett intervall + Tilpasset oppdateringsintervall + Sen 10+ sjekk + Passert sjekkperiode + Neste forventede oppdatering + Droppet\? Sen 20+ og 2 måneder + Sveip til høyre handling + Intervaller + Anslå hver + Slett nedlastede + Utenfor forventet utgivelsesperiode + Dobbelttrykk for å zoome + Sveip til venstre handling + Vil du fjerne sporing for %s\? + Fjern fra %s også + OK + Tilpass intervall + Dette vil fjerne sporingen lokalt. + Har resultater + Synkroniserer biblioteket + Biblioteksynkronisering fullført + Trykk her for å få hjelp med Cloudflare + Nedlastingsindeksen er ugyldiggjort + Kunne ikke opprette en backup-fil + Lisensiert - Ingen kapitler å vise + Sporerinnlogging + Lås opp %s + Flytt serien til bunnen + Ingen internettforbindelse + HTTP %d, sjekk nettsiden i WebView + Kunne ikke nå %s + Sorter kategorier + Oppdaterer bibliotek… (%s) + Vil du sortere kategoriene i alfabetisk rekkefølge\? + Kildeinnstillinger + Programinnstillinger + Relative tidsstempler + \"%1$s\" istedenfor \"%2$s\" + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ne/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/ne/plurals-aniyomi.xml new file mode 100644 index 0000000000..f0b3de6dab --- /dev/null +++ b/i18n/src/commonMain/resources/MR/ne/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 new file mode 100644 index 0000000000..1de3f8432a --- /dev/null +++ b/i18n/src/commonMain/resources/MR/ne/plurals.xml @@ -0,0 +1,67 @@ + + + + हिजो + %1$d दिन अघि + + + %1$s मिनेट पछि + %1$s मिनेट पछि + + + %d वर्ग + %d वर्गहरू + + + %2$s त्रुटिको साथ %1$s मा सम्पन्न भयो + %2$s त्रुटिहरूसँग %1$s मा सम्पन्न भयो + + + %1$d नयाँ अध्याय + %1$d नयाँ अध्यायहरू + + + एक्सटेन्शन अपडेट उपलब्ध छ + %d एक्सटेन्शन अपडेटहरू उपलब्ध छन् + + + अध्याय %1$s र 1 थप + अध्याय %1$s र %2$d थप + + + %d इन्ट्रीको लागि + %d इन्ट्रीहरूको लागि + + + %1$s बाँकी + %1$s बाँकी + + + %1$s अध्याय + %1$s अध्यायहरू + + + %d अध्याय छोड्दै, या त स्रोत सँग छैन वा यसलाई फिल्टर गरिएको छ + %d अध्यायहरू छोड्दै, या त स्रोत सँग छैन वा यसलाई फिल्टर गरिएको छ + + + %d ट्र्याकर + %d ट्र्याकरहरू + + + अर्को नपढिएको अध्याय + अर्को %d नपढिएका अध्यायहरू + + + अर्को अध्याय + अर्को %d अध्यायहरू + + + %1$s अध्याय छुटेको छ + %1$s अध्यायहरू छुटेका छन् + + + १ दिन + %d दिन + + \ No newline at end of file diff --git a/i18n/src/main/res/values-ne/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/ne/strings-aniyomi.xml similarity index 87% rename from i18n/src/main/res/values-ne/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/ne/strings-aniyomi.xml index 98ffae7afa..c94a7b6bdc 100644 --- a/i18n/src/main/res/values-ne/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/ne/strings-aniyomi.xml @@ -38,32 +38,4 @@ ताचियोमी को लागि WebView आवश्यक छ डाउनलोडहरु रोकियो अध्याय अपडेटहरू - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-ne/strings.xml b/i18n/src/commonMain/resources/MR/ne/strings.xml similarity index 80% rename from i18n/src/main/res/values-ne/strings.xml rename to i18n/src/commonMain/resources/MR/ne/strings.xml index aae3d9b9f1..fa801f427d 100644 --- a/i18n/src/main/res/values-ne/strings.xml +++ b/i18n/src/commonMain/resources/MR/ne/strings.xml @@ -3,12 +3,12 @@ अन अफ अँध्यारो मोड - थिम + थीम बारेमा उन्नत सेटिङहरू ट्र्याकिङ डाउनलोडहरू - पाठक + रिडर पुस्तकालय सामान्य एप उपलब्ध छैन @@ -18,7 +18,7 @@ पछाडि रिस्टोर गर्नुहोस् लग खोल्नुहोस् - पूर्ववत गर्नुहोस् + अन्डु गर्नुहोस् रिसेट गर्नुहोस् सेभ गर्नुहोस् साझा गर्नुहोस् @@ -31,7 +31,6 @@ सबैभन्दा नयाँ अध्याय संख्या द्वारा अपलोड मिति द्वारा - पुनः क्रमबद्ध गर्नुहोस् सबै रद्द गर्नुहोस् रद्द गर्नुहोस् अनपिन @@ -68,21 +67,20 @@ अध्यायमा पुस्तकचिनो हटाउनुहोस् अध्यायमा पुस्तकचिनो लगाउनुहोस् डाउनलोड - अघिल्लोलाई पढिएको चिनो लगाउनुहोस् - नपढिएको चिनो लगाउनुहोस् - पढिसकेको अंकित गर्नुहोस् - सबै चयन गर्नु + अघिल्लोलाई पढिएको चिन्ह लगाउनुहोस् + नपढिएको चिन्ह लगाउनुहोस् + पढिसकेको चिन्ह लगाउनुहोस् + सबै चयन गर्नुहोस् ग्लोबल खोज सेटिङमा खोज्नुहोस् खोज्नुहोस् - पछिल्लो पटक पढिएको + अन्तिम पढिएको कुल अध्यायहरू वर्णमाला अनुसार फिल्टर हटाउनुहोस् नपढिएको ट्र्याक गरिएको पुस्तकचिनो लगाइएको - डाउनलोड गरिएको फिल्टर मेनू सेटिङहरू @@ -90,11 +88,12 @@ ट्र्याकिङ अध्याय पुस्तकालयका इन्ट्रीहरू + वर्गहरू तपाईंसँग कुनै वर्गहरू छैन। वर्ग बनाएर पुस्तकालय व्यवस्थित गर्न प्लस बटन थिच्नुहोस्। तपाईंको पुस्तकालय खाली छ हालै केहि पढेको छैन - कुनै नयाँ अपडेटहरू छैन - बाहिर निस्किन फेरि फिर्ता थिच्नुहोस् + हालैका कुनै अपडेट छैन + डाउनलोड लाम कुनै डाउनलोडहरू छैन मद्दत एक्सटेन्शनको जानकारी @@ -108,16 +107,14 @@ सेटिङहरू अरू नाम - क्लाउडफ्लेयरलाई बाइपास गर्न असफल भयो + Cloudflare लाई बाइपास गर्न असफल भयो प्रदर्शन मोड - उल्टो चयन गर्नु + उल्टो चयन गर्नुहोस् राखिएको मिती अध्याय ल्याएको मिति - नवीनतम अध्याय - पुस्तकालय अपडेट गर्दा ट्र्याकरहरू अपडेट गर्नुहोस् - ट्र्याकरहरू स्वचालित रूपमा रिफ्रेस गर्नुहोस् + सबैभन्दा नयाँ अध्याय पुस्तकालय अपडेट गर्दा नयाँ आवरण र विवरणहरूको लागि जाँच गर्नुहोस् - मेटाडेटा स्वतः ताजा गर्नुहोस् + मेटाडेटा स्वतः रिफ्रेस गर्नुहोस् \"समाप्त\" स्थिति भएको प्रतिबन्धहरू: %s चार्ज हुँदा @@ -133,33 +130,19 @@ ल्याण्डस्केप ग्रिड साइज प्रदर्शन - - हिजो - %1$d दिन अघि - आज - हालसालै स्रोत र एक्सटेन्शन सूची मा देखाउनुहोस् NSFW (१८+) स्रोतहरू सूचना को सामग्री लुकाउनुहोस् एपहरू स्विच गर्दा \"स्क्रिन सुरक्षित गर्नुहोस्\" ले एप सामग्रीहरू लुकाउँछ र स्क्रिनसटहरू रोक्छ स्क्रिन सुरक्षित गर्नुहोस् - - %1$s मिनेट पछि - %1$s मिनेट पछि - कहिल्यै हैन सधैं निष्क्रिय रहेमा लक होस् अनलक गर्न आवश्यक छ सुरक्षा र गोपनीयता - सूचनाहरूको प्रबन्ध - तपाइँ बाहिर निस्कन पक्का गर्नुहोस् + सूचनाहरू व्यवस्थापन गर्नुहोस् मिति ढाँचा - लामो (छोटो+, n दिन पहिले) - छोटो (आज, हिजो) - सापेक्ष टाइमस्ट्याम्प - टाइमस्ट्याम्प शुद्ध कालो डार्क मोड योत्सुबा यिन र यांग @@ -169,28 +152,28 @@ मिडनाइट डस्क हरियो स्याउ गतिशील - एपको थिम + एपको थीम सिस्टम पालना गर्नुहोस् रूप अहिले डाउनलोड गर्न सुरु गर्नुहोस् विवरणहरू हेर्न ट्याप गर्नुहोस् क्रमबद्ध - यी श्रृंखलाका सबै रद्द गर्नुहोस् + यी श्रृङ्खलाका सबै रद्द गर्नुहोस् लोकल स्रोत - WebViewमा खोल्नुहोस् + WebView मा खोल्नुहोस् परिवर्तन पुष्टि गर्न प्रमाणित गर्नुहोस् पूर्वनिर्धारित ट्याब्लेट UI यन्त्रको सेटिङहरू खोल्न सकिएन गुप्त मोड डाउनलोड गरिएको मात्र - कुनै पनि बगहरू ठीक गर्न मद्दत गर्दछ। कुनै संवेदनशील डाटा पठाइने छैन - क्रेश रिपोर्टहरू पठाउनुहोस् + कुनै पनि बगहरू ठीक गर्न मद्दत गर्दछ। कुनै संवेदनशील डेटा पठाइने छैन + क्र्यास रिपोर्टहरू पठाउनुहोस् v%1$s मा अपडेट गरियो अपडेटका लागि जाँच गर्नुहोस् छवि लोड गर्न सकिएन अध्यायहरू डाउनलोड गर्न सकिएन। तपाईं डाउनलोड कतारमा फेरि प्रयास गर्न सक्नुहुन्छ - स्थापना रद्द गर्नुहोस् + अनइन्स्टल गर्नुहोस् अन्तिम पढिएको अध्याय भन्दा २ अध्याय अघि पोर्ट्रेट रङ फिल्टर मिश्रण मोड @@ -206,7 +189,7 @@ स्थापना गरियो विश्वास यो एक्सटेन्शन अब उपलब्ध छैन। यसले राम्ररी काम नगर्न सक्छ र एपमा समस्या ल्याउन सक्छ। यसलाई अनइन्स्टल गर्न सिफारिस गरिन्छ। - यो एक्सटेन्शन आधिकारिक ताचियोमीको एक्सटेन्शन सूचीबाट होइन। + यो एक्सटेन्शन आधिकारिक सूचीबाट होइन। यस एक्सटेन्शनको स्रोतहरूमा NSFW (१८+) सामग्री समावेश हुन सक्छ एक्सटेन्शन स्थापना गर्दै… Shizuku चलिरहेको छैन @@ -215,23 +198,23 @@ चौडा पृष्ठहरू विभाजित गर्नुहोस् विभाजित पृष्ठ प्लेसमेन्ट उल्टाउनुहोस् कटआउट क्षेत्रमा सामग्री देखाउनुहोस् - पृष्ठ संक्रमणहरू एनिमेट गर्नुहोस् + पृष्ठ ट्रान्जिसन एनिमेट गर्नुहोस् एनिमेसनको गति डबल ट्याप गर्नुहोस् रिडर खोल्दा छोटकरीमा हालको मोड देखाउनुहोस् - ब्यान्डिङ घटाउँछ, तर प्रदर्शनलाई असर गर्छ + ब्यान्डिङ घटाउँछ, तर कार्यसम्पादनलाई असर गर्न सक्छ अन कस्टम चमक - पढिएको चिनो लगाइएका अध्यायहरू छोड्नुहोस् + पढिएको चिन्ह लगाइएका अध्यायहरू छोड्नुहोस् नेभिगेसन - भोल्युम कुञ्जीहरू + भोल्युम कीहरू ठाडो दुबै कार्यहरू - लामो ट्यापमा देखाउनुहोस् - पृष्ठभूमि रंग + लामो ट्यापमा कार्यहरू देखाउनुहोस् + पृष्ठभूमि रङ खैरो कालो - स्वचालित + स्वत L आकारको डाउनलोड गर्दै स्थापना गर्दै @@ -240,49 +223,45 @@ १८+ ओभरले फिल्टर गरिएका अध्यायहरू छोड्नुहोस् - भोल्युम कुञ्जीहरू उल्टाउनुहोस् - उल्टो ट्यापिङ + भोल्युम कीहरू उल्टाउनुहोस् + ट्याप क्षेत्रहरू उल्टाउनुहोस् कुनै पनि हैन तेर्सो विरासत - कस्टम रंग फिल्टर + कस्टम रङ फिल्टर गुणन स्क्रिन - डज / हल्का + डज / चम्किलो जलाउनु / अँध्यारो गर्नु - फरक फोल्डरमा पृष्ठहरू सेभ गर्नुहोस् स्क्रिन अन राख्नुहोस् - इन्ट्रीहरूको शीर्षक अनुसार फोल्डरहरू सिर्जना गर्दछ कुल इन्ट्रीहरू - - %d वर्ग - %d वर्गहरू - सावधान भाषा यसले अनौपचारिक वा सम्भावित रूपमा गलत रूपमा फ्ल्याग गरिएका एक्सटेन्शनहरूलाई एप भित्र NSFW (१८+) सामग्री आउन बाट रोक्दैन। - क्रमबद्ध र प्रदर्शनको लागि प्रति-वर्गका सेटिङहरू + पूर्वनिर्धारित वर्ग + क्रमबद्धका लागि प्रति-वर्ग सेटिङहरू समावेश गर्नुहोस्: %s + \"बहिष्कृत\" वर्गहरूमा रहेका इन्ट्री \"समावेश गरिएका\" वर्गहरूमा भए पनि अपडेट हुने छैनन्। एप जानकारी अविश्वसनीय एक्सटेन्शन समावेश नगर्नुहोस्: %s इंस्टलर पूर्ण स्क्रिन - पाठक खोलिएको बेला छोटकरीमा देखाउनुहोस् + रिडर खोलिएको बेला छोटकरीमा देखाउनुहोस् यदि विभाजित चौडा पृष्ठहरूको प्लेसमेन्ट पढ्ने दिशासँग मेल खाँदैन पढ्ने मोड देखाउनुहोस् पृष्ठ नम्बर देखाउनुहोस् - ३२-बिट रंग - सिमाना काट्नुहोस् + ३२-बिट रङ + सीमाना क्रप गर्नुहोस् अफ - ग्रेस्केल + ग्रे-स्केल उल्टो सेतो पूर्वनिर्धारित पढ्ने मोड Wi-Fi मा मात्र प्रत्येक ३ दिन कुना - पृष्ठबद्ध (ठाडो) + ठाडो लामो स्ट्रिप खाली ठाउँ भएको लामो स्ट्रिप पहिलेको @@ -299,36 +278,28 @@ सामान्य कुनै एनिमेसन छैन छिटो - पूर्वनिर्धारित रोटेशन प्रकार - रोटेशन प्रकार + पूर्वनिर्धारित रोटेशन + रोटेशन फ्री ल्याण्डस्केप लक गरिएको ल्याण्डस्केप R G पढ्ने मोड - १०% - २०% - २५% - स्क्रोलमा मेनु लुकाउनको लागि संवेदनशीलता + स्क्रोलमा मेनु लुकाउनका लागि संवेदनशीलता डाउनलोड स्थान अन्तिम पढिएको अध्याय भन्दा पहिले १ अध्याय स्वत: डाउनलोड गर्नुहोस् ट्र्याकिङ गाइड अन्तिम पढिएको अध्याय - सेवाहरू जसले विशिष्ट स्रोतहरूको लागि परिष्कृत सुविधाहरू प्रदान गर्दछ। तपाईंको पुस्तकालयमा इन्ट्री थप्दा स्वतः ट्र्याक गरिन्छ। + विशिष्ट स्रोतहरूको लागि परिष्कृत सुविधाहरू प्रदान गर्दछ। तपाईंको पुस्तकालयमा थप्दा इन्ट्री स्वचालित रूपमा ट्र्याक गरिन्छ। ट्र्याक - पिन गरिएका स्रोतहरू मात्र समावेश गर्नुहोस् रिस्टोर सम्पन्न भयो - - %2$s त्रुटिको साथ %1$s मा सम्पन्न भयो - %2$s त्रुटिहरूसँग %1$s मा सम्पन्न भयो - कुकीहरू खाली गर्नुहोस् तपाई के ब्याकअप गर्न चाहनुहुन्छ\? ब्याकअप असफल भयो HTTPS (DoH) माथि DNS - प्रभाव पार्न एप पुन: सुरु गर्न आवश्यक छ + प्रभाव पार्न एप फेरि सुरु गर्न आवश्यक छ आवरण अपडेट गर्न असफल भयो यो गर्नु अघि कृपया आफ्नो पुस्तकालयमा यस इन्ट्रीलाई राख्नुहोस् डाउनलोडर @@ -336,28 +307,22 @@ ब्याकअप पहिले नै प्रगतिमा छ नयाँ संस्करण उपलब्ध छ! पोर्ट्रेट - कुनै पनि हैन - १५% फिट उचाइ फिट चौडाइ - सेवाहरू + ट्र्याकर अवैध ब्याकअप फाइल ब्याकअप सिर्जना गरियो - ब्याकअप फाइलबाट डाटा रिस्टोर हुनेछ। + ब्याकअप फाइलबाट डेटा रिस्टोर हुनेछ। \n \nतपाईंले कुनै पनि छुटेको एक्सटेन्शनहरू स्थापना गर्न र तिनीहरूलाई प्रयोग गर्न पछि ट्र्याकिङ सेवाहरूमा लगइन गर्न आवश्यक हुनेछ। रिस्टोर पहिले नै प्रगतिमा छ - नेटवर्क - ब्याकअप पुनर्स्थापना असफल भयो - तपाईंले ब्याकअपको प्रतिलिपिहरू अन्य ठाउँहरूमा पनि राख्नु पर्छ। + नेटवर्किङ + ब्याकअप रिस्टोर असफल भयो + तपाईंले ब्याकअपको प्रतिलिपिहरू अन्य ठाउँहरूमा पनि राख्नु पर्छ। ब्याकअपहरूमा कुनै पनि भण्डारण गरिएका पासवर्डहरू सहित संवेदनशील डेटा समावेश हुन सक्छ; साझा गर्दा होसियार । नयाँ अध्यायहरू फेला पर्यो - - %1$d नयाँ अध्याय - %1$d नयाँ अध्यायहरू - - उच्चतम + सबैभन्दा उच्च असक्षम - परिष्कृत सेवाहरू + परिष्कृत ट्र्याकरहरू रिस्टोर रद्द गरियो त्रुटि तन्काउनुहोस् @@ -365,7 +330,7 @@ स्वचालित लक गरिएको पोर्ट्रेट A - सधैं अध्याय संक्रमण देखाउनुहोस् + अध्याय ट्रान्जिसन सधैँ देखाउनुहोस् B पढ्दै साइड प्याडिङ @@ -377,25 +342,19 @@ अन्तिम पढिएको अध्याय भन्दा ३ अध्याय अघि नयाँ अध्यायहरू डाउनलोड गर्नुहोस् अध्यायहरू %1$s - - एक्सटेन्शन अपडेट उपलब्ध छ - %d एक्सटेन्शन अपडेटहरू उपलब्ध छन् - कुनै Wi-Fi जडान उपलब्ध छैन + डाउनलोडहरू रोकियो कुनै नेटवर्क जडान उपलब्ध छैन - ट्र्याकिङ सेवाहरूमा अध्याय प्रगति अपडेट गर्न एकतर्फी सिङ्क। तिनीहरूको ट्र्याकिङ बटनबाट व्यक्तिगत इन्ट्रीहरूको लागि ट्र्याकिङ सेट अप गर्नुहोस्। + बाह्य ट्र्याकर सेवाहरूमा अध्याय प्रगति अपडेट गर्न एक-तर्फी सिङ्क। तिनीहरूको ट्र्याकिङ बटनबाट व्यक्तिगत इन्ट्रीहरूको लागि ट्र्याकिङ सेट अप गर्नुहोस्। ट्र्याकरहरूमा लगइन छैनन्: छुटेको स्रोतहरू: + बहिष्कृत वर्गहरू अन्तिम पढिएको अध्याय भन्दा ४ अध्याय अघि \"बहिष्कृत\" वर्गहरूमा इन्ट्री \"समावेश गरिएका\" वर्गहरूमा भए पनि डाउनलोड गरिने छैन। - - अध्याय %1$s र 1 थप - अध्याय %1$s र %2$d थप - ब्याकअप सिर्जना गर्नुहोस् हालको पुस्तकालय रिस्टोर गर्न प्रयोग गर्न सकिन्छ कुकीहरू खाली गरियो - डाटा + डेटा खाली गर्दा त्रुटि भयो स्थिति नयाँ अध्यायहरूको लागि जाँच गर्दै @@ -407,51 +366,46 @@ जूम सुरु स्थिति राम्रो संगतताको लागि कृपया WebView एप अपडेट गर्नुहोस् इन्ट्री अपडेट गर्न छोड्नुहोस् - नेभिगेसन लेआउट + ट्याप क्षेत्रहरू पृष्ठांकित स्केल को प्रकार फिट स्क्रिन बायाँ यदि MIUI अप्टिमाइजेसन असक्षम छ भने ब्याकअप/रिस्टोरले राम्ररी काम नगर्न सक्छ। - ब्याकअप पुनर्स्थापित गर्दै + ब्याकअप रिस्टोर गर्दै एक्सटेन्शनहरूको सूची प्राप्त गर्न असफल भयो दायाँ ब्याकअप रिस्टोर गर्नुहोस् ब्याकअप फाइलबाट पुस्तकालय रिस्टोर गर्नुहोस् - स्वचालित ब्याकअपहरू ब्याकअपमा कुनै पनि पुस्तकालयका इन्ट्री समावेश छैन। ब्याकअप स्थान - ब्याकअप फ्रिक्वेन्सी - अधिकतम ब्याकअपहरू + स्वचालित ब्याकअप फ्रिक्वेन्सी + अधिकतम स्वचालित ब्याकअपहरू प्रयोग गरिएको: %1$s - - %d इन्ट्रीको लागि - %d इन्ट्रीहरूको लागि - क्यास खाली गरियो। %1$d फाइलहरू हटाएका छन् अध्याय %1$s र %2$d अरू डाउनलोड त्रुटि एक्सटेन्शन अपडेटहरू - विकासकर्ताहरूसँग साझेदारी गर्नको लागि फाइलमा त्रुटि लगहरू बचत गर्दछ + विकासकर्ताहरूसँग साझेदारी गर्नको लागि फाइलमा त्रुटि लगहरू सेभ गर्दछ ब्याकग्राउण्ड गतिविधि नयाँ के छ - डेटाबेसमा %1$d गैर-पुस्तकालय इन्ट्रीहरू + डेटाबेसमा %1$d गैर-पुस्तकालय इन्ट्रीहरू छन् ब्याट्री अप्टिमाइजेसन पहिले नै असक्षम छ केही निर्माताहरूसँग अतिरिक्त एप प्रतिबन्धहरू छन् जसले ब्याकग्राउण्ड सेवाहरूलाई मार्छ। यो वेबसाइटमा यसलाई कसरी ठीक गर्ने बारे थप जानकारी छ। इन्ट्रीहरू हटाइयो ब्याकग्राउण्ड पुस्तकालय अपडेटहरू र ब्याकअप संग मद्दत गर्छ सिस्टम लगमा भर्बोज लगहरू प्रिन्ट गर्नुहोस् (एपको कार्यसम्पादन घटाउँछ) गोपनीयता नीति - इ-मेल ठेगाना + ईमेल ठेगाना थप परिणामहरू छैनन् लोकल स्रोत अन्य ट्याबहरू - नवीनतम + सबैभन्दा नयाँ द्वारा अर्डर गर्नुहोस् मिति - %1$s मा लग इन गर्नुहोस् - पुस्तकालयका आवरणहरू ताजा गर्नुहोस् + %1$s मा लगइन गर्नुहोस् + पुस्तकालयका आवरणहरू रिफ्रेस गर्नुहोस् गुप्त मोड असक्षम गर्नुहोस् अज्ञात त्रुटि डाउनलोड गरिएका अध्यायहरू @@ -465,36 +419,31 @@ कुनै परिणाम फेला परेन पिन गरिएको ग्लोबल रूपमा \"%1$s\" खोज्नुहोस् - WebView मा वेबसाइट जाँच गर्नुहोस् अज्ञात लेखक - - %1$s बाँकी - %1$s बाँकी - + डेटाबेस खाली गर्नुहोस् वर्बोज लगिङ - युजर्नेम - लग-इन - लग-इन हुनुहुन्छ + युजरनेम + लगइन + लगइन हुनुहुन्छ %1$s बाट लग-आउट गर्ने हो\? लग-आउट तपाई अब लग-आउट हुनुभएको छ वर्ग अपडेट गर्दै - लोकल - पछिल्लो पटक प्रयोग गरेको + पछिल्लो पटक प्रयोग गरिएको ग्लोबल खोज… लोकल स्रोत गाइड जारी छ अज्ञात स्थिति लाइसेन्स प्राप्त पासवर्ड + पुस्तकालयमा नभएका इन्ट्रीको इतिहास हटाउनुहोस् सफा गर्न केही छैन - ट्र्याकिङ ताजा गर्नुहोस् संस्करण वेबसाइट अनुवाद गर्न मद्दत गर्नुहोस् खुला स्रोत लाइसेन्सहरू पुस्तकालयबाट हटाउनुहोस् - प्रकाशन सकियो + प्रकाशन सम्पन्न रद्द गरेको अन्तरालमा छ पुस्तकालयमा राख्नुहोस् @@ -503,16 +452,11 @@ समाप्त पुस्तकालयबाट हटाइयो थप - कम + थोरै अध्याय %1$s - - %1$s अध्याय - %1$s अध्यायहरू - अध्याय संख्या शीर्षक मूल्याङ्कन - सुरु गरिएको सुरु गरेको मिति समाप्त गरेको मिति कुनै पृष्ठहरू फेला परेनन् @@ -521,18 +465,14 @@ के तपाईँ निश्चित हुनुहुन्छ\? सबै इतिहास हराउनेछ। पृष्ठहरू लोड हुन असफल भयो: %1$s स्रोत स्थापना गरिएको छैन: %1$s + रोकिएको डाउनलोड गर्दै (%1$d/%2$d) अध्याय संख्या द्वारा अपलोड मिति द्वारा - - %d अध्याय छोड्दै, या त स्रोत सँग छैन वा यसलाई फिल्टर गरिएको छ - %d अध्यायहरू छोड्दै, या त स्रोत सँग छैन वा यसलाई फिल्टर गरिएको छ - स्रोत स्थानान्तरण गाइड स्थानान्तरण गर्नको लागि स्रोत चयन गर्नुहोस् - आवरण बचत गर्दा त्रुटि भयो + आवरण सेभ गर्दा त्रुटि भयो आवरण मात्र ग्रिड - ५% आवरण साझा गर्दा त्रुटि भयो के तपाईँले चयन गर्नुभएको अध्यायहरू हटाउन चाहनुहुन्छ\? अध्याय सेटिङ @@ -540,9 +480,9 @@ यो छवि आवरण को रूपमा राख्न चाहनुहुन्छ\? नपढिएको आवरण सेभ भयो - यो श्रृंखलाको लागि + यस श्रृङ्खलाको लागि पृष्ठहरू लोड हुँदै… - डाटा समावेश गर्न चुन्नुहोस् + समावेश गर्न डेटा चयन गर्नुहोस् अध्याय. %1$s - %2$s प्रतिलिपि क्लिपबोर्डमा प्रतिलिपि गर्नुहोस्: @@ -553,6 +493,7 @@ आवरण अपडेट भयो %1$s: %2$s, पृष्ठ %3$d इतिहास हटाउनुहोस् + पुस्तकालयमा राख्ने\? अर्को: पढ्ने मोड सकिएको: @@ -565,12 +506,9 @@ रोकिएको अर्को अध्याय छैन आवरण + त्रुटि स्रोत शीर्षक स्रोत द्वारा - - %d ट्र्याकर - %d ट्र्याकरहरू - फेरी पढ्दै हालको: कुनै मेल फेला परेन @@ -578,8 +516,7 @@ स्रोत समर्थित छैन सो नाम गरिएको वर्ग पहिले नै अवस्थित छ! वर्गहरू हटाइयो - यसले यस अध्यायको पढ्ने मिति हटाउनेछ। के तपाईँ निश्चित हुनुहुन्छ\? - सुरु गरिएको + यसले यस अध्यायको पढेको मिति हटाउनेछ। के तपाईँ निश्चित हुनुहुन्छ\? प्रकार अर्को अध्याय भेटिएन पहिलेको: @@ -593,90 +530,83 @@ बारम्बार सोधिएका प्रश्न उत्तर र गाइडहरू डाउनलोड अघिल्लो अध्याय छैन - पुस्तकालय अपडेट गर्दै...(%1$d/%2$d) - यो ट्रयाकर कोग्मामा कोस्रोत सँग मात्र चलाउन मिल्छ! ट्र्याकिङ ट्र्याक गर्नुहोस् पढ्दै कुनै फाइल पिकर एप फेला परेन डाउनलोड गर्नुहोस् + अध्याय अपडेटहरू श्रृङ्खला पूरा भएकोले छोडियो - अधिक जानकारी - कुनै नयाँ अपडेटहरू उपलब्ध छैनन् - अपडेटहरू खोज्दै… + थप जान्नका लागि ट्याप गर्नुहोस् + कुनै नयाँ अपडेट उपलब्ध छैन तपाईंसँग अहिलेसम्म कुनै पनि वर्गहरू छैन। पूर्वनिर्धारित अध्याय सेटिङहरू अपडेट गरियो छोडियो अर्को पृष्ठ - डाउनलोड पूरा भयो प्रगति पूरा एप अपडेटहरू त्रुटिहरू कुनै अध्याय नपढेकाले छोडियो ठूला अपडेटहरूले स्रोतहरूलाई हानि पुर्‍याउँछ र यसले ढिलो अपडेटहरू निम्त्याउन सक्छ र ब्याट्रीको प्रयोग पनि बढाउँछ। थप जान्न ट्याप गर्नुहोस्। - शृंखलालाई शीर्षमा सर्नुहोस् + श्रृङ्खलालाई शीर्षमा सर्नुहोस् पोर्ट्रेट उल्ट्याउनु - नपढिएका अध्यायहरू भएकाले छोडियो + नपढिएका अध्यायहरू भएका कारण छोडियो आवरण छवि चयन गर्नुहोस् ब्याकअप फाइल चयन गर्नुहोस् - सामान्य + साधारण अघिल्लो पृष्ठ यो एन्ड्रोइड संस्करण अब समर्थित छैन सुरु गर्ने गाइड चौडा छविहरू प्यान गर्नुहोस् - जूम ल्यान्डस्केप छवि + फराकिलो छविहरूमा स्वचालित रूपमा जूम गर्नुहोस् %1$d अपडेट(हरू) असफल भयो %1$d अपडेट(हरू) छोडियो असक्षम पुस्तकालय अपडेट त्रुटिहरू कसरी समाधान गर्ने भन्ने बारे मद्दतको लागि, %1$s हेर्नुहोस् नपढिएको संख्या - बन्द + बन्द गर्नुहोस् वर्गहरू, ग्लोबल अपडेट, अध्याय स्वाइप के तपाई \"%s\" वर्ग हटाउन चाहनु हुन्छ\? वर्ग हटाउनुहोस् खोज्नुहोस्… सबै हटाउनुहोस् - डाउनलोड लाम + पढ्ने मोड, प्रदर्शन, नेभिगेसन स्वचालित डाउनलोड, अगाडि डाउनलोड गर्ने स्रोतहरू, एक्सटेन्शनहरू, ग्लोबल खोज ल्याभेन्डर एप को भाषा पढ्दा स्वत: डाउनलोड गर्नुहोस् - म्यानुअल र स्वचालित ब्याकअप + म्यानुअल र स्वचालित ब्याकअप, भण्डारण स्पेस एप लक, सुरक्षित स्क्रिन - जब ब्याट्री कम छैन - अग्लो छविहरू विभाजित गर्नुहोस् (BETA) थुप्रै डुप्लिकेट अध्यायहरू छोड्नुहोस् - जारी राख्नुहोस् बटन तथ्याङ्क सुरु गरिएको लोकल डाउनलोड गरिएको मापन नगरिएको नेटवर्कमा मात्र अगाडि डाउनलोड गर्नुहोस् - थिम, मिति र समय ढाँचा - केवल पुस्तकालयका इन्ट्रीहरूमा काम गर्दछ र यदि हालको अध्याय + अर्को पहिले नै डाउनलोड गरिएको छ + थीम, मिति र समय ढाँचा + हालको अध्याय + अर्को पहिले नै डाउनलोड गरिएमा मात्र काम गर्दछ। समुन्द्री लहर संस्करण भाषा उमेर मूल्याङ्कन अहिले हैन - अनियमित इन्ट्री खोल्नुहोस् + जुनसुकै इन्ट्री खोल्नुहोस् तपाईको पुस्तकालयमा एउटै नामको इन्ट्री छ। \n \nके तपाईं अझै जारी राख्न चाहनुहुन्छ\? - पढ्ने सूची + पढिरहेको सूची पुस्तकालय पछिल्लो पटक अपडेट गरिएको: %s %s एक अप्रत्याशित त्रुटिमा पर्यो। समर्थन को लागि हामी तपाईंलाई हाम्रो Discord को #support च्यानलमा क्र्यास लगहरू साझेदारी गर्न सुझाव दिन्छौं। GitHub मा खोल्नुहोस् - डाउनलोड गरिएका अध्यायहरू पुन: जाँच गर्न एपलाई फोर्स गर्नुहोस् - एकतर्फी प्रगति सिंक, परिष्कृत सिंक + एकतर्फी प्रगति सिङ्क, परिष्कृत सिङ्क क्र्यास लग डम्प, ब्याट्री अप्टिमाइजेसन तस्वीर बचत गर्न त्रुटि भयो भर्खरै - सबै पाठक सेटिङहरू रिसेट गरियो + सबै रिडर सेटिङहरू रिसेट गरियो प्रयोग गरिएको ग्लोबल अपडेटमा इन्ट्री @@ -695,12 +625,8 @@ F-Droid निर्माणहरू आधिकारिक रूपमा समर्थित छैनन्। \nथप जान्न ट्याप गर्नुहोस्। उफ्! - - अर्को नपढिएको अध्याय - अर्को %d नपढिएका अध्यायहरू - पढेको अवधि - पाठक सेटिङहरू रिसेट गर्न सकिएन + रिडर सेटिङहरू रिसेट गर्न सकिएन WebView डेटा खाली गरियो समाप्त सूची होल्ड सूची @@ -710,16 +636,15 @@ कस्टम आवरण इच्छा सूची लोकप्रिय - पाठकको सम्पादनमा सुधार गर्छ + रिडर कार्यसम्पादन सुधार गर्दछ प्रति-श्रृङ्खला रिडर सेटिङहरू रिसेट गर्नुहोस् मिति हटाउने हो\? यसले %s बाट तपाइँको पहिले चयन गरिएको सुरु मिति हटाउनेछ यसले %s बाट तपाइँको पहिले चयन गरिएको समाप्त मिति हटाउनेछ - एप को भाषा, सूचनाहरू एउटा अपडेट पहिले नै जारी छ ल, यो के भयो स्थापना गरिएको छैन - पढ्ने मोड र सबै शृङ्खलाहरूको अभिमुखीकरण रिसेट गर्दछ + पढ्ने मोड र सबै श्रृङ्खलाहरूको अभिमुखीकरण रिसेट गर्दछ के तपाईँ निश्चित हुनुहुन्छ\? पृष्ठ विभाजन गर्दा %d फेला परेन वर्ग खाली छ @@ -730,7 +655,7 @@ पढेको डाउनलोडहरू जाँच गर्दै आधिकारिक रिलिजबाट नयाँ संस्करण उपलब्ध छ। अनौपचारिक F-Droid रिलीजहरूबाट कसरी स्थानान्तरण गर्ने भनेर जान्न ट्याप गर्नुहोस्। - कुनै विवरण छैन + कुनै वर्णन छैन एप लक सक्षम हुँदा विजेट उपलब्ध छैन ब्याकअप गर्न कुनै पुस्तकालय इन्ट्रीहरू छैनन् %1$s त्रुटि: %2$s @@ -738,17 +663,13 @@ कुनै स्रोत फेला परेन अवलोकन N/A - शृङ्खलालाई अपडेट आवश्यक नपर्ने भएकोले छोडियो + श्रृङ्खलालाई अपडेट आवश्यक नपर्ने भएकोले छोडियो *आवश्यक तपाईं आफ्नो पुस्तकालयबाट \"%s\" हटाउन लाग्दै हुनुहुन्छ युजर एजेन्ट स्ट्रिङ खाली हुन सक्दैन पूर्वनिर्धारित युजर एजेन्ट स्ट्रिङ रिसेट गर्नुहोस् %dसे %dमि - - अर्को अध्याय - अर्को %d अध्यायहरू - पहिले नै पुस्तकालयमा रहेका इन्ट्रीहरू लुकाउनुहोस् क्लिपबोर्डमा प्रतिलिपि गर्नुहोस् डाउनलोड इन्डेक्स अमान्य गर्नुहोस् @@ -758,17 +679,57 @@ %dघ वर्ग अपडेट गर्नुहोस् अग्लो छविहरू विभाजित गर्नुहोस् - आवरण ओभरले + ओभरले फिट गर्न चौडा पृष्ठहरू घुमाउनुहोस् घुमाइएका चौडा पृष्ठहरूको अभिमुखीकरण फ्लिप गर्नुहोस् - - %1$s अध्याय छुटेको छ - %1$s अध्यायहरू छुटेका छन् - Debug जानकारी अध्याय स्वाइप दायाँ स्वाइप बायाँ स्वाइप जूम गर्न डबल ट्याप गर्नुहोस् %d प्रति पङ्क्ति - \ No newline at end of file + अन्तराल सेट गर्नुहोस् + कस्टम गरिएको ल्याउने अन्तराल + मासिक ल्याउनुहोस् (२८ दिन) + प्रत्येक अपडेट गर्न सेट गर्नुहोस् + अन्तराल कस्टम गर्नुहोस् + छोडियो किनभने आज कुनै रिलीज अपेक्षित थिएन + अन्तरालहरू + ढिलो १०+ जाँच + जाँच अवधि पार भयो + अर्को अपेक्षित अपडेट + अपेक्षित रिलीज अवधि बाहिर + प्रत्येक अनुमान लगाउनुहोस् + छोडियो\? ढिलो २०+ र २ महिना + %s ट्र्याकिङ हटाउने हो\? + %s बाट पनि हटाउनुहोस् + यसले लोकल रूपमा ट्र्याकिङ हटाउनेछ। + ठीक छ + डाउनलोड गरिएको मेट्नुहोस् + परिणामहरू भएको + पुस्तकालय सिङ्क सम्पन्न भयो + पुस्तकालय सिङ्क गर्दै + डाउनलोड इन्डेक्स अवैध भयो + Cloudflare सम्बन्धित मद्दतको लागि यहाँ ट्याप गर्नुहोस् + ट्र्याकर लगइन + ब्याकअप फाइल सिर्जना गर्न असफल भयो + लाइसेन्स प्राप्त - देखाउन को लागि कुनै अध्याय छैन + इन्टरनेट जडान छैन + %s मा पुग्न सकिएन + HTTP %d, WebView मा वेबसाइट जाँच गर्नुहोस् + अनलक %s + श्रृङ्खलालाई तल सार्नुहोस् + वर्गहरू क्रमबद्ध गर्नुहोस् + पुस्तकालय अपडेट गर्दै... (%s) + के तपाई वर्गहरू वर्णमाला अनुसार क्रमबद्ध गर्न चाहनुहुन्छ\? + स्रोत सेटिङहरू + एप सेटिङहरू + सापेक्ष टाइमस्ट्याम्पहरू + \"%2$s\" को सट्टा \"%1$s\" + कहिले पनि होइन + ई-इंक स्क्रिनहरूमा गोस्टिङ घटाउँछ + पछिल्लो पटक स्वचालित ब्याकअप गरिएको: %s + पृष्ठ बदलिँदा स्क्रिनमा सेतो फ्ल्यास हुन्छ + डेटा र भण्डारण + फाइल पिकर एपमा फाइल फर्काउन असफल भयो + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/nl/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/nl/plurals-aniyomi.xml new file mode 100644 index 0000000000..99ec01da99 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/nl/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/nl/plurals.xml b/i18n/src/commonMain/resources/MR/nl/plurals.xml new file mode 100644 index 0000000000..426f1662aa --- /dev/null +++ b/i18n/src/commonMain/resources/MR/nl/plurals.xml @@ -0,0 +1,67 @@ + + + + Na %1$s minuut + Na %1$s minuten + + + Extensie-update beschikbaar + %d extensie-updates beschikbaar + + + Hoofdstukken %1$s en 1 meer + Hoofdstukken %1$s en %2$d meer + + + %1$d nieuw hoofdstuk + %1$d nieuwe hoofdstukken + + + Voor %d titel + Voor %d titels + + + %1$s resterend + %1$s resterende + + + Voltooid in %1$s met %2$s foutmelding + Voltooid in %1$s met %2$s foutmeldingen + + + %d categorie + %d categorieën + + + %1$s hoofdstuk + %1$s hoofdstukken + + + %d tracker + %d trackers + + + 1 hoofdstuk is overgeslagen, de bron mist 1 hoofdstuk of het is uitgefilterd + %d hoofdstukken zijn overgeslagen, de bron mist ze of ze zijn uitgefilterd + + + Gisteren + %1$d dagen geleden + + + Volgende ongelezen hoofdstuk + Volgende aantal %d ongelezen hoofdstukken + + + Volgend hoofdstuk + Volgende %d hoofdstukken + + + 1 dag + %d dagen + + + %1$s hoofdstuk mist + %1$s hoofdstukken missen + + \ No newline at end of file diff --git a/i18n/src/main/res/values-nl/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/nl/strings-aniyomi.xml similarity index 80% rename from i18n/src/main/res/values-nl/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/nl/strings-aniyomi.xml index 2640d61311..d675240c33 100644 --- a/i18n/src/main/res/values-nl/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/nl/strings-aniyomi.xml @@ -38,32 +38,4 @@ WebView is vereist voor Tachiyomi Download gepauzeerd Hoofdstukupdates - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-nl/strings.xml b/i18n/src/commonMain/resources/MR/nl/strings.xml similarity index 83% rename from i18n/src/main/res/values-nl/strings.xml rename to i18n/src/commonMain/resources/MR/nl/strings.xml index b4bd30e78b..d6995af6b8 100644 --- a/i18n/src/main/res/values-nl/strings.xml +++ b/i18n/src/commonMain/resources/MR/nl/strings.xml @@ -1,6 +1,7 @@ Naam + Categorieën Bibliotheek Hoofdstukken Tracking @@ -11,7 +12,6 @@ Back-up en herstel Instellingen Filter - Gedownload Ongelezen Verwijder filter Alfabetisch @@ -35,6 +35,7 @@ Pauzeren Vorige hoofdstuk Volgende hoofdstuk + Downloadwachtrij Bibliotheek bijwerken Opnieuw proberen Verwijderen @@ -68,6 +69,7 @@ Iedere 2 dagen Wekelijks Alles + Standaard categorie Altijd vragen Volledig scherm Animeer pagina-overgangen @@ -93,7 +95,7 @@ Links Rechts Midden - Standaard draaitype + Standaardoriëntatie Vrij R G @@ -105,15 +107,14 @@ Een-na-laatste gelezen hoofdstuk Twee-na-laatste gelezen hoofdstuk Download nieuwe hoofdstukken - Diensten + Trackers Back-up maken Kan worden gebruikt om de huidige bibliotheek te herstellen Back-up herstellen Herstellen van back-up bestand Back-uplocatie - Automatische backups - Back-upfrequentie - Maximaal aantal back-ups + Frequentie van automatische back-ups + Maximaal aantal automatische back-ups Back-up gemaakt Herstellen voltooid Wat wil je back-uppen? @@ -135,6 +136,8 @@ Verwijderen uit bibliotheek Hoofdstuk %1$s Aan het downloaden (%1$d/%2$d) + Fout + Gepauzeerd Brontitel Hoofdstuknummer Op bron @@ -149,6 +152,7 @@ Status Er bestaat al een categorie met deze naam! Categorieën verwijderd + Toevoegen aan bibliotheek\? Afbeelding opgeslagen Aangepast filter Instellen als omslagfoto @@ -172,6 +176,7 @@ Fout Geen Wi-Fi-verbinding beschikbaar Geen netwerkverbinding beschikbaar + Download gepauzeerd Updates Aantal hoofdstukken App niet beschikbaar @@ -191,7 +196,8 @@ Vier-na-laatste gelezen hoofdstuk Cache geleegd. %1$d bestanden zijn verwijderd Fout opgetreden tijdens het wissen - Tracking bijwerken + Database leegmaken + Verwijder geschiedenis voor items die niet in je bibliotheek zijn opgeslagen Rapporteer bugs Helpt bij het oplossen van bugs. Er wordt geen gevoelige data verzonden Niks recent gelezen @@ -209,7 +215,6 @@ De afbeelding kon niet worden geladen Kon hoofdstukken niet downloaden. Je kan het opnieuw proberen in het downloadscherm Updaten van omslag mislukt - Zoeken naar updates… Downloaden… Fout bij het downloaden Met bladwijzer @@ -218,7 +223,6 @@ Van plan te lezen Globaal zoeken Gedownloade hoofdstukken - Lokaal Anders Globaal zoeken… Nieuwste @@ -250,7 +254,6 @@ Bron niet geïnstalleerd: %1$s Opnieuw aan het lezen Status - Gestart Soort Afgerond: Huidige: @@ -297,52 +300,31 @@ Volg systeeminstelling Meldingen beheren Beveiliging en privacy - Ontgrendeling vereisen + Vereis ontgrendeling Vergrendelen indien niet in gebruik Altijd Nooit - - Na %1$s minuut - Na %1$s minuten - Scherm beveiligen Updates in de wachtrij Kon Cloudflare niet omzeilen Gelieve de WebView-app bij te werken voor betere compatibiliteit + Hoofdstukupdates Veilig scherm modus verbergt de inhoud van de app bij het wisselen en blokkeert schermafbeeldingen Weergave Verplaats naar beneden Oudste Nieuwste - Opnieuw organiseren Menu Vastpinnen Bronnen Selectie omkeren - Druk nogmaals op terug om te verlaten Herstellen geannuleerd Herstellen mislukt Er wordt al een back-up hersteld Extensie-updates - - Extensie-update beschikbaar - %d extensie-updates beschikbaar - - - Hoofdstukken %1$s en 1 meer - Hoofdstukken %1$s en %2$d meer - Hoofdstukken %1$s Hoofdstuk %1$s en %2$d meer Hoofdstuk %1$s - - %1$d nieuw hoofdstuk - %1$d nieuwe hoofdstukken - - - Voor %d titel - Voor %d titels - Zoeken naar nieuwe hoofdstukken Hfst. %1$s - %2$s Bibliotheek bijwerken @@ -354,12 +336,7 @@ Hulp bij lokale bronnen Vastgepind Laatst gebruikt - Bekijk website in WebView E-mailadres - - %1$s resterend - %1$s resterende - Filtert alle items in de bibliotheek Alleen gedownloade Controleer op updates @@ -371,37 +348,22 @@ Back-up mislukt Er wordt al een back-up gemaakt %02d min, %02d sec - 25% - 20% - 15% - 10% - Geen Lezen Hoofdstukovergangen altijd weergeven Doorlopend verticaal Gefilterde hoofdstukken overslaan Inhoud in uitgesneden gebied laten zien Meldingsinhoud verbergen - Bevestig sluiten Verplaats naar top Lospinnen Leesmodus Voor deze serie Kon de apparaatinstellingen niet openen - - Voltooid in %1$s met %2$s foutmelding - Voltooid in %1$s met %2$s foutmeldingen - - Zoek alleen in vastgepinde bronnen bij globaal zoeken Opvulling zijkant Grijs Vermindert kleurstrepen, maar beïnvloedt de prestaties - - %d categorie - %d categorieën - Omslagen van manga in bibliotheek bijwerken - Eenzijdige synchronisatie om voortang van hoofdstukken bij te werken bij trackingdiensten. Stel tracking in bij individuele items via de \"Tracking\"-knop. + Eenzijdige synchronisatie om voortang van hoofdstukken bij te werken bij externe trackerdiensten. Stel tracking in bij individuele items via de \"Tracking\"-knop. Deze extensie behoort niet tot de officiële Tachiyomi extensielijst. Niet officieel Controleer bij het bijwerken van de bibliotheek op nieuwe omslag en details @@ -423,12 +385,8 @@ Beginnen Alles uitzetten Alles aanzetten - - %1$s hoofdstuk - %1$s hoofdstukken - Herstart van de app nodig om van kracht te worden - Netwerk + Netwerken Beiden Verticaal Horizontaal @@ -442,23 +400,14 @@ Leesmodus Thema Datum toegevoegd - - %d tracker - %d trackers - Je hebt geen vastgepinde bronnen Voltooid Voortgang - Download voltooid Fouten Niet-ingelogde trackers: Kan NSFW-inhoud (18+) bevatten 18+ Dit voorkomt niet dat onofficiële of mogelijk incorrect gemarkeerde extensies NSFW-inhoud (18+) kunnen laten zien in de app. - - %d hoofdstuk is overgeslagen, de bron mist het hoofdstuk of is eruit gefilterd - %d hoofdstukken zijn overgeslagen, de bron mist ze of ze zijn eruit gefilterd - Geen hoofdstukken gevonden Standaard hoofdstukinstellingen bijgewerkt Instellen als standaard @@ -510,6 +459,7 @@ Automatisch downloaden Uitgezonderd: %s Inbegrepen: %s + Items in uitgesloten categorieën worden niet bijgewerkt, zelfs niet als ze onder opgenomen categorieën vallen. Datum opgehaald Geen Klik om details te weergeven @@ -518,10 +468,8 @@ Incognitomodus uitschakelen Liggend Staand - Draaitype + Oriëntatie Automatisch - Mappen aanmaken op basis van titel - Pagina\'s opslaan in aparte mappen Acties Grijstinten Alles annuleren voor deze serie @@ -541,11 +489,9 @@ Uit Aan Instellingen per categorie voor sorteren en weergeven - Trackers bijwerken bij het bijwerken van de bibliotheek - Trackers automatisch vernieuwen + Lokale bron Er zijn nog geen categorieën. Begin nu met downloaden - Bibliotheek updaten... (%1$d/%2$d) Sommige fabrikanten hebben extra beperkingen op apps die achtergronddiensten uitschakelen. Informatie over hoe je dit kan oplossen kan je vinden op de deze website. Backup/herstellen werkt waarschijnlijk niet goed als de MIUI Optimalisatie is uitgeschakeld. Puur-zwarte donkere modus @@ -556,31 +502,22 @@ Nachtschemering Groene Appel Appthema - Deze tracker werkt alleen met de Komga-bron. - Diensten die uitgebreidere functionaliteit bieden voor bepaalde bronnen. Het tracken van items gebeurt automatisch wanneer je deze toevoegt aan je bibliotheek. - Verbeterde diensten + Bieden uitgebreidere functionaliteit voor bepaalde bronnen. Het tracken van items gebeurt automatisch wanneer je deze toevoegt aan je bibliotheek. + Verbeterde trackers Dynamisch Gids voor beginners Help met vertalen Tablet UI Achtergrond activiteit Volg + Uitgesloten categoriën Laagste Laag Hoog Hoogste Sensitiviteit voor het verbergen van het menu tijdens scrollen Omgekeerd - - Gisteren - %1$d dagen geleden - Vandaag - Recent - Lang (Kort+, n dagen geleden) - Kort (vandaag, gisteren) - Relatieve tijdstempel - Tijdstempel Blauwgroen & Turkoois Uiterlijk Authenticeer om de wijziging te bevestigen @@ -592,7 +529,7 @@ Verouderd Shizuku wordt niet uitgevoerd Installatieprogramma - Je zou kopies van back-ups ook in andere plaatsen moeten hebben. + Je zou kopies van back-ups ook in andere plaatsen moeten hebben. Back-ups kunnen gevoelige data zoals opgeslagen wachtwoorden bevatten; let op met delen. Alleen via Wi-Fi Uitgebreide logging Waarschuwing: grote updates schaden bronnen en kunnen leiden tot slomere updates en verhoogd batterijgebruik @@ -613,7 +550,6 @@ Geannuleerd Gepauzeerd Veelgestelde vragen en handleidingen - 5% %1$d update(s) overgeslagen %1$d update(s) mislukt Kom meer te weten @@ -624,7 +560,6 @@ Tik om door brede afbeeldingen te scrollen Alleen-cover rooster Omgedraaid portret-modus - Begonnen Breng serie naar boven Geen gelezen hoofdstukken Overgeslagen want de serie is af @@ -649,37 +584,26 @@ Taal Meerdere Classificatie per leeftijd - Grote afbeeldingen splitsen (BETA) Versie - Wanneer de batterij niet leeg is Taal van de applicatie Geen bibliotheek inzendingen om te backuppen Ongelezen aantal Werkt alleen bij vermeldingen in de bibliotheek en als het huidige hoofdstuk en het volgende alreeds gedownload zijn Standaard \'user-agent-string\' - Laat gedupliceerde vastgezette bronnen zien - Herhaal vastgezetten bronnen in hun respectieve taal groepen - - Volgende ongelezen hoofdstuk - Volgende aantal %d ongelezen hoofdstukken - Zoek… Opslag bevoegdheden niet verleent -Downloadwachtrij - Knop om lezen te hervatten weergeven Statistieken Gestart Lokaal Gedownload Niet nu Willekeurige openen - App-taal, meldingen Thema, datum- en tijdnotatie Categorieën, globaal bijwerken Leesmodus, weergave, navigatie Automatische downloads, vooraf downloaden Bronnen, extensies, globaal zoeken - Handmatige en automatische back-ups + Handmatige & automatische back-ups, opslagruimte App-vergrendeling, schermbeveiliging Alle leesinstellingen teruggezet naar de standaardwaarden Kon leesinstellingen niet terugzetten naar standaardwaarden @@ -702,7 +626,6 @@ Beschikbaar maar bron niet geïnstalleerd: %s User agent mag niet leeg zijn Leesinstellingen voor alle series terugzetten naar standaardwaarde - Hercontrole van gedownloade hoofdstukken forceren Naar klembord gekopieerd Recentelijk bijgewerkte items in de bibliotheek bekijken %1$s-fout: %2$s @@ -726,9 +649,88 @@ Geen bron gevonden Oops! 1-directie voortgang sync - - Volgend hoofdstuk - Volgende %d hoofdstukken - Dit gaat je eerder geselcteerde startdatum %s verwijderen - \ No newline at end of file + Download verwijderen + Overgeslagen omdat serie geen updates vereist. + %s is een onverwachte fout tegengekomen. We raden u aan de crashlogboeken te delen in ons ondersteuningskanaal op Discord. + Foutopsporingsinformatie + Voltooide titels + Buiten verwachte vrijgave periode + Interval instellen + Aangepast ophaalinterval + Maandelijks ophalen (28 dagen) + Controleperiode overschreden + Volgende verwachte update + Splits hoge afbeeldingen + Gelicenseerd - Geen hoofdstukken te laten zien + Draairichting van geroteerde brede pagina\'s omdraaien + Dubbeltik om te zoomen + Tracker login + Bibliotheek synchroniseren + Heeft resultaten + Dit zal jouw eerder geselecteerde einddatum weg halen van %s + Dit zal de tracking lokaal verwijderen. + Haal ook weg van %s + Overlay + Overzicht + Leesduur + Schat elke + Herstart de applicatie + Interval aanpassen + Download Index geïnvalideerd + Maak de downloadindex ongeldig + OK + Swipe naar de linker actie + Intervallen + Haal %s tracking weg\? + Ontgrendel %s + Swipe naar de juiste actie + %d per rij + Hoofdstuk veeg + Roteer brede pagina\'s zodat ze passen + Kon een backup-bestand niet creëren + Bibliotheeksynchronisatie beëindigd + Trackers + Overgeslagen omdat geen uitgave is verwacht vandaag + *vereist + Totaal + Late 10+ controle + Gevallen\? Late 20+ en 2 maanden + Lees + Gevolgde titels + Gemiddelde score + %du + U staat op het punt om \"%s\" te verwijderen uit uw bibliotheek + %ds + Kon bestandspad van pagina %d niet vinden + Titels + Open op GitHub + Geen titels gevonden in deze categorie + Geen internet verbinding + Kon niet %s bereiken + Gebruikt + N.v.t + Stel in om te updaten iedere + Tik hier voor hulp met Cloudflare + %dd + Category is leeg + %dm + Er is een nieuwe versie beschikbaar van de officiële uitgavens. Tik om te leren hoe u kunt migreren vanuit niet-officiële F-Droid-releases. + HTTP %d, check website in WebView + In globale update + Nooit + Vermindert ghosting bij e-ink schermen + Sorteer categorieën + Voor het laatst een automatische back-up gemaakt op: %s + Breng serie naar beneden + Scherm wit flitsen bij het wisselen van pagina\'s + Opslaggebruik + Bibliotheek bijwerken... (%s) + Data en opslag + Wil je de categorieën sorteren op alfabetische volgorde\? + Bestandskiezer gaf geen bestand terug aan de app + Bron-instellingen + App-instellingen + Relatieve tijdstempels + \"%1$s\" in plaats van \"%2$s\" + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/nn/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/nn/plurals-aniyomi.xml new file mode 100644 index 0000000000..d94c220dbf --- /dev/null +++ b/i18n/src/commonMain/resources/MR/nn/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/nn/plurals.xml b/i18n/src/commonMain/resources/MR/nn/plurals.xml new file mode 100644 index 0000000000..663dc3201b --- /dev/null +++ b/i18n/src/commonMain/resources/MR/nn/plurals.xml @@ -0,0 +1,15 @@ + + + + Etter %1$s minutt + Etter %1$s minuttar + + + %d kategori + %d kategoriar + + + Gjort på %1$s med %2$s feil + Gjort på %1$s med %2$s feil + + \ No newline at end of file diff --git a/i18n/src/main/res/values-nn/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/nn/strings-aniyomi.xml similarity index 50% rename from i18n/src/main/res/values-nn/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/nn/strings-aniyomi.xml index f5977b7a63..9052897f4c 100644 --- a/i18n/src/main/res/values-nn/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/nn/strings-aniyomi.xml @@ -11,32 +11,4 @@ Manga frå biblioteket Legg manga til i bibliotek\? Feil - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-nn/strings.xml b/i18n/src/commonMain/resources/MR/nn/strings.xml similarity index 90% rename from i18n/src/main/res/values-nn/strings.xml rename to i18n/src/commonMain/resources/MR/nn/strings.xml index 89561f2265..815647c97a 100644 --- a/i18n/src/main/res/values-nn/strings.xml +++ b/i18n/src/commonMain/resources/MR/nn/strings.xml @@ -84,7 +84,6 @@ Ingen nylege oppdateringar Bibliotek Kjelder - Trykk tilbake igjen for å avslutta Innstillingar Meny Sett kategoriar @@ -95,26 +94,12 @@ Fram Liste App tema - Tidsstemplar - Relative tidsstemplar - Stutt (i dag, i går) - Lang (Stutt+, n dagar sidan) Datoformat - Stadfest avslutning Handter varslingar Sikkerheit Alltid Aldri - - Etter %1$s minutt - Etter %1$s minuttar - NSFW (18+) kjeder - I dag - - I går - %1$d dagar sidan - Skjerm Element per rad Automatisk oppdateringar @@ -125,10 +110,6 @@ Avgrensingar: %s Sjå etter nye omslag og detaljar ved oppdatering av bibliotek Alltid spør - - %d kategori - %d kategoriar - Alle Ingen Inkluder: %s @@ -192,11 +173,6 @@ G B A - Ingen - 5% - 10% - 15% - 20% Høgaste Høg Låg @@ -215,10 +191,6 @@ Gjenopprett bibliotek frå reservekopifil Gjenoppretting fullført %02d min, %02d sek - - Gjort på %1$s med %2$s feil - Gjort på %1$s med %2$s feil - Kva ønskjer du å ta reservekopi av\? Lagar reservekopi Gjenoppretter reservekopi @@ -255,7 +227,6 @@ Sporing Kunne ikkje lasta ned kapittel grunna uventa feil Global oppdatering - Nyleg Liggjande Av Kvar sjette time @@ -264,15 +235,12 @@ Uoffisiell Denne utvidinga er ikkje lengre tilgjengeleg. Kan innehalda NSFW (18+) innhald - 25% Manga i utelatne kategoriar vil ikkje bli nedlasta sjølv om dei òg er i inkluderte kategoriar. - Automatisk reservekopiar Reservekopifrekvens Avbroten gjenoppretting Manglande kjelder: Sporingstenester ikkje logga inn i: Nokre produsentar har ytterlegare appavgrensingar som drep bakgrunnstenester. Denne nettstaden har meir info om korleis det kan fiksast. - Sjekk nettstad i WebView Nettstaden Sorter etter Dato diff --git a/i18n/src/commonMain/resources/MR/or/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/or/plurals-aniyomi.xml new file mode 100644 index 0000000000..c95755bdfe --- /dev/null +++ b/i18n/src/commonMain/resources/MR/or/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + ପରବର୍ତ୍ତୀ ଅଧ୍ୟାୟ + ପରବର୍ତ୍ତୀ %dଟି ଅଧ୍ୟାୟ + + + ପରବର୍ତ୍ତୀ ଅଦେଖା ଅଧ୍ୟାୟ ଯାକ + ପରବର୍ତ୍ତୀ %dଟି ଅଦେଖା ଅଧ୍ୟାୟ + + + %1$sଟିଏ ଅଧ୍ୟାୟ + %1$sଟି ଅଧ୍ୟାୟ + + + 1 ଆଖ୍ୟା ପାଇଁ + %dଟି ଆଖ୍ୟା ପାଇଁ + + + ଅଧ୍ୟାୟ %1$s ଏବଂ ଆହୁରି 1 + ଅଧ୍ୟାୟ %1$s ଏବଂ ଆହୁରି %2$dଟି + + + 1 ନୂଆ ଅଧ୍ୟାୟ + %1$dଟି ନୂଆ ଅଧ୍ୟାୟ + + + + + + \ No newline at end of file diff --git a/i18n/src/main/res/values-or/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/or/strings-aniyomi.xml similarity index 88% rename from i18n/src/main/res/values-or/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/or/strings-aniyomi.xml index 4657bd315a..079f65d46f 100644 --- a/i18n/src/main/res/values-or/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/or/strings-aniyomi.xml @@ -52,14 +52,6 @@ ପୃଷ୍ଠା ୨ ଅଧ୍ୟାୟ ସଂଖ୍ୟା ଅନୁଯାୟୀ %1$d%% - - ପରବର୍ତ୍ତୀ ଅଧ୍ୟାୟ - ପରବର୍ତ୍ତୀ %dଟି ଅଧ୍ୟାୟ - - - ପରବର୍ତ୍ତୀ ଅଦେଖା ଅଧ୍ୟାୟ ଯାକ - ପରବର୍ତ୍ତୀ %dଟି ଅଦେଖା ଅଧ୍ୟାୟ - ଅଧ୍ୟାୟଗୁଡ଼ିକ ଦେଖନ୍ତୁ ଚାଳକ ଅଧ୍ୟାୟ %1$s ଏବଂ ଆହୁରି %2$d @@ -83,27 +75,15 @@ ଉପଶୀର୍ଷକ ସ୍କ୍ରୀନ୍‌ସଟ୍ ନେବା ଡାଉନଲୋଡ୍ ହୋଇଥିବା ଅଧ୍ୟାୟଗୁଡ଼ିକୁ ବିଲୋପ କରିବେ ତ\? - - %1$sଟିଏ ଅଧ୍ୟାୟ - %1$sଟି ଅଧ୍ୟାୟ - ଡାଉନଲୋଡ୍ ହୋଇଥିବା ଅଧ୍ୟାୟଗୁଡ଼ିକ ପ୍ରଗତି: %1$s ଅଜଣା ପ୍ରସାର କକ୍ଷ ନୂଆ ଅଧ୍ୟାୟଗୁଡ଼ିକୁ ଡାଉନଲୋଡ୍ କରିବା ସାରିଛନ୍ତି ଅଧ୍ୟାୟ ସଂଖ୍ୟା - - 1 ଆଖ୍ୟା ପାଇଁ - %dଟି ଆଖ୍ୟା ପାଇଁ - ଅଧ୍ୟାୟ ଡାଉନଲୋଡ୍ ବିରତ ହୋଇଛି ଅଧ୍ୟାୟ ମିଳୁନାହିଁ ଅଧ୍ୟାୟ %1$s - - ଅଧ୍ୟାୟ %1$s ଏବଂ ଆହୁରି 1 - ଅଧ୍ୟାୟ %1$s ଏବଂ ଆହୁରି %2$dଟି - ଅଦେଖା ଅଧ୍ୟାୟ ଡାଉନଲୋଡ୍ କରିବା ଅଧ୍ୟାୟ ସେଟିଂ @@ -113,10 +93,6 @@ ଡାଉନଲୋଡ୍ ଚାଲିଛି (%d%%) ଅଦ୍ୟତନ ହୋଇଥିବା ଡିଫଲ୍ଟ ଅଧ୍ୟାୟ ସେଟିଂ ନୂଆ ଅଧ୍ୟାୟ ମିଳିଲା - - 1 ନୂଆ ଅଧ୍ୟାୟ - %1$dଟି ନୂଆ ଅଧ୍ୟାୟ - ପଢ଼ିବାକୁ ଚାହୁଁଛନ୍ତି ଧ୍ୱନି ଏବଂ ଉଜ୍ଜ୍ୱଳତା ଅଙ୍ଗଭଙ୍ଗୀ ସକ୍ଷମ କରିବା ଗତ ଦର୍ଶନ @@ -140,9 +116,5 @@ ଅନିମେ ଦେଖାଅ ଅନିମେ ଗତ ଅନିମେ ଅଦ୍ୟତନ - - - - ଚାଳକ ଖୋଲିବା ସମୟରେ ଚାଳକ ନିୟନ୍ତ୍ରଣ ଲୁଚାଯାଉ \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/pl/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/pl/plurals-aniyomi.xml new file mode 100644 index 0000000000..c1b2554d35 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/pl/plurals-aniyomi.xml @@ -0,0 +1,45 @@ + + + + Następny odcinek + Następne %d odcinki + Następnych %d odcinków + Następnych %d odcinków + + + Dla 1 tytuł + Dla %d tytułów + Dla %d tytułów + Dla %d tytułów + + + 1 Nowy odcinek + %1$d Nowy odcinki + %1$d Nowych odcinków + %1$d Nowych odcinków + + + %d sekunda + %d sekundy + %d sekund + %d sekund + + + Odcinki %1$s i 1 więcej + Odcinki %1$s i %2$d więcej + Odcinki %1$s i %2$d więcej + Odcinki %1$s i %2$d więcej + + + Następny nieobejrzany odcinek + Następne %d nieobejrzane odcinki + Następne %d nieobejrzane odcinki + Następne %d nieobejrzane odcinki + + + %1$s odcinek + %1$s odcinki + %1$s odcinków + %1$s odcinków + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/pl/plurals.xml b/i18n/src/commonMain/resources/MR/pl/plurals.xml new file mode 100644 index 0000000000..da0ed4cb59 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/pl/plurals.xml @@ -0,0 +1,99 @@ + + + + Po %1$s minucie + Po %1$s minutach + Po %1$s minutach + Po %1$s minutach + + + %d kategoria + %d kategorie + %d kategorii + %d kategorii + + + Dostępna aktualizacja rozszerzenia + Dostępne %d aktualizacje rozszerzeń + Dostępne %d aktualizacji rozszerzeń + Dostępne %d aktualizacji rozszerzeń + + + Rozdziały %1$s i jeden więcej + Rozdziały %1$s i %2$d + Rozdziały %1$s i %2$d + Rozdziały %1$s i %2$d + + + %1$d nowy rozdział + %1$d nowe rozdziały + %1$d nowych rozdziałów + %1$d nowych rozdziałów + + + Dla %d wpisu + Dla %d wpisów + Dla %d wpisów + Dla %d wpisów + + + Pozostał %1$s + Pozostało %1$s + Pozostało %1$s + Pozostało %1$s + + + Wykonano w %1$s z %2$s błędem + Wykonano w %1$s z %2$s błędami + Wykonano w %1$s z %2$s błędami + Wykonano w %1$s z %2$s błędami + + + %1$s rozdział + %1$s rozdziały + %1$s rozdziałów + %1$s rozdziałów + + + %d brakujący rozdział + %d brakujące rozdziały + %d brakujących rozdziałów + %d brakujących rozdziałów + + + 1 serwis śledzący + %d serwisy śledzące + %d serwisów śledzących + %d serwisów śledzących + + + Wczoraj + %1$d dni temu + %1$d dni temu + %1$d dni temu + + + Następny nieprzeczytany rozdział + Następne %d nieprzeczytane rozdziały + Następne %d nieprzeczytanych rozdziałów + Następne %d nieprzeczytanych rozdziałów + + + Następny rozdział + Następne %d rozdziały + Następne %d rozdziałów + Następne %d rozdziałów + + + Brakujący %1$s rozdział + Brakujące %1$s rozdziały + Brakuje %1$s rozdziałów + Brakuje %1$s rozdziałów + + + 1 dzień + %d dni + %d dni + %d dni + + \ No newline at end of file diff --git a/i18n/src/main/res/values-pl/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/pl/strings-aniyomi.xml similarity index 92% rename from i18n/src/main/res/values-pl/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/pl/strings-aniyomi.xml index 8f302cd5cf..9060c68832 100644 --- a/i18n/src/main/res/values-pl/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/pl/strings-aniyomi.xml @@ -81,48 +81,6 @@ Edytuj kategorie anime Liczba nie obejrzanych Nie obejrzane - - Następny odcinek - Następne %d odcinki - Następnych %d odcinków - Następnych %d odcinków - - - Dla 1 tytuł - Dla %d tytułów - Dla %d tytułów - Dla %d tytułów - - - 1 Nowy odcinek - %1$d Nowy odcinki - %1$d Nowych odcinków - %1$d Nowych odcinków - - - %d sekunda - %d sekundy - %d sekund - %d sekund - - - Odcinki %1$s i 1 więcej - Odcinki %1$s i %2$d więcej - Odcinki %1$s i %2$d więcej - Odcinki %1$s i %2$d więcej - - - Następny nieobejrzany odcinek - Następne %d nieobejrzane odcinki - Następne %d nieobejrzane odcinki - Następne %d nieobejrzane odcinki - - - %1$s odcinek - %1$s odcinki - %1$s odcinków - %1$s odcinków - Reset Pomiń podsumowanie Pomiń za %d sekund diff --git a/i18n/src/main/res/values-pl/strings.xml b/i18n/src/commonMain/resources/MR/pl/strings.xml similarity index 81% rename from i18n/src/main/res/values-pl/strings.xml rename to i18n/src/commonMain/resources/MR/pl/strings.xml index 478d0ba905..94df91573a 100644 --- a/i18n/src/main/res/values-pl/strings.xml +++ b/i18n/src/commonMain/resources/MR/pl/strings.xml @@ -1,13 +1,14 @@ + Kategorie Rozdziały Nazwa Historia Ustawienia + Kolejka pobierania Historia Ustawienia - Filtrowanie - Pobrane + Filtry Nieprzeczytane Szukaj Zaznacz wszystko @@ -15,7 +16,7 @@ Aktualizacje Kopia zapasowa i przywracanie Zakładki - Usuń filtrowanie + Usuń filtr Ostatnio czytane Oznacz jako przeczytane Oznacz jako nieprzeczytane @@ -61,6 +62,8 @@ Rozmiar siatki Usuń z biblioteki Rozdział %1$s + Błąd + Wstrzymane Pobierz Pobierz nieprzeczytane Czy na pewno chcesz usunąć wybrane rozdziały? @@ -81,14 +84,14 @@ Wybierz okładkę Pobierz Brak nowych aktualizacji - Szukanie aktualizacji… Pobieranie… - Naciśnij, by zainstalować + Naciśnij, by zaktualizować Błąd pobierania Dostępna nowa wersja! Twoja biblioteka jest pusta Błąd Podczas pobierania rozdziału wystąpił nieoczekiwany błąd + Wstrzymano pobieranie Alfabetycznie Śledzenie Reset @@ -117,6 +120,7 @@ Ograniczenia sprzętowe dla automatycznych aktualizacji Podczas ładowania Ukończone serie + Domyślna kategoria Zawsze pytaj Pełny ekran Animacje przejścia stron @@ -133,7 +137,7 @@ Od lewej do prawej Od prawej do lewej Pionowy - Web-komiks + Długi pasek Domyślny styl czytania Dopasuj do ekranu Rozciągnij @@ -164,7 +168,7 @@ 4 rozdziały do tyłu 5 rozdziałów do tyłu Pobieraj nowe rozdziały - Manga + Biblioteka Śledzenie Nawigacja Utwórz kopię zapasową @@ -174,7 +178,6 @@ Lokalizacja kopii zapasowych Częstotliwość tworzenia kopii Maks. ilość kopii automatycznych - Automatyczna kopia zapasowa Co zawrzeć w kopii zapasowej? Przywracanie kopii zapasowej Tworzenie kopii zapasowej @@ -183,12 +186,13 @@ Podczas czyszczenia wystąpił błąd Usuń ciasteczka Ciasteczka usunięte + Usuń historię wpisów, których nie ma w twojej bibliotece + Wyczyść bazę danych Wysyłaj raporty o awariach Pomaga naprawiać błędy. Żadne wrażliwe dane nie będą wysyłane Utworzono kopię zapasową Przywracanie ukończone Pozycje usunięte - Odśwież dane śledzenia Zalogowano Źródło lokalne Nieukończone @@ -202,12 +206,13 @@ Status Usunięto kategorie To usunie datę przeczytania tego rozdziału. Na pewno? + Dodać do biblioteki\? Filtr niestandardowy Nie udało się wczytać obrazka Ustawić ten obrazek jako okładkę\? Nie udało się pobrać rozdziałów. Możesz spróbować ponownie w sekcji pobierania Nie udało się zaktualizować okładki - Zanim to zrobisz, dodaj tę mangę do biblioteki + Zanim to zrobisz, dodaj ten wpis do biblioteki Wybierz plik kopii zapasowej Brak pobieranych rozdziałów Brak ostatnio zaktualizowanych @@ -222,7 +227,6 @@ Zwykły Najnowsze Pobrane rozdziały - Lokalna Nie masz żadnych kategorii. Dotknij plusa, aby je utworzyć i zorganizować swoją bibliotekę. Rozszerzenia Zainstaluj @@ -252,7 +256,6 @@ Nie zainstalowano źródła: %1$s Czytane ponownie Status - Rozpoczęto Typ Przeczytany: Obecny: @@ -265,7 +268,7 @@ Otwórz używając WebView Kolor 32-bitowy Pomiń rozdziały ozn. jako przeczytane - Pokaż po przytrzymaniu + Pokaż akcje po przytrzymaniu Tryb mieszania kolorów Nakładka Pomnożenie @@ -280,34 +283,24 @@ Odśwież Biblioteka Przestarzałe - To rozszerzenie nie jest już dostępne. + To rozszerzenie nie jest już dostępne i może nie funkcjonować prawidłowo, powodując problemy z aplikacją. Zalecamy odinstalowanie go. Format daty - Aktualizacje + Globalna aktualizacja Wylogować z %1$s\? Wyloguj Wylogowano Wstrzymane - 25% - 20% - 15% - 10% - Brak Zawsze pokazuj przejścia rozdziałów - Pionowo bez przerw + Pionowo z przerwami Pomijaj odfiltrowane rozdziały Wyświetlanie Ukryj zawartość powiadomienia Zablokuj podczas bezczynności + Aktualizacje rozdziałów Zaktualizuj aplikację WebView dla lepszej kompatybilności Nie udało się obejść Cloudflare Więcej Ukrywa zawartość ekranu przy przełączaniu między aplikacjami i blokuj zrzuty ekranu - - Po %1$s minucie - Po %1$s minutach - Po %1$s minutach - Po %1$s minutach - Nigdy Zawsze Wymagaj odblokowania @@ -321,7 +314,6 @@ Przenieś na górę Najstarsze Najnowsze - Zmień kolejność Anuluj wszystko Odwróć zaznaczenie Ostatni rozdział @@ -332,9 +324,8 @@ Dla tej serii Mniej Dodaj do biblioteki - Sprawdź stronę w WebView Adres e-mail - Filtruje wszystkie mangi w twojej bibliotece + Filtruje wszystkie pozycje w twojej bibliotece Tylko pobrane Sprawdź aktualizacje Licencje open source @@ -346,22 +337,13 @@ Kopia zapasowa jest w trakcie przywracania Kopia zapasowa jest już w trakcie tworzenia %02d min, %02d s - Wyszukaj tylko w przypiętych źródłach Marginesy boczne Szary Ogranicza banding, ale może mieć wpływ na wydajność Dostępne aktualizacje - - %d kategoria - %d kategorie - %d kategorii - %d kategorii - Ukryj ekran - Potwierdź wyjście Odepnij Przypnij - Wciśnij wstecz ponownie, aby wyjść Więcej Rozdz. %1$s - %2$s W bibliotece @@ -369,41 +351,11 @@ Ostatnio używane Przesyłanie postępu czytania do zewnętrznego serwisu. Ustaw śledzenie guzikiem \"Śledzenie\" w wybranych tytułach. Aktualizacje rozszerzeń - - Dostępna aktualizacja rozszerzenia - Dostępne %d aktualizacje rozszerzeń - Dostępne %d aktualizacji rozszerzeń - Dostępne %d aktualizacji rozszerzeń - - - Rozdziały %1$s i jeden więcej - Rozdziały %1$s i %2$d - Rozdziały %1$s i %2$d - Rozdziały %1$s i %2$d - Rozdziały %1$s Rozdział %1$s i %2$d więcej - - %1$d nowy rozdział - %1$d nowe rozdziały - %1$d nowych rozdziałów - %1$d nowych rozdziałów - - - Dla %d tytułu - Dla %d tytułów - Dla %d tytułów - Dla %d tytułów - Poszukiwanie nowych rozdziałów Tryb czytania Źródła lokalne - poradnik - - Pozostał %1$s - Pozostało %1$s - Pozostało %1$s - Pozostało %1$s - Pokazuj zawartość w strefie odcięcia Przeglądaj rozdziały Dodaj śledzenie @@ -411,19 +363,13 @@ Odśwież okładki w bibliotece Przywracanie kopii zapasowej zakończone niepowodzeniem Tworzenie kopii zapasowej zakończone niepowodzeniem - - Wykonano w %1$s z %2$s błędem - Wykonano w %1$s z %2$s błędami - Wykonano w %1$s z %2$s błędami - Wykonano w %1$s z %2$s błędami - Czytane - Te rozszerzenie nie jest na liście oficjalnych rozszerzeń Tachiyomi. + Te rozszerzenie nie jest na liście oficjalnych rozszerzeń. Nieoficjalne Po dacie dodania Dane Brakujące źródła: - Kopia zapasowa nie zawiera żadnych mang. + Kopia zapasowa nie zawiera żadnych wpisów. Nieprawidłowy plik kopii zapasowej Sprawdź, czy są nowe okładki i opisy podczas aktualizowania biblioteki Automatycznie odświeżaj metadane @@ -446,12 +392,6 @@ Horyzontalnie Brak Odwróć strefy kliknięcia - - %1$s rozdział - %1$s rozdziały - %1$s rozdziałów - %1$s rozdziałów - Nieznany status Nieznany autor Szukaj \"%1$s\" globalnie @@ -466,22 +406,9 @@ Błędy Ukończone Postęp - Pobieranie ukończone Zaktualizowano domyślne ustawienia rozdziałów Instrukcja przenoszenia źródeł - - %d brakujący rozdział - %d brakujące rozdziały - %d brakujących rozdziałów - %d brakujących rozdziałów - %1$s: %2$s, strona %3$d - - 1 serwis śledzący - %d serwisy śledzące - %d serwisów śledzących - %d serwisów śledzących - Nie znaleziono rozdziałów Ustaw jako domyślne Jesteś pewien, że chcesz zapisać te ustawienia jako domyślne\? @@ -533,20 +460,19 @@ Brak Ta wersja Androida nie jest już wspierana Nie udało się skopiować do schowka + Tytuły w wykluczonych kategoriach nie będą aktualizowane, nawet jeśli są również w uwzględnionych kategoriach. Tytuły w wykluczonych kategoriach nie będą pobierane, nawet jeśli są również w uwzględnionych kategoriach. Automatyczne pobieranie Poziomo Pionowo - Kliknij, by wyświetlić detale + Kliknij aby wyświetlić szczegóły Wyłącz tryb incognito Data pobrania rozdziału Nie znaleziono pasującego wyniku Źródło nie jest wspierane Nieprzeczytane Orientacja ekranu - Automatyczne - Utwórz foldery względem tytułów - Zapisz strony do osobnych folderów + Automatycznie Akcje Odcienie szarości Anuluj wszystko dla tego tytułu @@ -554,8 +480,6 @@ Sortowanie Błędny format rozdziału Nie znaleziono rozdziału - Automatycznie odświeżaj serwisy śledzące - Aktualizuj serwisy śledzące podczas aktualizacji biblioteki Błąd przy udostępnianiu okładki Błąd przy zapisie okładki Okładka zapisana @@ -563,12 +487,12 @@ Przewodnik śledzenia postępu Wyłączone Włączone - Ustawienia wyświetlania dla kategorii i sortowania + Ustawienia sortowania dla każdej kategorii + Lokalne źródło Nie masz jeszcze żadnych kategorii. Ograniczenia: %s Niektórzy producenci mają dodatkowe ograniczenia, które zabijają usługi działające w tle. Ta strona zawiera więcej informacji na ten temat. Zacznij pobierać teraz - Aktualizowanie biblioteki… (%1$d/%2$d) Zielone jabłko Dynamiczny Motyw aplikacji @@ -579,24 +503,15 @@ Truskawkowe daiquiri Czułość ukrywania dolnego paska podczas przewijania Tako - - Wczoraj - %1$d dni temu - %1$d dni temu - %1$d dni temu - - Długi (Krótki+, n dni temu) - Krótki (Dzisiaj, Jutro) Aktywność w tle Śledź - Znaczniki czasowe Wygląd Autoryzuj, aby potwierdzić zmianę Domyślny Wprowadzenie - poradnik Pomóż tłumaczyć - Ten tracker jest kompatybilny tylko ze źródłem Komga. Wymuś UI dla tabletu + Wykluczone kategorie Najniższe Niskie Wysokie @@ -604,7 +519,6 @@ Odwrócone Informacje o aplikacji Dzisiaj - Ostatnio Błękitny & Turkusowy Zmierzch północy Ostrzeżenie: duże aktualizacje biblioteki mogą prowadzić do zwiększonego zużycia baterii oraz spowolnienia działania źródeł. Kliknij, by dowiedzieć się więcej. @@ -614,8 +528,8 @@ Instalowanie rozszerzenia… Shizuku nie jest aktywne Zapisuje szczegółowe logi w logu systemu (obniża wydajność aplikacji) - Automatyczne kopie zapasowe są wysoce zalecane. Radzimy również przechowywać kopie w innych miejscach. - Ilość mang + Radzimy przechowywać kopie również w innych miejscach. + Ilość wejść Język Ostrzeżenie Co 3 dni @@ -625,27 +539,24 @@ Aktualizacje aplikacji Zaktualizuj wszystko Przestarzały - Relatywne znaczniki czasowe Nie można uzyskać listy rozszerzeń Opublikowane w całości - Baza danych wyczyszczona + Nie ma nic do wyczyszczynia Anulowane Przerwa wydawnicza Aby uzyskać pomoc z błędami aktualizacji biblioteki, zobacz %1$s Zapisz jako archiwum CBZ Polityka prywatności - %1$d mang spoza biblioteki w bazie danych + %1$d wpisów spoza biblioteki w bazie danych Pomiń aktualizowanie tytułów FAQ i poradniki Brak przeczytanych rozdziałów - 5% - Przybliżaj poziome obrazy + Automatycznie przybliżaj poziome obrazy Przesuń szeroki obraz Siatka z samych okładek - Pominięto - brak przeczytanych rozdziałów - Pominięto ponieważ seria została ukończona - Pominięto ponieważ istnieją nieprzeczytane rozdziały - Rozpoczęto + Pominięto, ponieważ brak przeczytanych rozdziałów + Pominięto, ponieważ seria została ukończona + Pominięto, ponieważ istnieją nieprzeczytane rozdziały Pominięty %1$d pominięto aktualizację(-e) %1$d aktualizacja (aktualizacje) nie powiodła się @@ -674,7 +585,6 @@ Nie znaleziono źródła Nie znaleziono zainstalowanego źródła Cóż, to troszkę niezręczne - Kiedy poziom baterii nie jest niski Język Lista czytanych Nowa wersja jest dostępna z oficjalnych wydań. Naciśnij, by dowiedzieć się jak przeprowadzić migrację z nieoficjalnych wydań F-Droid. @@ -686,8 +596,6 @@ Strona %d nie została znaleziona podczas podziału Oznaczenie wiekowe Do góry nogami - Pokaż zduplikowane przypięte źródła - Duplikuj przypięte rozszerzenia w ich grupach językowych Nie można było znaleźć ścieżki %d strony Domyślny user agent string Zresetuj domyślny user agent string @@ -701,22 +609,64 @@ Tsunami Pobierz z wyprzedzeniem Pobieraj podczas czytania - Zobacz ostatnio zaktualizowane mangi + Zobacz ostatnio zaktualizowane wpisy Widżet nie jest dostępny kiedy blokada aplikacji jest włączona - - Następny nieprzeczytany rozdział - Następne %d nieprzeczytane rozdziały - Następne %d nieprzeczytanych rozdziałów - Następne %d nieprzeczytanych rozdziałów - Jesteś pewien\? - Działa tylko na wpisach w bibliotece oraz jeśli aktualny rozdział i następny są już pobrane - Wielojęzykowe - Dziel wysokie obrazy (BETA) + Działa tylko, jeśli aktualny i następny rozdział są już pobrane. + Wielojęzyczne Popularne - Biblioteka ostatnio aktualizowana: %1$s - Zamierzasz usunąć tę mangę ze swojej biblioteki -Kolejka pobierania + Biblioteka ostatnio aktualizowana: %s + Zamierzasz usunąć \"%s\" ze swojej biblioteki + Statystyki + Rozpoczęte + Lokalne + Pobrane + %s napotkał nieoczekiwany błąd. Sugerujemy podzielenie się logami crasha, a następnie udostępnienie ich na naszym kanale wsparcia na Discordzie. + Tryb czytania, wyświetl, nawigacja + Nieprawidłowa lokalizacja: %s + Jednokierunkowa synchronizacja postępu, ulepszona synchronizacja + Źródła, rozszerzenia, globalne wyszukiwanie + Blokada aplikacji, bezpieczny ekran + Tło, data & format czasu + Zrzuć logi, optymalizacje baterii + Nie przyznano uprawnień do przechowywania + Manualna & automatyczna kopia + Czas odczytu + Wpisy + W globalnej aktualizacji + Śledzenie + Nieznany tytuł + Przed chwilą + Ups! + Usunąć datę\? + To spowoduje usunięcie wcześniej wybranej daty zakończenia z %s + Nieprawidłowy ciąg agenta użytkownika + Uruchom ponownie aplikację + Nie teraz + Przegląd + Zakończone wpisy + Razem + Szukaj… + Otwórz losową pozycję + Kategorie, aktualizacja globalna, przesunięcie rozdziału + Unieważnij indeks pobierania + Kompilacje F-Droid nie są oficjalnie obsługiwane. +\nNaciśnij, aby dowiedzieć się więcej. + Przeczytane + Automatyczne pobieranie, pobierz wstępnie + To spowoduje usunięcie wcześniej wybranej daty rozpoczęcia z %s + N/A + %dd + %d godz. + %d minut + %d sekund + Używane + Śledzone pozycje + Średnia ocena + Pominięto, ponieważ aktualizacja nie jest wymagana + Nie znaleziono wpisów w tej kategorii + Sprawdzanie pobranych plików + Kategoria jest pusta Skopiowano do schowka Masz w swojej bibliotece pozycję o tej samej nazwie. \n @@ -727,26 +677,35 @@ *wymagane Ukryj pozycje znajdujące się już w bibliotece Kopiuj do schowka - - Następny rozdział - Następne %d rozdziały - Następne %d rozdziałów - Następne %d rozdziałów - Aktualizuj kategorię Dziel długie obrazy Nakładka Dopasuj szerokie strony Zmień orientację obróconych obrazów Informacje debugowania - - Brakujący %1$s rozdział - Brakujące %1$s rozdziały - Brakuje %1$s rozdziałów - Brakuje %1$s rozdziałów - %d na rząd Dotknij dwukrotnie, aby powiększyć Przesuń palcem w prawo Przesuń palcem w lewo - \ No newline at end of file + Przesunięcie rozdziału + Ustaw interwał + Następna spodziewana aktualizacja + Aktualizuj co + Synchronizowanie biblioteki + Nie można wykonać kopi zapasowej + Interwały + Usuń też z %s + HTTP %d, otwórz w WebView + Brak połączenia z internetem + Nie można połączyć się z %s + Przestań śledzić %s\? + Usuń pobrane + Synchronizacja biblioteki zakończona + Indeksy pobrań unieważnione + Naciśnij tutaj aby uzyskać pomoc dotyczącą Cloudflare + Odblokuj %s + Dostosowany interwał aktualizacji + W miesiącu (28 dni) + OK + To usunie śledzenie lokalne. + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/pt-rBR/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/pt-rBR/plurals-aniyomi.xml new file mode 100644 index 0000000000..b2601205a5 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/pt-rBR/plurals-aniyomi.xml @@ -0,0 +1,38 @@ + + + + %1$s episódio + %1$s episódios + %1$s episódios + + + 1 novo episódio + %1$d novos episódios + %1$d novos episódios + + + %d segundo + %d segundos + %d segundos + + + Episódios %1$s e mais 1 + Episódios %1$s e %2$d mais + Episódios %1$s e %2$d mais + + + Próximos episódios não vistos + Próximos %d episódios não vistos + Próximos %d episódios não vistos + + + Para 1 título + Para %d títulos + Para %d títulos + + + Próximo episódio + Próximos %d episódios + Próximos %d episódios + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/pt-rBR/plurals.xml b/i18n/src/commonMain/resources/MR/pt-rBR/plurals.xml new file mode 100644 index 0000000000..8e6c0c1072 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/pt-rBR/plurals.xml @@ -0,0 +1,83 @@ + + + + Por %1$s minuto + Por %1$s minutos + Por %1$s minutos + + + %1$d capítulo novo + %1$d capítulos novos + %1$d capítulos novos + + + Capítulos %1$s e mais 1 + Capítulos %1$s e mais %2$d + Capítulos %1$s e mais %2$d + + + Para %d item + Para %d itens + Para %d itens + + + Atualização de extensão disponível + %d atualizações de extensão disponíveis + %d atualizações de extensão disponíveis + + + %1$s restante + %1$s restantes + %1$s restantes + + + %d categoria + %d categorias + %d categorias + + + Concluído em %1$s com %2$s erro + Concluído em %1$s com %2$s erros + Concluído em %1$s com %2$s erros + + + %1$s capítulo + %1$s capítulos + %1$s capítulos + + + %d monitorador + %d monitoradores + %d monitoradores + + + Pulando %d capítulo, ou ele está faltando na fonte, ou ele foi filtrado + Pulando %d capítulos, ou eles estão faltando na fonte, ou eles foram filtrados + Pulando %d capítulos, ou eles estão faltando na fonte, ou eles foram filtrados + + + Ontem + %1$d dias atrás + %1$d dias atrás + + + Próximo capítulo não lido + Próximos %d capítulos não lidos + Próximos %d capítulos não lidos + + + Próximo capítulo + Próximos %d capítulos + Próximos %d capítulos + + + Faltando %1$s capítulo + Faltando %1$s capítulos + Faltando %1$s capítulos + + + %d dia(s) + %d dias + %d dias + + \ No newline at end of file diff --git a/i18n/src/main/res/values-pt-rBR/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/pt-rBR/strings-aniyomi.xml similarity index 93% rename from i18n/src/main/res/values-pt-rBR/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/pt-rBR/strings-aniyomi.xml index d07987713d..5e6ed4e394 100644 --- a/i18n/src/main/res/values-pt-rBR/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/pt-rBR/strings-aniyomi.xml @@ -98,11 +98,6 @@ Episódio não encontrado Formato de episódio inválido Estúdio desconhecido - - %1$s episódio - %1$s episódios - %1$s episódios - Excluir episódios baixados\? Adicionar mangá à biblioteca\? Adicionar anime à biblioteca\? @@ -139,21 +134,11 @@ Aviso: grandes downloads em massa podem tornar as fontes mais lentas e/ou começarem a bloquear o Aniyomi. Toque para saber mais. Nenhum vídeo encontrado Novos episódios encontrados - - 1 novo episódio - %1$d novos episódios - %1$d novos episódios - Nada assistido recentemente A WebView é necessária para Aniyomi Download pausado Atualizações de capítulo/episódio +%1$d s - - %d segundo - %d segundos - %d segundos - Próximo episódio não encontrado! Mangá Anime @@ -185,11 +170,6 @@ Episódio %1$s Episódio %1$s e %2$d mais Episódios %1$s - - Episódios %1$s e mais 1 - Episódios %1$s e %2$d mais - Episódios %1$s e %2$d mais - Configurações do episódio Opções de backup Extensões de Mangá @@ -238,11 +218,6 @@ Lembrar e mudar para o último brilho usado Lembrar e mudar para o último volume usado Editar o arquivo de configuração do MPV para obter mais configurações do reprodutor - - Próximos episódios não vistos - Próximos %d episódios não vistos - Próximos %d episódios não vistos - Esta extensão não está na lista oficial de extensões do Aniyomi. Mostrar conteúdo no recorte de exibição Ativar Gestos de Volume e Brilho @@ -267,16 +242,6 @@ Estilo de navegação inferior Retrato (Sensor) Mostrar toasts de episódios ao alternar episódios no modo PiP - - Para 1 título - Para %d títulos - Para %d títulos - - - Próximo episódio - Próximos %d episódios - Próximos %d episódios - Escolher qualidade do vídeo: Link de qualidade de vídeo copiado para a área de transferência Configurações da extensão diff --git a/i18n/src/main/res/values-pt-rBR/strings.xml b/i18n/src/commonMain/resources/MR/pt-rBR/strings.xml similarity index 84% rename from i18n/src/main/res/values-pt-rBR/strings.xml rename to i18n/src/commonMain/resources/MR/pt-rBR/strings.xml index 5d61e22095..c61e540405 100644 --- a/i18n/src/main/res/values-pt-rBR/strings.xml +++ b/i18n/src/commonMain/resources/MR/pt-rBR/strings.xml @@ -1,18 +1,19 @@ Nome - Mangás + Categorias + Itens da biblioteca Capítulos Monitoramento Histórico Configurações + Fila de downloads Biblioteca Histórico Atualizações Backup e restauração Configurações Filtrar - Disponível offline Favorito Não lido Remover filtros @@ -78,6 +79,7 @@ Restrições do dispositivo para atualizações automáticas Quando carregando Com o estado \"Completo\" + Categoria padrão Sempre perguntar Tela cheia Animar as transições de página @@ -109,7 +111,7 @@ Esquerda Direita Centro - Tipo de orientação padrão + Orientação padrão Automática Retrato bloqueado Paisagem bloqueado @@ -126,15 +128,14 @@ Quarto capítulo lido antes do último Quinto capítulo lido antes do último Fazer download de novos capítulos - Serviços + Monitoradores Criar backup Pode ser usado para restaurar a biblioteca atual Restaurar backup Restaura a biblioteca de um arquivo de backup Local de backup - Backups automáticos - Frequência de backup - Máximo de backups + Frequência de backup automático + Máximo de backups automáticos Backup criado Restauração concluída Do que você deseja fazer backup\? @@ -145,8 +146,9 @@ Ocorreu um erro ao limpar Limpar os cookies Cookies limpos + Limpar o banco de dados + Exclui o histórico de itens que não estão salvos em sua biblioteca Entradas excluídas - Atualizar o monitoramento Versão Enviar relatórios de erro Ajuda a corrigir eventuais erros. Nenhum dado sensível será enviado @@ -166,6 +168,8 @@ Excluir os capítulos disponíveis offline\? Capítulo %1$s Fazendo download (%1$d/%2$d) + Erro + Pausado Título da fonte Número do capítulo Pela fonte @@ -185,6 +189,7 @@ Já existe uma categoria com este nome! Categorias excluídas Isso irá remover a data de leitura deste capítulo. Você tem certeza\? + Adicionar à biblioteca\? Imagem salva Filtro personalizado Usar como capa @@ -201,7 +206,6 @@ Selecionar arquivo de backup Fazer download Sem atualizações disponíveis - Procurando por atualizações… Fazendo download… Toque para instalar a atualização Erro ao fazer download @@ -215,6 +219,7 @@ Não foi possível realizar o download do capítulo devido a um erro inesperado Conexão Wi-Fi indisponível Conexão à rede indisponível + Downloads pausados Pesquisa global Outras Pesquisa global… @@ -222,7 +227,6 @@ Navegar Comum Capítulos disponíveis offline - Local Você ainda não tem nenhuma categoria. Toque no botão Adicionar para criar uma e organizar a sua biblioteca. Migrar Extensões @@ -252,7 +256,6 @@ Relendo Paginação Estado - Começado Tipo Concluído: Atual: @@ -262,7 +265,7 @@ Não há capítulo anterior Carregando as páginas… Falha ao carregar as páginas: %1$s - Mostrar ao toque longo + Mostrar as ações no toque longo Abrir na WebView Cor de 32 bits Pular os capítulos marcados como lidos @@ -301,31 +304,17 @@ Bloquear quando ocioso Sempre Nunca - - Por %1$s minuto - Por %1$s minutos - Por %1$s minutos - Tela segura Atualizações pendentes Mostrar conteúdo na área de recorte da tela Falha ao contornar o Cloudflare Por favor, atualize o aplicativo de WebView para uma melhor compatibilidade + Atualizações de capítulos A tela segura oculta os conteúdos do aplicativo durante a troca de aplicativos e impede capturas de tela Visualização - - %1$d capítulo novo - %1$d capítulos novos - %1$d capítulos novos - Capítulo %1$s Capítulo %1$s e mais %2$d Capítulos %1$s - - Capítulos %1$s e mais 1 - Capítulos %1$s e mais %2$d - Capítulos %1$s e mais %2$d - Ocultar conteúdo da notificação Verificando por novos capítulos Desativar a otimização de bateria @@ -333,35 +322,18 @@ A otimização de bateria já está desativada Endereço de email Sempre mostrar a transição entre capítulos - - Para %d item - Para %d itens - Para %d itens - Menu - Reordenar Mais novos Mais antigos - Mover para o topo + Mover para o começo Mover para o final - - Atualização de extensão disponível - %d atualizações de extensão disponíveis - %d atualizações de extensão disponíveis - Atualizações de extensões - Verifique o site na WebView Atualizando a biblioteca Leitura Pular os capítulos filtrados Fontes Inverter a seleção Tira longa com lacunas - 25% - 20% - 15% - 10% - Nenhum Margem lateral Fixado Desafixar @@ -371,8 +343,6 @@ Na biblioteca Menos Mais - Confirmar ao sair - Pressione voltar novamente para sair Licenças de código aberto Site Somente disponíveis offline @@ -387,30 +357,14 @@ Guia sobre a fonte local %02d min e %02d seg Filtra todos os itens em sua biblioteca - - %1$s restante - %1$s restantes - %1$s restantes - - Pesquisar somente nas fontes fixadas na pesquisa global Cinza Modo de leitura Para esta série Reduz o efeito de anéis nos degradês, mas pode afetar o desempenho - - %d categoria - %d categorias - %d categorias - Não foi possível abrir as configurações do dispositivo - - Concluído em %1$s com %2$s erro - Concluído em %1$s com %2$s erros - Concluído em %1$s com %2$s erros - - Sincronização unidirecional para atualizar o progresso dos capítulos nos serviços de monitoramento. Configure o monitoramento para itens individuais a partir de seus botões de monitoramento. + Sincronização unidirecional para atualizar o progresso dos capítulos nos serviços monitoradores externos. Configure o monitoramento para itens individuais a partir de seus botões de monitoramento. Atualizar as capas da biblioteca - Esta extensão não é da lista oficial de extensões do Tachiyomi. + Esta extensão não é da lista oficial. Não oficial Pela data de envio Dados @@ -431,11 +385,6 @@ Iniciar Fonte não encontrada Desativar - - %1$s capítulo - %1$s capítulos - %1$s capítulos - Requer o reinício do aplicativo para ter efeito Rede Nenhum @@ -451,13 +400,7 @@ Pesquisar por \"%1$s\" globalmente Modo de leitura Tema - - %d monitorador - %d monitoradores - %d monitoradores - Você não tem fontes fixadas - Download concluído Andamento Concluído Erros @@ -465,11 +408,6 @@ As fontes desta extensão podem ter conteúdo NSFW (+18) +18 Isso não impede que extensões não oficiais ou potencialmente sinalizadas de maneira incorreta apresentem conteúdo NSFW (+18) no aplicativo. - - Pulando %d capítulo, ou ele está faltando na fonte, ou ele foi filtrado - Pulando %d capítulos, ou eles estão faltando na fonte, ou eles foram filtrados - Pulando %d capítulos, ou eles estão faltando na fonte, ou eles foram filtrados - Nenhum capítulo encontrado Configurações padrões de capítulo atualizadas Definir como padrão @@ -521,6 +459,7 @@ Excluir: %s Incluir: %s Data de busca do capítulo + Os itens nas categorias excluídas não serão atualizados mesmo que eles também estejam nas categorias incluídas. Os itens nas categorias excluídas não serão disponibilizados offline mesmo que eles também estejam nas categorias incluídas. Download automático Toque para ver os detalhes @@ -528,13 +467,11 @@ Erro ao copiar para a área de transferência Paisagem Retrato - Cria as pastas usando os títulos dos itens - Salvar as páginas em pastas separadas Ações - Tipo de orientação + Orientação Nível de cinza Desabilitar o modo anônimo - Automático + Auto Cancelar todos para esta série Nenhum resultado encontrado Fonte não suportada @@ -543,20 +480,18 @@ Ordenar por Formato de capítulo inválido Capítulo não encontrado - Atualizar os monitoradores durante a atualização da biblioteca - Atualizar os monitoradores automaticamente Restrições: %s + Fonte local Desligado Ligado Erro ao compartilhar a capa Erro ao salvar a capa Capa salva Capa - Configurações por categoria para ordenação e visualização + Configurações por categoria para ordenação Guia sobre o monitoramento Você não tem categorias ainda. Começar o download agora - Atualizando a biblioteca... (%1$d/%2$d) Algumas fabricantes possuem restrições adicionais de aplicativos que encerram os serviços em segundo plano. Este site possui mais informações sobre como corrigir este problema. O backup e restauração podem não funcionar corretamente se a Otimização da MIUI estiver desabilitada. Modo noturno com preto absoluto @@ -567,9 +502,8 @@ Aurora-da-noite Maçã-verde Tema do aplicativo - Serviços que oferecem recursos aprimorados para fontes específicas. Os itens são automaticamente monitorados quando adicionados em sua biblioteca. - Serviços aprimorados - Este serviço de monitoramento só é compatível com a fonte Komga. + Oferecem recursos aprimorados para fontes específicas. Os itens são automaticamente monitorados quando adicionados em sua biblioteca. + Monitoradores aprimorados Dinâmico Atividade em segundo plano Mais baixa @@ -578,24 +512,15 @@ Mais alta Sensibilidade para ocultar o menu na rolagem Invertido - Longo (Curto+, n dias atrás) - Curto (Hoje, Ontem) - Datas relativas - - Ontem - %1$d dias atrás - %1$d dias atrás - Hoje - Recentemente Azul-petróleo & Turquesa Autentique-se para confirmar a mudança Padrão - Data e hora Aparência Monitorar Guia de introdução Interface de tablet + Categorias ignoradas Ajudar a traduzir Informações O Shizuku não está em execução @@ -609,7 +534,7 @@ Idioma Atualizações com muitos itens prejudicam as fontes e podem deixar as atualizações lentas e aumentar o uso da bateria. Toque para saber mais. Aviso - Você deve manter cópias em outros locais também. + Você deve manter cópias em outros locais também. Backups podem ter informações sensíveis incluindo senhas salvas; tenha cuidado se compartilhar. Somente no Wi-Fi A cada 3 dias Atualizar tudo @@ -625,11 +550,9 @@ Cancelado Em hiato FAQ e Guias - 5% Navegar imagens longas - Dar zoom em imagens horizontais + Dar zoom automaticamente em imagens largas Grade somente com capas - Iniciado Que não tiveram a leitura iniciada Pulado porque a série está finalizada Pulado porque há capítulos não lidos @@ -639,7 +562,7 @@ %1$d atualização(ões) falhou(aram) Toque para saber mais Retrato invertido - Mover série para o topo + Mover série para o começo Desativado Uma nova versão está disponível nos releases oficiais. Toque para saber como migrar dos releases não oficiais do F-Droid. Erro ao salvar a imagem @@ -648,9 +571,6 @@ Limpar os dados da WebView Dados da WebView limpos Fechar - Mostrar fontes fixadas duplicadas - Repete as fontes fixadas em seus respectivos grupos de idioma - Quando a bateria não está fraca Nenhuma fonte instalada foi encontrada Nenhuma fonte encontrada Contagem de não lidos @@ -691,44 +611,63 @@ Onda Tidal Fazer download a frente Download automático durante a leitura - Funciona somente em itens na biblioteca e se o capítulo atual e próximo já estão disponíveis offline - - Próximo capítulo não lido - Próximos %d capítulos não lidos - Próximos %d capítulos não lidos - + Funciona somente se o capítulo atual e próximo já estão disponíveis offline. Você tem certeza\? - Múltiplas - Dividir imagens compridas (BETA) + Múltiplos Última atualização da biblioteca: %s Você está prestes a remover \"%s\" de sua biblioteca Popular Permissões de armazenamento não concedidas Pulado porque a série não requer atualizações Pesquisar… - Idioma do aplicativo, notificações Tema, formato de data e hora Categorias, atualização global, ações do capítulo Modo de leitura, exibição, navegação Download automático, download a frente Sincronização de progresso unidirecional, sincronização aprimorada Fontes, extensões, pesquisa global - Backups manuais e automáticos + Backups manuais e automáticos, espaço de armazenamento Bloqueio do aplicativo, tela segura Exportar registros de travamento, otimizações de bateria - Ocorreu um erro inesperado + Ooops! Reiniciar o aplicativo %s teve um erro inesperado. Nós sugerimos que você compartilhe os registros de travamento em nosso canal de suporte no Discord. Título desconhecido Local inválido: %s Valor de user agent inválido Agora - Indexando os downloads + Verificando os downloads Abrir um item aleatório Nenhum item encontrado nesta categoria Compilações do F-Droid não são suportadas oficialmente. \nToque para saber mais. - Fila de downloads + Remover data\? + Isto irá remover sua data de início selecionada anteriormente no %s + Isto irá remover sua data de término selecionada anteriormente no %s + Invalidar o índice de downloads + Local + Disponíveis offline + Visão geral + Itens completos + Duração de leitura + Itens + Na atualização global + Monitoradores + Usados + %dd + %dh + %dm + Lidos + Itens monitorados + Estatísticas + Iniciados + Total + Avaliação média + N/A + %ds + Agora não + A categoria está vazia + Copiado para a área de transferência Disponíveis, mas a fonte não está instalada: %s Pular capítulos duplicados Você possui um item na sua biblioteca com o mesmo nome. @@ -736,11 +675,6 @@ \nVocê ainda deseja continuar\? Erro em %1$s: %2$s *obrigatório - - Próximo capítulo - Próximos %d capítulos - Próximos %d capítulos - Ocultar títulos que já estão na biblioteca Copiar para a área de transferência Atualizar categoria @@ -748,15 +682,62 @@ Sobreposição Rotacionar páginas largas para caber Inverter a orientação das páginas largas rotacionadas - - Faltando %1$s capítulo - Faltando %1$s capítulos - Faltando %1$s capítulos - Informações de depuração Ações do capítulo Ação de deslizar para a direita Ação de deslizar para a esquerda Toque duplo para dar zoom %d por linha - \ No newline at end of file + Verificação dos últimos 10+ + Próxima atualização esperada + Fora do intervalo de lançamento + Definir intervalo + Personalizar o intervalo de requisições + Requisitar mensalmente (28 dias) + Abandonado\? Últimos 20+ e 2 meses + Intervalo de verificação aprovado + Personalizar intervalo + Pulado porque nenhum lançamento era esperado hoje + Intervalos + Definido para atualizar todo + Estimar todo + OK + Remover o monitoramento do %s\? + Isso irá remover o monitoramento localmente. + Também remover do %s + Deletar os disponíveis offline + Há resultados + Sincronizando a biblioteca + Sincronização da biblioteca finalizada + Toque aqui para obter ajuda com o Cloudflare + Índice de downloads invalidado + Login do monitorador + Não foi possível criar o arquivo do backup + Licenciado - Nenhum capítulo para mostrar + HTTP %d, verifique o site na WebView + Sem conexão de internet + Não foi possível resolver %s + Desbloquear o %s + Mover série para o final + Datas relativas + \"%1$s\" ao invés de \"%2$s\" + Configurações do aplicativo + Atualizando a biblioteca… (%s) + Configurações das fontes + Ordenar as categorias + Você deseja ordenar as categorias alfabeticamente\? + Nenhum arquivo selecionado + Dados e armazenamento + Reduz o efeito fantasma em telas e-ink + Flash branco ao mudar de página + Avaliação no monitorador + Nunca + Último backup automático feito em: %s + Uso de armazenamento + Aplicar + Reverter para o padrão + Nenhum scanlator encontrado + Scanlator + Excluir scanlators + Criar + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/pt/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/pt/plurals-aniyomi.xml new file mode 100644 index 0000000000..10947bd107 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/pt/plurals-aniyomi.xml @@ -0,0 +1,38 @@ + + + + Episódios %1$s e mais 1 + Episódios %1$s e %2$d mais + Episódios %1$s e %2$d mais + + + %d segundo + %d segundos + %d segundos + + + %1$s episódio + %1$s episódios + %1$s episódios + + + 1 novo episódio + %1$d novos episódios + %1$d novos episódios + + + Para 1 título + Para %d títulos + Para %d títulos + + + Próximos episódios não vistos + Próximos %d episódios não vistos + Próximos %d episódios não vistos + + + Próximo episódio + Próximos %d episódios + + + \ 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 new file mode 100644 index 0000000000..ff2ef60efe --- /dev/null +++ b/i18n/src/commonMain/resources/MR/pt/plurals.xml @@ -0,0 +1,83 @@ + + + + Após %1$s minuto + Após %1$s minutos + Após %1$s minutos + + + Capítulos %1$s e 1 mais + Capítulos %1$s e %2$d mais + Capítulos %1$s e %2$d mais + + + Para %d entrada + Para %d entradas + Para %d o acesso + + + %1$d novo capítulo + %1$d novos capítulos + %1$d novos capítulos + + + Atualização de extensão disponível + %d atualizações de extensão disponíveis + %d atualizações de extensão disponíveis + + + %1$s restante + %1$s restantes + %1$s restantes + + + %d categoria + %d categorias + %d categorias + + + Concluído em %1$s com %2$s erro + Concluído em %1$s com %2$s erros + Concluído em %1$s com %2$s erros + + + %1$s capítulo + %1$s capítulos + %1$s capítulos + + + %d rastreador + %d rastreadores + %d rastreadores + + + Ignorando %d capítulo, ou a fonte está em falta ou foi filtrado + Ignorando %d capítulos, ou a fonte está em falta ou foi filtrado + Capítulos %d ignorados, ou a fonte está em falta ou foi filtrado + + + Ontem + Há %1$d dias + Há %1$d dias + + + Próximo capítulo não lido + Próximos %d capítulos não lidos + Próximos %d capítulos não lidos + + + Próximo capítulo + Próximos %d capítulos + Próximos %d capítulos + + + Falta %1$s capítulo + Faltam %1$s capítulos + Faltam %1$s capítulos + + + Um dia + %d dias + %d dias + + \ No newline at end of file diff --git a/i18n/src/main/res/values-pt/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/pt/strings-aniyomi.xml similarity index 92% rename from i18n/src/main/res/values-pt/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/pt/strings-aniyomi.xml index c8fa34303f..5bc5fc4f2c 100644 --- a/i18n/src/main/res/values-pt/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/pt/strings-aniyomi.xml @@ -162,11 +162,6 @@ Episódio %1$s Episódio %1$s e %2$d mais Episódios %1$s - - Episódios %1$s e mais 1 - Episódios %1$s e %2$d mais - Episódios %1$s e %2$d mais - Configurações do episódio Extensões de Mangá Extensões de Anime @@ -234,32 +229,7 @@ Alterar a duração da abertura %s saltado Definir o modo de descodificação de hardware padrão - - %d segundo - %d segundos - %d segundos - - - %1$s episódio - %1$s episódios - %1$s episódios - - - 1 novo episódio - %1$d novos episódios - %1$d novos episódios - - - Para 1 título - Para %d títulos - Para %d títulos - Mostrar conteúdo no recorte de exibição - - Próximos episódios não vistos - Próximos %d episódios não vistos - Próximos %d episódios não vistos - Tempo limite do botão Paisagem (Sensor) Retrato padrão @@ -272,11 +242,6 @@ Saltar recapitulação Saltar MixedOp Ativar salto automático - - Próximo episódio - Próximos %d episódios - - Gravar a captura de ecrã Procurar capítulo Ocultar entradas de manga já na biblioteca diff --git a/i18n/src/main/res/values-pt/strings.xml b/i18n/src/commonMain/resources/MR/pt/strings.xml similarity index 86% rename from i18n/src/main/res/values-pt/strings.xml rename to i18n/src/commonMain/resources/MR/pt/strings.xml index d45921b130..d36b905e66 100644 --- a/i18n/src/main/res/values-pt/strings.xml +++ b/i18n/src/commonMain/resources/MR/pt/strings.xml @@ -1,16 +1,14 @@ Nome - Definições + Fila de Transferências Biblioteca Histórico Atualizações Cópia de segurança e restauração - Definições Filtro - Transferido Não Lido Remover filtro Procurar @@ -38,17 +36,13 @@ Cancelar Ordenar Instalar - A carregar… - - Geral Leitor Transferências Avançado Sobre - - Itens por fila + Tamanho da grade Vertical Horizontal Atualizações automáticas @@ -72,10 +66,10 @@ Branco Preto Modo de leitura padrão - Esquerda para a direita - Direita para a esquerda - Vertical - Webtoon + Paginado (da esquerda para a direita) + Paginado (da direita para a esquerda) + Paginação (vertical) + Página longa Tipo de escala Ajustar ao ecrã Esticar @@ -92,7 +86,6 @@ Livre Vertical bloqueado Horizontal bloqueado - Localização das Transferências Localização personalizada Desativado @@ -101,38 +94,32 @@ Antepenúltimo capítulo lido Quarto capítulo lido antes do último Quinto capítulo lido antes do último - Serviços - Usado: %1$s Cache limpa. %1$d ficheiros foram eliminados Ocorreu um erro ao limpar a cache Limpar cookies Cookies limpos + Limpar base de dados + Exclui o histórico de itens que não estão salvos nasua biblioteca Eliminar entradas - Versão - Enviar relatórios de erro Ajuda a corrigir qualquer erro. Não serão enviados dados sensíveis - Iniciar sessão em %1$s Nome de utilizador Palavra-passe Iniciar sessão Sessão iniciada Erro desconhecido - A atualizar categoria - - Em curso Desconhecido Licenciado Remover da biblioteca - Capítulo %1$s A Transferir (%1$d/%2$d) + Erro Título da fonte Número do capítulo Por fonte @@ -140,7 +127,6 @@ Transferir Não lidos Tem certeza de que deseja eliminar os capítulos selecionados\? - A ler Completo Abandonado @@ -150,40 +136,29 @@ Título Estado Capítulos - Esta ação irá remover a data de leitura deste capítulo. Continuar? Página: %1$d Capítulo seguinte não encontrado - Não foi possível carregar a imagem - - - + A imagem não pôde ser carregada Não foi possível transferir capítulos. Poderá tentar novamente na secção das transferências - Novos capítulos encontrados Por favor adicione à sua biblioteca antes de fazer isto - Selecionar imagem de capa Selecionar ficheiro de cópia de segurança - Transferir Sem atualizações disponíveis - À procura de atualizações… - A transferir… Toque para instalar a atualização Erro na transferência Nova versão disponível! - - Sem transferências Sem atualizações recentes Nada lido recentemente A sua biblioteca está vazia - Erro Não foi possível transferir o capítulo devido a um erro inesperado A ligação Wi-Fi está indisponível + Categorias Itens da biblioteca Monitorização Histórico @@ -206,6 +181,7 @@ Semanalmente Restaurar App não disponível + Categoria padrão Perguntar sempre Atualizar Instalar @@ -229,7 +205,6 @@ Pode ser usado para restaurar a biblioteca atual Restaurar cópia de segurança Restaurar biblioteca a partir de cópia de segurança - Cópias de segurança automáticas Frequência de cópia de segurança Restaurando cópia de segurança Criando cópia de segurança @@ -252,8 +227,6 @@ Abrir em WebView Cores 32-bit Ignorar capítulos marcados como lido - Atualizar monitorização - Local Sem mais resultados Fonte local Outras @@ -266,13 +239,14 @@ Copiado para área de transferência: \n%1$s Fonte não instalada: %1$s + Pausado Monitorização Relendo Estado - Começado Tipo Já existe uma categoria com este nome! Categorias eliminadas + Adicionar à biblioteca\? Imagem guardada Filtro personalizado Usar como capa @@ -306,7 +280,7 @@ Selecione uma fonte da qual migrar Voltar Avançar - Recarregarpref_enable_automatic_extension_updates + Recarregar Biblioteca Obsoleto Esta extensão não está mais disponível. Ela pode não funcionar corretamente e pode causar problemas na app. É recomendado desinstalá-la. @@ -330,25 +304,16 @@ Bloquear quando inativo Sempre Nunca - - Após %1$s minuto - Após %1$s minutos - Após %1$s minutos - Ecrã seguro Atualizações pendentes Mostrar conteúdo na área de corte Falha ao contornar o Cloudflare Por favor, atualize a app de WebView para melhor compatibilidade + Atualizações de capítulos Ecrã seguro esconde os conteúdos da app durante a troca de apps e impedir capturas de ecrã Visualização Capítulo %1$s e %2$d mais Capítulos %1$s - - Capítulos %1$s e 1 mais - Capítulos %1$s e %2$d mais - Capítulos %1$s e %2$d mais - Esconder conteúdo das notificações Verificando por novos capítulos Desativar otimização de bateria @@ -356,40 +321,18 @@ A otimização de bateria já está desativada Endereço de e-mail Mostrar sempre transição entre capítulos - - Para %d entrada - Para %d entradas - Para %d o acesso - Menu - Reordenar Mais novos Mais antigos Mover para o topo Mover para o final - - %1$d novo capítulo - %1$d novos capítulos - %1$d novos capítulos - Capítulo %1$s Atualizações de extensão - - Atualização de extensão disponível - %d atualizações de extensão disponíveis - %d atualizações de extensão disponíveis - Atualizando biblioteca Fixado - Verifique o sítio web no WebView - 25% - 20% - 15% - 10% - Nenhum Preenchimento lateral Lendo - Vertical contínuo + Página longa com espaços Ignorar capítulos filtrados Desafixar Fixar @@ -401,8 +344,6 @@ Restauro já em progresso Cópia de segurança falhou Cópia de segurança já em progresso - Confirmar sair - Pressione novamente para sair Apenas transferidos Cap. %1$s - %2$s Adicionar à monitorização @@ -416,27 +357,11 @@ Licenças de código aberto Filtra todos os itens nasua biblioteca %02d min, %02d seg - Pesquise apenas fontes fixadas na pesquisa global - - %1$s restante - %1$s restantes - %1$s restantes - - Cinzento + Cinza Modo de leitura Para esta série Reduz bandas de cor, mas pode impactar a performance - - %d categoria - %d categorias - %d categorias - Não foi possível abrir as definições do aparelho - - Concluído em %1$s com %2$s erro - Concluído em %1$s com %2$s erros - Concluído em %1$s com %2$s erros - Atualizar capas da biblioteca Sincronização unidirecional para atualizar o progresso dos capítulos nos serviços de monitoramento. Configure o monitoramento para itens individuais a partir dos botões de monitoramento deles. Esta extensão não vem da lista oficial de extensões do Tachiyomi. @@ -465,11 +390,6 @@ Nenhum Inverter zonas toque Fonte não encontrada - - %1$s capítulo - %1$s capítulos - %1$s capítulos - Estado desconhecido Autor desconhecido Requer reinício da app para ter efeito @@ -480,25 +400,14 @@ Modo de leitura Tema Data de adição - - %d rastreador - %d rastreadores - %d rastreadores - Você não possui fontes fixadas Completo Progresso - Transferência concluída Erros Monitorizadores sem sessão iniciada: Fontes desta extensão poderão conter conteúdo NSFW (18+) 18+ Isto não impede extensões não oficiais ou incorretamente marcadas de mostrarem conteúdo NSFW (18+) dentro da app. - - Ignorando %d capítulo, ou a fonte está em falta ou foi filtrado - Ignorando %d capítulos, ou a fonte está em falta ou foi filtrado - Capítulos %d ignorados, ou a fonte está em falta ou foi filtrado - Nenhum capítulo encontrado Definições padrão de capítulo atualizadas Tem certeza de que quer guardar estas definições como padrão\? @@ -529,7 +438,7 @@ Borda Data de conclusão Data de início - Guardar registos de falhas + Compartilhar registros de falha Guarda registos de erros num ficheiro para partilhar com os desenvolvedores Mostrar número de itens Direita e Esquerda @@ -553,13 +462,12 @@ Os itens nas categorias excluídas não serão disponibilizados offline mesmo que eles também estejam nas categorias incluídas. Excluir: %s Incluir: %s + Os itens nas categorias excluídas não serão atualizados mesmo que eles também estejam nas categorias incluídas. Toque para ver detalhes Data de procura do capítulo Horizontal Vertical Tipo de rotação - Cria as pastas usando os títulos dos itens - Guarda páginas em pastas separadas Ações Tons de cinzento Data @@ -590,23 +498,14 @@ Restrições: %s Modo escuro preto puro Yotsuba + Fonte local Ainda não tens nenhuma categoria. - Atualizando biblioteca… (%1$d/%2$d) Nenhuma correspondência encontrada Fonte não é suportada - Serviços que oferecem recursos aprimorados para fontes específicas. Os itens são automaticamente monitorados quando adicionados na sua biblioteca. Serviços melhorados - Atualizar monitorizadores automaticamente - Atualizar monitorizadores ao atualizar biblioteca + Serviços que oferecem recursos aprimorados para fontes específicas. Os itens são automaticamente monitorados quando adicionados na sua biblioteca. + Serviços melhorados Guia de introdução Azul-petróleo e Turquesa - Longo (Curto+, n dias atrás) - Curto (Hoje, Ontem) - Recentemente - - Ontem - Há %1$d dias - Há %1$d dias - Hoje Dinâmico Aviso @@ -627,11 +526,11 @@ Nada para limpar Grandes atualizações prejudicam as fontes e podem levar a atualizações lentas e ainda ao aumento do uso da bateria. Toque para saber mais. Para obter ajuda sobre como corrigir erros de atualização da biblioteca, veja %1$s - Este serviço de monitorização só é compatível com a fonte Komga. Sensibilidade para ocultar menu ao deslocar Alta Baixa Mais baixa + Categorias excluídas Atividade em segundo plano Atualizações da app Pular a atualização de itens @@ -645,19 +544,15 @@ Instalador Legado O Shizuku não está em execução - Data e hora - Data e hora relativas Ajude a traduzir Mais alta Em hiato Publicação concluída Cancelado Perguntas frequentes e Guias - Iniciado Desativado Grelha apenas de capas Fechar - Quando a bateria não está fraca Mover séries para o topo Ignorado porque a séria está completa Ignorado porque nenhum capítulo foi lido @@ -673,13 +568,10 @@ %1$d actualização(ões) falhada(s) Toque para saber mais Uma nova versão está disponível a partir dos lançamentos oficiais. Toque para saber como migrar de versões não oficiais do F-Droid. - Navegar imagens longas ao tocar + Imagens panorâmicas Ampliar imagem horizontal - 5% Abrir no GitHub Erro ao guardar a imagem - Mostrar fontes fixadas duplicadas - Repita as fontes fixadas nos seus respetivos grupos de idiomas Contagem de não lidos Melhora o desempenho do leitor Bem, isto é estranho @@ -692,17 +584,11 @@ Não foi possível encontrar o caminho do ficheiro da página %d O formato RARv5 não é suportado Multi - Dividir imagens altas (BETA) Transferência automática durante leitura Deseja apagar a categoria \"%s\"\? Apagar categoria InternalError: Verifique registos de falhas para mais informações Cadeia de agente de utilizador não pode estar em branco - - Próximo capítulo não lido - Próximos %d capítulos não lidos - Próximos %d capítulos não lidos - Tem a certeza\? Última atualização da biblioteca: %s Veja os seus itens da biblioteca atualizados recentemente @@ -734,7 +620,10 @@ Ignorado porque a série não requer atualizações Pesquisar… Permissões de armazenamento não concedidas - Fila de Transferências + Tema, data e formato de hora + Categorias, atualização global, trocar de capítulo + Modo leitura, exibir, navegação + Abrir mangá aleatório Estatisticas Começado Local @@ -748,7 +637,8 @@ Agora mesmo Reinicie o aplicativo Ops! - %s encontrou um erro inesperado. Sugerimos que você capture esta mensagem, despeje os logs de falha e compartilhe-a em nosso canal de suporte no Discord. + %s encontrou um erro inesperado. Sugerimos que você compartilhe os registros de falha em nosso canal de suporte no Discord. + Descarga automática, descarga a frente Sincronização de progresso unidirecional, sincronização aprimorada Fontes, extensões, pesquisa global Backups manuais e automáticos @@ -787,19 +677,26 @@ Nenhum item encontrado nesta categoria Copiar para a área de transferência Ocultar entradas existentes na biblioteca - - Próximo capítulo - Próximos %d capítulos - Próximos %d capítulos - Atualizar categoria Dividir Imagens altas Sobreposição Girar páginas largas para caber Virar a orientação de páginas largas giradas - - Falta %1$s capítulo - Faltam %1$s capítulos - Faltam %1$s capítulos - - \ No newline at end of file + %d por linha + Ação de deslizar para a esquerda + Toque duplo para aproximar + Definir intervalo + Buscar mensalmente (28 dias) + Fora do período esperado de lançamento + Informações de depuração + Customizar intervalo + Trocar de capítulo + Ação de deslizar para a direita + intervalos + Estimado a cada + Intervalo de busca customizado + Próxima atualização esperada + Definido para atualizar a cada + Pulado, pois nenhum lançamento é esperado para hoje + Deletar dowloand + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ro/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/ro/plurals-aniyomi.xml new file mode 100644 index 0000000000..97f596fd0a --- /dev/null +++ b/i18n/src/commonMain/resources/MR/ro/plurals-aniyomi.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ro/plurals.xml b/i18n/src/commonMain/resources/MR/ro/plurals.xml new file mode 100644 index 0000000000..99aa8b4136 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/ro/plurals.xml @@ -0,0 +1,68 @@ + + + + După %1$s minut + După %1$s minute + După %1$s minute + + + %1$d capitol nou + %1$d capitole noi + %1$d capitole noi + + + Capitolele %1$s și încă unul + Capitolele %1$s și încă %2$d în plus + Capitolele %1$s și încă %2$d mai multe + + + Pentru %d intrare + Pentru %d intrări + Pentru %d intrări + + + Actualizare de extensie disponibilă + %d actualizări de extensii sunt disponibile + %d actualizări de extensii sunt disponibile + + + %1$s rămasă + %1$s rămase + %1$s rămase + + + %d categorie + %d categorii + %d categorii + + + Gata în %1$s cu eroarea %2$s + Gata în %1$s cu %2$s erori + Gata în %1$s cu %2$s erori + + + %1$s capitol + %1$s capitole + %1$s de capitole + + + %d tracker + %d trackere + %d trackere + + + Omiterea %d capitol, fie că sursa lipsește, fie că a fost filtrată + Omiterea a %d capitole, fie că sursa nu le are, fie că au fost filtrate + Omiterea a %d capitole, fie că sursa nu le are, fie că au fost filtrate + + + Ieri + Acum %1$d zile + Acum %1$d zile + + + Următorul capitol necitit + Următoarele %d capitole necitite + Următoarele %d capitole necitite + + \ No newline at end of file diff --git a/i18n/src/main/res/values-ro/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/ro/strings-aniyomi.xml similarity index 76% rename from i18n/src/main/res/values-ro/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/ro/strings-aniyomi.xml index 02e66e49ee..2505c0dbb9 100644 --- a/i18n/src/main/res/values-ro/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/ro/strings-aniyomi.xml @@ -38,39 +38,4 @@ WebView este necesar pentru Tachiyomi Descărcare întreruptă Actualizări de capitole - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-ro/strings.xml b/i18n/src/commonMain/resources/MR/ro/strings.xml similarity index 85% rename from i18n/src/main/res/values-ro/strings.xml rename to i18n/src/commonMain/resources/MR/ro/strings.xml index 281f12dfee..5d982b2441 100644 --- a/i18n/src/main/res/values-ro/strings.xml +++ b/i18n/src/commonMain/resources/MR/ro/strings.xml @@ -1,11 +1,13 @@ Nume - Manga + Categorii + Intrări în bibliotecă Capitole Urmărind Istoric Setări + Descărcări în așteptare Bibliotecă Istoric Actualizări @@ -15,7 +17,6 @@ Informații despre extensie Setări Filtru - Descărcate Marcate Necitite Șterge filtru @@ -81,6 +82,7 @@ Actualizează automat restricțiile dispozitivului La încărcare Cu statutul \"Completată\" + Categorie implicită Întreabă mereu Actualizează Instalează @@ -152,7 +154,6 @@ Restaurează copia de rezervă Restaurează biblioteca din fișierul copiei de rezervă Locația copiei de rezervă - Copii de rezervă create automat Frecventă de creere a copiilor de rezervă Numărul maxim de copii de rezervă Backup creat @@ -165,8 +166,9 @@ A apărut o eroare în timpul ștergerii Curăță cookies Cookies curățate + Curățați baza de date + Ștergeți istoricul pentru intrările care nu sunt salvate în bibliotecă Înregistrări șterse - Reîncărca urmărirea Versiune Trimite rapoarte pt. eșuări Ajută la rezolvarea bug-urilor. Informațiile sensibile nu vor fi trimise @@ -177,7 +179,6 @@ Autentificat Eroare necunoscută Categorie in curs de actualizare - Local Nu mai sunt rezultate Sursă locală Altele @@ -196,6 +197,8 @@ Sursa nu este instalată:%1$s Capitolul %1$s Se descarcă (%1$d/%2$d) + Eroare + Întrerupt Titlul sursei Numărul capitolului După sursă @@ -205,7 +208,7 @@ Sigur doriți să ștergeți capitolele selectate\? Urmărite Citind - Terminată + Completată Abandonată În așteptare Planificat pentru citit @@ -214,18 +217,18 @@ Titlu Status Status - Început Tip O categorie cu acest nume deja există! Categoriile au fost șterse Acest lucru va șterge data citirii acestui capitol. Ești sigur\? + Adăugați la bibliotecă\? Imagine salvată Filtru personalizat Stabilește ca și copertă Copertă actualizată Pagina: %1$d Capitolul următor nu a fost găsit - Imaginea nu a putut să fie încărcată + Imaginea nu a putut să se încarce Folosiți această imagine ca și copertă\? Terminat: Actual: @@ -241,14 +244,13 @@ Nu s-au putut descărca capitole. Puteți încerca din nou în secțiunea descărcări Capitole noi găsite Actualizarea copertei a eșuat - Vă rugăm să adăugați manga în biblioteca dumneavoastră înainte de a face acest lucru + Vă rugăm să adăugați intrarea în biblioteca dumneavoastră înainte de a face acest lucru Selectează imagine de copertă Selectează fișierul de rezervă Descarcă Nu sunt exista actualizări noi - Se caută actualizări… Se descarcă… - Atingeți pentru a instala + Apăsați pentru a instala actualizarea Eroare la descărcare Versiune nouă disponibilă! Fără descărcări @@ -261,6 +263,7 @@ Nu s-a putut descărca capitolul din cauza unei erori neașteptate Nu este disponibilă nicio conexiune Wi Fi Nici o conexiune la internet valabilă + Descărcare întreruptă General Deschide în WebView Culoare 32-bit @@ -280,7 +283,7 @@ Actualizați Biblioteca Învechit - Această extensie nu mai este disponibilă. + Această extensie nu mai este disponibilă. Este posibil să nu funcționeze corect și poate cauza probleme cu aplicația. Se recomandă dezinstalarea acesteia. Formatul datei Actualizare globală Deconectează-te de la %1$s\? @@ -296,36 +299,22 @@ Tema sistemului Gestionați notificările Securitate - Deblocare necesară + Necesită deblocare Ultimul capitol Blocați când este inactiv Întotdeauna Niciodată - - După %1$s minut - După %1$s minute - După %1$s minute - Securizează ecran Actualizări în așteptare Afișare conținut în zona decupată A eșuat evitarea Cloudflare Actualizați aplicația WebView pentru o compatibilitate mai bună + Actualizări de capitole Ecranul securizat ascunde conținutul aplicațiilor la schimbarea aplicațiilor și blochează capturile de ecran Afișare - - %1$d capitol nou - %1$d capitole noi - %1$d capitole noi - Capitolul %1$s Capitolul %1$s și %2$d în plus Capitolele %1$s - - Capitolele %1$s și încă unul - Capitolele %1$s și încă %2$d în plus - Capitolele %1$s și încă %2$d mai multe - Ascunde conținutul notificării Verificând pentru capitole noi Dezactivați optimizarea bateriei @@ -333,36 +322,19 @@ Optimizarea bateriei este deja dezactivată Adresa de e-mail Arată întotdeauna tranziția capitolului - - Pentru %d titlu - Pentru %d titluri - Pentru %d titluri - Meniu - Reordonează Cele mai recente Cele mai vechi Mută pe primă poziție Mută pe ultima poziție Actualizări de extensie - - Actualizare de extensie disponibilă - %d actualizări de extensii sunt disponibile - %d actualizări de extensii sunt disponibile - - Verificați site-ul în WebView Se actualizează biblioteca Citind Săriți peste capitolele filtrate Surse Selectează invers Vertical continuu - Fără Fixate - 25% - 20% - 15% - 10% Căptușeală laterală Anulați fixarea Fixează @@ -376,8 +348,6 @@ Pagină web Restaurarea copiei de rezervă a eșuat Crearea copiei de rezervă a eșuat - Confirmare ieșire - Apăsați din nou pentru a ieși Doar descărcate Restaurare anulată Restaurarea este deja în curs de desfășurare @@ -386,33 +356,17 @@ Data ultimei utilizări Verifică pentru actualizări %02d minute, %02d secunde - Filtrează toate manga-urile din bibliotecă - - %1$s rămasă - %1$s rămase - %1$s rămase - - Includeți numai surse fixate + Filtrează toate intrările din bibliotecă Mod de citire Pentru această serie Gri Reduce banding-ul, dar poate avea un impact asupra performanței - - %d categorie - %d categorii - %d categorii - Imposibil de deschis setările dispozitivului - - Gata în %1$s cu eroarea %2$s - Gata în %1$s cu %2$s erori - Gata în %1$s cu %2$s erori - - Sincronizare unidirecțională pentru actualizarea progresului capitolului în cadrul serviciilor de urmărire. Configurați urmărirea pentru intrările manga individuale din butonul de urmărire al acestora. + Sincronizare unidirecțională pentru actualizarea progresului capitolului în cadrul serviciilor de urmărire. Configurați urmărirea pentru intrările individuale din butonul de urmărire al acestora. Reîmprospătarea coperților bibliotecii După data încărcării Surse lipsă: - Copia de rezerva nu conține nici o manga. + Copia de rezervă nu conține nicio intrare în bibliotecă. Verifica dacă exista copertă și detalii noi când biblioteca este actualizată Actualizează metadata-ul automat Grilă confortabilă @@ -430,11 +384,6 @@ Arată modul de citire Reţea Nu s-a găsit sursa - - %1$s capitol - %1$s capitole - %1$s de capitole - Necesită repornirea aplicației pentru a avea efect Dezactivați Start @@ -454,23 +403,12 @@ Erori Terminat Progresul - Descărcare terminată - - %d tracker - %d trackere - %d trackere - Trackerele nu sunt conectate la: Sursele din această extensie pot avea conținut NSFW (18+) Peste 18 Acest lucru nu împiedică extensiile neoficiale sau potențial semnalizate incorect să iasă la suprafață cu conținut 18+ în cadrul aplicației. Nu aveți surse fixate Nu a fost găsit niciun capitol - - Sărind capitolul %d, fie că sursa lipsește, fie că acesta a fost filtrat - Sărirea a %d capitole, fie că sursa le lipsește, fie că au fost filtrate - Se trece peste capitolele %d, fie sursa nu le are, fie au fost filtrate - S-au actualizat setările implicite ale capitolului %1$s: %2$s, pagina %3$d Setați ca implicit @@ -499,6 +437,7 @@ După data postării Excludeți: %s Includeți: %s + Înscrierile din categoriile excluse nu vor fi actualizate, chiar dacă acestea se află și în categoriile incluse. Atingeți pentru a vedea detaliile Afișare număr de elemente Nici unul @@ -516,7 +455,7 @@ Datele din fișierul de rezervă vor fi restaurate. \n \nVa trebui să instalați toate extensiile lipsă și să vă conectați ulterior la serviciile de urmărire pentru a le utiliza. - Manga din categoriile excluse nu vor fi descărcate, chiar dacă se află și în categoriile incluse. + Nu vor fi descărcate înscrierile din categoriile excluse, chiar dacă acestea se află și în categoriile incluse. Descărcare automată Dreapta Stânga @@ -538,6 +477,7 @@ Amurg de Miazănoapte Actualizări de aplicație Teal și turcoaz + Sursă locală Aspect Tematică Aplicație Măr Verde @@ -548,11 +488,11 @@ Daiquiri de căpșuni Tako Yin și Yang - Yotsuba + Yoțuba Editare finalizată Anulat - În pauză - %1$d actualizari sarite + În hiatus + %1$d actualizări omise Ignorata deoarece seria este completa Ignorat din cauza lipsei de capitolel citite Format de capitol invalid @@ -572,7 +512,7 @@ Dată Sensibilitatea pentru ascunderea meniului la defilare Instalați și porniți Shizuku pentru a utiliza Shizuku ca instalator de extensii. - %1$d manga(uri) non-bibliotecă în baza de date + %1$d intrări non-bibliotecare în baza de date Pagina %d nu a fost găsită în timpul divizării Doriți să ștergeți categoria \"%s\"\? InternalError: Verificați jurnalele de accident pentru informații suplimentare @@ -580,26 +520,21 @@ Întrebări frecvente și ghiduri Lavandă Mod întunecat negru pur - Servicii care oferă caracteristici îmbunătățite pentru anumite surse. Manga sunt urmărite în mod automat atunci când sunt adăugate la biblioteca dumneavoastră. + Servicii care oferă caracteristici îmbunătățite pentru anumite surse. Înregistrările sunt urmărite automat atunci când sunt adăugate la biblioteca dumneavoastră. Ar trebui să păstrați copii ale backupurilor și în alte locuri. Îmbunătățește performanța cititorului Închide - Când bateria nu este scăzută - Recent Azi Listă de citit Lista de dorințe Lista completă Acoperire tip grilaj Mutați seria în partea de sus - Marcaje temporale - Marcaje temporale relative - Omiteți actualizarea titlurilor + Omiteți actualizarea intrărilor Care nu au fost începute Shizuku nu rulează Limba aplicației Restricții: %s - Reîmprospătați automat trackerele Cel mai înalt Înalt Scăzut @@ -607,63 +542,44 @@ Lista în așteptare Cel mai scăzut Lista neterminată - Scurt (Astăzi, Ieri) Număr de necitite Este posibil să nu funcționeze corect backup/restaurare dacă MIUI Optimization este dezactivată. La fiecare 3 zile Doar prin Wi Fi - Actualizeaza trackerele la actualizarea bibliotecii - 5% Formatul RARv5 nu este acceptat Oprit Informații despre aplicație Copertă personalizată Copertă O actualizare rulează deja - Lung (Scurt+, acum n zile) + Categorii excluse Setări per categorie pentru sortare și afișare Tip de rotație Portret Politica de confidențialitate - Acest tracker este compatibil doar cu sursa Komga. Descărcă automat în timp ce citiți Versiune Limbă Salvează ca arhivă CBZ - Început Ordonează după Nu se poate deschide ultimul capitol citit Nu s-a putut obține lista de extensii Se instalează extensia… Program instalare - - Ieri - Acum %1$d zile - Acum %1$d zile - - Creează foldere în funcție de titlul manga Automat Pornit - - Următorul capitol necitit - Următoarele %d capitole necitite - Următoarele %d capitole necitite - Ești sigur\? Eroare la salvarea imaginii Actualizează tot Deactivat Șterge tot Acțiuni - Salvează pagini în dosare separate Fără descriere Dezactivează modul incognito - Funcționează numai pentru intrările din bibliotecă și dacă capitolul curent și următorul sunt deja descărcate + Funcționează numai dacă capitolul curent + următorul sunt deja descărcate. Pentru ajutor în cum se repară erori de actualizări de bibliotecă, vezi %1$s Alb-negru Peisaj - Repetați sursele fixate în grupele lor de limbaje - Arătați sursele fixate duplicate Apasă pentru a afla mai multe Măriți imaginea în format peisaj Resetați setările de cititor per serie @@ -677,13 +593,11 @@ Deschide pe GitHub O versiune nouă este disponibilă ca release oficial. Apasă pentru a învăța cum să migrezi de la release-urile neoficiale F-Droid. Nu este instalat - Manga totale + Total intrări Caută… Tsunami Vârsta minimă Versiune veche - Împărțiți imaginile înalte (BETA) - Actualizăm biblioteca… (%1$d/%2$d) Ghid de urmărire Format portret întors Permisiunile de stocare nu au fost acceptate @@ -692,7 +606,7 @@ Nimic asemănător nu a fost găsit Sunteți pe cale să eliminați \"%s\" din biblioteca dvs Nici o sursă instalată nu a fost găsită - Vezi manga recent actualizate + Vizualizați intrările recent actualizate din bibliotecă Nu am putut reseta setările de citire Nici o sursă găsită Ignorat deoarece seria nu necesită actualizări @@ -708,7 +622,6 @@ Consemnare verbală %s a întâmpinat o eroare neașteptată. Vă sugerăm să faceți o captură de ecran a acestui mesaj, să descărcați registrele de erori și apoi să le partajați prin intermediul canalului nostru de asistență pe Discord. Widgetul nu este disponibil atunci când este activată blocarea aplicației - Limba aplicației, notificări Tema, formatul datei și al orei Categorii, actualizări globale Modul de citire, afișare, navigare @@ -720,10 +633,39 @@ Golirea registrelor de eroare, optimizări ale bateriei Șirul implicit de agent al utilizatorului Șirul agentului de utilizator nu poate fi gol - A avut loc o eroare neașteptată + Ups! Reporniți aplicația Panoramare a imaginii la scară largă la atingere - Descărcări în așteptare + Nu s-au găsit intrări în această categorie + Acest lucru va elimina data de finalizare selectată anterior din %s + Indexul descărcărilor invalid + Descărcări de indexare + Eliminați data\? + Acest lucru va elimina data de început selectată anterior din %s + Versiunile F-Droid nu sunt acceptate oficial. +\nApăsați pentru a afla mai multe. + Deschideți aleatoriu + Statistici + Local + Inceput + Descărcat + Prezentare generală + %ds + Nu acum + Intrari complete + Durata cutirii + Intrari + In actualizare globala + Total + Citit + Trackere + Scorul mediu + Utilizat + N/A + %dd + %dh + %dm + Categorie goala Treci peste capitolele duplicae Disponibil, dar sursa nu este instalata: %s Ai deja o intrare in librarie cu acelasi nume. @@ -732,4 +674,15 @@ %1$s eroare: %2$s *necesar Copiat in clipboard - \ No newline at end of file + Deblochează %s + Șterge descărcările + Verificare întârziată (10+) + Setează intervalul + Perioada de control a trecut + Scanlator + Date și stocare + Abandonat? Întârziat (20+ și 2 luni) + Următoarea actualizare așteptată + Fetch lunar (28 de zile) + Interval de preluare personalizat + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ru/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/ru/plurals-aniyomi.xml new file mode 100644 index 0000000000..9282474b9f --- /dev/null +++ b/i18n/src/commonMain/resources/MR/ru/plurals-aniyomi.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/ru/plurals.xml b/i18n/src/commonMain/resources/MR/ru/plurals.xml new file mode 100644 index 0000000000..490b4bc85c --- /dev/null +++ b/i18n/src/commonMain/resources/MR/ru/plurals.xml @@ -0,0 +1,99 @@ + + + + После %1$s минуты + После %1$s минут + После %1$s минут + После %1$s минут + + + Главы %1$s и ещё одна + Главы %1$s и ещё %2$d + Главы %1$s и ещё %2$d + Главы %1$s и ещё %2$d + + + %1$d новая глава + %1$d новые главы + %1$d новых глав + %1$d новых глав + + + Для %d серии + Для %d серий + Для %d серий + Для %d серий + + + Доступно обновление для %d расширения + Доступны обновления для %d расширений + Доступны обновления для %d расширений + Доступны обновления для %d расширений + + + Осталась %1$s глава + Осталось %1$s главы + Осталось %1$s глав + Осталось %1$s глав + + + %d категория + %d категории + %d категорий + %d категорий + + + Выполнено за %1$s с %2$s ошибкой + Выполнено за %1$s с %2$s ошибками + Выполнено за %1$s с %2$s ошибками + Выполнено за %1$s с %2$s ошибками + + + %1$s глава + %1$s главы + %1$s глав + %1$s глав + + + %d отслеживание + %d отслеживания + %d отслеживаний + %d отслеживаний + + + Отсутствует %d глава + Отсутствуют %d главы + Отсутствуют %d глав + Отсутствуют %d глав + + + Вчера + %1$d дня назад + %1$d дней назад + %1$d дней назад + + + Следующая непрочитанная глава + Следующие %d непрочитанные главы + Следующие %d непрочитанных глав + Следующие %d непрочитанных глав + + + Следующая глава + Следующие %d главы + Следующие %d глав + Следующие %d глав + + + Отсутствует %1$s глава + Отсутствуют %1$s главы + Отсутствуют %1$s глав + Отсутствуют %1$s глав + + + 1 день + %d дня + %d дней + %d дней + + \ No newline at end of file diff --git a/i18n/src/main/res/values-ru/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/ru/strings-aniyomi.xml similarity index 83% rename from i18n/src/main/res/values-ru/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/ru/strings-aniyomi.xml index da8a8fe693..4255d2d19e 100644 --- a/i18n/src/main/res/values-ru/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/ru/strings-aniyomi.xml @@ -57,46 +57,4 @@ Переместить историю на вкладку Дополнительно Аниме Манга - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-ru/strings.xml b/i18n/src/commonMain/resources/MR/ru/strings.xml similarity index 81% rename from i18n/src/main/res/values-ru/strings.xml rename to i18n/src/commonMain/resources/MR/ru/strings.xml index 4fc50f47a3..6305515bc4 100644 --- a/i18n/src/main/res/values-ru/strings.xml +++ b/i18n/src/commonMain/resources/MR/ru/strings.xml @@ -15,8 +15,7 @@ Изменить обложку Фильтрация В закладках - Загружено - Убрать фильтр + Удалить фильтр Не прочитано Установить Пометить как «Прочитано» @@ -28,7 +27,7 @@ Пауза Предыдущая глава Удалить - Убрать закладку + Удалить закладку Переименовать категорию Сбросить Продолжить @@ -47,10 +46,11 @@ Возникла ошибка при очистке Кэш очищен. %1$d файлов было удалено Загружается (%1$d/%2$d) + Ошибка Страница: %1$d Главы Когда заряжается - Записи удалены + Серии удалены А К З @@ -84,6 +84,7 @@ Нет новых обновлений Ничего не прочитано в последнее время Резервная копия + Очередь загрузки Библиотека История Обновления @@ -101,7 +102,7 @@ Название Следующая глава не найдена Не удалось обновить обложку - Пожалуйста, добавьте запись в библиотеку перед тем, как делать это + Пожалуйста, добавьте серию в библиотеку перед тем, как делать это Найдены новые главы Отложено Выпускается @@ -117,6 +118,8 @@ Читалка Отслеживание Очистить cookies + Очистить базу данных + Удалить историю для серий, которые не находятся в библиотеке Пользовательская яркость Пользовательский светофильтр Папка загрузок @@ -138,7 +141,7 @@ Режим чтения Стартовая позиция увеличения Читаю - Убрать из библиотеки + Удалить из библиотеки Постранично (Справа налево) Заблокированная альбомная Заблокированная портретная @@ -151,10 +154,11 @@ Растянуть Оценка Предпоследняя прочитанная глава - Сервисы + Сервисы отслеживания Установить как обложку Номер главы Название источника + Добавить в библиотеку\? Номер главы Источник Статус @@ -167,7 +171,6 @@ Каждые 2 дня Каждые 6 часов Загрузить - Поиск обновлений… Нет обновлений Нажмите для установки обновления Ошибка загрузки @@ -189,21 +192,23 @@ Отменить Что добавить в резервную копию\? Резервная копия создана + Категории + Пауза Создание резервной копии + Основная категория Спрашивать Удалить загруженные главы\? + Загрузки приостановлены История - Персональный источник - Манга + Источник на устройстве + Серии библиотеки Больше нет результатов Папка резервной копии - Частота резервных копий - Автоматические резервные копии - Количество резервных копий + Частота автоматических резервных копий + Количество автоматических резервных копий Создать резервную копию Можно использовать для восстановления текущей библиотеки Обрезать поля - Обновить отслеживание Восстановить из резервной копии Восстановить библиотеку из резервной копии Восстановление завершено @@ -217,7 +222,6 @@ Клавиши громкости наоборот Искать глобально Загруженные главы - Персональное Другое Искать глобально… Последняя @@ -252,7 +256,6 @@ Источник не установлен: %1$s Перечитываю Статус - Начато Тип Закончена: Текущая: @@ -262,7 +265,7 @@ Предыдущей главы нет Идёт загрузка страниц… Не удалось загрузить страницы: %1$s - Опции читалки при долгом нажатии на экран + Показать действия при долгом нажатии Открыть в WebView Пропускать прочитанные главы 32-битный цвет @@ -279,7 +282,7 @@ Вперед Обновить Библиотека - Устарело + Устаревшее Это расширение больше недоступно. Оно может работать неправильно, а также вызвать проблемы с приложением. Рекомендуется его удалить. Формат даты Глобальное обновление @@ -301,51 +304,21 @@ Блокировать при бездействии Всегда Никогда - - После %1$s минуты - После %1$s минут - После %1$s минут - После %1$s минут - Защита экрана приложения Доступны обновления - Отображать содержимое в вырезанной области + Показывать содержимое в вырезанной области Не удалось обойти Cloudflare Пожалуйста, обновите WebView для лучшей совместимости - - Главы %1$s и ещё одна - Главы %1$s и ещё %2$d - Главы %1$s и ещё %2$d - Главы %1$s и ещё %2$d - + Обновления глав Глава %1$s и ещё %2$d Главы %1$s Глава %1$s Отображение - - %1$d новая глава - %1$d новые главы - %1$d новых глав - %1$d новых глав - - - Для %d записи - Для %d записей - Для %d записей - Для %d записей - Проверка наличия новых глав Обновление библиотеки - Проверить сайт в WebView Оптимизация батареи уже выключена Помогает с обновлением библиотеки и резервной копией в фоне Отключить оптимизацию батареи - - Доступно обновление для %d расширения - Доступны обновления для %d расширений - Доступны обновления для %d расширений - Доступны обновления для %d расширений - Адрес электронной почты Переход между главами Скрыть содержимое уведомлений @@ -354,7 +327,6 @@ Новейший В начало В конец - Переупорядочить Обновления расширений Меню Источники @@ -363,16 +335,10 @@ Выбрать наоборот Длинные страницы с зазорами Боковой отступ - 25% - 20% - 15% - 10% - Нет Закреплено Открепить Закрепить Добавить отслеживание - Нажмите ещё раз, чтобы выйти Только загруженные главы Меньше Больше @@ -380,9 +346,8 @@ Добавить Лицензии open-source Сайт - Подтверждать выход Гл. %1$s - %2$s - Руководство по персональному источнику + Руководство по источнику на устройстве Последний использованный источник Включает фильтр «Загружено» для всей библиотеки Проверить обновления @@ -392,59 +357,34 @@ Не удалось создать резервную копию Резервная копия уже выполняется %02d мин, %02d сек - Искать только закреплённые источники при глобальном поиске - - Осталась %1$s глава - Осталось %1$s главы - Осталось %1$s глав - Осталось %1$s глав - Режим чтения Для этой серии Серый Уменьшает полосатость, но может влиять на производительность - - %d категория - %d категории - %d категорий - %d категорий - Не удалось открыть настройки устройства Обновить обложки серий - - Выполнено за %1$s с %2$s ошибкой - Выполнено за %1$s с %2$s ошибками - Выполнено за %1$s с %2$s ошибками - Выполнено за %1$s с %2$s ошибками - - Односторонняя синхронизация для обновления прогресса в сервисах отслеживания. Настройте отслеживание при помощи кнопки «Отслеживание». - Это расширение не входит в официальный список расширений Tachiyomi. + Односторонняя синхронизация для обновления прогресса в сторонних сервисах отслеживания. Настройте отслеживание при помощи кнопки «Отслеживание». + Это расширение не входит в официальный список расширений. Неофициальное Дата добавления Данные Отсутствующие источники: - Резервная копия не содержит записей библиотеки. + Резервная копия не содержит серий. Неверный файл резервной копии При обновлении библиотеки проверять наличие новой обложки и сведений Обновлять метаданные Удобная сетка Перенести Вкладки - Вкладки категорий + Показать вкладки категорий Страницы не найдены Включить всё Отключить всё - Ненадолго отобразить режим чтения при открытии читалки - Отобразить режим чтения + Ненадолго показать режим чтения при открытии читалки + Показать режим чтения Начать Источник не найден Отключить - - %1$s глава - %1$s главы - %1$s глав - %1$s глав - Для вступления в силу требуется перезапуск приложения Сеть Обе оси @@ -460,14 +400,7 @@ Режим чтения Тема Последнее добавление серии - - %d отслеживание - %d отслеживания - %d отслеживаний - %d отслеживаний - У вас нет закреплённых источников - Загрузка завершена Завершено Прогресс Ошибки @@ -475,12 +408,6 @@ Источики из этого расширения могут содержать контент NSFW (18+) 18+ Это не предотвращает появление внутри приложения контента NSFW (18+) из неофициальных или потенциально неправильно помеченных расширений. - - Отсутствует %d глава - Отсутствуют %d главы - Отсутствуют %d глав - Отсутствуют %d глав - Нет глав Настройки главы по умолчанию были обновлены Установить по умолчанию @@ -497,7 +424,7 @@ Предыдущая страница Руководство по переносу источников Источники NSFW (18+) - Отобразить в списке источников и расширений + Показывать в списке источников и расширений Приложение для выбора файлов не найдено Пожалуйста, авторизуйтесь в MyAnimeList снова Зоны касания @@ -513,7 +440,7 @@ Номер главы Дата загрузки Отслеживается - Количество серий + Показывать количество серий Справа и слева Разделение широких страниц Разделение широких страниц наоборот @@ -525,22 +452,21 @@ Справа Следующая Предыдущая - Ненадолго отобразить при начале чтения + Ненадолго показать при начале чтения Наложение зон касания DNS по HTTPS (DoH) Нет Исключать: %s Включать: %s Последнее получение главы - Записи в исключённых категориях не будут загружаться, даже если находятся во включённых категориях. + Серии в исключённых категориях не будут загружаться, даже если находятся во включённых категориях. + Серии в исключённых категориях не будут обновляться, даже если находятся во включённых категориях. Автозагрузка Нажать, чтобы увидеть подробности Эта версия Android больше не поддерживается Не удалось скопировать в буфер обмена Альбомная Портретная - Создавать папки в соответствии с названием записей - Сохранять страницы в отдельные папки Действия Ориентация Оттенки серого @@ -554,16 +480,15 @@ Сортировать по Недопустимый формат глав Глава не найдена - Обновлять отслеживание при обновлении библиотеки - Обновлять отслеживание Ограничения: %s + Источник на устройстве Выключено Включено Ошибка отправки обложки Ошибка сохранения обложки Обложка сохранена Обложка - Каждая категория имеет собственные настройки + Каждая категория имеет собственные настройки сортировки Руководство по отслеживанию Ваша библиотека не имеет категорий. Начать загрузку сейчас @@ -575,12 +500,10 @@ Тако Клубничный Дайкири Полуночные Сумерки - Обновление библиотеки… (%1$d/%2$d) У некоторых производителей есть дополнительные ограничения для приложений, которые убивают фоновые службы. На этом сайте есть более подробная информация о том, как это исправить. Резервная копия/Восстановление может не работать должным образом, если отключена «Оптимизация MIUI». - Сервисы, предоставляющие расширенные возможности для определённых источников. Записи будут автоматически отслеживаться при добавлении в библиотеку. - Расширенные сервисы - Этот сервис отслеживания совместим только с источником Komga. + Предоставляет расширенные возможности для определённых источников. Серии будут автоматически отслеживаться при добавлении в библиотеку. + Расширенные сервисы отслеживания Динамическая Фоновая активность Самая низкая @@ -589,25 +512,15 @@ Самая высокая Чувствительность скрытия меню при прокрутке Цвета наоборот - Длинные (Короткие+, н-кол дней назад) - Короткие (Сегодня, Вчера) - Относительные метки времени - - Вчера - %1$d дня назад - %1$d дней назад - %1$d дней назад - Сегодня - Недавно Бирюзовая Выполните аутентификацию, чтобы подтвердить изменение По умолчанию - Метки времени Отображение Руководство по началу работы с приложением Отслеживать Планшетный интерфейс + Исключённые категории Помочь с переводом О приложении Установите и запустите Shizuku, чтобы использовать его как установщик расширений. @@ -615,33 +528,31 @@ По умолчанию Установщик Установка расширения… - Всего записей + Всего серий Подробное ведение журнала Записывать подробный журнал в системный журнал (Снижает производительность приложения) Язык Предупреждение Большое количество обновлений может привести к замедлению работы источников и увеличению расхода батареи. Нажмите для подробностей. - Настоятельно рекомендуется хранить резервные копии в других местах или сервисах. + Настоятельно рекомендуется хранить резервные копии в других местах или сервисах. Резервные копии могут содержать конфиденциальную информацию, как, например, пароли. Будьте осторожны при их отправке. Только по Wi-Fi Каждые 3 дня Обновить все Обновления приложения - %1$d не библиотечных записей в базе данных + %1$d не библиотечных серий в базе данных Нечего очищать Не удалось получить список расширений Политика конфиденциальности - Пропускать обновления записей + Пропускать обновления серий Для помощи в исправлении ошибок библиотеки нажать %1$s Сохранить как архив CBZ Отменено Перерыв Публикация завершена Руководства и FAQ - 5% Сетка без названия Панорамирование широких изображений - Увеличивать изображение по горизонтали - Начато + Автоматически увеличивать широкие изображения Серия не начата Пропущено, т.к серия завершена Пропущено, т.к есть непрочитанные главы @@ -660,9 +571,6 @@ Данные WebView очищены Очистить данные WebView Закрыть - Повторять прикреплённые источники в соответствии с их языковыми группами - Отображать дублированные приклеплённые источники - Когда батарея заряжена Не найдено установленных источников Не найдено источников Оставшиеся главы @@ -697,51 +605,69 @@ Удалить всё Формат RARv5 не поддерживается Виджет недоступен при включённой блокировке биометрией - Посмотреть недавно обновленные записи в библиотеке + Посмотреть недавно обновлённые серии в библиотеке Обновление уже запущено User agent не может быть пустым Приливная Волна - - Следующая непрочитанная глава - Следующие %d непрочитанные главы - Следующие %d непрочитанных глав - Следующие %d непрочитанных глав - Загрузить наперёд При чтении - Работает только с элементами в библиотеке, а также если текущая и следующая главы уже загружены + Работает только если текущая + следующая главы уже загружены. Вы уверены\? - Многоязычное + Многоязыковое Вы собираетесь удалить «%s» из вашей библиотеки - Разделять длинные изображения (БЕТА) Последнее обновление библиотеки: %s Популярное Не предоставлены разрешения на хранение Пропущено, т.к серия не нуждается в обновлении Искать… Перезапустить приложение - Язык приложения, уведомления Тема, формат даты и времени Категории, глобальное обновление, перелистывание глав Режим чтения, отображение, навигация Автоматическая загрузка, загрузка наперёд Односторонняя синхронизация прогресса, расширенная синхронизация Источники, расширения, глобальный поиск - Ручные и автоматические резервные копий + Ручные и автоматические резервные копий, хранилище Блокировка приложения, защита экрана Выгрузка журнала с ошибками, оптимизация батареи - Возникла непредвиденная ошибка + Ой, ошибочка вышла! %s столкнулось с непредвиденной ошибкой. Мы рекомендуем поделиться журналом с ошибками в нашем Discord сервере в ветке support. Неизвестное название Недопустимое расположение: %s Недопустимый параметр user agent Только что - Индексирование загрузок - В этой категории нет записей - Открыть случайную запись + Проверка загрузок + В этой категории нет серий + Открыть случайную серию Сборки F-Droid официально не поддерживаются. \nНажмите, чтобы узнать больше. -Очередь загрузки + Это удалит ранее выбранную дату окончания из %s + Удалить дату\? + Это удалит ранее выбранную дату начала из %s + Очистить индекс загрузок + Начато + Продолжительность чтения + Обзор + Отслеживание + Н/Д + %dд + %dс + Использовано + Загружено + Всего + Статистика + Завершённые серии + Серии + Прочитано + Отслеживаемые серии + %dч + Средняя оценка + %dм + В глобальном обновлении + На устройстве + Не сейчас + Категория пуста + Скопировано в буфер обмена Доступно, но источник не установлен: %s Пропускать повторяющиеся главы В вашей библиотеке уже есть серия с таким именем. @@ -749,24 +675,12 @@ \nВы всё ещё хотите продолжить\? %1$s ошибка: %2$s *необходимо - - Следующая глава - Следующие %d главы - Следующие %d глав - Следующие %d глав - Скрывать серии, уже находящиеся в библиотеке Копировать в буфер обмена Обновить категорию Разделять длинные изображения Наложение Развернуть широкие страницы под размер экрана - - Отсутствует %1$s глава - Отсутствуют %1$s главы - Отсутствуют %1$s глав - Отсутствуют %1$s глав - Отразить ориентацию развёрнутых широких страниц Отладочная информация Перелистывание глав @@ -774,4 +688,56 @@ Проведите влево Двойное нажатие для увеличения %d в ряд - \ No newline at end of file + Настраиваемый интервал получения + Месячная проверка (28 дней) + Заброшено\? Прошедшие 20+ дней и 2 месяца + Интервалы + Оценивать каждые + Настроить интервал + Задать интервал + Проверка прошедших 10+ дней + Срок проверки истёк + Следующее ожидамое обновление + За пределами ожидаемого периода выпуска + Задать обновления каждые + Пропущено, т.к сегодня не ожидается выпуска + Удалить отслеживание %s\? + Это удалит отслеживание в приложении. + Также удалить из %s + ОК + Удалить загруженное + Имеет результаты + Синхронизация библиотеки завершена + Синхронизация библиотеки + Нажмите здесь, чтобы получить помощь с Cloudflare + Индекс загрузок недействителен + Не удалось создать файл резервной копии + Лицензировано - Нет глав + Вход в сервис отслеживания + HTTP %d, проверьте сайт в WebView + Нет подключения к интернету + Не удалось достичь %s + Разблокировать %s + Переместить серию в конец + Относительные временные метки + \"%1$s\" вместо \"%2$s\" + Настройки приложения + Настройки источников + Обновление библиотеки... (%s) + Сортировать категории + Хотите ли вы сортировать категории по алфавиту\? + Файл не выбран + Данные и хранение + Никогда + Уменьшает артефакты у экранов e-ink + Последнее автоматическое резервное копирование: %s + Мигать экраном при смене страницы + Использование хранилища + Оценка сервиса отслеживания + Создать + Применить + Сбросить настройки + Переводчики не найдены + Переводчик + Исключить переводчиков + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/sa/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/sa/plurals-aniyomi.xml new file mode 100644 index 0000000000..397ac7d36f --- /dev/null +++ b/i18n/src/commonMain/resources/MR/sa/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/sa/plurals.xml b/i18n/src/commonMain/resources/MR/sa/plurals.xml new file mode 100644 index 0000000000..8b3e6a9db1 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/sa/plurals.xml @@ -0,0 +1,47 @@ + + + + एकनिमेषानन्तरम् + द्विनिमेषानन्तरम् + + + %d वर्गः + %d वर्गौ + + + %1$s समये %2$s दोषेण कृतम् + %1$s समये %2$s दोषाभ्यां कृतम् + + + १ अध्यायः + २ अध्यायौ + + + १ ट्राकर्तन्त्रांशः + २ ट्राकर्तन्त्रांशौ + + + १ शेषम् + २ शेषे + + + विस्तारनवीकरणम् उपलभ्यम् + द्वे विस्तारनवीकरणे उपलभ्ये + + + एकः नूतनाध्यायः + द्वौ नूतनाध्यायौ + + + एकाय शीर्षकाय + द्वाभ्यां शीर्षकाभ्याम् + + + अध्यायाः %1$s च इतोऽपि १ च + अध्यायाः %1$s च इतोऽपि २ च + + + १ अध्यायं लङ्घयति यतः मूले सः अनुपस्थितः अस्ति उत सः बहिः सम्मृष्टः कृतः + २ अध्यायौ लङ्घयति यतः मूले तौ अनुपस्थितौ स्तः उत तौ बहिः सम्मृष्टौ कृतौ + + \ No newline at end of file diff --git a/i18n/src/main/res/values-sa/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/sa/strings-aniyomi.xml similarity index 85% rename from i18n/src/main/res/values-sa/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/sa/strings-aniyomi.xml index 4caa27a929..e02c0f3e1f 100644 --- a/i18n/src/main/res/values-sa/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/sa/strings-aniyomi.xml @@ -32,32 +32,4 @@ टाचीयोमेः कृते वेब्-व्यू-तन्त्रांशः अपेक्षितः अवारोपणं विरमितम् अध्यायनवीकरणानि - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-sa/strings.xml b/i18n/src/commonMain/resources/MR/sa/strings.xml similarity index 89% rename from i18n/src/main/res/values-sa/strings.xml rename to i18n/src/commonMain/resources/MR/sa/strings.xml index defaa45bbd..e95f418d6a 100644 --- a/i18n/src/main/res/values-sa/strings.xml +++ b/i18n/src/commonMain/resources/MR/sa/strings.xml @@ -4,12 +4,14 @@ नाम इतोऽपि समायोजनानि + अवारोपणश्रेणिः चरित्रम् स्थानान्तरगमनम् विस्ताराः विस्तारस्य विवरणम् साहाय्यम् - माङ्गा + ग्रन्थालय-प्रविष्ट्यः + वर्गाः अध्यायाः अनुप्रज्ञानम् चरित्रम् @@ -19,7 +21,6 @@ प्रतिलेखनं प्रतिसंस्कारं च पूर्वसूचना परिवर्तनं दृढीकर्तुं प्रमाणीकरोतु - निष्क्रमितुं पृष्ठगण्डं पुनः नोदयतु सूचिः शोधकम् पुटचिह्नं कृतानि @@ -51,7 +52,6 @@ अनुवर्तताम् वेब्-व्यू-अनुप्रयोगे उद्घाटयतु स्थानान्तरगमनं कुरु - अवारोपितम् समायोजनानि अनुप्रज्ञातानि अपठितानि @@ -73,6 +73,7 @@ सुसम्बद्धा ग्रिड्-शैली सूची अवारोपिताः अध्यायाः + स्थानीयाः माङ्गाः वर्गीयाः पीठिकाः दर्शयतु अशक्तं करोतु उपरि उद्वर्णयतु @@ -80,7 +81,6 @@ लुम्पतु सर्वाणि लुम्पतु विन्यासः - पुनः विरचयतु अध्यायस्य क्रमसङ्ख्यया नविष्ठम् सद्यः किमपि न पठितम् @@ -136,10 +136,6 @@ अनुप्रयोगस्य दृश्यशैली टाकोशैली योट्सूबः - समयमुद्राः - सम्बन्धकसमयमुद्राः - लघु (अद्य श्वः च) - दीर्घम् (लघु+, n दिनपूर्वम्) आवेदनानि निर्वहतु संरक्षणम् उद्घाटनम् आवश्यकम् @@ -148,21 +144,10 @@ पटलम् अभिरक्षतु आवेदनवस्तु वृणोतु तिथिसंरूपम् - निष्क्रमणं द्रढयतु कार्याभावे अपिदधातु - - एकनिमेषानन्तरम् - द्विनिमेषानन्तरम् - अभिरक्षणपटलम् अनुप्रयोगाणां परिवर्तने अनुप्रयोगवस्तु वृणोति पटलप्रतिकृतीनां च सृष्टिं निवारयति॥ प्रौढानां कृते एव (१८+) वस्तुमूलानि मूलानां विस्ताराणां च सूचीषु दर्शयतु - सद्यः - अद्य - - ह्यः - द्विदिनपूर्वम् - प्रतिपङ्क्तौ वस्तूनि अनुप्रस्थम् प्रदर्शनम् @@ -183,6 +168,7 @@ केवलं वै-फ़ै माध्यमेन समापितधारावाहिकाः ग्रन्थालयनवीकरणे सति नूतनमुखचित्राय विवरणाय च मार्गतु + प्राथमिकवर्गः सदा पृच्छतु न किमपि सर्वाणि @@ -200,17 +186,12 @@ विस्तारं प्रतिष्ठापयति … क्रमगतम् पूर्णपटलम् - - %d वर्गः - %d वर्गौ - - ग्रन्थालयनवीकरणे सति ट्राकर्तन्त्रांशान् नवीकरोतु प्रदत्तांशं स्वयञ्चालितं नवीकरोतु - ट्राकर्तन्त्रांशान् स्वयञ्चालितं नवीकरोतु प्रतिवर्गं विन्यासस्य प्रदर्शनस्य च कृते समायोजनानि अविश्वस्तविस्तारः अयं विस्तारः टाचीयोमेः अधिकारिकविस्तारसूच्याः नास्ति। विस्तारसूच्याः प्राप्तिः अनुत्तीर्णा + माङ्गाः याः वर्जितवर्गेषु सन्ति ताः अन्तर्भूतवर्गेषु सन्ति चेदपि तासां नवीकरणं न भविष्यति। अयं विस्तारः इतःपरं न उपलभ्यः। विश्वासः सर्वाणि नवीकरोतु @@ -258,7 +239,6 @@ ऊर्ध्वम् कार्याणि दीर्घस्पर्शने दर्शयतु - पुटानि भिन्नसञ्चयेषु रक्षतु पृष्ठभूमिवर्णः श्वेतः धूसरः @@ -283,7 +263,6 @@ पठितम् इति चिह्नितान् अध्यायान् लङ्घयतु प्रकाशयति द्वयम् - माङ्गाशीर्षकम् अनुसृत्य सञ्चयान् स्रक्ष्यति पृष्ठीकृतम् विस्तारणम् विस्तृतिं समुचितं कुरु @@ -313,17 +292,12 @@ पठनदशा पठनम् पक्षस्य पाडिङ्गः - किमपि न - १०% मापनप्रकारः ऊर्ध्वत्वं समुचितं कुरु - ५% - १५% - २०% - २५% उच्चम् अधस्तनम् उच्चतमम् + वर्जितवर्गाः स्वकृतस्थलम् अशक्तं कृतम् अन्तिमपठितः अध्यायः @@ -340,12 +314,10 @@ अनुप्रज्ञानमार्गदर्शनम् विवृद्धसेवाः अनुप्रजानातु - केवलम् अग्रिमस्थकृतमूलम् प्रतिलेखनं निर्मातु एतत् उपयुज्य वर्तमानग्रन्थालयं समादातुं शक्यते प्रतिलेखनं समाददातु प्रतिलेखनस्थलम् - स्वयङ्कृतप्रतिलेखनम् प्रतिलेखनस्य आवर्तनता अधिकतमप्रतिलेखनानि प्रतिलेखनं पूर्वमेव प्रगतौ अस्ति @@ -356,10 +328,6 @@ प्रतिलेखनं समाददाति प्रतिसंस्कारः अलोप्यत प्रतिसंस्कारं समापितम् - - %1$s समये %2$s दोषेण कृतम् - %1$s समये %2$s दोषाभ्यां कृतम् - यदि MIUI वृद्धिकरणम् अशक्तं कृतं तर्हि प्रतिलेखनम्/प्रतिसंस्कारः क्रियां युक्तं न कुर्यात्। स्वयङ्कृतप्रतिलेखनानि अतीव निर्दिशितानि। त्वया अन्यस्थानेषु अपि प्रतिकृतीनां स्थापनम् उचितं भविष्यति॥ प्रतिलेखनसञ्चिकायाः ग्रन्थालयं समाददातु @@ -371,7 +339,6 @@ त्वं कानि प्रतिलेखितुम् इच्छसि प्रतिलेखनं निर्माति जालम् - स्थानीयम् अग्रिमस्थकृतानि नविष्ठम् गवेषयतु @@ -380,6 +347,8 @@ अलोप्यत अधिकम् न्यूनम् + दोषः + विरमितम् अपठितम् मुखचित्रम् त्यक्तम् @@ -388,7 +357,6 @@ शीर्षकम् स्थितिः स्थितिः - आरब्धम् प्रकारः विरमितम् उपयोक्तृनाम @@ -430,6 +398,7 @@ दोषः पूर्वपुटः अग्रिमपुटः + दत्तनिधिं मार्जयतु दत्तनिधिः मार्जितः पृष्ठभूमिकार्यक्रमम् विद्युत्कोषवृद्धिकरणम् अशक्तं करोतु @@ -449,17 +418,12 @@ पुटान् आरोपयतु… ग्रन्थालयं नवीकरोति चरित्रं मार्जयतु - अवारोपणं समापितम् + अवारोपणं विरमितम् दोषाः अवारोपितानि एव प्रगतिः - - १ अध्यायः - २ अध्यायौ - अवारोपणसाधनम् सामान्यम् - अनुप्रज्ञानं नवीकरोतु प्रच्छन्ननामदशा ज्ञापकानि मार्जयतु ज्ञापकानि मार्जितानि @@ -484,10 +448,6 @@ फलितानि न लभ्यानि अध्यायसंरूपम् अनाप्तम् अनुप्रज्ञानं योजयतु - - १ ट्राकर्तन्त्रांशः - २ ट्राकर्तन्त्रांशौ - वर्गाः नाशिताः चित्रं रक्षितम् स्वकृतशोधकम् @@ -499,12 +459,9 @@ अध्यायाः %1$s अवारोपणदोषः पूर्णम् + अध्यायनवीकरणानि अनुप्रयोगनवीकरणानि विस्तारनवीकरणानि - - १ शेषम् - २ शेषे - HTTPS उपरि DNS (DoH) प्रारम्भिकमार्गदर्शनम् साधनसमायोजनानि उद्घाटयितुं न अशक्नोम् @@ -513,14 +470,6 @@ पुटाः न लभ्याः मूलं न लभ्यम् नूतनसंस्करणम् उपलभ्यम् - - विस्तारनवीकरणम् उपलभ्यम् - द्वे विस्तारनवीकरणे उपलभ्ये - - - एकः नूतनाध्यायः - द्वौ नूतनाध्यायौ - नूतनाध्यायाः लभ्याः केवलं मुखचित्रेण इष्टिकाविन्यासः गुप्ततानीतिः @@ -533,13 +482,8 @@ अस्यै धारावाहिकायै मुखचित्रम् चिनोतु प्रतिलेखनसञ्चिकां चिनोतु - नवीकरणेभ्यः अवेक्षते… पुटान्तरे प्लवतु अनुप्रस्थचित्रं सर्पकं करोतु - - एकाय शीर्षकाय - द्वाभ्यां शीर्षकाभ्याम् - ग्रन्थालयमाङ्गामुखचित्राणि नवीकरोतु ध्वंसेतिवृत्तानि पातयतु उपारोपिततिथ्या @@ -548,19 +492,17 @@ अध्यायसङ्ख्यया समः न लभ्यः मूलस्य सङ्क्रमणमार्गदर्शनम् - ग्रन्थालयं नवीकरोमि… (%1$d/%2$d) \"%1$s\" कृते सार्वत्रिकेण अवेक्षताम् %1$s प्रति अन्तर्गच्छतु %1$s इतः बहिर्गच्छानि किम् - जालस्थानं वेबव्यू-तन्त्रांशे मार्गतु मूलं न प्रतिष्ठापितम् - %1$s + माङ्गां ग्रन्थालये योजयानि किम् मुखचित्रनवीकरणम् अनुत्तीर्णम् अग्रिमाध्यायः न लभ्यः अध्यायः %1$s – %2$s अग्रिमाध्यायः नास्ति पूर्वाध्यायः नास्ति नूतनाध्यायेभ्यः मार्गति - आरब्धम् %1$s: %2$s पुटः च %3$d पठिताः अध्यायाः न सन्ति नूतननवीकरणानि न उपलभ्यानि @@ -576,10 +518,6 @@ जालसम्पर्कः न उपलभ्यः प्रतिलेखः अंशफलकान्ते कृतः - \n%1$s - - अध्यायाः %1$s च इतोऽपि १ च - अध्यायाः %1$s च इतोऽपि २ च - अध्यायः %1$s च इतोऽपि %2$d च सञ्चिकाग्राही अनुप्रयोगः न लभ्यः धारावाहिकः पूर्णः अतः लङ्घितः @@ -593,13 +531,9 @@ त्वं निश्चितं किम् \? चरित्रं सर्वं लुप्तं भविष्यति। एतत् आण्ड्रायिड्-संस्करणम् अधुना न भरितम् इतोऽपि उत्तमतरसङ्गतिं प्रप्तुं कृपया वेब्-व्यू-अनुप्रयोगं नवीकरोतु - अयं ट्राकर्तन्त्रांशः Komga-मूलेन सह एव सङ्गतः अस्ति। तव ग्रन्थालये सर्वाः माङ्गाः शोधनीकरोति + तव ग्रन्थालये न रक्षितानां माङ्गानां चरित्रं नाशय त्वं निश्चितरूपेण सङ्गृहीतान् अध्यायान् नाशयितुम् इच्छसि किम् \? - - १ अध्यायं लङ्घयति यतः मूले सः अनुपस्थितः अस्ति उत सः बहिः सम्मृष्टः कृतः - २ अध्यायौ लङ्घयति यतः मूले तौ अनुपस्थितौ स्तः उत तौ बहिः सम्मृष्टौ कृतौ - व्युत्पादकेभ्यः प्रसारयितुं दोषदत्तम् एकस्यां सञ्चिकायां रक्षति इमानि समायोजनानि प्राथमिकानि इव रक्षितुं त्वं निश्चितं किम् स्खलितानां परिहरणे साहाय्यं करिष्यति। संवेदनशीलदत्तांशाः न प्रेषिष्यते॥ @@ -622,5 +556,10 @@ %1$d नवीकरणानि लङ्घितानि धारावाहिकम् अग्रस्थानं चालयतु विपरीतं लम्बदर्शनम् -अवारोपणश्रेणिः - \ No newline at end of file + स्थानीयम् + साङ्ख्यिकी + आरब्धम् + अवधिं स्थापयतु + अवारोपितं नाशयतु + अवारोपितम् + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/sah/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/sah/plurals-aniyomi.xml new file mode 100644 index 0000000000..e86b2f3374 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/sah/plurals-aniyomi.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/sah/plurals.xml b/i18n/src/commonMain/resources/MR/sah/plurals.xml new file mode 100644 index 0000000000..3f3fe03ad8 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/sah/plurals.xml @@ -0,0 +1,24 @@ + + + + %d бөлөхтөр + + + %1$s мүнүүтэ кэннэ + + + Туолла %1$sҕа %2$s сыаһалаах + + + %1$s хаалла + + + %1$s түһүмэх + + + %d трэкэр + + + Манна %d түһүмэх суох + + \ No newline at end of file diff --git a/i18n/src/main/res/values-sah/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/sah/strings-aniyomi.xml similarity index 100% rename from i18n/src/main/res/values-sah/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/sah/strings-aniyomi.xml diff --git a/i18n/src/main/res/values-sah/strings.xml b/i18n/src/commonMain/resources/MR/sah/strings.xml similarity index 94% rename from i18n/src/main/res/values-sah/strings.xml rename to i18n/src/commonMain/resources/MR/sah/strings.xml index 271a6cec17..1dff9465fd 100644 --- a/i18n/src/main/res/values-sah/strings.xml +++ b/i18n/src/commonMain/resources/MR/sah/strings.xml @@ -27,11 +27,11 @@ Биилтирэ Талба Түстэл - Өссө биирдэ төттөрүнү баттаан, тахсар курдук История Кэтээһин Түһүмэхтэр Маанга + Бөлөхтөр Эйиэхэ бөлөхтөр суохтар. Эбэр бэлиэни батта, бэбэлэтиэкэҕэ саҥа бөлөҕү оҥорорго. Эн бэбэлэтиэкэн кураанах. Бэбэлэтиэкэҕэ айымньыыларыы көрдөөһүнтэн эп. Бүтэһик кэмҥэ тугу да аахпатын @@ -46,13 +46,12 @@ Остуоруйа Саҥардыылар Бэбэлэтиэкэ + Хачаайдааһын уочарата Түстэл Эбии Аат - - %d бөлөхтөр - Наар ыйыт + Куолутунан бөлөх Саҥа тас уонна кыра чаастар баалларын, бэрэбиэркэлээ Метаданнайдары автоматическайдык саҥарт Бүтэ илик маанганы эрэ, саҥарт @@ -73,16 +72,12 @@ Биллэрии иһин кистээ Атын эбиликкэ көһөргөр, скриншоту сабаргар, эбилик иһин кистээ Көмүскэл экрана - - %1$s мүнүүтэ кэннэ - Хаһан да Наар Күүтү эрэһиимигэр сап Арыйыыны ирдээ Көмүскэл Биллэриилэри салай - Тахсыыны бигэргэт Даататын формаата Холбоммут Араарыллыбыт @@ -112,7 +107,6 @@ Саҕаланыыга көһөр Олох урукку Сабыс-саҥа - Саҥаттаан сааһылыы Сааһылаа Барытын уларыт Уларытыы @@ -142,11 +136,6 @@ Бөлөх аатын уларыт Бөлөхтөрү уларыт Бөлөҕү киллэр - 25% - 20% - 15% - 10% - Тэйиитэ суох Ойоҕостон тэйии Ааҕы Ааҕы эрэһиимэ @@ -236,9 +225,6 @@ Хаппаас куопуйа оҥоһуута Тугу куопуйалаары гынннын\? Хаппаас куопуйа оҥоруута туола турар - - Туолла %1$sҕа %2$s сыаһалаах - %02d мүнүүтэ %02d сөкүүндэ Төнүҥнэри бүттэ Трэкэрдар киирбэтилэр: @@ -248,13 +234,11 @@ Хаппаас куопуйа оҥоһуллунна Муҥутугар дылы хаппаас куопуйалар Хаппаас куопуйа оҥоһуутун түргэнэ - Автоматическай Хаппаас куопуйалар Хаппаас куопуйа сурунаала Бэбэлэтиэкэни хаппаас куопуйа билэтиттэн төнүҥнэрии Хаппаас куопуйаны куолутунан туруоруу Билиҥни бибилиотеканы төнүннэрэргэ туттуохха сөп Хаппаас куопуйаны оҥоруу - Сыһыарыллыбыт эрэ төрүттэри киллэр Биир өттүттэн мэнэйдэһии, кэтээһин өҥөлөргө баар түһүмэхтэр туруктарын саҥардыыга. Маанга туспа суругун уонна талкыйын кэтээһинин түстэлгэ уларыт. Өҥөлөр Саҥа түһүмэхтэри хачайдаа @@ -272,8 +256,9 @@ Туттуллубут: %1$s Билим Куки ыраастанна + Эн бэбэлэтиэкэҕэр суох маанга остуоруйатын сотторуу + Билим олоҕо ыраастааһына Батарея тупсарыытын араарыы - Кэтээһини чэбдигирии Бэбэлэтиэкэҕэ баар маанга таһын чэбдигирии Дааннайдар сотуллубуттар Бэбэлэтиэкэ уонна хаппаас куопуйатыгар кэннинээҕи саҥардыытыгар көмөлөһөр @@ -291,7 +276,6 @@ Бүтэһигинэн туттуллубут Атыттар Локальнай төрүт - Үөп сири WebView\'га көрүн Түмүк суох Эбии түмүк суох Кыбытыктар @@ -306,17 +290,11 @@ Эл.пуoчта аадырыһа Туттааччы аата %1$s\'га киири - - %1$s хаалла - Бэбэлэтиэкэҕэ баар маанганы барытын биилтирдээһин Хачайдаммыт эрэ Ханнык баҕар сыаһалары көннөрөргө көмөлөһөр. Бэйэ дааннайдар ылыллыбаттар Охтуу туһунан отчуоту ыытыы Хачайдаммыт түһүмэхтэри сотторобут\? - - %1$s түһүмэх - Кырата Эбии Бэбэлэтиэкэттэн ылылынна @@ -343,8 +321,11 @@ Төрүттэринэн Түһүмэх нүөмэрэ Төрүт аата + Тохтотулунна + Сыыһааһын Хачайдааһын (%1$d/%2$d) Түһүмэх %1$s + Маанганы Бэбэлэтиэкэҕэ киллэрэбит дуу\? Төрүт туруоруллубатах: %1$s Хоспоххо куопуйаланна: \n %1$s @@ -369,9 +350,6 @@ Бүппүт Ааҕабын эбии кэтээһини киллэрии - - %d трэкэр - Бу сиэриэҕэ Бу ойууну тас курдук туттаҕын дуо\? Ойуу кыайан хачайдаммата @@ -381,9 +359,6 @@ Тас курдук туруор %1$s-%2$s Түһ. Бэбэлэтиэкэ саҥардыыта - - Манна %d түһүмэх суох - Төрүт булуллубата Сирэйдэр булуллубатылар Сирэйдэр хачайдааһыннара сатаммата: %1$s @@ -421,6 +396,7 @@ Киллэримэ: %s Киллэр: %s Суох + Сотуллубут категориялар маангалара саҥардыллыа суоҕа, холбоммут категорияларга баарын үрдүнэн. Сыһааһыннары көрдөр Кыччыытынан Улаатыытынан @@ -429,5 +405,4 @@ Мал төһө элбэҕин көрдөр Кэлэр күнэ Суолун көрө сылдьабыт -Хачаайдааһын уочарата - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/sc/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/sc/plurals-aniyomi.xml new file mode 100644 index 0000000000..ca354f08f1 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/sc/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/sc/plurals.xml b/i18n/src/commonMain/resources/MR/sc/plurals.xml new file mode 100644 index 0000000000..5153328218 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/sc/plurals.xml @@ -0,0 +1,67 @@ + + + + A pustis de %1$s minutu + A pustis de %1$s minutos + + + %1$d capìtulu nou + %1$d capìtulos noos + + + Capìtulos %1$s e 1 àteru + Capìtulos %1$s e àteros %2$d + + + Pro %d elementu + Pro %d elementos + + + B\'at un\'agiornamentu disponìbile pro un\'estensione + B\'ant agiornamentos disponìbiles pro %d estensiones + + + Nd\'abarrat %1$s + Nd\'abarrant %1$s + + + %d categoria + %d categorias + + + Fatu in %1$s cun %2$s errore + Fatu in %1$s cun %2$s errores + + + %1$s capìtulu + %1$s capìtulos + + + %d arrastadore + %d arrastadores + + + Brinchende %d capìtulu, sa fonte non lu tenet o est istadu bogadu cun unu filtru + Brinchende %d capìtulos, sa fonte non los tenet o sunt istados bogados cun unu filtru + + + Eris + %1$d dies a oe + + + Su capìtulu non lèghidu imbeniente + Sos %d capìtulos non lèghidos imbenientes + + + Su capìtulu imbeniente + Sos %d capìtulos imbenientes + + + Mancat %1$s capìtulu + Mancant %1$s capìtulos + + + 1 die + %d dies + + \ No newline at end of file diff --git a/i18n/src/main/res/values-sc/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/sc/strings-aniyomi.xml similarity index 81% rename from i18n/src/main/res/values-sc/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/sc/strings-aniyomi.xml index 99a8867f6d..c33687693a 100644 --- a/i18n/src/main/res/values-sc/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/sc/strings-aniyomi.xml @@ -38,32 +38,4 @@ Pro Tachiyomi b\'at bisòngiu de WebView Iscarrigamentu in pàusa Agiornamentos de sos capìtulos - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-sc/strings.xml b/i18n/src/commonMain/resources/MR/sc/strings.xml similarity index 87% rename from i18n/src/main/res/values-sc/strings.xml rename to i18n/src/commonMain/resources/MR/sc/strings.xml index d69b435ef0..c34a5c45ef 100644 --- a/i18n/src/main/res/values-sc/strings.xml +++ b/i18n/src/commonMain/resources/MR/sc/strings.xml @@ -1,11 +1,13 @@ Nùmene - Manga + Categorias + Elementos de sa biblioteca Capìtulos Arrastamentu Cronologia Impostatziones + Fila de sos iscarrigamentos Biblioteca Cronologia Agiornamentos @@ -15,7 +17,6 @@ Informatziones de s\'estensione Impostatziones Filtru - Iscarrigados Sinnados Non lèghidos Boga su filtru @@ -83,6 +84,7 @@ Restritziones de su dispositivu a s\'agiornamentu automàticu Durante sa càrriga Cun s\'istadu \"acabbada\" + Categoria predefinida Pedi semper Agiorna Installa @@ -105,7 +107,7 @@ Navigatzione Teclas de su volume Fùrria sas teclas de su volume - Ammustra cun su tocu longu + Ammustra sas atziones cun su tocu longu Colore de isfundu Arbu/biancu Nieddu @@ -130,7 +132,7 @@ Peruna animatzione Normale Lestra - Casta predefinida de rotatzione + Rotatzione predefinida Lìbera Blocadu in verticale Blocadu in orizontale @@ -147,13 +149,12 @@ Cuartùrtimu capìtulu lèghidu Cuintùrtimu capìtulu lèghidu Iscàrriga sos capìtulos noos - Servìtzios + Arrastadores Crea una còpia de seguresa Podet èssere impreada pro ripristinare sa biblioteca atuale Riprìstina una còpia de seguresa Riprìstina sa biblioteca dae una còpia de seguresa Cartella de sa còpia de seguresa - Còpias de seguresa automàticas Frecuèntzia de sarvatàgiu de sas còpias de seguresa Màssimu de còpias de seguresa Còpia de seguresa creada @@ -166,8 +167,9 @@ Errore durante s\'isboidamentu Iscantzella sos cookies Cookies iscantzellados + Isbòida sa base de datos + Iscantzella sa cronologia pro sos elementos chi non sunt sarvados in sa biblioteca tua Boghes iscantzelladas - Annoa s\'arrastamentu Versione Imbia raportos a pitzu de sos arrestos anòmalos Agiudat a acontzare cale si siat faddina. Perunu datu sensìbile at a èssere imbiadu @@ -178,7 +180,6 @@ Ses intradu Errore disconnotu Agiornende sa categoria - Locale Non bi sunt àteros risultados Fonte locale Àteru @@ -197,6 +198,8 @@ Fonte no installada: %1$s Capìtulu %1$s Iscarrighende (%1$d/%2$d) + Errore + In pàusa Tìtulu de sa fonte Nùmeru de capìtulu Pro fonte @@ -215,11 +218,11 @@ Tìtulu Istadu Istadu - Incumintzadu Casta Esistit giai una categoria cun custu nùmene! Categorias iscantzelladas Custu at a bogare sa data de leghidura de custu capìtulu. Seguru ses\? + Annànghere a sa biblioteca\? Immàgine sarvada Filtru personalizadu Imposta comente cobertedda @@ -247,7 +250,6 @@ Ischerta sa còpia de seguresa Iscàrriga Non bi sunt agiornamentos disponìbiles noos - Chirchende agiornamentos… Iscarrighende… Toca pro installare s\'agiornamentu Errore de iscarrigamentu @@ -262,6 +264,7 @@ Iscarrigamentu de su capìtulu fallidu pro more de un\'errore imprevistu Peruna connessione Wi-Fi disponìbile Peruna connessione de retza disponìbile + Iscarrigamentos in pàusa Comunu Aberi in WebView Colore a 32 bit @@ -301,28 +304,17 @@ Bloca cando no est ativu Semper Mai - - A pustis de %1$s minutu - A pustis de %1$s minutos - Ischermu seguru Agiornamentos in suspesu Ammustra sos cuntenutos in s\'àrea de retàlliu Isfrancamentu de Cloudflare fallidu Agiorna s\'aplicatzione de WebView pro otènnere una cumpatibilidade prus manna + Agiornamentos de sos capìtulos S\'ischermu seguru cuat sos cuntenutos de s\'aplicatzione cando mudas de aplicatzione e blocat sas ischermadas Visualizatzione - - %1$d capìtulu nou - %1$d capìtulos noos - Capìtulu %1$s Capìtulu %1$s e àteros %2$d Capìtulos %1$s - - Capìtulos %1$s e 1 àteru - Capìtulos %1$s e àteros %2$d - Cua su cuntenutu de sas notìficas Chirchende capìtulos noos Disabìlita s\'otimizatzione de sa bateria @@ -330,32 +322,17 @@ S\'otimizatzione de sa bateria est giai disabilitada Indiritzu de posta eletrònica Ammustra semper sa transitzione de capìtulu - - Pro %d tìtulu - Pro %d tìtulos - Menù - Riòrdina Prus noos Prus betzos Manda a pitzus Manda a fundu - - B\'at un\'agiornamentu disponìbile pro un\'estensione - B\'ant agiornamentos disponìbiles pro %d estensiones - Agiornamentos de sas estensiones - Verìfica su situ web cun WebView Agiornende sa biblioteca Leghende Brinca sos capìtulos filtrados Fontes Distantziamentu laterale - Perunu - 25% - 20% - 15% - 10% Verticale longu cun interrutziones Fùrria s\'ischertada Apicadu @@ -368,8 +345,6 @@ De prus Litzèntzias a còdighe abertu Situ web - Cunfirma s\'essida - Incarca in segus torra pro essire Iscarrigados ebbia Cap. %1$s - %2$s Ùrtima impreada @@ -382,27 +357,14 @@ %02d min e %02d seg Ghia a sas fontes locales Filtrat totu sos elementos in sa biblioteca tua - Chirca petzi in sas fontes apicadas in sa chirca globale - - Nd\'abarrat %1$s - Nd\'abarrant %1$s - Pro custa sèrie Murru - - %d categoria - %d categorias - Mìnimat sa creatzione de bandas, ma diat pòdere influentzare sas prestatziones Modalidade de leghidura Abertura de sas impostatziones de sistema fallida - - Fatu in %1$s cun %2$s errore - Fatu in %1$s cun %2$s errores - - Sincronizatzione a una diretzione ebbia pro agiornare su progressu in sos capìtulos in su servìtziu de arrastamentu. Imposta s\'arrastamentu pro sos elementos dae su butone de arrastamentu issoro. + Sincronizatzione a una diretzione ebbia pro agiornare su progressu in sos capìtulos in servìtzios de arrastamentu esternos. Imposta s\'arrastamentu pro sos elementos dae su butone de arrastamentu issoro. Annoa sas coberteddas de sa biblioteca - Custa estensione non benit dae sa lista de estensiones ufitziales de Tachiyomi. + Custa estensione non benit dae sa lista ufitziale. No ufitziale Pro data de carrigamentu Datos @@ -423,10 +385,6 @@ Incumintza Fonte no agatada Disabìlita - - %1$s capìtulu - %1$s capìtulos - Tenet bisòngiu chi torres a allùghere s\'aplicatzione pro tènnere efetu Retza Ambos @@ -442,23 +400,14 @@ Modalidade de leghidura Tema Data de annanghidura - - %d arrastadore - %d arrastadores - Non tenes fontes apicadas Acabada Progressu - Iscarrigamentu acabadu Errores Arrastadores a sos cales no as fatu atzessu: Sas fontes de custa estensione diant pòdere cuntènnere cuntenutos NSFW (18+) 18+ Custu no impedit a estensiones no ufitziales o potentzialmente non curretas de ammustrare cuntenutos NSFW (18+) in s\'aplicatzione. - - Brinchende %d capìtulu, sa fonte non lu tenet o est istadu bogadu cun unu filtru - Brinchende %d capìtulos, sa fonte non los tenet o sunt istados bogados cun unu filtru - Perunu capìtulu agatadu Impostatziones predefinidas de sos capìtulos agiornadas Imposta comente predefinidu @@ -512,14 +461,13 @@ Data de recùperu de su capìtulu Sos elementos in sas categorias esclùdidas non s\'ant a iscarrigare nemmancu si sunt fintzas in categorias inclùdidas. Iscarrigamentu automàticu + Sos elementos in sas categorias esclùdidas non s\'ant a agiornare nemmancu si sunt fintzas in categorias inclùdidas. Toca pro bìdere sos detàllios Còpia in punta de billete fallida Custa versione de Android no est prus suportada Orizontale Verticale - Casta de rotatzione - Creat cartellas in base a su tìtulu de sos elementos - Sarva sas pàginas in cartellas separadas + Rotatzione Atziones Iscala de murros Disabìlita sa modalidade anònima @@ -532,25 +480,22 @@ Òrdina pro Formadu de su capìtulu non vàlidu Capìtulu no agatadu - Agiorna sos arrastadores cando agiornas sa biblioteca - Annoa sos arrastadores automaticamente Istudadu Allutu Restritziones: %s + Fontes locales B\'at àpidu un\'errore cumpartende sa cobertedda B\'at àpidu un\'errore sarvende sa cobertedda Cobertedda sarvada Cobertedda Ghia pro s\'arrastamentu - Impostatziones de ordinamentu e visualizatzione pro categoria + Impostatziones de ordinamentu pro categoria Non tenes galu peruna categoria. Incumintza a iscarrigare como Tako - Agiornende sa biblioteca… (%1$d/%2$d) - Custu arrastadore est cumpatìbile petzi cun sa fonte Komga. Sa còpia de seguresa e su riprìstinu diant pòdere non funtzionare comente si tocat si s\'otimizatzione MIUI est disabilitada. - Servìtzios chi frunint funtzionalidades avantzadas pro fontes ispetzìficas. Sos elementos benint arrastados in manera automàtica cando los annanghes a sa biblioteca tua. - Servìtzios avantzados + Frunit funtzionalidades avantzadas pro fontes ispetzìficas. Sos elementos benint arrastados in manera automàtica cando los annanghes a sa biblioteca tua. + Arrastadores avantzados Modalidade iscura niedda pura Yotsuba Yin e Yang @@ -567,24 +512,16 @@ Sensibilidade pro cuare su menù cun s\'iscurrimentu Atividade in s\'isfundu Furriada - Longa (curtza+, n dies a oe) - Curtza (oe, eris) - Marcas temporales relativas - - Eris - %1$d dies a oe - Oe - Dae pagu Birde abba e turchesu Autèntica·ti pro cunfirmare sa modìfica Predefinida - Marcas temporales Aparèntzia Arrasta Ghia pro incumintzare Modalidade pro tauleddas Agiuda a bortare + Categorias esclùdidas Informatziones de s\'aplicatzione Installa e avia Shizuku pro l\'impreare comente installadore de estensiones. Shizuku no est in esecutzione @@ -608,14 +545,12 @@ Polìtica de riservadesa Sarva comente archìviu CBZ Pro tènnere un\'agiudu pro acontzare sos errores de agiornamentu de sa biblioteca pòmpia·ti %1$s - Brinca sos agiornamentos de sèries + Brinca sos agiornamentos de sos elementos PF e ghias Publicatzione acabada In pàusa Annullada - 5% - Ismànnia s\'immàgine in orizontale - Incumintzadu + Ismànnia in automàticu sas immàgines largas Grìllia cun coberteddas ebbia No incumintzadas Iscurre sas pàginas largas @@ -636,9 +571,6 @@ Isbòida sos datos de WebView Datos de WebView isboidados Serra - Cando sa bateria no est bassa - Ammustra sas fontes apicadas dòpias - Repite sas fontes apicadas in sos grupos de limbas rispetivos Contu de non lèghidos Peruna fonte agatada Peruna fonte installada agatada @@ -679,15 +611,10 @@ S\'istringa de s\'agente de s\'utente non podet èssere bòida Iscàrriga sos imbenientes Iscàrriga in automàticu durante sa letura - - Su capìtulu non lèghidu imbeniente - Sos %d capìtulos non lèghidos imbenientes - - Funtzionat petzi cun sos elementos in biblioteca e si su capìtulu atuale e cussu imbeniente sunt giai iscarrigados + Funtzionat petzi si su capìtulu atuale e s\'imbeniente sunt giai iscarrigados. Seguru ses\? As a bogare \"%s\" dae sa biblioteca tua Mùltiplas - Partzi sas immàgines artas (BETA) Ùrtimu agiornamentu de sa biblioteca: %s Populare Permissu de archiviatzione non cuntzessu @@ -695,7 +622,6 @@ Chirca… %s at tentu un\'errore non prevìdidu. Ti cussigiamus de cumpartzire sos registros de sas serraduras anòmalas in su canale de suportu nostru de Discord. Torra a allùghere s\'aplicatzione - Limba de s\'aplicatzione, notìficas Tema, data e formadu de s\'ora Categorias, agiornamentos globales, iscurrimentu de capìtulos Modalidade de leghidura, aspetu, navigatzione @@ -705,15 +631,43 @@ Còpias de seguresa manuales e globales Blocu de s\'aplicatzione, ischermu seguru Registros de serraduras anòmalas, otimizatziones de sa bateria - B\'at àpidu un\'errore imprevistu + Oops! Positzione non vàlida: %s Tìtulu disconnotu Istringa de agente de utente non vàlida Como como - Inditzizende sos iscarrigamentos + Verifichende sos iscarrigamentos Aberi un\'elementu a casu Perunu elementu atzapadu in custa categoria -Fila de sos iscarrigamentos + Sas versiones de F-Droid non sunt prus suportadas in manera ufitziale. +\nToca pro nde ischire de prus. + Bogare sa data\? + Invàlida s\'ìnditze de sos iscarrigamentos + Custu at a bogare sa data de incumintzu seletzionada in antis dae %s + Custu at a bogare sa data de fine seletzionada in antis dae %s + Iscarrigados + In locale + In s\'agiornamentu globale + Totale + Lèghidos + Elementos arrastados + Votu mèdiu + In impreu + %dm + %ds + Istatìsticas + Incumintzados + Panoràmica + Elementos cumpletados + Elementos + N/A + %do + Tempus de leghidura + Arrastadores + %dd + Como nono + Sa categoria est bòida + Copiadu in punta de billete Tenes giai un\'elementu in sa biblioteca tua cun su matessi nùmene. \n \nBoles sighire su matessi\? @@ -721,10 +675,6 @@ A disponimentu ma sa fonte no est installada: %s Errore %1$s: %2$s *netzessàriu - - Su capìtulu imbeniente - Sos %d capìtulos imbenientes - Cua sos elementos giai in sa biblioteca Còpia in punta de billete Agiorna sa categoria @@ -732,14 +682,43 @@ Istratu superiore Gira sas pàginas largas pro las adatare Fùrria s\'orientamentu de sas pàginas largas giradas - - Mancat %1$s capìtulu - Mancant %1$s capìtulos - %d pro riga Tocu dòpiu pro ismanniare Atzione de iscurrimentu a destra Iscurrimentu de capìtulu Atzione de iscurrimentu a manca Informatziones de depuratzione de còdighe - \ No newline at end of file + Càrcula cada + Intervallu de recùperu personalizadu + Recùpera cada mese (28 dies) + Abbandonadu\? In ritardu de 20+ dies e 2 meses + Agiornamentu imbente prevìdidu + Foras de su perìodu de publicatzione prevìdidu + Intervallos + Imposta s\'agiornamentu pro cada + Brincadu ca non bi fiat peruna publicatzione prevìdida oe + Imposta s\'intervallu + Verìfica in ritardu de 10+ dies + Perìodu de controllu coladu + Personaliza s\'intervallu + AB + Bogare s\'arrastadore de %s\? + Custu at a bogare s\'arrastamentu locale. + Boga fintzas dae %s + Iscantzella sos iscarrigados + Toca inoghe pro agiudu cun Cloudflare + Isbloca %s + Sincronizende sa biblioteca + Non at s\'est pòdidu creare un\'archìviu de còpia de seguresa + Sincronizatzione de sa biblioteca acabada + Moe sa sèrie a fundu + Cun lissèntzia ufitziale - Perunu capìtulu de ammustrare + Peruna connessione a ìnternet + Ìnditze de sos iscarrigamentos invalidadu + Tenet resurtados + Atzessu a s\'arrastadore + Marcas temporales relativas + HTTP %d, verìfica su situ in WebView + \"%1$s\" in càmbiu de \"%2$s\" + Non s\'est pòdidu atzèdere a %s + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/sdh/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/sdh/plurals-aniyomi.xml new file mode 100644 index 0000000000..4c797a8439 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/sdh/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/sdh/plurals.xml b/i18n/src/commonMain/resources/MR/sdh/plurals.xml new file mode 100644 index 0000000000..6e05d35ffa --- /dev/null +++ b/i18n/src/commonMain/resources/MR/sdh/plurals.xml @@ -0,0 +1,7 @@ + + + + پاش 1 خولەک + پاش %1$s خولەک + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/sdh/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/sdh/strings-aniyomi.xml new file mode 100644 index 0000000000..9d2c0e035e --- /dev/null +++ b/i18n/src/commonMain/resources/MR/sdh/strings-aniyomi.xml @@ -0,0 +1,9 @@ + + + کاتیگۆرییەکان + بکەرەوەTachiyomi + کۆتانوێکردنەوەی مانگا + نیشاندانی مانگا + مانگای ناوخۆیی + زیادکردنی مانگا بۆ کۆکراوەکان؟ + \ No newline at end of file diff --git a/i18n/src/main/res/values-sdh/strings.xml b/i18n/src/commonMain/resources/MR/sdh/strings.xml similarity index 90% rename from i18n/src/main/res/values-sdh/strings.xml rename to i18n/src/commonMain/resources/MR/sdh/strings.xml index d5d525f227..cd07d5f6d6 100644 --- a/i18n/src/main/res/values-sdh/strings.xml +++ b/i18n/src/commonMain/resources/MR/sdh/strings.xml @@ -48,7 +48,6 @@ داونلۆد هیچ کاتیگۆرییەکت نییە. دەست بنێ بە دوگمەی زیادە تا کاتیگۆرییەک بۆ ڕێکخستنی تۆماری ڕابردووت درووست بکەیت. سڕینەوە - دووبارە گەڕانەوە بکە بۆ چوونە دەرەوە هێج نوێکارییەک نییە لەم دواییانەدا سەرچاوەکان هیچ مانگایەکت لەم دواییانە نەخوێندووەتەوە @@ -74,7 +73,6 @@ هەڵوەشاندنەوەی هەموو هەڵوەشاندنەوەی هەموو بۆ ئەم زنجیرەیە ڕیزکردن - دووبارە ڕێکخستن گواستنەوە بۆ خوارەوە دامەزراندن هاوبەشیکردن @@ -133,10 +131,8 @@ باری ئاسۆیی باری ستوونی قوفڵکراو B - 15% دۆخی خوێندنەوە سازکاری خوێندنەوە - 25% کراوەتە ناو کۆکراوەکان خۆڵەمێشی جۆری خولانەوە @@ -157,12 +153,7 @@ ین و یانگ یۆتسوبا دۆخی ڕەشی پوخت - تۆماری کات - تۆماری کاتی ڕێژەیی - کورت (ئەمڕۆ، دوێنێ) - درێژ (کورت، + چەند ڕۆژ پێش ئێستا) ڕێکخستنی بەروار - دڵنیابوون لە دەرچوون بەڕێوەبردنی ئاگانامەکان سازکاری پارێزراوی پێویست بە کردنەوە دەکات @@ -174,18 +165,12 @@ سکرین شۆت بلۆکردن و شاردنەوەی ناوەڕۆک، لە کاتی گۆڕین و دەرچوون لە بەرنامە سەرچاوەی سەروو (18) ساڵ پیشاندان لە لیستی سەرچاوە و زیادکراوەکان - لەم دواییانەدا - ئەمڕۆ شێوازی پیشاندان - 10% - هیچ - نوێکردنەوەی تۆماری ڕابردوو…( (%2$d) / (%1$d) ) نەرمە لێدانی پێچەوانە هیچ ستوونی هەردووکیان کردارەکان - خەزێنە کردنی لاپەڕەکان لە فۆڵدەری جیاوزدا سپی خۆڵەمێشی پلە پلە پێچەوانەکراو @@ -195,18 +180,10 @@ شێوازی دوو ‌هێندە داونلۆدی ئۆتۆماتیکی داونلۆدکردنی چاپتەری نوێ - - پاش 1 خولەک - پاش %1$s خولەک - - - دوێنێ - %1$d ڕۆژ پێش ئێستا - بەدواداچوون زیاد بکە کردنە ناو کۆکراوەکان تکایە مانگا بۆ کۆکراوەکان زیاد بکە پێش کردنی ئەمە - 20% + زیادکردنی مانگا بۆ کۆکراوەکان؟ شوێنی داونلۆد داونلۆدکردن تەنها داونلۆدکراوەکان @@ -223,7 +200,6 @@ دەوروبەری لاپەڕە گونجاو بە شاشە ئازاد - درووستکردنی فۆڵدەر بە پێی تایتڵی مانگا ڕەنگی باکگراوند سووچ ڕاست و چەپ @@ -254,5 +230,5 @@ لادانی هەمووشتێك گەڕان… \?ڕەشبکەیتەوە \"%s\"ئایا ئەتەوێ کە بەشی -لیستی داونلۆد - \ No newline at end of file + لیستی داونلۆد + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/sk/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/sk/plurals-aniyomi.xml new file mode 100644 index 0000000000..89b4d7f8f2 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/sk/plurals-aniyomi.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/sk/plurals.xml b/i18n/src/commonMain/resources/MR/sk/plurals.xml new file mode 100644 index 0000000000..b58084ecf3 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/sk/plurals.xml @@ -0,0 +1,68 @@ + + + + Pre %d titul + Pre %d tituly + Pre %d titulov + + + Dostupná aktualizácia rozšírenia + %d dostupných aktualizácii rozšírenia + %d dostupné aktualizácie rozšírenia + + + %1$d nová kapitola + %1$d nové kapitoly + %1$d nových kapitol + + + Po %1$s minute + Po %1$s minútach + Po %1$s minútach + + + Včera + Pred %1$d dňami + Pred %1$d dňami + + + %d sledovač + %d sledovače + %d sledovačov + + + Ďalšia neprečítaná kapitola + Ďalšie %d neprečítané kapitoly + Ďalších %d neprečítaných kapitol + + + %1$s zostáva + %1$s zostávajúce + %1$s zostávajúcich + + + Kapitoly %1$s a 1 ďalšia + Kapitoly %1$s a %2$d ďalšie + Kapitoly %1$s a %2$d ďalších + + + %1$s kapitola + %1$s kapitoly + %1$s kapitol + + + Preskočenie %d kapitoly, buď zdroj chýba, alebo bol odfiltrovaný + Preskočenie %d kapitol, buď zdroj chýba, alebo bol odfiltrovaný + Zložky %d kapitoly, buď zdroj chýba, alebo boli filtrované + + + Dokončené za %1$s s %2$s chybou + Dokončené za %1$s s %2$s chybami + Dokončené za %1$s s %2$s chybami + + + %d kategória + %d kategórie + %d kegórií + + \ No newline at end of file diff --git a/i18n/src/main/res/values-sk/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/sk/strings-aniyomi.xml similarity index 75% rename from i18n/src/main/res/values-sk/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/sk/strings-aniyomi.xml index 7fcd32008b..f5f3996ac7 100644 --- a/i18n/src/main/res/values-sk/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/sk/strings-aniyomi.xml @@ -34,39 +34,4 @@ Nepodarilo sa stiahnuť kapitoly z dôvodu nedostatku úložného priestoru Upozornenie: Veľké hromadné sťahovanie môže viesť k spomaleniu zdrojov a/alebo blokovaniu Tachiyomi. Klepnutím sa dozviete viac. WebView je potrebné pre Tachiyomi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-sk/strings.xml b/i18n/src/commonMain/resources/MR/sk/strings.xml similarity index 87% rename from i18n/src/main/res/values-sk/strings.xml rename to i18n/src/commonMain/resources/MR/sk/strings.xml index 299c1a4e2b..856a5f5511 100644 --- a/i18n/src/main/res/values-sk/strings.xml +++ b/i18n/src/commonMain/resources/MR/sk/strings.xml @@ -1,11 +1,13 @@ Názov + Kategórie Záznamy v knižnici Kapitoly Sledovanie História Nastavenia + Sťahujúce sa Knižnica Nedávno čítané Updaty @@ -16,7 +18,6 @@ Pomoc Nastavenia Filter - Stiahnuté Uložené Neprečítané Zrušiť filter @@ -85,6 +86,7 @@ Automatické aktualizácie obmedzení zariadenia Pri nabíjaní So stavom \"Dokončené\" + Predvolená kategória Vždy sa opýtať aktualizovať Nainštalovať @@ -163,7 +165,6 @@ Obnoviť zálohu Obnoviť knižnicu zo záložného súboru Adresár na zálohy - Automatické zálohovanie Frekvencia zálohovania Maximálny počet záloh Záloha bola vytvorená @@ -176,6 +177,8 @@ Počas vymazania sa vyskytla chyba Vymazať cookies Súbory cookie boli vymazané + Vymazať databázu + Odstránenie histórie mangy, ktorá nie je uložená vo vašej knižnici Späť Vpred Obnoviť @@ -183,7 +186,6 @@ Zastaraný Toto rozšírenie už nie je k dispozícii. Záznamy boli odstránené - Obnoviť sledovanie Verzia Odosielať správy o zlyhaní Pomáha opraviť akékoľvek chyby. Nebudú odoslané žiadne citlivé údaje @@ -194,7 +196,6 @@ Prihlásený Neznáma chyba Aktualizuje sa kategória - Lokálny Žiadne ďalšie výsledky Lokálny zdroj Ostatné @@ -233,11 +234,11 @@ Názov Stav Stav - Zahájeno Typ Kategória s týmto názvom už existuje! Kategórie boli odstránené Týmto sa odstráni dátum prečítania tejto kapitoly. Si si istý\? + Pridať mangu do knižnice\? Obrázok bol uložený Vlastný filter Nastaviť ako obal @@ -265,7 +266,6 @@ Vyberte záložný súbor Stiahnuť Žiadné nové aktualizácie - Vyhľadávanie aktualizácií… Prebiehá stahovanie… Klepnutím nainštalujte Chyba sťahovania @@ -288,7 +288,6 @@ Zobraziť kapitoly Zrušiť všetky Menu - Zmeniť poradie Najnovšie Najstaršie Presunúť navrch @@ -296,11 +295,6 @@ Nepodarilo sa obísť službu Cloudflare Pozastavené Neprečítané - - Pre %d titul - Pre %d tituly - Pre %d titulov - Hľadám nové kapitoly Skryť obsah upozornení Zakázať všetko @@ -309,24 +303,13 @@ Hľadať v nastaveniach Dátum pridaný Dátum načítania kapitoly - Stlačte tlačidlo späť znova pre ukončenie Prihlásiť sa pre potvrdenie zmien Predvolené Zdroje Viac - - Dostupná aktualizácia rozšírenia - %d dostupných aktualizácii rozšírenia - %d dostupné aktualizácie rozšírenia - Kapitoly %1$s Kapitola %1$s a %2$d ďalšie Kapitola %1$s - - %1$d nová kapitola - %1$d nové kapitoly - %1$d nových kapitol - Zabezpečená obrazovka Ťuknutím zobrazíte podrobnosti Podľa systému @@ -339,8 +322,8 @@ Zobraziť počet položiek Podľa dátumu nahratia Začať - Začaté Mriežka len s obalmi + Lokálny zdroj Jazyk Pripnúť Zrušiť všetko pre túto sériu @@ -350,16 +333,10 @@ Vzostupne Zostupne Presunúť na spodok - - Po %1$s minute - Po %1$s minútach - Po %1$s minútach - Zakázať Odopnúť Upozornenie Sledované - Dlhý (krátky+, pred n dňami) FAQ a návody Téma Tmavý režim @@ -373,11 +350,7 @@ Čisto čierny tmavý režim Jahodové Daiquiri Modrozelená a tyrkysová - Časová značka - Relatívne časové značky - Krátky (dnes, včera) Formát dátumu - Potvrdenie odchodu Spravovať oznámenia Bezpečnosť Vyžaduje odomknutie @@ -387,22 +360,14 @@ Preskočiť aktualizáciu záznamov Zobraziť v zoznamoch zdrojov a rozšírení NSFW (18+) zdroje - Nedávno Dnes Iba na Wi-Fi Obmedzenia: %s Ktoré sa ešte nezačali Toto nastavenie avšak nebráni tomu, aby sa v aplikácii objavil neoficiálny alebo potenciálne nesprávne označený obsah NSFW (18+). - - Včera - Pred %1$d dňami - Pred %1$d dňami - Globálna aktualizácia Automatický obnoviť metadata Pri aktualizácii knižnice skontrolujte nový obal a podrobnosti - Automaticky obnovovať sledovače - Aktualizujte sledovače pri aktualizácii knižnice Zobraziť Každé 3 dni Aktualizácia už prebieha @@ -433,7 +398,6 @@ Nenašla sa žiadna aplikácia na výber súborov Kompletný Prílivová vlna - 15% Uložiť ako archív CBZ Zlepšuje výkon čítačky Návod k sledovaniu @@ -442,16 +406,9 @@ Čo je nové Pomôžte s prekladom Licencia Open Source - Skontrolujte webovú stránku vo WebView Chyba pri zdieľaní obalu - - %d sledovač - %d sledovače - %d sledovačov - Zdroj sa nenašiel No, toto je trápne - Aktualizácia knižnice... (%1$d/%2$d) Populárne Zoznam čítania Dátum ukončenia @@ -470,14 +427,12 @@ Zoznam pozastavených položiek Stiahnuť dopredu Automatické sťahovanie počas čítania - Funguje iba na položkách v knižnici a ak je aktuálna kapitola a nasledujúca kapitola už stiahnutá + Funguje iba na položkách v knižnici a ak je aktuálna kapitola a nasledujúca kapitola už stiahnutá. Neznámy stav Prestávka - Tento sledovač je kompatibilný iba so zdrojom Komga. Pridať sledovanie Nedokončený zoznam Zatiaľ nemáte žiadne kategórie. - Sťahovanie dokončené Vekové hodnotenie Dátum Znižuje pruhovanie farieb, ale môže ovplyvniť výkon @@ -501,12 +456,10 @@ Odstrániť kategóriu Žiadne Zahrnúť: %s - Vytvára priečinky podľa názvu mangy Okraj Vpravo a vľavo Vľavo Obrátený portrét - 10% Aktualizácie rozšírení Jazyk aplikácie Jazyk @@ -523,7 +476,6 @@ Pre túto sériu Bočné odsadenie Automatické sťahovanie - Opakovať pripnuté zdroje v ich príslušných jazykových skupinách Nenašiel sa žiadny zdroj Priebeh Vymazať históriu @@ -531,11 +483,6 @@ Nastaviť ako predvolené Jednosmerná synchronizácia na aktualizáciu priebehu kapitol v službách sledovania. Nastavte sledovanie pre jednotlivé položky mangy z ich tlačidla sledovania. Režim čítania - - Ďalšia neprečítaná kapitola - Ďalšie %d neprečítané kapitoly - Ďalších %d neprečítaných kapitol - Vynechané Aktualizácie kapitol V databáze je manga %1$d, ktorá sa nenachádza v knižnici @@ -544,11 +491,6 @@ Obnovenie režimu čítania a orientácie pre všetky série Podrobné logovanie Skontrolovať aktualizácie - - %1$s zostáva - %1$s zostávajúce - %1$s zostávajúcich - Kap. %1$s - %2$s Strana %d sa pri rozdeľovaní nenašla Publikovanie ukončené @@ -565,10 +507,8 @@ Nepodarilo sa získať zoznam rozšírení Inštaluje sa rozšírenie… Invertovať oblasti dotyku - Uloženie stránok do samostatných priečinkov - Sivá + Šedivá Na šírku - Zahrnúť len pripnuté zdroje Obnovenie už prebieha Uložiť logy o chybách do súboru na zdieľanie s vývojármi Obal @@ -578,17 +518,16 @@ Vertikálne Sledovače, do ktorých nie ste prihlásení: DNS cez HTTPS (DoH) - Zobraziť duplicitné pripnuté zdroje Neplatný záložný súbor %02d min., %02d s Viacjazyčné Nenašli sa žiadne kapitoly Informácie o aplikácii Verzia - Rozdelenie vysokých obrázkov (BETA) Zobraziť obsah v oblasti výrezu Horizontálne Zakázané + Vylúčené kategórie Aktualizované na v%1$s Iba stiahnuté Zoznam prianí @@ -597,24 +536,16 @@ Zdroj nie je podporovaný Nenainštalované %1$s: %2$s, strana %3$d - - Kapitoly %1$s a 1 ďalšia - Kapitoly %1$s a %2$d ďalšie - Kapitoly %1$s a %2$d ďalších - - Keď batéria nie je vybitá Typ rotácie - 25% Zatvoriť + Záznamy vo vylúčených kategóriách nebudú aktualizované, aj keď sú tiež v zahrnutých kategóriách. Čakajúce aktualizácie - Žiadne Ďalšia strana Otvoriť na GitHub-e Nová verzia je k dispozícii z oficiálnych vydaní. Klepnutím sa dozviete, ako migrovať z neoficiálnych vydaní F-Droid. Príručka Začíname Zakázať režim inkognito Menej - 5% Služby, ktoré poskytujú rozšírené funkcie pre konkrétne zdroje. Mangy sú automaticky sledované po pridaní do vašej knižnice. Rozdelenie na dve strany Odstrániť všetko @@ -644,16 +575,6 @@ Nepodarilo sa otvoriť nastavenia zariadenia Niektorí výrobcovia majú ďalšie obmedzenia aplikácií, ktoré vypínajú služby na pozadí. Na tejto webovej stránke nájdete viac informácií o tom, ako to opraviť. Režim čítania - - %1$s kapitola - %1$s kapitoly - %1$s kapitol - - - Preskočenie %d kapitoly, buď zdroj chýba, alebo bol odfiltrovaný - Preskočenie %d kapitol, buď zdroj chýba, alebo bol odfiltrovaný - Preskočenie %d kapitol, buď zdroj chýba, alebo bol odfiltrovaný - Chyba pri ukladaní obrázka Aktualizácie aplikácie Widget nie je k dispozícii, keď je povolený zámok aplikácie @@ -667,7 +588,6 @@ Aktualizované predvolené nastavenia kapitol Inverzný Levanduľa - 20% Mangy vo vylúčených kategóriách nebudú stiahnuté, aj keď sú tiež v zahrnutých kategóriách. Čistenie databázy Vymazanie údajov WebView @@ -679,16 +599,6 @@ Sledovať Webová stránka Akcie - - Dokončené za %1$s s %2$s chybou - Dokončené za %1$s s %2$s chybami - Dokončené za %1$s s %2$s chybami - - - %d kategória - %d kategórie - %d kegórií - Vlastný obal Presunúť sériu na začiatok Zásady ochrany osobných údajov @@ -707,11 +617,10 @@ Preskočené, pretože obsahuje neprečítané kapitoly Preskočené, pretože neboli prečítané žiadne kapitoly Formát RARv5 nie je podporovaný -Sťahujúce sa Lokálna Stiahnuté Štatistiky Začaté Hľadať… Otvoriť náhodný záznam - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/sq/plurals.xml b/i18n/src/commonMain/resources/MR/sq/plurals.xml new file mode 100644 index 0000000000..afe747db76 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/sq/plurals.xml @@ -0,0 +1,59 @@ + + + + Pas %1$s minutë + Pas %1$s minutash + + + Dje + %1$d ditë më parë + + + %d kategori + %d kategoritë + + + Kapitulli tjetër i palexuar + %d kapitujt e ardhshëm të palexuar + + + %1$s e mbetur + %1$s kanë mbetur + + + Përfunduar në %1$s me %2$s gabim + Përfunduar në %1$s me %2$s gabime + + + Ofrohet përditësim i shtesës + Ofrohen %d përditësime shtesë + + + Po kalon %d kapitull, ose i mungon burimi ose është filtruar + Po kalon %d kapituj, ose i mungon burimi ose është filtruar + + + %1$d kapitull i ri + %1$d kapituj të rinj + + + Kapitujt %1$s dhe 1 më shumë + Kapitujt %1$s dhe %2$d të tjerë + + + Për %d hyrje + Për %d hyrjet + + + %d gjurmues + %d gjurmuesit + + + %1$s kapitull + %1$s kapituj + + + Kapitulli i rradhës + %d kapituj të rradhës + + \ No newline at end of file diff --git a/i18n/src/main/res/values-sq/strings.xml b/i18n/src/commonMain/resources/MR/sq/strings.xml similarity index 86% rename from i18n/src/main/res/values-sq/strings.xml rename to i18n/src/commonMain/resources/MR/sq/strings.xml index d77e1c630a..b5e18e0a9a 100644 --- a/i18n/src/main/res/values-sq/strings.xml +++ b/i18n/src/commonMain/resources/MR/sq/strings.xml @@ -25,7 +25,6 @@ Përpara Rifresko Aplikacioni i padisponueshem - Gjuha e aplikacionit, njoftimet Shkarkim automatik, shkarko përpara Modaliteti i errët Aktiv @@ -35,7 +34,6 @@ Yotsuba valët e baticës E zezë e pastër modaliteti i errët - Konfirmo daljen Menaxho njoftimet Gjuha e aplikacionit Siguria dhe privatësia @@ -43,20 +41,11 @@ Kyç kur është i papunë Gjithmonë Kurrë - - Pas %1$s minutë - Pas %1$s minutash - Fshih përmbajtjen e njoftimit Ekran i sigurt Burimet NSFW (18+) Shfaq në listat e burimeve dhe shtesave - Kohët e fundit Sot - - Dje - %1$d ditë më parë - Shfaqja Artikuj për rresht Përditësim global @@ -68,14 +57,9 @@ Vetëm në rrjet pa matje Gjatë karikimit Kapërceni përditësimin e hyrjeve - Me kapituj të palexuar Kontrolloni për kopertinë dhe detaje të reja kur përditësoni bibliotekën Kategoria e parazgjedhur - - %d kategori - %d kategoritë - - Regjistrimet në kategoritë e përjashtuara nuk do të përditësohen edhe nëse janë gjithashtu në kategoritë e përfshira. + Regjistrimet në kategoritë e përjashtuara nuk do të përditësohen edhe nëse janë gjithashtu në kategoritë e përfshira. Të gjitha Asnje Përfshi: %s @@ -92,7 +76,6 @@ Udhëzues për fillimin Nuk u gjet asnjë hyrje në këtë kategori Nuk ke kategori. Prekni butonin plus për të krijuar një për organizimin e bibliotekës tuaj. - WebView kërkohet për Tachiyomi Dështoi të anashkalojë Cloudflare Nuk ke ende asnjë kategori. Shkarkimet u ndërprenë @@ -105,7 +88,7 @@ Faqja e meparshme Përditësimet shtesë Përditësimet e aplikacioneve - Përditësimet e kapitullit + Përditësimet e kapitullit U anashkalua Shkarkimet e indeksimit Faqja %d nuk u gjet gjatë ndarjes @@ -119,11 +102,9 @@ Sipas alfabetit Totali i kapitujve Paralajmërim - Zhblloko Tachiyomi Totali i hyrjeve Leximi i fundit Vërtetoni për të konfirmuar ndryshimin - Shtypni përsëri për të dalë Menuja Filtro Sipas numrit të kapitullit @@ -134,7 +115,6 @@ Lista Rrjetë vetëm me mbulesë Gjuha - Shfaq butonin për të vazhduar leximin Trego numrin e artikujve Gozhdo Më të rejat @@ -142,7 +122,6 @@ Po ngarkohet… Sipas datës së ngarkimit Rendit - Rirendit Më e vjetrat Në ngjitje Lëvizni në krye @@ -183,16 +162,11 @@ Tema e aplikacionit Dinamik Tako - E gjatë (Shkurt+, n ditë më parë) - Vula kohore - Vula kohore relative - E shkurtër (sot, dje) Formati i datës Peizazhi Ekrani i sigurt fsheh përmbajtjen e aplikacionit kur ndërron aplikacionet dhe bllokon screenshots Kjo nuk parandalon shtesat jozyrtare ose potencialisht të shënuara gabimisht që të shfaqin përmbajtjen NSFW (18+) brenda aplikacionit. Portret - Kur bateria nuk është e ulët Kufizimet: %s Përditësimet automatike Çdo 6 orë @@ -201,9 +175,7 @@ Me statusin \"Përfunduar\" Kjo nuk ka filluar Çdo 2 ditë - Rifresko automatikisht gjurmuesit Rifresko automatikisht të dhënat meta - Përditësoni gjurmuesit kur përditësoni bibliotekën Gjithmonë pyesni Instaloni Cilësimet sipas kategorisë për renditjen dhe shfaqjen @@ -211,12 +183,11 @@ Përditësimet në pritje Aktiv fikur - Kategoritë + Kategoritë Regjistrimet e bibliotekës Kapituj Ndjekja Historia - Kontrolli i përditësimit të fundit Numër i palexuar Kapitulli i fundit Data e marrjes së kapitullit @@ -256,7 +227,6 @@ Hiqni gjithçka Fillo Rifillo - Shfaq hyrjen Hapni në WebView Hapni në shfletues Migroni @@ -285,7 +255,6 @@ Ndani faqet e gjera Inverto vendosjen e faqeve të ndara Nëse vendosja e faqeve të ndara gjerësisht nuk përputhet me drejtimin e leximit - Ndarja e imazheve të gjata (BETA) Shfaq përmbajtjen në zonën e prerjes Prekni dy herë shpejtësia e animacionit Shfaq numrin e faqes @@ -321,11 +290,6 @@ Çinstaloni Kjo shtesë nuk është nga lista zyrtare e shtesave Tachiyomi. Trashëgimia - Kjo shtesë u nënshkrua me një certifikatë të pabesueshme dhe nuk u aktivizua. -\n -\n Një shtesë me qëllim të keq mund të lexojë çdo kredencial identifikimi të ruajtur në Tachiyomi ose të ekzekutojë kod arbitrar. -\n -\n Duke i besuar kësaj certifikate ju i pranoni këto rreziqe. Kjo shtesë nuk është më e disponueshme. Mund të mos funksionojë siç duhet dhe mund të shkaktojë probleme me aplikacionin. Rekomandohet ta çinstaloni. Gjuha Çelsat e volumit @@ -333,7 +297,6 @@ Instaloni dhe filloni Shizuku për të përdorur Shizuku si instalues shtesë. Animoni tranzicionet e faqeve Trego shkurtimisht modalitetin aktual kur hapet lexuesi - Ruani faqet në dosje të veçanta Ngjyra e sfondit E bardhë Gri @@ -365,12 +328,9 @@ Peizazh i mbyllur G Modaliteti i leximit - Asnje - 5% Më e larta E ulët Shkarko vendndodhjen - Fshi kapitujt Kategoritë e përjashtuara Vendndodhja e personalizuar Vendndodhja e pavlefshme: %s @@ -383,12 +343,7 @@ Ruaje si arkiv CBZ Udhëzues gjurmimi Shërbime të përmirësuara - - Kapitulli tjetër i palexuar - %d kapitujt e ardhshëm të palexuar - Nuk ka kapitull tjetër - Krijon dosje sipas titullit të hyrjeve E zezë Modaliteti i parazgjedhur i leximit Në formë L @@ -408,19 +363,12 @@ A Trego gjithmonë kalimin e kapitullit Mbushje anësore - 15% Peizazh R Duke lexuar - 10% - 20% Ndjeshmëria për fshehjen e menysë në lëvizje - 25% E lartë Më e ulëta - Pasi është shënuar manualisht si e lexuar - Pas leximit fshi automatikisht - Lejo fshirjen e kapitujve të shënuar Kapitulli i dytë deri tek i fundit i lexuar Kapitulli i tretë deri tek i fundit i lexuar Kapitulli i pestë deri tek i fundit i lexuar @@ -428,7 +376,6 @@ Punon vetëm në hyrjet në bibliotekë dhe nëse kapitulli aktual plus kapitulli tjetër janë shkarkuar tashmë Shërbimet Përmirëson performancën e lexuesit - Përditëso progresin pas leximit Sinkronizimi i njëanshëm për të përditësuar përparimin e kapitullit në shërbimet e gjurmimit. Konfiguro gjurmimin për hyrjet individuale nga butoni i tyre i gjurmimit. faqeshënuar Webtoon @@ -436,7 +383,6 @@ Kindle-ish Shërbime që ofrojnë veçori të përmirësuara për burime specifike. Regjistrimet gjurmohen automatikisht kur shtohen në bibliotekën tuaj. Pista - Rezervime automatike Frekuenca rezervë Rezervimet maksimale Gjurmuesit nuk kanë hyrë në: @@ -463,7 +409,6 @@ Lloji Një kategori me këtë emër ekziston tashmë! Nuk u gjet asnjë përputhje - Rivendos të gjithë kapitujt për këtë hyrje Vendos si kopertinë Mënyra e leximit Tjetra: @@ -474,14 +419,6 @@ Hapni në GitHub Shkarko Prekni për të instaluar përditësimin - - %1$s e mbetur - %1$s kanë mbetur - - - Përfunduar në %1$s me %2$s gabim - Përfunduar në %1$s me %2$s gabime - Nuk ka kapitull të mëparshëm Asgjë për të pastruar Çaktivizo modalitetin e fshehtë @@ -506,9 +443,7 @@ Ups! Gabim shkarkimi Anuloni indeksin e shkarkimeve - Pastro memorjen e kapitullit në mbylljen e aplikacionit Pastro bazën e të dhënave - A je i sigurt\? Lexoni kapitujt dhe përparimi i hyrjeve që nuk janë në bibliotekë do të humbasin Nuk ke burime të gozhduara Urdhër nga Data @@ -538,18 +473,12 @@ Epo, kjo është e sikletshme Nuk është instaluar Kopjo - Biblioteka po përditësohet… (%1$d/%2$d) Kapitulli %1$s dhe %2$d më shumë Kapitujt %1$s Kapitulli %1$s %1$d përditësim(e) u anashkalua Për ndihmë se si të rregulloni gabimet e përditësimit të bibliotekës, shihni %1$s Një version i ri është në dispozicion nga publikimet zyrtare. Prekni për të mësuar se si të migroni nga publikimet jozyrtare të F-Droid. - - Ofrohet përditësim i shtesës - Ofrohen %d përditësime shtesë - - Kërko vetëm burime të fiksuara në kërkimin global Krijo kopje rezervë Mund të përdoret për të rivendosur bibliotekën aktuale Rivendos kopjen rezervë @@ -581,8 +510,6 @@ %1$d hyrje jashtë bibliotekës në bazën e të dhënave Pastro të dhënat e WebView Rifresko kopertinat e bibliotekës - Rifresko gjurmimin - Përditëson statusin, rezultatin dhe kapitullin e fundit të lexuar nga shërbimet e gjurmimit Rivendos cilësimet e lexuesit për seri Rivendos modalitetin e leximit dhe orientimin e të gjitha serive Cilësimet e lexuesit nuk mund të rivendoseshin @@ -600,17 +527,14 @@ \nTrokit për të mësuar më shumë. Vetëm të shkarkuarat Modaliteti i fshehtë - Ndalon leximin e historisë Filtro të gjitha hyrjet në bibliotekën tuaj Dil nga %1$s\? Tani keni dalë nga llogaria Gabim i panjohur Kategoria po përditësohet - Nga biblioteka Kapitujt e shkarkuar Skedat Nuk ka më rezultate - Kontrolloni faqen e internetit në WebView Burimi lokal Tjetër Fiksuar @@ -623,7 +547,7 @@ Në bibliotekë Kopjuar në kujtesën e fragmenteve: \n %1$s - Të shtohet në bibliotekë\? + Të shtohet në bibliotekë\? Kapitulli %1$s Po shkarkohet (%1$d/%2$d) Gabim @@ -637,7 +561,6 @@ Kopertina u ruajt Gabim në ndarjen e kopertinës Jeni i sigurt që dëshironi të fshini kapitujt e zgjedhur\? - Aplikoni gjithashtu për të gjitha hyrjet në bibliotekën time Vendose si parësore Nuk u gjet asnjë kapitull A je i sigurt\? @@ -669,10 +592,6 @@ Nuk u gjet asnjë faqe Burimi nuk u gjet Një përditësim po funksionon tashmë - - Po kalon %d kapitull, ose i mungon burimi ose është filtruar - Po kalon %d kapituj, ose i mungon burimi ose është filtruar - Biblioteka po përditësohet Biblioteka e përditësuar së fundi: %s Vetëm tani @@ -685,42 +604,19 @@ Migroni %s hasi në një gabim të papritur. Ne ju sugjerojmë që të fotografoni këtë mesazh, të hidhni regjistrat e aksidenteve dhe më pas ta shpërndani në kanalin tonë të mbështetjes në Discord. Rinisni aplikacionin - Kapitujt nuk mund të shkarkoheshin për shkak të hapësirës së ulët të ruajtjes - Paralajmërim: shkarkimet e mëdha me shumicë mund të çojnë në ngadalësimin e burimeve dhe/ose bllokimin e Tachiyomi. Trokit për të mësuar më shumë. Duke kontrolluar për kapituj të rinj U gjetën kapituj të rinj - - %1$d kapitull i ri - %1$d kapituj të rinj - - - Kapitujt %1$s dhe 1 më shumë - Kapitujt %1$s dhe %2$d të tjerë - Trokit për të mësuar më shumë Përditësimi i kopertinës dështoi - - Për %d hyrje - Për %d hyrjet - U anashkalua sepse ka kapituj të palexuar U anashkalua sepse nuk lexohet asnjë kapitull U anashkalua sepse seritë nuk kërkojnë përditësime Zgjidhni skedarin rezervë Nuk disponohen përditësime të reja Po shkarkohet… - Duke kërkuar për përditësime… Versioni i ri në dispozicion! Cilësimet e kapitullit të parazgjedhur të përditësuara - - %d gjurmues - %d gjurmuesit - Perëndim Mesnate - - %1$s kapitull - %1$s kapituj - Rivendosni bibliotekën nga skedari rezervë Të dhënat nga skedari rezervë do të rikthehen. \n @@ -728,7 +624,6 @@ Skedar rezervë i pavlefshëm Rezervimi nuk përmban asnjë hyrje në bibliotekë. Varg i parazgjedhur i agjentit të përdoruesit - Pastro memorien e kapitullit Fshi historikun për shënimet që nuk janë ruajtur në bibliotekën tënde Të dhënat e WebView u pastruan Të gjitha cilësimet e lexuesit rivendosen @@ -750,14 +645,12 @@ Ndërfaqja e përdoruesve të tabletit Printoni regjistrat me fjalë në regjistrin e sistemit (ul performancën e aplikacionit) Nuk u gjet asnjë aplikacion për përzgjedhjen e skedarëve - Trego numrin e të pa lezuarave ne ikonën e Përditësimeve Pasqyrë e Përgjithshme %ds Statistikë Filluar Lokale Shkarkuar - Detyro applikacionin te rikontrolloj kapitujtë e shkarkuar Total Pikët mesatare I përdorur @@ -781,10 +674,6 @@ Ju keni një hyrje në librarni me të njëjtin emër. \n \nDëshironi të vazhdoni\? - - Kapitulli i rradhës - %d kapituj të rradhës - Përditëso kategorinë %1$s gabim: %2$s *kërkohet diff --git a/i18n/src/commonMain/resources/MR/sr/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/sr/plurals-aniyomi.xml new file mode 100644 index 0000000000..1ef3c97726 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/sr/plurals-aniyomi.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/sr/plurals.xml b/i18n/src/commonMain/resources/MR/sr/plurals.xml new file mode 100644 index 0000000000..3559f7cf86 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/sr/plurals.xml @@ -0,0 +1,83 @@ + + + + Након %1$s минут + Након %1$s минута + Након %1$s минута + + + %1$d ново поглавље + %1$d нова поглавља + %1$d нових поглавља + + + За %d наслов + За %d наслова + За %d наслова + + + Доступно је %d ново ажурирање додатака + Доступна су %d нова ажурирања додатака + Доступно је %d нових ажурирања додатака + + + %d категорија + %d категорије + %d категорија + + + Pre %1$d dan + Pre %1$d dana + Pre %1$d dana + + + Прескаче се %d поглавље, или не постоји у извору или је филтером издвојено + Прескаче се %d поглавља, или не постоји у извору или је филтером издвојено + Прескаче се %d поглавља, или не постоји у извору или је филтером издвојено + + + Завршено у %1$s са %2$s грешком + Завршено у %1$s са %2$s грешке + Завршено у %1$s са %2$s грешака + + + %d трекер + %d трекера + %d трекера + + + %1$s поглавље + %1$s поглавља + %1$s поглавља + + + Поглавља %1$s и још једно + Поглавља %1$s и још %2$d + Поглавља %1$s и још %2$d + + + %1$s преостао + %1$s преостала + %1$s преосталих + + + Следеће непрочитано поглавље + Следећа %d непрочитана поглавља + Следећих %d непрочитаних поглавља + + + Следеће поглавље + Следећа %d поглавља + Следећих %d поглавља + + + Недостаје %1$s поглавље + Недостају %1$s поглавља + Недостаје %1$s поглавља + + + 1 дан + %d дана + %d дана + + \ No newline at end of file diff --git a/i18n/src/main/res/values-sr/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/sr/strings-aniyomi.xml similarity index 79% rename from i18n/src/main/res/values-sr/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/sr/strings-aniyomi.xml index c54b86a7b9..f255c2e863 100644 --- a/i18n/src/main/res/values-sr/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/sr/strings-aniyomi.xml @@ -37,39 +37,4 @@ За Tachiyomi је потребан WebView Преузимање заустављено Ажурирања поглавља - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-sr/strings.xml b/i18n/src/commonMain/resources/MR/sr/strings.xml similarity index 87% rename from i18n/src/main/res/values-sr/strings.xml rename to i18n/src/commonMain/resources/MR/sr/strings.xml index 8f1785ecbb..3602e51d5c 100644 --- a/i18n/src/main/res/values-sr/strings.xml +++ b/i18n/src/commonMain/resources/MR/sr/strings.xml @@ -1,5 +1,5 @@ - + Име Категорије Наслови колекције @@ -7,6 +7,7 @@ Праћење Историја Подешавања + Редослед преузимања Колекција Историја Ново @@ -153,7 +154,6 @@ Врати се на резервну копију Врати се на колекцију из резервне копије Локација резервних копија - Аутоматско прављење резервних копија Учесталост прављења резервних копија Максималан број резервних копија Направљена је резервна копија @@ -169,7 +169,6 @@ Избриши базу података Обриши историју за наслове који нису сачувани у твојој колекцији Уноси избрисани - Освежи праћење Верзија Пошаљи извештаје грешака Помози у поправљању кварова. Ниједан осетљив податак неће бити послат @@ -202,7 +201,7 @@ Паузирано Наслов извора Број поглавља - Прикажи при дугом додиру + Прикажи радње при дугом додиру Према извору Према броју поглавља Преузми @@ -238,11 +237,6 @@ Закључај приликом мировања Увек Никада - - Након %1$s минут - Након %1$s минута - Након %1$s минута - Безбедносни екран Ажурирања на чекању Прикажи @@ -258,32 +252,19 @@ Застарело Сакриј приказ апликације приликом пребацивања између апликација и онемогући снимке екрана Захтевај закључавање - Потврди затварање програма Премести на дно Премести на врх Најстарије Најновије - Преуреди Откачи Закачи Изабери обрнуто Мени - Притисните поново назад да бисте изашли Само преузето Немате категорија. Додирните дугме плус да бисте направили нову категорију за организовање колекције. Поглавља %1$s Поглавље %1$s и још %2$d - - %1$d ново поглавље - %1$d нова поглавља - %1$d нових поглавља - Поглавље %1$s - - За %d наслов - За %d наслова - За %d наслова - Пронађена су нова поглавља Тражење нових поглавља Неуспешно преузимање поглавља. Покушајте поново у секцији за преузимања @@ -302,7 +283,7 @@ Тренутно: Завршено: Користи ову слику као омот\? - Није било могуће учитати слику + Није могуће учитати слику Следеће поглавље није пронађено Страница: %1$d Подесиви филтер @@ -311,7 +292,6 @@ Категорије обрисане Категорија са овим именом већ постоји! Врста - Започето Статус Статус Наслов @@ -333,21 +313,15 @@ Водич за локалне изворе Закачено Последње коришћено - Провери вебсајт у WebView Филтрира све наслове у колекцији Провери ажурирања - Сајт + Sajt Враћање је отказано Враћање на резервну копију није успело Враћање је већ у току Прављење резервне копије није успело Прављење резервне копије је већ у току %02d мин, %02d сек - 25% - 20% - 15% - 10% - Ништа Растојање од ивице Читање Увек прикажи транзицију поглавља @@ -360,16 +334,10 @@ Преузимања Ажурирајте WebView за бољу компатибилност Неуспешно заобилажење Cloudflare-а - - Доступно је %d ново ажурирање додатака - Доступна су %d нова ажурирања додатака - Доступно је %d нових ажурирања додатака - Доступно је ново ажурирање! Грешка током преузимања Додирните за инсталирање ажурирања Преузимање… - Тражење ажурирања… Нема нових ажурирања Преузми Изаберите датотеку резервне копије @@ -389,20 +357,12 @@ Прикажи начин читања Може садржати садржај за одрасле (18+) 18+ - Овај додатак није из званичне листе Таchiyomi додатака. + Овај додатак није из званичне листе. Незванично - - %d категорија - %d категорије - %d категорија - Провери да ли постоје нови омоти при ажурирању колекције Аутоматски освежи метаподатке Ово не спречава незваничне или потенцијално погрешно означене додатке да прикажу садржај за одрасле (18+) унутар апликације. Запраћено - Ознаке за време - Релативне ознаке за време - Кратко (Данас, Јуче) Упозорење Оверите да бисте потврдили промене Укупно наслова @@ -417,7 +377,6 @@ Растуће Подразумевано Покрени преузимање одмах - Дуго (Кратко+, пре n дана) Прикажи број ставки Откажи све за овај наслов Опадајуће @@ -432,25 +391,10 @@ Потпуно црна тема NSFW - извори за одрасле (18+) Показати у листи за изворе и додатке - - Pre %1$d dan - Pre %1$d dana - Pre %1$d dana - Начин читања - Instaler - - Прескаче се %d поглавље, или не постоји у извору или је филтером издвојено - Прескаче се %d поглавља, или не постоји у извору или је филтером издвојено - Прескаче се %d поглавља, или не постоји у извору или је филтером издвојено - + Инсталер Аутоматско преузимање Прати - - Завршено у %1$s са %2$s грешком - Завршено у %1$s са %2$s грешке - Завршено у %1$s са %2$s грешака - Резервна копија/враћање можда неће радити исправно ако није омогућена MIUI оптимизација. Чувајте резервне копије и на другим местима. DNS преко HTTPS-а (DoH) @@ -471,11 +415,6 @@ Картице Непознат статус Поређај по - - %d трекер - %d трекера - %d трекера - Побољшани сервиси Неисправна датотека резервне копије Недостају извори: @@ -498,11 +437,6 @@ Немате закачених извора Поглавље није пронађено Неважећи формат поглавља - - %1$s поглавље - %1$s поглавља - %1$s поглавља - Неуспешно копирање Према датуму поставке Грешка при чувању омота @@ -518,6 +452,7 @@ Непрочитано Напредак Завршено + Ажурирања поглавља Почетни водич Ова Android верзија више није подржана Ажурирана су подразумевана подешаваља поглавља @@ -525,7 +460,7 @@ Нема доступне Wi-Fi везе Опште Нема доступне интернет везе - Преузимање је завршено + Преузимања су заустављена Ажурирања додатака Претходна страница Следећа страница @@ -535,13 +470,6 @@ Посветли (Dodge) Водич за праћење Осетљивост за сакривање менија при померању - - Поглавља %1$s и још једно - Поглавља %1$s и још %2$d - Поглавља %1$s и још %2$d - - Претражи само означене изворе у глобалној претрази - Овај пратилац је компатибилан само са извором Komga. Прикажи начин навигације Датум завршетка Аутоматски @@ -551,20 +479,12 @@ Раздели широке странице Ништа Смањује оштре прелазе међу нијансама, али утиче на перформансе - Аутоматски освежи пратиоце - Ажурирај пратиоце при ажурирању колекције Датум Начин навигације Непознат аутор Није пронађен програм за бирање датотека - - %1$s преостао - %1$s преостала - %1$s преосталих - Грешке Подешавања поглавља - Скоро Данас Лево Још немате категорија. @@ -572,7 +492,7 @@ Свака 3 дана Само преко Wi-Fi-а Ограничења: %s - Поставке за приказ и сортирање одвојено за сваку категорију + Поставке за сортирање одвојено за сваку категорију Наслови у искљученим категоријама се неће ажурирати иако су такође у укљученим категоријама. Укључи: %s Искључи: %s @@ -593,8 +513,6 @@ Вертикално Оба Радње - Сачувај странице у засебне фолдере - Прави датотеке по имену наслова У облику слова L Оријентација Усправно @@ -603,6 +521,7 @@ Висока Ниска Најнижа + Искључене категорије Наслови у искљученим категоријама неће се преузимати иако су такође у укљученим категоријама. Једносмерна синхронизација за ажурирање броја прочитаних поглавља у трекерима. За појединачно праћење наслова додирни дугме за њихово праћење. Подаци @@ -617,7 +536,6 @@ Историја је избрисана Да ли сте сигурни\? Цела историја ће бити изгубљена. Водич за миграцију извора - Ажурирање колекције... (%1$d/%2$d) Велика ажурирања штете изворима и могу довести до споријег ажурирања и повећања потрошње батерије. Кликни да сазнаш више. Ажурирај све Ажурирања апликације @@ -629,7 +547,6 @@ Отказано На паузи То није започето - 5% Помакни наслов на врх %1$d ажурирање није успело Додирните да сазнате више @@ -638,7 +555,7 @@ Прескочено Мрежа насловница Померај широке слике - Зумирај пејзажну слику + Аутоматски зумирај слике у пејзажном облику Питања и водичи Sačuvaj kao CBZ arhivu Обрнути портрет @@ -652,7 +569,6 @@ Отвори на GitHub-у Грешка при чувању слике Затвори - Батерија није празна Обриши податке WebView-a Подаци WebView-a су обрисани Категорије, глобално ажурирање, листање поглавља @@ -664,7 +580,6 @@ Преузми аутоматски током читања Копирано Сва подешавања читача су ресетована - Присили апликацију да поново провери преузета поглавља Није инсталирано %s је наишао на неочекивану грешку. Предлажемо да поделите запис о прекиду програма на нашем каналу за подршку на Discord-у. Widget није доступан када је омогућено закључавање апликације @@ -709,7 +624,6 @@ %d минута %d секунди Нема описа - Дугме за наставак читања InternalError: Провери записнике о прекиду програма за даље информације Прескочи дупликатска поглавља Више језика @@ -720,7 +634,6 @@ Завршени наслови Побољшава перформансе читача Само на мрежи без ограничења - Раздели високе слике (БЕТА) Дозвола за меморијски простор није одобрена Неважећи низ корисничког агента Није могуће ресетовати подешавања читача @@ -728,7 +641,6 @@ Погледај твоје недавно ажуриране наслове у колекцији Неважећи индекс преузимања Број непрочитаних - Последња провера ажурирања Обриши категорију Желиш ли обрисати категорију \"%s\"\? Уклони све @@ -742,18 +654,12 @@ Прескочено јер наслов не захтева ажурирање Страница %d није пронађена током раздвајања Провера преузимања - - Следеће непрочитано поглавље - Следећа %d непрочитана поглавља - Следећих %d непрочитаних поглавља - Не сада - Језик апликације, обавештења Формат теме, датума и времена Закључавање апликације, сигуран екран Записници гашења апликације, оптимизације батерије Отвори насумични наслов - Ради само на уносима у колекцији и ако су последње плус следеће поглавље већ преузети + Ради само ако је тренутно и следеће поглавље већ преузето. Нема наслова у овој категорији Категорија је празна Низ корисничког агента не може бити празан @@ -778,18 +684,38 @@ Превуци улево Прелистај поглавље Додирни двапут за зумирање - - Следеће поглавље - Следећа %d поглавља - Следећих %d поглавља - Копирај Окрени положај широких страница Прилагоди широке странице ротирањем Информације за отклањање грешака - - Недостаје %1$s поглавље - Недостају %1$s поглавља - Недостаје %1$s поглавља - - \ No newline at end of file + Није могуће створити датотеку резервне копије + Лиценцирано - Нема поглавља за приказ + Има резултата + Прескочено јер данас није очекивано издање + Изван очекиваног периода изласка + Постави интервалу + Испуштено\? Задњих 20+ и 2 месеца + Интервали + Подеси интервал + Такође уклони из %s + Запис праћења + Процени сваки + Додирни овде за помоћ са Cloudflare-ом + Индекс преузимања поништен + Обриши преузет садржај + Прилагођен интервал преузимања + Прошло прегледни рок + У реду + Синхронизовање колекције завршено + Постави да ажурира сваки + Уклони праћење %s\? + Ово ће уклонити локално праћење. + Провера задњих 10+ + Следеће очекивано ажурирање + Синхронизовање колекције + Месечно преузимање (28 дана) + Откључај %s + Нема везе са интернетом + HTTP %d, погледај веб сајт у WebView + %s је недоступан + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/sv/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/sv/plurals-aniyomi.xml new file mode 100644 index 0000000000..fe09becfc5 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/sv/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/sv/plurals.xml b/i18n/src/commonMain/resources/MR/sv/plurals.xml new file mode 100644 index 0000000000..1e7f8b9372 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/sv/plurals.xml @@ -0,0 +1,67 @@ + + + + Efter %1$s minut + Efter %1$s minuter + + + %1$d nytt kapitel + %1$d nya kapitel + + + Kapitel %1$s och 1 till + Kapitlen %1$s och %2$d till + + + För %d post + För %d poster + + + Tilläggsuppdatering tillgänglig + %d tilläggsuppdateringar tillgängliga + + + %1$s återstående + %1$s återstående + + + %d kategori + %d kategorier + + + Klar på %1$s med %2$s fel + Klar på %1$s med %2$s fel + + + %1$s kapitel + %1$s kapitel + + + %d spårare + %d spårare + + + Hoppar över %d kapitel, antingen saknar källan det eller så har det filtrerats bort + Hoppar över %d kapitel, antingen saknar källan dem eller så har de filtrerats bort + + + Igår + För %1$d dagar sedan + + + Nästa olästa kapitel + Nästa %d olästa kapitel + + + Saknar %1$s kapitel + Saknar %1$s kapitel + + + 1 dag + %d dagar + + + Nästa kapitel + Nästa %d kapitel + + \ No newline at end of file diff --git a/i18n/src/main/res/values-sv/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/sv/strings-aniyomi.xml similarity index 79% rename from i18n/src/main/res/values-sv/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/sv/strings-aniyomi.xml index 715f95df31..aa1d4de5ec 100644 --- a/i18n/src/main/res/values-sv/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/sv/strings-aniyomi.xml @@ -38,32 +38,4 @@ WebView krävs för Tachiyomi Nedladdning pausad Kapiteluppdateringar - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/i18n/src/main/res/values-sv/strings.xml b/i18n/src/commonMain/resources/MR/sv/strings.xml similarity index 82% rename from i18n/src/main/res/values-sv/strings.xml rename to i18n/src/commonMain/resources/MR/sv/strings.xml index 212c110093..4faa7b73e1 100644 --- a/i18n/src/main/res/values-sv/strings.xml +++ b/i18n/src/commonMain/resources/MR/sv/strings.xml @@ -1,11 +1,13 @@ Namn + Kategorier Biblioteksposter Kapitel Spårning Historik Inställningar + Nedladdningskö Bibliotek Historik Uppdateringar @@ -15,7 +17,6 @@ Tilläggsinformation Inställningar Filter - Nedladdat Bokmärkt Oläst Ta bort filtret @@ -69,7 +70,7 @@ Spårning Avancerat Om appen - Artiklar per rad + Rutnätets storlek Porträtt Landskap Automatiska uppdateringar @@ -83,6 +84,7 @@ Automatiska uppdateringar av enhetsbegränsningar Vid laddning Med status \"Avslutat\" + Standardkategori Fråga alltid Uppdatera Installera @@ -109,10 +111,10 @@ Vit Svart Standardläsläge - Vänster till höger - Höger till vänster - Vertikal - Webtoon + Sidor (vänster till höger) + Sidor (höger till vänster) + Sidformat (vertikalt) + Lång remsa Sidläsare Bildanpassning Passa skärmen @@ -129,7 +131,7 @@ Ingen animering Normal Snabb - Standardrotationstyp + Standard rotation Upplåst Låst porträtt Låst liggande @@ -146,15 +148,14 @@ Fjärde till sista lästa kapitlet Femte till sist lästa kapitlet Ladda ner nya kapitel - Tjänster + Spårare Skapa säkerhetskopia Kan användas för att återställa biblioteket Återställ säkerhetskopia Återställ biblioteket från en säkerhetskopia Säkerhetskopieringsplats - Automatiska säkerhetskopior - Säkerhetskopieringsfrekvens - Maximala säkerhetskopior + Automatisk säkerhetskopieringsfrekvens + Max antal automatiska säkerhetskopior Säkerhetskopia skapad Återställning slutförd Vad vill du säkerhetskopiera\? @@ -165,8 +166,9 @@ Fel inträffade vid rensning Radera cookies Cookies rensade + Rensa databas + Ta bort historik för inlägg som inte finns i ditt bibliotek Inlägg raderade - Uppdatera spårning Version Skicka kraschrapporter Hjälper till att fixa eventuella buggar. Inga känsliga uppgifter skickas @@ -177,7 +179,6 @@ Inloggad Okänt fel Uppdaterar kategori - Lokal Inga mer resultat Lokal källa Andra @@ -196,6 +197,8 @@ Källa inte installerad: %1$s Kapitel %1$s Laddar ner (%1$d/%2$d) + Fel + Pausad Källtitel Kapitelnummer Efter källa @@ -214,11 +217,11 @@ Titel Status Status - Startad Typ En kategori med detta namn finns redan! Kategorier raderade Detta kommer att ta bort läs datumet för detta kapitel. Är du säker\? + Lägg till i biblioteket\? Bild sparad Anpassat filter Ställ in som omslag @@ -246,7 +249,6 @@ Välj säkerhetskopia Ladda ner Inga nya uppdateringar tillgängliga - Söker efter uppdateringar… Laddar ner… Tryck för att installera uppdateringen Nedladdningsfel @@ -261,11 +263,12 @@ Kunde inte ladda ned kapitel på grund av ett oförväntat fel Ingen WiFi-anslutning tillgänglig Ingen nätverksanslutning tillgänglig + Nedladdningar pausade Vanlig Öppna i WebView 32-bitars färg Hoppa över lästa kapitel - Visa vid lång tryckning + Visa åtgärder vid lång tryckning Färgfilterblandningsläge Överlägg Multiplicera @@ -301,28 +304,17 @@ Lås vid inaktivitet Alltid Aldrig - - Efter %1$s minut - Efter %1$s minuter - Säker skärm Uppdateringar väntar Visa innehåll i utskärningsområdet Det gick inte att kringgå Cloudflare Uppdatera WebView-appen för bättre kompatibilitet + Kapiteluppdateringar Säker skärm döljer appinnehållet när du byter app och blockerar skärmdumpar Skärmvisning - - %1$d nytt kapitel - %1$d nya kapitel - Kapitel %1$s Kapitel %1$s och %2$d till Kapitlen %1$s - - Kapitel %1$s och 1 till - Kapitlen %1$s och %2$d till - Dölj notisinnehåll Letar efter nya kapitel Inaktivera batterioptimering @@ -330,23 +322,13 @@ Batterioptimering är redan inaktiverat E-postadress Visa alltid kapitelövergång - - För %d post - För %d poster - Meny - Ändra ordning Nyaste Äldsta Flytta till toppen Flytta till botten Tilläggsuppdateringar - - Tilläggsuppdatering tillgänglig - %d tilläggsuppdateringar tillgängliga - Uppdaterar biblioteket - Kontrollera webbplatsen i WebView Läser Hoppa över filtrerade kapitel Källor @@ -354,20 +336,13 @@ I biblioteket Lägg till i biblioteket Nålad - 25 % - 20 % - 15 % - 10 % - Ingen Sidofyllning - Kontinuerlig vertikal + Lång remsa med mellanrum Lossa Nåla Välj omvänd Mindre Mer - Bekräfta utgång - Tryck tillbaka igen för att gå ur Kapitel %1$s - %2$s Lokal källa guide Senast använd @@ -382,32 +357,19 @@ %02d minuter, %02d sekunder Endast nedladdat Filtrerar alla poster i ditt bibliotek - - %1$s återstående - %1$s återstående - - Sök endast i pinnade källor i global sökning Läsläge För denna serie Grå Minskar bandning, men kan påverka prestandan - - %d kategori - %d kategorier - - - Klar på %1$s med %2$s fel - Klar på %1$s med %2$s fel - Det gick inte att öppna enhetsinställningarna Uppdatera bibliotekets omslag - Envägssynkronisering för att uppdatera kapitlets framsteg i spårningstjänsterna. Ställ in spårning för enskilda inlägg från deras spårningsknapp. + Envägssynkronisering för att uppdatera kapitlets framsteg i externa spårningstjänster. Ställ in spårning för enskilda poster från deras spårningsknapp. Efter uppladdningsdatum Data Saknade källor: Säkerhetskopian innehåller inga biblioteksposter. Ogiltig säkerhetskopia - Detta tillägg kommer inte från den officiella Tachiyomi-tilläggslistan. + Detta tillägg är inte från den officiella listan. Inofficiell Sök efter nytt omslag och detaljer när du uppdaterar biblioteket Uppdatera metadata automatiskt @@ -427,10 +389,6 @@ Ingen Invertera tryckzoner Källan hittades inte - - %1$s kapitel - %1$s kapitel - Okänd status Okänd författare Kräver omstart av appen för att börja gälla @@ -444,11 +402,6 @@ Datum tillagd Färdig Förlopp - Nedladdningen slutförd - - %d spårare - %d spårare - Du har inga fästa källor Källor från detta tillägg kan innehålla NSFW(18+) innehåll 18+ @@ -457,10 +410,6 @@ Fel Uppdaterade standardinställningar för kapitel Vill du spara de här inställningarna som standard\? - - Hoppar över %d kapitel, antingen saknar källan det eller så har det filtrerats bort - Hoppar över %d kapitel, antingen saknar källan dem eller så har de filtrerats bort - %1$s: %2$s, sida %3$d Inga kapitel hittades Ange som standard @@ -512,13 +461,14 @@ Datum för hämtning av kapitel Inlägg i uteslutna kategorier laddas inte ner även om de också ingår i inkluderade kategorier. Ladda ned automatiskt + Inlägg i uteslutna kategorier uppdateras inte även om de också ingår i inkluderade kategorier. Tryck för att se detaljer Denna Android-version stöds inte längre Kunde inte kopiera till urklipp Liggande Porträtt - Rotationstyp - Skapa mappar enligt posternas titel + Rotation + Skapar mappar enligt posternas titel Spara sidor i separata mappar Åtgärder Gråskala @@ -532,9 +482,8 @@ Sortera efter Ogiltigt kapitelformat Kapitlet hittades inte - Uppdatera spårare när du uppdaterar biblioteket - Uppdatera spårare automatiskt Begränsningar: %s + Lokal källa Av Fel vid delning av omslag @@ -542,14 +491,12 @@ Omslaget har sparats Omslag Spårningsguide - Inställningar per kategori för sortering och visning + Inställningar per kategori för sortering Du har inga kategorier ännu. Börja ladda ner nu - Uppdaterar biblioteket ... (%1$d / %2$d) - Denna tracker är endast kompatibel med Komga-källan. Säkerhetskopiering/återställning kanske inte fungerar korrekt om MIUI-optimering är inaktiverat. - Tjänster som erbjuder förbättrade funktioner för specifika källor. Inlägg spåras automatiskt när de läggs till i ditt bibliotek. - Förbättrade tjänster + Ger förbättrade funktioner för specifika källor. Poster spåras automatiskt när de läggs till i ditt bibliotek. + Förbättrade spårare Rent svart mörkt läge Yotsuba Yin och yang @@ -567,16 +514,7 @@ Högsta Känslighet för att dölja menyn vid rullning Omvänd - Lång (Kort+, n dagar sedan) - Kort (idag, igår) - Relativa tidsstämplar - - Igår - För %1$d dagar sedan - Idag - Nyligen - Tidsstämplar Teal och turkos Utseende Autentisera för att bekräfta ändringen @@ -585,6 +523,7 @@ Spår Tablettgränssnitt Hjälp till med översättning + Uteslutna kategorier Appinformation Shizuku körs inte Äldre @@ -593,7 +532,7 @@ Totalt antal inlägg Installera och starta Shizuku för att använda Shizuku som tilläggsinstallationsprogram. Skriv ut utförliga loggar till systemloggen (minskar appprestanda) - Du bör också förvara säkerhetskopiorna på andra ställen. + Du bör även spara kopior av säkerhetskopior på andra platser. Säkerhetskopior kan innehålla känsliga uppgifter, t.ex. lagrade lösenord; var försiktig om du delar dem. Omfattande loggning Varning Språk @@ -602,7 +541,7 @@ Var 3:e dag Uppdatera alla Appuppdateringar - %1$d poster i databasen som inte är biblioteksposter + %1$d icke-biblioteksposter i databasen Inget att rensa För hjälp med att åtgärda fel i biblioteksuppdateringar, se %1$s Hoppa över uppdatering av poster @@ -613,12 +552,10 @@ Integritetspolicy Vanliga frågor och guider Det gick inte att hämta tilläggslistan - 5% - Startad Endast omslags-rutnät Som inte har startats - Panorera breda sidor med tryck - Zooma in landskapsbilden + Panorera breda sidor + Automatiskt zoomning i stora bilder Hoppade över eftersom serien är klar Hoppade över eftersom det finns olästa kapitel Hoppade över eftersom inga kapitel läses @@ -633,12 +570,9 @@ En ny version finns tillgänglig i de officiella utgåvorna. Tryck på för att lära dig hur du flyttar från inofficiella F-Droid-versioner. Inga biblioteksposter att säkerhetskopiera Öppna på GitHub - När batteriet inte är lågt - Visa duplicerade källor med pinned-markeringar Rensa data från WebView WebView-data rensas Stäng - Upprepa källor som är upptagna i sina respektive språkgrupper Ingen installerad källa hittades Antal olästa Förbättrar läsarens prestanda @@ -674,10 +608,6 @@ RARv5 formatet stöds inte Se dina nyligen uppdaterade biblioteket inlägg Widget är inte tillgänglig när applåset är aktiverat - - Nästa olästa kapitel - Nästa %d olästa kapitel - En uppdatering pågår redan Multi Strängen för användaragent kan inte vara tom @@ -687,10 +617,9 @@ Du är på väg att ta bort \"%s\" från ditt bibliotek Ladda ner i förväg Tidvattenvåg - Fungerar endast för poster i biblioteket och om det aktuella kapitlet och nästa kapitel redan har laddats ner - Dela stora bilder (BETA) + Fungerar endast om det aktuella kapitlet + nästa redan har laddats ner. Automatisk nedladdning under läsning - Kategorier, global uppdatering + Kategorier, global uppdatering, kapitel svepning Läsläge, skärmvisning, navigering Ogiltig sträng för användaragent Okänd titel @@ -698,30 +627,26 @@ Sök… Automatisk nedladdning, ladda ned i förväg Envägs synkronisering av framfart, förbättrad synkronisering - Manuell och automatisk säkerhetskopiering + Manuell och automatisk säkerhetskopiering, lagringsutrymme Ogiltig plats: %s Lagrings rättigheter inte tillagda Hoppat över för att serien inte behöver uppdateras %s stötte på ett oväntat fel. Vi föreslår att du delar med dig av kraschloggen i vår supportkanal på Discord. - Appspråk, notifikationer Tema, datum och tids format Källor, tillägg, global sökning Starta om applikationen Hoppsan! Dumpa krasch logg, batterioptimering Applikations lås, säkerhetsskärm -Nedladdningskö Statistik Påbörjade Lokala Nedladdade Tillgänglig men källan är ej installerad: %s Hoppa över duplicerade kapitel - Fortsätt läsa knapp Inte nu Öppna en slumpmässig manga Gör nedladdningsindexet ogiltigt - Tvinga appen att läsa in nedladdade kapitel på nytt F-Droid-versioner stöds inte officiellt. \nTryck för att få veta mer. Dela höga bilder @@ -730,11 +655,91 @@ Dölja poster som redan finns i biblioteket Kontrollerar nedladdningar Överlägg - - Saknar %1$s kapitel - Saknar %1$s kapitel - Rotera breda sidor så att de passar Vänd orientering av roterade breda sidor *krävs - \ No newline at end of file + Inga inlägg hittades i denna kategori + Genomsnittlig poäng + %dm + %ds + Använd + N/A + Du har en post i ditt bibliotek med samma namn. +\n +\nVill du fortfarande fortsätta\? + Ta bort datum\? + Inlägg + I global uppdatering + Totalt + Läst + Uppskatta varje + Ange intervall + Anpassat hämtningsintervall + Hämta månadsvis (28 dagar) + Sen 10+ check + Nästa förväntade uppdatering + Hoppades över eftersom ingen publicering förväntades idag + Spårade inlägg + %dd + Anpassa intervall + %1$s fel: %2$s + Avhoppad\? Sen 20+ och 2 månader + Godkänd kontrollperiod + Dubbeltryck för att zooma + Detta kommer att ta bort ditt tidigare valda startdatum från %s + Ta bort %s spårning\? + Detta kommer att ta bort spårningen lokalt. + Detta kommer att ta bort ditt tidigare valda slutdatum från %s + Ta även bort från %s + Kategorin är tom + %dt + Synkronisering av bibliotek + Felsökningsinformation + Kopierad till urklipp + Ställ in för att uppdatera varje + Har resultat + Avslutade inlägg + %d per rad + Bibliotekssynkronisering slutförd + Index för nedladdningar ogiltigt + Översikt + Radera nedladdat + Kapitel svepning + Svep till höger åtgärd + Svep till vänster åtgärd + Lästid + Spårare + Klicka här för hjälp med Cloudflare + OK + Utanför förväntad releaseperiod + Intervaller + Kunde inte skapa en backup-fil + Licensierad - Inga kapitel att visa + Spårar-inloggning + Ingen internet anslutning + HTTP %d, kolla på webbsida i WebView + Kunde inte nå %s + Lås upp %s + Flytta serien till botten + Sortera kategorier + Uppdaterar biblioteket... (%s) + Vill du sortera kategorierna i alfabetisk ordning\? + Inställningar för källa + Appinställningar + Relativa tidsstämplar + \"%1$s\" istället för \"%2$s\" + Skapa + Aldrig + Minimerar spöktext på e-papperskärmar + Tillämpa + Återgå till standard + Senaste automatiska säkerhetskopieringen: %s + Inga scanlatorer hittades + Scanlator + Blinka vitt vid sidbyte + Lagringsanvändning + Spårares betyg + Data och lagring + Ingen fil vald + Exkludera scanlatorer + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/te/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/te/plurals-aniyomi.xml new file mode 100644 index 0000000000..4cad601de9 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/te/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/te/plurals.xml b/i18n/src/commonMain/resources/MR/te/plurals.xml new file mode 100644 index 0000000000..c09f50b58e --- /dev/null +++ b/i18n/src/commonMain/resources/MR/te/plurals.xml @@ -0,0 +1,7 @@ + + + + ఒక నిమిషము తరువాత + %1$s నిమిషముల తరువాత + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/te/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/te/strings-aniyomi.xml new file mode 100644 index 0000000000..76f6b7c3b6 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/te/strings-aniyomi.xml @@ -0,0 +1,5 @@ + + + విభాగములు + టచియోమిని తెరవండి + \ No newline at end of file diff --git a/i18n/src/main/res/values-te/strings.xml b/i18n/src/commonMain/resources/MR/te/strings.xml similarity index 89% rename from i18n/src/main/res/values-te/strings.xml rename to i18n/src/commonMain/resources/MR/te/strings.xml index 4a7ab17a45..ff0c610add 100644 --- a/i18n/src/main/res/values-te/strings.xml +++ b/i18n/src/commonMain/resources/MR/te/strings.xml @@ -10,6 +10,7 @@ చరిత్ర నవీకరణలు గ్రంథాలయము + దిగుమతి వరుస అమరికలు మరింత పేరు @@ -44,11 +45,11 @@ శోధకము వివరాలపట్టిక అమరికలు - నిష్క్రమించడానికి బ్యాక్ చిహ్నాన్ని మళ్ళీ నొక్కండి చరిత్ర కంట కనిపెట్టుట అధ్యాయాలు లైబ్రరీ ఎంట్రీలు + విభాగములు మీ దగ్గర ఏ విభాగములు లేవు। మీ గ్రంథాలయాన్ని సరికూర్చుకోడానికి ప్లస్ చిహ్నాన్ని నొక్కి కొత్త దాన్ని సృష్టించుకోండి॥ మీ గ్రంథాలయము ఖాళీగా ఉన్నది ఈ మధ్య మీరు ఏమి చదవలేదు @@ -77,6 +78,7 @@ ఇమిడ్చిన వరుస వలస ప్రదర్శన ప్రణాలికము + స్థానిక సోర్స్ మొదలు పెట్టుము పునఃప్రారంభించుము \"వెబ్ వ్యూ\" లో తెరుము @@ -120,7 +122,6 @@ ఆపుము ప్రారంభించుము అనువర్తన వీక్షణము - క్రమీకరించుము ఎగుమతి తారీఖును బట్టి అవరోహికము ప్రతిష్ఠాపించుము @@ -131,10 +132,6 @@ యిన్ మరియు యాంగ్ ఎప్పుడూ వద్దు సందెచీకటి - - ఒక నిమిషము తరువాత - %1$s నిమిషముల తరువాత - తెరను సంరక్షించుము అనువర్తనములను మారునపుడు వర్తక విషయములను దాయుము మరియు తెర యొక్క చిత్రములను తీయుటను నిరోధించుము సూచన విషయములను దాయుము @@ -145,33 +142,24 @@ టీల్ మరియు మణి యోట్సూబ స్వచ్ఛమైన నలుపు వీక్షణ - సమయ ముద్రణలు - సంబంధిత సమయ ముద్రణలు - నిష్రమణమును నిర్ధారించుము భద్రత తాళమును తెరుచుట ఆవశ్యకము కార్యచరణము లేనిచో తాళమును వేయుము ఎల్లప్పుడు - సంక్షిప్తము (నేడు మరియు నిన్న) - దీర్ఘము (సంక్షిప్త+, మరియు n రోజుల క్రితము) తారీఖు స్వరూపము సూచనలను నిర్వహించుము -దిగుమతి వరుస + గణాంకాలు ప్రారంభించారు బంజేయండి - చదవడం కొనసాగించే బటన్ చూపియండి లోకల్ డౌన్లోడ్ అయినవి ఓన్ - ఎంట్రీ చూపియండి ఆఫ్ చదవని లెక్క - చివరి అప్డేట్ తనిఖీ మొత్తం తీసేయండి మీరు \"%s\" క్యాటగిరీ తీసివేయాలి అనుకుంటున్నారా\? క్యాటగిరీ తీసేయండి సిరీస్ పైన పెట్టండి - యాప్ భాష, నోటిఫికేషన్‌లు అన్వేషించండి… ఇప్పుడు కాదు "ఏదైనా తెరవండి" @@ -190,13 +178,9 @@ అన్ని అంచు తాజా - ౧౦% చదువుతున్నారు శీర్షిక గణన - ఏదీ లేదు - ౨౦% - ౨౫% కిండల్ మాదిరి కొనసాగుతున్నది స్థితి @@ -206,6 +190,5 @@ విడిచెను చిత్తరువు ప్రకృతి దృశ్యం - ౧౫% నిలిపివేయబడింది - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/th/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/th/plurals-aniyomi.xml new file mode 100644 index 0000000000..e86b2f3374 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/th/plurals-aniyomi.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/th/plurals.xml b/i18n/src/commonMain/resources/MR/th/plurals.xml new file mode 100644 index 0000000000..efa8857ea0 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/th/plurals.xml @@ -0,0 +1,51 @@ + + + + หมวดหมู่ %d + + + หลังจาก %1$s นาที + + + ข้ามตอนที่ %d อาจเป็นเพราะหายมาจากแหล่งที่มาหรือถูกกรองออก + + + %d ตัวติดตาม + + + %1$s ตอน + + + เหลืออีก %1$s รายการ + + + ใช้เวลาไป %1$s โดยมีข้อผิดพลาด %2$s รายการ + + + ตอนที่ %1$s และอีก %2$d ตอน + + + %1$d ตอนใหม่ + + + มี %d รายการ + + + มีการอัปเดตส่วนขยาย %d รายการพร้อมใช้งาน + + + %1$d วันที่ผ่านมา + + + %d ตอนที่ยังไม่ได้อ่านถัดไป + + + %d ตอนถัดไป + + + ไม่พบ %1$s ตอน + + + %d วัน + + \ No newline at end of file diff --git a/i18n/src/main/res/values-th/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/th/strings-aniyomi.xml similarity index 100% rename from i18n/src/main/res/values-th/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/th/strings-aniyomi.xml diff --git a/i18n/src/main/res/values-th/strings.xml b/i18n/src/commonMain/resources/MR/th/strings.xml similarity index 81% rename from i18n/src/main/res/values-th/strings.xml rename to i18n/src/commonMain/resources/MR/th/strings.xml index c6cb76f954..9ec17ec41a 100644 --- a/i18n/src/main/res/values-th/strings.xml +++ b/i18n/src/commonMain/resources/MR/th/strings.xml @@ -1,11 +1,13 @@ ชื่อ - มังงะ + หมวดหมู่ + รายการคลัง ตอน ติดตาม ประวัติ ตั้งค่า + คิวดาวน์โหลด คลัง สำรองข้อมูลและการเรียกคืน ส่วนขยาย @@ -13,7 +15,6 @@ ตั้งค่า ตัวกรอง อัปเดต - ดาวน์โหลดแล้ว ยังไม่ได้อ่าน นำตัวกรองออก ตามตัวอักษร @@ -95,6 +96,7 @@ ปิด อัปเดตข้อจำกัดของอุปกรณ์โดยอัตโนมัติ ที่มีสถานะ \"จบแล้ว\" + หมวดหมู่เริ่มต้น เชื่อถือได้ ไม่น่าเชื่อถือ ถอนการติดตั้ง @@ -130,7 +132,7 @@ ไม่มีแอนิเมชั่น ปกติ เร็ว - ประเภทการหมุนเริ่มต้น + การหมุนเริ่มต้น อิสระ ล็อกแนวตั้ง ล็อกแนวนอน @@ -147,15 +149,14 @@ ตอนที่สี่ก่อนตอนที่อ่านล่าสุด ตอนที่ห้าก่อนตอนที่อ่านล่าสุด ดาวน์โหลดตอนใหม่ - บริการ + ตัวติดตาม สำรองข้อมูล สามารถใช้ในการเรียกคืนค่าคลังปัจจุบัน เรียกคืนค่าการสำรองข้อมูล เรียกคืนค่าคลังจากแฟ้มข้อมูลสำรอง ตําแหน่งที่ตั้งข้อมูลสํารอง - สํารองข้อมูลอัตโนมัติ - ความถี่ในการสำรองข้อมูล - จำนวนการสำรองข้อมูลสูงสุด + ความถี่ในการสำรองข้อมูลอัตโนมัติ + จำนวนการสำรองข้อมูลอัตโนมัติสูงสุด สร้างการสำรองข้อมูลแล้ว คืนค่าเสร็จสมบูรณ์ ต้องการสำรองข้อมูลใดบ้าง\? @@ -166,8 +167,9 @@ เกิดข้อผิดพลาดขณะกำลังล้าง ล้างคุกกี้ ล้างคุกกี้แล้ว + ล้างฐานข้อมูล + ลบประวัติรายการที่ไม่ได้บันทึกไว้ในคลัง ลบรายการแล้ว - โหลดข้อมูลการติดตามใหม่ เวอร์ชัน ส่งรายงานความผิดพลาด ช่วยแก้ไขจุดบกพร่องต่างๆ จะไม่มีการส่งข้อมูลที่สำคัญ @@ -178,7 +180,6 @@ ลงชื่อเข้าใช้แล้ว ข้อผิดพลาดที่ไม่รู้จัก กำลังอัปเดตหมวดหมู่ - ภายในเครื่อง ไม่มีผลลัพธ์เพิ่มเติม แหล่งที่มาภายในเครื่อง อื่น ๆ @@ -197,6 +198,8 @@ ไม่ได้ติดตั้งแหลงที่มา: %1$s ตอนที่ %1$s กำลังดาวน์โหลด (%1$d/%2$d) + เกิดข้อผิดพลาด + หยุดชั่วคราว ชื่อตามแหล่งที่มา หมายเลขตอน ตามแหล่งที่มา @@ -212,7 +215,7 @@ วางแผนที่จะอ่าน อ่านอีกครั้ง คะแนน - แสดงเมื่อแตะค้าง + แสดงการกระทำเมื่อแตะค้าง เปิดใน WebView สี 32 บิต ข้ามตอนที่ทำเครื่องหมายว่าอ่านแล้ว @@ -224,11 +227,11 @@ ชื่อเรื่อง สถานะ สถานะ - เริ่มแล้ว ประเภท หมวดหมู่ที่มีชื่อนี้มีอยู่แล้ว! หมวดหมู่ถูกลบแล้ว การดำเนินการนี้จะลบวันที่อ่านของตอนนี้ คุณแน่ใจไหม\? + เพิ่มไปยังคลัง\? บันทึกรูปภาพแล้ว ตัวกรอง ตั้งเป็นปก @@ -251,14 +254,13 @@ ไม่สามารถดาวน์โหลดตอน สามารถลองอีกครั้งได้ในส่วนการดาวน์โหลด พบตอนใหม่ อัปเดตหน้าปกล้มเหลว - เพิ่มมังงะในคลังก่อนที่จะดำเนินการนี้ + เพิ่มรายการไปยังในคลังก่อนที่จะดำเนินการนี้ เลือกภาพหน้าปก เลือกแฟ้มข้อมูลสำรอง ดาวน์โหลด ไม่มีการอัปเดตใหม่ - กำลังค้นหาอัปเดต… กำลังดาวน์โหลด… - แตะเพื่อติดตั้ง + แตะเพื่อติดตั้งการอัปเดต เกิดข้อผิดพลาดในการดาวน์โหลด มีเวอร์ชั่นใหม่! ไม่มีการดาวน์โหลด @@ -271,6 +273,7 @@ ไม่สามารถดาวน์โหลดตอนได้เนื่องจากข้อผิดพลาดที่ไม่คาดคิด ไม่มีการเชื่อมต่อ Wi-Fi ไม่มีการเชื่อมต่อเครือข่าย + การดาวน์โหลดหยุดชั่วคราว ทั่วไป หลากหลาย เบิร์น / มืดขึ้น @@ -285,8 +288,8 @@ รูปตัว L อัตโนมัติ เทา - สร้างโฟลเดอร์ตามชื่อเรื่องมังงะ - บันทึกหน้าลงในโฟลเดอร์ที่แยกต่างหาก + สร้างโฟลเดอร์ตามชื่อเรื่องของรายการ + บันทึกแต่ละหน้าลงในโฟลเดอร์ที่แยกต่างหาก การกระทำ ทั้งสอง แนวตั้ง @@ -306,17 +309,15 @@ แสดงตำแหน่งโซนการแตะ แหล่งที่มาจากส่วนขยายนี้อาจมีเนื้อหา NSFW (18+) 18+ - ส่วนขยายนี้ไม่ได้มาจากรายการส่วนขยายทางการของ Tachiyomi - ส่วนขยายนี้ไม่สามารถใช้ได้อีกต่อไป + ส่วนขยายนี้ไม่ได้มาจากรายการทางการ + ส่วนขยายนี้ไม่สามารถใช้ได้อีกต่อไป แอปอาจทำงานไม่ถูกต้องและอาจทำให้เกิดปัญหากับแอปได้ ขอแนะนำให้ถอนการติดตั้งออก ไม่เป็นทางการ ล้าสมัย อัปเดตที่รอดำเนินการ ที่ยกเว้นไว้: %s ที่รวมไว้: %s ไม่มี - - หมวดหมู่ %d - + รายการในหมวดหมู่ที่ยกเว้นจะไม่ได้รับการอัปเดตแม้ว่าจะอยู่ในหมวดหมู่ที่รวมอยู่ด้วยก็ตาม ตรวจสอบหน้าปกและรายละเอียดใหม่เมื่ออัปเดตคลัง โหลดข้อมูลเมตาใหม่โดยอัตโนมัติ อัปเดตทั้งหมด @@ -327,16 +328,12 @@ ซ่อนเนื้อหาการแจ้งเตือน หน้าจอปลอดภัยจะซ่อนเนื้อหาของแอปเมื่อสลับแอปและกันไม่ให้ถ่ายภาพหน้าจอ หน้าจอความปลอดภัย - - หลังจาก %1$s นาที - ไม่เลย ตลอด ล็อกเมื่อไม่ได้ใช้งาน จำเป็นต้องปลดล็อก ความปลอดภัยและความเป็นส่วนตัว จัดการการแจ้งเตือน - ยืนยันการออก รูปแบบวันที่ เปิด ปิด @@ -356,7 +353,6 @@ ล่าสุด ตามเลขตอน ตามวันที่อัปโหลด - จัดเรียงใหม่ ยกเลิกทั้งหมดสำหรับเรื่องนี้ ยกเลิกทั้งหมด ยกเลิกการตรึง @@ -377,18 +373,12 @@ ตอนล่าสุด ติดตามแล้ว เมนู - กดกลับอีกครั้งเพื่อออก แหล่งที่มา เพิ่มเติม - 25% - 20% - 15% - 10% - ไม่มี ช่องว่างด้านข้าง การอ่าน โหมดการอ่าน - ประเภทการหมุน + การหมุน โซนการแตะ หน้ายาวแยกช่องว่าง ขวา @@ -400,9 +390,6 @@ ล้างประวัติ ตอน %1$s - %2$s กำลังอัปเดตคลัง - - ข้ามตอนที่ %d อาจเป็นเพราะหายมาจากแหล่งที่มาหรือถูกกรองออก - ไม่พบแหล่งที่มา ไม่พบหน้า โหมดการอ่าน @@ -413,18 +400,12 @@ วันที่เริ่มอ่าน หยุดชั่วคราว เพิ่มการติดตาม - - %d ตัวติดตาม - ไม่พบตอน ตั้งเป็นค่าเริ่มต้น แน่ใจหรือไม่ว่าต้องการบันทึกการตั้งค่าเหล่านี้เป็นค่าเริ่มต้น\? การตั้งค่าตอน ตามวันที่อัปโหลด ไม่สามารถคัดลอกไปยังคลิปบอร์ด - - %1$s ตอน - น้อยลง เพิ่มเติม อยู่ในคลัง @@ -436,17 +417,13 @@ ค้นหา \"%1$s\" ในทั้งหมด ที่ตรึงไว้ ใช้ล่าสุด - ตรวจสอบเว็บไซต์ใน WebView แท็บ ตอนที่ดาวน์โหลดแล้ว ออกจากระบบแล้ว ออกจากระบบ ออกจากระบบจาก %1$s\? ที่อยู่อีเมล - - เหลืออีก %1$s รายการ - - กรองมังงะทั้งหมดในคลังของคุณ + กรองรายการทั้งหมดในคลังของคุณ ปิดใช้งานโหมดไม่ระบุตัวตน โหมดไม่ระบุตัวตน ดาวน์โหลดแล้วเท่านั้น @@ -471,48 +448,32 @@ การคืนค่ากําลังดําเนินการอยู่แล้ว การสำรองข้อมูลล้มเหลว การสำรองข้อมูลกําลังดําเนินการอยู่แล้ว - - ใช้เวลาไป %1$s โดยมีข้อผิดพลาด %2$s รายการ - %02d นาที %02d วินาที ข้อมูลจากแฟ้มข้อมูลสำรองจะถูกคืนค่า \n \nคุณจะต้องติดตั้งส่วนขยายที่ขาดหายไปและลงชื่อเข้าใช้บริการติดตามจึงจะสามารถใช้งานได้ ตัวติดตามไม่ได้เข้าสู่ระบบ: แหล่งที่มาที่หายไป: - แฟ้มสํารองข้อมูลไม่มีมังงะใด ๆ + แฟ้มสํารองข้อมูลไม่มีรายการคลังใด ๆ ข้อมูลสำรองไม่ถูกต้อง - เฉพาะแหล่งที่มาที่ตรึงไว้เท่านั้น - ซิงค์ทางเดียวเพื่ออัปเดตความคืบหน้าของตอนกับบริการการติดตาม ตั้งค่าการติดตามรายการมังงะในแต่ละรายการได้จากปุ่มติดตาม - มังงะในหมวดหมู่ที่ยกเว้นไว้จะไม่ถูกดาวน์โหลดแม้ว่าจะอยู่ในหมวดหมู่ที่รวมอยู่ด้วยก็ตาม + ซิงค์ทางเดียวเพื่ออัปเดตความคืบหน้าของตอนกับตัวติดตามภายนอก ตั้งค่าการติดตามรายการในแต่ละรายการได้จากปุ่มติดตาม + รายการในหมวดหมู่ที่ยกเว้นไว้จะไม่ถูกดาวน์โหลดแม้ว่าจะอยู่ในหมวดหมู่ที่รวมอยู่ด้วยก็ตาม ดาวน์โหลดอัตโนมัติ กำลังตรวจสอบตอนหาใหม่ ไม่รองรับ Android เวอร์ชันนี้อีกต่อไป ไม่พบแอปเลือกแฟ้ม - - ตอนที่ %1$s และอีก %2$d ตอน - ตอนที่ %1$s ตอนที่ %1$s และอีก %2$d ตอน ตอนที่ %1$s - - %1$d ตอนใหม่ - - - ของเรื่อง %d - หน้าก่อน การอัปเดตส่วนขยาย + อัปเดตตอน ข้อผิดพลาด เสร็จสมบูรณ์ ความคืบหน้า - การดาวน์โหลดเสร็จสิ้นแล้ว อัปเดตการตั้งค่าตอนเริ่มต้นแล้ว โปรดอัปเดตแอพ WebView เพื่อความเข้ากันได้ที่ดีขึ้น ไม่สามารถเลี่ยงผ่าน Cloudflare ได้ - - มีการอัปเดตส่วนขยาย %d รายการพร้อมใช้งาน - คุณยังไม่มีหมวดหมู่ ยืนยันการเปลี่ยนแปลง วันนี้ @@ -523,7 +484,7 @@ สำหรับความช่วยเหลือเกี่ยวกับวิธีการแก้ไขข้อผิดพลาดในการอัปเดตคลัง ไปยัง %1$s เรียงตาม วันที่ - การตั้งค่าตามหมวดหมู่สำหรับการจัดเรียงและแสดงผล + การตั้งค่าการจัดเรียงตามหมวดหมู่ กำลังติดตั้งส่วนขยาย… ความเร็วในการซ่อนเมนูบนเมื่อเลื่อน การสำรอง/กู้คืนอาจทำงานไม่ถูกต้องหากปิดใช้งานการเพิ่มประสิทธิภาพ MIUI @@ -540,33 +501,26 @@ ไม่พบตอน บันทึกปกแล้ว ผิดพลาดในการบันทึกปก - ตัวติดตามนี้เข้ากันได้กับแหล่งที่มา Komga เท่านั้น ไม่รองรับแหล่งที่มานี้ แอพอัปเดต ค่าเริ่มต้น ผิดพลาดในการแบ่งปันปก - โหลดตัวติดตามใหม่โดยอัตโนมัติ - อัปเดตตัวติดตามเมื่ออัปเดตคลัง เริ่มดาวน์โหลดเลย - - %1$d วันที่ผ่านมา - - บริการขั้นสูง - ควรเก็บสำเนาของข้อมูลสำรองไว้ที่อื่นด้วยเช่นกัน + ตัวติดตามขั้นสูง + ควรเก็บสำเนาของข้อมูลสำรองไว้ที่อื่นด้วยเช่นกัน การสำรองข้อมูลอาจมีข้อมูลที่ละเอียดอ่อนรวมถึงรหัสผ่านที่เก็บไว้ ควรระวังหากแบ่งปันสำเนา บันทึกบันทึกอย่างละเอียดไปยังบันทึกของระบบ (ลดประสิทธิภาพของแอป) - ช่วยแปล + แปลเป็นภาษาไทยโดย altqx รูปแบบตอนไม่ถูกต้อง ปก ยังไม่ได้อ่าน - ล่าสุด สลับสี - จำนวนมังงะ + รายการทั้งหมด UI แท็บเล็ต - มังงะ %1$d เรื่อง ที่ไม่ได้อยู่ในคลังในฐานข้อมูล + มี %1$d รายการ ที่ไม่ได้อยู่ในคลังในฐานข้อมูล ไม่มีอะไรให้ต้องล้าง ผู้ผลิตบางรายมีข้อจำกัดเพิ่มเติมของแอปที่ปิดบริการพื้นหลัง เว็บไซต์นี้มีข้อมูลเพิ่มเติมเกี่ยวกับวิธีการแก้ไข การบันทึกอย่างละเอียด - เรื่องที่ข้ามการอัปเดต + รายการที่ข้ามการอัปเดต ลักษณะ ธีมแอพ ไดนามิก @@ -577,10 +531,12 @@ เร็วที่สุด เร็ว คู่มือการติดตาม - บริการที่มีคุณลักษณะขั้นสูงสำหรับแหล่งที่มาเฉพาะ มังงะจะถูกติดตามโดยอัตโนมัติเมื่อเพิ่มลงในคลัง + หมวดหมู่ที่ยกเว้นไว้ + ใช้สำหรับเฉพาะบางแหล่งที่มา รายการจะถูกติดตามโดยอัตโนมัติเมื่อเพิ่มลงในคลัง ข้อมูลแอพ เกิดข้อผิดพลาดในการรับรายการส่วนขยาย คำเตือน + แหล่งที่มาในเครื่อง ภาษา สตรอว์เบอร์รีแด๊กเคอรี่ ทาโกะ @@ -588,26 +544,19 @@ หยินหยาง โยทซึบะ โหมดมืดดำสนิท - การประทับเวลา - การประทับเวลาเชิงสัมพัทธ์ - สั้น (วันนี้, เมื่อวาน) - ยาว (สั้น+, n วันที่ผ่านมา) ทุก 3 วัน ข้อจำกัด: %s เฉพาะขณะเชื่อมต่อ Wi-Fi - กำลังอัปเดตคลัง… (%1$d/%2$d) การอัปเดตจำนวนมากเป็นอันตรายต่อแหล่งที่มาและอาจทำให้การอัปเดตช้าลงและใช้งานแบตเตอรี่เพิ่มขึ้น แตะเพื่อเรียนรู้เพิ่มเติม เผยแพร่จบแล้ว ถูกยกเลิก อยู่ระหว่างพัก คำถามที่พบบ่อยและคู่มือ - 5% แพนหน้ากว้าง ตารางแสดงแค่หน้าปก - ซูมภาพแนวนอน + ซูมภาพกว้างโดยอัตโนมัติ ถูกข้ามเนื่องจากมีตอนที่ยังไม่ได้อ่าน ถูกข้ามเนื่องจากยังไม่มีตอนใด ๆ ถูกอ่าน - เริ่มอ่านแล้ว ที่ยังไม่ได้เริ่มอ่าน ถูกข้ามเนื่องจากเรื่องนี้จบแล้ว อัปเดตข้ามแล้ว %1$d รายการ @@ -621,12 +570,9 @@ มีเวอร์ชันใหม่พร้อมใช้งานจากรีลีสทางการ แตะเพื่อเรียนรู้วีธีการย้ายข้อมูลจากรีลีสไม่เป็นทางการ F-Droid เปิดใน GithHub ไม่มีรายการคลังถูกสำรองข้อมูลไว้ - แสดงแหล่งที่มาที่ตรึงไว้ที่ซ้ำกัน - ทำซ้ำแหล่งที่มาที่ตรึงไว้เป็นกลุ่มภาษา ปิด ล้างข้อมูล WebView ล้างข้อมูล WebView แล้ว - ขณะแบตเตอรี่ยังไม่ต่ำ ไม่พบแหล่งที่มาที่ติดตั้งแล้ว ไม่พบแหล่งที่มาใด ๆ จำนวนตอนที่ยังไม่ได้อ่าน @@ -660,44 +606,70 @@ รีเซ็ตตัวแทนผู้ใช้ นำทุกอย่างออก ไม่รับรองรูปแบบ RARv5 - แสดงมังงะที่อัปเดตล่าสุดของคุณ + แสดงรายการในคลังที่อัปเดตล่าสุดของคุณ วิดเจ็ตไม่พร้อมใช้งานขณะการล็อกแอปเปิดไว้ สตริงตัวแทนผู้ใช้ไม่สามารถทิ้งว่างเปล่าไว้ได้ กำลังอัปเดตอยู่แล้ว ไทเดลเวฟ ดาวน์โหลดล่วงหน้า ดาวน์โหลดอัตโนมัติขณะกำลังอ่าน - ใช้ได้เฉพาะกับรายการที่อยู่ในคลังและตอนปัจจุบันกับตอนถัด ๆ ไปดาวน์โหลดไว้อยู่แล้ว - - %d ตอนที่ยังไม่ได้อ่านถัดไป - + ใช้ได้เฉพาะกับตอนปัจจุบัน + ตอนถัด ๆ ไปดาวน์โหลดไว้อยู่แล้ว แน่ใจแล้วใช่หรือไม่\? หลายภาษา - แบ่งภาพสูงยาว (เบตา) อัปเดตคลังล่าสุด: %s คุณกำลังจะนำ \"%s\" ออกจากคลัง ยอดนิยม ไม่ได้รับการอนุญาตให้ใช้งานที่จัดเก็บ ค้นหา… ถูกข้ามเนื่องจากเรื่องไม่จำเป็นต้องถูกอัปเดต - ภาษาของแอป, การแจ้งเตือน ธีม, รูปแบบวันที่และเวลา หมวดหมู่, การอัปเดตคลัง, การปัดรายการตอน โหมดการอ่าน, การแสดงผล, การนำทาง การดาวน์โหลดอัตโนมัติ, การดาวน์โหลดล่วงหน้า การประมวลผลซิงก์ทางเดียง, เสริมการวิงก์ แหล่งที่มา, ส่วนขยาย, การค้นหาทั้งหมด - การสำรองข้อมูลด้วยตนเองและอัตโนมัติ + การสำรองข้อมูลและพื้นที่เก็บข้อมูลด้วยตนเองและอัตโนมัติ การล็อกแอป, หน้าจอความปลอดภัย ดัมพ์บันทึกข้อขัดข้อง, การเพิ่มประสิทธิภาพแบตเตอรี่ - เกิดความผิดพลาดอย่างไม่ได้คาดคิด + เกิดความผิดพลาด! %s เกิดข้อผิดพลาดอย่างไม่คาดคิด ขอแนะนำให้คุณแบ่งปันบันทึกข้อขัดข้อง แล้วส่งลงไปในช่องสนับสนุนของเราใน Discord ตำแหน่งไม่ถูกต้อง: %s ไม่ทราบชื่อเรื่อง เริ่มแอปพลิเคชันใหม่ เมื่อสักครู่ สตริงตัวแทนผู้ใช้ไม่ถูกต้อง -คิวดาวน์โหลด + สุ่มเปิดรายการ + บิลด์ F-Droid ไม่ได้ถูกรองรับอย่างเป็นทางการ +\nแตะเพื่อเรียนรู้เพิ่มเติม + ไม่พบรายการใด ๆ ในหมวดหมู่นี้ + กำลังตรวจสอบการดาวน์โหลด + ดัชนีการดาวน์โหลดไม่ถูกต้อง + การกระทำนี้จะเป็นการนำวันที่เริ่มอ่านของรายการที่เลือกไว้ก่อนหน้าจาก %s ออก + การกระทำนี้จะเป็นการนำวันที่อ่านจบของรายการที่เลือกไว้ก่อนหน้าจาก %s ออก + นำวันที่ออก\? + เริ่มต้น + ดาวน์โหลดไว้แล้ว + ระยะเวลาการอ่าน + รายการ + รวม + ตัวติดตาม + คะแนนเฉลี่ย + %d น. + สถิติ + ภายในเครื่อง + ไม่ทราบ + รายการที่ติดตาม + ใช้แล้ว + ภาพรวม + รายการที่อ่านจบแล้ว + ในการอัปเดตทั้งหมด + %d วัน + อ่านแล้ว + %d ชม. + %d วิ. + ไม่ใช่ตอนนี้ + หมวดหมู่ว่างเปล่า + คัดลอกไปยังคลิปบอร์ดแล้ว ข้ามตอนที่ซ้ำกัน พร้อมใช้งานแต่ไม่ได้ติดตั้งแหล่งที่มา: %s มีรายการชื่อเดียวกันอยู่ในคลัง @@ -705,17 +677,11 @@ \nต้องการดำเนินการต่อหรือไม่\? %1$s ข้อผิดพลาด: %2$s *จำเป็น - - %d ตอนถัดไป - ซ่อนรายการที่มีอยู่ในคลังอยู่แล้ว คัดลอกไปยังคลิปบอร์ด อัปเดตหมวดหมู่ แยกภาพสูงยาว โอเวอร์เลย์ - - ไม่พบ %1$s ตอน - หมุนหน้ากว้างให้พอดี พลิกการวางแนวของหน้ากว้างที่หมุน ข้อมูลดีบัก @@ -724,4 +690,56 @@ การกระทำเมื่อปัดไปทางซ้าย แตะสองครั้งเพื่อซูม %d ต่อแถว - \ No newline at end of file + กำหนดช่วงเวลา + กำหนดช่วงเวลาการดึงข้อมูล + ดึงข้อมูลรายเดือน (ทุก 28 วัน) + ตรวจสอบเรื่องล่าสุด 10+ + ดรอปแล้ว\? ตรวจสอบเรื่องล่าสุด 20+ และภายใน 2 เดือน + การตรวจสอบที่ผ่านมา + การอัปเดตที่คาดไว้ต่อไป + ระยะเวลาการออกที่คาดไว้จากภายนอก + ข้ามไปเนื่องจากคาดว่าจะไม่มีการออกในวันนี้ + ประมาณทุกๆ + ตั้งค่าให้อัพเดตทุกๆ + ช่วงเวลา + ปรับแต่งช่วงเวลา + ตกลง + นำการติดตามของ %s ออกไหม\? + การกระทำนี้จะเป็นการลบการติดตามภายในเครื่อง + และลบออกจาก %s เช่นกัน + ซิงค์คลังเสร็จสมบูรณ์ + มีผลลัพธ์ + กำลังซิงค์คลัง + ลบการดาวน์โหลด + ดัชนีการดาวน์โหลดไม่ถูกต้อง + แตะที่นี่เพื่อขอความช่วยเหลือเกี่ยวกับ Cloudflare + ไม่สามารถสร้างไฟล์สำรองข้อมูล + มีลิขสิทธิ์แล้ว - ไม่มีตอนให้แสดง + เข้าสู่ระบบตัวติดตาม + ปลดล็อก %s + ไม่มีการเชื่อมต่ออินเทอร์เน็ต + HTTP %d, ดูเว็บไซต์ใน WebView + ไม่สามารถเข้าถึง %s ได้ + ย้ายเรื่องไปด้านล่าง + ประทับเวลาแบบสัมพันธ์กัน + แสดง \"%1$s\" แทน \"%2$s\" + จัดเรียงหมวดหมู่ + กำลังอัปเดตคลัง... (%s) + ต้องการจัดเรียงหมวดหมู่ตามตัวอักษรหรือไม่\? + การตั้งค่าแหล่งที่มา + การตั้งค่าแอป + ไม่มีไฟล์ถูกเลือกไว้ + ไม่เลย + ลดภาพซ้อนบนจอแสดงผล E-Ink + สำรองข้อมูลอัตโนมัติครั้งล่าสุด: %s + แฟลชสีขาวเมื่อเปลี่ยนหน้า + การใช้พื้นที่เก็บข้อมูล + ข้อมูลและการจัดเก็บข้อมูล + สร้าง + นำไปใช้ + ย้อนกลับไปเป็นค่าเริ่มต้น + ไม่พบผู้แปล + ผู้แปล + คะแนนจากตัวติดตาม + ผู้แปลที่เว้นไว้ + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/tr/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/tr/plurals-aniyomi.xml new file mode 100644 index 0000000000..aa227d3df7 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/tr/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + Bir Sonraki İzlenmemiş Bölüm + Sonraki İzlenmemiş %d Bölüm + + + 1 yeni bölüm + %1$d yeni bölüm + + + %1$s bölüm + %1$s bölümler + + + %d saniye + %d saniyeler + + + Sıradaki bölüm + Sıradaki %d bölüm + + + 1 seri için + %d seri için + + + %1$s bölüm ve 1 tane daha + %1$s bölüm ve %2$d tane daha + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/tr/plurals.xml b/i18n/src/commonMain/resources/MR/tr/plurals.xml new file mode 100644 index 0000000000..d00eb3c4a1 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/tr/plurals.xml @@ -0,0 +1,67 @@ + + + + %1$s dakika sonra + %1$s dakika sonra + + + %1$d yeni bölüm + %1$d yeni bölüm + + + Bölüm %1$s ve 1 daha + Bölüm %1$s ve %2$d daha + + + %d girdi için + %d girdi için + + + Uzantı güncellemesi var + %d uzantı güncellemesi var + + + %1$s kaldı + %1$s kaldı + + + %d ulam + %d ulam + + + %1$s içinde %2$s hatayla tamamlandı + %1$s içinde %2$s hatayla tamamlandı + + + %1$s bölüm + %1$s bölüm + + + %d izleyici + %d izleyici + + + %d bölüm atlanıyor, ya kaynakta yok ya da süzgeçlenmiş + %d bölüm atlanıyor, ya kaynakta yok ya da süzgeçlenmiş + + + Dün + %1$d gün önce + + + Sonraki okunmayan bölüm + Sonraki %d okunmayan bölüm + + + Sonraki bölüm + Sonraki %d bölüm + + + %1$s bölüm eksik + %1$s bölüm eksik + + + 1 gün + %d gün + + \ No newline at end of file diff --git a/i18n/src/main/res/values-tr/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/tr/strings-aniyomi.xml similarity index 95% rename from i18n/src/main/res/values-tr/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/tr/strings-aniyomi.xml index 14d2339823..85872c2e7b 100644 --- a/i18n/src/main/res/values-tr/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/tr/strings-aniyomi.xml @@ -96,10 +96,6 @@ İndirme Yöneticisi Uygulama Tercihi Yeni Anime Bölümlerini İndir İzlerken Otomatik Olarak İndir - - Bir Sonraki İzlenmemiş Bölüm - Sonraki İzlenmemiş %d Bölüm - Yalnızca kitaplıktaki girişlerde ve mevcut bölüm ile bir sonraki bölüm zaten indirilmişse çalışır Okuyunca ilerlemeyi güncelle Bölüm önbelleğini temizle @@ -151,14 +147,6 @@ 8 saniye %d saniye içinde atla Manga Eklentileri - - 1 yeni bölüm - %1$d yeni bölüm - - - %1$s bölüm - %1$s bölümler - Dize başına öğe Dize başına anime sayısı Varsayılan dikey @@ -177,10 +165,6 @@ %s atlandı Bölüm ayarları Yedekleme seçenekleri - - %d saniye - %d saniyeler - Yerel anime Anime İzleme süresi @@ -243,24 +227,12 @@ AniSkip çalışması için animenin MAL veya Anilist ile takip edilmesini gerektiriyor Video kalitesi bağlantısı panoya kopyalandı Video kalitesini seçin: - - Sıradaki bölüm - Sıradaki %d bölüm - Ses ve Parlaklık Zaten kütüphanede bulunan manga girişlerini gizle Şu anda izleniyor Ses ve parlaklın ayarlama hareketlerini etkinleştir Zaten kütüphanede bulunan anime girişlerini gizle - - 1 seri için - %d seri için - Uzantı ayarları - - %1$s bölüm ve 1 tane daha - %1$s bölüm ve %2$d tane daha - Kütüphaneye eklerken izleme menüsünü açın Yakın zamanda hiçbir şey izlenmedi Ekrana göre uzatıldı diff --git a/i18n/src/main/res/values-tr/strings.xml b/i18n/src/commonMain/resources/MR/tr/strings.xml similarity index 74% rename from i18n/src/main/res/values-tr/strings.xml rename to i18n/src/commonMain/resources/MR/tr/strings.xml index 51ef70dd38..4af1d90a1f 100644 --- a/i18n/src/main/res/values-tr/strings.xml +++ b/i18n/src/commonMain/resources/MR/tr/strings.xml @@ -1,37 +1,37 @@ Ad - Kategoriler - Kütüphane girdileri + Ulamlar + Kitaplık girdileri Bölümler İzleme Geçmiş Ayarlar + İndirme kuyruğu Kitaplık Geçmiş Güncellemeler Yedekle ve geri yükle Geçiş yap Uzantılar - Eklenti bilgisi + Uzantı bilgisi Ayarlar - Filtrele - İndirilen - İşaretli + Süz + Yer imli Okunmayan - Filtreyi kaldır + Süzgeci kaldır Alfabetik Toplam bölüm Son okunan Ara Genel arama Tümünü seç - Okundu olarak işaretle - Okunmadı olarak işaretle - Öncekileri okundu olarak işaretle + Okundu olarak imle + Okunmadı olarak imle + Öncekileri okundu olarak imle İndir - Bölümü işaretle - Bölümün işaretini kaldır + Bölümü imle + Bölümün imini kaldır Sil Kitaplığı güncelle Düzenle @@ -39,19 +39,19 @@ Ulam ekle Ulamları düzenle Ulamı yeniden adlandır - Ulama taşı + Ulamları ayarla Kapağı düzenle Duraklat Önceki bölüm Sonraki bölüm Yeniden dene Kaldır - Devam et + Sürdür Tarayıcıda aç Görüntüleme kipi Görüntüleme Kompakt ızgara - Liste + Dizelge İndirilen bölümler İptal et Sırala @@ -69,21 +69,22 @@ İndirmeler İzleme Gelişmiş - Hakkında + Üzerine Izgara boyutu Dikey Yatay - Otomatik güncellemeler + Kendiliğinden güncellemeler Kapalı 6 saatte bir 12 saatte bir - Her gün + Günlük 2 günde bir - Her hafta + Haftalık Tümü Otomatik güncellemeler aygıt kısıtlamaları Şarj olurken - \"Tamamlanan\" durumda olan + \"Bitirilmiş\" durumda olan + Varsayılan ulam Her zaman sor Güncelle Kur @@ -96,19 +97,19 @@ Kaldır Güvenilmeyen uzantı Tam Ekran - Sayfa geçişlerini canladır + Sayfa geçişlerini canlandır Çift dokunma animasyon hızı Sayfa numarası göster Kenarları kırp Özel parlaklık - Özel renk filtresi + Özel renk süzgeci Ekranı açık tut Gezinme - Ses tuşları - Ters ses tuşları + Ses düğmeleri + Ters ses düğmeleri Arka plan rengi - Beyaz - Siyah + Ak + Kara Öntanımlı okuma kipi Sayfalanmış (soldan sağa) Sayfalanmış (soldan sağa) @@ -121,7 +122,7 @@ Genişliği sığdır Yüksekliği sığdır Özgün boyut - Akıllı sığdırma + Uslu sığdırma Yakınlaştırma başlangıç konumu Kendiliğinden Sol @@ -130,8 +131,8 @@ Animasyon yok Normal Hızlı - Ön tanımlı döndürme türü - Serbest + Ön tanımlı döndürme + Bağımsız Kilitli dikey Kilitli yatay K @@ -147,15 +148,14 @@ Okunan sondan dördüncü bölüm Okunan sondan beşinci bölüm Yeni bölümleri indir - Hizmetler + İzleyiciler Yedek oluştur Şu anki kitaplığı geri yüklemek için kullanılabilir Yedeği geri yükle Kitaplığı yedek dosyasından geri yükle Yedekleme konumu - Kendiliğinden yedekleme - Yedekleme sıklığı - Maksimum yedek + Kendiliğinden yedekleme sıklığı + En fazla kendiliğinden yedek Yedek oluşturuldu Geri yükleme tamamlandı Neyi yedeklemek istiyorsunuz? @@ -163,11 +163,12 @@ Yedek oluşturuluyor Kullanılan: %1$s Önbellek temizlendi. %1$d dosya silindi - Temizlenirken hata oluştu + Temizlenirken sorun oluştu Çerezleri temizle Çerezler temizlendi + Veritabanını temizle + Kitaplığına kaydedilmeyen girdilerin geçmiş bilgisini sil Girdiler silindi - İzlemeyi yenile Sürüm Çökme bildirimi gönder Hataların düzeltilmesine yardımcı olur. Hiçbir duyarlı veri gönderilmez @@ -176,9 +177,8 @@ Parola Giriş Giriş yapıldı - Bilinmeyen hata - Kategori güncelleniyor - Yerel + Bilinmeyen sorun + Ulam güncelleniyor Başka sonuç yok Yerel kaynak Diğer @@ -197,6 +197,8 @@ Kaynak kurulmadı: %1$s Bölüm %1$s (%1$d/%2$d) indiriliyor + Hata + Duraklatıldı Kaynak başlığı Bölüm numarası Kaynağa göre @@ -215,11 +217,11 @@ Başlık Durum Durum - Başlama Tür - Bu adla bir kategori zaten var! - Kategoriler silindi + Bu adla bir ulam zaten var! + Ulamlar silindi Bu, bu bölümün okunma tarihini kaldıracak. Emin misiniz? + Kitaplığa eklensin mi\? Resim kaydedildi Özel süzgeç Kapak olarak ayarla @@ -239,7 +241,6 @@ Yedek dosyasını seç İndir Yeni güncelleme yok - Güncellemeler aranıyor… İndiriliyor… Güncellemeyi kurmak için dokunun İndirme hatası @@ -252,21 +253,22 @@ İndirici Hata Bölüm, beklenmeyen hata sonucu indirilemedi - Wi-Fi bağlantısı yok + Kablosuz ağ bağlantısı yok Ağ bağlantısı yok + İndirmeler duraklatıldı Genel Biten: - Şu anki: + Şimdiki: Sonraki: Önceki: Sonraki bölüm yok Önceki bölüm yok Sayfalar yükleniyor… Sayfalar yüklenemedi: %1$s - Uzun dokununca göster + Uzun dokununca eylemleri göster WebView ile Aç 32-bit renk - Okundu olarak işaretli bölümleri atla + Okundu olarak imli bölümleri atla Renk filtresi karışım kipi Kaplama Çarpma @@ -281,14 +283,14 @@ Yenile Kitaplık Eski - Bu uzantı artık kullanılamıyor. Düzgün çalışmayabilir ve uygulamada sorunlara neden olabilir. Kaldırılması tavsiye edilir. + Bu uzantı artık kullanılamıyor. Düzgün çalışmayabilir ve uygulamada sorunlara neden olabilir. Kaldırılması önerilir. Tarih biçimi Genel güncelleme %1$s \'den çıkılsın mı\? Çıkış yap Şimdi çıktınız Duraklatıldı - Daha fazla + Daha çok Son bölüm Bölümleri görüntüle Hepsini iptal et @@ -302,64 +304,38 @@ Boştayken kilitle Her zaman Asla - - %1$s dakika sonra - %1$s dakika sonra - Güvenli ekran Bekleyen güncellemeler İçeriği kesme alanında göster - Cloudflare bypass edilemedi + Cloudflare baypas edilemedi Daha iyi uyumluluk için lütfen WebView\'i güncelleyin + Bölüm güncellemeleri Güvenli ekran, uygulamalar arasında geçiş yaparken uygulama içeriğini gizler ve ekran görüntüsü alınmasını engeller Ekran - - %1$d yeni bölüm - %1$d yeni bölüm - Bölüm %1$s Bölüm %1$s ve %2$d daha Bölüm %1$s - - Bölüm %1$s ve 1 daha - Bölüm %1$s ve %2$d daha - Bildirim içeriğini gizle Yeni bölümler aranıyor Pil iyileştirmeyi devre dışı bırak Arka plan kitaplık güncellemelerine ve yedeklemelerine yardım eder Pil iyileştirme zaten devre dışı - Eposta adresi + E-posta adresi Bölüm geçişini her zaman göster - - %d girdi için - %d girdi için - - Menü - Yeniden sırala + Komut-Seçenek Dizelgesi En yeni En eski En üste taşı En alta taşı - - Uzantı güncellemesi var - %d uzantı güncellemesi var - - Web sitesini WebView\'de görüntüle Uzantı güncellemeleri Kitaplık güncelleniyor Okunan - Filtrelenmiş bölümleri geç + Süzgeçlenmiş bölümleri geç Kaynaklar Tersini seç Aralıklı uzun şerit - %25 - %20 - %15 - %10 - Yok Yan dolgu - Sabit + İğnelenmiş İğnelemeyi kaldır İğnele İzleme ekle @@ -369,8 +345,6 @@ Daha fazla Web sitesi Açık kaynak lisansları - Çıkışı doğrula - Çıkmak için tekrar geriye basın Yalnızca indirilen Böl. %1$s - %2$s Yedek geri yüklenemedi @@ -382,28 +356,15 @@ Son kullanılan Yerel kaynak kılavuzu %02d dk, %02d sn - Kitaplığınızdaki tüm girdileri filtreler - - %1$s kaldı - %1$s kaldı - - Sabitlenmiş kaynakları yalnızca genel aramada ara + Kitaplığınızdaki tüm girdileri süzer Gri - Renk şeritlerini azaltır, ancak performansı etkileyebilir + Renk şeritlerini azaltır, ancak başarımı etkileyebilir Okuma kipi - Bu seri için - - %d kategori - %d kategori - + Bu dizi için Aygıt ayarları açılamadı - - %1$s içinde %2$s hatayla tamamlandı - %1$s içinde %2$s hatayla tamamlandı - - Bölüm ilerlemesini, izleme hizmetlerinde güncellemek için tek yönlü eşitleme. Her girdinin izleme düğmesinden, izlemeyi ayarlayın. + Bölüm ilerlemesini, harici izleme hizmetlerinde güncellemek için tek yönlü eşitleme. Her girdinin izleme düğmesinden, izlemeyi ayarlayın. Kitaplıktakilerin kapaklarını yenile - Bu uzantı resmi Tachiyomi uzantıları listesinden değil. + Bu uzantı resmi dizelgeden değil. Resmi olmayan Yükleme tarihine göre Veri @@ -424,15 +385,11 @@ Başlat Kaynak bulunamadı Devre dışı bırak - - %1$s bölüm - %1$s bölüm - Etkili olması için uygulamanın yeniden başlatılmasını gerektirir - + Ağ oluşturma Yok Dokunma bölgelerini ters çevir - Her ikisi de + İkisi de Dikey Yatay Bilinmeyen durum @@ -443,23 +400,14 @@ \"%1$s\" için genel arama Okuma kipi Tema - - %d izleyici - %d izleyici - - Sabitlenmiş kaynağınız yok - Tamamlandı + İğnelenmiş kaynağınız yok + Bitirildi İlerleme - İndirme tamamlandı Hatalar İzleyiciler giriş yapmadı: Bu uzantıdaki kaynaklar yetişkin (18+) içerik içerebilir 18+ - Bu, resmi olmayan veya yanlış işaretlenmiş uzantıların, uygulama içinde yetişkin (18+) içeriği göstermesini engellemez. - - %d bölüm atlanıyor, ya kaynakta yok ya da filtrelenmiş - %d bölüm atlanıyor, ya kaynakta yok ya da filtrelenmiş - + Bu, resmi olmayan veya yanlış imlenmiş uzantıların, uygulama içinde yetişkin (18+) içeriği göstermesini engellemez. Bölüm bulunamadı Öntanımlı bölüm ayarları güncellendi Öntanımlı olarak ayarla @@ -469,14 +417,14 @@ Arama ayarları İndirilen bölümler Gizli kip - Geçmişi temizle - Emin misiniz\? Tüm geçmiş kaybolacak. + Geçmişi sil + Emin misiniz\? Tüm geçmiş silinecek. Geçmiş silindi Sonraki sayfa Önceki sayfa Kaynak geçiş yapma kılavuzu Yetişkin içerik (18+) kaynakları - Kaynaklar ve uzantılar listesinde göster + Kaynaklar ve uzantılar dizelgesinde göster Dosya seçme uygulaması bulunamadı Lütfen MAL\'ye tekrar giriş yapın Dokunma bölgeleri @@ -496,7 +444,7 @@ Sağ ve Sol Geniş sayfaları böl Bölünmüş geniş sayfaların yerleşimi okuma yönüyle eşleşmiyorsa - Bölünmüş sayfa yerleşimi ters çevir + Bölünmüş sayfa yerleşimini ters çevir Yedek dosyadaki veriler geri yüklenecek. \n \nEksik uzantıları yüklemeniz ve daha sonra bunları kullanmak için izleme hizmetlerinde oturum açmanız gerekecektir. @@ -511,18 +459,19 @@ Dahil et: %s Yok Bölümün alındığı tarih - Hariç tutulan kategorilerdeki girdiler, dahil edilen kategorilerde olsa bile indirilmeyecektir. - Otomatik indir + Hariç tutulan ulamlardaki girdiler, dahil edilen ulamlarda olsa bile indirilmeyecektir. + Kendiliğinden indir + Hariç tutulan ulamlardaki girdiler, dahil edilen ulamlarda olsa bile güncellenmeyecektir. Ayrıntıları görmek için dokun Bu Android sürümü artık desteklenmiyor Panoya kopyalanamadı Yatay Dikey - Döndürme türü + Döndürme Girdilerin başlığına göre sıralaç oluşturur - Sayfaları ayrı klasörlere kaydet + Sayfaları ayrı sıralaçlara kaydet Eylemler - Gri tonlama + Boz tonlama Gizli kipi devre dışı bırak Kendiliğinden Bu dizi için tümünü iptal et @@ -533,33 +482,30 @@ Sıralama ölçütü Geçersiz bölüm biçimi Bölüm bulunamadı - Kitaplığı güncellerken izleyicileri güncelle - İzleyicileri otomatik olarak yenile Kısıtlamalar: %s + Yerel kaynak Açık Kapalı Kapak paylaşılamadı Kapak kaydedilemedi Kapak kaydedildi Kapak - Kategori bazında sıralama ve görüntüleme ayarları + Ulam kapsamında sıralama ayarları İzleme kılavuzu - Henüz bir kategoriniz yok. + Henüz bir ulamınız yok. Şimdi indirmeye başla - Kitaplık güncelleniyor… (%1$d/%2$d) - Bu izleyici yalnızca Komga kaynağıyla uyumludur. Bazı üreticilerin arka plan hizmetlerini durduran ek uygulama kısıtlamaları vardır. Bu web sitesinde durumun nasıl düzeltileceği hakkında daha fazla bilgi var. - Yedekleme/geri yükleme, MIUI Optimizasyonu devre dışıysa düzgün çalışmayabilir. - Belirli kaynaklar için gelişmiş özellikler sağlayan hizmetler. Girdiler, kitaplığınıza eklendiğinde otomatik olarak izlenir. - Gelişmiş hizmetler - Saf siyah karanlık mod + Yedekleme/geri yükleme, MIUI iyileştirmesi devre dışıysa düzgün çalışmayabilir. + Belirli kaynaklar için gelişmiş özellikler sağlar. Girdiler, kitaplığınıza eklendiğinde kendiliğinden izlenir. + Gelişmiş izleyiciler + Arı kara karanlık kip Yotsuba Yin & Yang Tako Çilekli Kokteyl Alacakaranlık Yeşil Elma - Dinamik + Devimsel Uygulama teması Arka plan etkinliği En düşük @@ -568,23 +514,15 @@ En yüksek Kaydırmada komut-seçenek dizelgesini gizleme duyarlılığı Ters Çevrilmiş - Uzun (Kısa+, n gün önce) - Kısa (Bugün, Dün) - Göreceli zaman damgaları - - Dün - %1$d gün önce - Bugün - Yakınlarda - Deniz Mavisi ve Turkuaz + Deniz kökçesi & Türk kökçesi Değişikliği onaylamak için kimlik doğrula Varsayılan - Zaman damgaları Görünüm İzle Başlangıç kılavuzu Tablet arayüzü + Hariç tutulan ulamlar Çeviriye yardım edin Uygulama bilgisi Uzantı kurucusu olarak kullanmak için Shizuku\'yu kurun ve başlatın. @@ -592,43 +530,41 @@ Eski Kurucu Uzantı kuruluyor… - Toplam girdiler + Toplam girdi Uyarı Dil - Yedeklerin kopyalarını başka yerlerde de tutmalısınız. - Büyük güncellemeler kaynaklara zarar verir ve daha yavaş güncellemelere ve ayrıca pil kullanımının artmasına neden olabilir. Daha fazlasını öğrenmek için dokunun. + Yedeklerin kopyalarını başka yerlerde de tutmalısınız. Yedekler, depolanan şifreler dahil olmak üzere hassas verileri içerebilirler; paylaşırken dikkat edin. + Büyük güncellemeler kaynaklara dokunca verir ve daha yavaş güncellemelere ve ayrıca pil kullanımının artmasına neden olabilir. Daha fazlasını öğrenmek için dokunun. Ayrıntılı günlük kaydı Ayrıntılı günlükleri sistem günlüğüne yaz (uygulama performansını düşürür) - Yalnızca Wi-Fi\'de - Her 3 günde + Yalnızca kablosuz ağda + 3 günde bir Tümünü güncelle Uygulama güncellemeleri Veri tabanında %1$d kitaplık dışı girdi Temizlenecek bir şey yok - Uzantı listesi alınamadı + Uzantı dizelgesi alınamadı Girdileri güncellemeyi atla - CBZ arşivi olarak kaydet + CBZ belgeliği olarak kaydet Yayımı tamamlandı Gizlilik politikası İptal edildi Molada - %5 Kitaplık güncelleme hatalarının nasıl düzeltileceği konusunda yardım için bkz. %1$s - Başlanılan Yalnızca kapağa ızgara SSS ve Kılavuzlar Bu başlamadı - Manga tamamlandığı için atlandı + Dizi bitirildiği için atlandı Okunmamış bölümler olduğu için atlandı Hiçbir bölüm okunmadığı için atlandı Geniş görüntüleri kaydır - Yatay görseli yakınlaştır + Geniş görselleri kendiliğinden yakınlaştır %1$d güncelleme başarısız oldu %1$d güncelleme atlandı - Daha fazla bilgi edinmek için dokunun + Daha çok bilgi edinmek için dokunun Atlandı Ters dikey - Seriyi en üste taşı + Diziyi en üste taşı Devre dışı Resmi yayınlardan yeni bir sürüm var. Resmi olmayan F-Droid sürümlerinden nasıl geçiş yapacağınızı öğrenmek için dokunun. Resim kaydedilirken hata oluştu @@ -637,13 +573,10 @@ WebView verileri temizlendi WebView verilerini temizle Kapat - Yinelenen sabitlenmiş kaynakları göster - Sabitlenen kaynakları ilgili dil gruplarında tekrarla - Pil düşük olmadığında Kurulu kaynak bulunamadı Kaynak bulunamadı Okunmayan sayısı - Okuyucu performansını iyileştirir + Okuyucu başarımını iyileştirir Bölünürken sayfa %d bulunamadı Sayfa %d dosya yolu bulunamadı Her dizi için okuyucu ayarlarını sıfırla @@ -655,8 +588,8 @@ Dil Yaş derecelendirmesi İstek Dizelgesi - Beklemede Listesi - Tamamlanmayan Listesi + Beklemede dizelgesi + Bitirilmemiş dizelgesi Bitirilmiş Dizelgesi Okuma Dizelgesi Yalnızca kotasız ağda @@ -667,8 +600,8 @@ Açıklama yok Lavanta Ulamı sil - \"%s\" ulamını silmek istiyor musunuz\? - Dahili hata: Daha fazla bilgi için çökme günlüklerine bakın + \"%s\" ulamını silmek istiyor musunuz? + İçsel sorun: Daha çok bilgi için çökme günlüklerine bakın Öntanımlı kullanıcı aracısı dizgesi Öntanımlı kullanıcı aracısı dizgesini sıfırla Her şeyi kaldır @@ -679,44 +612,64 @@ Kullanıcı aracısı dizgesi boş olamaz Gelgit Dalgası Önceden indir - Okurken otomatik indir - - Sonraki okunmayan bölüm - Sonraki %d okunmayan bölüm - - Yalnızca kitaplıktaki girdilerde ve geçerli bölüm ile bir sonraki bölüm zaten indirildiyse çalışır + Okurken kendiliğinden indir + Yalnızca geçerli bölüm ile bir sonraki bölüm zaten indirildiyse çalışır. Emin misiniz\? \"%s\"yi kitaplığınızdan kaldırmak üzeresiniz Kitaplık son güncelleme zamanı: %s Çoklu - Uzun görselleri böl (BETA) Popüler Depolama izinleri verilmedi - Seri güncelleme gerektirmediği için atlandı + Dizi güncelleme gerektirmediği için atlandı Ara… - Elle ve otomatik yedeklemeler + Elle ve kendiliğinden yedeklemeler, depolama alanı Uygulama kilidi, güvenli ekran Çökme günlükleri dökümü, pil iyileştirmeleri - Uygulama dili, bildirimler Ulamlar, genel güncelleme, bölüm kaydırma Kaynaklar, uzantılar, genel arama - Otomatik indir, önceden indir + Kendiliğinden indir, önceden indir Okuma kipi, görüntüleme, gezinme Tema, tarih ve saat biçimi Tek yönlü ilerleme eşitlemesi, gelişmiş eşitleme Uygulamayı yeniden başlat - Beklenmeyen Bir Hata Oluştu + Tüh! %s beklenmeyen bir hatayla karşılaştı. Çökme günlüklerini Discord\'daki destek kanalımızda paylaşmanızı öneririz. Bilinmeyen başlık Geçersiz konum: %s Geçersiz kullanıcı aracısı dizgesi Şimdi - İndirilenler dizinleniyor - Rastgele girdi aç - Bu kategoride girdi bulunamadı + İndirilenler denetleniyor + Gelişigüzel girdi aç + Bu ulamda girdi bulunamadı F-Droid derlemeleri resmi olarak desteklenmemektedir. \nDaha fazla bilgi edinmek için dokunun. - İndirme kuyruğu + Tarih kaldırılsın mı\? + Bu, daha önce seçtiğiniz %s başlangıç tarihini kaldıracak + Bu, daha önce seçtiğiniz %s bitiş tarihini kaldıracak + İndirmeler dizinini geçersiz kıl + İstatistikler + Başladı + İndirilen + Toplam + Kullanılan + Yok + %dg + %dsa + Yerel + Bitirilen girdiler + Genel görünüm + İzleyiciler + Girdiler + Okundu + Okuma süresi + Genel güncellemede + İzlenen girdiler + Ortalama puan + %ddak + %dsn + Şimdi değil + Ulam boş + Panoya kopyalandı Kullanılabilir ancak kaynak kurulu değil: %s Yinelenen bölümleri atla Kitaplığınızda aynı ada sahip bir girdiniz var. @@ -725,18 +678,10 @@ %1$s hatası: %2$s *gerekli Zaten kitaplıkta bulunan girdileri gizle - - Sonraki bölüm - Sonraki %d bölüm - Panoya kopyala Ulamı güncelle Uzun görselleri otomatik böl Kaplama - - %1$s bölüm eksik - %1$s bölüm eksik - Geniş sayfaları sığdırmak için döndür Döndürülen geniş sayfaların yönünü çevir Hata ayıklama bilgisi @@ -745,4 +690,56 @@ Sola kaydırma eylemi Yakınlaştırmak için iki kez dokun Satır başına %d - \ No newline at end of file + Aralığı ayarlama + Özelleştirilmiş fetch aralığı + Aylık getir (28 gün) + Zaman aralıkları + Son 10+ kontrolü + Bırakıldı mı\? Son 20+ ve 2 ay + Geçmiş denetim süresi + Sonraki beklenen güncelleme + Beklenen yayınlanma dönemi dışında + TAMAM + Hepsini tahmin et + %s izlemesi kaldırılsın mı\? + Aralığı özelleştir + Atlandı çünkü bugün bir yayın beklenmiyordu + Bu, izlemeyi yerel olarak kaldıracak. + Ayrıca şuradan da kaldır: %s + Güncelleme aralığını ayarla + Sonuç var + İndirilenleri sil + Yedekleme dosyası oluşturulamadı + Lisanslı - Gösterilecek bölüm yok + İndirilenler dizini geçersiz kılındı + Cloudflare\'le ilgili yardım için tıklayın + %s verisine erişilemedi + İzleyici girişi + Kitaplık eşleşmesi tamamlandı + HTTP %d, siteyi WebView\'de denetle + Genel ağ bağlantısı yok + Kitaplık eşleştiriliyor + Aç: %s + Diziyi en alta taşı + Ulamları sırala + Kitaplık güncelleniyor… (%s) + Ulamları alfabetik sıralamak ister misiniz\? + Seçilen dosya yok + Kaynak ayarları + Uygulama ayarları + Göreli zaman damgaları + \"%1$s\" yerine \"%2$s + Asla + E-ink görüntülerinde gölgelenmeyi azaltır + Uygula + Varsayılana dön + En son şu tarihte kendi yedekledi: %s + Tareviriler bulunamadı + Tareviri + Sayfa değişiminde beyaz ışık çak + Depolama kullanımı + İzleyici notu + Veri ve depolama + Tarevirileri hariç tut + Oluştur + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/uk/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/uk/plurals-aniyomi.xml new file mode 100644 index 0000000000..163422c515 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/uk/plurals-aniyomi.xml @@ -0,0 +1,45 @@ + + + + Наступна не переглянута серія + Наступні %d не переглянуті епізоди + Наступні %d не переглянутих епізодів + Наступні %d не переглянутих епізодів + + + 1 новий епізод + %1$d нові епізоди + %1$d нових епізодів + %1$d нових епізодів + + + Епізоди %1$s та ще 1 + Епізоди %1$s та інші %2$d + Епізоди %1$s та інші %2$d + Епізоди %1$s та інші %2$d + + + Для 1 тайтлу + Для %d тайтлів + Для %d тайтлів + Для %d тайтлів + + + %1$s епізод + %1$s епізоди + %1$s епізодів + %1$s епізодів + + + %d секунда + %d секунди + %d секунд + %d секунд + + + Наступний епізод + Наступні %d епізоди + Наступні %d епізодів + Наступні %d епізодів + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/uk/plurals.xml b/i18n/src/commonMain/resources/MR/uk/plurals.xml new file mode 100644 index 0000000000..ef8ddc5861 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/uk/plurals.xml @@ -0,0 +1,98 @@ + + + + Після %1$s хвилини + Після %1$s хвилин + Після %1$s хвилин + Після %1$s хвилин + + + %1$d новий розділ + %1$d нових розділів + %1$d нових розділів + %1$d нових розділів + + + Розділ %1$s та 1 більше + Розділи %1$s та %2$d більше + Розділи %1$s та %2$d більше + Розділи %1$s та %2$d більше + + + Для %d запису + Для %d записів + Для %d записів + Для %d записів + + + Наявне оновлення для розширення + %d наявних оновлень розширень + %d наявних оновлень розширень + + + %d категорія + %d категорії + %d категорій + %d категорій + + + %1$s залишилось + %1$s залишилось + %1$s залишилось + %1$s залишилось + + + Зроблено за %1$s з %2$s помилкою + Зроблено за %1$s з %2$s помилками + Зроблено за %1$s з %2$s помилками + Зроблено за %1$s з %2$s помилками + + + %1$s розділ + %1$s розділів + %1$s розділів + %1$s розділів + + + %d трекер + %d трекери + %d трекерів + %d трекерів + + + Пропускається %d розділ, тому що джерело не має його, або він був відфільтрований + Пропускаються %d розділи, тому що джерело не має їх, або вони були відфільтровані + Пропускання %d розділів, тому що джерело не має їх, або вони були відфільтровані + Пропускання %d розділів, тому що джерело не має їх, або вони були відфільтровані + + + Учора + %1$d днів тому + %1$d днів тому + %1$d днів тому + + + Наступний непрочитаний розділ + Наступні %d непрочитані розділи + Наступні %d непрочитані розділи + Наступні %d непрочитані розділи + + + Наступний розділ + Наступних %d розділи + Наступних %d розділів + Наступних %d розділів + + + Відсутній %1$s розділ + Відсутні %1$s розділи + Відсутні %1$s розділів + Відсутні %1$s розділів + + + 1 день + %d дні + %d днів + %d днів + + \ No newline at end of file diff --git a/i18n/src/main/res/values-uk/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/uk/strings-aniyomi.xml similarity index 92% rename from i18n/src/main/res/values-uk/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/uk/strings-aniyomi.xml index b1adc88ace..c2d2650c0b 100644 --- a/i18n/src/main/res/values-uk/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/uk/strings-aniyomi.xml @@ -119,12 +119,6 @@ Видалити епізод із закладок Зовнішній завантажувач Завжди використовувати зовнішній завантажувач для аніме - - Наступна не переглянута серія - Наступні %d не переглянуті епізоди - Наступні %d не переглянутих епізодів - Наступні %d не переглянутих епізодів - Налаштування зовнішнього плеєра Зовнішній плеєр Завжди використовувати зовнішній плеєр @@ -196,18 +190,6 @@ %s пропущено Розширення манґи У глобальному пошуку шукайте лише закріплені джерела манґи - - 1 новий епізод - %1$d нові епізоди - %1$d нових епізодів - %1$d нових епізодів - - - Епізоди %1$s та ще 1 - Епізоди %1$s та інші %2$d - Епізоди %1$s та інші %2$d - Епізоди %1$s та інші %2$d - Автоматичний перехід у режим PiP при виході з плеєра Завантажені епізоди Локальне джерело манґи @@ -220,12 +202,6 @@ Глобальний пошук аніме Це розширення не входить до офіційного списку розширень Aniyomi. Варіанти резервного копіювання - - Для 1 тайтлу - Для %d тайтлів - Для %d тайтлів - Для %d тайтлів - Завантаження епізоду призупинено Примусити застосунок повторно перевіряти завантажені розділи та епізоди Манґа @@ -235,18 +211,6 @@ Епізод %1$s та інші %2$d Налаштування Епізодів не знайдено - - %1$s епізод - %1$s епізоди - %1$s епізодів - %1$s епізодів - - - %d секунда - %d секунди - %d секунд - %d секунд - Наступний епізод не знайдено! Пропустити змішаний ОП Аніме з бібліотеки @@ -280,12 +244,6 @@ Перенести аніме Приховати записи манґи, які вже є в бібліотеці Приховати записи про аніме, які вже є в бібліотеці - - Наступний епізод - Наступні %d епізоди - Наступні %d епізодів - Наступні %d епізодів - Скопійоване якісне посилання на відео в буфер обміну Виберіть якість відео: Налаштування розширення diff --git a/i18n/src/main/res/values-uk/strings.xml b/i18n/src/commonMain/resources/MR/uk/strings.xml similarity index 78% rename from i18n/src/main/res/values-uk/strings.xml rename to i18n/src/commonMain/resources/MR/uk/strings.xml index 8684217b49..2d74b22bf6 100644 --- a/i18n/src/main/res/values-uk/strings.xml +++ b/i18n/src/commonMain/resources/MR/uk/strings.xml @@ -1,23 +1,24 @@ - Ім\'я - Манґа - Глави + Назва + Категорії + Записи бібліотеки + Розділи Відстеження Історія Налаштування + Черга завантажень Бібліотека Історія - Оновлення + Нове Резервування та відновлення Міграція Розширення Інформація про розширення Налаштування Фільтр - Завантажені - Закладки - Непрочитані + В закладках + Непрочитане Видалити фільтр В алфавітному порядку За кількістю розділів @@ -48,7 +49,7 @@ Продовжити Відкрити в браузері Режим відображення - Відобразити + Вигляд Компактна сітка Список Завантажені розділи @@ -72,7 +73,7 @@ Розмір сітки Портретна Альбомна - Автоматичні оновлення + Автоматичне оновлення Вимкнути Кожні 6 годин Кожні 12 годин @@ -83,6 +84,7 @@ Обмеження пристрою для автоматичних оновлень Коли заряджається З статусом \"Завершено\" + Типова категорія Завжди запитувати Оновлення Встановити @@ -98,7 +100,7 @@ Анімація переходів сторінки Швидкість анімації при подвійному натиснені Показувати номер сторінки - Межі обрізки + Обрізати поля Користувацька яскравість Користувацький кольоровий фільтр Тримати екран ввімкненим @@ -108,7 +110,7 @@ Колір фону Білий Чорний - Напрямок читання за замовчуванням + Типовий напрямок читання Посторінково (зліва направо) Посторінково (справа наліво) Посторінковий (вертикальний) @@ -129,7 +131,7 @@ Без анімації Нормальна Швидка - Тип орієнтації за замовчуванням + Орієнтація за замовчуванням Вільна Заблокована портретна Заблокована альбомна @@ -137,7 +139,7 @@ G B A - Директорія завантаження + Директорія завантажень Користувацька директорія Вимкнено Останній прочитаний розділ @@ -146,15 +148,14 @@ Четвертий від останнього прочитаного розділу П\'ятий від останнього прочитаного розділу Завантажувати нові розділи - Сервіси + Трекери Створити резервну копію Можна використовувати для відновлення поточної бібліотеки Відновити резервну копію Відновити бібліотеку з резервної копії Директорія резервної копії - Автоматичне резервування - Частота створення резервної копії - Максимальна кількість резервних копій + Частота автоматичних бекапів + Максимальна кількість автоматичних бекапів Резервна копія створена Відновлення завершено Що ви хочете зберегти до резервної копії\? @@ -163,10 +164,11 @@ Використано: %1$s Кеш очищено %1$d файлів було видалено Виникла помилка при видаленні кешу - Очистити реп`яшки - Реп`яшки очищено + Очистити куки + Куки очищено + Очистити базу даних + Видалити історію для записів, котрі не знаходяться в вашій бібліотеці Дані видалено - Оновити відстеження Версія Надсилати звіти про падіння Допомагає виправляти будь-які баги. Особисті дані не передаються @@ -177,12 +179,11 @@ Вхід успішний Невідома помилка Оновлення категорії - Локальна Більше немає результатів Локальне джерело Інші Глобальний пошук… - Остання + Новинки Огляд Онгоінг Невідомо @@ -197,7 +198,7 @@ Розділ %1$s Завантажується (%1$d/%2$d) Помилка - Пауза + Призупинено Назва джерела Номер розділу За каталогом @@ -205,22 +206,22 @@ Завантажити Непрочитані Ви впевнені, що бажаєте видалити вибрані розділи\? - Відслідковувати + Стежити В процесі читання - Завершено + Завершене Кинуто Заморожено Планую почитати - Перечітую + Перечитую Оцінка Заголовок Статус Статус - Розпочато Тип Категорія з таким іменем вже існує! Категорію видалено Ця дія видалить дату прочитання розділу. Ви впевнені\? + Додати до бібліотеки\? Картинку збережено Користувацький фільтр Встановити як обкладинку @@ -241,30 +242,30 @@ Мігрувати Копіювати Не вдалося завантажити розділи. Ви можете повторити спробу в розділі завантажень - Знайдено нові глави + Знайдено нові розділи Не вдалось оновити обкладинку - Будь ласка, додайте мангу до своєї бібліотеки перед тим як робити це + Будь ласка, додайте запис до своєї бібліотеки перед тим як робити це Вибрати обкладинку Виберіть файл резервної копії Завантажити Оновлень не виявлено - Перевірити оновлення… Завантаження в процесі… - Тицьніть для встановлення + Тицьніть для встановлення оновлень Помилка завантаження Доступна нова версія! - Немає завантажень + Завантажень немає Без оновлень Останнім часом нічого не прочитано Ваша бібліотека порожня У вас немає категорій. Тицьніть кнопку плюс, для початку облаштування вашої бібліотеки. Завантажувач Помилка - Невідома помилка при завантаженні глави + Невідома помилка при завантаженні розділу Немає Wi-Fi підключення Немає мережевого з`єднання + Завантаження призупинено Звичайний - Показувати при довгому натисканні + Показувати дії при довгому натисканні Відкрити у WebView 32-бітний колір Пропускати розділи, відмічені як прочитані @@ -290,7 +291,7 @@ Ви вийшли з системи Призупинено Ще - Остання глава + Останній розділ Подивитись розділи Скасувати все Темний режим @@ -303,72 +304,38 @@ Блокувати в режимі очікування Завжди Ніколи - - Після %1$s хвилини - Після %1$s хвилин - Після %1$s хвилин - Після %1$s хвилин - - Екран безпеки + Захистити екран додатку Очікуються оновлення Відображати вміст обітнутої області Не вдалось обійти Cloudflare Будь ласка, оновіть WebView для кращої сумісності + Оновлення розділів Ховати вміст застосунку при перемиканні застосунків та блокувати скріншоти Відображення - - %1$d нова глава - %1$d нових глав - %1$d нових глав - %1$d нових глав - - Глава %1$s - Глава %1$s та %2$d більше - Глави %1$s - - Глава %1$s та 1 більше - Глави %1$s та %2$d більше - Глави %1$s та %2$d більше - - Приховати вміст сповіщення - Перевірка нових глав + Розділ %1$s + Розділ %1$s та ще %2$d + Розділи %1$s + Приховати вміст сповіщень + Перевірка нових розділів Вимкнути збереження батареї Допомагає фоновому оновленню бібліотеки та резервним копіям Збереження батареї вже вимкнено Електропошта Завжди показувати перехід розділу - - Для %d тайтлу - Для %d тайтлів - Для %d тайтлів - Для %d тайтлів - Меню - Переупорядкувати Найновіші Найстаріші Перемістити догори Перемістити додолу - - Наявне оновлення для розширення - %d наявних оновлень розширень - %d наявних оновлень розширень - Оновлення розширень - Глипнути сайт в WebView Читання Джерела Оновлення бібліотеки Пропускати відфільтровані розділи - 25% - 20% - 15% - 10% - Без меж Бічний відступ Довга смуга з проміжками Інвертувати вибір - Додати стеження + Додати відстеження Прикріплено Відкріпити Закріпити @@ -378,19 +345,11 @@ Більше Ліцензії з відкритим кодом Сторінка - Підтвердити вихід - Натисніть ще раз, щоб вийти Тільки завантажені Сірий Зменшує смугастість, але може вплинути на продуктивність - Це розширення не входить до переліку офіційних розширень Tachiyomi. + Це розширення не з офіційного списку. Неофіційне - - %d категорія - %d категорії - %d категорій - %d категорій - Перевірити наявність нової обкладинки та подробиць при оновленні бібліотеки Автоматично оновлювати метадані Мігрувати @@ -398,13 +357,7 @@ Посібник місцевого джерела Останній використаний Вкладки - - %1$s залишилось - %1$s залишилось - %1$s залишилось - %1$s залишилось - - Фільтрувати усю мангу в вашій бібліотеці + Фільтрувати усі записи в вашій бібліотеці Перевірити оновлення Не вдалось відкрити налаштування пристрою Оновити обкладинки в бібліотеці @@ -413,22 +366,15 @@ Відновлення бекапу не вдалось Відновлення вже відбувається Помилка резервування - Резервна копія вже зберігається - - Зроблено за %1$s з %2$s помилкою - Зроблено за %1$s з %2$s помилками - Зроблено за %1$s з %2$s помилками - Зроблено за %1$s з %2$s помилками - + Резервне копіювання вже виконується %02d хв, %02d сек Відсутні джерела: - Бекап не містить жодної манги. + Бекап не містить жодних записів бібліотеки. Невірний файл резервної копії - У глобальному пошуку шукайте лише закріплені джерела - Одностороння синхронізація для оновлення прогресу розділу в службах стеження. Налаштуйте для окремих записів манги з допомогою кнопки \"Стеження\". + Одностороння синхронізація для оновлення прогресу розділу у зовнішніх сервісах стеження. Налаштуйте відстеження окремих записів за допомогою кнопки відстеження. Показувати вкладки категорій Зручна сітка - Гл. %1$s - %2$s + Розд. %1$s - %2$s Режим читання Для цієї серії Сторінки не знайдено @@ -438,12 +384,6 @@ Показати режим читання Розпочати Джерело не знайдено - - %1$s розділ - %1$s розділів - %1$s розділів - %1$s розділів - Відключити Обоє Вертикально @@ -456,36 +396,23 @@ Мережа Оновлено до v%1$s Що новенького - Шукати для \"%1$s\" глобально + Шукати \"%1$s\" глобально Режим читання Тема Дата додавання - - %d трекер - %d трекери - %d трекерів - %d трекерів - У вас немає закріплених джерел Помилки Завершено - Поступ - Завантаження завершено + Прогрес Трекери не авторизовано: Джерела з цього розширення можуть містити контент NSFW (18+) 18+ Це не заважає неофіційним або потенційно невірним розширенням розміщувати вміст NSFW (18+) у застосунку. - - Пропускається %d глава, тому що джерело не має її, або вона була відфільтрована - Пропускається %d глав, тому що джерело не має їх, або вони були відфільтровані - Пропускається %d глав, тому що джерело не має їх, або вони була відфільтровані - Пропускається %d глав, тому що джерело не має їх, або вони була відфільтровані - Немає розділів - Оновлено налаштування розділу за замовчуванням + Налаштування розділу оновлено %1$s: %2$s, сторінка %3$d - За замовчуванням - Ви впевнені, що бажаєте зберегти ці налаштування за замовчуванням\? + Зберегти налаштування + Ви впевнені, що бажаєте зберегти ці налаштування як основні\? Налаштування розділу Завантажені розділи Налаштування пошуку @@ -512,7 +439,7 @@ За зростанням За номером розділу За датою завантаження - Відслідковуваний + Відстежуване Показати кількість об\'єктів Праворуч та ліворуч Розділення широких сторінок @@ -528,51 +455,49 @@ Короткочасно відобразити, коли читалку відкрито Оверлей зон дотику DNS поверх HTTPS (DoH) - Мангу в виключених категоріях не буде завантажено, навіть якщо вона також знаходиться у включених категоріях. + Записи в виключених категоріях не буде завантажено, навіть якщо вона також знаходиться у включених категоріях. Автозавантаження Виключати: %s Включати: %s - Ніхто - Дата отримання глави + Немає + Записи в виключених категоріях не буде оновлено, навіть якщо вони також знаходяться у включених категоріях. + Дата отримання розділу Тицьніть для перегляду подробиць Ця версія Android більше не підтримується Не вдалось скопіювати до буферу обміну Альбомна Портретна - Тип орієнтації - Створювати теки в відповідності до назви манги + Орієнтація + Створювати теки в відповідності до назви записів Зберігати сторінки до окремих тек Дії Відтінки сірого Вимкнути режим інкогніто - Автоматично + Авто Скасувати для усієї серії Збігів не знайдено Джерело не підтримується - Не прочитано + Не прочитане Помилка відправлення обкладинки Помилка при збереженні обкладинки Обкладинку збережено Обкладинка Дата Сортувати за - Невірний формат розділу + Невірний формат розділів Розділ не знайдено - Гайд відслідковування + Гайд відстежування Вимкнено Увімкнено - Налаштування сортування та відображення для кожної категорії - Оновлювати відстежуване при оновлені бібліотеки - Автоматично оновлювати відстежуване + Налаштування сортування для кожної категорії Обмеження %s + Локальне джерело У вашій бібліотеці ще немає категорій. - Оновлення бібліотеки... (%1$d/%2$d) - Цей трекер сумісний тільки з джерелом Komga. У деяких виробників є додаткові обмеження застосунків, котрі вбивають фонові сервіси. На цьому сайті більше інформації з приводу того, як це виправити. Фонова активність Резервування/Відновлення можуть не працювати належним чином, у випадку, якщо вимкнено Оптимізацію MIUI. - Сервіси, які надають розширені можливості для певних джерел. Манга буде автоматично відстежуватись при додаванні до бібліотеки. - Розширені сервіси + Надає розширені функції для конкретних джерел. Записи автоматично відстежуються при додаванні до бібліотеки. + Розширені трекери Найнижча Низька Висока @@ -589,29 +514,19 @@ Тема застосунку Розпочати завантаження зараз Інвертовано - Давніше (Нещодавно+, n днів тому) - Нещодавно (Сьогодні, Вчора) - Відносні позначки часу - - Учора - %1$d днів тому - %1$d днів тому - %1$d днів тому - Сьогодні - Нещодавно Бірюзова Виконайте автентифікацію, щоб підтвердити зміну Типово - Часові мітки Вигляд - Доріжка + Стежити Посібник з початку роботи Планшетний інтерфейс Допомогти з перекладом Встановлювач Shizuku не запущений - За кількістю манги + Виключені категорії + Всього записів Встановлюю розширення… Про застосунок Спадок @@ -621,28 +536,26 @@ Попередження: великі оновлення можуть призвести до сповільнення джерел або збільшити використання батареї. Тицьніть задля подробиць. Оновлення застосунку Оновити все - Ви повинні зберігати декілька резервних копій в інших місцях. + Ви повинні зберігати декілька резервних копій в інших місцях. Резервні копії можуть містити конфіденційні дані, включно зі збереженими паролями; будьте обережні, якщо ділитеся ними. Попередження Мова Що 3 дні Тільки через Wi-Fi Не вдалося отримати список розширень - %1$d небібліотечний комікс у базі даних + %1$d небібліотечних записів у базі даних Немає чого очищувати Політика конфіденційності - Пропускати оновлення + Пропускати оновлення записів Зберегти архів як CBZ Для допомоги в виправленні помилок оновлення бібліотеки, дивіться %1$s Публікація завершена Відмінено - На хіатусі - Розпочато + Заморожено Сітка тільки з обкладинками Серія не почата Довідка та FAQ Перемістити серію на початок Портретна навпаки - 5% Пропущено %1$d оновлення(нь) не вдалось %1$d оновлення(нь) пропущено @@ -663,7 +576,6 @@ Скидує режим читання та орієнтацію всіх серій Лаванда Без опису - Повторювати прикліплені джерела, у відповідності з їх мовними групами Скинути налаштування читалки для кожної серії Скидання всіх налаштувань Користувацька обкладинка @@ -675,41 +587,32 @@ Встановлених джерел не знайдено Джерел не знайдено Вимкнено - Відображати дубльовані закріплені джерела Тицьніть задля подробиць Не вдається відкрити останній прочитаний розділ Мова застосунку - Коли батарею заряджено Версія Мова Вікові обмеження Не вдалось знайти шлях сторінки %d Панорамування широких зображень - Збільшити горизонтальне зображення + Автоматичне масштабування широких зображень Закрити Відкрити на GitHub Нова версія наявна з офіційних релізів. Тицьніть для того аби дізнатись як мігрувати з неофіційних релізів F-Droid. InternalError: Перевірте журнал халеп задля додаткової інформації Чи бажаєте ви видалити категорію \"%s\"\? Видалити категорію - Переглянути нещодавно оновлені серії + Переглянути нещодавно оновлені записи бібліотеки Віджет не доступний при ввімкненому блокуванні застосунку - User agent за замовчуванням + Типовий user agent Видалити все - Скинути user agent за замовчуванням + Скинути типовий user agent Формат RARv5 не підтримується Багатомовне - Розділяти високі зображення (БЕТА) Останнє оновлення бібліотеки: %s Доступ до файлової системи не надано - - Наступна непрочитана глава - Наступні %d непрочитані глави - Наступні %d непрочитані глави - Наступні %d непрочитані глави - Завантажувати наперед - Працює тільки на манґу збережену в бібліотеці, якщо поточний розділ, та наступний вже завантажені + Працює, якщо поточний розділ + наступний вже завантажені. Ви збираєтесь видалити \"%s\" з вашої бібліотеки Приливна Хвиля Ви впевнені\? @@ -718,25 +621,55 @@ Популярне Автоматичне завантаження під час читання %s зіткнулися з неочікуваною помилкою. Ми пропонуємо вам поділитися журналами збоїв у нашому каналі підтримки на Discord. - Мова застосунку, сповіщення Тема, формат дати та часу Категорії, глобальне оновлення, гортання розділів Режим читання, відображення, навігація Автоматичне завантаження, завантаження наперед Одностороння синхронізація прогресу, розширена синхронізація Джерела, розширення, глобальний пошук - Ручне та автоматичне резервування + Ручне та автоматичне резервування, сховище Блокування застосунку, захист екрану Вивантаження журнала з помилками, оптимізація батареї - Сталась неочікувана помилка - Перезапустити застосунку + Ой! + Перезапустити застосунок Пропущено, оскільки серія не потребує оновлень Шукати… Неприпустиме місцезнаходження %s Невідомий тайтл Тільки що Невірне значення user agent - Черга завантаження + Відкрити випадковий запис + В цій категорії немає записів + Перевірка завантажень + Збірки F-Droid офіційно не підтримуються. +\nТицьніть для того, щоб дізнатись більше. + Видалити дату\? + Це призведе до видалення вибраної раніше дати початку з %s + Це призведе до видалення раніше вибраної дати завершення з %s + Недійсний індекс завантажень + Тривалість читання + Записи + Всього + Відстеження + Відстежувані записи + Н/П + %dm + Статистика + Локально + Завантажене + Розпочате + Огляд + У глобальному оновленні + Використано + Завершені записи + Прочитано + Середня оцінка + %dd + %dh + %ds + Не зараз + Категорія порожня + Скопійовано в буфер обміну Доступно, але джерело не встановлене: %s Пропуск повторюваних розділів У бібліотеці є запис з такою ж назвою. @@ -746,27 +679,67 @@ *необхідно Приховати записи, які вже є в бібліотеці Копіювати в буфер обміну - - Наступний розділ - Наступних %d розділи - Наступних %d розділів - Наступних %d розділів - Оновити категорію Розділяти довгі зображення Оверлей Повернути широкі сторінки за розміром Перевернути орієнтацію обернутих широких сторінок - - Відсутній %1$s розділ - Відсутні %1$s розділи - Відсутні %1$s розділів - Відсутні %1$s розділів - - Інформація про налагодження + Інформація для відлагодження Гортання розділів Проведіть пальцем праворуч Проведіть пальцем ліворуч Двічі торкніться, щоб збільшити %d на рядок - \ No newline at end of file + Встановити інтервал + Перевірка останніх 10+ + Покинуто\? Останні 20+ і 2 місяці + Пройдено період перевірки + Оцініть кожну + Отримувати щомісяця (28 днів) + Налаштувати інтервал отримання + Поза очікуваним періодом випуску + Наступне очікуване оновлення + Інтервали + Налаштовано на оновлення кожної + Налаштувати інтервал + Пропущено, оскільки сьогодні не очікується жодного релізу + ОК + Також видалити з %s + Видалити відстеження %s\? + Це видалить відстеження локально. + Видалити завантажене + Має результати + Синхронізацію бібліотеки завершено + Синхронізація бібліотеки + Логін трекера + Індекс завантажень недійсний + Натисніть тут, щоб отримати допомогу з Cloudflare + Не вдалося створити файл резервної копії + Ліцензовано - немає розділів для показу + Розблокувати %s + Перемістити серію вниз + Немає Інтернет-з\'єднання + Http %d, перевірте вебсайт у WebView + Не вдалося досягти %s + Відносні позначки часу + \"%1$s\" замість \"%2$s\" + Налаштування джерела + Налаштування застосунку + Застосувати + Повернути за замовчуванням + Сортувати категорії + Сканлейтор + Оцінка трекера + Дані та сховище + Ви хочете сортувати категорії алфавітно? + Створити + Ніколи + Зменшує гостинг на e-ink екранах + Востаннє автоматично зарезервовано: %s + Перекладачів не знайдено + Блимати екраном при зміні сторінки + Використання сховища + Оновлення бібліотеки... (%s) + Файл не вибрано + Виключити перекладачів + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/uz/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/uz/plurals-aniyomi.xml new file mode 100644 index 0000000000..1890f5b4eb --- /dev/null +++ b/i18n/src/commonMain/resources/MR/uz/plurals-aniyomi.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/uz/plurals.xml b/i18n/src/commonMain/resources/MR/uz/plurals.xml new file mode 100644 index 0000000000..c59eba87a2 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/uz/plurals.xml @@ -0,0 +1,11 @@ + + + + %d toifa + %d toifa + + + %1$s daqiqadan so\'ng + %1$s daqiqadan so\'ng + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/uz/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/uz/strings-aniyomi.xml new file mode 100644 index 0000000000..38d406a704 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/uz/strings-aniyomi.xml @@ -0,0 +1,5 @@ + + + Kategoriyalar + Aniyomini ochish + \ No newline at end of file diff --git a/i18n/src/main/res/values-uz/strings.xml b/i18n/src/commonMain/resources/MR/uz/strings.xml similarity index 87% rename from i18n/src/main/res/values-uz/strings.xml rename to i18n/src/commonMain/resources/MR/uz/strings.xml index d5aa8ed6a5..6ca481a48e 100644 --- a/i18n/src/main/res/values-uz/strings.xml +++ b/i18n/src/commonMain/resources/MR/uz/strings.xml @@ -35,7 +35,6 @@ Filtr Menyu Sozlamalar - Chiqish uchun orqaga tugmasini bosing Tarix Kuzatish Boblar @@ -66,12 +65,10 @@ Oʻchiq Jami qismlar Yoniq - Oxirgi yangilanish tekshiruvi Ogohlantirish O\'zgartirishni tasdiqlash uchun autentifikatsiya qiling Kuzatilayotgan Qismlar sonini ko\'rsatish - «Davom ettirish» tugmasi Pin Yuklab olish sanasi Eng eski @@ -99,11 +96,9 @@ Eng yangi Yuklanmoqda… InternalError: Qo\'shimcha ma\'lumot uchun xatolar ro\'yhatini ko\'ring - Ilova tili, bildirishnomalar Qorong\'u rejim O\'chiq Yashil olma - Qayta tartiblash Mavzu Ilova qulflanishi, ekran himoyasi Bildirishnomalarni boshqarish @@ -117,14 +112,12 @@ Manbaalar, kengaytmalar, global qidiruv Qo\'lbola va avtomatik zaxira nusxalar Sana formati - Chiqishni tasdiqlash Toshgan to\'lqin Yuklashni boshlash Qulay ko\'rinish O\'zgaruvchan Davom ettirish Oxirgi bob sanasi - Qisqa (Bugun, Kecha) Ilova tili O\'qilmagan boblar Ko\'rsatish rejimi @@ -157,7 +150,6 @@ Yotsuba Kutubxona Yopish - Qismni ko\'rsatish Hozir emas Firuz Biometrik qulflash @@ -166,9 +158,6 @@ Ulashish Tashlash Bekor qilish - Vaqt belgilari - Nisbiy vaqt belgilari - Uzun (Qisqa+, n-kun oldin) Xavfsizlik Qop-qora qorong\'u rejim Tasodifiy qismni ochish @@ -186,14 +175,10 @@ Ilova ekrani himoyasi Manbaa va kengaytmalar ro\'yhatida ko\'rsatish Bu, ilovada norasmiy yoki noto\'g\'ri belgilangan kengaytmalardan NSFW (18+) kontent paydo bo\'lishini oldini olmaydi. - Yaqinda - Bugun Ko\'rsatish Qismlar soni Qism boshlanmagan Kutubxona yangilanishida yangi muqova va ma\'lumotlarni tekshirish - Kuzatmalarni yangilash - Kutubxona yangilanishida kuzatmalarni yangilash Doim so\'rash Har toifa o\'z sozlamasiga ega Cheklangan toifalardagi qismlar yangilanmaydi, yoniq toifalarga kirsaham. @@ -202,11 +187,6 @@ Yangilanishlar mavjud Ishonchsiz kengaytma Ishonchsiz - Bu kengaytma ishonchsiz sertifikat tomonidan imzolangan va faollashtirilmagan. -\n -\nZararli kengaytma Tachiyomida saqlanadigan barcha hisobga kirish ma\'lumotlarini o\'qishi, yoki ixtiyoriy kodni bajarishi mumkin. -\n -\nBu sertifikatga ishonish orqali, ushbu xavflarni qabul qilasiz. Agar keng sahifalarning bo\'linishi o\'qish yo\'nalishiga mos kelmasa To\'liq ekran rejimi Keng sahifalarni bo\'lish @@ -215,7 +195,6 @@ Rang filtri rejimi Chiziqlanishni kamaytiradi, lekin ishlashga ta\'sir ko\'rsatishi mumkin Barchasi - O\'qilmagan boblar soni «Yangilanishlar» ikonida Kutilmoqda Yuklanmoqda O\'rnatilmoqda @@ -224,7 +203,6 @@ Kengaytmalar ro\'yhatini olib bo\'lmadi NSFW (18+) manbaalari Ilova himoyasi dasturlar orasida almashishda ilova ekranini yashiradi, va skrinshot qilish imkonini cheklaydi - O\'qilmagan bob(lar) bor Yangilash 18+ Sahifa raqamini ko\'rsatish @@ -241,10 +219,6 @@ Har hafta HAr 3 kunda Quvvatlanayotganda - - %d toifa - %d toifa - Qismlar yangilanishini o\'tkazib yuborish Shizuku ishlamayapti Filtrlangan boblarni o\'tkazib yuborish @@ -255,10 +229,6 @@ O\'qish boshlanganida o\'qish rejimini birozga ko\'rsatish Qism yakunlangan Kengaytma o\'rnatilmoqda… - - Kecha - %1$d kun oldin - Global yangilanish Metama\'lumotlarni yangilash Istisno qilish: %s @@ -278,7 +248,6 @@ Til Portret Har kun - Quvvat past bo\'lmaganda Avtomatik yangilanish O\'chiq Kulrang @@ -292,19 +261,13 @@ Yosh cheklovi Faqat cheksiz tarmoq orqali O\'z ichiga oladi: %s - Uzun rasmlarni bo\'lish (BETA) Kesilgan maydondagi ma\'lumotni ko\'rsatish O\'qish rejimini ko\'rsatish Qoplama Ko\'paytirish Ekran - - %1$s daqiqadan so\'ng - %1$s daqiqadan so\'ng - Uskuna uchun avtomatik yangilanishlarni cheklash Takrorlanuvchi boblarni o\'tkazib yuborish - Sahifalarni alohida papkalarga saqlash Gorizontal Vertikal Ikkala taraf @@ -327,7 +290,6 @@ Sahifabay Oq Yo\'q - Qism nomiga asoslanib papka yaratish Keyingi Chapdan o\'ngga Ovoz tugmalari @@ -344,11 +306,9 @@ Tez Standart aylanish Eng baland - 10% Baland K A - 15% O\'qilgan bobdan to\'rtinchisi O\'qilgan bobdan beshinchisi Avto-yuklash @@ -359,12 +319,9 @@ Eng past Landshaft Teskari portret - Boblarni o\'chirish Noto\'g\'ri joylashuv: %s Past - Yo\'q Foydalanuvchi papkasi - «O\'qilgan» deb belgilangandan so\'ng o\'chirish Avtomatik Portret O\'zgarmas portret @@ -372,14 +329,12 @@ Aylantirish vaqtida menyu yashirish sezuvchanligi O\'zgarmas landshaft Kattalashtirish - O\'qib bo\'lingandan so\'ng o\'chirish Oxirgi o\'qilgan bob Oxiridan oldingi o\'qilgan bob Tasvirni gorizontal kattalashtirish Y O\'chirilgan Chapdan - 5% Istisno qilingan toifalar Keng rasmlarga teginishda panoramalash Original o\'lcham @@ -390,10 +345,7 @@ Boblar aro o\'tish O\'qish rejimi O\'qish - 25% - 20% Uzunasiga Yon bo\'shliq - Xatchopli boblarni o\'chirish O\'qilgan bobdan uchinchisi - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/vi/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/vi/plurals-aniyomi.xml new file mode 100644 index 0000000000..e86b2f3374 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/vi/plurals-aniyomi.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/vi/plurals.xml b/i18n/src/commonMain/resources/MR/vi/plurals.xml new file mode 100644 index 0000000000..18fc85c641 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/vi/plurals.xml @@ -0,0 +1,48 @@ + + + + Có %d bản cập nhật cho các tiện ích mở rộng sẵn sàng + + + %1$d chương mới có + + + Cho %d chương + + + Sau %1$s phút + + + %d danh mục + + + Chương %1$s và %2$d + + + Đã bỏ qua %d chương, vì nguồn đang bị thiếu hoặc đã bị lọc ra + + + %d bộ theo dõi + + + %1$s chương + + + Còn lại %1$s + + + Hoàn tất trong %1$s với %2$s lỗi + + + %1$d ngày trước + + + %d chương chưa đọc tiếp + + + %d Chương tiếp theo + + + Đang thiếu %1$s + + \ No newline at end of file diff --git a/i18n/src/main/res/values-vi/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/vi/strings-aniyomi.xml similarity index 100% rename from i18n/src/main/res/values-vi/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/vi/strings-aniyomi.xml diff --git a/i18n/src/main/res/values-vi/strings.xml b/i18n/src/commonMain/resources/MR/vi/strings.xml similarity index 87% rename from i18n/src/main/res/values-vi/strings.xml rename to i18n/src/commonMain/resources/MR/vi/strings.xml index ce2d651666..e5f005ae0d 100644 --- a/i18n/src/main/res/values-vi/strings.xml +++ b/i18n/src/commonMain/resources/MR/vi/strings.xml @@ -1,16 +1,14 @@ Tên - Cài đặt + Hàng chờ tải xuống Thư viện Lịch sử Cập nhật Sao lưu và khôi phục - Cài đặt Bộ lọc - Đã tải xuống Đã đánh dấu Chưa đọc Bỏ bộ lọc @@ -51,18 +49,14 @@ Lưu lại Làm mới Hoàn tác - Đang tải… - - Chung Trình đọc Tải xuống Theo dõi Nâng cao Giới thiệu - - Số truyện hiển thị mỗi dòng + Cỡ lưới Dọc Ngang Tự động cập nhật @@ -87,10 +81,10 @@ Trắng Đen Kiểu đọc mặc định - Trái sang phải - Phải sang trái - Theo chiều dọc - Webtoon + Phân trang (trái sang phải) + Phân trang (phải sang trái) + Phân trang (chiều dọc) + Dải dài Kiểu tỉ lệ Vừa màn hình Kéo dãn @@ -111,7 +105,6 @@ G B A - Đường dẫn tải xuống Đường dẫn tùy chỉnh Vô hiệu hóa @@ -121,40 +114,34 @@ Bốn chương đã đọc gần nhất Năm chương đã đọc gần nhất Tải chương mới - Dịch vụ - Đã sử dụng: %1$s Bộ nhớ đệm đã được dọn dẹp. %1$d tập tin đã bị xóa Lỗi xảy ra trong khi xóa Dọn dẹp thông tin lưu trữ Thông tin lưu trữ đã được xóa + Dọn dẹp cơ sở dữ liệu + Xóa lịch sử đọc truyện và các chương không nằm trong thư viện Các mục đã bị xóa - Phiên bản - Gửi báo cáo lỗi Giúp đỡ sửa lỗi. Sẽ không có thông tin nhạy cảm nào được gửi đi - Đăng nhập vào %1$s Tên đăng nhập Mật khẩu Đăng nhập Đăng nhập thành công Lỗi không xác định - Cập nhật danh mục - Không có thêm kết quả nào - - Đang tiến hành Không rõ Đã được mua bản quyền Gỡ bỏ khỏi thư viện - Chương %1$s Đang tải xuống (%1$d/%2$d) + Lỗi + Đã tạm dừng Tiêu đề nguồn Số chương Theo nguồn truyện @@ -162,7 +149,6 @@ Tải xuống Chưa đọc Bạn có chắc muốn xóa các chương đã chọn? - Theo dõi Đang đọc Đã hoàn thành @@ -173,13 +159,11 @@ Tiêu đề Trạng thái Các chương - Tên danh mục này đã tồn tại! Danh mục đã bị xóa - Sẽ xóa ngày đọc các chương. Bạn chắc chứ? + Thêm truyện vào thư viện\? Đã lưu ảnh - Bộ lọc tùy chỉnh Đặt làm ảnh bìa Đã cập nhật ảnh bìa @@ -187,38 +171,29 @@ Không tìm thấy chương kế tiếp Hình ảnh không thể hiển thị được Bạn có chắc muốn đặt ảnh này làm ảnh bìa? - - - Có lỗi đã xảy ra khi đang tải các chương. Bạn có thể thử lại trong phần Tải xuống - Đã tìm thấy chương mới Cập nhật ảnh bìa thất bại Hãy thêm truyện vào thư viện trước khi thực hiện - Chọn ảnh bìa Chọn file sao lưu - Tải xuống Không có cập nhật mới - Đang tìm cập nhật mới… - Đang tải xuống… - Nhấn để cài + Nhấn để cập nhật Lỗi khi tải xuống Có cập nhật mới! - - Không có Không có cập nhật mới Không có truyện đã đọc gần đây Thư viện trống - Trình tải xuống Lỗi Đã xảy ra lỗi khi tải xuống chương này Không có kết nối Wi-fi Không có kết nối mạng + Tải xuống đã tạm dừng + Hạng mục Truyện trong thư viện Theo dõi Lịch sử @@ -232,6 +207,7 @@ Khôi phục Ứng dụng không có sẵn Mỗi tuần + Danh mục mặc định Luôn hỏi Cập nhật Cài đặt @@ -255,7 +231,6 @@ Khôi phục sao lưu Khôi phục thư viện từ tập tin sao lưu Nơi lưu trữ - Tự động sao lưu Lịch sao lưu Số sao lưu tối đa Sao lưu đã được tạo @@ -263,8 +238,6 @@ Bạn có muốn sao lưu không\? Khôi phục sao lưu Đang tạo bản sao lưu - Làm mới theo dõi - Địa phương Nguồn cục bộ Khác Tìm kiếm toàn bộ… @@ -278,7 +251,6 @@ Nguồn truyện không thể cài đặt: %1$s Đọc lại Trạng thái - Đã bắt đầu Loại Đã đọc xong: Đang đọc: @@ -293,7 +265,7 @@ Sao chép Không có danh mục. Nhấn vào dấu cộng để tạo một nhóm từ thư viện. Thường gặp - Nhấn giữ để mở hộp thoại + Nhấn giữ để mở mục hành động Mở bằng WebView Màu 32-bit Bỏ qua chap đã đọc @@ -306,20 +278,10 @@ Cập nhật tiện ích mở rộng Vui lòng cập nhật WebView để tương thích tốt hơn Bỏ qua Cloudflare thất bại - - Có %d bản cập nhật cho các tiện ích mở rộng sẵn sàng - Chương %1$s - - %1$d chương mới có - - - Cho %d chương - Kiểm tra các chương cập nhật mới Đang cập nhật thư viện Đã tạm ngưng - Kiểm tra trang web bằng WebView Bạn đã đăng xuất Đăng xuất tài khoản Đăng xuất khỏi %1$s\? @@ -332,7 +294,7 @@ Bỏ qua các chương đã lọc Màn hình Hiển thị nội dung ở phần rìa - Tiện ích mở rộng này không còn tồn tại. + Phần mở rộng này không khả dụng. Nó có thể không chạy và có thể gây ra lỗi với Tachiyomi. Kiến nghị nên Gỡ cài đặt. Lỗi thời Cập nhật đang chờ Cập nhật toàn bộ @@ -340,13 +302,10 @@ Ẩn nội dung thông báo Bảo vệ màn hình sẽ ẩn nội dung khi chuyển đổi ứng dụng và chặn chụp màn hình Bảo vệ màn hình - - Sau %1$s phút - Không bao giờ Luôn luôn - Khóa khi hoạt động nền - Cần được mở khóa + Khóa khi chạy nền + Khóa ứng dụng Bảo mật và quyền riêng tư Quản lý thông báo Định dạng ngày @@ -362,7 +321,6 @@ Di chuyển lên đầu Cũ nhất Mới nhất - Sắp xếp lại Huỷ bỏ tất cả Xem các chương Đảo ngược lựa chọn @@ -370,23 +328,14 @@ Mục chính Nguồn Thêm - Chỉ bao gồm những nguồn được ghim khi tìm kiếm toàn bộ Đồng bộ một chiều để cập nhật tiến trình chương trong các dịch vụ theo dõi. Thiết lập theo dõi cho các truyện riêng lẻ từ nút theo dõi. - 25% - 20% - 15% - 10% Kiểu đọc - Dọc + Dải dài có khoảng cách Hiển thị ngắn gọn chế độ hiện tại khi mở trang đọc truyện Hiển thị chế độ đọc Tiện ích mở rộng này không nằm trong danh sách tiện ích mở rộng chính thức của Tachiyomi. Không chính thức - - %d danh mục - Kiểm tra ảnh bìa và chi tiết khi cập nhật thư viện - Xác nhận thoát Chủ đề Bỏ ghim Ghim @@ -398,8 +347,7 @@ Tắt tất cả Bật tất cả Ngày thêm - Nhấn trở lại lần nữa để thoát - Backup không chứa manga nào. + Bản sao lưu không chứa truyện nào. Tệp sao lưu không hợp lệ Thêm vào thư viện Nguồn truyền từ tiện ích mở rộng này có thể chứa nội dung NSFW 18+ @@ -411,6 +359,7 @@ Cài đặt tìm kiếm Sao lưu đã đang trong quá trình thực hiện Bạn có chắc không\? Tất cả lịch sử sẽ bị xoá. + Truyện trong danh mục bị loại trừ sẽ không được cập nhật. Ngày kết thúc Chế độ làm sáng lên Chế độ làm tối đi @@ -431,39 +380,27 @@ Không tìm thấy ứng dụng chọn tệp Trang trước Trang tiếp theo + Cập nhật chương Đã cập nhật tuỳ chỉnh mặc định cho chương Lỗi Hoàn thành Quá trình - Tải xuống hoàn tất Phiên bản Android này không còn được hỗ trợ - - Chương %1$s và %2$d - Chương %1$s Chương %1$s và thêm %2$d Ch.%1$s-%2$s - - Đã bỏ qua %d chương, vì nguồn đang bị thiếu hoặc chúng đã bị lọc ra - Nguồn không tìm thấy Trang không tìm thấy Chế độ đọc Dành cho phần truyện này %1$s:%2$s,trang %3$d Thêm theo dõi - - %d bộ theo dõi - Không tìm thấy chương Đặt mặc định Bạn có chắc chắn muốn lưu lại tuỳ chỉnh này hay không\? Tuỳ chỉnh chương Bởi ngày đăng Sao chép vào bảng tạm thất bại - - %1$s chương - Hiện bớt Xem thêm Trong thư viện @@ -475,9 +412,6 @@ Hướng dẫn nguồn cục bộ Tìm kiếm \"%1$s\" toàn bộ Mục - - Còn lại %1$s - Lọc tất cả truyện trong thư viện Tắt chế độ ẩn danh Được cập nhật đến phiên bản v%1$s @@ -487,25 +421,21 @@ Trang chủ Không thể mở tuỳ chỉnh thiết bị Dữ liệu - DNS thay vì HTTPS (DoH) + DNS qua HTTPS (DoH) Mạng - Quá trình phục hồi bị huỷ bỏ + Quá trình khôi phục đã bị ngắt Khôi phục thất bại Đang trong quá trình phục hồi Lưu trữ thất bại - - Hoàn tất trong %1$s với %2$s lỗi - %02d phút, %02d giây Dữ liệu từ tệp sao lưu sẽ được khôi phục. \n \nBạn sẽ cần cài đặt bất kỳ tiện ích mở rộng nào bị thiếu và đăng nhập vào các dịch vụ theo dõi sau đó để sử dụng chúng. Bộ theo dõi chưa được đăng nhập vào : Nguồn không tìm thấy : - Manga trong các danh mục bị loại trừ sẽ không được tải xuống. + Truyện trong các danh mục bị loại trừ sẽ không được tải xuống. Tự động tải xuống Kích cỡ hai bên - Không Chế độ nằm ngang Chế độ dọc Kiểu xoay @@ -516,8 +446,6 @@ Phải và trái Tự động Xám - Tạo thư mục dựa theo tên truyện - Lưu lại trang trong thư mục riêng Hành động Cả hai Dọc @@ -527,7 +455,7 @@ Độ xám Giảm lỗi hiện sai dải màu, nhưng có thể ảnh hưởng đến hiệu suất Nếu vị trí của phần tách trang rộng không khớp với hướng đọc - Đảo vị trí tách trang kép + Đảo ngược vị trí tách trang Chia các trang đôi Hiển thị ngắn gọn các vùng chạm khi trình đọc được mở Hiển thị lớp phủ khu vực nhấn @@ -545,6 +473,7 @@ Ngày nhập chương Đã theo dõi Hủy bỏ tất cả cho phần truyền này + Truyện cục bộ Không tìm thấy chính sác Nguồn không còn được hỗ trợ Chưa đọc @@ -558,11 +487,7 @@ Không tìm thấy chương Bật Tắt - Cập nhật theo dõi khi cập nhật thư viện - Tự động làm mới theo dõi Hạn chế: %s - Trình theo dõi này chỉ tương thích với nguồn Komga. - Cập nhật thư viện… (%1$d/%2$d) Người dùng chưa có danh mục. Tính năng tối ưu hóa của MIUI phải được bật lên để việc sao lưu/khôi phục hoạt động tốt. Chủ đề: Táo Xanh @@ -575,18 +500,17 @@ Chủ đề: Âm & Dương Chủ đề: Yotsuba Chế độ đen tuyền - Tùy chỉnh mỗi danh mục cho sắp xếp và hiện thị + Tùy chỉnh mỗi danh mục cho sắp xếp Hướng dẫn theo dõi Dịch vụ nâng cao Dịch vụ cung cấp các tính năng nâng cao cho các nguồn cụ thể. Truyện sẽ tự động theo dõi khi được thêm vào thư viện của bạn. Một vài nhà sản xuất có các hạn chế về việc chạy ngầm của ứng dụng có thể gây dừng hiện thị dịch vụ nền. Xem thêm ở địa chỉ này để sửa chữa chúng. - Dấu thời gian liên quan - Dấu thời gian Chủ đề: Xanh lam & Xanh ngọc Giao diện Xác nhận thay đổi Mặc định Theo dõi + Các thể loại bị loại trừ Độ nhạy cho phần tự ẩn mục chính khi kéo cuộn Hướng dẫn sử dụng khởi đầu Giao diện máy tính bảng @@ -596,13 +520,7 @@ Cao Cao nhất Đảo màu - - %1$d ngày trước - Hôm nay - Gần đây - Dài (Ngắn+, nhiều ngày trước) - Ngắn (Hôm nay, Hôm qua) Hỗ trợ dịch thuật Thông tin ứng dụng Cài và chạy Shizuku để sử dụng Shizuku như một trình cài đặt tiện ích mở rộng. @@ -635,10 +553,8 @@ Chưa bắt đầu đọc %1$d cập nhật được bỏ qua Nhấn để tìm hiểu thêm - Phóng ảnh phong cảnh - 5% - Đã bắt đầu - Điều hướng tới quay chiều + Phóng ảnh phong cảnh tự động + Xoay ảnh rộng Lưới chỉ mỗi bìa Đảo ngược chân dung %1$d cập nhật thất bại @@ -651,9 +567,6 @@ Một phiên bản mới sẵn sàng từ mục phát hành chính thức. Nhấn để học cách kết hợp các mục phát hành không chính thức từ F-Droid. Lỗi khi lưu ảnh Đóng - Hiện các nguồn bản sao được đính - Khi pin không quá ít - Các nguồn được đính sẽ lặp lại trong các nhóm ngôn ngữ tương ướng của chúng Không có nguồn đã cài tìm thấy Không có nguồn nào được tìm thấy Mở trên GitHub @@ -696,24 +609,19 @@ Có một cập nhật đang chạy sẵn Sóng Thủy Triều Chuỗi đại diện người dùng không thể bỏ trống - - %d chương chưa đọc tiếp - Tự động tải khi đang đọc Quyền truy cập lưu trữ không được thông qua Nổi Tiếng Bạn chắc chứ\? - Bạn chuẩn bị gỡ bỏ bộ truyện này ra khỏi thư viện của bạn - Thư viện lần cuối được cập nhật: %1$s + Bạn sẽ xóa bỏ \"%s\" này ra khỏi thư viện của bạn + Thư viện lần cuối được cập nhật:%s Tải Trước Tải trước chỉ áp dụng cho các mục ở trong thư viện và nếu chương cuối cùng đã được tải rồi - Tách các ảnh cao (BETA) Đa Ngôn Ngữ Bỏ qua vì loạt truyện không cần cập nhật Tìm kiếm… - Ngôn ngữ ứng dụng, thông báo Chủ đề, kiểu hiển thị ngày & giờ - Danh mục, cập nhật toàn bộ + Danh mục, cập nhật toàn bộ, vuốt chương Dạng đọc, hiển thị, điều hướng Tự động tải xuống, tải xuống trước Sao lưu thủ công & tự động @@ -721,7 +629,34 @@ Tệp báo lỗi tạm, tối ưu hoá pin Đồng bộ tiến trình đọc, đồng bộ nâng cao Nguồn, tiện ích, tìm kiếm toàn bộ -Hàng chờ tải xuống + Mở một truyện ngẫu nhiên + Vị trí không hợp lệ: %s + Thống kê + Đã tải xuống + Nội bộ + Tổng số chương + Đã đọc + Không có gì trong danh mục này + Tổng quát + Truyện đã đọc + Truyện + Thời gian đọc + Đang tiến hành + Điểm trung bình + Ngay bây giờ + Tổng cập nhật + Đã theo dõi + Theo dõi + Tổng theo dõi + Khởi động lại ứng dụng + Chuỗi tác nhân người dùng không hợp lệ + Tiêu đề không xác định + Thao tác này sẽ xóa ngày bắt đầu đã chọn trước đó của bạn khỏi %s + Ôi trời! + Thao tác này sẽ xóa ngày kết thúc đã chọn trước đó của bạn khỏi %s + Hạng mục trống + Vô hiệu hóa chỉ mục tải xuống + Lúc khác Bản dựng F-Droid không được hỗ trợ chính thức. \nNhấn để tìm hiểu thêm. Bỏ qua chương đúp @@ -733,24 +668,41 @@ Đang kiểm tra những truyện đã tải xuống %s đã có lỗi. Bạn nên chia sẻ tệp báo lỗi tạm ở trong kênh hỗ trợ của chúng tôi trên Discord. Cập nhật danh mục - Truyện này đã có sẵn trong thư viện bạn. + Truyện này đã có sẵn trong thư viện bạn. \n \nBạn có muốn thêm lại không\? Đã sao chép vào bảng tạm - - %d Chương tiếp theo - Sao chép vào bảng tạm %d giây %d giờ Quay những trang rộng để vừa màn hình Lật hướng của các trang rộng đã xoay Phủ lên - - Đang thiếu %1$s - Loại bỏ ngày\? %1$s Lỗi: %2$s N/A *bắt buộc - \ No newline at end of file + %d mỗi hàng + Nhấn đúp để phóng to + Vuốt chương + Thao tác vuốt sang phải + Thao tác vuốt sang trái + Thông tin Debug + Không thể tạo tệp sao lưu + Đặt khoảng thời gian + OK + Đồng bộ thư viện + Hoàn tất đồng bộ hóa thư viện + Xóa các chương đã tải xuống + Khoảng thời gian cập nhật tùy chỉnh + Cập nhật hàng tháng (28 ngày) + Kiểm tra sau +10 + Bỏ cuộc\? Trì hoãn 20+ và 2 tháng + Thời hạn kiểm tra đã qua + Cập nhật dự kiến tiếp theo + Nhấn vào đây để được trợ giúp về Cloudflare + Chưa công bố + Mở khoá %s + Cài đặt nguồn + Cài đặt ứng dụng + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/zh-rCN/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/zh-rCN/plurals-aniyomi.xml new file mode 100644 index 0000000000..7f2ac66c62 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/zh-rCN/plurals-aniyomi.xml @@ -0,0 +1,12 @@ + + + + %1$s个剧集 + + + 有%1$d个新的剧集 + + + %d秒 + + \ 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 new file mode 100644 index 0000000000..3b2ec70053 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/zh-rCN/plurals.xml @@ -0,0 +1,51 @@ + + + + %1$s 分钟后 + + + %1$d 个新章节 + + + 第 %1$s 章及另外 %2$d 章 + + + 共 %d 部作品 + + + %d 个插件可更新 + + + 剩余 %1$s 本 + + + %d 个分类 + + + 耗时 %1$s,出现 %2$s 个错误 + + + 共 %1$s 章 + + + %d 个记录平台 + + + 跳过了 %d 章,可能是图源没有这些章节,或者被筛选规则排除了 + + + %1$d 天前 + + + 后续 %d 个未读章节 + + + 后续 %d 章 + + + 缺少 %1$s 章 + + + %d 天 + + \ No newline at end of file diff --git a/i18n/src/main/res/values-zh-rCN/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/zh-rCN/strings-aniyomi.xml similarity index 97% rename from i18n/src/main/res/values-zh-rCN/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/zh-rCN/strings-aniyomi.xml index 392a0fb9c8..8088457d3b 100644 --- a/i18n/src/main/res/values-zh-rCN/strings-aniyomi.xml +++ b/i18n/src/commonMain/resources/MR/zh-rCN/strings-aniyomi.xml @@ -127,9 +127,6 @@ 未找到剧集 剧集文件格式无效 未知工作室 - - %1$s个剧集 - 要删除已下载的剧集吗? 要将漫画添加到书架吗? 要将动画添加至内容库? @@ -167,9 +164,6 @@ 警告:批量下载可能导致图源变慢,甚至会使得它们屏蔽 Tachiyomi。点击了解详情。 未找到视频 发现新的剧集 - - 有%1$d个新的剧集 - 最近未观看 Tachiyomi 依赖于 WebView 已更新默认剧集设置 @@ -177,9 +171,6 @@ 剧集下载已暂停 章节更新 +%1$d秒 - - %d秒 - 未找到下一集! 漫画 动画 diff --git a/i18n/src/main/res/values-zh-rCN/strings.xml b/i18n/src/commonMain/resources/MR/zh-rCN/strings.xml similarity index 81% rename from i18n/src/main/res/values-zh-rCN/strings.xml rename to i18n/src/commonMain/resources/MR/zh-rCN/strings.xml index c43c0cea3f..bf4c0362e3 100644 --- a/i18n/src/main/res/values-zh-rCN/strings.xml +++ b/i18n/src/commonMain/resources/MR/zh-rCN/strings.xml @@ -1,10 +1,12 @@ 名称 - 漫画 + 分类 + 书架中的作品 章节 历史 设置 + 下载队列 书架 历史 更新 @@ -13,7 +15,6 @@ 插件信息 设置 筛选 - 已下载 已添加书签 未读 取消筛选 @@ -83,6 +84,7 @@ 设备自动更新限制 充电时 已完结 + 默认分类 始终询问 更新 安装 @@ -146,15 +148,14 @@ 倒数第四已读章节 倒数第五已读章节 自动下载新章节 - 服务 + 记录平台 创建备份 可用于还原当前书架数据 还原备份 从备份文件中还原 备份路径 - 自动备份 - 备份频率 - 最大备份数 + 自动备份频率 + 最大自动备份数 已创建备份 还原完毕 需要备份什么? @@ -165,8 +166,9 @@ 清除时出现错误 清除 Cookie Cookie 已清除 + 清理数据库 + 删除未添加到书架的作品记录 数据已删除 - 更新进度记录 版本 发送错误报告 协助我们修复错误,发送的错误报告不包含个人敏感信息 @@ -177,7 +179,6 @@ 已登录 未知错误 正在更新分类 - 本地 没有更多结果 本地图源 其他 @@ -196,6 +197,8 @@ 未安装图源:%1$s 第 %1$s 章 正在下载(%1$d/%2$d) + 错误 + 搁置中 图源标题 章节编号 按图源 @@ -214,11 +217,11 @@ 标题 状态 状态 - 连载开始 类型 已存在同名分类! 分类已删除 此章节的阅读日期将被清除,你确定吗? + 要添加到书架吗? 图片已保存 滤镜 设为封面 @@ -238,15 +241,14 @@ 选择需要迁移的数据 迁移 共存 - 无法下载该章节。请重试 + 无法下载该章节。您可以点下载按钮重试 发现新章节 封面更新失败 - 请先将漫画添加到书架 + 请先将作品添加到书架 选择封面图片 选择备份文件 下载 没有新版本 - 正在检查更新… 正在下载… 点击安装更新 下载失败 @@ -261,6 +263,7 @@ 下载时发生不可预期的错误 无可用 Wi-Fi 连接 无网络连接 + 下载已暂停 一般 长按显示操作菜单 在 WebView 中打开 @@ -288,7 +291,7 @@ 你已登出 已暂停 更多 - 最新章节 + 作品更新时间 查看章节 全部取消 深色模式 @@ -300,47 +303,31 @@ 切后台时锁定 始终开启 关闭 - - %1$s 分钟后 - 隐私界面 待更新 无法绕过 Cloudflare 请更新 WebView 应用以获得更好的兼容性 阻止截屏,并在切换后台时隐藏预览图 显示 + 章节更新 隐藏通知内容 应用锁 在刘海屏区域显示内容 - - %1$d 个新章节 - 第 %1$s 章 第 %1$s 章及另外 %2$d 章 第 %1$s 章 - - 第 %1$s 章及另外 %2$d 章 - 正在检查新章节 - 禁用电池优化 + 关闭电池优化 有助于后台更新书架和备份 - 电池优化已被禁用 + 电池优化已被关闭 电子邮件地址 始终显示章节间的过渡页面 - - %d 本漫画 - 菜单 - 重新排序 最新 最旧 - 移至顶部 - 移至底部 - - %d 个插件可更新 - + 移到顶部 + 移到底部 插件更新 - 在 WebView 中检查网站 图源 正在更新书架 阅读 @@ -348,11 +335,6 @@ 已置顶 取消置顶 置顶 - 25% - 20% - 15% - 10% - 侧边填充 条漫(页间有空隙) 反选 @@ -361,8 +343,6 @@ 展开 开源许可证 官网 - 再按一次退出 - 退出时确认 添加到书架 在书架中 仅限已下载内容 @@ -374,32 +354,22 @@ 第 %1$s 章 - %2$s 本地图源指南 上次浏览 - - 剩余 %1$s 本 - - 筛选书架里的全部漫画 + 筛选书架里的全部作品 检查更新 %02d 分,%02d 秒 - 全局搜索仅限置顶图源 灰色 本作品 阅读模式 - - %d 个分类 - - - 耗时 %1$s,出现 %2$s 个错误 - 无法打开设备设置 - 减少色带,但可能会影响性能 + 缓解色带问题,但可能会影响性能 刷新书架封面 - 将阅读进度上传到进度记录平台。在漫画页点击“进度记录”按钮即可设置。 - 此插件不是 Tachiyomi 官方插件 + 将阅读进度上传到进度记录平台。在作品页面点击“进度记录”按钮即可设置。 + 此插件并非源自官方目录 非官方 按上传日期 数据 缺少图源: - 备份不包含任何漫画。 + 备份不包含任何作品。 无效的备份文件 更新书架时一并检查封面和简介是否有变动 自动刷新元数据 @@ -407,17 +377,14 @@ 松散网格 标签 显示分类标签 - 没有找到页面 - 全部禁用 + 未找到图片 + 全部关闭 全部开启 开始阅读时,短暂显示当前阅读模式 阅读模式提示 开始阅读 未找到图源 - 禁用 - - 共 %1$s 章 - + 关闭 需要重启应用才能生效 网络 水平 + 垂直 @@ -431,23 +398,16 @@ 全局搜索“%1$s” 阅读模式 主题 - 添加日期 - - %d 个记录平台 - + 收藏日期 反转点按区域 没有置顶图源 完成 进度 - 下载完毕 错误 尚未登录进度记录平台: 来自此插件的图源可能包含 NSFW (18+) 内容 18+ 这并不能防止非官方或可能被错误标记的插件在应用中显示 NSFW (18+) 内容。 - - 跳过了 %d 章,可能是图源没有这些章节,或者被筛选规则排除了 - 未找到章节 已更新默认章节设置 设为默认 @@ -498,20 +458,21 @@ 排除:%s 包含:%s - 章节获取日期 - 应用不会下载位于排除分类的漫画,即使它们同样位于包含分类。 + 章节获取时间 + 应用不会更新位于排除分类的作品,即使它们同样位于包含分类。 + 应用不会下载位于排除分类的作品,即使它们同样位于包含分类。 自动下载 点击查看详情 应用不再支持此 Android 版本 无法复制到剪贴板 横屏 竖屏 - 根据漫画标题创建文件夹 + 根据作品标题创建文件夹 将图片保存到单独文件夹 操作菜单 屏幕方向 灰度 - 禁用无痕模式 + 关闭无痕模式 自动 取消此作品 未找到匹配项 @@ -521,22 +482,20 @@ 排序依据 无效的章节格式 未找到章节 - 更新书架时一并更新进度记录平台 - 自动更新进度记录 限制:%s + 本地图源 关闭 开启 分享封面时出错 保存封面时出错 封面已保存 封面 - 单独设置每个分类的排序和显示 + 单独设置各个分类的排序 进度记录指南 你还没有任何分类。 立即开始下载 - 正在更新书架…(%1$d/%2$d) 部分制造商会设置额外的应用限制来杀死后台服务。此网站提供了更多有关修复此问题的信息。 - 如果 MIUI 优化被禁用,备份/还原可能无法正常工作。 + 如果 MIUI 优化被关闭,备份/还原可能无法正常工作。 纯黑深色模式 四叶草 阴阳 @@ -545,9 +504,8 @@ 午夜幽暗 青苹果 应用主题 - 此平台只有 Komga 图源才能使用。 - 为特定图源提供增强功能。漫画在添加到书架时会自动同步进度。 - 增强服务 + 为特定图源提供增强功能。作品在添加到书架时会自动同步进度。 + 增强型记录平台 动态 后台活动 最低 @@ -555,23 +513,16 @@ 最高 滑动时隐藏菜单的灵敏度 - 反转 - 长期 (今天、昨天、几天前) + 反色 今天 - 短期 (今天、昨天) - 相对时间戳 - - %1$d 天前 - - 最近 青色与绿松色 验证以确认更改 默认 - 时间戳 外观 记录进度 入门指南 平板界面 + 排除的分类 协助翻译 应用信息 旧式安装程序 @@ -584,14 +535,14 @@ 详细日志记录 警告 语言 - 你应该将备份数据保存到多个地方。 + 你应该将备份数据保存到多个地方。备份可能存有包括所有已存储密码在内的敏感数据;请谨慎分享。 大量更新会损害图源,并可能导致更新变慢、耗电增加。点击了解详情。 仅连接至 Wi-Fi 时 每 3 天 全部更新 应用更新 无需清理 - 数据库中有 %1$d 本漫画未添加到书架 + 数据库中有 %1$d 部作品未添加到书架 无法获取插件列表 隐私声明 跳过更新以下作品 @@ -601,11 +552,9 @@ 已中止 休刊中 常见问题和指南 - 5% 封面网格 - 放大横向图片 + 自动放大横向图片 图片放大时先平移再翻页 - 已开始 尚未开始阅读 已跳过,因为作品已完结 已跳过,因为有未读章节 @@ -614,7 +563,7 @@ %1$d 个更新失败了 已跳过 %1$d 个更新 已跳过 - 反转竖屏 + 反向竖屏 将作品移到顶部 关闭 保存图片出错 @@ -623,13 +572,10 @@ 打开 GitHub 页面 已清除 WebView 数据 清除 WebView 数据 - 非低电量时 - 在各自的语言组中重复固定图源 - 显示重复的固定图源 关闭 未找到已安装的图源 未找到图源 - 未读数 + 未读章数 可以改善阅读器的性能 拆分时未找到页 %d 找不到页面 %d 的文件路径 @@ -641,11 +587,11 @@ 年龄分级 版本 语言 - 阅读列表 - 想读列表 - 读完列表 - 未读完列表 - 稍后读列表 + 阅读中 + 计划读 + 已完结 + 已放弃 + 搁置中 仅在不按流量计费网络中 打不开最后阅读章节 自定义封面 @@ -661,18 +607,14 @@ 全部删除 不支持 RARv5 格式 应用锁开启时,小部件不能使用 - 查看最近更新的漫画 + 查看最近更新的作品 有其他更新尚未完成 User Agent 字符串不能为空 浪潮 预先下载 阅读时自动下载 - - 后续 %d 个未读章节 - - 仅对书架中的作品有效,并且要求当前章节和下一章节都已下载 + 要求当前章节和下一章节都已下载。 你确定吗? - 分割长图 (测试版) 多语言 书架更新于:%s 即将从书架中删除“%s”。 @@ -680,16 +622,15 @@ 未授予存储权限 已跳过,因为作品无需更新 搜索… - 发生了意外错误 + 哦豁 %s 发生了意外错误。建议你将崩溃日志分享到 Discord #support 频道或者在 GitHub 上反馈。 重启应用 主题 • 日期格式 - 应用语言 • 通知 分类 • 全局更新 • 目录左右滑动 自动下载 • 预先下载 阅读进度上传 • 增强同步 导出崩溃日志 • 电池优化 - 手动备份 • 自动备份 + 手动备份 • 自动备份,存储空间 应用锁 • 隐私界面 图源 • 插件 • 全局搜索 阅读模式 • 显示 • 翻页 @@ -697,10 +638,38 @@ 无效位置:%s User Agent 字符串无效 刚才 - 正在建立下载索引 + 正在扫描已下载章节 随机打开作品 此分类没有作品 - 下载队列 + F-Droid 渠道不受官方支持。 +\n点按了解更多。 + 清除下载索引 + 要删除日期吗? + 将会删除之前在 %s 中标记的开始日期 + 将会删除之前在 %s 中标记的结束日期 + 统计 + 本地 + 已下载 + 总览 + 阅读时长 + 作品 + 读完的作品数 + 总数 + 在全局更新范围 + 进度记录 + 记录的作品数 + 已读 + 平均评分 + 阅读过 + 以后再说 + 平台数 + + %d 分 + %d 秒 + %d 天 + %d 时 + 分类为空 + 已复制到剪贴板 支持以下平台但图源尚未安装:%s 跳过重复章节 书架中已有同名作品。 @@ -708,18 +677,12 @@ \n要继续添加吗? %1$s 发生错误:%2$s *必填 - - 后续 %d 章 - 隐藏已添加到书架的作品 复制到剪贴板 更新分类 分割长图 标记和按钮 旋转横向图片 - - 缺少 %1$s 章 - 旋转横向图片时反转方向 调试信息 目录左右滑动 @@ -727,4 +690,56 @@ 向左滑动操作 双击放大 每行 %d 个 - \ No newline at end of file + 未到预计更新时间 + 确定 + 要删除 %s 的记录吗? + 同时删除 %s 上的数据 + 将会在本地删除进度记录的关联。 + 删除已下载章节 + 自定义更新间隔 + 设定间隔 + 放弃?延迟 20+ 和 2个月 + 通过检查期 + 下次预期更新 + 每月更新(28天) + 延迟10+检查 + 间隔 + 估计每个 + 设定更新为每 + 自定义间隔 + 跳过,因为预计今天没有新发布 + 有结果 + 正在同步书架 + 书架同步完成 + 点击这里查看 Cloudflare 帮助 + 已清除下载索引 + 登录进度记录平台 + 无法创建备份文件 + 已有正版,没有章节可供显示 + 未连接网络 + HTTP %d,请在 WebView 中检查网站 + 无法连接到 %s + 图源设置 + 应用设置 + 解锁 %s + 分类排序 + 将作品移到底部 + 书架更新中…(%s) + 是否按字母顺序对分类进行排序? + 没有文件被选中 + 相对时间戳 + 以\"%1$s\" 表示 \"%2$s\" + 从不 + 减少电子墨水屏上的重影 + 上次自动备份:%s + 切页时闪烁白屏 + 数据与存储 + 存储占用 + 创建 + 应用 + 恢复默认 + 未找到扫译者 + 扫译者 + 记录平台评分 + 排除的扫译者 + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/zh-rTW/plurals-aniyomi.xml b/i18n/src/commonMain/resources/MR/zh-rTW/plurals-aniyomi.xml new file mode 100644 index 0000000000..e86b2f3374 --- /dev/null +++ b/i18n/src/commonMain/resources/MR/zh-rTW/plurals-aniyomi.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/i18n/src/commonMain/resources/MR/zh-rTW/plurals.xml b/i18n/src/commonMain/resources/MR/zh-rTW/plurals.xml new file mode 100644 index 0000000000..24dd4b894d --- /dev/null +++ b/i18n/src/commonMain/resources/MR/zh-rTW/plurals.xml @@ -0,0 +1,51 @@ + + + + %1$s 分鐘後 + + + %d 個擴充套件可更新 + + + 剩餘 %1$s 本 + + + 共 %1$s 章 + + + %d 個類別 + + + 歷時 %1$s,出現 %2$s 個錯誤 + + + %1$d 篇新章節 + + + 第 %1$s 章以及另外 %2$d 章 + + + %d 個歷程平台 + + + 略過了 %d 章,也許是來源沒有這些章節,或其已被篩選規則排除 + + + 共 %d 部作品 + + + %1$d 天前 + + + 接下來未讀的 %d 章 + + + 後續 %d 章 + + + 缺漏 %1$s 章 + + + %d 天 + + \ No newline at end of file diff --git a/i18n/src/main/res/values-zh-rTW/strings-aniyomi.xml b/i18n/src/commonMain/resources/MR/zh-rTW/strings-aniyomi.xml similarity index 100% rename from i18n/src/main/res/values-zh-rTW/strings-aniyomi.xml rename to i18n/src/commonMain/resources/MR/zh-rTW/strings-aniyomi.xml diff --git a/i18n/src/main/res/values-zh-rTW/strings.xml b/i18n/src/commonMain/resources/MR/zh-rTW/strings.xml similarity index 81% rename from i18n/src/main/res/values-zh-rTW/strings.xml rename to i18n/src/commonMain/resources/MR/zh-rTW/strings.xml index 32d42e0192..817a3b3695 100644 --- a/i18n/src/main/res/values-zh-rTW/strings.xml +++ b/i18n/src/commonMain/resources/MR/zh-rTW/strings.xml @@ -1,9 +1,11 @@ - 漫畫 + 類別 + 藏書 章節 記錄 設定 + 下載佇列 書櫃 記錄 新刊 @@ -14,7 +16,6 @@ 說明 設定 篩選 - 已下載 已新增書籤 未讀 清除篩選器 @@ -73,13 +74,14 @@ 關閉 每 6 小時 每 12 小時 - 每日 - 每 2 日 + 每天 + 每 2 天 每週 全部 自動更新的裝置限制 充電時 - 已完結的作品 + 連載已完結 + 預設類別 總是詢問 更新 安裝 @@ -110,18 +112,18 @@ 自訂位置 已停用 自動下載新章節 - 服務 + 歷程平台 建立備份 還原備份 備份位置 - 自動備份 - 備份頻率 + 自動備份頻率 已建立備份 還原成功 哪些項目需要備份? 正在還原 正在建立備份 - 清除 Cookies + 清除 Cookie + 清除資料庫 版本 傳送錯誤報告 密碼 @@ -129,9 +131,11 @@ 已登入 已收藏至書櫃 已從書櫃中移除 - 已複製至剪貼簿: + 已複製到剪貼簿: \n「%1$s」 來源未安裝:%1$s + 錯誤 + 已暫停 下載 已刪除類別 圖片已儲存 @@ -140,7 +144,6 @@ 副本 下載 沒有可用的更新 - 正在檢查更新… 正在下載更新… 輕觸即可更新 更新下載失敗 @@ -149,6 +152,7 @@ 錯誤 沒有可用的 Wi-Fi 連線 尚未連接至網路 + 下載已暫停 格線大小 翻頁轉場動畫 邊緣裁剪 @@ -161,7 +165,7 @@ 導覽 音量按鈕 反轉音量按鈕 - 長按顯示 + 長按時彈出快顯選單 背景顏色 白色 黑色 @@ -183,23 +187,24 @@ 左邊 右邊 中間 - 由備份檔案還原書櫃內容 + 由備份檔還原書櫃內容 已使用:%1$s 已清除快取,%1$d 個檔案已被刪除 清除時發生錯誤 - 已清除 Cookies + 已清除 Cookie 協助我們修復錯誤,傳送的資料將不包含個人敏感訊息 登入 %1$s 使用者名稱 正在更新類別 全域搜尋… + 將作品收藏至書櫃? 選擇封面圖片 無近期閱讀 一般 可用來保存目前書櫃內容 + 將未收藏於書櫃的作品記錄刪除 已刪除項目 不明的錯誤 - 本機 沒有更多結果 本機來源 其他 @@ -222,7 +227,7 @@ 狀態 圖片無法載入 請先將作品收藏至書櫃 - 選擇備份檔案 + 選擇備份檔 尚無任何類別,輕觸新增按鈕即可建立類別以組織你的書櫃。 下載管理員 未讀 @@ -252,14 +257,12 @@ 不信任 不信任的擴充套件 最後閱畢的章節 - 最大備份保留數 - 更新閱讀歷程 + 最大自動備份數量 新上架 歷程 閱讀中 準備讀 重溫中 - 創刊 類型 此章節的閱讀日期將被清除,你確定嗎? 目前章節: @@ -286,8 +289,6 @@ 深色模式 開啟 日期格式 - 確認離開應用程式 - 再按一次以離開 將套用至你書櫃中的作品 僅限下載內容 開放原始碼授權 @@ -295,28 +296,22 @@ 檢查更新 其他 更多 - - %1$s 分鐘後 - 永不 立即 閒置時鎖定 上鎖應用程式 - 在切換應用程式時隱藏預覽,並禁止擷取螢幕畫面 + 在切換應用程式時隱藏預覽,並禁止擷取螢幕畫面。 防窺畫面 隱私 隱藏通知內容 管理通知設定 擴充套件更新 - - %d 個擴充套件可更新 - 類別索引 頁籤 灰色 檢視 鬆散格狀 - 適用於這套叢書 + 套用於這部作品 翻閱 全域更新 已停用電池效能最佳化 @@ -336,11 +331,6 @@ 重新整理書櫃中的封面 等待更新中 有助於背景更新書櫃與自動備份 - 25% - 20% - 15% - 10% - 已釘選 取消釘選 釘選 @@ -357,10 +347,10 @@ 減緩色調分離,但可能拖累效能 開始閱讀時,快顯闡明目前的模式 閱讀模式提示 - 僅在釘選的來源中搜尋 來源 頁緣留白 新增閱讀歷程 + 新刊發行 在書櫃中 閱讀模式 停用 @@ -371,7 +361,6 @@ 排至最後 排至最前 全部取消 - 重新排序 上傳日期 最新章節 無效的備份檔 @@ -382,16 +371,7 @@ 還原失敗 備份失敗 登出 %1$s? - - 剩餘 %1$s 本 - - - 共 %1$s 章 - - 將章節進度單向同步至閱讀歷程平台,請逕行前往個別作品的「歷程」專區以設置。 - - %d 個類別 - + 將閱讀進度單向同步至外部歷程平台。請逕行前往個別作品的「歷程」專區以設置。 需要重新啟動應用程式以套用 網路 全部 @@ -401,30 +381,18 @@ 正在檢查是否有新章節 捲動式 (頁間留空) - - 歷時 %1$s,出現 %2$s 個錯誤 - %02d 分 %02d 秒 - 這個擴充套件不是由 Tachiyomi 所提供。 + 此擴充功能不在官方清單中。 非官方 第 %1$s 章 - %2$s - - %1$d 篇新章節 - 第 %1$s 章 第 %1$s 章 第 %1$s 章以及另外 %2$d 章 - - 第 %1$s 章以及另外 %2$d 章 - 更新日誌 連載狀態不明 佚名 在所有範圍內搜尋「%1$s」 已更新至 v%1$s - - %d 個歷程平台 - 閱讀模式 主題 收藏日期 @@ -436,15 +404,11 @@ 進度 錯誤 作業完成 - 下載完成 18+ 即使啟用監護限制,還是可能有漏網之魚。使用者仍可藉由非官方或未正確標幟的擴充套件在本應用程式中瀏覽未滿十八歲之人不宜觀賞的內容。 來自此擴充套件的來源可能包含未滿十八歲之人不宜觀賞的內容 備份檔並未包含任何書櫃中的作品。 已更新章節設定預設值 - - 略過了 %d 章,也許是來源沒有這些章節,或其已被篩選規則排除 - 搜尋設定 章節設定 確定要將目前的選項保存為預設值嗎? @@ -454,7 +418,6 @@ 你確定嗎?所有的閱讀記錄將會遺失。 清除閱讀記錄 無痕模式 - 在 WebView 中檢查網站 找不到檔案選擇器 《%1$s》:%2$s,第 %3$d 頁 來源遷移說明 @@ -462,16 +425,13 @@ 上一頁 請重新登入 MAL 未滿十八歲之人不宜瀏覽的來源 - - 共 %d 部作品 - 在來源和擴充套件清單中顯示 閱讀完畢日期 開始閱讀日期 邊緣式 Kindle 式 L 式 - 已紀錄歷程 + 已登錄歷程 產生錯誤記錄檔以便分享予開發人員 分享當機記錄 輕觸區域 @@ -495,7 +455,7 @@ 章節獲取日期 右邊 橫向 - 操作 + 快顯選單 排除:%s 包含:%s @@ -506,11 +466,10 @@ \n \n隨後請安裝所有遺失的擴充套件並重新登入各歷程平台。 類別同時屬於「排除」及「包含」的作品,將不會自動下載。 - 儲存頁面至個別資料夾 - 根據作品標題建立資料夾 開始閱讀時,短暫浮現輕觸區域 輕觸區域提示 - 取消此叢書 + 類別同時屬於「排除」及「包含」的作品,將不會自動更新。 + 取消此作品 自動 灰階 停用無痕模式 @@ -521,26 +480,23 @@ 未找到章節 關閉 開啟 - 更新書櫃時一併更新歷程平台 - 自動重新整理歷程平台 限制:%s 排序 無效的章節格式 + 本機來源 你目前沒有任何類別。 分享封面時發生錯誤 儲存封面時發生錯誤 已儲存封面 封面 立刻開始下載 - 正在更新書櫃… (%1$d/%2$d) - 該歷程平台僅相容於 Komga 來源。 部分裝置製造商設有額外的應用程式限制來終止背景服務。此網站提供了修復這項問題的詳細資訊。 背景活動 若停用 MIUI 最佳化,備份與還原可能無法正確執行。 - 為特定來源提供增強功能的服務。當作品被加入書櫃時,將自動登錄閱讀歷程。 - 增強服務 + 為特定來源提供增強功能。當作品被加入書櫃時,將自動登錄閱讀歷程。 + 增強式歷程平台 歷程平台說明 - 獨立各類別的排序和檢視設定 + 獨立各類別的排序方式 純黑深色模式 四葉 陰陽 @@ -558,21 +514,14 @@ 反轉 綠松色 驗證以確認變更 - 剛剛 - 較短 (今天、昨天) - 較長 (今天、昨天、第幾天前) - 相對時間戳記 - 時間戳記 外觀 今天 - - %1$d 天前 - 預設 平板電腦介面 入門指南 新增 協助翻譯 + 排除的類別 程式資訊 若要使用 Shizuku 來安裝擴充套件,請先安裝 Shizuku 並開啟之。 傳統 @@ -584,13 +533,13 @@ 警告 大量更新會損害來源,並可能導致更新速度緩慢、電池用量增加。輕觸以瞭解詳情。 錄製詳細記錄 - 你應該在多處保存備份副本。 + 你應該在多處保存備份副本。備份檔可能含有敏感資料 (包括任何已儲存的密碼),分享時請留意。 傾印詳細記錄至系統日誌 (將降低應用程式效能) 僅透過 Wi-Fi - 每 3 日 + 每 3 天 全部更新 應用程式更新 - 資料庫中有 %1$d 部作品不屬於藏書 + 資料庫中有 %1$d 個非收藏項目 無須清理 擴充套件清單取得失敗 隱私權政策 @@ -601,21 +550,19 @@ 已取消 出版完畢 常見問題與指南 - 5% - 縮放橫向圖片 + 自動縮放寬頁 導覽寬頁時先平移後翻頁 純封面格狀 - 已開始閱讀 - 無已讀的章節 - 由於叢書連載已完結,因此略過 - 由於尚有未讀的章節,因此略過 - 由於尚無已讀的章節,因此略過 + 無已讀章節 + 由於連載已完結,因此略過 + 由於有未讀章節,因此略過 + 由於無已讀章節,因此略過 顛倒直向 瞭解詳情 %1$d 項更新失敗 已略過 %1$d 項更新 略過 - 置頂此叢書 + 置頂此作品 停用 書櫃中尚無項目可供備份 在 GitHub 上檢視 @@ -624,9 +571,6 @@ 清除 WebView 資料 已清除 WebView 資料 關閉 - 電量充足時 - 重複顯示釘選來源 - 將來源同時釘選於「已釘選」及其所屬的語言分組 找不到來源 找不到已安裝的來源 未讀章數 @@ -634,7 +578,7 @@ 用以改善閱讀器效能 找不到第 %d 頁的檔案路徑 重設個別閱讀器設定 - 將所有叢書的閱讀模式和螢幕方向恢復為預設值 + 將所有作品的閱讀模式和螢幕方向還原為預設值 已重設所有閱讀器設定 無法重設閱讀器設定 呃…尷尬了 @@ -663,33 +607,28 @@ 當需要解鎖才能存取應用程式時,無法使用小工具 查看書櫃中近期更新的作品 已在進行更新 - 使用者代理字串不能為空 + 使用者代理字串不得為空 潮浪 預先下載 閱讀時自動下載 - - 接下來未讀的 %d 章 - - 僅適用於書櫃中的作品,並且目前章節及下一章節皆已下載 + 僅於目前章節及下一章節皆已下載時生效。 你確定嗎? - 分割過高的圖片 (BETA) 多語 即將從書櫃中移除《%s》 書櫃更新於:%s 熱門 未被授予儲存空間權限 - 由於叢書無須更新,因此略過 + 由於作品無須更新,因此略過 搜尋… 閱讀模式、檢視、導覽 - 應用程式語言、通知 主題、日期格式 自動下載、預先下載 單向進度同步、增強式同步 - 手動備份、自動備份 + 手動與自動備份,儲存空間 上鎖應用程式、防窺畫面 傾印當機記錄、電池效能最佳化 重新啟動應用程式 - 發生意外錯誤 + 哎呀! 「%s」發生了未預期的錯誤。我們建議你將當機記錄分享至我們位於 Discord 上的 support 頻道。 類別、全域更新、目錄滑動動作 來源、擴充套件、全域搜尋 @@ -697,12 +636,38 @@ 未知的標題 無效的使用者代理字串 剛剛 - 正在建立下載索引 + 正在檢查下載 隨機開卷 類別沒有作品 F-Droid 的組建未被正式支援。 \n輕觸以瞭解詳情。 -下載佇列 + 移除日期? + 從「%s」移除你先前輸入的閱讀完畢日期 + 從「%s」移除你先前輸入的開始閱讀日期 + 清除下載索引 + 已下載 + 閱畢作品 + 作品 + 總數 + 已讀 + 平均評分 + 平台 + %d 天 + 統計資料 + 本機 + 總覽 + 已開卷 + 適用全域更新 + 閱讀歷時 + 歷程平台 + 不適用 + 登錄作品 + %d 小時 + %d 分鐘 + %d 秒鐘 + 暫時不要 + 類別尚無作品 + 已複製到剪貼簿 略過重複的章節 可供使用但來源尚未安裝:%s 書櫃中已有同名作品。 @@ -712,15 +677,9 @@ *必填 隱藏已在書櫃的作品 複製到剪貼簿 - - 後續 %d 章 - 更新類別 分割過高的圖片 封面附加元素 - - 缺漏 %1$s 章 - 旋轉寬頁以符合螢幕 調換旋轉寬頁方向 偵錯資訊 @@ -729,4 +688,56 @@ 向右滑動 目錄滑動動作 每列 %d 欄 - \ No newline at end of file + 確定 + 刪除舊有下載章節 + 移除「%s」歷程平台? + 這將在本機上解除登錄該歷程平台。 + 同時移除「%s」上的資料 + 自訂更新間隔 + 每月更新(28 天) + 延遲 10+ 檢查 + 設定間隔 + 放棄?延遲 20+ 和 2 個月 + 已過檢查期 + 下次預期更新 + 刊期 + 預計每個 + 未臨出刊日 + 設定為每個 + 自訂刊期 + 由於未臨出刊日,因此略過 + 有結果 + 正在同步書櫃 + 書櫃同步完成 + 已清除下載索引 + 查看 Cloudflare 相關說明 + 登入歷程平台 + 無法建立備份檔 + 已有正版,沒有章節可供顯示 + HTTP %d,請在 WebView 中檢查網站 + 沒有網際網路連線 + 無法連上 %s + 解鎖 %s + 置底此作品 + 相對時間戳記 + 以「%1$s」表示「%2$s」 + 應用程式設定 + 排序類別 + 正在更新書櫃… (%s) + 欲依照字母順序排列類別嗎? + 來源設定 + 未選擇檔案 + 永不 + 減少電子墨水螢幕上的殘影 + 最後一次自動備份:%s + 頁面轉換時閃白 + 資料與儲存空間 + 儲存空間使用情形 + 歷程平台評分 + 套用 + 還原為預設值 + 沒有掃譯者 + 掃譯者 + 排除掃譯者 + 建立 + \ No newline at end of file diff --git a/i18n/src/main/res/values-b+es+419/strings-aniyomi.xml b/i18n/src/main/res/values-b+es+419/strings-aniyomi.xml deleted file mode 100644 index 4cc38ffe0f..0000000000 --- a/i18n/src/main/res/values-b+es+419/strings-aniyomi.xml +++ /dev/null @@ -1,138 +0,0 @@ - - - Categorías - Desbloquear Aniyomi - Última actualización de manga - Mostrar manga - Mangas locales - Con capitulo(s) sin leer - Mostrar número de no leidos en el icono de actualización - Categoría por defecto - Los manga en las categorías excluidas no se actualizarán aún cuando estén en las categorías incluidas. - Esta extensión fue firmada por una fuente no certificada y no fue activada. -\n -\nUna extensión maliciosa puede leer cualquier credencial de inicio guardada en Tachiyomi o ejecutar código arbitrario. -\n -\nAl confiar en este certificado aceptas estos riesgos. - Eliminar capítulos - Después de marcar como leído manualmente - Borrar automáticamente después de leer - Permitir el borrado de capítulos en favoritos - Categorías excluidas - Actualizar el progreso después de leer - Borrar caché de los capítulos - Borrar la caché de capítulos al cerrar la aplicación - Borrar base de datos - Borrar el historial de mangas que no están guardados en la biblioteca - ¿Estas seguro\? Los capítulos leídos y el progreso de los mangas que no estén en la biblioteca se perderán - Actualizar estado, puntuación y último capítulo leído en los servicios de seguimiento - Pausar historial de lectura - Manga de la biblioteca - ¿Añadir manga a la biblioteca\? - Error - Pausado - Aplicar también a todos los mangas en mi biblioteca - Reiniciar todos los capítulos de este manga - No se pudieron descargar los capítulos debido al poco espacio de almacenamiento - Advertencia: las descargas en masa pueden causar lentitud en las fuentes y/o bloquear Tachiyomi. Toca para conocer más. - Se requiere WebView para Tachiyomi - Descarga pausada - Actualizaciones de capítulos - Categorías - Episodios - Advertencia: La configuración de respaldo también almacenará sus contraseñas, no comparta esta copia de seguridad! - Manga - Categorías de anime - Capitulos y episodios - Anime - Tiempo visto - Entradas de la librería - Manga - Anime - Fuentes de manga - Fuentes de anime - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Buscar solo fuentes de manga fijado en la búsqueda global - Utilizar el descargador interno - Mover Manga a la pestaña \"Mas\" - Marcar como no visto - Ultima actualización de anime - Descargar capitulos sin leer - Ocultar entradas de anime que ya se encuentren en la librería - Episodios Descargados - Control de progreso, reproductor interno, reproductor externo - No visto - Reproducir internamente - Por número de episodio - Utilizar un descargador externo - Manga ordenado por filas - Anime ordenado por filas - Visto - Busqueda Global de Manga - Busqueda Global de Anime - Buscar solo fuentes de anime fijado en la búsqueda global - Ocultar entradas del manga que ya se encuentren en la librería - Ultima revisión - Modo imagen sobre imagen (PiP) - Episodio anterior - Descargar episodios sin ver - Mostrar anime - Reproducir - Mover pestaña \"Actualizaciones\" a la pestaña \"Mas\" - Mover historial a la pestaña de mas - Agregar el episodio a marcadores - Marcar anterior como visto - Desmarcar episodio - Ultima vez - Fecha de búsqueda del episodio - Anime Local - Episodios totales - Episodio reciente - Marcar como visto - Reproducir de forma externa - Editar categorías de Anime - Editar categorías de Manga - Ver episodios - Siguente episodio - Modo de ajuste de pantalla - Botón de continuar viendo/leyendo - Estilo de navegación abajo - Cuento no visto - Reproductor - Ocultar - Actualizaciones de Anime - \ No newline at end of file diff --git a/i18n/src/main/res/values-b+es+419/strings.xml b/i18n/src/main/res/values-b+es+419/strings.xml deleted file mode 100644 index 2fa9e759aa..0000000000 --- a/i18n/src/main/res/values-b+es+419/strings.xml +++ /dev/null @@ -1,703 +0,0 @@ - - - Cancelar - Invertir selección - Capítulo más reciente - Total de capítulos - Información de extensión - Pulse Atrás de nuevo para salir - Respaldar y restaurar - Historial - Historial - Lista - Migrar - Abrir en WebView - Abrir en el navegador - Reanudar - Remover - Próximo capítulo - Capítulo anterior - Pausar - Renombrar categoría - Editar categorías - Agregar categoría - Agregar - Editar - Actualizar Biblioteca - Borrar - Descargar - Marcar anteriores como leído - Marcar como no leído - Marcar como leído - Seleccionar todo - Búsqueda global - Buscar - Ultimo leído - Alfabéticamente - Remover filtro - Descargado - Filtrar - Menú - Configuración - Capítulos - Manga - No hay categorías. Presione el botón de más para crear una y organizar tu biblioteca. - Tu biblioteca está vacía - Ninguna lectura reciente - No hay actualizaciones - No hay descargas - Ayuda - Extensiones - Migrar - Actualizaciones - Biblioteca - Configuración - Nombre - Fuentes - Quitar capítulo de favoritos - Agregar capítulo a favoritos - No leído - Favoritos - Más - Siguiendo - Deshacer - Reiniciar - Guardar - Compartir - Instalar - Mover al fondo - Mover hacia arriba - Antigüo - Reordenar - Cancelar todo - Desactivar - Mostrar pestaña de categorías - Mostrar - Modo de visualización - Actualice la aplicación WebView para mejor compatibilidad - ¡Nueva versión disponible! - Asignar categorías - Ver capítulos - Editar portada - Desactivar todo - Activar todo - Restaurar copia de seguridad - Se puede utilizar para restaurar la biblioteca actual - Crear copia de seguridad - Solamente incluir fuentes fijados - Sincronización unidireccional para actualizar el progreso del capítulo en los servicios de seguimiento. Configure el seguimiento de las entradas de manga individuales desde su botón de seguimiento. - Servicios - Descargar capítulos nuevos - Quinto al último capítulo - Cuarto al último capítulo - Tercer al último capítulo leído - Penúltimo capítulo leido - Último capítulo leído - Deshabilitado - Directorio personalizado - Ubicación de descargas - 25% - 20% - 15% - 10% - Sin margen - Relleno lateral - Leyendo - Mostrar siempre la transición del capítulo - A - B - G - R - Forzar horizontal - Forzar vertical - Libre - Tipo de rotación predeterminado - Rápido - Normal - Sin animación - Centro - Derecha - Izquierda - Automático - Posición de zoom inicial - Ajuste inteligente - Tamaño original - Ajustar altura - Ajustar ancho - Estirado - Ajustar pantalla - Tipo de escalado - Paginado - Vertical continuo - Webtoon - Vertical - Derecha a izquierda - Izquierda a derecha - Modo de lectura por defecto - Negro - Gris - Blanco - Color de fondo - Mostrar toque largo - Invertir teclas de volumen - Teclas de volumen - Navegación - Saltar capítulos filtrados - Saltar capítulos marcados como leídos - Mantener la pantalla encendida - Quemar / Oscurecer - Subexponer / Aclarar - Pantalla - Multiplicar - Superponer - Modo de mezcla del filtro de color - Filtro de color personalizado - Brillo personalizado - Cortar bordes - Reduce las bandas, pero podría afectar el rendimiento - Color 32 bits - Mostrar brevemente el modo actual cuándo el lector está abierto - Mostrar modo de lectura - Mostrar el número de página - Velocidad de animación de doble toque - Animar las transiciones de página - Mostrar contenido en el área recortada - Pantalla completa - Esta extensión no es de la lista oficial de extensiones de Tachiyomi. - Esta extensión ya no está disponible. - Extensión no confiable - Desinstalar - No confiable - No oficial - Confiar - Instalada - Instalando - Descargando - Pendiente - Instalar - Obsoleta - Actualizar - Actualizaciones pendientes - Todos - - %d categoría - %d categorías - %d categorías - - Preguntar siempre - Comprobar nueva portada y los detalles cuando actualizes la biblioteca - Actualizar metadatos automáticamente - Que ya están completadas - Cuando carga - Restricciones de actualización automática - Semanal - Cada 2 días - Diario - Cada 12 horas - Cada 6 horas - Desactivado - Actualizaciones automáticas - Actualizaciones - Horizontal - Ambos - Vertical - Horizontal - Ninguno - Invertir zonas de toque - Actualizaciones de extensión - Común - No hay ninguna conexión de red disponible - No hay ninguna conexión Wi-Fi disponible - No se pudo descargar el capítulo debido a un error inesperado - Error - Descargador - Fallo al evitar Cloudflare - - Actualización de extensión disponible - %d actualizaciones de extensiones disponibles - %d actualizaciones de extensiones disponibles - - Error al descargar - Toca para instalar - Descargando… - Buscando actualizaciones… - Vertical - Elementos por fila - Monitor - Ocultar contenido de la notificación - Ocultar contenido de la aplicación al cambiar entre aplicaciones y bloquear las capturas de pantalla - Pantalla segura - - Después de %1$s minuto - Después de %1$s minutos - Después de %1$s minutos - - Nunca - Siempre - Bloquear cuando está inactivo - Desbloqueo requerido - Seguridad y privacidad - Gestionar notificaciones - Confirmar salir - Formato de fecha - Encendido - Apagado - Usar el del sistema - Modo oscuro - Acerca de - Avanzado - Seguimiento - Descargas - Lector - Biblioteca - General - Aplicación no disponible - Cargando… - Actualizar - Adelante - Atrás - Restaurar - Abrir registro - Más nuevo - Ordenar - No fijar - Fijar - Capítulos descargados - Cuadrícula cómoda - Cuadrícula compacta - Iniciar - Reintentar - Borrar cookies - Red - Se canceló la restauración - La restauración de la copia de seguridad falló - Restaurando copia de seguridad - La restauración ya está en curso - La copia de seguridad falló - Creando copia de seguridad - ¿De qué quieres hacer copia de seguridad\? - La copia de seguridad ya está en curso - - Hecho en %1$s con %2$s error - Hecho en %1$s con %2$s errores - Hecho en %1$s con %2$s errores - - %02d min, %02d seg - Restauración completada - Fuentes que faltan: - La copia de seguridad no contiene ningún manga. - Archivo de copia de seguridad invalido - Copia de seguridad creada - Máximo de copias de seguridad - Frecuencia de respaldo - Copias de seguridad automáticas - Directorio de copia de seguridad - Restaurar biblioteca desde archivo de copia de seguridad - Caché borrada. %1$d archivos se han eliminado - Usado: %1$s - Datos - Cookies borradas - Requiere reiniciar la aplicación para que surta efecto - La optimización de la batería ya está desactivada - Ayuda con las actualizaciones y las copias de seguridad de biblioteca en segundo plano - Desactivar optimización de batería - Refrescar seguimiento - Actualizar portadas de la biblioteca - Entradas eliminadas - Se ha producido un error mientras se limpiaba - No se pudo abrir la configuración del dispositivo - Fijadas - Última usada - Otro - Fuente local - Abrir sitio en WebView - No se han encontrado resultados - No hay más resultados - Pestañas - Local - Actualizando categoría - Error desconocido - Has cerrado sesión - Cerrar sesión - ¿Cerrar sesión de %1$s\? - Conectado - Iniciar sesión - Contraseña - Correo electrónico - Nombre de usuario - Iniciar sesión en %1$s - - Queda %1$s - Quedan %1$s - Quedan %1$s - - Filtrar todo el manga en tu libreria - Solo descargado - Ayuda a corregir cualquier error. No se enviarán datos sensibles - Enviar informes de errores - Actualizado a v%1$s - Buscar actualizaciones - Licencias de código abierto - Qué hay de nuevo - Versión - Sitio web - Guía de fuente local - Explorar - Recientes - Búsqueda global… - Por número de capítulo - Leer después - Pausado - En espera - Abandonado - Completado - Leyendo - Añadir seguimiento - Seguimiento - ¿Estás seguro de que deseas eliminar los capítulos seleccionados\? - No leídos - Descargar - Por fecha de subida - Por fuente - Número de capítulo - Título de la fuente - Descargando (%1$d/%2$d) - Capítulo %1$s - Fuente no instalada: %1$s - Copiado en el portapapeles: -\n\"%1$s\" - ¿Eliminar capítulos descargados\? - - %1$s capítulo - %1$s capítulos - %1$s capítulos - - Menos - Más - Eliminado de la biblioteca - Añadido a la biblioteca - Eliminar de la biblioteca - En biblioteca - Añadir a biblioteca - Con licencia - Estado desconocido - Autor desconocido - Desconocido - En curso - No hay nuevas actualizaciones disponibles - Descargar - Seleccione el archivo de copia de seguridad - Seleccione la imagen de portada - Por favor agregue el manga a la biblioteca antes de hacer esto - Error al actualizar la portada - - Capítulos %1$s y 1 más - Capítulos %1$s y %2$d más - Capítulos %1$s y %2$d más - - Capítulos %1$s - Capítulo %1$s y %2$d más - Capítulo %1$s - - %1$d nuevo capítulo - %1$d nuevos capítulos - %1$d nuevos capítulos - - - Para %d título - Para %d títulos - - Nuevos capítulos encontrados - Buscando nuevos capítulos - No se pudieron descargar capítulos. Puedes volver a intentarlo en la sección de descargas - Copiar - Migrar - Selecciona una fuente para migrar - Seleccionar datos para incluir - Caps. %1$s-%2$s - Actualizando biblioteca - Fuente no encontrada - No hay páginas - Error al cargar páginas: %1$s - Cargando páginas… - No hay capítulo anterior - No hay capítulo siguiente - Anterior: - Siguiente: - Actual: - Finalizado: - Modo de lectura - Para esta serie - ¿Usar esta imagen como portada\? - La imagen no se pudo cargar - Capítulo siguiente no encontrado - Página: %1$d - Portada actualizada - Establecer como portada - Filtro personalizado - Imagen guardada - Esto eliminará la fecha de lectura de este capítulo. ¿Estás seguro\? - Categorías eliminadas - ¡Ya existe una categoría con este nombre! - Tipo - Iniciado - Estado - Estado - Título - Puntuación - Releyendo - Buscar \"%1$s\" Globalmente - Fecha de agregado - Modo de lectura - Tema - - %d rastreador - %d rastreadores - %d rastreadores - - Errores - Completo - Progreso - Descarga completada - No tienes fuentes fijadas - Páginas de seguimiento donde no has iniciado sesion: - Las fuentes de esta extensión pueden contener contenido NSFW (18+) - 18+ - Esto no evita que las extensiones no oficiales o potencialmente marcadas incorrectamente muestren contenido para mayores de 18 años dentro de la aplicación. - - Omitiendo %d capítulo, fuente no encontrada o ha sido filtrado - Omitiendo %d capítulos, fuente no encontrada o han sido filtrados - Omitiendo %d capítulos, fuente no encontrada o han sido filtrados - - %1$s: %2$s, página %3$d - Las configuraciones predeterminadas del capítulo han sido actualizadas - No se encontraron capitulos - Establecer predeterminado - ¿Estás seguro de que quieres guardar como predeterminadas estas configuraciones\? - Ajustes del capítulo - Capítulos descargardos - Opciones de búsqueda - Modo incógnito - Limpiar historial - ¿Estás seguro\? Todo el historial se perderá. - Historial borrado - Siguiente página - Página previa - Guía de migración de fuentes - NSFW (Contenido +18) - No se encontró ninguna aplicación de selección de archivos - Por favor iniciar sesión con MAL de nuevo - Mostrar en la lista de fuentes y extensiones - Fecha de lectura terminada - Fecha de inicio de lectura - Guarda los registros de errores en un archivo para compartirlos con los desarrolladores - Volcar registros de accidentes - Zona de toque - Borde - Kindle-ish - En forma de L - Descendiente - Ascendiente - Por número de capítulo - Por fecha de subida - Rastreado - Derecha e izquierda - Mostrar cantidad de elementos - Ninguno - Presione para ver detalles del error - Descarga automática - Horizontal - Vertical - Tipo de rotación - Derecha - Izquierda - Crea carpetas según el título del manga - Escala de grises - Está versión de Android ya no está soportada - Falló al copiar en el portapapeles - Deshabilitar modo incógnito - DNS sobre HTTPS (DoH) - Los datos de la copia de seguridad se restaurarán. -\n -\nNecesitarás instalar cualquier extensión que falte e iniciar sesión en los servicios de seguimiento para utilizarlos. - Anterior - Siguiente - Guardar páginas en carpetas separadas - Acciones - Dividir páginas dobles - Mostrar brevemente cuando se abre el lector - Excluir: %s - Incluir: %s - Invert split page placement - Mostrar el diseño de la zona de toque - No leído - Fuente incompatible - Descargar ahora - Por defecto - Autentificar para confirmar cambios - El manga en las categorías excluidas no se descargara, incluso si estos tambien estan en las categorías incluidas. - La copia de seguridad y restauración pueden no funcionar correctamente si la Optimización de MIUI está deshabilitada. - Verde manzana - Cancelar todo para esta serie - Configuración por categoría para ordenar y mostrar - Todavía no tienes categorias. - Guía de inicio rápido - Actualizando bibloteca… (%1$d de %2$d) - No se ha encontrado ninguna coincidencia - Este rastreador solo es compatible com los recursos de Komga. - Error al compartir la portada - Error al guardar la portada - Portada guardada - Portada - Fecha - Ordenar por - Formato de capítulo invalido - Capítulo no encontrado - Ayuda con las traducciones - Interfaz Tablet - Algunos fabricantes tienen restricciones adicionales que cierran de forma forzada los servicios en segundo plano. Este sitio web tiene más información sobre cómo arreglarlo. - Actividad en segundo plano - Rastrear - Son servicios que proveen funciones mejoradas para recursos específicos. Los mangas son automáticamente rastreados cuando los añades a tu biblioteca. - Servicios mejorados - Guia de rastreo - Más alto - Más bajo - Bajo - Alto - Sensibilidad para ocultar menú al desplazarse - Automático - Invertido - Desactivado - Activado - Si la ubicación de la división de página dual no coincide con la dirección de lectura - Actualizar rastreadores cuando se actualice la biblioteca - Actualizar rastreadores automáticamente - Restricciones: %s - Largo (Corto +, Hace x días) - - Ayer - Hace %1$d dias - Hace %1$d dias - - Hoy - Recientemente - Corto (Hoy, Ayer) - Marcas de tiempo importantes - Marca de tiempo - Modo oscuro con negro puro - Tema Yotsuba - Yin y Yang - Turquesa - Tako - Daiquirí de fresa - Medianoche - Dinámico - Tema de la app - Apariencia - Fecha de obtención del capítulo - Información de la aplicación - Instalador - Shizuku no se está ejecutando - Instale e inicie Shizuku para poder usarlo como instalador de extensiones. - Manga total - Instalando extensión… - Legado - Alerta - Idioma - Cada 3 días - Registro detallado - Imprimir registros detallados al registro del sistema (reduce el rendimiento de la aplicación) - Actualizaciones de la aplicación - Base de datos limpia - Actualizar todo - Solo con Wi-Fi - Política de privacidad - Se recomiendan las copias de seguridad automáticas. Debería tener copias guardadas en otros sitios también. - Publicación terminada - Cancelado - En hiatus - Si necesitas ayuda arreglando errores en la actualización de la biblioteca, ve a %1$s - Guardar como archivo CBZ - Omitir actualización de los títulos - Error al obtener la lista de extensiones - Advertencia: las actualizaciones grandes afectan las fuentes y podría hacerlas más lentas, además de un mayor uso de batería. Toca para conocer más. - Empezado - Portada-única de la cuadrícula - Preguntas frecuentes y guías - %1$d manga que no pertenece a la biblioteca en la base de datos - Navegar a la panorámica - Ampliar imagen horizontal - 5% - Que no han sido iniciados - Omitido porque la serie está completa - Omitido porque hay capítulos sin leer - Omitido porque no hay capítulos leídos - Toca para conocer más - Omitido - %1$d actualización(es) fallida(s) - %1$d actualización(es) omitida(s) - Retrato inverso - Mover la serie al principio - Desactivado - Repetir fuentes ancladas en sus grupos de lenguaje respectivos - Mostrar fuentes duplicadas ancladas - No hay entradas para respaldar en la biblioteca - Datos de la vista web eliminados - Limpiar datos de la vista web - Una nueva versión esta disponible desde los lanzamientos oficiales, Toca para aprender a emigrar de lanzamientos F-droid no oficiales. - Error al guardar imagen - Cerrar - Cuando la batería no está baja - Abrir en GitHub - Ninguna fuente encontrada - No se encontró ninguna fuente instalada - Recuento no leído - Bueno, esto es incomodo - Todas las configuraciones del lector se restablecen - No se pudo restablecer la configuración del lector - Restablecer la configuración del lector por serie - Mejora rendimiento del lector al ajustar imágenes altas descargadas. - Página %d no encontrada durante la división - No se encontró la ruta del archivo de la página %d - Reinicie el modo de lectura y la orientación de toda serie - Versión - Idioma - Clasificación por edades - Lista de deseos - Lista completa - Lista inconclusa - Lista de espera - Lista de lectura - Solo en red sin medidor - Portada Personalizada - Imposible abrir el último capítulo leído - Error interno: Chequea los registros del fallo para más información - Borrar categoría - ¿Quieres borrar la categoría %s\? - Lavanda - Idioma de la aplicación - Sin descripción - No instalada - Dividir imágenes altas (BETA) - Descargar por adelantado - Remover todo - - Último capítulo sin leer - Últimos capítulos sin leer - - - Descargar automáticamente mientras se lee - Buscar… -Cola de descargas - Copiado al portapapeles - Saltar capítulos duplicados - Ocultar entradas que ya están en la biblioteca - %1$s error: %2$s - Tienes una entrada en tu librería con el mismo nombre. -\n -\n¿Deseas continuar\? - *requerido - Disponible, pero la fuente no está instalada: %s - Copiado al portapapeles - \ No newline at end of file diff --git a/presentation-core/build.gradle.kts b/presentation-core/build.gradle.kts index 4727dbed8d..31d10bdbd8 100644 --- a/presentation-core/build.gradle.kts +++ b/presentation-core/build.gradle.kts @@ -21,7 +21,8 @@ android { } dependencies { - implementation(project(":core")) + api(project(":core")) + api(project(":i18n")) // Compose implementation(platform(compose.bom)) diff --git a/presentation-core/src/main/java/tachiyomi/presentation/core/components/Pager.kt b/presentation-core/src/main/java/tachiyomi/presentation/core/components/Pager.kt index 7719df9df7..521f988b8a 100644 --- a/presentation-core/src/main/java/tachiyomi/presentation/core/components/Pager.kt +++ b/presentation-core/src/main/java/tachiyomi/presentation/core/components/Pager.kt @@ -8,8 +8,6 @@ import androidx.compose.foundation.pager.PagerScope import androidx.compose.foundation.pager.PagerSnapDistance import androidx.compose.foundation.pager.PagerState import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.NestedScrollConnection diff --git a/presentation-core/src/main/java/tachiyomi/presentation/core/components/SettingsItems.kt b/presentation-core/src/main/java/tachiyomi/presentation/core/components/SettingsItems.kt index bcfab6217d..fb4fcca033 100644 --- a/presentation-core/src/main/java/tachiyomi/presentation/core/components/SettingsItems.kt +++ b/presentation-core/src/main/java/tachiyomi/presentation/core/components/SettingsItems.kt @@ -1,7 +1,6 @@ package tachiyomi.presentation.core.components import android.view.MotionEvent -import androidx.annotation.StringRes import androidx.compose.foundation.clickable import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Arrangement @@ -52,14 +51,15 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.input.pointer.pointerInteropFilter import androidx.compose.ui.platform.LocalHapticFeedback -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp +import dev.icerock.moko.resources.StringResource import kotlinx.coroutines.delay import tachiyomi.core.preference.Preference import tachiyomi.core.preference.TriState import tachiyomi.core.preference.toggle import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.theme.header import tachiyomi.presentation.core.util.collectAsState @@ -70,7 +70,7 @@ object SettingsItemsPaddings { @Composable fun HeadingItem( - @StringRes labelRes: Int, + labelRes: StringResource, ) { HeadingItem(stringResource(labelRes)) } @@ -506,7 +506,7 @@ fun TextItem( @Composable fun SettingsChipRow( - @StringRes labelRes: Int, + labelRes: StringResource, content: @Composable FlowRowScope.() -> Unit, ) { Column { @@ -525,7 +525,7 @@ fun SettingsChipRow( } @Composable -fun SettingsIconGrid(@StringRes labelRes: Int, content: LazyGridScope.() -> Unit) { +fun SettingsIconGrid(labelRes: StringResource, content: LazyGridScope.() -> Unit) { Column { HeadingItem(labelRes) LazyVerticalGrid( diff --git a/presentation-core/src/main/java/tachiyomi/presentation/core/i18n/Localize.kt b/presentation-core/src/main/java/tachiyomi/presentation/core/i18n/Localize.kt new file mode 100644 index 0000000000..081281f7f8 --- /dev/null +++ b/presentation-core/src/main/java/tachiyomi/presentation/core/i18n/Localize.kt @@ -0,0 +1,33 @@ +package tachiyomi.presentation.core.i18n + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.ReadOnlyComposable +import androidx.compose.ui.platform.LocalContext +import dev.icerock.moko.resources.PluralsResource +import dev.icerock.moko.resources.StringResource +import tachiyomi.core.i18n.pluralStringResource +import tachiyomi.core.i18n.stringResource + +@Composable +@ReadOnlyComposable +fun stringResource(resource: StringResource): String { + return LocalContext.current.stringResource(resource) +} + +@Composable +@ReadOnlyComposable +fun stringResource(resource: StringResource, vararg args: Any): String { + return LocalContext.current.stringResource(resource, *args) +} + +@Composable +@ReadOnlyComposable +fun pluralStringResource(resource: PluralsResource, count: Int): String { + return LocalContext.current.pluralStringResource(resource, count) +} + +@Composable +@ReadOnlyComposable +fun pluralStringResource(resource: PluralsResource, count: Int, vararg args: Any): String { + return LocalContext.current.pluralStringResource(resource, count, *args) +} diff --git a/presentation-core/src/main/java/tachiyomi/presentation/core/screens/EmptyScreen.kt b/presentation-core/src/main/java/tachiyomi/presentation/core/screens/EmptyScreen.kt index f7de6a9316..0922f925c8 100644 --- a/presentation-core/src/main/java/tachiyomi/presentation/core/screens/EmptyScreen.kt +++ b/presentation-core/src/main/java/tachiyomi/presentation/core/screens/EmptyScreen.kt @@ -1,6 +1,5 @@ package tachiyomi.presentation.core.screens -import androidx.annotation.StringRes import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -18,31 +17,32 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalLayoutDirection -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import androidx.compose.ui.util.fastForEach +import dev.icerock.moko.resources.StringResource import kotlinx.collections.immutable.ImmutableList import tachiyomi.presentation.core.components.ActionButton import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.secondaryItemAlpha import kotlin.random.Random data class EmptyScreenAction( - @StringRes val stringResId: Int, + val stringRes: StringResource, val icon: ImageVector, val onClick: () -> Unit, ) @Composable fun EmptyScreen( - @StringRes textResource: Int, + stringRes: StringResource, modifier: Modifier = Modifier, actions: ImmutableList? = null, ) { EmptyScreen( - message = stringResource(textResource), + message = stringResource(stringRes), modifier = modifier, actions = actions, ) @@ -89,7 +89,7 @@ fun EmptyScreen( actions.fastForEach { ActionButton( modifier = Modifier.weight(1f), - title = stringResource(it.stringResId), + title = stringResource(it.stringRes), icon = it.icon, onClick = it.onClick, ) diff --git a/presentation-core/src/main/res/values/colors.xml b/presentation-core/src/main/res/values/colors.xml index 3d66ea077d..893bb77845 100644 --- a/presentation-core/src/main/res/values/colors.xml +++ b/presentation-core/src/main/res/values/colors.xml @@ -1,5 +1,5 @@ - + @color/accent_blue #1F888888 diff --git a/presentation-widget/build.gradle.kts b/presentation-widget/build.gradle.kts index e41d7be3d4..b5124f50ba 100644 --- a/presentation-widget/build.gradle.kts +++ b/presentation-widget/build.gradle.kts @@ -24,6 +24,7 @@ dependencies { implementation(project(":core")) implementation(project(":domain")) implementation(project(":presentation-core")) + api(project(":i18n")) implementation(compose.glance) lintChecks(compose.lintchecks) diff --git a/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/anime/LockedAnimeWidget.kt b/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/anime/LockedAnimeWidget.kt index eaa5702472..b4cd1c9913 100644 --- a/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/anime/LockedAnimeWidget.kt +++ b/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/anime/LockedAnimeWidget.kt @@ -16,8 +16,8 @@ import androidx.glance.text.TextAlign import androidx.glance.text.TextStyle import androidx.glance.unit.ColorProvider import eu.kanade.tachiyomi.core.Constants -import tachiyomi.presentation.widget.R -import tachiyomi.presentation.widget.util.stringResource +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource @Composable fun LockedAnimeWidget( @@ -34,7 +34,7 @@ fun LockedAnimeWidget( contentAlignment = Alignment.Center, ) { Text( - text = stringResource(R.string.appwidget_unavailable_locked), + text = stringResource(MR.strings.appwidget_unavailable_locked), style = TextStyle( color = foreground, fontSize = 12.sp, diff --git a/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/anime/UpdatesAnimeWidget.kt b/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/anime/UpdatesAnimeWidget.kt index 85c78a512e..a1acab79d3 100644 --- a/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/anime/UpdatesAnimeWidget.kt +++ b/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/anime/UpdatesAnimeWidget.kt @@ -23,9 +23,9 @@ import androidx.glance.text.TextStyle import androidx.glance.unit.ColorProvider import eu.kanade.tachiyomi.core.Constants import kotlinx.collections.immutable.ImmutableList -import tachiyomi.presentation.widget.R +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.widget.util.calculateRowAndColumnCount -import tachiyomi.presentation.widget.util.stringResource @Composable fun UpdatesAnimeWidget( @@ -43,7 +43,7 @@ fun UpdatesAnimeWidget( CircularProgressIndicator(color = contentColor) } else if (data.isEmpty()) { Text( - text = stringResource(R.string.information_no_recent), + text = stringResource(MR.strings.information_no_recent), style = TextStyle(color = contentColor), ) } else { diff --git a/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/manga/LockedMangaWidget.kt b/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/manga/LockedMangaWidget.kt index 8c01365b9f..6625916aa7 100644 --- a/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/manga/LockedMangaWidget.kt +++ b/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/manga/LockedMangaWidget.kt @@ -16,8 +16,8 @@ import androidx.glance.text.TextAlign import androidx.glance.text.TextStyle import androidx.glance.unit.ColorProvider import eu.kanade.tachiyomi.core.Constants -import tachiyomi.presentation.widget.R -import tachiyomi.presentation.widget.util.stringResource +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource @Composable fun LockedMangaWidget( @@ -34,7 +34,7 @@ fun LockedMangaWidget( contentAlignment = Alignment.Center, ) { Text( - text = stringResource(R.string.appwidget_unavailable_locked), + text = stringResource(MR.strings.appwidget_unavailable_locked), style = TextStyle( color = foreground, fontSize = 12.sp, diff --git a/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/manga/UpdatesMangaWidget.kt b/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/manga/UpdatesMangaWidget.kt index 2d167c95c1..8a30242641 100644 --- a/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/manga/UpdatesMangaWidget.kt +++ b/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/manga/UpdatesMangaWidget.kt @@ -23,9 +23,9 @@ import androidx.glance.text.TextStyle import androidx.glance.unit.ColorProvider import eu.kanade.tachiyomi.core.Constants import kotlinx.collections.immutable.ImmutableList -import tachiyomi.presentation.widget.R +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.widget.util.calculateRowAndColumnCount -import tachiyomi.presentation.widget.util.stringResource @Composable fun UpdatesMangaWidget( @@ -43,7 +43,7 @@ fun UpdatesMangaWidget( CircularProgressIndicator(color = contentColor) } else if (data.isEmpty()) { Text( - text = stringResource(R.string.information_no_recent), + text = stringResource(MR.strings.information_no_recent), style = TextStyle(color = contentColor), ) } else { diff --git a/presentation-widget/src/main/java/tachiyomi/presentation/widget/entries/anime/AnimeUpdatesGridGlanceWidget.kt b/presentation-widget/src/main/java/tachiyomi/presentation/widget/entries/anime/AnimeUpdatesGridGlanceWidget.kt index 5b4ad3cef2..8b52611592 100644 --- a/presentation-widget/src/main/java/tachiyomi/presentation/widget/entries/anime/AnimeUpdatesGridGlanceWidget.kt +++ b/presentation-widget/src/main/java/tachiyomi/presentation/widget/entries/anime/AnimeUpdatesGridGlanceWidget.kt @@ -4,7 +4,6 @@ import androidx.compose.ui.unit.dp import androidx.glance.ImageProvider import androidx.glance.unit.ColorProvider import tachiyomi.presentation.widget.R -import uy.kohesive.injekt.api.get class AnimeUpdatesGridGlanceWidget : BaseAnimeUpdatesGridGlanceWidget() { override val foreground = ColorProvider(R.color.appwidget_on_secondary_container) diff --git a/presentation-widget/src/main/java/tachiyomi/presentation/widget/util/GlanceUtils.kt b/presentation-widget/src/main/java/tachiyomi/presentation/widget/util/GlanceUtils.kt index 3783c4d65e..f1fd853353 100644 --- a/presentation-widget/src/main/java/tachiyomi/presentation/widget/util/GlanceUtils.kt +++ b/presentation-widget/src/main/java/tachiyomi/presentation/widget/util/GlanceUtils.kt @@ -1,11 +1,8 @@ package tachiyomi.presentation.widget.util -import androidx.annotation.StringRes -import androidx.compose.runtime.Composable import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.DpSize import androidx.glance.GlanceModifier -import androidx.glance.LocalContext import androidx.glance.appwidget.cornerRadius import tachiyomi.presentation.widget.R @@ -16,11 +13,6 @@ fun GlanceModifier.appWidgetInnerRadius(): GlanceModifier { return this.cornerRadius(R.dimen.appwidget_inner_radius) } -@Composable -fun stringResource(@StringRes id: Int): String { - return LocalContext.current.getString(id) -} - /** * Calculates row-column count. * diff --git a/source-api/src/commonMain/AndroidManifest.xml b/source-api/src/androidMain/AndroidManifest.xml similarity index 100% rename from source-api/src/commonMain/AndroidManifest.xml rename to source-api/src/androidMain/AndroidManifest.xml diff --git a/source-local/build.gradle.kts b/source-local/build.gradle.kts index 2ca02ce8b4..c2d3fb0bb3 100644 --- a/source-local/build.gradle.kts +++ b/source-local/build.gradle.kts @@ -9,6 +9,8 @@ kotlin { val commonMain by getting { dependencies { implementation(project(":source-api")) + api(project(":i18n")) + implementation(libs.unifile) implementation(libs.junrar) } diff --git a/source-local/src/androidMain/kotlin/tachiyomi/source/local/entries/anime/LocalAnimeSource.kt b/source-local/src/androidMain/kotlin/tachiyomi/source/local/entries/anime/LocalAnimeSource.kt index 2036c5cdbb..bd2a6e854e 100644 --- a/source-local/src/androidMain/kotlin/tachiyomi/source/local/entries/anime/LocalAnimeSource.kt +++ b/source-local/src/androidMain/kotlin/tachiyomi/source/local/entries/anime/LocalAnimeSource.kt @@ -15,13 +15,14 @@ import kotlinx.serialization.json.Json import kotlinx.serialization.json.decodeFromStream import logcat.LogPriority import rx.Observable +import tachiyomi.core.i18n.stringResource import tachiyomi.core.metadata.tachiyomi.AnimeDetails import tachiyomi.core.metadata.tachiyomi.EpisodeDetails import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.system.logcat import tachiyomi.domain.entries.anime.model.Anime import tachiyomi.domain.items.episode.service.EpisodeRecognition -import tachiyomi.source.local.R +import tachiyomi.i18n.MR import tachiyomi.source.local.filter.anime.AnimeOrderBy import tachiyomi.source.local.image.anime.LocalAnimeCoverManager import tachiyomi.source.local.io.ArchiveAnime @@ -44,7 +45,7 @@ actual class LocalAnimeSource( private val POPULAR_FILTERS = AnimeFilterList(AnimeOrderBy.Popular(context)) private val LATEST_FILTERS = AnimeFilterList(AnimeOrderBy.Latest(context)) - override val name = context.getString(R.string.local_anime_source) + override val name = context.stringResource(MR.strings.local_anime_source) override val id: Long = ID diff --git a/source-local/src/androidMain/kotlin/tachiyomi/source/local/entries/manga/LocalMangaSource.kt b/source-local/src/androidMain/kotlin/tachiyomi/source/local/entries/manga/LocalMangaSource.kt index 150c84712d..db86f6db71 100644 --- a/source-local/src/androidMain/kotlin/tachiyomi/source/local/entries/manga/LocalMangaSource.kt +++ b/source-local/src/androidMain/kotlin/tachiyomi/source/local/entries/manga/LocalMangaSource.kt @@ -16,6 +16,7 @@ import kotlinx.serialization.json.decodeFromStream import logcat.LogPriority import nl.adaptivity.xmlutil.AndroidXmlReader import nl.adaptivity.xmlutil.serialization.XML +import tachiyomi.core.i18n.stringResource import tachiyomi.core.metadata.comicinfo.COMIC_INFO_FILE import tachiyomi.core.metadata.comicinfo.ComicInfo import tachiyomi.core.metadata.comicinfo.copyFromComicInfo @@ -27,7 +28,7 @@ import tachiyomi.core.util.system.ImageUtil import tachiyomi.core.util.system.logcat import tachiyomi.domain.entries.manga.model.Manga import tachiyomi.domain.items.chapter.service.ChapterRecognition -import tachiyomi.source.local.R +import tachiyomi.i18n.MR import tachiyomi.source.local.filter.manga.MangaOrderBy import tachiyomi.source.local.image.manga.LocalMangaCoverManager import tachiyomi.source.local.io.ArchiveManga @@ -59,7 +60,7 @@ actual class LocalMangaSource( private val POPULAR_FILTERS = FilterList(MangaOrderBy.Popular(context)) private val LATEST_FILTERS = FilterList(MangaOrderBy.Latest(context)) - override val name: String = context.getString(R.string.local_manga_source) + override val name: String = context.stringResource(MR.strings.local_manga_source) override val id: Long = ID @@ -344,9 +345,9 @@ actual class LocalMangaSource( return File(fileSystem.getBaseDirectory(), chapter.url) .takeIf { it.exists() } ?.let(Format.Companion::valueOf) - ?: throw Exception(context.getString(R.string.chapter_not_found)) + ?: throw Exception(context.stringResource(MR.strings.chapter_not_found)) } catch (e: Format.UnknownFormatException) { - throw Exception(context.getString(R.string.local_invalid_format)) + throw Exception(context.stringResource(MR.strings.local_invalid_format)) } catch (e: Exception) { throw e } diff --git a/source-local/src/androidMain/kotlin/tachiyomi/source/local/filter/anime/AnimeOrderBy.kt b/source-local/src/androidMain/kotlin/tachiyomi/source/local/filter/anime/AnimeOrderBy.kt index 9c65eee983..397b6d33c4 100644 --- a/source-local/src/androidMain/kotlin/tachiyomi/source/local/filter/anime/AnimeOrderBy.kt +++ b/source-local/src/androidMain/kotlin/tachiyomi/source/local/filter/anime/AnimeOrderBy.kt @@ -2,11 +2,12 @@ package tachiyomi.source.local.filter.anime import android.content.Context import eu.kanade.tachiyomi.animesource.model.AnimeFilter -import tachiyomi.source.local.R +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR sealed class AnimeOrderBy(context: Context, selection: Selection) : AnimeFilter.Sort( - context.getString(R.string.local_filter_order_by), - arrayOf(context.getString(R.string.title), context.getString(R.string.date)), + context.stringResource(MR.strings.local_filter_order_by), + arrayOf(context.stringResource(MR.strings.title), context.stringResource(MR.strings.date)), selection, ) { class Popular(context: Context) : AnimeOrderBy(context, Selection(0, true)) diff --git a/source-local/src/androidMain/kotlin/tachiyomi/source/local/filter/manga/MangaOrderBy.kt b/source-local/src/androidMain/kotlin/tachiyomi/source/local/filter/manga/MangaOrderBy.kt index e5f9feef34..0c24744f13 100644 --- a/source-local/src/androidMain/kotlin/tachiyomi/source/local/filter/manga/MangaOrderBy.kt +++ b/source-local/src/androidMain/kotlin/tachiyomi/source/local/filter/manga/MangaOrderBy.kt @@ -2,11 +2,12 @@ package tachiyomi.source.local.filter.manga import android.content.Context import eu.kanade.tachiyomi.source.model.Filter -import tachiyomi.source.local.R +import tachiyomi.core.i18n.stringResource +import tachiyomi.i18n.MR sealed class MangaOrderBy(context: Context, selection: Selection) : Filter.Sort( - context.getString(R.string.local_filter_order_by), - arrayOf(context.getString(R.string.title), context.getString(R.string.date)), + context.stringResource(MR.strings.local_filter_order_by), + arrayOf(context.stringResource(MR.strings.title), context.stringResource(MR.strings.date)), selection, ) { class Popular(context: Context) : MangaOrderBy(context, Selection(0, true))