Clean up strings and resources (#8253)

* Clean up strings and resources

* fix pringle's typo

* restore catching file pick errors

* add back file chooser title

* revert #7740 and remove try-catch of chooser-wrapped intent

* swap xmlns lines

* swap xml tools lines
This commit is contained in:
stevenyomi 2022-10-21 05:48:13 +08:00 committed by GitHub
parent 7a360779b3
commit 824d5e22bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
35 changed files with 100 additions and 235 deletions

View File

@ -102,7 +102,7 @@ private fun MigrateSourceList(
IconButton(onClick = onToggleSortingMode) {
when (sortingMode) {
SetMigrateSorting.Mode.ALPHABETICAL -> Icon(Icons.Outlined.SortByAlpha, contentDescription = stringResource(R.string.action_sort_alpha))
SetMigrateSorting.Mode.TOTAL -> Icon(Icons.Outlined.Numbers, contentDescription = stringResource(R.string.action_sort_total))
SetMigrateSorting.Mode.TOTAL -> Icon(Icons.Outlined.Numbers, contentDescription = stringResource(R.string.action_sort_count))
}
}
IconButton(onClick = onToggleSortingDirection) {

View File

@ -292,11 +292,12 @@ private fun MangaAndSourceTitlesLarge(
MangaCover.Book(
modifier = Modifier.fillMaxWidth(0.65f),
data = coverDataProvider(),
contentDescription = stringResource(R.string.manga_cover),
onClick = onCoverClick,
)
Spacer(modifier = Modifier.height(16.dp))
Text(
text = title.takeIf { it.isNotBlank() } ?: stringResource(R.string.unknown),
text = title.ifBlank { stringResource(R.string.unknown_title) },
style = MaterialTheme.typography.titleLarge,
modifier = Modifier.clickableNoIndication(
onLongClick = { if (title.isNotBlank()) context.copyToClipboard(title, title) },
@ -419,11 +420,12 @@ private fun MangaAndSourceTitlesSmall(
.sizeIn(maxWidth = 100.dp)
.align(Alignment.Top),
data = coverDataProvider(),
contentDescription = stringResource(R.string.manga_cover),
onClick = onCoverClick,
)
Column(modifier = Modifier.padding(start = 16.dp)) {
Text(
text = title.ifBlank { stringResource(R.string.unknown) },
text = title.ifBlank { stringResource(R.string.unknown_title) },
style = MaterialTheme.typography.titleLarge,
modifier = Modifier.clickableNoIndication(
onLongClick = {
@ -583,7 +585,7 @@ private fun MangaSummary(
val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_caret_down)
Icon(
painter = rememberAnimatedVectorPainter(image, !expanded),
contentDescription = null,
contentDescription = stringResource(if (expanded) R.string.manga_info_collapse else R.string.manga_info_expand),
tint = MaterialTheme.colorScheme.onBackground,
modifier = Modifier.background(Brush.radialGradient(colors = colors.asReversed())),
)

View File

@ -1,6 +1,8 @@
package eu.kanade.presentation.more.settings.screen
import android.Manifest
import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.widget.Toast
@ -111,7 +113,12 @@ class SettingsBackupScreen : SearchableSettings {
onConfirm = {
showCreateDialog = false
flag = it
chooseBackupDir.launch(Backup.getBackupFilename())
try {
chooseBackupDir.launch(Backup.getBackupFilename())
} catch (e: ActivityNotFoundException) {
flag = 0
context.toast(R.string.file_picker_error)
}
},
onDismissRequest = { showCreateDialog = false },
)
@ -260,12 +267,16 @@ class SettingsBackupScreen : SearchableSettings {
onDismissRequest = onDismissRequest,
title = { Text(text = stringResource(R.string.pref_restore_backup)) },
text = {
var msg = stringResource(R.string.backup_restore_content_full)
if (err.sources.isNotEmpty()) {
msg += "\n\n${stringResource(R.string.backup_restore_missing_sources)}\n${err.sources.joinToString("\n") { "- $it" }}"
}
if (err.sources.isNotEmpty()) {
msg += "\n\n${stringResource(R.string.backup_restore_missing_trackers)}\n${err.trackers.joinToString("\n") { "- $it" }}"
val msg = buildString {
append(stringResource(R.string.backup_restore_content_full))
if (err.sources.isNotEmpty()) {
append("\n\n").append(stringResource(R.string.backup_restore_missing_sources))
err.sources.joinTo(this, separator = "\n- ", prefix = "\n- ")
}
if (err.trackers.isNotEmpty()) {
append("\n\n").append(stringResource(R.string.backup_restore_missing_trackers))
err.trackers.joinTo(this, separator = "\n- ", prefix = "\n- ")
}
}
Text(text = msg)
},
@ -285,7 +296,14 @@ class SettingsBackupScreen : SearchableSettings {
}
}
val chooseBackup = rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) {
val chooseBackup = rememberLauncherForActivityResult(
object : ActivityResultContracts.GetContent() {
override fun createIntent(context: Context, input: String): Intent {
val intent = super.createIntent(context, input)
return Intent.createChooser(intent, context.getString(R.string.file_select_backup))
}
},
) {
if (it != null) {
val results = try {
BackupFileValidator().validate(context, it)
@ -311,6 +329,7 @@ class SettingsBackupScreen : SearchableSettings {
if (DeviceUtil.isMiui && DeviceUtil.isMiuiOptimizationDisabled()) {
context.toast(R.string.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)
@ -363,7 +382,13 @@ class SettingsBackupScreen : SearchableSettings {
subtitle = remember(backupDir) {
UniFile.fromUri(context, backupDir.toUri()).filePath!! + "/automatic"
},
onClick = { pickBackupLocation.launch(null) },
onClick = {
try {
pickBackupLocation.launch(null)
} catch (e: ActivityNotFoundException) {
context.toast(R.string.file_picker_error)
}
},
),
Preference.PreferenceItem.ListPreference(
pref = backupPreferences.numberOfBackups(),

View File

@ -65,7 +65,7 @@ class SettingsDownloadScreen : SearchableSettings {
downloadPreferences = downloadPreferences,
categories = allCategories,
),
getDownloadNewChaptersGroup(
getAutoDownloadGroup(
downloadPreferences = downloadPreferences,
allCategories = allCategories,
),
@ -196,7 +196,7 @@ class SettingsDownloadScreen : SearchableSettings {
}
@Composable
private fun getDownloadNewChaptersGroup(
private fun getAutoDownloadGroup(
downloadPreferences: DownloadPreferences,
allCategories: List<Category>,
): Preference.PreferenceGroup {
@ -227,7 +227,7 @@ class SettingsDownloadScreen : SearchableSettings {
}
return Preference.PreferenceGroup(
title = stringResource(R.string.pref_download_new),
title = stringResource(R.string.pref_category_auto_download),
preferenceItems = listOf(
Preference.PreferenceItem.SwitchPreference(
pref = downloadNewChaptersPref,

View File

@ -67,6 +67,7 @@ class SettingsReaderScreen : SearchableSettings {
title = stringResource(R.string.pref_page_transitions),
),
getDisplayGroup(readerPreferences = readerPref),
getReadingGroup(readerPreferences = readerPref),
getPagedGroup(readerPreferences = readerPref),
getWebtoonGroup(readerPreferences = readerPref),
getNavigationGroup(readerPreferences = readerPref),
@ -120,6 +121,27 @@ class SettingsReaderScreen : SearchableSettings {
)
}
@Composable
private fun getReadingGroup(readerPreferences: ReaderPreferences): Preference.PreferenceGroup {
return Preference.PreferenceGroup(
title = stringResource(R.string.pref_category_reading),
preferenceItems = listOf(
Preference.PreferenceItem.SwitchPreference(
pref = readerPreferences.skipRead(),
title = stringResource(R.string.pref_skip_read_chapters),
),
Preference.PreferenceItem.SwitchPreference(
pref = readerPreferences.skipFiltered(),
title = stringResource(R.string.pref_skip_filtered_chapters),
),
Preference.PreferenceItem.SwitchPreference(
pref = readerPreferences.alwaysShowChapterTransition(),
title = stringResource(R.string.pref_always_show_chapter_transition),
),
),
)
}
@Composable
private fun getPagedGroup(readerPreferences: ReaderPreferences): Preference.PreferenceGroup {
val navModePref = readerPreferences.navigationModePager()
@ -308,6 +330,7 @@ class SettingsReaderScreen : SearchableSettings {
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),
),
),
)

View File

@ -70,7 +70,6 @@ import kotlin.math.roundToInt
/**
* Controller that shows the currently active downloads.
* Uses R.layout.fragment_download_queue.
*/
class DownloadController :
FullComposeController<DownloadPresenter>(),

View File

@ -56,7 +56,7 @@ class LibraryController(
onClickFilter = ::showSettingsSheet,
onClickRefresh = {
val started = LibraryUpdateService.start(context, it)
context.toast(if (started) R.string.updating_library else R.string.update_already_running)
context.toast(if (started) R.string.updating_category else R.string.update_already_running)
started
},
onClickInvertSelection = { presenter.invertSelection(presenter.activeCategory) },

View File

@ -6,8 +6,6 @@ import android.content.Intent
import android.graphics.drawable.BitmapDrawable
import android.net.Uri
import android.os.Bundle
import androidx.activity.result.PickVisualMediaRequest
import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.remember
@ -88,7 +86,7 @@ class MangaFullCoverDialog : FullComposeController<MangaFullCoverDialog.MangaFul
} catch (e: Throwable) {
withUIContext {
logcat(LogPriority.ERROR, e)
activity.toast(R.string.error_saving_cover)
activity.toast(R.string.error_sharing_cover)
}
}
}
@ -114,8 +112,11 @@ class MangaFullCoverDialog : FullComposeController<MangaFullCoverDialog.MangaFul
private fun changeCover(action: EditCoverAction) {
when (action) {
EditCoverAction.EDIT -> {
// This will open new Photo Picker eventually.
// See https://github.com/tachiyomiorg/tachiyomi/pull/8253#issuecomment-1285747310
val intent = Intent(Intent.ACTION_GET_CONTENT).apply { type = "image/*" }
startActivityForResult(
PickVisualMedia().createIntent(activity!!, PickVisualMediaRequest(PickVisualMedia.ImageOnly)),
Intent.createChooser(intent, resources?.getString(R.string.file_select_cover)),
REQUEST_IMAGE_OPEN,
)
}

View File

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/system_neutral1_500" android:state_enabled="false" />
<item android:color="@android:color/system_neutral1_50" />
</selector>

View File

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:alpha="?android:attr/disabledAlpha" android:color="@android:color/system_neutral2_200" android:state_enabled="false" />
<item android:color="@android:color/system_neutral2_200" />
</selector>

View File

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/system_neutral1_400" android:state_enabled="false" />
<item android:color="@android:color/system_neutral1_900" />
</selector>

View File

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:alpha="?android:attr/disabledAlpha" android:color="@android:color/system_neutral2_700" android:state_enabled="false" />
<item android:color="@android:color/system_neutral2_700" />
</selector>

View File

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:alpha="1.00" android:color="?attr/colorPrimary" android:state_activated="true" />
<item android:alpha="0.38" android:color="?attr/colorOnSurface" android:state_activated="false" />
</selector>

View File

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:alpha="0.2" android:color="?attr/colorPrimary" />
<item android:state_activated="true" android:alpha="0.2" android:color="?attr/colorPrimary" />
</selector>

View File

@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:keep="@drawable/sc_collections_bookmark_48dp">
<background android:drawable="@color/accent_blue"/>
<foreground>
<vector

View File

@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:keep="@drawable/sc_explore_48dp">
<background android:drawable="@color/accent_blue"/>
<foreground>
<vector

View File

@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:keep="@drawable/sc_history_48dp">
<background android:drawable="@color/accent_blue"/>
<foreground>
<vector

View File

@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:keep="@drawable/sc_new_releases_48dp">
<background android:drawable="@color/accent_blue"/>
<foreground>
<vector

View File

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="90"
android:centerColor="#00000000"
android:centerY="0.3"
android:endColor="#00ffffff"
android:startColor="#aa000000" />
<corners android:radius="@dimen/card_radius" />
</shape>

View File

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/black"
android:pathData="M10,18h4v-2h-4v2zM3,6v2h18L21,6L3,6zM6,13h12v-2L6,11v2z" />
</vector>

View File

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/black"
android:pathData="M11,18h2v-2h-2v2zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM12,6c-2.21,0 -4,1.79 -4,4h2c0,-1.1 0.9,-2 2,-2s2,0.9 2,2c0,2 -3,1.75 -3,5h2c0,-2.25 3,-2.5 3,-5 0,-2.21 -1.79,-4 -4,-4z" />
</vector>

View File

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M18,7l-1.41,-1.41 -6.34,6.34 1.41,1.41L18,7zM22.24,5.59L11.66,16.17 7.48,12l-1.41,1.41L11.66,19l12,-12 -1.42,-1.41zM0.41,13.41L6,19l1.41,-1.41L1.83,12 0.41,13.41z" />
</vector>

View File

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M11.8,10.9c-2.27,-0.59 -3,-1.2 -3,-2.15 0,-1.09 1.01,-1.85 2.7,-1.85 1.78,0 2.44,0.85 2.5,2.1h2.21c-0.07,-1.72 -1.12,-3.3 -3.21,-3.81V3h-3v2.16c-1.94,0.42 -3.5,1.68 -3.5,3.61 0,2.31 1.91,3.46 4.7,4.13 2.5,0.6 3,1.48 3,2.41 0,0.69 -0.49,1.79 -2.7,1.79 -2.06,0 -2.87,-0.92 -2.98,-2.1h-2.2c0.12,2.19 1.76,3.42 3.68,3.83V21h3v-2.15c1.95,-0.37 3.5,-1.5 3.5,-3.55 0,-2.84 -2.43,-3.81 -4.7,-4.4z" />
</vector>

View File

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM12,20c-4.42,0 -8,-3.58 -8,-8s3.58,-8 8,-8 8,3.58 8,8 -3.58,8 -8,8zM12.5,7L11,7v6l5.25,3.15 0.75,-1.23 -4.5,-2.67z" />
</vector>

View File

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.42,0 -8,-3.58 -8,-8 0,-1.85 0.63,-3.55 1.69,-4.9L16.9,18.31C15.55,19.37 13.85,20 12,20zM18.31,16.9L7.1,5.69C8.45,4.63 10.15,4 12,4c4.42,0 8,3.58 8,8 0,1.85 -0.63,3.55 -1.69,4.9z" />
</vector>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorPrimary">
<item>
<shape android:shape="rectangle">
<corners android:radius="@dimen/card_selector_radius" />
<solid android:color="@color/library_item_foreground" />
</shape>
</item>
</ripple>

View File

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorControlHighlight">
<item>
<selector>
<item android:state_selected="true">
<color android:color="?attr/colorControlHighlight" />
</item>
<item android:state_activated="true">
<color android:color="?attr/colorControlHighlight" />
</item>
<item>
<color android:color="?android:attr/colorBackground" />
</item>
</selector>
</item>
</ripple>

View File

@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:keep="@drawable/sc_collections_bookmark_48dp"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"

View File

@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:keep="@drawable/sc_explore_48dp"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"

View File

@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:keep="@drawable/sc_history_48dp"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"

View File

@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:keep="@drawable/sc_new_releases_48dp"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"

View File

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingHorizontal="24dp"
android:paddingVertical="16dp">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/text_field"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<eu.kanade.tachiyomi.widget.TachiyomiTextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>
</FrameLayout>

View File

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.viewpager.widget.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />

View File

@ -1,44 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/reorder"
android:title="@string/action_reorganize_by"
app:showAsAction="never">
<menu>
<item
android:id="@+id/action_sort_date"
android:title="@string/action_order_by_upload_date"
app:showAsAction="never">
<menu>
<item
android:id="@+id/newest"
android:title="@string/action_newest" />
<item
android:id="@+id/oldest"
android:title="@string/action_oldest" />
</menu>
</item>
<item
android:id="@+id/action_sort_chapter"
android:title="@string/action_order_by_chapter_number"
app:showAsAction="never">
<menu>
<item
android:id="@+id/asc"
android:title="@string/action_asc" />
<item
android:id="@+id/desc"
android:title="@string/action_desc" />
</menu>
</item>
</menu>
</item>
<item
android:id="@+id/clear_queue"
android:title="@string/action_cancel_all"
app:showAsAction="never" />
</menu>

View File

@ -43,6 +43,7 @@
<string name="action_filter_tracked">Tracked</string>
<string name="action_filter_unread">Unread</string>
<string name="action_filter_started">Started</string>
<!-- reserved for #4048 -->
<string name="action_filter_empty">Remove filter</string>
<string name="action_sort_alpha">Alphabetically</string>
<string name="action_sort_count">Total manga</string>
@ -63,11 +64,9 @@
<string name="action_mark_as_unread">Mark as unread</string>
<string name="action_mark_previous_as_read">Mark previous as read</string>
<string name="action_download">Download</string>
<string name="action_download_unread">Download unread chapters</string>
<string name="action_bookmark">Bookmark chapter</string>
<string name="action_remove_bookmark">Unbookmark chapter</string>
<string name="action_delete">Delete</string>
<string name="action_update">Update</string>
<string name="action_update_library">Update library</string>
<string name="action_enable_all">Enable all</string>
<string name="action_disable_all">Disable all</string>
@ -129,11 +128,11 @@
<string name="action_share">Share</string>
<string name="action_save">Save</string>
<string name="action_reset">Reset</string>
<!-- missing undo feature after Compose rewrite #7454 -->
<string name="action_undo">Undo</string>
<string name="action_close">Close</string>
<string name="action_open_log">Open log</string>
<string name="action_show_errors">Tap to see details</string>
<string name="action_create">Create</string>
<string name="action_restore">Restore</string>
<string name="action_webview_back">Back</string>
<string name="action_webview_forward">Forward</string>
@ -467,8 +466,6 @@
<string name="pref_backup_service_category">Automatic backups</string>
<string name="pref_backup_interval">Backup frequency</string>
<string name="pref_backup_slots">Maximum backups</string>
<string name="tracker_not_logged_in">Not logged in: %1$s</string>
<string name="backup_restore_invalid_uri">Error: empty URI</string>
<string name="backup_created">Backup created</string>
<string name="invalid_backup_file">Invalid backup file</string>
<string name="invalid_backup_file_missing_manga">Backup does not contain any manga.</string>
@ -574,7 +571,6 @@
<string name="logout_title">Log out from %1$s?</string>
<string name="logout">Log out</string>
<string name="logout_success">You are now logged out</string>
<string name="invalid_login">Could not log in</string>
<string name="unknown_error">Unknown error</string>
<!-- Library fragment -->
@ -586,6 +582,7 @@
<string name="tabs_header">Tabs</string>
<!-- Catalogue fragment -->
<!-- missing prompt after Compose rewrite #7901 -->
<string name="no_more_results">No more results</string>
<string name="no_results_found">No results found</string>
<!-- Do not translate "WebView" -->
@ -606,14 +603,11 @@
<string name="local_filter_order_by">Order by</string>
<string name="date">Date</string>
<!-- Manga activity -->
<string name="manga_not_in_db">This manga has been removed from the database.</string>
<!-- Manga info fragment -->
<string name="description">Description</string>
<string name="ongoing">Ongoing</string>
<string name="unknown">Unknown</string>
<string name="unknown_author">Unknown author</string>
<!-- reserved for #6163 -->
<string name="unknown_status">Unknown status</string>
<string name="licensed">Licensed</string>
<string name="publishing_finished">Publishing finished</string>
@ -621,8 +615,9 @@
<string name="on_hiatus">On hiatus</string>
<string name="add_to_library">Add to library</string>
<string name="in_library">In library</string>
<!-- missing confirm menu after Compose rewrite #7901 -->
<string name="remove_from_library">Remove from library</string>
<string name="manga_info_full_title_label">Title</string>
<string name="unknown_title">Unknown title</string>
<string name="confirm_manga_add_duplicate">You have an entry in your library with the same name but from a different source (%1$s).\n\nDo you still wish to continue?</string>
<string name="manga_added_library">Added to library</string>
<string name="manga_removed_library">Removed from library</string>
@ -646,7 +641,6 @@
<string name="chapter_paused">Paused</string>
<string name="show_title">Source title</string>
<string name="show_chapter_number">Chapter number</string>
<string name="sorting_mode">Sorting mode</string>
<string name="sort_by_source">By source</string>
<string name="sort_by_number">By chapter number</string>
<string name="sort_by_upload_date">By upload date</string>
@ -708,14 +702,13 @@
<string name="track_started_reading_date">Start date</string>
<string name="track_finished_reading_date">Finish date</string>
<string name="track_type">Type</string>
<string name="track_author">Author</string>
<string name="error_invalid_date_supplied">Invalid date supplied</string>
<string name="myanimelist_relogin">Please login to MAL again</string>
<string name="source_unsupported">Source is not supported</string>
<string name="error_no_match">No match found</string>
<!-- Category activity -->
<string name="error_category_exists">A category with this name already exists!</string>
<!-- missing undo feature after Compose rewrite #7454 -->
<string name="snack_categories_deleted">Categories deleted</string>
<!-- Dialog option with checkbox view -->
@ -733,7 +726,6 @@
<string name="share_page_info">%1$s: %2$s, page %3$d</string>
<string name="chapter_progress">Page: %1$d</string>
<string name="no_next_chapter">Next chapter not found</string>
<string name="no_previous_chapter">Previous chapter not found</string>
<string name="decode_image_error">The image couldn\'t be loaded</string>
<string name="confirm_set_image_as_cover">Use this image as cover art?</string>
<string name="pref_category_for_this_series">For this series</string>
@ -830,6 +822,7 @@
<!--UpdateCheck-->
<string name="update_check_confirm">Download</string>
<string name="update_check_open">Open on GitHub</string>
<!-- reserved for future use -->
<string name="update_check_eol">This Android version is no longer supported</string>
<string name="update_check_no_new_updates">No new updates available</string>
<string name="update_check_look_for_updates">Searching for updates…</string>