commit
0d7c5b5355
@ -0,0 +1,6 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<resources> |
||||||
|
|
||||||
|
<string name="app_name">閱讀Pro</string> |
||||||
|
|
||||||
|
</resources> |
@ -0,0 +1,6 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<resources> |
||||||
|
|
||||||
|
<string name="app_name">阅读Pro</string> |
||||||
|
|
||||||
|
</resources> |
@ -0,0 +1,74 @@ |
|||||||
|
package io.legado.app.help |
||||||
|
|
||||||
|
import io.legado.app.App |
||||||
|
import io.legado.app.R |
||||||
|
import io.legado.app.utils.getPrefBoolean |
||||||
|
import io.legado.app.utils.getPrefInt |
||||||
|
import io.legado.app.utils.putPrefBoolean |
||||||
|
import io.legado.app.utils.putPrefInt |
||||||
|
|
||||||
|
object ReadTipConfig { |
||||||
|
val tipArray: Array<String> = App.INSTANCE.resources.getStringArray(R.array.read_tip) |
||||||
|
const val none = 0 |
||||||
|
const val chapterTitle = 1 |
||||||
|
const val time = 2 |
||||||
|
const val battery = 3 |
||||||
|
const val page = 4 |
||||||
|
const val totalProgress = 5 |
||||||
|
const val pageAndTotal = 6 |
||||||
|
|
||||||
|
val tipHeaderLeftStr: String get() = tipArray.getOrElse(tipHeaderLeft) { tipArray[none] } |
||||||
|
val tipHeaderMiddleStr: String get() = tipArray.getOrElse(tipHeaderMiddle) { tipArray[none] } |
||||||
|
val tipHeaderRightStr: String get() = tipArray.getOrElse(tipHeaderRight) { tipArray[none] } |
||||||
|
val tipFooterLeftStr: String get() = tipArray.getOrElse(tipFooterLeft) { tipArray[none] } |
||||||
|
val tipFooterMiddleStr: String get() = tipArray.getOrElse(tipFooterMiddle) { tipArray[none] } |
||||||
|
val tipFooterRightStr: String get() = tipArray.getOrElse(tipFooterRight) { tipArray[none] } |
||||||
|
|
||||||
|
var tipHeaderLeft: Int |
||||||
|
get() = App.INSTANCE.getPrefInt("tipHeaderLeft", time) |
||||||
|
set(value) { |
||||||
|
App.INSTANCE.putPrefInt("tipHeaderLeft", value) |
||||||
|
} |
||||||
|
|
||||||
|
var tipHeaderMiddle: Int |
||||||
|
get() = App.INSTANCE.getPrefInt("tipHeaderMiddle", none) |
||||||
|
set(value) { |
||||||
|
App.INSTANCE.putPrefInt("tipHeaderMiddle", value) |
||||||
|
} |
||||||
|
|
||||||
|
var tipHeaderRight: Int |
||||||
|
get() = App.INSTANCE.getPrefInt("tipHeaderRight", battery) |
||||||
|
set(value) { |
||||||
|
App.INSTANCE.putPrefInt("tipHeaderRight", value) |
||||||
|
} |
||||||
|
|
||||||
|
var tipFooterLeft: Int |
||||||
|
get() = App.INSTANCE.getPrefInt("tipFooterLeft", chapterTitle) |
||||||
|
set(value) { |
||||||
|
App.INSTANCE.putPrefInt("tipFooterLeft", value) |
||||||
|
} |
||||||
|
|
||||||
|
var tipFooterMiddle: Int |
||||||
|
get() = App.INSTANCE.getPrefInt("tipFooterMiddle", none) |
||||||
|
set(value) { |
||||||
|
App.INSTANCE.putPrefInt("tipFooterMiddle", value) |
||||||
|
} |
||||||
|
|
||||||
|
var tipFooterRight: Int |
||||||
|
get() = App.INSTANCE.getPrefInt("tipFooterRight", pageAndTotal) |
||||||
|
set(value) { |
||||||
|
App.INSTANCE.putPrefInt("tipFooterRight", value) |
||||||
|
} |
||||||
|
|
||||||
|
var hideHeader: Boolean |
||||||
|
get() = App.INSTANCE.getPrefBoolean("hideHeader", true) |
||||||
|
set(value) { |
||||||
|
App.INSTANCE.putPrefBoolean("hideHeader", value) |
||||||
|
} |
||||||
|
|
||||||
|
var hideFooter: Boolean |
||||||
|
get() = App.INSTANCE.getPrefBoolean("hideFooter", false) |
||||||
|
set(value) { |
||||||
|
App.INSTANCE.putPrefBoolean("hideFooter", value) |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,117 @@ |
|||||||
|
package io.legado.app.ui.book.read.config |
||||||
|
|
||||||
|
import android.os.Bundle |
||||||
|
import android.util.DisplayMetrics |
||||||
|
import android.view.LayoutInflater |
||||||
|
import android.view.View |
||||||
|
import android.view.ViewGroup |
||||||
|
import io.legado.app.R |
||||||
|
import io.legado.app.base.BaseDialogFragment |
||||||
|
import io.legado.app.constant.EventBus |
||||||
|
import io.legado.app.help.ReadTipConfig |
||||||
|
import io.legado.app.lib.dialogs.selector |
||||||
|
import io.legado.app.ui.book.read.Help |
||||||
|
import io.legado.app.utils.postEvent |
||||||
|
import kotlinx.android.synthetic.main.dialog_tip_config.* |
||||||
|
import org.jetbrains.anko.sdk27.listeners.onCheckedChange |
||||||
|
import org.jetbrains.anko.sdk27.listeners.onClick |
||||||
|
|
||||||
|
class TipConfigDialog : BaseDialogFragment() { |
||||||
|
|
||||||
|
override fun onStart() { |
||||||
|
super.onStart() |
||||||
|
val dm = DisplayMetrics() |
||||||
|
activity?.let { |
||||||
|
Help.upSystemUiVisibility(it) |
||||||
|
it.windowManager?.defaultDisplay?.getMetrics(dm) |
||||||
|
} |
||||||
|
dialog?.window?.let { |
||||||
|
val attr = it.attributes |
||||||
|
attr.dimAmount = 0.0f |
||||||
|
it.attributes = attr |
||||||
|
it.setLayout((dm.widthPixels * 0.9).toInt(), ViewGroup.LayoutParams.WRAP_CONTENT) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
override fun onCreateView( |
||||||
|
inflater: LayoutInflater, |
||||||
|
container: ViewGroup?, |
||||||
|
savedInstanceState: Bundle? |
||||||
|
): View? { |
||||||
|
return inflater.inflate(R.layout.dialog_tip_config, container) |
||||||
|
} |
||||||
|
|
||||||
|
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { |
||||||
|
initView() |
||||||
|
initEvent() |
||||||
|
} |
||||||
|
|
||||||
|
private fun initView() { |
||||||
|
tv_header_left.text = ReadTipConfig.tipHeaderLeftStr |
||||||
|
tv_header_middle.text = ReadTipConfig.tipHeaderMiddleStr |
||||||
|
tv_header_right.text = ReadTipConfig.tipHeaderRightStr |
||||||
|
tv_footer_left.text = ReadTipConfig.tipFooterLeftStr |
||||||
|
tv_footer_middle.text = ReadTipConfig.tipFooterMiddleStr |
||||||
|
tv_footer_right.text = ReadTipConfig.tipFooterRightStr |
||||||
|
sw_hide_header.isChecked = ReadTipConfig.hideHeader |
||||||
|
sw_hide_footer.isChecked = ReadTipConfig.hideFooter |
||||||
|
} |
||||||
|
|
||||||
|
private fun initEvent() { |
||||||
|
tv_header_left.onClick { |
||||||
|
selector(items = ReadTipConfig.tipArray.toList()) { _, i -> |
||||||
|
ReadTipConfig.tipHeaderLeft = i |
||||||
|
tv_header_left.text = ReadTipConfig.tipArray[i] |
||||||
|
postEvent(EventBus.UP_CONFIG, true) |
||||||
|
} |
||||||
|
} |
||||||
|
tv_header_middle.onClick { |
||||||
|
selector(items = ReadTipConfig.tipArray.toList()) { _, i -> |
||||||
|
ReadTipConfig.tipHeaderMiddle = i |
||||||
|
tv_header_middle.text = ReadTipConfig.tipArray[i] |
||||||
|
postEvent(EventBus.UP_CONFIG, true) |
||||||
|
} |
||||||
|
} |
||||||
|
tv_header_right.onClick { |
||||||
|
selector(items = ReadTipConfig.tipArray.toList()) { _, i -> |
||||||
|
ReadTipConfig.tipHeaderRight = i |
||||||
|
tv_header_right.text = ReadTipConfig.tipArray[i] |
||||||
|
postEvent(EventBus.UP_CONFIG, true) |
||||||
|
} |
||||||
|
} |
||||||
|
tv_footer_left.onClick { |
||||||
|
selector(items = ReadTipConfig.tipArray.toList()) { _, i -> |
||||||
|
ReadTipConfig.tipFooterLeft = i |
||||||
|
tv_footer_left.text = ReadTipConfig.tipArray[i] |
||||||
|
postEvent(EventBus.UP_CONFIG, true) |
||||||
|
} |
||||||
|
} |
||||||
|
tv_footer_middle.onClick { |
||||||
|
selector(items = ReadTipConfig.tipArray.toList()) { _, i -> |
||||||
|
ReadTipConfig.tipFooterMiddle = i |
||||||
|
tv_footer_middle.text = ReadTipConfig.tipArray[i] |
||||||
|
postEvent(EventBus.UP_CONFIG, true) |
||||||
|
} |
||||||
|
} |
||||||
|
tv_footer_right.onClick { |
||||||
|
selector(items = ReadTipConfig.tipArray.toList()) { _, i -> |
||||||
|
ReadTipConfig.tipFooterRight = i |
||||||
|
tv_footer_right.text = ReadTipConfig.tipArray[i] |
||||||
|
postEvent(EventBus.UP_CONFIG, true) |
||||||
|
} |
||||||
|
} |
||||||
|
sw_hide_header.onCheckedChange { buttonView, isChecked -> |
||||||
|
if (buttonView?.isPressed == true) { |
||||||
|
ReadTipConfig.hideHeader = isChecked |
||||||
|
postEvent(EventBus.UP_CONFIG, true) |
||||||
|
} |
||||||
|
} |
||||||
|
sw_hide_footer.onCheckedChange { buttonView, isChecked -> |
||||||
|
if (buttonView?.isPressed == true) { |
||||||
|
ReadTipConfig.hideFooter = isChecked |
||||||
|
postEvent(EventBus.UP_CONFIG, true) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -1,124 +1,85 @@ |
|||||||
package io.legado.app.ui.rss.article |
package io.legado.app.ui.rss.article |
||||||
|
|
||||||
import android.app.Application |
import android.app.Application |
||||||
import android.content.Intent |
import android.os.Bundle |
||||||
import androidx.lifecycle.MutableLiveData |
import androidx.lifecycle.MutableLiveData |
||||||
import io.legado.app.App |
import io.legado.app.App |
||||||
import io.legado.app.base.BaseViewModel |
import io.legado.app.base.BaseViewModel |
||||||
import io.legado.app.data.entities.RssArticle |
import io.legado.app.data.entities.RssArticle |
||||||
import io.legado.app.data.entities.RssReadRecord |
|
||||||
import io.legado.app.data.entities.RssSource |
import io.legado.app.data.entities.RssSource |
||||||
import io.legado.app.model.Rss |
import io.legado.app.model.Rss |
||||||
import kotlinx.coroutines.Dispatchers.IO |
import kotlinx.coroutines.Dispatchers |
||||||
import kotlinx.coroutines.Dispatchers.Main |
|
||||||
import kotlinx.coroutines.withContext |
import kotlinx.coroutines.withContext |
||||||
|
|
||||||
|
|
||||||
class RssArticlesViewModel(application: Application) : BaseViewModel(application) { |
class RssArticlesViewModel(application: Application) : BaseViewModel(application) { |
||||||
var callBack: CallBack? = null |
val loadFinally = MutableLiveData<Boolean>() |
||||||
var url: String? = null |
|
||||||
var rssSource: RssSource? = null |
|
||||||
val titleLiveData = MutableLiveData<String>() |
|
||||||
var isLoading = true |
var isLoading = true |
||||||
var order = System.currentTimeMillis() |
var order = System.currentTimeMillis() |
||||||
private var nextPageUrl: String? = null |
private var nextPageUrl: String? = null |
||||||
|
private val articles = arrayListOf<RssArticle>() |
||||||
|
var sortName: String = "" |
||||||
|
var sortUrl: String = "" |
||||||
|
|
||||||
fun initData(intent: Intent, finally: () -> Unit) { |
fun init(bundle: Bundle?) { |
||||||
execute { |
bundle?.let { |
||||||
url = intent.getStringExtra("url") |
sortName = it.getString("sortName") ?: "" |
||||||
url?.let { url -> |
sortUrl = it.getString("sortUrl") ?: "" |
||||||
rssSource = App.db.rssSourceDao().getByKey(url) |
|
||||||
rssSource?.let { |
|
||||||
titleLiveData.postValue(it.sourceName) |
|
||||||
} ?: let { |
|
||||||
rssSource = RssSource(sourceUrl = url) |
|
||||||
} |
|
||||||
} |
|
||||||
}.onFinally { |
|
||||||
finally() |
|
||||||
} |
} |
||||||
} |
} |
||||||
|
|
||||||
fun loadContent() { |
|
||||||
|
fun loadContent(rssSource: RssSource) { |
||||||
isLoading = true |
isLoading = true |
||||||
rssSource?.let { rssSource -> |
Rss.getArticles(sortName, sortUrl, rssSource, null) |
||||||
Rss.getArticles(rssSource, null) |
.onSuccess(Dispatchers.IO) { |
||||||
.onSuccess(IO) { |
nextPageUrl = it.nextPageUrl |
||||||
nextPageUrl = it.nextPageUrl |
it.articles.let { list -> |
||||||
it.articles.let { list -> |
list.forEach { rssArticle -> |
||||||
list.forEach { rssArticle -> |
rssArticle.order = order-- |
||||||
rssArticle.order = order-- |
} |
||||||
} |
App.db.rssArticleDao().insert(*list.toTypedArray()) |
||||||
App.db.rssArticleDao().insert(*list.toTypedArray()) |
if (!rssSource.ruleNextPage.isNullOrEmpty()) { |
||||||
if (!rssSource.ruleNextPage.isNullOrEmpty()) { |
App.db.rssArticleDao().clearOld(rssSource.sourceUrl, sortName, order) |
||||||
App.db.rssArticleDao().clearOld(url!!, order) |
loadFinally.postValue(true) |
||||||
withContext(Main) { |
} else { |
||||||
callBack?.loadFinally(true) |
withContext(Dispatchers.Main) { |
||||||
} |
loadFinally.postValue(false) |
||||||
} else { |
|
||||||
withContext(Main) { |
|
||||||
callBack?.loadFinally(false) |
|
||||||
} |
|
||||||
} |
} |
||||||
isLoading = false |
|
||||||
|
|
||||||
} |
} |
||||||
}.onError { |
isLoading = false |
||||||
toast(it.localizedMessage) |
|
||||||
} |
} |
||||||
} |
}.onError { |
||||||
|
toast(it.localizedMessage) |
||||||
|
} |
||||||
} |
} |
||||||
|
|
||||||
fun loadMore() { |
fun loadMore(rssSource: RssSource) { |
||||||
isLoading = true |
isLoading = true |
||||||
val source = rssSource |
|
||||||
val pageUrl = nextPageUrl |
val pageUrl = nextPageUrl |
||||||
if (source != null && !pageUrl.isNullOrEmpty()) { |
if (!pageUrl.isNullOrEmpty()) { |
||||||
Rss.getArticles(source, pageUrl) |
Rss.getArticles(sortName, pageUrl, rssSource, pageUrl) |
||||||
.onSuccess(IO) { |
.onSuccess(Dispatchers.IO) { |
||||||
nextPageUrl = it.nextPageUrl |
nextPageUrl = it.nextPageUrl |
||||||
it.articles.let { list -> |
it.articles.let { list -> |
||||||
if (list.isEmpty()) { |
if (list.isEmpty()) { |
||||||
callBack?.loadFinally(false) |
loadFinally.postValue(true) |
||||||
return@let |
return@let |
||||||
} |
} |
||||||
callBack?.adapter?.getItems()?.let { adapterItems -> |
if (articles.contains(list.first())) { |
||||||
if (adapterItems.contains(list.first())) { |
loadFinally.postValue(false) |
||||||
callBack?.loadFinally(false) |
} else { |
||||||
} else { |
list.forEach { rssArticle -> |
||||||
list.forEach { rssArticle -> |
rssArticle.order = order-- |
||||||
rssArticle.order = order-- |
|
||||||
} |
|
||||||
App.db.rssArticleDao().insert(*list.toTypedArray()) |
|
||||||
} |
} |
||||||
|
App.db.rssArticleDao().insert(*list.toTypedArray()) |
||||||
} |
} |
||||||
} |
} |
||||||
isLoading = false |
isLoading = false |
||||||
} |
} |
||||||
} else { |
} else { |
||||||
callBack?.loadFinally(false) |
loadFinally.postValue(false) |
||||||
} |
} |
||||||
} |
} |
||||||
|
|
||||||
fun read(rssArticle: RssArticle) { |
|
||||||
execute { |
|
||||||
App.db.rssArticleDao().insertRecord(RssReadRecord(rssArticle.link)) |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
fun clearArticles() { |
|
||||||
execute { |
|
||||||
url?.let { |
|
||||||
App.db.rssArticleDao().delete(it) |
|
||||||
} |
|
||||||
order = System.currentTimeMillis() |
|
||||||
}.onSuccess { |
|
||||||
loadContent() |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
interface CallBack { |
|
||||||
var adapter: RssArticlesAdapter |
|
||||||
fun loadFinally(hasMore: Boolean) |
|
||||||
} |
|
||||||
} |
} |
@ -0,0 +1,100 @@ |
|||||||
|
package io.legado.app.ui.rss.article |
||||||
|
|
||||||
|
import android.app.Activity |
||||||
|
import android.content.Intent |
||||||
|
import android.os.Bundle |
||||||
|
import android.view.Menu |
||||||
|
import android.view.MenuItem |
||||||
|
import androidx.fragment.app.Fragment |
||||||
|
import androidx.fragment.app.FragmentManager |
||||||
|
import androidx.fragment.app.FragmentStatePagerAdapter |
||||||
|
import androidx.lifecycle.Observer |
||||||
|
import io.legado.app.R |
||||||
|
import io.legado.app.base.VMBaseActivity |
||||||
|
import io.legado.app.ui.rss.source.edit.RssSourceEditActivity |
||||||
|
import io.legado.app.utils.getViewModel |
||||||
|
import io.legado.app.utils.gone |
||||||
|
import io.legado.app.utils.visible |
||||||
|
import kotlinx.android.synthetic.main.activity_rss_artivles.* |
||||||
|
import org.jetbrains.anko.startActivityForResult |
||||||
|
|
||||||
|
class RssSortActivity : VMBaseActivity<RssSortViewModel>(R.layout.activity_rss_artivles) { |
||||||
|
|
||||||
|
override val viewModel: RssSortViewModel |
||||||
|
get() = getViewModel(RssSortViewModel::class.java) |
||||||
|
private val editSource = 12319 |
||||||
|
private val fragments = linkedMapOf<String, RssArticlesFragment>() |
||||||
|
private lateinit var adapter: TabFragmentPageAdapter |
||||||
|
|
||||||
|
override fun onActivityCreated(savedInstanceState: Bundle?) { |
||||||
|
adapter = TabFragmentPageAdapter(supportFragmentManager) |
||||||
|
tab_layout.setupWithViewPager(view_pager) |
||||||
|
view_pager.adapter = adapter |
||||||
|
viewModel.titleLiveData.observe(this, Observer { |
||||||
|
title_bar.title = it |
||||||
|
}) |
||||||
|
viewModel.initData(intent) { |
||||||
|
upFragments() |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
override fun onCompatCreateOptionsMenu(menu: Menu): Boolean { |
||||||
|
menuInflater.inflate(R.menu.rss_articles, menu) |
||||||
|
return super.onCompatCreateOptionsMenu(menu) |
||||||
|
} |
||||||
|
|
||||||
|
override fun onCompatOptionsItemSelected(item: MenuItem): Boolean { |
||||||
|
when (item.itemId) { |
||||||
|
R.id.menu_edit_source -> viewModel.rssSource?.sourceUrl?.let { |
||||||
|
startActivityForResult<RssSourceEditActivity>(editSource, Pair("data", it)) |
||||||
|
} |
||||||
|
R.id.menu_clear -> { |
||||||
|
viewModel.url?.let { |
||||||
|
viewModel.clearArticles() |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return super.onCompatOptionsItemSelected(item) |
||||||
|
} |
||||||
|
|
||||||
|
private fun upFragments() { |
||||||
|
fragments.clear() |
||||||
|
viewModel.rssSource?.sortUrls()?.forEach { |
||||||
|
fragments[it.key] = RssArticlesFragment.create(it.key, it.value) |
||||||
|
} |
||||||
|
if (fragments.size == 1) { |
||||||
|
tab_layout.gone() |
||||||
|
} else { |
||||||
|
tab_layout.visible() |
||||||
|
} |
||||||
|
adapter.notifyDataSetChanged() |
||||||
|
} |
||||||
|
|
||||||
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { |
||||||
|
super.onActivityResult(requestCode, resultCode, data) |
||||||
|
when (requestCode) { |
||||||
|
editSource -> if (resultCode == Activity.RESULT_OK) { |
||||||
|
viewModel.initData(intent) { |
||||||
|
upFragments() |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private inner class TabFragmentPageAdapter internal constructor(fm: FragmentManager) : |
||||||
|
FragmentStatePagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) { |
||||||
|
|
||||||
|
override fun getPageTitle(position: Int): CharSequence? { |
||||||
|
return fragments.keys.elementAt(position) |
||||||
|
} |
||||||
|
|
||||||
|
override fun getItem(position: Int): Fragment { |
||||||
|
return fragments.values.elementAt(position) |
||||||
|
} |
||||||
|
|
||||||
|
override fun getCount(): Int { |
||||||
|
return fragments.size |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,52 @@ |
|||||||
|
package io.legado.app.ui.rss.article |
||||||
|
|
||||||
|
import android.app.Application |
||||||
|
import android.content.Intent |
||||||
|
import androidx.lifecycle.MutableLiveData |
||||||
|
import io.legado.app.App |
||||||
|
import io.legado.app.base.BaseViewModel |
||||||
|
import io.legado.app.data.entities.RssArticle |
||||||
|
import io.legado.app.data.entities.RssReadRecord |
||||||
|
import io.legado.app.data.entities.RssSource |
||||||
|
|
||||||
|
|
||||||
|
class RssSortViewModel(application: Application) : BaseViewModel(application) { |
||||||
|
var url: String? = null |
||||||
|
var rssSource: RssSource? = null |
||||||
|
val titleLiveData = MutableLiveData<String>() |
||||||
|
var order = System.currentTimeMillis() |
||||||
|
|
||||||
|
fun initData(intent: Intent, finally: () -> Unit) { |
||||||
|
execute { |
||||||
|
url = intent.getStringExtra("url") |
||||||
|
url?.let { url -> |
||||||
|
rssSource = App.db.rssSourceDao().getByKey(url) |
||||||
|
rssSource?.let { |
||||||
|
titleLiveData.postValue(it.sourceName) |
||||||
|
} ?: let { |
||||||
|
rssSource = RssSource(sourceUrl = url) |
||||||
|
} |
||||||
|
} |
||||||
|
}.onFinally { |
||||||
|
finally() |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
fun read(rssArticle: RssArticle) { |
||||||
|
execute { |
||||||
|
App.db.rssArticleDao().insertRecord(RssReadRecord(rssArticle.link)) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
fun clearArticles() { |
||||||
|
execute { |
||||||
|
url?.let { |
||||||
|
App.db.rssArticleDao().delete(it) |
||||||
|
} |
||||||
|
order = System.currentTimeMillis() |
||||||
|
}.onSuccess { |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,266 @@ |
|||||||
|
package io.legado.app.utils |
||||||
|
|
||||||
|
import androidx.annotation.IdRes |
||||||
|
import androidx.constraintlayout.widget.ConstraintLayout |
||||||
|
import androidx.constraintlayout.widget.ConstraintSet |
||||||
|
import androidx.transition.TransitionManager |
||||||
|
|
||||||
|
|
||||||
|
class ConstraintUtil(val constraintLayout: ConstraintLayout) { |
||||||
|
|
||||||
|
private var begin: ConstraintBegin? = null |
||||||
|
private val applyConstraintSet = ConstraintSet() |
||||||
|
private val resetConstraintSet = ConstraintSet() |
||||||
|
|
||||||
|
init { |
||||||
|
resetConstraintSet.clone(constraintLayout) |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 开始修改 |
||||||
|
*/ |
||||||
|
fun begin(): ConstraintBegin? { |
||||||
|
synchronized(ConstraintBegin::class.java) { |
||||||
|
if (begin == null) { |
||||||
|
begin = ConstraintBegin() |
||||||
|
} |
||||||
|
} |
||||||
|
applyConstraintSet.clone(constraintLayout) |
||||||
|
return begin |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 带动画的修改 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
fun beginWithAnim(): ConstraintBegin? { |
||||||
|
TransitionManager.beginDelayedTransition(constraintLayout) |
||||||
|
return begin() |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 重置 |
||||||
|
*/ |
||||||
|
fun reSet() { |
||||||
|
resetConstraintSet.applyTo(constraintLayout) |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 带动画的重置 |
||||||
|
*/ |
||||||
|
fun reSetWidthAnim() { |
||||||
|
TransitionManager.beginDelayedTransition(constraintLayout) |
||||||
|
resetConstraintSet.applyTo(constraintLayout) |
||||||
|
} |
||||||
|
|
||||||
|
inner class ConstraintBegin { |
||||||
|
/** |
||||||
|
* 清除关系<br></br> |
||||||
|
* 注意:这里不仅仅会清除关系,还会清除对应控件的宽高为 w:0,h:0 |
||||||
|
* @param viewIds |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
fun clear(@IdRes vararg viewIds: Int): ConstraintBegin { |
||||||
|
for (viewId in viewIds) { |
||||||
|
applyConstraintSet.clear(viewId) |
||||||
|
} |
||||||
|
return this |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 清除某个控件的,某个关系 |
||||||
|
* @param viewId |
||||||
|
* @param anchor |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
fun clear(viewId: Int, anchor: Int): ConstraintBegin { |
||||||
|
applyConstraintSet.clear(viewId, anchor) |
||||||
|
return this |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 为某个控件设置 margin |
||||||
|
* @param viewId 某个控件ID |
||||||
|
* @param left marginLeft |
||||||
|
* @param top marginTop |
||||||
|
* @param right marginRight |
||||||
|
* @param bottom marginBottom |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
fun setMargin( |
||||||
|
@IdRes viewId: Int, |
||||||
|
left: Int, |
||||||
|
top: Int, |
||||||
|
right: Int, |
||||||
|
bottom: Int |
||||||
|
): ConstraintBegin { |
||||||
|
setMarginLeft(viewId, left) |
||||||
|
setMarginTop(viewId, top) |
||||||
|
setMarginRight(viewId, right) |
||||||
|
setMarginBottom(viewId, bottom) |
||||||
|
return this |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 为某个控件设置 marginLeft |
||||||
|
* @param viewId 某个控件ID |
||||||
|
* @param left marginLeft |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
fun setMarginLeft(@IdRes viewId: Int, left: Int): ConstraintBegin { |
||||||
|
applyConstraintSet.setMargin(viewId, ConstraintSet.LEFT, left) |
||||||
|
return this |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 为某个控件设置 marginRight |
||||||
|
* @param viewId 某个控件ID |
||||||
|
* @param right marginRight |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
fun setMarginRight(@IdRes viewId: Int, right: Int): ConstraintBegin { |
||||||
|
applyConstraintSet.setMargin(viewId, ConstraintSet.RIGHT, right) |
||||||
|
return this |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 为某个控件设置 marginTop |
||||||
|
* @param viewId 某个控件ID |
||||||
|
* @param top marginTop |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
fun setMarginTop(@IdRes viewId: Int, top: Int): ConstraintBegin { |
||||||
|
applyConstraintSet.setMargin(viewId, ConstraintSet.TOP, top) |
||||||
|
return this |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 为某个控件设置marginBottom |
||||||
|
* @param viewId 某个控件ID |
||||||
|
* @param bottom marginBottom |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
fun setMarginBottom(@IdRes viewId: Int, bottom: Int): ConstraintBegin { |
||||||
|
applyConstraintSet.setMargin(viewId, ConstraintSet.BOTTOM, bottom) |
||||||
|
return this |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 为某个控件设置关联关系 left_to_left_of |
||||||
|
* @param startId |
||||||
|
* @param endId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
fun Left_toLeftOf(@IdRes startId: Int, @IdRes endId: Int): ConstraintBegin { |
||||||
|
applyConstraintSet.connect(startId, ConstraintSet.LEFT, endId, ConstraintSet.LEFT) |
||||||
|
return this |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 为某个控件设置关联关系 left_to_right_of |
||||||
|
* @param startId |
||||||
|
* @param endId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
fun Left_toRightOf(@IdRes startId: Int, @IdRes endId: Int): ConstraintBegin { |
||||||
|
applyConstraintSet.connect(startId, ConstraintSet.LEFT, endId, ConstraintSet.RIGHT) |
||||||
|
return this |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 为某个控件设置关联关系 top_to_top_of |
||||||
|
* @param startId |
||||||
|
* @param endId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
fun Top_toTopOf(@IdRes startId: Int, @IdRes endId: Int): ConstraintBegin { |
||||||
|
applyConstraintSet.connect(startId, ConstraintSet.TOP, endId, ConstraintSet.TOP) |
||||||
|
return this |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 为某个控件设置关联关系 top_to_bottom_of |
||||||
|
* @param startId |
||||||
|
* @param endId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
fun Top_toBottomOf(@IdRes startId: Int, @IdRes endId: Int): ConstraintBegin { |
||||||
|
applyConstraintSet.connect(startId, ConstraintSet.TOP, endId, ConstraintSet.BOTTOM) |
||||||
|
return this |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 为某个控件设置关联关系 right_to_left_of |
||||||
|
* @param startId |
||||||
|
* @param endId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
fun Right_toLeftOf(@IdRes startId: Int, @IdRes endId: Int): ConstraintBegin { |
||||||
|
applyConstraintSet.connect(startId, ConstraintSet.RIGHT, endId, ConstraintSet.LEFT) |
||||||
|
return this |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 为某个控件设置关联关系 right_to_right_of |
||||||
|
* @param startId |
||||||
|
* @param endId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
fun Right_toRightOf(@IdRes startId: Int, @IdRes endId: Int): ConstraintBegin { |
||||||
|
applyConstraintSet.connect(startId, ConstraintSet.RIGHT, endId, ConstraintSet.RIGHT) |
||||||
|
return this |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 为某个控件设置关联关系 bottom_to_bottom_of |
||||||
|
* @param startId |
||||||
|
* @param endId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
fun Bottom_toBottomOf(@IdRes startId: Int, @IdRes endId: Int): ConstraintBegin { |
||||||
|
applyConstraintSet.connect(startId, ConstraintSet.BOTTOM, endId, ConstraintSet.BOTTOM) |
||||||
|
return this |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 为某个控件设置关联关系 bottom_to_top_of |
||||||
|
* @param startId |
||||||
|
* @param endId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
fun Bottom_toTopOf(@IdRes startId: Int, @IdRes endId: Int): ConstraintBegin { |
||||||
|
applyConstraintSet.connect(startId, ConstraintSet.BOTTOM, endId, ConstraintSet.TOP) |
||||||
|
return this |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 为某个控件设置宽度 |
||||||
|
* @param viewId |
||||||
|
* @param width |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
fun setWidth(@IdRes viewId: Int, width: Int): ConstraintBegin { |
||||||
|
applyConstraintSet.constrainWidth(viewId, width) |
||||||
|
return this |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 某个控件设置高度 |
||||||
|
* @param viewId |
||||||
|
* @param height |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
fun setHeight(@IdRes viewId: Int, height: Int): ConstraintBegin { |
||||||
|
applyConstraintSet.constrainHeight(viewId, height) |
||||||
|
return this |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 提交应用生效 |
||||||
|
*/ |
||||||
|
fun commit() { |
||||||
|
applyConstraintSet.applyTo(constraintLayout) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -1,28 +1,24 @@ |
|||||||
<?xml version="1.0" encoding="utf-8"?> |
<?xml version="1.0" encoding="utf-8"?> |
||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" |
||||||
xmlns:app="http://schemas.android.com/apk/res-auto" |
|
||||||
android:layout_width="match_parent" |
android:layout_width="match_parent" |
||||||
android:layout_height="match_parent" |
android:layout_height="match_parent" |
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto" |
||||||
android:orientation="vertical"> |
android:orientation="vertical"> |
||||||
|
|
||||||
<io.legado.app.ui.widget.TitleBar |
<io.legado.app.ui.widget.TitleBar |
||||||
android:id="@+id/title_bar" |
android:id="@+id/title_bar" |
||||||
android:layout_width="match_parent" |
android:layout_width="match_parent" |
||||||
android:layout_height="wrap_content" |
android:layout_height="wrap_content" /> |
||||||
app:layout_constraintTop_toTopOf="parent" /> |
|
||||||
|
|
||||||
<io.legado.app.ui.widget.dynamiclayout.DynamicFrameLayout |
<com.google.android.material.tabs.TabLayout |
||||||
android:id="@+id/content_view" |
android:id="@+id/tab_layout" |
||||||
android:layout_width="match_parent" |
android:layout_width="match_parent" |
||||||
android:layout_height="0dp" |
android:layout_height="wrap_content" |
||||||
app:layout_constraintBottom_toBottomOf="parent" |
app:tabMode="scrollable" /> |
||||||
app:layout_constraintTop_toBottomOf="@id/title_bar"> |
|
||||||
|
|
||||||
<io.legado.app.ui.widget.recycler.RefreshRecyclerView |
|
||||||
android:id="@+id/refresh_recycler_view" |
|
||||||
android:layout_width="match_parent" |
|
||||||
android:layout_height="match_parent" /> |
|
||||||
|
|
||||||
</io.legado.app.ui.widget.dynamiclayout.DynamicFrameLayout> |
<androidx.viewpager.widget.ViewPager |
||||||
|
android:id="@+id/view_pager" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="wrap_content" /> |
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout> |
</LinearLayout> |
@ -0,0 +1,125 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" |
||||||
|
xmlns:tools="http://schemas.android.com/tools" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:padding="16dp" |
||||||
|
android:orientation="vertical"> |
||||||
|
|
||||||
|
<io.legado.app.ui.widget.text.AccentTextView |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:text="@string/header" /> |
||||||
|
|
||||||
|
<LinearLayout |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:orientation="horizontal" |
||||||
|
android:paddingLeft="12dp" |
||||||
|
android:gravity="center_vertical" |
||||||
|
tools:ignore="RtlHardcoded,RtlSymmetry"> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:padding="4dp" |
||||||
|
android:text="@string/left" /> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:id="@+id/tv_header_left" |
||||||
|
android:layout_width="0dp" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:layout_weight="1" /> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:padding="4dp" |
||||||
|
android:text="@string/middle" /> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:id="@+id/tv_header_middle" |
||||||
|
android:layout_width="0dp" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:layout_weight="1" /> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:padding="4dp" |
||||||
|
android:text="@string/right" /> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:id="@+id/tv_header_right" |
||||||
|
android:layout_width="0dp" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:layout_weight="1" /> |
||||||
|
|
||||||
|
</LinearLayout> |
||||||
|
|
||||||
|
<io.legado.app.ui.widget.text.AccentTextView |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:text="@string/footer" /> |
||||||
|
|
||||||
|
<LinearLayout |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:orientation="horizontal" |
||||||
|
android:paddingLeft="12dp" |
||||||
|
android:gravity="center_vertical" |
||||||
|
tools:ignore="RtlHardcoded,RtlSymmetry"> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:padding="4dp" |
||||||
|
android:text="@string/left" /> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:id="@+id/tv_footer_left" |
||||||
|
android:layout_width="0dp" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:layout_weight="1" /> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:padding="4dp" |
||||||
|
android:text="@string/middle" /> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:id="@+id/tv_footer_middle" |
||||||
|
android:layout_width="0dp" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:layout_weight="1" /> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:padding="4dp" |
||||||
|
android:text="@string/right" /> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:id="@+id/tv_footer_right" |
||||||
|
android:layout_width="0dp" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:layout_weight="1" /> |
||||||
|
|
||||||
|
</LinearLayout> |
||||||
|
|
||||||
|
<Switch |
||||||
|
android:id="@+id/sw_hide_header" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:padding="6dp" |
||||||
|
android:text="@string/hideHeader" /> |
||||||
|
|
||||||
|
<Switch |
||||||
|
android:id="@+id/sw_hide_footer" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:padding="6dp" |
||||||
|
android:text="@string/hideFooter" /> |
||||||
|
|
||||||
|
</LinearLayout> |
@ -0,0 +1,15 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<io.legado.app.ui.widget.dynamiclayout.DynamicFrameLayout xmlns:android="http://schemas.android.com/apk/res/android" |
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto" |
||||||
|
android:id="@+id/content_view" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="0dp" |
||||||
|
app:layout_constraintBottom_toBottomOf="parent" |
||||||
|
app:layout_constraintTop_toBottomOf="@id/title_bar"> |
||||||
|
|
||||||
|
<io.legado.app.ui.widget.recycler.RefreshRecyclerView |
||||||
|
android:id="@+id/refresh_recycler_view" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="match_parent" /> |
||||||
|
|
||||||
|
</io.legado.app.ui.widget.dynamiclayout.DynamicFrameLayout> |
@ -0,0 +1,52 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<resources> |
||||||
|
|
||||||
|
<string-array name="tts_speech_per"> |
||||||
|
<item>度小美</item> |
||||||
|
<item>度小宇</item> |
||||||
|
<item>度逍遙</item> |
||||||
|
<item>度丫丫</item> |
||||||
|
<item>度小嬌</item> |
||||||
|
<item>度米朵</item> |
||||||
|
<item>度博文</item> |
||||||
|
<item>度小童</item> |
||||||
|
<item>度小萌</item> |
||||||
|
<item>百度騷男</item> |
||||||
|
<item>百度評書</item> |
||||||
|
<item>百度主持</item> |
||||||
|
</string-array> |
||||||
|
|
||||||
|
<string-array name="theme_mode"> |
||||||
|
<item>跟隨系統</item> |
||||||
|
<item>亮色主題</item> |
||||||
|
<item>暗色主題</item> |
||||||
|
</string-array> |
||||||
|
|
||||||
|
<string-array name="NavBarColors"> |
||||||
|
<item>自動</item> |
||||||
|
<item>黑色</item> |
||||||
|
<item>白色</item> |
||||||
|
<item>跟隨背景</item> |
||||||
|
</string-array> |
||||||
|
|
||||||
|
<string-array name="screen_time_out"> |
||||||
|
<item>默認</item> |
||||||
|
<item>1分鐘</item> |
||||||
|
<item>2分鐘</item> |
||||||
|
<item>3分鐘</item> |
||||||
|
<item>常亮</item> |
||||||
|
</string-array> |
||||||
|
|
||||||
|
<string-array name="chinese_mode"> |
||||||
|
<item>關閉</item> |
||||||
|
<item>繁體轉簡體</item> |
||||||
|
<item>簡體轉繁體</item> |
||||||
|
</string-array> |
||||||
|
|
||||||
|
<string-array name="system_typefaces"> |
||||||
|
<item>系統默認字體</item> |
||||||
|
<item>系統襯線字體</item> |
||||||
|
<item>系統等寬字體</item> |
||||||
|
</string-array> |
||||||
|
|
||||||
|
</resources> |
@ -0,0 +1,688 @@ |
|||||||
|
<resources> |
||||||
|
<!--App--> |
||||||
|
<string name="app_name">閲讀</string> |
||||||
|
<string name="receiving_shared_label">閲讀·搜尋</string> |
||||||
|
<string name="tip_perm_request_storage">閲讀需要訪問存儲卡權限,請前往「設定」—「應用程式權限」—開啟所需要的權限</string> |
||||||
|
|
||||||
|
<!--Other--> |
||||||
|
<string name="menu_backup">Home</string> |
||||||
|
<string name="menu_restore">還原</string> |
||||||
|
<string name="menu_import_old">導入閲讀數據</string> |
||||||
|
<string name="mkdirs">創建子文件夾</string> |
||||||
|
<string name="mkdirs_description">創建 legado 文件夾作爲備份路徑</string> |
||||||
|
<string name="backup_path">備份路徑</string> |
||||||
|
<string name="menu_import_old_version">導入舊版數據</string> |
||||||
|
<string name="menu_import_github">導入 Github 數據</string> |
||||||
|
<string name="menu_replace_rule">淨化替換</string> |
||||||
|
<string name="menu_send">Send</string> |
||||||
|
|
||||||
|
<string name="dialog_title">提示</string> |
||||||
|
<string name="dialog_cancel">取消</string> |
||||||
|
<string name="dialog_confirm">確認</string> |
||||||
|
<string name="dialog_setting">去設定</string> |
||||||
|
<string name="tip_cannot_jump_setting_page">無法轉跳至設定介面</string> |
||||||
|
|
||||||
|
<string name="dynamic_click_retry">點擊重試</string> |
||||||
|
<string name="dynamic_loading">正在加載</string> |
||||||
|
<string name="draw">提醒</string> |
||||||
|
<string name="edit">編輯</string> |
||||||
|
<string name="delete">刪除</string> |
||||||
|
<string name="replace">替換</string> |
||||||
|
<string name="replace_purify">替換淨化</string> |
||||||
|
<string name="replace_purify_desc">配置替換淨化規則</string> |
||||||
|
<string name="not_available">暫無</string> |
||||||
|
<string name="enable">啟用</string> |
||||||
|
<string name="replace_purify_search">替換淨化-搜尋</string> |
||||||
|
<string name="bookshelf">書架</string> |
||||||
|
<string name="favorites">收藏夾</string> |
||||||
|
<string name="favorite">收藏</string> |
||||||
|
<string name="in_favorites">已收藏</string> |
||||||
|
<string name="out_favorites">未收藏</string> |
||||||
|
<string name="rss">訂閲</string> |
||||||
|
<string name="all">全部</string> |
||||||
|
<string name="recent_reading">最近閲讀</string> |
||||||
|
<string name="last_read">最後閲讀</string> |
||||||
|
<string name="update_log">更新日誌</string> |
||||||
|
<string name="bookshelf_empty">書架還空着,快去添加吧!</string> |
||||||
|
<string name="action_search">搜尋</string> |
||||||
|
<string name="action_download">下載</string> |
||||||
|
<string name="layout_list">列表</string> |
||||||
|
<string name="layout_grid3">網格三列</string> |
||||||
|
<string name="layout_grid4">網格四列</string> |
||||||
|
<string name="layout_grid5">網格五列</string> |
||||||
|
<string name="layout_grid6">網格六列</string> |
||||||
|
<string name="bookshelf_layout">書架佈局</string> |
||||||
|
<string name="view">視圖</string> |
||||||
|
<string name="book_library">書城</string> |
||||||
|
<string name="book_local">添加本地</string> |
||||||
|
<string name="book_source">書源</string> |
||||||
|
<string name="book_source_manage">書源管理</string> |
||||||
|
<string name="book_source_manage_desc">新建/導入/編輯/管理書源</string> |
||||||
|
<string name="setting">設定</string> |
||||||
|
<string name="theme_setting">主題設定</string> |
||||||
|
<string name="theme_setting_s">同主題/顏色相關的一些設定</string> |
||||||
|
<string name="other_setting">其它設定</string> |
||||||
|
<string name="other_setting_s">與功能相關的一些設定</string> |
||||||
|
<string name="about">關於</string> |
||||||
|
<string name="donate">捐贈</string> |
||||||
|
<string name="exit">退出</string> |
||||||
|
<string name="exit_no_save">尚未保存,是否繼續編輯</string> |
||||||
|
<string name="read_style">閲讀樣式設定</string> |
||||||
|
<string name="version">版本</string> |
||||||
|
<string name="local">本地</string> |
||||||
|
<string name="search">搜尋</string> |
||||||
|
<string name="origin_format">來源: %s</string> |
||||||
|
<string name="read_dur_progress">最近: %s</string> |
||||||
|
<string name="book_name">書名</string> |
||||||
|
<string name="lasted_show">最新: %s</string> |
||||||
|
<string name="check_add_bookshelf">是否將《%s》放入書架?</string> |
||||||
|
<string name="import_books_count">共 %s 個 Text 文件</string> |
||||||
|
<string name="is_loading">載入中…</string> |
||||||
|
<string name="retry">重試</string> |
||||||
|
<string name="web_service">Web 服務</string> |
||||||
|
<string name="web_service_desc">啟用 Web 服務</string> |
||||||
|
<string name="web_edit_source">web 編輯書源</string> |
||||||
|
<string name="http_ip">http://%1$s:%2$d</string> |
||||||
|
<string name="download_offline">離線下載</string> |
||||||
|
<string name="download_offline_t">離線下載</string> |
||||||
|
<string name="download_offline_s">下載已選擇的章節到本地</string> |
||||||
|
<string name="change_origin">換源</string> |
||||||
|
<string name="about_description"> |
||||||
|
\u3000\u3000這是一款使用 Kotlin 全新開發的開源的閲讀應用程式,歡迎你的加入。關注公眾號[开源阅读软件]! |
||||||
|
</string> |
||||||
|
<string name="app_share_description"> |
||||||
|
閲讀3.0下載地址:\nhttps://play.google.com/store/apps/details?id=io.legado.app |
||||||
|
</string> |
||||||
|
<string name="version_name">Version %s</string> |
||||||
|
<string name="pt_auto_refresh">自動刷新</string> |
||||||
|
<string name="ps_auto_refresh">打開程式時自動更新書輯</string> |
||||||
|
<string name="pt_auto_download">自動下載最新章節</string> |
||||||
|
<string name="ps_auto_download">更新書輯時自動下載最新章節</string> |
||||||
|
<string name="backup_restore">備份與還原</string> |
||||||
|
<string name="web_dav_set">WebDav 設定</string> |
||||||
|
<string name="web_dav_set_import_old">WebDav 設定/還原舊版本數據</string> |
||||||
|
<string name="backup">備份</string> |
||||||
|
<string name="restore">還原</string> |
||||||
|
<string name="backup_permission">備份請給予存儲權限</string> |
||||||
|
<string name="restore_permission">還原請給予存儲權限</string> |
||||||
|
<string name="ok">確認</string> |
||||||
|
<string name="cancel">取消</string> |
||||||
|
<string name="backup_confirmation">確認備份嗎?</string> |
||||||
|
<string name="backup_message">新備份會覆蓋原有備份。\n備份路徑YueDu</string> |
||||||
|
<string name="restore_confirmation">確認還原嗎?</string> |
||||||
|
<string name="restore_message">還原成功會覆蓋原有書架。</string> |
||||||
|
<string name="backup_success">備份成功</string> |
||||||
|
<string name="backup_fail">備份失敗</string> |
||||||
|
<string name="on_restore">正在還原</string> |
||||||
|
<string name="restore_success">還原成功</string> |
||||||
|
<string name="restore_fail">還原失敗</string> |
||||||
|
<string name="screen_direction">屏幕方向</string> |
||||||
|
<string name="screen_sensor">跟隨傳感器</string> |
||||||
|
<string name="screen_landscape">橫向</string> |
||||||
|
<string name="screen_portrait">豎向</string> |
||||||
|
<string name="screen_unspecified">跟隨系統</string> |
||||||
|
<string name="disclaimer">免責聲明</string> |
||||||
|
<string name="all_chapter_num">共%d章</string> |
||||||
|
<string name="interface_setting">介面</string> |
||||||
|
<string name="brightness">亮度</string> |
||||||
|
<string name="chapter_list">目錄</string> |
||||||
|
<string name="next_chapter">下一章</string> |
||||||
|
<string name="previous_chapter">上一章</string> |
||||||
|
<string name="pt_hide_status_bar">隱藏狀態欄</string> |
||||||
|
<string name="ps_hide_status_bar">閲讀介面隱藏狀態欄</string> |
||||||
|
<string name="read_aloud">朗讀</string> |
||||||
|
<string name="read_aloud_t">正在朗讀</string> |
||||||
|
<string name="read_aloud_s">點擊打開閲讀介面</string> |
||||||
|
<string name="audio_play">播放</string> |
||||||
|
<string name="audio_play_t">正在播放</string> |
||||||
|
<string name="audio_play_s">點擊打開播放介面</string> |
||||||
|
<string name="audio_pause">播放暫停</string> |
||||||
|
<string name="text_return">返回</string> |
||||||
|
<string name="refresh">刷新</string> |
||||||
|
<string name="start">開始</string> |
||||||
|
<string name="stop">停止</string> |
||||||
|
<string name="pause">暫停</string> |
||||||
|
<string name="resume">繼續</string> |
||||||
|
<string name="set_timer">定時</string> |
||||||
|
<string name="read_aloud_pause">朗讀暫停</string> |
||||||
|
<string name="read_aloud_timer">正在朗讀(剩餘 %d 分鐘)</string> |
||||||
|
<string name="ps_hide_navigation_bar">閲讀介面隱藏導航欄</string> |
||||||
|
<string name="pt_hide_navigation_bar">隱藏導航欄</string> |
||||||
|
<string name="re_navigation_bar_color">導航欄顏色</string> |
||||||
|
<string name="git_hub">GitHub</string> |
||||||
|
<string name="scoring">評分</string> |
||||||
|
<string name="send_mail">發送電子郵件</string> |
||||||
|
<string name="can_not_open">無法打開</string> |
||||||
|
<string name="can_not_share">分享失敗</string> |
||||||
|
<string name="no_chapter">無章節</string> |
||||||
|
<string name="add_url">添加網址</string> |
||||||
|
<string name="add_book_url">添加書輯網址</string> |
||||||
|
<string name="background">背景</string> |
||||||
|
<string name="author">作者</string> |
||||||
|
<string name="author_show">作者: %s</string> |
||||||
|
<string name="aloud_stop">朗讀停止</string> |
||||||
|
<string name="clear_cache">清除緩存</string> |
||||||
|
<string name="clear_cache_success">成功清除緩存</string> |
||||||
|
<string name="action_save">保存</string> |
||||||
|
<string name="edit_source">編輯源</string> |
||||||
|
<string name="edit_book_source">編輯書源</string> |
||||||
|
<string name="disable_book_source">禁用書源</string> |
||||||
|
<string name="add_book_source">新建書源</string> |
||||||
|
<string name="add_rss_source">新建訂閲源</string> |
||||||
|
<string name="book_file_selector">添加書輯</string> |
||||||
|
<string name="scan_book_source">掃描</string> |
||||||
|
<string name="copy_source">拷貝源</string> |
||||||
|
<string name="paste_source">粘帖源</string> |
||||||
|
<string name="source_rule_s">源規則説明</string> |
||||||
|
<string name="check_update">檢查更新</string> |
||||||
|
<string name="camera_scan">掃描 QR Code</string> |
||||||
|
<string name="scan_image">掃描本地圖片</string> |
||||||
|
<string name="rule_summary">規則説明</string> |
||||||
|
<string name="share">分享</string> |
||||||
|
<string name="share_app">應用程式分享</string> |
||||||
|
<string name="flow_sys">跟隨系統</string> |
||||||
|
<string name="add">添加</string> |
||||||
|
<string name="import_book_source">導入書源</string> |
||||||
|
<string name="import_book_source_local">本地導入</string> |
||||||
|
<string name="import_book_source_on_line">網絡導入</string> |
||||||
|
<string name="replace_rule_title">替換淨化</string> |
||||||
|
<string name="replace_rule_edit">替換規則編輯</string> |
||||||
|
<string name="replace_rule">替換規則</string> |
||||||
|
<string name="replace_to">替換為</string> |
||||||
|
<string name="img_cover">封面</string> |
||||||
|
<string name="book">書</string> |
||||||
|
<string name="volume_key_page">音量鍵翻頁</string> |
||||||
|
<string name="click_turn_page">點擊翻頁</string> |
||||||
|
<string name="click_all_next_page">點擊總是翻下一頁</string> |
||||||
|
<string name="page_anim">翻頁動畫</string> |
||||||
|
<string name="keep_light">屏幕超時</string> |
||||||
|
<string name="back">返回</string> |
||||||
|
<string name="menu">菜單</string> |
||||||
|
<string name="adjust">調節</string> |
||||||
|
<string name="scroll_bar">滾動條</string> |
||||||
|
<string name="clear_all_content">清除緩存會刪除所有已保存的章節,確認是否清除?</string> |
||||||
|
<string name="book_source_share_url">書源共享</string> |
||||||
|
<string name="replace_rule_summary">規則替換名稱</string> |
||||||
|
<string name="replace_rule_invalid">替換規則為空或不滿足正則表達式要求</string> |
||||||
|
<string name="select_action">選擇操作</string> |
||||||
|
<string name="select_all">全選</string> |
||||||
|
<string name="select_all_count">全選 (%1$d/%2$d)</string> |
||||||
|
<string name="select_cancel_count">取消 (%1$d/%2$d)</string> |
||||||
|
<string name="dark_theme">深色模式</string> |
||||||
|
<string name="welcome">啟動頁</string> |
||||||
|
<string name="download_start">開始下載</string> |
||||||
|
<string name="download_cancel">取消下載</string> |
||||||
|
<string name="no_download">暫無任務</string> |
||||||
|
<string name="download_count">已下載 %1$d/%2$d</string> |
||||||
|
<string name="import_select_book">導入選擇書輯</string> |
||||||
|
<string name="threads_num_title">更新/搜尋線程數,太多會卡頓</string> |
||||||
|
<string name="change_icon">切換圖標</string> |
||||||
|
<string name="remove_from_bookshelf">刪除書輯</string> |
||||||
|
<string name="start_read">開始閲讀</string> |
||||||
|
<string name="data_loading">數據載入中…</string> |
||||||
|
<string name="load_error_retry">載入失敗,點擊重試</string> |
||||||
|
<string name="book_intro">內容簡介</string> |
||||||
|
<string name="intro_show">簡介: %s</string> |
||||||
|
<string name="open_from_other">打開外部書籍</string> |
||||||
|
<string name="origin_show">來源: %s</string> |
||||||
|
<string name="import_replace_rule">本地導入</string> |
||||||
|
<string name="import_replace_rule_on_line">導入在線規則</string> |
||||||
|
<string name="check_update_interval">檢查更新間隔</string> |
||||||
|
<string name="bookshelf_px_0">按閲讀時間</string> |
||||||
|
<string name="bookshelf_px_1">按更新時間</string> |
||||||
|
<string name="bookshelf_px_2">按書名</string> |
||||||
|
<string name="bookshelf_px_3">手動排序</string> |
||||||
|
<string name="read_type">閲讀方式</string> |
||||||
|
<string name="compose_type">排版</string> |
||||||
|
<string name="del_select">刪除所選</string> |
||||||
|
<string name="del_msg">是否確認刪除?</string> |
||||||
|
<string name="clear_font">默認字體</string> |
||||||
|
<string name="find_on_www">發現</string> |
||||||
|
<string name="find_source_manage">發現管理</string> |
||||||
|
<string name="find_empty">沒有內容,去書源裏自定義吧!</string> |
||||||
|
<string name="del_all">刪除所有</string> |
||||||
|
<string name="searchHistory">搜索歷史</string> |
||||||
|
<string name="clear">清除</string> |
||||||
|
<string name="showTitle">正文顯示標題</string> |
||||||
|
<string name="refresh_default">書源同步</string> |
||||||
|
<string name="no_last_chapter">無最新章節信息</string> |
||||||
|
<string name="showTimeBattery">顯示時間和電量</string> |
||||||
|
<string name="showLine">顯示分隔線</string> |
||||||
|
<string name="dark_status_icon">深色狀態欄圖標</string> |
||||||
|
<string name="content">內容</string> |
||||||
|
<string name="copy_text">拷貝內容</string> |
||||||
|
<string name="download_all">一鍵緩存</string> |
||||||
|
<string name="content_sl">這是一段測試文字\n\u3000\u3000只是讓你看看效果的</string> |
||||||
|
<string name="text_bg_style">文字顏色和背景(長按自定義)</string> |
||||||
|
<string name="immersion_status_bar">沉浸式狀態欄</string> |
||||||
|
<string name="un_download">還剩 %d 章未下載</string> |
||||||
|
<string name="non_select">沒有選擇</string> |
||||||
|
<string name="long_click_input_color">長按輸入顏色值</string> |
||||||
|
<string name="loading">加載中…</string> |
||||||
|
<string name="group_zg">追更區</string> |
||||||
|
<string name="group_yf">養肥區</string> |
||||||
|
<string name="bookmark">書籤</string> |
||||||
|
<string name="bookmark_add">添加書籤</string> |
||||||
|
<string name="action_del">刪除</string> |
||||||
|
<string name="load_over_time">加載超時</string> |
||||||
|
<string name="join_group">關注: %s</string> |
||||||
|
<string name="copy_complete">已拷貝</string> |
||||||
|
<string name="arrange_bookshelf">整理書架</string> |
||||||
|
<string name="clear_bookshelf_s">這將會刪除所有書籍,請謹慎操作。</string> |
||||||
|
<string name="search_book_source">搜索書源</string> |
||||||
|
<string name="search_rss_source">搜索訂閲源</string> |
||||||
|
<string name="search_book_source_num">搜索(共 %d 個書源)</string> |
||||||
|
<string name="chapter_list_size">目錄(%d)</string> |
||||||
|
<string name="text_bold">加粗</string> |
||||||
|
<string name="text_font">字體</string> |
||||||
|
<string name="text">文字</string> |
||||||
|
<string name="home_page">軟件主頁</string> |
||||||
|
<string name="right">右</string> |
||||||
|
<string name="left">左</string> |
||||||
|
<string name="bottom">下</string> |
||||||
|
<string name="top">上</string> |
||||||
|
<string name="padding">邊距</string> |
||||||
|
<string name="padding_top">上邊距</string> |
||||||
|
<string name="padding_bottom">下邊距</string> |
||||||
|
<string name="padding_left">左邊距</string> |
||||||
|
<string name="padding_right">右邊距</string> |
||||||
|
<string name="check_book_source">校驗書源</string> |
||||||
|
<string name="check_select_source">校驗所選</string> |
||||||
|
<string name="progress_show">進度 %1$d/%2$d</string> |
||||||
|
<string name="tts_fix">請安裝並選擇中文 TTS!</string> |
||||||
|
<string name="tts_init_failed">TTS 初始化失敗!</string> |
||||||
|
<string name="jf_convert">簡繁轉換</string> |
||||||
|
<string name="jf_convert_o">關閉</string> |
||||||
|
<string name="jf_convert_f">簡轉繁</string> |
||||||
|
<string name="jf_convert_j">繁轉簡</string> |
||||||
|
<string name="page_mode">翻頁模式</string> |
||||||
|
<string name="nb_file_sub_count">%1$d 項</string> |
||||||
|
<string name="nb_file_path">存儲卡:</string> |
||||||
|
<string name="nb_file_add_shelf">加入書架</string> |
||||||
|
<string name="nb_file_add_shelves">加入書架 (%1$d)</string> |
||||||
|
<string name="nb_file_add_succeed">成功添加 %1$d 本書</string> |
||||||
|
<string name="fonts_folder">請將字體文件放到 SD 根目錄 Fonts 文件夾下重新選擇</string> |
||||||
|
<string name="default_font">默認字體</string> |
||||||
|
<string name="select_font">選擇字體</string> |
||||||
|
<string name="text_size">字號</string> |
||||||
|
<string name="line_size">行距</string> |
||||||
|
<string name="paragraph_size">段距</string> |
||||||
|
<string name="to_top">置頂</string> |
||||||
|
<string name="auto_expand_find">自動展開發現</string> |
||||||
|
<string name="default_expand_first">默認展開第一組發現</string> |
||||||
|
<string name="threads_num">當前線程數 %s</string> |
||||||
|
<string name="read_aloud_speed">朗讀語速</string> |
||||||
|
<string name="auto_next_page">自動翻頁</string> |
||||||
|
<string name="auto_next_page_stop">停止自動翻頁</string> |
||||||
|
<string name="auto_next_page_speed">自動翻頁間隔</string> |
||||||
|
<string name="book_info">書籍信息</string> |
||||||
|
<string name="book_info_edit">書籍信息編輯</string> |
||||||
|
<string name="ps_default_read">默認打開書架</string> |
||||||
|
<string name="pt_default_read">自動跳轉最近閲讀</string> |
||||||
|
<string name="use_to">替換範圍,選填書名或者源名</string> |
||||||
|
<string name="menu_action_group">分組</string> |
||||||
|
<string name="download_path">內容緩存路徑</string> |
||||||
|
<string name="cleanCache">清理緩存</string> |
||||||
|
<string name="sys_file_picker">系統文件選擇器</string> |
||||||
|
<string name="new_version">新版本</string> |
||||||
|
<string name="download_update">下載更新</string> |
||||||
|
<string name="volume_key_page_on_play">朗讀時音量鍵翻頁</string> |
||||||
|
<string name="tip_margin_change">Tip 邊距跟隨邊距調整</string> |
||||||
|
<string name="allow_update">允許更新</string> |
||||||
|
<string name="disable_update">禁止更新</string> |
||||||
|
<string name="revert_selection">反選</string> |
||||||
|
<string name="search_book_key">搜索書名、作者</string> |
||||||
|
<string name="debug_hint">書名、作者、URL</string> |
||||||
|
<string name="faq">常見問題</string> |
||||||
|
<string name="pt_show_all_find">顯示所有發現</string> |
||||||
|
<string name="ps_show_all_find">關閉則只顯示勾選源的發現</string> |
||||||
|
<string name="update_toc">更新目錄</string> |
||||||
|
<string name="txt_toc_regex">Txt目錄正則</string> |
||||||
|
<string name="set_charset">設置編碼</string> |
||||||
|
<string name="swap_sort">倒序-順序</string> |
||||||
|
<string name="sort">排序</string> |
||||||
|
<string name="sort_auto">智能排序</string> |
||||||
|
<string name="sort_manual">手動排序</string> |
||||||
|
<string name="sort_pin_yin">拼音排序</string> |
||||||
|
<string name="go_to_top">滾動到頂部</string> |
||||||
|
<string name="go_to_bottom">滾動到底部</string> |
||||||
|
<string name="read_y">已讀: %s</string> |
||||||
|
<string name="pursue_more">追更</string> |
||||||
|
<string name="fattening">養肥</string> |
||||||
|
<string name="finish">完結</string> |
||||||
|
<string name="all_book">所有書籍</string> |
||||||
|
<string name="pursue_more_book">追更書籍</string> |
||||||
|
<string name="fattening_book">養肥書籍</string> |
||||||
|
<string name="finish_book">完結書籍</string> |
||||||
|
<string name="local_book">本地書籍</string> |
||||||
|
<string name="status_bar_immersion">狀態欄顏色透明</string> |
||||||
|
<string name="navigation_bar_color_change">導航欄變色</string> |
||||||
|
<string name="navigation_bar_color_change_s">導航欄根據夜間模式變化</string> |
||||||
|
<string name="add_to_shelf">放入書架</string> |
||||||
|
<string name="continue_read">繼續閲讀</string> |
||||||
|
<string name="cover_path">封面地址</string> |
||||||
|
<string name="page_anim_cover">覆蓋</string> |
||||||
|
<string name="page_anim_slide">滑動</string> |
||||||
|
<string name="page_anim_simulation">仿真</string> |
||||||
|
<string name="page_anim_scroll">滾動</string> |
||||||
|
<string name="page_anim_none">無動畫</string> |
||||||
|
<string name="donate_s">此書源使用了高級功能,請到捐贈裏點擊支付寶紅包搜索碼領取紅包開啟。</string> |
||||||
|
<string name="up_change_source_last_chapter_t">後台更新換源最新章節</string> |
||||||
|
<string name="up_change_source_last_chapter_s">開啟則會在軟件打開 1 分鐘後開始更新</string> |
||||||
|
<string name="behavior_main_t">書架 ToolBar 自動隱藏</string> |
||||||
|
<string name="behavior_main_s">滾動書架時 ToolBar 自動隱藏與顯示</string> |
||||||
|
<string name="login">登錄</string> |
||||||
|
<string name="login_source">登錄 %s</string> |
||||||
|
<string name="success">成功</string> |
||||||
|
<string name="source_no_login">當前源沒有配置登陸地址</string> |
||||||
|
|
||||||
|
<!-- source start--> |
||||||
|
<string name="source_name">源名稱 (sourceName)</string> |
||||||
|
<string name="source_url">源URL (sourceUrl)</string> |
||||||
|
<string name="source_group">源分組 (sourceGroup)</string> |
||||||
|
<string name="sort_url">分類 Url</string> |
||||||
|
<string name="login_url">登錄 URL(loginUrl)</string> |
||||||
|
<string name="r_search_url">搜索地址 (url)</string> |
||||||
|
<string name="r_find_url">發現地址規則 (url)</string> |
||||||
|
<string name="r_book_list">書籍列表規則 (bookList)</string> |
||||||
|
<string name="r_book_name">書名規則 (name)</string> |
||||||
|
<string name="r_book_url">詳情頁 url 規則 (bookUrl)</string> |
||||||
|
<string name="r_author">作者規則 (author)</string> |
||||||
|
<string name="rule_book_kind">分類規則 (kind)</string> |
||||||
|
<string name="rule_book_intro">簡介規則 (intro)</string> |
||||||
|
<string name="rule_cover_url">封面規則 (coverUrl)</string> |
||||||
|
<string name="rule_last_chapter">最新章節規則 (lastChapter)</string> |
||||||
|
<string name="rule_word_count">字數規則 (wordCount)</string> |
||||||
|
<string name="book_url_pattern">書籍 URL 正則 (bookUrlPattern)</string> |
||||||
|
<string name="rule_book_info_init">預處理規則 (bookInfoInit)</string> |
||||||
|
<string name="rule_toc_url">目錄 URL 規則 (tocUrl)</string> |
||||||
|
<string name="rule_next_toc_url">目錄下一頁規則 (nextTocUrl)</string> |
||||||
|
<string name="rule_chapter_list">目錄列表規則 (chapterList)</string> |
||||||
|
<string name="rule_chapter_name">章節名稱規則 (ChapterName)</string> |
||||||
|
<string name="rule_chapter_url">章節 URL 規則 (chapterUrl)</string> |
||||||
|
<string name="rule_is_vip">VIP 標識 (isVip)</string> |
||||||
|
<string name="rule_update_time">章節信息 (ChapterInfo)</string> |
||||||
|
<string name="rule_book_content">正文規則 (content)</string> |
||||||
|
<string name="rule_next_content">正文下一頁 URL 規則 (nextContentUrl)</string> |
||||||
|
<string name="rule_web_js">webJs</string> |
||||||
|
<string name="rule_source_regex">資源正則 (sourceRegex)</string> |
||||||
|
|
||||||
|
<string name="source_icon">圖標 (sourceIcon)</string> |
||||||
|
<string name="r_articles">列表規則 (ruleArticles)</string> |
||||||
|
<string name="r_next">列表下一頁規則 (ruleArticles)</string> |
||||||
|
<string name="r_title">標題規則 (ruleTitle)</string> |
||||||
|
<string name="r_guid">guid 規則 (ruleGuid)</string> |
||||||
|
<string name="r_date">時間規則 (rulePubDate)</string> |
||||||
|
<string name="r_categories">類別規則 (ruleCategories)</string> |
||||||
|
<string name="r_description">描述規則 (ruleDescription)</string> |
||||||
|
<string name="r_image">圖片 url 規則 (ruleImage)</string> |
||||||
|
<string name="r_content">內容規則 (ruleContent)</string> |
||||||
|
<string name="r_link">鏈接規則 (ruleLink)</string> |
||||||
|
<!-- source end--> |
||||||
|
|
||||||
|
<!--error string start--> |
||||||
|
<string name="error_no_source">沒有書源</string> |
||||||
|
<string name="error_get_book_info">書籍信息獲取失敗</string> |
||||||
|
<string name="error_get_content">內容獲取失敗</string> |
||||||
|
<string name="error_get_chapter_list">目錄獲取失敗</string> |
||||||
|
<string name="error_get_web_content">訪問網站失敗: %s</string> |
||||||
|
<string name="error_read_file">文件讀取失敗</string> |
||||||
|
<string name="error_load_toc">加載目錄失敗</string> |
||||||
|
<string name="error_get_data">獲取數據失敗!</string> |
||||||
|
<string name="error_load_msg">加載失敗\n%s</string> |
||||||
|
<string name="net_error_10001">沒有網絡</string> |
||||||
|
<string name="net_error_10002">網絡連接超時</string> |
||||||
|
<string name="net_error_10003">數據解析失敗</string> |
||||||
|
<!--error string end--> |
||||||
|
|
||||||
|
<string name="source_http_header">請求頭 (header)</string> |
||||||
|
<string name="debug_source">調試源</string> |
||||||
|
<string name="import_by_qr_code">二維碼導入</string> |
||||||
|
<string name="scan_qr_code">掃描二維碼</string> |
||||||
|
<string name="click_on_selected_show_menu">選中時點擊可彈出菜單</string> |
||||||
|
<string name="theme">主題</string> |
||||||
|
<string name="theme_mode">主題模式</string> |
||||||
|
<string name="theme_mode_desc">選擇主題模式</string> |
||||||
|
<string name="default_theme">默認主題</string> |
||||||
|
<string name="restore_default_theme">恢復主題為默認配色</string> |
||||||
|
<string name="join_qq_group">加入QQ羣</string> |
||||||
|
<string name="bg_image_per">獲取背景圖片需存儲權限</string> |
||||||
|
<string name="input_book_source_url">輸入書源網址</string> |
||||||
|
<string name="del_file">刪除文件</string> |
||||||
|
<string name="del_file_success">刪除文件成功</string> |
||||||
|
<string name="sure_del_file">確定刪除文件嗎?</string> |
||||||
|
<string name="files_tree">手機目錄</string> |
||||||
|
<string name="intelligent_import">智能導入</string> |
||||||
|
<string name="find">發現</string> |
||||||
|
<string name="switch_display_style">切換顯示樣式</string> |
||||||
|
<string name="import_per">導入本地書籍需存儲權限</string> |
||||||
|
<string name="night_theme">夜間模式</string> |
||||||
|
<string name="eink_theme">E-Ink 模式</string> |
||||||
|
<string name="eink_theme_desc">電子墨水屏模式</string> |
||||||
|
<string name="get_storage_per">本軟件需要存儲權限來存儲備份書籍信息</string> |
||||||
|
<string name="double_click_exit">再按一次退出程式</string> |
||||||
|
<string name="import_book_per">導入本地書籍需存儲權限</string> |
||||||
|
<string name="network_connection_unavailable">網絡連接不可用</string> |
||||||
|
<string name="yes">是</string> |
||||||
|
<string name="no">否</string> |
||||||
|
<string name="sure">確認</string> |
||||||
|
<string name="sure_del">是否確認刪除?</string> |
||||||
|
<string name="sure_del_all_book">是否刪除全部書籍?</string> |
||||||
|
<string name="sure_del_download_book">是否同時刪除已下載的書籍目錄?</string> |
||||||
|
<string name="qr_per">掃描二維碼需相機權限</string> |
||||||
|
<string name="aloud_can_not_auto_page">朗讀正在運行,不能自動翻頁</string> |
||||||
|
<string name="input_charset">輸入編碼</string> |
||||||
|
<string name="text_chapter_list_rule">TXT 目錄規則</string> |
||||||
|
<string name="open_local_book_per">打開外部書籍需獲取存儲權限</string> |
||||||
|
<string name="no_book_name">未獲取到書名</string> |
||||||
|
<string name="input_replace_url">輸入替換規則網址</string> |
||||||
|
<string name="get_book_list_success">搜索列表獲取成功%d</string> |
||||||
|
<string name="non_null_source_name_url">書源名稱和 URL 不能為空</string> |
||||||
|
<string name="gallery">圖庫</string> |
||||||
|
<string name="get_ali_pay_hb">領支付寶紅包</string> |
||||||
|
<string name="non_update_url">沒有獲取到更新地址</string> |
||||||
|
<string name="check_host_cookie">正在打開首頁,成功自動返回主界面</string> |
||||||
|
<string name="click_check_after_success">登錄成功後請點擊右上角圖標進行首頁訪問測試</string> |
||||||
|
<string name="chapter">章</string> |
||||||
|
<string name="to">至</string> |
||||||
|
<string name="use_regex">使用正則表達式</string> |
||||||
|
<string name="text_indent">縮進</string> |
||||||
|
<string name="indent_0">無縮進</string> |
||||||
|
<string name="indent_1">一字符縮進</string> |
||||||
|
<string name="indent_2">二字符縮進</string> |
||||||
|
<string name="indent_3">三字符縮進</string> |
||||||
|
<string name="indent_4">四字符縮進</string> |
||||||
|
<string name="select_folder">選擇文件夾</string> |
||||||
|
<string name="select_file">選擇文件</string> |
||||||
|
<string name="no_find">沒有發現,可以在書源裏添加。</string> |
||||||
|
<string name="restore_default">恢復默認</string> |
||||||
|
<string name="set_download_per">自定義緩存路徑需要存儲權限</string> |
||||||
|
<string name="black">黑色</string> |
||||||
|
<string name="content_empty">文章內容為空</string> |
||||||
|
<string name="on_change_source">正在換源請等待…</string> |
||||||
|
<string name="chapter_list_empty">目錄列表為空</string> |
||||||
|
<string name="text_letter_spacing">字距</string> |
||||||
|
|
||||||
|
<string name="source_tab_base">基本</string> |
||||||
|
<string name="source_tab_search">搜索</string> |
||||||
|
<string name="source_tab_find">發現</string> |
||||||
|
<string name="source_tab_info">詳情</string> |
||||||
|
<string name="source_tab_toc">目錄</string> |
||||||
|
<string name="source_tab_content">正文</string> |
||||||
|
|
||||||
|
<string name="e_ink_mode">E-Ink 模式</string> |
||||||
|
<string name="e_ink_mode_detail">去除動畫,優化電紙書使用體驗</string> |
||||||
|
<string name="web_menu">Web 服務</string> |
||||||
|
<string name="web_port_title">web 端口</string> |
||||||
|
<string name="web_port_summary">當前端口 %s</string> |
||||||
|
<string name="qr_share">二維碼分享</string> |
||||||
|
<string name="str_share">字符串分享</string> |
||||||
|
<string name="wifi_share">wifi 分享</string> |
||||||
|
<string name="please_grant_storage_permission">請給於存儲權限</string> |
||||||
|
<string name="fast_rewind">減速</string> |
||||||
|
<string name="fast_forward">加速</string> |
||||||
|
<string name="skip_previous">上一個</string> |
||||||
|
<string name="skip_next">下一個</string> |
||||||
|
<string name="music">音樂</string> |
||||||
|
<string name="audio">音頻</string> |
||||||
|
<string name="is_enable">啟用</string> |
||||||
|
<string name="enable_js">啟用 JS</string> |
||||||
|
<string name="load_with_base_url">加載 BaseUrl</string> |
||||||
|
<string name="all_source">全部書源</string> |
||||||
|
<string name="cannot_empty">輸入不能為空</string> |
||||||
|
<string name="clear_find_cache">清空發現緩存</string> |
||||||
|
<string name="edit_find">編輯發現</string> |
||||||
|
<string name="change_icon_summary">切換軟件顯示在桌面的圖標</string> |
||||||
|
<string name="help">幫助</string> |
||||||
|
<string name="my">我的</string> |
||||||
|
<string name="reading">閲讀</string> |
||||||
|
<string name="battery_show">%d%%</string> |
||||||
|
<string name="timer_m">%d 分鐘</string> |
||||||
|
<string name="brightness_auto">自動亮度 %s</string> |
||||||
|
<string name="read_aloud_by_page">按頁朗讀</string> |
||||||
|
<string name="read_aloud_on_line">在線朗讀</string> |
||||||
|
<string name="bg_image">背景圖片</string> |
||||||
|
<string name="bg_color">背景顏色</string> |
||||||
|
<string name="text_color">文字顏色</string> |
||||||
|
<string name="select_image">選擇圖片</string> |
||||||
|
<string name="group_manage">分組管理</string> |
||||||
|
<string name="group_select">分組選擇</string> |
||||||
|
<string name="group_edit">編輯分組</string> |
||||||
|
<string name="move_to_group">移入分組</string> |
||||||
|
<string name="add_group">添加分組</string> |
||||||
|
<string name="add_replace_rule">新建替換</string> |
||||||
|
<string name="group">分組</string> |
||||||
|
<string name="group_s">分組: %s</string> |
||||||
|
<string name="toc_s">目錄: %s</string> |
||||||
|
<string name="enable_explore">啟用發現</string> |
||||||
|
<string name="disable_explore">禁用發現</string> |
||||||
|
<string name="enable_selection">啟用所選</string> |
||||||
|
<string name="disable_selection">禁用所選</string> |
||||||
|
<string name="export_selection">導出所選</string> |
||||||
|
<string name="export">導出</string> |
||||||
|
<string name="load_toc">加載目錄</string> |
||||||
|
<string name="tts">TTS</string> |
||||||
|
<string name="web_dav_pw">WebDav 密碼</string> |
||||||
|
<string name="web_dav_pw_s">輸入你的 WebDav 授權密碼</string> |
||||||
|
<string name="web_dav_url_s">輸入你的服務器地址</string> |
||||||
|
<string name="web_dav_url">WebDav 服務器地址</string> |
||||||
|
<string name="web_dav_account">WebDav 賬號</string> |
||||||
|
<string name="web_dav_account_s">輸入你的 WebDav 賬號</string> |
||||||
|
<string name="rss_source">訂閲源</string> |
||||||
|
<string name="rss_source_edit">編輯訂閲源</string> |
||||||
|
<string name="screen">篩選</string> |
||||||
|
<string name="screen_find">篩選發現</string> |
||||||
|
<string name="dur_pos">當前位置:</string> |
||||||
|
<string name="precision_search">精準搜索</string> |
||||||
|
<string name="service_starting">正在啟動服務</string> |
||||||
|
<string name="empty">空</string> |
||||||
|
<string name="file_chooser">文件選擇</string> |
||||||
|
<string name="folder_chooser">文件夾選擇</string> |
||||||
|
<string name="bottom_line">我是有底線的</string> |
||||||
|
<string name="uri_to_path_fail">Uri 轉 Path 失敗</string> |
||||||
|
<string name="refresh_cover">刷新封面</string> |
||||||
|
<string name="change_cover_source">封面換源</string> |
||||||
|
<string name="select_local_image">選擇本地圖片</string> |
||||||
|
<string name="book_type">類型: </string> |
||||||
|
<string name="book_type_text">文本</string> |
||||||
|
<string name="book_type_audio">音頻</string> |
||||||
|
<string name="to_backstage">後台</string> |
||||||
|
<string name="importing">正在導入</string> |
||||||
|
<string name="exporting">正在導出</string> |
||||||
|
<string name="custom_page_key">自定義翻頁按鍵</string> |
||||||
|
<string name="prev_page_key">上一頁按鍵</string> |
||||||
|
<string name="next_page_key">下一頁按鍵</string> |
||||||
|
<string name="after_add_bookshelf">先將書籍加入書架</string> |
||||||
|
<string name="no_group">未分組</string> |
||||||
|
<string name="prev_sentence">上一句</string> |
||||||
|
<string name="next_sentence">下一句</string> |
||||||
|
<string name="other_folder">其它目錄</string> |
||||||
|
<string name="text_too_long_qr_error">文字太多,生成二維碼失敗</string> |
||||||
|
<string name="share_rss_source">分享RSS源</string> |
||||||
|
<string name="share_book_source">分享書源</string> |
||||||
|
<string name="auto_dark_mode">自動切換夜間模式</string> |
||||||
|
<string name="auto_dark_mode_s">夜間模式跟隨系統</string> |
||||||
|
<string name="go_back">上級</string> |
||||||
|
<string name="tone_colour">在線朗讀音色</string> |
||||||
|
<string name="select_count">(%1$d/%2$d)</string> |
||||||
|
<string name="show_rss">顯示訂閲</string> |
||||||
|
<string name="service_stop">服務已停止</string> |
||||||
|
<string name="service_start">正在啟動服務\n具體信息查看通知欄</string> |
||||||
|
<string name="default_path">默認路徑</string> |
||||||
|
<string name="sys_folder_picker">系統文件夾選擇器</string> |
||||||
|
<string name="app_folder_picker">自帶選擇器\n(Android10 以上因權限限制可能無法使用)</string> |
||||||
|
<string name="a10_permission_toast">Android10 以上因權限限制可能無法讀寫文件</string> |
||||||
|
<string name="add_to_text_context_menu_s">長按文字在操作菜單中顯示閲讀·搜索</string> |
||||||
|
<string name="add_to_text_context_menu_t">文字操作顯示搜索</string> |
||||||
|
<string name="record_log">記錄日誌</string> |
||||||
|
<string name="chinese_converter">中文簡繁體轉換</string> |
||||||
|
<string name="chage_icon_error">圖標為矢量圖標,Android8.0 以前不支持</string> |
||||||
|
<string name="aloud_config">朗讀設置</string> |
||||||
|
<string name="main_activity">主界面</string> |
||||||
|
<string name="selectText">長按選擇文本</string> |
||||||
|
<string name="header">頁眉</string> |
||||||
|
<string name="main_body">正文</string> |
||||||
|
<string name="footer">頁腳</string> |
||||||
|
<string name="select_end">文本選擇結束位置</string> |
||||||
|
<string name="select_start">文本選擇開始位置</string> |
||||||
|
<string name="share_layout">共用佈局</string> |
||||||
|
<string name="browser">瀏覽器</string> |
||||||
|
<string name="import_default_rule">導入默認規則</string> |
||||||
|
<string name="name">名稱</string> |
||||||
|
<string name="regex">正則</string> |
||||||
|
<string name="more_menu">更多菜單</string> |
||||||
|
<string name="reduce">減</string> |
||||||
|
<string name="plus">加</string> |
||||||
|
<string name="system_typeface">系統內置字體樣式</string> |
||||||
|
<string name="delete_book_file">刪除源文件</string> |
||||||
|
<string name="default1">預設一</string> |
||||||
|
<string name="default2">預設二</string> |
||||||
|
<string name="default3">預設三</string> |
||||||
|
<string name="title">標題</string> |
||||||
|
<string name="title_left">靠左</string> |
||||||
|
<string name="title_center">居中</string> |
||||||
|
<string name="title_hide">隱藏</string> |
||||||
|
<string name="add_to_group">加入分組</string> |
||||||
|
<string name="save_image">保存圖片</string> |
||||||
|
<string name="no_default_path">沒有默認路徑</string> |
||||||
|
<string name="change_group">設置分組</string> |
||||||
|
<string name="view_toc">查看目錄</string> |
||||||
|
<string name="bar_elevation">導航欄陰影</string> |
||||||
|
<string name="bar_elevation_s">當前陰影大小 (elevation): %s</string> |
||||||
|
<string name="btn_default_s">默認</string> |
||||||
|
<string name="main_menu">主菜單</string> |
||||||
|
<string name="request_permission">點擊授予權限</string> |
||||||
|
<string name="tip_local_perm_request_storage">閲讀需要訪問存儲卡權限,請點擊下方的"授予權限"按鈕,或前往「設定」—「應用程式權限」—打開所需權限。如果授予權限後仍然不正常,請點擊右上角的「選擇文件夾」,使用系統文件夾選擇器。</string> |
||||||
|
<string name="alouding_disable">全文朗讀中不能朗讀選中文字</string> |
||||||
|
<string name="read_body_to_lh">擴展到劉海</string> |
||||||
|
<string name="toc_updateing">更新目錄中</string> |
||||||
|
<string name="media_button_on_exit_title">全程響應耳機按鍵</string> |
||||||
|
<string name="media_button_on_exit_summary">即使退出軟件也響應耳機按鍵</string> |
||||||
|
<string name="contributors">開發人員</string> |
||||||
|
<string name="contact">聯繫我們</string> |
||||||
|
<string name="license">開源許可</string> |
||||||
|
<string name="follow_official_account">關注公衆號</string> |
||||||
|
<string name="wechat">WeChat</string> |
||||||
|
<string name="thanks">你的支持是我更新的動力</string> |
||||||
|
<string name="about_official_account">公众号[开源阅读软件]</string> |
||||||
|
<string name="source_auto_changing">正在自動換源</string> |
||||||
|
<string name="click_to_apply">點擊加入</string> |
||||||
|
<string name="middle">中</string> |
||||||
|
<string name="information">信息</string> |
||||||
|
|
||||||
|
<!--color--> |
||||||
|
<string name="primary">主色調</string> |
||||||
|
<string name="accent">強調色</string> |
||||||
|
<string name="background_color">背景色</string> |
||||||
|
<string name="navbar_color">導航欄顏色</string> |
||||||
|
<string name="day">白天</string> |
||||||
|
<string name="day_color_primary">白天,主色調</string> |
||||||
|
<string name="day_color_accent">白天,強調色</string> |
||||||
|
<string name="day_background_color">白天,背景色</string> |
||||||
|
<string name="day_navbar_color">白天,導航欄顏色</string> |
||||||
|
<string name="night">夜間</string> |
||||||
|
<string name="night_primary">夜間,主色調</string> |
||||||
|
<string name="night_accent">夜間,強調色</string> |
||||||
|
<string name="night_background_color">夜間,背景色</string> |
||||||
|
<string name="night_navbar_color">夜間,導航欄顏色</string> |
||||||
|
</resources> |
Loading…
Reference in new issue