Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6b99e360e0 | ||
|
|
1c73d54a94 | ||
|
|
36e21caf96 | ||
|
|
f7f9c53466 | ||
|
|
3f2ee2a925 | ||
|
|
b1c069f62f | ||
|
|
22d48fce8f | ||
|
|
6b2666c701 | ||
|
|
414f438762 | ||
|
|
54f60040b5 | ||
|
|
b0515033da | ||
|
|
d37eb07301 | ||
|
|
5e82c75893 | ||
|
|
9c9a389aa5 | ||
|
|
1b3af70690 |
2
.idea/gradle.xml
generated
2
.idea/gradle.xml
generated
@@ -7,7 +7,7 @@
|
||||
<option name="testRunner" value="GRADLE" />
|
||||
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="gradleJvm" value="Embedded JDK" />
|
||||
<option name="gradleJvm" value="Android Studio default JDK" />
|
||||
<option name="modules">
|
||||
<set>
|
||||
<option value="$PROJECT_DIR$" />
|
||||
|
||||
@@ -14,8 +14,8 @@ android {
|
||||
applicationId 'org.koitharu.kotatsu'
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 32
|
||||
versionCode 401
|
||||
versionName '3.1'
|
||||
versionCode 402
|
||||
versionName '3.1.1'
|
||||
generatedDensities = []
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
||||
|
||||
@@ -26,7 +26,8 @@ import org.koitharu.kotatsu.base.ui.util.WindowInsetsDelegate
|
||||
import org.koitharu.kotatsu.core.exceptions.resolve.ExceptionResolver
|
||||
import org.koitharu.kotatsu.core.prefs.AppSettings
|
||||
|
||||
abstract class BaseActivity<B : ViewBinding> : AppCompatActivity(),
|
||||
abstract class BaseActivity<B : ViewBinding> :
|
||||
AppCompatActivity(),
|
||||
WindowInsetsDelegate.WindowInsetsListener {
|
||||
|
||||
protected lateinit var binding: B
|
||||
@@ -123,4 +124,4 @@ abstract class BaseActivity<B : ViewBinding> : AppCompatActivity(),
|
||||
super.onBackPressed()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package org.koitharu.kotatsu.base.ui.dialog
|
||||
|
||||
import android.content.Context
|
||||
import android.content.DialogInterface
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.BaseAdapter
|
||||
@@ -12,7 +13,6 @@ import kotlinx.coroutines.runBlocking
|
||||
import org.koitharu.kotatsu.R
|
||||
import org.koitharu.kotatsu.databinding.ItemStorageBinding
|
||||
import org.koitharu.kotatsu.local.data.LocalStorageManager
|
||||
import org.koitharu.kotatsu.utils.ext.inflate
|
||||
import java.io.File
|
||||
|
||||
class StorageSelectDialog private constructor(private val delegate: AlertDialog) :
|
||||
@@ -66,7 +66,7 @@ class StorageSelectDialog private constructor(private val delegate: AlertDialog)
|
||||
val volumes = getAvailableVolumes(storageManager)
|
||||
|
||||
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
|
||||
val view = convertView ?: parent.inflate(R.layout.item_storage)
|
||||
val view = convertView ?: LayoutInflater.from(parent.context).inflate(R.layout.item_storage, parent, false)
|
||||
val binding = (view.tag as? ItemStorageBinding) ?: ItemStorageBinding.bind(view).also {
|
||||
view.tag = it
|
||||
}
|
||||
|
||||
@@ -13,12 +13,12 @@ import android.graphics.drawable.shapes.RectShape
|
||||
import android.util.AttributeSet
|
||||
import androidx.annotation.AttrRes
|
||||
import androidx.appcompat.widget.AppCompatCheckedTextView
|
||||
import androidx.core.content.res.use
|
||||
import androidx.core.content.withStyledAttributes
|
||||
import com.google.android.material.ripple.RippleUtils
|
||||
import com.google.android.material.shape.MaterialShapeDrawable
|
||||
import com.google.android.material.shape.ShapeAppearanceModel
|
||||
import org.koitharu.kotatsu.R
|
||||
import org.koitharu.kotatsu.utils.ext.getThemeColorStateList
|
||||
|
||||
@SuppressLint("RestrictedApi")
|
||||
class ListItemTextView @JvmOverloads constructor(
|
||||
@@ -119,8 +119,7 @@ class ListItemTextView @JvmOverloads constructor(
|
||||
}
|
||||
|
||||
private fun getRippleColorFallback(context: Context): ColorStateList {
|
||||
return context.obtainStyledAttributes(intArrayOf(android.R.attr.colorControlHighlight)).use {
|
||||
it.getColorStateList(0)
|
||||
} ?: ColorStateList.valueOf(Color.TRANSPARENT)
|
||||
return context.getThemeColorStateList(android.R.attr.colorControlHighlight)
|
||||
?: ColorStateList.valueOf(Color.TRANSPARENT)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
package org.koitharu.kotatsu.base.ui.widgets
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.Gravity
|
||||
import android.view.View
|
||||
import android.view.WindowInsets
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.LinearLayout
|
||||
import androidx.annotation.AttrRes
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
|
||||
class WindowInsetHolder @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
@AttrRes defStyleAttr: Int = 0,
|
||||
) : View(context, attrs, defStyleAttr) {
|
||||
|
||||
private var desiredHeight = 0
|
||||
private var desiredWidth = 0
|
||||
|
||||
@SuppressLint("RtlHardcoded")
|
||||
override fun dispatchApplyWindowInsets(insets: WindowInsets): WindowInsets {
|
||||
val barsInsets = WindowInsetsCompat.toWindowInsetsCompat(insets, this)
|
||||
.getInsets(WindowInsetsCompat.Type.systemBars())
|
||||
val gravity = getLayoutGravity()
|
||||
val newWidth = when (gravity and Gravity.HORIZONTAL_GRAVITY_MASK) {
|
||||
Gravity.LEFT -> barsInsets.left
|
||||
Gravity.RIGHT -> barsInsets.right
|
||||
else -> 0
|
||||
}
|
||||
val newHeight = when (gravity and Gravity.VERTICAL_GRAVITY_MASK) {
|
||||
Gravity.TOP -> barsInsets.top
|
||||
Gravity.BOTTOM -> barsInsets.bottom
|
||||
else -> 0
|
||||
}
|
||||
if (newWidth != desiredWidth || newHeight != desiredHeight) {
|
||||
desiredWidth = newWidth
|
||||
desiredHeight = newHeight
|
||||
requestLayout()
|
||||
}
|
||||
return super.dispatchApplyWindowInsets(insets)
|
||||
}
|
||||
|
||||
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
|
||||
val widthMode = MeasureSpec.getMode(widthMeasureSpec)
|
||||
val heightMode = MeasureSpec.getMode(heightMeasureSpec)
|
||||
super.onMeasure(
|
||||
if (desiredWidth == 0 || widthMode == MeasureSpec.EXACTLY) {
|
||||
widthMeasureSpec
|
||||
} else {
|
||||
MeasureSpec.makeMeasureSpec(desiredWidth, widthMode)
|
||||
},
|
||||
if (desiredHeight == 0 || heightMode == MeasureSpec.EXACTLY) {
|
||||
heightMeasureSpec
|
||||
} else {
|
||||
MeasureSpec.makeMeasureSpec(desiredHeight, heightMode)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
private fun getLayoutGravity(): Int {
|
||||
return when (val lp = layoutParams) {
|
||||
is FrameLayout.LayoutParams -> lp.gravity
|
||||
is LinearLayout.LayoutParams -> lp.gravity
|
||||
is CoordinatorLayout.LayoutParams -> lp.gravity
|
||||
else -> Gravity.NO_GRAVITY
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,10 @@ import androidx.collection.arraySetOf
|
||||
import androidx.core.content.edit
|
||||
import androidx.preference.PreferenceManager
|
||||
import com.google.android.material.color.DynamicColors
|
||||
import java.io.File
|
||||
import java.text.DateFormat
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
import kotlinx.coroutines.channels.awaitClose
|
||||
import kotlinx.coroutines.channels.trySendBlocking
|
||||
import kotlinx.coroutines.flow.callbackFlow
|
||||
@@ -19,10 +23,6 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.utils.ext.getEnumValue
|
||||
import org.koitharu.kotatsu.utils.ext.putEnumValue
|
||||
import org.koitharu.kotatsu.utils.ext.toUriOrNull
|
||||
import java.io.File
|
||||
import java.text.DateFormat
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
||||
class AppSettings(context: Context) {
|
||||
|
||||
@@ -281,4 +281,4 @@ class AppSettings(context: Context) {
|
||||
private val isSamsung
|
||||
get() = Build.MANUFACTURER.equals("samsung", ignoreCase = true)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import android.os.Bundle
|
||||
import android.text.Spanned
|
||||
import android.text.method.LinkMovementMethod
|
||||
import android.view.*
|
||||
import androidx.appcompat.widget.PopupMenu
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.graphics.Insets
|
||||
import androidx.core.net.toUri
|
||||
@@ -224,14 +225,16 @@ class DetailsFragment :
|
||||
if (viewModel.readingHistory.value == null) {
|
||||
return false
|
||||
}
|
||||
v.showPopupMenu(R.menu.popup_read) {
|
||||
when (it.itemId) {
|
||||
val menu = PopupMenu(v.context, v)
|
||||
menu.inflate(R.menu.popup_read)
|
||||
menu.setOnMenuItemClickListener { menuItem ->
|
||||
when (menuItem.itemId) {
|
||||
R.id.action_read -> {
|
||||
val branch = viewModel.selectedBranchValue
|
||||
startActivity(
|
||||
ReaderActivity.newIntent(
|
||||
context = context ?: return@showPopupMenu false,
|
||||
manga = viewModel.manga.value ?: return@showPopupMenu false,
|
||||
context = context ?: return@setOnMenuItemClickListener false,
|
||||
manga = viewModel.manga.value ?: return@setOnMenuItemClickListener false,
|
||||
state = viewModel.chapters.value?.firstOrNull { c ->
|
||||
c.chapter.branch == branch
|
||||
}?.let { c ->
|
||||
@@ -244,6 +247,7 @@ class DetailsFragment :
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
menu.show()
|
||||
return true
|
||||
}
|
||||
else -> return false
|
||||
|
||||
@@ -141,8 +141,9 @@ class DownloadManager(
|
||||
}
|
||||
val localManga = localMangaRepository.getFromFile(output.file)
|
||||
outState.value = DownloadState.Done(startId, data, cover, localManga)
|
||||
} catch (_: CancellationException) {
|
||||
} catch (e: CancellationException) {
|
||||
outState.value = DownloadState.Cancelled(startId, manga, cover)
|
||||
throw e
|
||||
} catch (e: Throwable) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
e.printStackTrace()
|
||||
|
||||
@@ -24,7 +24,7 @@ class ForegroundNotificationSwitcher(
|
||||
@Synchronized
|
||||
fun notify(startId: Int, notification: Notification) {
|
||||
if (notifications.isEmpty()) {
|
||||
StartForegroundRunnable(startId, notification)
|
||||
service.startForeground(startId, notification)
|
||||
} else {
|
||||
notificationManager.notify(startId, notification)
|
||||
}
|
||||
@@ -46,16 +46,6 @@ class ForegroundNotificationSwitcher(
|
||||
handler.postDelayed(NotifyRunnable(startId, notification), DEFAULT_DELAY)
|
||||
}
|
||||
|
||||
private inner class StartForegroundRunnable(
|
||||
private val startId: Int,
|
||||
private val notification: Notification,
|
||||
) : Runnable {
|
||||
|
||||
override fun run() {
|
||||
service.startForeground(startId, notification)
|
||||
}
|
||||
}
|
||||
|
||||
private inner class NotifyRunnable(
|
||||
private val startId: Int,
|
||||
private val notification: Notification?,
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.koitharu.kotatsu.favourites.ui
|
||||
import android.os.Bundle
|
||||
import android.view.*
|
||||
import androidx.appcompat.view.ActionMode
|
||||
import androidx.appcompat.widget.PopupMenu
|
||||
import androidx.core.graphics.Insets
|
||||
import androidx.core.view.children
|
||||
import androidx.core.view.updateLayoutParams
|
||||
@@ -10,7 +11,6 @@ import androidx.core.view.updatePadding
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import com.google.android.material.tabs.TabLayout
|
||||
import com.google.android.material.tabs.TabLayoutMediator
|
||||
import java.util.*
|
||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||
import org.koitharu.kotatsu.R
|
||||
import org.koitharu.kotatsu.base.ui.BaseFragment
|
||||
@@ -25,7 +25,7 @@ import org.koitharu.kotatsu.main.ui.AppBarOwner
|
||||
import org.koitharu.kotatsu.parsers.model.SortOrder
|
||||
import org.koitharu.kotatsu.utils.ext.getDisplayMessage
|
||||
import org.koitharu.kotatsu.utils.ext.measureHeight
|
||||
import org.koitharu.kotatsu.utils.ext.showPopupMenu
|
||||
import java.util.*
|
||||
|
||||
class FavouritesContainerFragment :
|
||||
BaseFragment<FragmentFavouritesBinding>(),
|
||||
@@ -123,22 +123,24 @@ class FavouritesContainerFragment :
|
||||
|
||||
override fun onTabLongClick(tabView: View, category: FavouriteCategory): Boolean {
|
||||
val menuRes = if (category.id == 0L) R.menu.popup_category_empty else R.menu.popup_category
|
||||
tabView.showPopupMenu(menuRes, { menu ->
|
||||
createOrderSubmenu(menu, category)
|
||||
}) {
|
||||
val menu = PopupMenu(tabView.context, tabView)
|
||||
menu.inflate(menuRes)
|
||||
createOrderSubmenu(menu.menu, category)
|
||||
menu.setOnMenuItemClickListener {
|
||||
when (it.itemId) {
|
||||
R.id.action_remove -> editDelegate.deleteCategory(category)
|
||||
R.id.action_rename -> editDelegate.renameCategory(category)
|
||||
R.id.action_create -> editDelegate.createCategory()
|
||||
R.id.action_order -> return@showPopupMenu false
|
||||
R.id.action_order -> return@setOnMenuItemClickListener false
|
||||
else -> {
|
||||
val order = CategoriesActivity.SORT_ORDERS.getOrNull(it.order)
|
||||
?: return@showPopupMenu false
|
||||
?: return@setOnMenuItemClickListener false
|
||||
viewModel.setCategoryOrder(category.id, order)
|
||||
}
|
||||
}
|
||||
true
|
||||
}
|
||||
menu.show()
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import android.os.Bundle
|
||||
import android.view.Menu
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.widget.PopupMenu
|
||||
import androidx.core.graphics.Insets
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.core.view.updateLayoutParams
|
||||
@@ -23,11 +24,12 @@ import org.koitharu.kotatsu.databinding.ActivityCategoriesBinding
|
||||
import org.koitharu.kotatsu.parsers.model.SortOrder
|
||||
import org.koitharu.kotatsu.utils.ext.getDisplayMessage
|
||||
import org.koitharu.kotatsu.utils.ext.measureHeight
|
||||
import org.koitharu.kotatsu.utils.ext.showPopupMenu
|
||||
|
||||
class CategoriesActivity : BaseActivity<ActivityCategoriesBinding>(),
|
||||
class CategoriesActivity :
|
||||
BaseActivity<ActivityCategoriesBinding>(),
|
||||
OnListItemClickListener<FavouriteCategory>,
|
||||
View.OnClickListener, CategoriesEditDelegate.CategoriesEditCallback {
|
||||
View.OnClickListener,
|
||||
CategoriesEditDelegate.CategoriesEditCallback {
|
||||
|
||||
private val viewModel by viewModel<FavouritesCategoriesViewModel>()
|
||||
|
||||
@@ -58,26 +60,27 @@ class CategoriesActivity : BaseActivity<ActivityCategoriesBinding>(),
|
||||
}
|
||||
|
||||
override fun onItemClick(item: FavouriteCategory, view: View) {
|
||||
view.showPopupMenu(R.menu.popup_category, { menu ->
|
||||
createOrderSubmenu(menu, item)
|
||||
}) {
|
||||
when (it.itemId) {
|
||||
val menu = PopupMenu(view.context, view)
|
||||
menu.inflate(R.menu.popup_category)
|
||||
createOrderSubmenu(menu.menu, item)
|
||||
menu.setOnMenuItemClickListener { menuItem ->
|
||||
when (menuItem.itemId) {
|
||||
R.id.action_remove -> editDelegate.deleteCategory(item)
|
||||
R.id.action_rename -> editDelegate.renameCategory(item)
|
||||
R.id.action_order -> return@showPopupMenu false
|
||||
R.id.action_order -> return@setOnMenuItemClickListener false
|
||||
else -> {
|
||||
val order = SORT_ORDERS.getOrNull(it.order) ?: return@showPopupMenu false
|
||||
val order = SORT_ORDERS.getOrNull(menuItem.order) ?: return@setOnMenuItemClickListener false
|
||||
viewModel.setCategoryOrder(item.id, order)
|
||||
}
|
||||
}
|
||||
true
|
||||
}
|
||||
menu.show()
|
||||
}
|
||||
|
||||
override fun onItemLongClick(item: FavouriteCategory, view: View): Boolean {
|
||||
reorderHelper.startDrag(
|
||||
binding.recyclerView.findContainingViewHolder(view) ?: return false
|
||||
)
|
||||
val viewHolder = binding.recyclerView.findContainingViewHolder(view) ?: return false
|
||||
reorderHelper.startDrag(viewHolder)
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -90,7 +93,7 @@ class CategoriesActivity : BaseActivity<ActivityCategoriesBinding>(),
|
||||
binding.recyclerView.updatePadding(
|
||||
left = insets.left,
|
||||
right = insets.right,
|
||||
bottom = 2 * insets.bottom + binding.fabAdd.measureHeight()
|
||||
bottom = 2 * insets.bottom + binding.fabAdd.measureHeight(),
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ class ListModeSelectDialog : AlertDialogFragment<DialogListModeBinding>(),
|
||||
binding.textViewGridTitle.isVisible = mode == ListMode.GRID
|
||||
binding.sliderGrid.isVisible = mode == ListMode.GRID
|
||||
|
||||
binding.sliderGrid.setLabelFormatter(IntPercentLabelFormatter())
|
||||
binding.sliderGrid.setLabelFormatter(IntPercentLabelFormatter(view.context))
|
||||
binding.sliderGrid.setValueRounded(settings.gridSize.toFloat())
|
||||
binding.sliderGrid.addOnSliderTouchListener(this)
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ class MangaSelectionDecoration(context: Context) : AbstractSelectionItemDecorati
|
||||
|
||||
override fun getItemId(parent: RecyclerView, child: View): Long {
|
||||
val holder = parent.getChildViewHolder(child) ?: return NO_ID
|
||||
val item = holder.getItem<MangaItemModel>() ?: return NO_ID
|
||||
val item = holder.getItem(MangaItemModel::class.java) ?: return NO_ID
|
||||
return item.id
|
||||
}
|
||||
|
||||
|
||||
@@ -143,7 +143,8 @@ class ReaderViewModel(
|
||||
val page = getCurrentPage() ?: error("Page not found")
|
||||
externalStorageHelper.savePage(page, destination)
|
||||
onPageSaved.postCall(destination)
|
||||
} catch (_: CancellationException) {
|
||||
} catch (e: CancellationException) {
|
||||
throw e
|
||||
} catch (e: Exception) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
e.printStackTrace()
|
||||
|
||||
@@ -109,7 +109,7 @@ class PageHolderDelegate(
|
||||
state = State.LOADED
|
||||
callback.onImageReady(file.toUri())
|
||||
} catch (e: CancellationException) {
|
||||
// do nothing
|
||||
throw e
|
||||
} catch (e: Exception) {
|
||||
state = State.ERROR
|
||||
error = e
|
||||
|
||||
@@ -14,7 +14,7 @@ import org.koitharu.kotatsu.reader.ui.pager.BaseReaderAdapter
|
||||
import org.koitharu.kotatsu.reader.ui.pager.ReaderPage
|
||||
import org.koitharu.kotatsu.utils.ext.doOnCurrentItemChanged
|
||||
import org.koitharu.kotatsu.utils.ext.findCenterViewPosition
|
||||
import org.koitharu.kotatsu.utils.ext.firstItem
|
||||
import org.koitharu.kotatsu.utils.ext.firstVisibleItemPosition
|
||||
import org.koitharu.kotatsu.utils.ext.viewLifecycleScope
|
||||
|
||||
class WebtoonReaderFragment : BaseReader<FragmentReaderWebtoonBinding>() {
|
||||
@@ -52,7 +52,7 @@ class WebtoonReaderFragment : BaseReader<FragmentReaderWebtoonBinding>() {
|
||||
setItems.await() ?: return@launchWhenCreated
|
||||
if (position != -1) {
|
||||
with(binding.recyclerView) {
|
||||
firstItem = position
|
||||
firstVisibleItemPosition = position
|
||||
post {
|
||||
(findViewHolderForAdapterPosition(position) as? WebtoonHolder)
|
||||
?.restoreScroll(pendingState.scroll)
|
||||
@@ -91,6 +91,6 @@ class WebtoonReaderFragment : BaseReader<FragmentReaderWebtoonBinding>() {
|
||||
}
|
||||
|
||||
override fun switchPageTo(position: Int, smooth: Boolean) {
|
||||
binding.recyclerView.firstItem = position
|
||||
binding.recyclerView.firstVisibleItemPosition = position
|
||||
}
|
||||
}
|
||||
@@ -31,7 +31,7 @@ class SearchSuggestionItemCallback(
|
||||
): Boolean = false
|
||||
|
||||
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
|
||||
val item = viewHolder.getItem<SearchSuggestionItem.RecentQuery>() ?: return
|
||||
val item = viewHolder.getItem(SearchSuggestionItem.RecentQuery::class.java) ?: return
|
||||
listener.onRemoveQuery(item.query)
|
||||
}
|
||||
|
||||
|
||||
@@ -25,9 +25,10 @@ class AppearanceSettingsFragment :
|
||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||
addPreferencesFromResource(R.xml.pref_appearance)
|
||||
findPreference<SliderPreference>(AppSettings.KEY_GRID_SIZE)?.run {
|
||||
summary = "%d%%".format(value)
|
||||
val pattern = context.getString(R.string.percent_string_pattern)
|
||||
summary = pattern.format(value.toString())
|
||||
setOnPreferenceChangeListener { preference, newValue ->
|
||||
preference.summary = "%d%%".format(newValue)
|
||||
preference.summary = pattern.format(newValue.toString())
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ val settingsModule
|
||||
|
||||
single { BackupRepository(get()) }
|
||||
single { RestoreRepository(get()) }
|
||||
single { AppSettings(androidContext()) }
|
||||
single(createdAtStart = true) { AppSettings(androidContext()) }
|
||||
|
||||
viewModel { BackupViewModel(get(), androidContext()) }
|
||||
viewModel { params ->
|
||||
|
||||
@@ -2,8 +2,8 @@ package org.koitharu.kotatsu.utils
|
||||
|
||||
import android.view.View
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||
import com.google.android.material.R as materialR
|
||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||
|
||||
open class BottomSheetToolbarController(
|
||||
protected val toolbar: Toolbar,
|
||||
@@ -17,7 +17,5 @@ open class BottomSheetToolbarController(
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSlide(bottomSheet: View, slideOffset: Float) {
|
||||
|
||||
}
|
||||
override fun onSlide(bottomSheet: View, slideOffset: Float) = Unit
|
||||
}
|
||||
@@ -32,4 +32,4 @@ enum class FileSize(private val multiplier: Int) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,8 +5,10 @@ import android.view.GestureDetector
|
||||
import android.view.MotionEvent
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
class GridTouchHelper(context: Context, private val listener: OnGridTouchListener) :
|
||||
GestureDetector.SimpleOnGestureListener() {
|
||||
class GridTouchHelper(
|
||||
context: Context,
|
||||
private val listener: OnGridTouchListener
|
||||
) : GestureDetector.SimpleOnGestureListener() {
|
||||
|
||||
private val detector = GestureDetector(context, this)
|
||||
private val width = context.resources.displayMetrics.widthPixels
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
package org.koitharu.kotatsu.utils
|
||||
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
|
||||
class SelectionController {
|
||||
|
||||
private val state = MutableStateFlow(emptySet<Int>())
|
||||
|
||||
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
package org.koitharu.kotatsu.utils
|
||||
|
||||
class WordSet(private vararg val words: String) {
|
||||
|
||||
fun anyWordIn(dateString: String): Boolean = words.any {
|
||||
dateString.contains(it, ignoreCase = true)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,16 +1,14 @@
|
||||
package org.koitharu.kotatsu.utils.ext
|
||||
|
||||
import android.content.res.Resources
|
||||
import android.util.Log
|
||||
import java.io.FileNotFoundException
|
||||
import java.net.SocketTimeoutException
|
||||
import org.koitharu.kotatsu.R
|
||||
import org.koitharu.kotatsu.core.exceptions.CloudFlareProtectedException
|
||||
import org.koitharu.kotatsu.core.exceptions.EmptyHistoryException
|
||||
import org.koitharu.kotatsu.core.exceptions.UnsupportedFileException
|
||||
import org.koitharu.kotatsu.core.exceptions.WrongPasswordException
|
||||
import org.koitharu.kotatsu.parsers.exception.AuthRequiredException
|
||||
import org.koitharu.kotatsu.parsers.util.format
|
||||
import java.io.FileNotFoundException
|
||||
import java.net.SocketTimeoutException
|
||||
|
||||
fun Throwable.getDisplayMessage(resources: Resources) = when (this) {
|
||||
is AuthRequiredException -> resources.getString(R.string.auth_required)
|
||||
@@ -22,12 +20,4 @@ fun Throwable.getDisplayMessage(resources: Resources) = when (this) {
|
||||
is SocketTimeoutException -> resources.getString(R.string.network_error)
|
||||
is WrongPasswordException -> resources.getString(R.string.wrong_password)
|
||||
else -> localizedMessage ?: resources.getString(R.string.error_occurred)
|
||||
}
|
||||
|
||||
inline fun <T> measured(tag: String, block: () -> T): T {
|
||||
val time = System.currentTimeMillis()
|
||||
val res = block()
|
||||
val spent = System.currentTimeMillis() - time
|
||||
Log.d("measured", "$tag ${spent.format(1)} ms")
|
||||
return res
|
||||
}
|
||||
@@ -3,10 +3,8 @@ package org.koitharu.kotatsu.utils.ext
|
||||
import androidx.lifecycle.LifecycleCoroutineScope
|
||||
import androidx.lifecycle.ProcessLifecycleOwner
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.coroutines.CoroutineExceptionHandler
|
||||
import org.koitharu.kotatsu.BuildConfig
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
import kotlin.coroutines.EmptyCoroutineContext
|
||||
|
||||
val IgnoreErrors
|
||||
get() = CoroutineExceptionHandler { _, e ->
|
||||
|
||||
@@ -15,6 +15,6 @@ fun Date.formatRelative(minResolution: Long): CharSequence = DateUtils.getRelati
|
||||
|
||||
fun Date.daysDiff(other: Long): Int {
|
||||
val thisDay = time / TimeUnit.DAYS.toMillis(1L)
|
||||
val otherDay = other/ TimeUnit.DAYS.toMillis(1L)
|
||||
val otherDay = other / TimeUnit.DAYS.toMillis(1L)
|
||||
return (thisDay - otherDay).toInt()
|
||||
}
|
||||
@@ -26,11 +26,12 @@ fun <T : Parcelable> Fragment.parcelableArgument(name: String): Lazy<T> {
|
||||
}
|
||||
}
|
||||
|
||||
inline fun <reified T : Serializable> Fragment.serializableArgument(name: String): Lazy<T> {
|
||||
fun <T : Serializable> Fragment.serializableArgument(name: String): Lazy<T> {
|
||||
return lazy(LazyThreadSafetyMode.NONE) {
|
||||
requireNotNull(arguments?.getSerializable(name) as? T) {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
requireNotNull(arguments?.getSerializable(name)) {
|
||||
"No argument $name passed into ${javaClass.simpleName}"
|
||||
}
|
||||
} as T
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,10 +4,10 @@ import androidx.lifecycle.LifecycleOwner
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.lifecycle.liveData
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import org.koitharu.kotatsu.utils.BufferedObserver
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
import kotlin.coroutines.EmptyCoroutineContext
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import org.koitharu.kotatsu.utils.BufferedObserver
|
||||
|
||||
fun <T> LiveData<T?>.observeNotNull(owner: LifecycleOwner, observer: Observer<T>) {
|
||||
this.observe(owner) {
|
||||
|
||||
@@ -9,17 +9,17 @@ fun ListPreference.setDefaultValueCompat(defaultValue: String) {
|
||||
}
|
||||
}
|
||||
|
||||
fun <E: Enum<E>> SharedPreferences.getEnumValue(key: String, enumClass: Class<E>): E? {
|
||||
fun <E : Enum<E>> SharedPreferences.getEnumValue(key: String, enumClass: Class<E>): E? {
|
||||
val stringValue = getString(key, null) ?: return null
|
||||
return enumClass.enumConstants?.find {
|
||||
it.name == stringValue
|
||||
}
|
||||
}
|
||||
|
||||
fun <E: Enum<E>> SharedPreferences.getEnumValue(key: String, defaultValue: E): E {
|
||||
fun <E : Enum<E>> SharedPreferences.getEnumValue(key: String, defaultValue: E): E {
|
||||
return getEnumValue(key, defaultValue.javaClass) ?: defaultValue
|
||||
}
|
||||
|
||||
fun <E: Enum<E>> SharedPreferences.Editor.putEnumValue(key: String, value: E?) {
|
||||
fun <E : Enum<E>> SharedPreferences.Editor.putEnumValue(key: String, value: E?) {
|
||||
putString(key, value?.name)
|
||||
}
|
||||
@@ -5,12 +5,11 @@ import android.view.View
|
||||
import android.widget.TextView
|
||||
import androidx.annotation.AttrRes
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.core.content.res.use
|
||||
import androidx.core.view.isGone
|
||||
|
||||
var TextView.textAndVisible: CharSequence?
|
||||
inline get() = text?.takeIf { visibility == View.VISIBLE }
|
||||
inline set(value) {
|
||||
get() = text?.takeIf { visibility == View.VISIBLE }
|
||||
set(value) {
|
||||
text = value
|
||||
isGone = value.isNullOrEmpty()
|
||||
}
|
||||
@@ -40,8 +39,5 @@ fun TextView.setTextAndVisible(@StringRes textResId: Int) {
|
||||
}
|
||||
|
||||
fun TextView.setTextColorAttr(@AttrRes attrResId: Int) {
|
||||
val colors = context.obtainStyledAttributes(intArrayOf(attrResId)).use {
|
||||
it.getColorStateList(0)
|
||||
}
|
||||
setTextColor(colors)
|
||||
setTextColor(context.getThemeColorStateList(attrResId))
|
||||
}
|
||||
@@ -4,20 +4,24 @@ import android.content.Context
|
||||
import android.graphics.Color
|
||||
import androidx.annotation.AttrRes
|
||||
import androidx.annotation.ColorInt
|
||||
import androidx.annotation.Px
|
||||
import androidx.core.content.res.use
|
||||
|
||||
@Px
|
||||
fun Context.getThemeDimen(@AttrRes resId: Int) = obtainStyledAttributes(intArrayOf(resId)).use {
|
||||
it.getDimension(0, 0f)
|
||||
}
|
||||
|
||||
fun Context.getThemeDrawable(@AttrRes resId: Int) = obtainStyledAttributes(intArrayOf(resId)).use {
|
||||
fun Context.getThemeDrawable(
|
||||
@AttrRes resId: Int,
|
||||
) = obtainStyledAttributes(intArrayOf(resId)).use {
|
||||
it.getDrawable(0)
|
||||
}
|
||||
|
||||
@ColorInt
|
||||
fun Context.getThemeColor(@AttrRes resId: Int, @ColorInt default: Int = Color.TRANSPARENT) =
|
||||
obtainStyledAttributes(intArrayOf(resId)).use {
|
||||
it.getColor(0, default)
|
||||
}
|
||||
fun Context.getThemeColor(
|
||||
@AttrRes resId: Int,
|
||||
@ColorInt default: Int = Color.TRANSPARENT
|
||||
) = obtainStyledAttributes(intArrayOf(resId)).use {
|
||||
it.getColor(0, default)
|
||||
}
|
||||
|
||||
fun Context.getThemeColorStateList(
|
||||
@AttrRes resId: Int,
|
||||
) = obtainStyledAttributes(intArrayOf(resId)).use {
|
||||
it.getColorStateList(0)
|
||||
}
|
||||
@@ -2,20 +2,15 @@ package org.koitharu.kotatsu.utils.ext
|
||||
|
||||
import android.app.Activity
|
||||
import android.graphics.Rect
|
||||
import android.view.LayoutInflater
|
||||
import android.view.Menu
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
import androidx.annotation.LayoutRes
|
||||
import androidx.annotation.MenuRes
|
||||
import androidx.appcompat.widget.PopupMenu
|
||||
import androidx.core.view.children
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.viewpager2.widget.ViewPager2
|
||||
import com.google.android.material.slider.Slider
|
||||
import com.hannesdorfmann.adapterdelegates4.dsl.AdapterDelegateViewBindingViewHolder
|
||||
import com.hannesdorfmann.adapterdelegates4.dsl.AdapterDelegateViewHolder
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
fun View.hideKeyboard() {
|
||||
@@ -28,19 +23,15 @@ fun View.showKeyboard() {
|
||||
imm.showSoftInput(this, 0)
|
||||
}
|
||||
|
||||
inline fun <reified T : View> ViewGroup.inflate(@LayoutRes resId: Int) =
|
||||
LayoutInflater.from(context).inflate(resId, this, false) as T
|
||||
|
||||
val RecyclerView.hasItems: Boolean
|
||||
get() = (adapter?.itemCount ?: 0) > 0
|
||||
|
||||
fun RecyclerView.clearItemDecorations() {
|
||||
suppressLayout(true)
|
||||
while (itemDecorationCount > 0) {
|
||||
removeItemDecorationAt(0)
|
||||
}
|
||||
suppressLayout(false)
|
||||
}
|
||||
|
||||
var RecyclerView.firstItem: Int
|
||||
var RecyclerView.firstVisibleItemPosition: Int
|
||||
get() = (layoutManager as? LinearLayoutManager)?.findFirstVisibleItemPosition()
|
||||
?: RecyclerView.NO_POSITION
|
||||
set(value) {
|
||||
@@ -49,18 +40,6 @@ var RecyclerView.firstItem: Int
|
||||
}
|
||||
}
|
||||
|
||||
inline fun View.showPopupMenu(
|
||||
@MenuRes menuRes: Int,
|
||||
onPrepare: (Menu) -> Unit = {},
|
||||
onItemClick: PopupMenu.OnMenuItemClickListener,
|
||||
) {
|
||||
val menu = PopupMenu(context, this)
|
||||
menu.inflate(menuRes)
|
||||
menu.setOnMenuItemClickListener(onItemClick)
|
||||
onPrepare(menu.menu)
|
||||
menu.show()
|
||||
}
|
||||
|
||||
fun View.hasGlobalPoint(x: Int, y: Int): Boolean {
|
||||
if (visibility != View.VISIBLE) {
|
||||
return false
|
||||
@@ -97,7 +76,7 @@ inline fun ViewPager2.doOnPageChanged(crossinline callback: (Int) -> Unit) {
|
||||
}
|
||||
|
||||
val ViewPager2.recyclerView: RecyclerView?
|
||||
inline get() = children.find { it is RecyclerView } as? RecyclerView
|
||||
get() = children.firstNotNullOfOrNull { it as? RecyclerView }
|
||||
|
||||
fun View.resetTransformations() {
|
||||
alpha = 1f
|
||||
@@ -106,6 +85,7 @@ fun View.resetTransformations() {
|
||||
translationZ = 0f
|
||||
scaleX = 1f
|
||||
scaleY = 1f
|
||||
rotation = 0f
|
||||
rotationX = 0f
|
||||
rotationY = 0f
|
||||
}
|
||||
@@ -133,8 +113,17 @@ fun RecyclerView.findCenterViewPosition(): Int {
|
||||
return getChildAdapterPosition(view)
|
||||
}
|
||||
|
||||
inline fun <reified T> RecyclerView.ViewHolder.getItem(): T? {
|
||||
return ((this as? AdapterDelegateViewBindingViewHolder<*, *>)?.item as? T)
|
||||
fun <T> RecyclerView.ViewHolder.getItem(clazz: Class<T>): T? {
|
||||
val rawItem = when (this) {
|
||||
is AdapterDelegateViewBindingViewHolder<*, *> -> item
|
||||
is AdapterDelegateViewHolder<*> -> item
|
||||
else -> null
|
||||
} ?: return null
|
||||
return if (clazz.isAssignableFrom(rawItem.javaClass)) {
|
||||
clazz.cast(rawItem)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
fun Slider.setValueRounded(newValue: Float) {
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
package org.koitharu.kotatsu.utils.progress
|
||||
|
||||
import android.content.Context
|
||||
import com.google.android.material.slider.LabelFormatter
|
||||
import org.koitharu.kotatsu.R
|
||||
|
||||
class IntPercentLabelFormatter : LabelFormatter {
|
||||
override fun getFormattedValue(value: Float) = "%d%%".format(value.toInt())
|
||||
class IntPercentLabelFormatter(context: Context) : LabelFormatter {
|
||||
|
||||
private val pattern = context.getString(R.string.percent_string_pattern)
|
||||
|
||||
override fun getFormattedValue(value: Float) = pattern.format(value.toInt().toString())
|
||||
}
|
||||
@@ -32,6 +32,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="16dp"
|
||||
android:background="@null"
|
||||
android:paddingRight="16dp"
|
||||
app:elevation="0dp"
|
||||
app:liftOnScroll="false">
|
||||
@@ -81,8 +82,6 @@
|
||||
android:text="@string/_continue"
|
||||
android:visibility="gone"
|
||||
app:backgroundTint="?attr/colorContainer"
|
||||
app:behavior_autoHide="true"
|
||||
app:behavior_autoShrink="true"
|
||||
app:icon="@drawable/ic_read"
|
||||
app:layout_anchor="@id/container"
|
||||
app:layout_anchorGravity="bottom|end"
|
||||
|
||||
@@ -75,8 +75,6 @@
|
||||
android:text="@string/_continue"
|
||||
android:visibility="gone"
|
||||
app:backgroundTint="?attr/colorContainer"
|
||||
app:behavior_autoHide="true"
|
||||
app:behavior_autoShrink="true"
|
||||
app:icon="@drawable/ic_read"
|
||||
app:layout_anchor="@id/container"
|
||||
app:layout_anchorGravity="bottom|end"
|
||||
|
||||
@@ -53,8 +53,8 @@
|
||||
<string name="clear">Ачысціць</string>
|
||||
<string name="text_clear_history_prompt">Вы ўпэўненыя, што жадаеце ачысціць гісторыю\?</string>
|
||||
<string name="remove">Выдаліць</string>
|
||||
<string name="_s_removed_from_history">\"%s\" выдалена з гiсторыi</string>
|
||||
<string name="_s_deleted_from_local_storage">\"%s\" выдалена з прылады</string>
|
||||
<string name="_s_removed_from_history">«%s» выдалена з гiсторыi</string>
|
||||
<string name="_s_deleted_from_local_storage">«%s» выдалена з прылады</string>
|
||||
<string name="wait_for_loading_finish">Дачакайцеся заканчэння загрузкі…</string>
|
||||
<string name="save_page">Захаваць старонку</string>
|
||||
<string name="page_saved">Старонка захавана</string>
|
||||
@@ -76,7 +76,7 @@
|
||||
<string name="delete_manga">Выдаліць мангу</string>
|
||||
<string name="reader_settings">Налады чытання</string>
|
||||
<string name="switch_pages">Гартанне старонак</string>
|
||||
<string name="text_delete_local_manga">Вы ўпэўненыя, што жадаеце выдаліць \"%s\" з прылады\?</string>
|
||||
<string name="text_delete_local_manga">Вы ўпэўненыя, што жадаеце выдаліць «%s» з прылады\?</string>
|
||||
<string name="taps_on_edges">Націск па краях</string>
|
||||
<string name="volume_buttons">Кнопкі гучнасці</string>
|
||||
<string name="_continue">Працягнцуць</string>
|
||||
@@ -112,7 +112,7 @@
|
||||
<string name="favourites_categories">Катэгорыі абранага</string>
|
||||
<string name="categories_">Катэгорыi…</string>
|
||||
<string name="rename">Перайменаваць</string>
|
||||
<string name="category_delete_confirm">Вы ўпэўнены, што хочаце выдаліць катэгорыю \"%s\"\?
|
||||
<string name="category_delete_confirm">Вы ўпэўнены, што хочаце выдаліць катэгорыю «%s»\?
|
||||
\nУся манга з дадзенай катэгорыі будзе страчана.</string>
|
||||
<string name="remove_category">Выдаліць катэгорыю</string>
|
||||
<string name="text_categories_holder">Катэгорыі дапамагаюць упарадкоўваць абраную мангу. Націсніце «+», каб стварыць катэгорыю</string>
|
||||
@@ -217,7 +217,7 @@
|
||||
<string name="chapter_is_missing_text">Гэтая глава адсутнічае на вашай прыладзе. Спампуйце ціпрачытайце яе онлайн.</string>
|
||||
<string name="text_downloads_holder">На дадзены момант няма актыўных спамповак</string>
|
||||
<string name="queued">У чарзе</string>
|
||||
<string name="about_feedback_4pda">Тэма на 4PDA</string>
|
||||
<string name="about_feedback_4pda">Тэма на 4PDA</string>
|
||||
<string name="about_feedback">Зваротная сувязь</string>
|
||||
<string name="about_app_translation_summary">Дапамагчы з перакладам праграмы</string>
|
||||
<string name="about_app_translation">Пераклад</string>
|
||||
@@ -263,4 +263,5 @@
|
||||
<string name="various_languages">Розныя мовы</string>
|
||||
<string name="search_chapters">Знайсці главу</string>
|
||||
<string name="percent_string_pattern">%1$s%%</string>
|
||||
<string name="chapters_empty">У гэтай манзе няма глаў</string>
|
||||
</resources>
|
||||
35
app/src/main/res/values-de/plurals.xml
Normal file
35
app/src/main/res/values-de/plurals.xml
Normal file
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<plurals name="pages">
|
||||
<item quantity="one">Insgesamt %1$d Seite</item>
|
||||
<item quantity="other">Insgesamt %1$d Seiten</item>
|
||||
</plurals>
|
||||
<plurals name="items">
|
||||
<item quantity="one">%1$d Element</item>
|
||||
<item quantity="other">%1$d Elemente</item>
|
||||
</plurals>
|
||||
<plurals name="new_chapters">
|
||||
<item quantity="one">%1$d neues Kapitel</item>
|
||||
<item quantity="other">%1$d neue Kapitel</item>
|
||||
</plurals>
|
||||
<plurals name="chapters">
|
||||
<item quantity="one">%1$d Kapitel</item>
|
||||
<item quantity="other">%1$d Kapitel</item>
|
||||
</plurals>
|
||||
<plurals name="chapters_from_x">
|
||||
<item quantity="one">%1$d Kapitel aus %2$d</item>
|
||||
<item quantity="other">%1$d Kapitel aus %2$d</item>
|
||||
</plurals>
|
||||
<plurals name="minutes_ago">
|
||||
<item quantity="one">Vor %1$d Minute</item>
|
||||
<item quantity="other">Vor %1$d Minuten</item>
|
||||
</plurals>
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one">Vor %1$d Stunde</item>
|
||||
<item quantity="other">Vor %1$d Stunden</item>
|
||||
</plurals>
|
||||
<plurals name="days_ago">
|
||||
<item quantity="one">Vor %1$d Tag</item>
|
||||
<item quantity="other">Vor %1$d Tage</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -217,7 +217,7 @@
|
||||
<string name="chapter_is_missing_text">Dieses Kapitel fehlt auf deinem Gerät. Lade ihn herunter oder lese ihn online.</string>
|
||||
<string name="text_downloads_holder">Zurzeit sind keine aktiven Datenübertragungen vorhanden</string>
|
||||
<string name="queued">In Warteschlange</string>
|
||||
<string name="about_feedback_4pda">Thema auf 4PDA</string>
|
||||
<string name="about_feedback_4pda">Thema auf 4PDA</string>
|
||||
<string name="about_feedback">Rückmeldung</string>
|
||||
<string name="about_app_translation">Übersetzung</string>
|
||||
<string name="about_app_translation_summary">Diese Anwendung übersetzen</string>
|
||||
@@ -264,4 +264,12 @@
|
||||
<string name="search_chapters">Kapitel suchen</string>
|
||||
<string name="chapters_empty">Keine Kapitel in diesem Manga</string>
|
||||
<string name="percent_string_pattern">%1$s%%</string>
|
||||
<string name="appearance">Aussehen</string>
|
||||
<string name="content">Inhalt</string>
|
||||
<string name="suggestions_updating">Vorschläge werden aktualisiert</string>
|
||||
<string name="suggestions_excluded_genres">Genres ausschließen</string>
|
||||
<string name="suggestions_excluded_genres_summary">Geben Sie Genres an, die Sie nicht in den Vorschlägen sehen möchten</string>
|
||||
<string name="text_delete_local_manga_batch">Ausgewählte Elemente dauerhaft vom Gerät löschen\?</string>
|
||||
<string name="batch_manga_save_confirm">Sind Sie sicher, dass Sie alle ausgewählten Mangas mit allen Kapiteln herunterladen möchten\? Diese Aktion kann eine Menge Datenverkehr und Speicherplatz verbrauchen</string>
|
||||
<string name="removal_completed">Entfernung abgeschlossen</string>
|
||||
</resources>
|
||||
@@ -1,35 +1,35 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<plurals name="pages">
|
||||
<item quantity="one">Total %1$d página</item>
|
||||
<item quantity="other">Total %1$d páginas</item>
|
||||
</plurals>
|
||||
<plurals name="items">
|
||||
<item quantity="one">%1$d elemento</item>
|
||||
<item quantity="other">%1$d elementos</item>
|
||||
</plurals>
|
||||
<plurals name="new_chapters">
|
||||
<item quantity="one">%1$d nuevo capítulo</item>
|
||||
<item quantity="other">%1$d nuevos capítulos</item>
|
||||
</plurals>
|
||||
<plurals name="chapters">
|
||||
<item quantity="one">%1$d capítulo</item>
|
||||
<item quantity="other">%1$d capítulos</item>
|
||||
</plurals>
|
||||
<plurals name="chapters_from_x">
|
||||
<item quantity="one">%1$d capítulo desde %2$d</item>
|
||||
<item quantity="other">%1$d capítulos desde %2$d</item>
|
||||
</plurals>
|
||||
<plurals name="minutes_ago">
|
||||
<item quantity="one">%hace 1$d minuto</item>
|
||||
<item quantity="other">hace %1$d minutos</item>
|
||||
</plurals>
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one">hace %1$d hora</item>
|
||||
<item quantity="other">hace %1$d horas</item>
|
||||
</plurals>
|
||||
<plurals name="days_ago">
|
||||
<item quantity="one">hace %1$d día</item>
|
||||
<item quantity="other">hace %1$d días</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
<plurals name="pages">
|
||||
<item quantity="one">Total %1$d página</item>
|
||||
<item quantity="other">Total %1$d páginas</item>
|
||||
</plurals>
|
||||
<plurals name="items">
|
||||
<item quantity="one">%1$d elemento</item>
|
||||
<item quantity="other">%1$d elementos</item>
|
||||
</plurals>
|
||||
<plurals name="new_chapters">
|
||||
<item quantity="one">%1$d nuevo capítulo</item>
|
||||
<item quantity="other">%1$d nuevos capítulos</item>
|
||||
</plurals>
|
||||
<plurals name="chapters">
|
||||
<item quantity="one">%1$d capítulo</item>
|
||||
<item quantity="other">%1$d capítulos</item>
|
||||
</plurals>
|
||||
<plurals name="chapters_from_x">
|
||||
<item quantity="one">%1$d capítulo desde %2$d</item>
|
||||
<item quantity="other">%1$d capítulos desde %2$d</item>
|
||||
</plurals>
|
||||
<plurals name="minutes_ago">
|
||||
<item quantity="one">hace %1$d minuto</item>
|
||||
<item quantity="other">hace %1$d minutos</item>
|
||||
</plurals>
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one">hace %1$d hora</item>
|
||||
<item quantity="other">hace %1$d horas</item>
|
||||
</plurals>
|
||||
<plurals name="days_ago">
|
||||
<item quantity="one">hace %1$d día</item>
|
||||
<item quantity="other">hace %1$d días</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -205,8 +205,8 @@
|
||||
<string name="text_history_holder_secondary">Encuentra qué leer en el menú lateral.</string>
|
||||
<string name="text_history_holder_primary">Lo que leas se mostrará aquí</string>
|
||||
<string name="text_empty_holder_primary">Está un poco vacío aquí…</string>
|
||||
<string name="search_only_on_s">Buscar sólo en %s</string>
|
||||
<string name="chapter_is_missing">Falta un capítulo</string>
|
||||
<string name="search_only_on_s">Buscar sólo en %s</string>
|
||||
<string name="chapter_is_missing">Falta un capítulo</string>
|
||||
<string name="about_app_translation_summary">Traducir esta aplicación</string>
|
||||
<string name="about_feedback">Comentarios</string>
|
||||
<string name="about_app_translation">Traducción</string>
|
||||
@@ -253,7 +253,7 @@
|
||||
<string name="screenshots_block_nsfw">Bloqueo en NSFW</string>
|
||||
<string name="logged_in_as">Conectado como %s</string>
|
||||
<string name="find_genre">Encontrar el género</string>
|
||||
<string name="onboard_text">Selecciona los idiomas en los que quieres leer el manga. Puedes cambiarlo más tarde en los ajustes.</string>
|
||||
<string name="onboard_text">Selecciona los idiomas en los que quieres leer mangas. Puedes cambiarlo más tarde en los ajustes.</string>
|
||||
<string name="reset_filter">Reiniciar el filtro</string>
|
||||
<string name="never">Nunca</string>
|
||||
<string name="nsfw">18+</string>
|
||||
@@ -264,4 +264,12 @@
|
||||
<string name="search_chapters">Buscar capítulo</string>
|
||||
<string name="chapters_empty">No hay capítulos en este manga</string>
|
||||
<string name="percent_string_pattern">%1$s%%</string>
|
||||
<string name="appearance">Aspecto</string>
|
||||
<string name="content">Contenido</string>
|
||||
<string name="suggestions_updating">Actualización de las sugerencias</string>
|
||||
<string name="suggestions_excluded_genres">Excluir géneros</string>
|
||||
<string name="suggestions_excluded_genres_summary">Especifica los géneros que no quieres ver en las sugerencias</string>
|
||||
<string name="removal_completed">Remoción completada</string>
|
||||
<string name="batch_manga_save_confirm">¿Estás seguro de que quieres descargar todos los manga seleccionados con todos sus capítulos\? Esta acción puede consumir mucho tráfico y almacenamiento</string>
|
||||
<string name="text_delete_local_manga_batch">¿Eliminar elementos seleccionados del dispositivo de forma permanente\?</string>
|
||||
</resources>
|
||||
2
app/src/main/res/values-eu/plurals.xml
Normal file
2
app/src/main/res/values-eu/plurals.xml
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
2
app/src/main/res/values-eu/strings.xml
Normal file
2
app/src/main/res/values-eu/strings.xml
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="genres">Tyylilajit</string>
|
||||
<string name="auth_not_supported_by">%s -valtuutusta ei tueta</string>
|
||||
<string name="auth_complete">Valtuutus valmis</string>
|
||||
<string name="about_feedback_4pda">Aihe 4PDA: ssa</string>
|
||||
<string name="about_feedback_4pda">Aihe 4PDA: ssa</string>
|
||||
<string name="about_feedback">Palaute</string>
|
||||
<string name="about_app_translation">Käännös</string>
|
||||
<string name="about_app_translation_summary">Käännä tämä sovellus</string>
|
||||
@@ -264,4 +264,11 @@
|
||||
<string name="percent_string_pattern">%1$s%%</string>
|
||||
<string name="various_languages">Eri kieliä</string>
|
||||
<string name="chapters_empty">Ei lukuja tässä mangassa</string>
|
||||
<string name="appearance">Ulkonäkö</string>
|
||||
<string name="content">Sisältö</string>
|
||||
<string name="suggestions_updating">Ehdotukset päivitetään</string>
|
||||
<string name="suggestions_excluded_genres_summary">Määritä genret, joita et halua nähdä ehdotuksissa</string>
|
||||
<string name="suggestions_excluded_genres">Sulje pois genrejä</string>
|
||||
<string name="text_delete_local_manga_batch">Poista valitut kohteet laitteesta pysyvästi\?</string>
|
||||
<string name="removal_completed">Poisto valmis</string>
|
||||
</resources>
|
||||
35
app/src/main/res/values-fr/plurals.xml
Normal file
35
app/src/main/res/values-fr/plurals.xml
Normal file
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<plurals name="minutes_ago">
|
||||
<item quantity="one">Il y a %1$d minute</item>
|
||||
<item quantity="other">Il y a %1$d minutes</item>
|
||||
</plurals>
|
||||
<plurals name="pages">
|
||||
<item quantity="one">%1$d page au total</item>
|
||||
<item quantity="other">%1$d pages au total</item>
|
||||
</plurals>
|
||||
<plurals name="items">
|
||||
<item quantity="one">%1$d élément</item>
|
||||
<item quantity="other">%1$d éléments</item>
|
||||
</plurals>
|
||||
<plurals name="new_chapters">
|
||||
<item quantity="one">%1$d nouveau chapitre</item>
|
||||
<item quantity="other">%1$d nouveaux chapitres</item>
|
||||
</plurals>
|
||||
<plurals name="chapters">
|
||||
<item quantity="one">%1$d chapitre</item>
|
||||
<item quantity="other">%1$d chapitres</item>
|
||||
</plurals>
|
||||
<plurals name="chapters_from_x">
|
||||
<item quantity="one">%1$d chapitre de %2$d</item>
|
||||
<item quantity="other">%1$d chapitres de %2$d</item>
|
||||
</plurals>
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one">Il y a %1$d heure</item>
|
||||
<item quantity="other">Il y a %1$d heures</item>
|
||||
</plurals>
|
||||
<plurals name="days_ago">
|
||||
<item quantity="one">Il y a %1$d jour</item>
|
||||
<item quantity="other">Il y a %1$d jours</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -217,7 +217,7 @@
|
||||
<string name="chapter_is_missing_text">Téléchargez ou lisez ce chapitre manquant en ligne.</string>
|
||||
<string name="text_downloads_holder">Aucun téléchargement actif</string>
|
||||
<string name="queued">En file d\'attente</string>
|
||||
<string name="about_feedback_4pda">Sujet sur 4PDA</string>
|
||||
<string name="about_feedback_4pda">Sujet sur 4PDA</string>
|
||||
<string name="about_feedback">Remarques</string>
|
||||
<string name="about_app_translation">Traduction</string>
|
||||
<string name="about_app_translation_summary">Traduire cette application</string>
|
||||
@@ -264,4 +264,12 @@
|
||||
<string name="search_chapters">Trouver un chapitre</string>
|
||||
<string name="chapters_empty">Pas de chapitres dans ce manga</string>
|
||||
<string name="percent_string_pattern">%1$s%%</string>
|
||||
<string name="appearance">Apparence</string>
|
||||
<string name="content">Contenu</string>
|
||||
<string name="suggestions_updating">Mise à jour des suggestions</string>
|
||||
<string name="suggestions_excluded_genres">Exclure des genres</string>
|
||||
<string name="suggestions_excluded_genres_summary">Spécifiez les genres que vous ne voulez pas voir apparaître dans les suggestions</string>
|
||||
<string name="text_delete_local_manga_batch">Supprimer définitivement les éléments sélectionnés de l\'appareil \?</string>
|
||||
<string name="removal_completed">Suppression terminée</string>
|
||||
<string name="batch_manga_save_confirm">Voulez-vous vraiment télécharger tous les mangas sélectionnés avec tous leurs chapitres \? Cette action peut consommer beaucoup de trafic et de stockage</string>
|
||||
</resources>
|
||||
35
app/src/main/res/values-it/plurals.xml
Normal file
35
app/src/main/res/values-it/plurals.xml
Normal file
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<plurals name="chapters_from_x">
|
||||
<item quantity="one">%1$d capitolo da %2$d</item>
|
||||
<item quantity="other">%1$d capitoli da %2$d</item>
|
||||
</plurals>
|
||||
<plurals name="pages">
|
||||
<item quantity="one">%1$d pagina in totale</item>
|
||||
<item quantity="other">%1$d pagine in totale</item>
|
||||
</plurals>
|
||||
<plurals name="new_chapters">
|
||||
<item quantity="one">%1$d nuovo capitolo</item>
|
||||
<item quantity="other">%1$d nuovi capitoli</item>
|
||||
</plurals>
|
||||
<plurals name="items">
|
||||
<item quantity="one">%1$d élément</item>
|
||||
<item quantity="other">%1$d éléments</item>
|
||||
</plurals>
|
||||
<plurals name="chapters">
|
||||
<item quantity="one">%1$d capitolo</item>
|
||||
<item quantity="other">%1$d capitoli</item>
|
||||
</plurals>
|
||||
<plurals name="minutes_ago">
|
||||
<item quantity="one">%1$d minuto fa</item>
|
||||
<item quantity="other">%1$d minuti fa</item>
|
||||
</plurals>
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one">%1$d ora fa</item>
|
||||
<item quantity="other">%1$d ore fa</item>
|
||||
</plurals>
|
||||
<plurals name="days_ago">
|
||||
<item quantity="one">%1$d giorno fa</item>
|
||||
<item quantity="other">%1$d giorni fa</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -217,7 +217,7 @@
|
||||
<string name="chapter_is_missing_text">Questo capitolo manca sul tuo dispositivo. Scaricalo o leggilo in linea.</string>
|
||||
<string name="text_downloads_holder">Attualmente non ci sono scaricamenti attivi</string>
|
||||
<string name="queued">In coda</string>
|
||||
<string name="about_feedback_4pda">Argomento su 4PDA</string>
|
||||
<string name="about_feedback_4pda">Argomento su 4PDA</string>
|
||||
<string name="about_feedback">Commenti</string>
|
||||
<string name="about_app_translation">Traduzione</string>
|
||||
<string name="about_app_translation_summary">Traduci questa applicazione</string>
|
||||
@@ -264,4 +264,12 @@
|
||||
<string name="search_chapters">Trova un capitolo</string>
|
||||
<string name="chapters_empty">Nessun capitolo in questo manga</string>
|
||||
<string name="percent_string_pattern">%1$s%%</string>
|
||||
<string name="appearance">Aspetto</string>
|
||||
<string name="content">Contenuto</string>
|
||||
<string name="suggestions_updating">Aggiornamento dei suggerimenti</string>
|
||||
<string name="suggestions_excluded_genres_summary">Specifica i generi che non vuoi vedere nei suggerimenti</string>
|
||||
<string name="suggestions_excluded_genres">Escludi generi</string>
|
||||
<string name="removal_completed">Rimozione completata</string>
|
||||
<string name="text_delete_local_manga_batch">Eliminare gli elementi selezionati dal dispositivo in modo permanente\?</string>
|
||||
<string name="batch_manga_save_confirm">Vuoi davvero scaricare tutti i manga selezionati con tutti i loro capitoli\? Questa azione può consumare molto traffico e memoria</string>
|
||||
</resources>
|
||||
27
app/src/main/res/values-ja/plurals.xml
Normal file
27
app/src/main/res/values-ja/plurals.xml
Normal file
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<plurals name="chapters_from_x">
|
||||
<item quantity="other">%1$dから%2$dの章</item>
|
||||
</plurals>
|
||||
<plurals name="minutes_ago">
|
||||
<item quantity="other">%1$d 1分前</item>
|
||||
</plurals>
|
||||
<plurals name="items">
|
||||
<item quantity="other">%1$d 項目</item>
|
||||
</plurals>
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="other">%1$d 1時間前</item>
|
||||
</plurals>
|
||||
<plurals name="days_ago">
|
||||
<item quantity="other">%1$d 1日前</item>
|
||||
</plurals>
|
||||
<plurals name="chapters">
|
||||
<item quantity="other">%1$dチャプター</item>
|
||||
</plurals>
|
||||
<plurals name="pages">
|
||||
<item quantity="other">合計%1$dページ</item>
|
||||
</plurals>
|
||||
<plurals name="new_chapters">
|
||||
<item quantity="other">%1$d新しい章</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -42,8 +42,8 @@
|
||||
<string name="clear">クリア</string>
|
||||
<string name="text_clear_history_prompt">すべての履歴を永久にクリアしますか?</string>
|
||||
<string name="remove">削除</string>
|
||||
<string name="_s_removed_from_history">\"%s\"が履歴から削除されました</string>
|
||||
<string name="_s_deleted_from_local_storage">\"%s \"がローカルストレージから削除されました</string>
|
||||
<string name="_s_removed_from_history">「%s」が履歴から削除されました</string>
|
||||
<string name="_s_deleted_from_local_storage">「%s 」がローカルストレージから削除されました</string>
|
||||
<string name="wait_for_loading_finish">読み込みが完了するまでお待ちください…</string>
|
||||
<string name="save_page">ページを保存</string>
|
||||
<string name="page_saved">保存しました</string>
|
||||
@@ -163,7 +163,7 @@
|
||||
<string name="prefer_rtl_reader">右から左(←)の読書を好む</string>
|
||||
<string name="about_feedback">フィードバック</string>
|
||||
<string name="about_feedback_4pda">4PDAに関する話題</string>
|
||||
<string name="auth_complete">承認済み</string>
|
||||
<string name="auth_complete">承認済み</string>
|
||||
<string name="auth_not_supported_by">%sへのログインはサポートされていません</string>
|
||||
<string name="state_finished">完成</string>
|
||||
<string name="state_ongoing">進行中</string>
|
||||
@@ -209,10 +209,10 @@
|
||||
<string name="about_app_translation">このアプリを翻訳</string>
|
||||
<string name="data_restored_success">全てのデータが復元されました</string>
|
||||
<string name="data_restored">復元</string>
|
||||
<string name="preparing_">準備中…</string>
|
||||
<string name="preparing_">準備中…</string>
|
||||
<string name="zoom_mode_keep_start">開始時に維持</string>
|
||||
<string name="backup_restore">バックアップと復元</string>
|
||||
<string name="reverse">リバース</string>
|
||||
<string name="reverse">リバース</string>
|
||||
<string name="reader_mode_hint">選択した構成はこの漫画のために記憶されます</string>
|
||||
<string name="clear_cookies">クッキーを削除</string>
|
||||
<string name="report_github">GitHubでissueを作成する(GitHubのアカウントが必要です)</string>
|
||||
@@ -230,7 +230,7 @@
|
||||
<string name="scale_mode">スケールモード</string>
|
||||
<string name="error_empty_name">名前を入力する必要があります</string>
|
||||
<string name="today">今日</string>
|
||||
<string name="about_app_translation_summary">Kotatsuを翻訳する(Weblateのサイトに移動します)</string>
|
||||
<string name="about_app_translation_summary">Kotatsuを翻訳する(Weblateのサイトに移動します)</string>
|
||||
<string name="next">次のページ</string>
|
||||
<string name="silent">サイレント</string>
|
||||
<string name="sign_in">サインイン</string>
|
||||
@@ -264,4 +264,12 @@
|
||||
<string name="search_chapters">チャプターを検索</string>
|
||||
<string name="chapters_empty">この漫画の章はありません</string>
|
||||
<string name="percent_string_pattern">%1$s%%</string>
|
||||
<string name="content">コンテンツ</string>
|
||||
<string name="suggestions_updating">更新のご提案</string>
|
||||
<string name="appearance">外観</string>
|
||||
<string name="suggestions_excluded_genres">ジャンルを除く</string>
|
||||
<string name="suggestions_excluded_genres_summary">サジェストで表示したくないジャンルを指定</string>
|
||||
<string name="text_delete_local_manga_batch">選択した項目をデバイスから完全に削除しますか?</string>
|
||||
<string name="removal_completed">削除が完了しました</string>
|
||||
<string name="batch_manga_save_confirm">本当に選択したマンガを全編ダウンロードしますか?この動作は多くのトラフィックとストレージを消費する可能性があります</string>
|
||||
</resources>
|
||||
35
app/src/main/res/values-nb-rNO/plurals.xml
Normal file
35
app/src/main/res/values-nb-rNO/plurals.xml
Normal file
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<plurals name="pages">
|
||||
<item quantity="one">Totalt %1$d side</item>
|
||||
<item quantity="other">Totalt %1$d sider</item>
|
||||
</plurals>
|
||||
<plurals name="new_chapters">
|
||||
<item quantity="one">%1$d nytt kapittel</item>
|
||||
<item quantity="other">%1$d nye kapitler</item>
|
||||
</plurals>
|
||||
<plurals name="chapters">
|
||||
<item quantity="one">%1$d kapittel</item>
|
||||
<item quantity="other">%1$d kapitler</item>
|
||||
</plurals>
|
||||
<plurals name="chapters_from_x">
|
||||
<item quantity="one">%1$d kapitler fra %2$d</item>
|
||||
<item quantity="other">%1$d kapitler fra %2$d</item>
|
||||
</plurals>
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one">%1$d time siden</item>
|
||||
<item quantity="other">%1$d timer siden</item>
|
||||
</plurals>
|
||||
<plurals name="days_ago">
|
||||
<item quantity="one">%1$d dag siden</item>
|
||||
<item quantity="other">%1$d dager siden</item>
|
||||
</plurals>
|
||||
<plurals name="items">
|
||||
<item quantity="one">%1$d element</item>
|
||||
<item quantity="other">%1$d elementer</item>
|
||||
</plurals>
|
||||
<plurals name="minutes_ago">
|
||||
<item quantity="one">%1$d minutt siden</item>
|
||||
<item quantity="other">%1$d minutter siden</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
35
app/src/main/res/values-pt-rBR/plurals.xml
Normal file
35
app/src/main/res/values-pt-rBR/plurals.xml
Normal file
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<plurals name="items">
|
||||
<item quantity="one">%1$d item</item>
|
||||
<item quantity="other">%1$d itens</item>
|
||||
</plurals>
|
||||
<plurals name="chapters">
|
||||
<item quantity="one">%1$d capítulo</item>
|
||||
<item quantity="other">%1$d capítulos</item>
|
||||
</plurals>
|
||||
<plurals name="chapters_from_x">
|
||||
<item quantity="one">%1$d capítulo de %2$d</item>
|
||||
<item quantity="other">%1$d capítulos de %2$d</item>
|
||||
</plurals>
|
||||
<plurals name="pages">
|
||||
<item quantity="one">Total de %1$d página</item>
|
||||
<item quantity="other">Total de %1$d páginas</item>
|
||||
</plurals>
|
||||
<plurals name="new_chapters">
|
||||
<item quantity="one">%1$d novo capítulo</item>
|
||||
<item quantity="other">%1$d novos capítulos</item>
|
||||
</plurals>
|
||||
<plurals name="minutes_ago">
|
||||
<item quantity="one">%1$d minuto atrás</item>
|
||||
<item quantity="other">%1$d minutos atrás</item>
|
||||
</plurals>
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one">%1$d hora atrás</item>
|
||||
<item quantity="other">%1$d horas atrás</item>
|
||||
</plurals>
|
||||
<plurals name="days_ago">
|
||||
<item quantity="one">%1$d dia atrás</item>
|
||||
<item quantity="other">%1$d dias atrás</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -51,8 +51,8 @@
|
||||
<string name="pages">Páginas</string>
|
||||
<string name="clear">Limpar</string>
|
||||
<string name="remove">Remover</string>
|
||||
<string name="_s_removed_from_history">\"%s\" removido do histórico</string>
|
||||
<string name="_s_deleted_from_local_storage">\"%s\" excluído do armazenamento local</string>
|
||||
<string name="_s_removed_from_history">“%s” removido do histórico</string>
|
||||
<string name="_s_deleted_from_local_storage">“%s” excluído do armazenamento local</string>
|
||||
<string name="wait_for_loading_finish">Aguarde o carregamento terminar…</string>
|
||||
<string name="save_page">Salvar página</string>
|
||||
<string name="page_saved">Salvou</string>
|
||||
@@ -70,7 +70,7 @@
|
||||
<string name="grid_size">Tamanho da grade</string>
|
||||
<string name="search_on_s">Pesquisar em %s</string>
|
||||
<string name="delete_manga">Excluir mangá</string>
|
||||
<string name="text_delete_local_manga">Excluir \"%s\" do dispositivo permanentemente\?</string>
|
||||
<string name="text_delete_local_manga">Excluir “%s” do dispositivo permanentemente\?</string>
|
||||
<string name="reader_settings">Configurações do leitor</string>
|
||||
<string name="taps_on_edges">Toques de borda</string>
|
||||
<string name="volume_buttons">Botões de volume</string>
|
||||
@@ -183,7 +183,7 @@
|
||||
<string name="about_app_translation">Tradução</string>
|
||||
<string name="about_feedback">Comentar</string>
|
||||
<string name="about_feedback_4pda">Tópico no 4PDA</string>
|
||||
<string name="auth_complete">Autorizado</string>
|
||||
<string name="auth_complete">Autorizado</string>
|
||||
<string name="auth_not_supported_by">O login em %s não é suportado</string>
|
||||
<string name="text_clear_cookies_prompt">Você será desconectado de todas as fontes</string>
|
||||
<string name="genres">Gêneros</string>
|
||||
@@ -233,7 +233,7 @@
|
||||
<string name="application_update">Verifique se há novas versões do aplicativo</string>
|
||||
<string name="favourites_categories">Categorias favoritas</string>
|
||||
<string name="show_notification_new_chapters">Notificar sobre atualizações de mangá que você está lendo</string>
|
||||
<string name="category_delete_confirm">Remover a categoria \"%s\" dos seus favoritos\?
|
||||
<string name="category_delete_confirm">Remover a categoria “%s” dos seus favoritos\?
|
||||
\nTodos os mangás nela serão perdidos.</string>
|
||||
<string name="no_update_available">Nenhuma atualização disponível</string>
|
||||
<string name="create_category">Nova categoria</string>
|
||||
@@ -261,7 +261,15 @@
|
||||
<string name="data_restored_with_errors">Os dados foram restaurados, mas há erros</string>
|
||||
<string name="report_github">Criar problema no GitHub</string>
|
||||
<string name="file_not_found">Arquivo não encontrado</string>
|
||||
<string name="search_chapters">Localizar capítulo</string>
|
||||
<string name="search_chapters">Localizar capítulo</string>
|
||||
<string name="chapters_empty">Não há capítulos neste mangá</string>
|
||||
<string name="percent_string_pattern">%1$s%%</string>
|
||||
<string name="suggestions_updating">Atualização de sugestões</string>
|
||||
<string name="appearance">Aparência</string>
|
||||
<string name="content">Conteúdo</string>
|
||||
<string name="suggestions_excluded_genres">Excluir gêneros</string>
|
||||
<string name="suggestions_excluded_genres_summary">Especifique os gêneros que você não deseja ver nas sugestões</string>
|
||||
<string name="removal_completed">Remoção concluída</string>
|
||||
<string name="text_delete_local_manga_batch">Excluir itens selecionados do dispositivo permanentemente\?</string>
|
||||
<string name="batch_manga_save_confirm">Tem certeza de que deseja baixar todos os mangás selecionados com todos os seus capítulos\? Essa ação pode consumir muito tráfego e armazenamento</string>
|
||||
</resources>
|
||||
@@ -41,8 +41,8 @@
|
||||
<string name="clear">Limpar</string>
|
||||
<string name="text_clear_history_prompt">Limpar todo o histórico de leitura permanentemente\?</string>
|
||||
<string name="remove">Remover</string>
|
||||
<string name="_s_removed_from_history">\"%s\" removido do histórico</string>
|
||||
<string name="_s_deleted_from_local_storage">\"%s\" deletado do armazenamento local</string>
|
||||
<string name="_s_removed_from_history">«%s» removido do histórico</string>
|
||||
<string name="_s_deleted_from_local_storage">«%s» deletado do armazenamento local</string>
|
||||
<string name="wait_for_loading_finish">Aguarde o carregamento terminar…</string>
|
||||
<string name="save_page">Salvar página</string>
|
||||
<string name="page_saved">Salvou</string>
|
||||
@@ -103,7 +103,7 @@
|
||||
<string name="chapters">Capítulos</string>
|
||||
<string name="add_new_category">Nova categoria</string>
|
||||
<string name="warning">Aviso</string>
|
||||
<string name="text_delete_local_manga">Excluir \"%s\" do dispositivo permanentemente\?</string>
|
||||
<string name="text_delete_local_manga">Excluir «%s» do dispositivo permanentemente\?</string>
|
||||
<string name="text_file_not_supported">Escolha um arquivo ZIP ou CBZ.</string>
|
||||
<string name="clear_search_history">Limpar histórico de pesquisa</string>
|
||||
<string name="enabled_d_of_d" tools:ignore="PluralsCandidate">Ativado %1$d de %2$d</string>
|
||||
@@ -185,7 +185,7 @@
|
||||
<string name="about_app_translation_summary">Traduzir esta aplicação</string>
|
||||
<string name="about_feedback">Comentar</string>
|
||||
<string name="about_feedback_4pda">Tópico no 4PDA</string>
|
||||
<string name="chapter_is_missing_text">Baixe ou leia este capítulo perdido online.</string>
|
||||
<string name="chapter_is_missing_text">Baixe ou leia este capítulo perdido online.</string>
|
||||
<string name="chapter_is_missing">O capítulo está em falta</string>
|
||||
<string name="auth_complete">Autorizado</string>
|
||||
<string name="auth_not_supported_by">O login em %s não é suportado</string>
|
||||
@@ -195,8 +195,8 @@
|
||||
<string name="vibration">Vibração</string>
|
||||
<string name="cannot_find_available_storage">Sem armazenamento disponível</string>
|
||||
<string name="favourites_categories">Categorias favoritas</string>
|
||||
<string name="category_delete_confirm">Remover a categoria \"%s\" dos seus favoritos\?
|
||||
\nTodos os mangás nela serão perdidos..</string>
|
||||
<string name="category_delete_confirm">Remover a categoria «%s» dos seus favoritos\?
|
||||
\nTodos os mangás nela serão perdidos.</string>
|
||||
<string name="text_history_holder_secondary">Encontre o que ler no menu lateral.</string>
|
||||
<string name="text_local_holder_secondary">Salve-o de fontes online ou importe arquivos.</string>
|
||||
<string name="recent_manga">Recente</string>
|
||||
@@ -261,4 +261,10 @@
|
||||
<string name="logged_in_as">Conectado como %s</string>
|
||||
<string name="nsfw">18+</string>
|
||||
<string name="various_languages">Vários idiomas</string>
|
||||
<string name="suggestions_updating">Atualização das sugestões</string>
|
||||
<string name="appearance">Aparência</string>
|
||||
<string name="search_chapters">Encontrar capítulo</string>
|
||||
<string name="content">Conteúdo</string>
|
||||
<string name="chapters_empty">Não há capítulos nesta manga</string>
|
||||
<string name="percent_string_pattern">%1$s%%</string>
|
||||
</resources>
|
||||
35
app/src/main/res/values-sv/plurals.xml
Normal file
35
app/src/main/res/values-sv/plurals.xml
Normal file
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<plurals name="pages">
|
||||
<item quantity="one">Totalt %1$d sida</item>
|
||||
<item quantity="other">Totalt %1$d sidor</item>
|
||||
</plurals>
|
||||
<plurals name="items">
|
||||
<item quantity="one">%1$d artikel</item>
|
||||
<item quantity="other">%1$d artiklar</item>
|
||||
</plurals>
|
||||
<plurals name="new_chapters">
|
||||
<item quantity="one">%1$d nytt kapitel</item>
|
||||
<item quantity="other">%1$d nya kapitel</item>
|
||||
</plurals>
|
||||
<plurals name="chapters">
|
||||
<item quantity="one">%1$d kapitel</item>
|
||||
<item quantity="other">%1$d kapitel</item>
|
||||
</plurals>
|
||||
<plurals name="chapters_from_x">
|
||||
<item quantity="one">%1$d kapitel från %2$d</item>
|
||||
<item quantity="other">%1$d kapitel från %2$d</item>
|
||||
</plurals>
|
||||
<plurals name="minutes_ago">
|
||||
<item quantity="one">%1$d minut sedan</item>
|
||||
<item quantity="other">%1$d minuter sedan</item>
|
||||
</plurals>
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one">%1$d timme sedan</item>
|
||||
<item quantity="other">%1$d timmar sedan</item>
|
||||
</plurals>
|
||||
<plurals name="days_ago">
|
||||
<item quantity="one">%1$d dag sedan</item>
|
||||
<item quantity="other">%1$d dagar sedan</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
275
app/src/main/res/values-sv/strings.xml
Normal file
275
app/src/main/res/values-sv/strings.xml
Normal file
@@ -0,0 +1,275 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="light">Ljust</string>
|
||||
<string name="pages">Sidor</string>
|
||||
<string name="text_file_not_supported">Välj en ZIP- eller CBZ-fil.</string>
|
||||
<string name="close_menu">Stäng meny</string>
|
||||
<string name="open_menu">Öppna meny</string>
|
||||
<string name="local_storage">Lokal lagring</string>
|
||||
<string name="favourites">Favoriter</string>
|
||||
<string name="history">Historik</string>
|
||||
<string name="error_occurred">Ett fel har inträffat</string>
|
||||
<string name="network_error">Lyckades inte ansluta till internet</string>
|
||||
<string name="details">Detaljer</string>
|
||||
<string name="chapters">Kapitel</string>
|
||||
<string name="list">Lista</string>
|
||||
<string name="detailed_list">Detaljerad lista</string>
|
||||
<string name="grid">Rutnät</string>
|
||||
<string name="list_mode">Listläge</string>
|
||||
<string name="settings">Inställningar</string>
|
||||
<string name="remote_sources">Källor</string>
|
||||
<string name="loading_">Laddar…</string>
|
||||
<string name="computing_">Beräknar…</string>
|
||||
<string name="chapter_d_of_d">Kapitel %1$d av %2$d</string>
|
||||
<string name="close">Stäng</string>
|
||||
<string name="try_again">Försök igen</string>
|
||||
<string name="clear_history">Rensa historik</string>
|
||||
<string name="nothing_found">Ingenting hittades</string>
|
||||
<string name="history_is_empty">Ingen historik än</string>
|
||||
<string name="download_complete">Nedladdat</string>
|
||||
<string name="downloads">Nedladdningar</string>
|
||||
<string name="by_name">Namn</string>
|
||||
<string name="popular">Populärt</string>
|
||||
<string name="updated">Uppdaterat</string>
|
||||
<string name="add_to_favourites">Lägg till som favorit</string>
|
||||
<string name="filter">Filter</string>
|
||||
<string name="standard">Standard</string>
|
||||
<string name="read">Läs</string>
|
||||
<string name="enter_category_name">Ange kategorins namn</string>
|
||||
<string name="you_have_not_favourites_yet">Inga favoriter än</string>
|
||||
<string name="save">Spara</string>
|
||||
<string name="create_shortcut">Skapa genväg…</string>
|
||||
<string name="manga_downloading_">Laddar ned…</string>
|
||||
<string name="processing_">Behandlar…</string>
|
||||
<string name="theme">Tema</string>
|
||||
<string name="automatic">Systemtema</string>
|
||||
<string name="remove">Ta bort</string>
|
||||
<string name="text_file_sizes">B|kB|MB|GB|TB</string>
|
||||
<string name="add_new_category">Ny kategori</string>
|
||||
<string name="search">Sök</string>
|
||||
<string name="by_rating">Betyg</string>
|
||||
<string name="add">Lägg till</string>
|
||||
<string name="share">Dela</string>
|
||||
<string name="share_s">Dela %s</string>
|
||||
<string name="search_manga">Sök manga</string>
|
||||
<string name="cache">Cache</string>
|
||||
<string name="show_notification_app_update">Visa en notifikation om en nyare version av äpplen finns tillgänglig</string>
|
||||
<string name="newest">Nyaste</string>
|
||||
<string name="sort_order">Sorteringsordning</string>
|
||||
<string name="dark">Mörkt</string>
|
||||
<string name="operation_not_supported">Denna åtgärden stöds inte</string>
|
||||
<string name="no_description">Ingen beskrivning</string>
|
||||
<string name="history_and_cache">Historik och cache</string>
|
||||
<string name="clear">Rensa</string>
|
||||
<string name="text_clear_history_prompt">Rensa all läshistorik permanent\?</string>
|
||||
<string name="_s_removed_from_history">\"%s\" borttagen från historik</string>
|
||||
<string name="_s_deleted_from_local_storage">\"%s\" borttaget från lokal lagring</string>
|
||||
<string name="wait_for_loading_finish">Vänta tills laddningen är klar…</string>
|
||||
<string name="save_page">Spara sida</string>
|
||||
<string name="page_saved">Sparad</string>
|
||||
<string name="share_image">Dela bild</string>
|
||||
<string name="_import">Importera</string>
|
||||
<string name="delete">Ta bort</string>
|
||||
<string name="clear_pages_cache">Rensa sidcache</string>
|
||||
<string name="text_delete_local_manga">Ta permanent bort \"%s\" från den här enheten\?</string>
|
||||
<string name="volume_buttons">Volymknappar</string>
|
||||
<string name="cancelling_">Avbryter…</string>
|
||||
<string name="error">Error</string>
|
||||
<string name="webtoon">Webtoon</string>
|
||||
<string name="read_mode">Läsläge</string>
|
||||
<string name="grid_size">Rutnätsstorlek</string>
|
||||
<string name="search_on_s">Sök på %s</string>
|
||||
<string name="delete_manga">Ta bort manga</string>
|
||||
<string name="reader_settings">Läsarinställningar</string>
|
||||
<string name="switch_pages">Byt sida</string>
|
||||
<string name="taps_on_edges">Kanttryck</string>
|
||||
<string name="_continue">Fortsätt</string>
|
||||
<string name="warning">Varning</string>
|
||||
<string name="network_consumption_warning">Detta kan kräva mycket dataöverföring</string>
|
||||
<string name="dont_ask_again">Fråga inte igen</string>
|
||||
<string name="search_history_cleared">Rensat</string>
|
||||
<string name="clear_thumbs_cache">Rensa cache för miniatyrer</string>
|
||||
<string name="open_in_browser">Öppna i webbläsare</string>
|
||||
<string name="notifications">Notifikationer</string>
|
||||
<string name="clear_search_history">Rensa sökhistorik</string>
|
||||
<string name="domain">Domän</string>
|
||||
<string name="gestures_only">Endast gester</string>
|
||||
<string name="internal_storage">Internlagring</string>
|
||||
<string name="external_storage">Externlagring</string>
|
||||
<string name="application_update">Kolla om det finns en nyare version av appen</string>
|
||||
<string name="app_update_available">En ny version av appen finns tillgänglig</string>
|
||||
<string name="enabled_d_of_d" tools:ignore="PluralsCandidate">%1$d av %2$d aktiva</string>
|
||||
<string name="new_chapters">Nya kapitel</string>
|
||||
<string name="large_manga_save_confirm">Den här mangan har %s. Spara hela\?</string>
|
||||
<string name="save_manga">Spara</string>
|
||||
<string name="download">Ladda ned</string>
|
||||
<string name="notifications_settings">Notifikationsinställningar</string>
|
||||
<string name="light_indicator">LED-indikator</string>
|
||||
<string name="show_notification_new_chapters">Notifiera om uppdateringar på manga du läser</string>
|
||||
<string name="read_from_start">Läs från början</string>
|
||||
<string name="restart">Starta om</string>
|
||||
<string name="notification_sound">Notifikationsljud</string>
|
||||
<string name="vibration">Vibration</string>
|
||||
<string name="favourites_categories">Favoritkategorier</string>
|
||||
<string name="no_update_available">Inga tillgängliga uppdateringar</string>
|
||||
<string name="backup_information">Du kan säkerhetskopiera din historik och dina favoriter och återställa senare</string>
|
||||
<string name="just_now">Just nu</string>
|
||||
<string name="yesterday">Igår</string>
|
||||
<string name="long_ago">Länge sedan</string>
|
||||
<string name="group">Grupp</string>
|
||||
<string name="today">Idag</string>
|
||||
<string name="tap_to_try_again">Tryck för att försöka igen</string>
|
||||
<string name="reader_mode_hint">Den valda konfigurationen kommer att bli ihågkommen för denna manga</string>
|
||||
<string name="silent">Tyst</string>
|
||||
<string name="cookies_cleared">Alla kakor rensades</string>
|
||||
<string name="chapters_checking_progress">Letar efter nya kapitel: %1$d av %2$d</string>
|
||||
<string name="clear_feed">Rensa flöde</string>
|
||||
<string name="text_clear_updates_feed_prompt">Permanent rensa all uppdateringshistorik\?</string>
|
||||
<string name="check_for_new_chapters">Leta efter nya kapitel</string>
|
||||
<string name="reverse">Omvänt</string>
|
||||
<string name="sign_in">Logga in</string>
|
||||
<string name="auth_required">Logga in för att visa innehåll</string>
|
||||
<string name="default_s">Standard: %s</string>
|
||||
<string name="_and_x_more">...och %1$d till</string>
|
||||
<string name="next">Nästa</string>
|
||||
<string name="password_length_hint">Lösenordet måste vara minst 4 tecken</string>
|
||||
<string name="search_only_on_s">Sök endast på %s</string>
|
||||
<string name="text_clear_search_history_prompt">Permanent rensa alla senaste sökfrågor\?</string>
|
||||
<string name="other">Annat</string>
|
||||
<string name="welcome">Välkommen</string>
|
||||
<string name="tracker_warning">Vissa enheter har olika systembeteende vilket kan ha sönder bakgrundsjobb.</string>
|
||||
<string name="read_more">Läs mer</string>
|
||||
<string name="queued">Köad</string>
|
||||
<string name="text_downloads_holder">Inga aktiva nedladdningar</string>
|
||||
<string name="chapter_is_missing_text">Ladda ned eller läs det saknade kapitlet online.</string>
|
||||
<string name="chapter_is_missing">Kapitlet saknas</string>
|
||||
<string name="about_app_translation_summary">Översätt denna app</string>
|
||||
<string name="about_app_translation">Översättning</string>
|
||||
<string name="about_feedback">Feedback</string>
|
||||
<string name="about_feedback_4pda">Ämne på 4PDA</string>
|
||||
<string name="auth_complete">Auktoriserad</string>
|
||||
<string name="auth_not_supported_by">Inloggning på %s stöds inte</string>
|
||||
<string name="state_finished">Färdig</string>
|
||||
<string name="exclude_nsfw_from_history">Exkludera vuxeninnehåll från historiken</string>
|
||||
<string name="error_empty_name">Du måste ange ett namn</string>
|
||||
<string name="show_pages_numbers">Numrerade sidor</string>
|
||||
<string name="enabled_sources">Aktiva källor</string>
|
||||
<string name="available_sources">Tillgängliga källor</string>
|
||||
<string name="dynamic_theme">Dynamiskt tema</string>
|
||||
<string name="dynamic_theme_summary">Tillämpar ett tema skapat utifrån din bakgrundsbild</string>
|
||||
<string name="importing_progress">Importerar manga: %1$d av %2$d</string>
|
||||
<string name="screenshots_policy">Policy för skärmdumpar</string>
|
||||
<string name="screenshots_allow">Tillåt</string>
|
||||
<string name="screenshots_block_nsfw">Blockera på vuxeninnehåll</string>
|
||||
<string name="screenshots_block_all">Blockera alltid</string>
|
||||
<string name="suggestions">Förslag</string>
|
||||
<string name="suggestions_enable">Aktivera förslag</string>
|
||||
<string name="suggestions_summary">Föreslå manga baserat på dina preferenser</string>
|
||||
<string name="suggestions_info">Alla data analyseras lokalt på denna enhet. Dina personuppgifter kommer inte överföras till någon tjänst</string>
|
||||
<string name="text_suggestion_holder">Börja läsa manga för att få personliga förslag</string>
|
||||
<string name="exclude_nsfw_from_suggestions">Föreslå inte manga med vuxeninnehåll</string>
|
||||
<string name="enabled">Aktiverad</string>
|
||||
<string name="disabled">Inaktiverad</string>
|
||||
<string name="filter_load_error">Kunde inte ladda genrelistan</string>
|
||||
<string name="reset_filter">Återställ filter</string>
|
||||
<string name="find_genre">Hitta genre</string>
|
||||
<string name="onboard_text">Välj det språk som du vill läsa manga på. Du kan ändra detta i inställningarna senare.</string>
|
||||
<string name="never">Aldrig</string>
|
||||
<string name="only_using_wifi">Endast på Wi-Fi</string>
|
||||
<string name="always">Alltid</string>
|
||||
<string name="preload_pages">Förladdning av sidor</string>
|
||||
<string name="logged_in_as">Inloggad som %s</string>
|
||||
<string name="nsfw">18+</string>
|
||||
<string name="various_languages">Olika språk</string>
|
||||
<string name="search_chapters">Hitta kapitel</string>
|
||||
<string name="chapters_empty">Inga kapitel i denna manga</string>
|
||||
<string name="appearance">Utseende</string>
|
||||
<string name="content">Innehåll</string>
|
||||
<string name="suggestions_updating">Uppdaterar förslag</string>
|
||||
<string name="suggestions_excluded_genres">Uteslut genrer</string>
|
||||
<string name="suggestions_excluded_genres_summary">Ange genrer som du inte vill få förslag på</string>
|
||||
<string name="removal_completed">Borttagningen slutförd</string>
|
||||
<string name="text_empty_holder_primary">Här var det tomt…</string>
|
||||
<string name="rename">Byt namn</string>
|
||||
<string name="category_delete_confirm">Ta bort kategorin \"%s\" från dina favoriter\?
|
||||
\nAllt innehåll kommer förloras.</string>
|
||||
<string name="text_categories_holder">Du kan använda kategorier för att organisera din a favoriter. Tryck på «+» för att skapa en ny kategori</string>
|
||||
<string name="categories_">Kategorier…</string>
|
||||
<string name="feed_will_update_soon">Flödesuppdatering påbörjas snart</string>
|
||||
<string name="restore_backup">Återställ från säkerhetskopia</string>
|
||||
<string name="text_search_holder_secondary">Försök att omformulera frågan.</string>
|
||||
<string name="text_history_holder_primary">Det du läser kommer att visas här</string>
|
||||
<string name="text_local_holder_primary">Spara något först</string>
|
||||
<string name="manga_shelf">Hylla</string>
|
||||
<string name="remove_category">Ta bort</string>
|
||||
<string name="create_category">Ny kategori</string>
|
||||
<string name="text_history_holder_secondary">Hitta ny läsning i sidomenyn.</string>
|
||||
<string name="pages_animation">Sidanimation</string>
|
||||
<string name="favourites_category_empty">Tom kategori</string>
|
||||
<string name="read_later">Läs senare</string>
|
||||
<string name="updates">Uppdateringar</string>
|
||||
<string name="new_version_s">Ny version: %s</string>
|
||||
<string name="text_local_holder_secondary">Hämta från onlinekällor eller importera filer.</string>
|
||||
<string name="recent_manga">Nytt</string>
|
||||
<string name="manga_save_location">Mapp för nedladdningar</string>
|
||||
<string name="not_available">Ej tillgänglig</string>
|
||||
<string name="other_storage">Annan lagring</string>
|
||||
<string name="text_feed_holder">Nya kapitel av det du läser visas här</string>
|
||||
<string name="rotate_screen">Rotera skärm</string>
|
||||
<string name="cannot_find_available_storage">Inget tillgängligt lagringsutrymme</string>
|
||||
<string name="done">Färdig</string>
|
||||
<string name="related">Relaterat</string>
|
||||
<string name="size_s">Storlek: %s</string>
|
||||
<string name="waiting_for_network">Väntar på nätverk…</string>
|
||||
<string name="update">Uppdatera</string>
|
||||
<string name="enter_password">Ange lösenord</string>
|
||||
<string name="checking_for_updates">Letar efter uppdateringar…</string>
|
||||
<string name="all_favourites">Alla favoriter</string>
|
||||
<string name="protect_application_summary">Fråga efter lösenord när appen startas</string>
|
||||
<string name="search_results">Sökresultat</string>
|
||||
<string name="clear_updates_feed">Rensa uppdateringsflödet</string>
|
||||
<string name="track_sources">Leta efter uppdateringar</string>
|
||||
<string name="updates_feed_cleared">Rensat</string>
|
||||
<string name="dont_check">Kontrollera inte</string>
|
||||
<string name="protect_application">Skydda appen</string>
|
||||
<string name="wrong_password">Fel lösenord</string>
|
||||
<string name="repeat_password">Repetera lösenord</string>
|
||||
<string name="passwords_mismatch">Lösenord stämmer inte överens</string>
|
||||
<string name="about">Om</string>
|
||||
<string name="app_version">Version %s</string>
|
||||
<string name="check_for_updates">Leta efter uppdateringar</string>
|
||||
<string name="right_to_left">Höger-till-vänster (←)</string>
|
||||
<string name="update_check_failed">Kunde inte leta efter uppdateringar</string>
|
||||
<string name="scale_mode">Skalningsläge</string>
|
||||
<string name="zoom_mode_fit_center">Centrera</string>
|
||||
<string name="zoom_mode_fit_height">Anpassa mot höjd</string>
|
||||
<string name="zoom_mode_keep_start">Anpassa till start</string>
|
||||
<string name="prefer_rtl_reader">Föredra höger-till-vänster (←) läsare</string>
|
||||
<string name="preparing_">Förbereder…</string>
|
||||
<string name="prefer_rtl_reader_summary">Läsläge kan sättas up separat för varje serie</string>
|
||||
<string name="zoom_mode_fit_width">Anpassa mot bredd</string>
|
||||
<string name="black_dark_theme">Svart</string>
|
||||
<string name="black_dark_theme_summary">Använder mindre ström på AMOLED-skärmar</string>
|
||||
<string name="restart_required">Omstart krävs</string>
|
||||
<string name="backup_restore">Säkerhetskopiering och återställning</string>
|
||||
<string name="create_backup">Skapa säkerhetskopia</string>
|
||||
<string name="data_restored">Återställd</string>
|
||||
<string name="report_github">Skapa en felrapport på GitHub</string>
|
||||
<string name="data_restored_with_errors">Datan återställdes men det förekommer fel</string>
|
||||
<string name="data_restored_success">All data återställdes</string>
|
||||
<string name="file_not_found">Filen hittades inte</string>
|
||||
<string name="captcha_required">CAPTCHA krävs</string>
|
||||
<string name="captcha_solve">Lös</string>
|
||||
<string name="clear_cookies">Rensa kakor</string>
|
||||
<string name="confirm">Bekräfta</string>
|
||||
<string name="protect_application_subtitle">Ange ett lösenord för att starta appen med</string>
|
||||
<string name="backup_saved">Säkerhetskopia sparad</string>
|
||||
<string name="genres">Genrer</string>
|
||||
<string name="state_ongoing">Pågående</string>
|
||||
<string name="date_format">Datumformat</string>
|
||||
<string name="system_default">Standard</string>
|
||||
<string name="text_clear_cookies_prompt">Du kommer loggas ut från alla källor</string>
|
||||
<string name="text_delete_local_manga_batch">Vill du ta bort markerade objekt från enheten permanent\?</string>
|
||||
<string name="percent_string_pattern">%1$s%%</string>
|
||||
<string name="batch_manga_save_confirm">Är du säker på att du vill ladda ner alla utvalda manga med alla kapitel\? Den här åtgärden kan kräva mycket nätverkstrafik och lagringsutrymme</string>
|
||||
</resources>
|
||||
35
app/src/main/res/values-tr/plurals.xml
Normal file
35
app/src/main/res/values-tr/plurals.xml
Normal file
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<plurals name="pages">
|
||||
<item quantity="one">Toplam %1$d sayfa</item>
|
||||
<item quantity="other">Toplam %1$d sayfa</item>
|
||||
</plurals>
|
||||
<plurals name="items">
|
||||
<item quantity="one">%1$d öge</item>
|
||||
<item quantity="other">%1$d öge</item>
|
||||
</plurals>
|
||||
<plurals name="chapters">
|
||||
<item quantity="one">%1$d bölüm</item>
|
||||
<item quantity="other">%1$d bölüm</item>
|
||||
</plurals>
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one">%1$d saat önce</item>
|
||||
<item quantity="other">%1$d saat önce</item>
|
||||
</plurals>
|
||||
<plurals name="new_chapters">
|
||||
<item quantity="one">%1$d yeni bölüm</item>
|
||||
<item quantity="other">%1$d yeni bölüm</item>
|
||||
</plurals>
|
||||
<plurals name="days_ago">
|
||||
<item quantity="one">%1$d gün önce</item>
|
||||
<item quantity="other">%1$d gün önce</item>
|
||||
</plurals>
|
||||
<plurals name="chapters_from_x">
|
||||
<item quantity="one">%2$d\'den %1$d bölüm</item>
|
||||
<item quantity="other">%2$d\'den %1$d bölüm</item>
|
||||
</plurals>
|
||||
<plurals name="minutes_ago">
|
||||
<item quantity="one">%1$d dakika önce</item>
|
||||
<item quantity="other">%1$d dakika önce</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -45,8 +45,8 @@
|
||||
<string name="clear">Temizle</string>
|
||||
<string name="text_clear_history_prompt">Tüm okuma geçmişi kalıcı olarak silinsin mi\?</string>
|
||||
<string name="remove">Kaldır</string>
|
||||
<string name="_s_removed_from_history">\"%s\" geçmişinden kaldırıldı</string>
|
||||
<string name="_s_deleted_from_local_storage">\"%s\" yerel depolama alanından sil</string>
|
||||
<string name="_s_removed_from_history">“%s” geçmişinden kaldırıldı</string>
|
||||
<string name="_s_deleted_from_local_storage">“%s” yerel depolama alanından sil</string>
|
||||
<string name="wait_for_loading_finish">Lütfen bitmesini bekleyin…</string>
|
||||
<string name="save_page">Sayfayı kaydet</string>
|
||||
<string name="share_image">Resmi paylaş</string>
|
||||
@@ -117,7 +117,7 @@
|
||||
<string name="pages_animation">Sayfa animasyonu</string>
|
||||
<string name="cannot_find_available_storage">Kullanılabilir depolama alanı yok</string>
|
||||
<string name="rename">Yeniden adlandır</string>
|
||||
<string name="text_delete_local_manga">\"%s\" cihazdan kalıcı olarak silinsin mi\?</string>
|
||||
<string name="text_delete_local_manga">“%s” cihazdan kalıcı olarak silinsin mi\?</string>
|
||||
<string name="clear_search_history">Arama geçmişini temizle</string>
|
||||
<string name="text_empty_holder_primary">Burası biraz boş…</string>
|
||||
<string name="rotate_screen">Ekranı döndür</string>
|
||||
@@ -131,7 +131,7 @@
|
||||
<string name="restore_backup">Yedekten geri yükle</string>
|
||||
<string name="update">Güncelle</string>
|
||||
<string name="sign_in">Oturum aç</string>
|
||||
<string name="state_finished">Bitti</string>
|
||||
<string name="state_finished">Bitti</string>
|
||||
<string name="about">Hakkında</string>
|
||||
<string name="auth_required">Bu içeriği görüntülemek için oturum açın</string>
|
||||
<string name="confirm">Onayla</string>
|
||||
@@ -140,7 +140,7 @@
|
||||
<string name="taps_on_edges">Kenar dokunuşları</string>
|
||||
<string name="large_manga_save_confirm">Bu mangada %s var. Hepsi kaydedilsin mi\?</string>
|
||||
<string name="enabled_d_of_d" tools:ignore="PluralsCandidate">%1$d / %2$d açık</string>
|
||||
<string name="category_delete_confirm">\"%s\" kategorisi favorilerinizden kaldırılsın mı\?
|
||||
<string name="category_delete_confirm">“%s” kategorisi favorilerinizden kaldırılsın mı\?
|
||||
\nİçindeki tüm mangalar kaybolacak.</string>
|
||||
<string name="text_search_holder_secondary">Sorguyu yeniden biçimlendirmeyi deneyin.</string>
|
||||
<string name="text_history_holder_primary">Okuduklarınız burada görüntülenecek</string>
|
||||
@@ -184,7 +184,7 @@
|
||||
<string name="about_app_translation">Çeviri</string>
|
||||
<string name="search_only_on_s">Yalnızca %s içinde ara</string>
|
||||
<string name="about_feedback_4pda">4PDA\'daki konu</string>
|
||||
<string name="state_ongoing">Devam ediyor</string>
|
||||
<string name="state_ongoing">Devam ediyor</string>
|
||||
<string name="text_clear_cookies_prompt">Tüm kaynaklardaki oturumunuz kapatılacak</string>
|
||||
<string name="enabled_sources">Kullanılan kaynaklar</string>
|
||||
<string name="available_sources">Kullanılabilir kaynaklar</string>
|
||||
@@ -223,13 +223,13 @@
|
||||
<string name="captcha_required">CAPTCHA gerekli</string>
|
||||
<string name="cookies_cleared">Tüm çerezler kaldırıldı</string>
|
||||
<string name="reader_mode_hint">Seçilen yapılandırma bu manga için hatırlanacak</string>
|
||||
<string name="text_clear_updates_feed_prompt">Tüm güncelleme geçmişi kalıcı olarak silinsin mi\?</string>
|
||||
<string name="text_clear_updates_feed_prompt">Tüm güncelleme geçmişi kalıcı olarak silinsin mi\?</string>
|
||||
<string name="_and_x_more">…ve %1$d daha fazlası</string>
|
||||
<string name="protect_application_subtitle">Uygulamayı başlatmak için bir parola girin</string>
|
||||
<string name="text_clear_search_history_prompt">Tüm son arama sorguları kalıcı olarak kaldırılsın mı\?</string>
|
||||
<string name="about_feedback">Geri bildirim</string>
|
||||
<string name="backup_saved">Yedek kaydedildi</string>
|
||||
<string name="genres">Türler</string>
|
||||
<string name="genres">Türler</string>
|
||||
<string name="date_format">Tarih biçimi</string>
|
||||
<string name="system_default">Öntanımlı</string>
|
||||
<string name="error_empty_name">Bir ad girmelisiniz</string>
|
||||
@@ -264,4 +264,12 @@
|
||||
<string name="search_chapters">Bölüm bul</string>
|
||||
<string name="chapters_empty">Bu mangada bölüm yok</string>
|
||||
<string name="percent_string_pattern">%%%1$s</string>
|
||||
<string name="content">İçerik</string>
|
||||
<string name="suggestions_updating">Öneriler güncelleniyor</string>
|
||||
<string name="appearance">Görünüm</string>
|
||||
<string name="suggestions_excluded_genres">Türleri hariç tut</string>
|
||||
<string name="suggestions_excluded_genres_summary">Önerilerde görmek istemediğiniz türleri belirtin</string>
|
||||
<string name="text_delete_local_manga_batch">Seçilen ögeler aygıttan kalıcı olarak silinsin mi\?</string>
|
||||
<string name="batch_manga_save_confirm">Seçilen tüm mangaları tüm bölümleriyle birlikte indirmek istediğinizden emin misiniz\? Bu işlem çok fazla trafik ve depolama alanı tüketebilir</string>
|
||||
<string name="removal_completed">Kaldırma tamamlandı</string>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user