Compare commits
3 Commits
dcea40162c
...
51b3b8ca01
Author | SHA1 | Date | |
---|---|---|---|
51b3b8ca01 | |||
a34d99b346 | |||
a1c0241a58 |
10
.gitea/workflows/assets/crowdin.yml
Normal file
10
.gitea/workflows/assets/crowdin.yml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
project_id_env: CROWDIN_PROJECT_ID
|
||||||
|
api_token_env: CROWDIN_PERSONAL_TOKEN
|
||||||
|
base_path: "../../../"
|
||||||
|
|
||||||
|
files:
|
||||||
|
- source: /androidApp/src/main/res/values/strings.xml
|
||||||
|
translation: /androidApp/src/main/res/values-%android_code%/%original_file_name%
|
||||||
|
translate_attributes: '0'
|
||||||
|
content_segmentation: '0'
|
||||||
|
preserve_hierarchy: true
|
@ -3,26 +3,77 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
|
- chore-crowdin-ci
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
Lint:
|
# Lint:
|
||||||
|
# runs-on: ubuntu-latest
|
||||||
|
# steps:
|
||||||
|
# - name: Check out repository code
|
||||||
|
# uses: actions/checkout@v4
|
||||||
|
# - uses: actions/setup-java@v4
|
||||||
|
# with:
|
||||||
|
# distribution: 'temurin'
|
||||||
|
# java-version: '17'
|
||||||
|
# cache: gradle
|
||||||
|
# - name: Install klint
|
||||||
|
# run: curl -sSLO https://github.com/pinterest/ktlint/releases/download/1.5.0/ktlint && chmod a+x ktlint && mv ktlint /usr/local/bin/
|
||||||
|
# - name: Install detekt
|
||||||
|
# run: curl -sSLO https://github.com/detekt/detekt/releases/download/v1.23.7/detekt-cli-1.23.7.zip && unzip detekt-cli-1.23.7.zip
|
||||||
|
# - name: Linting...
|
||||||
|
# run: ktlint 'shared/**/*.kt' 'androidApp/**/*.kt' '!shared/build'
|
||||||
|
# - name: Detecting...
|
||||||
|
# run: ./detekt-cli-1.23.7/bin/detekt-cli -c detekt.yml --excludes '**/shared/build/**/*.kt'
|
||||||
|
translations:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Check out repository code
|
- name: Check out repository code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
- uses: actions/setup-java@v4
|
- name: upload translation sources
|
||||||
|
uses: crowdin/github-action@v2
|
||||||
with:
|
with:
|
||||||
distribution: 'temurin'
|
config: './.gitea/workflows/assets/crowdin.yml'
|
||||||
java-version: '17'
|
upload_sources: true
|
||||||
cache: gradle
|
upload_translations: false
|
||||||
- name: Install klint
|
download_translations: false
|
||||||
run: curl -sSLO https://github.com/pinterest/ktlint/releases/download/1.5.0/ktlint && chmod a+x ktlint && mv ktlint /usr/local/bin/
|
create_pull_request: false
|
||||||
- name: Install detekt
|
push_translations: false
|
||||||
run: curl -sSLO https://github.com/detekt/detekt/releases/download/v1.23.7/detekt-cli-1.23.7.zip && unzip detekt-cli-1.23.7.zip
|
env:
|
||||||
- name: Linting...
|
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
|
||||||
run: ktlint 'shared/**/*.kt' 'androidApp/**/*.kt' '!shared/build'
|
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
||||||
- name: Detecting...
|
- name: wait
|
||||||
run: ./detekt-cli-1.23.7/bin/detekt-cli -c detekt.yml --excludes '**/shared/build/**/*.kt'
|
run: sleep 10s
|
||||||
build:
|
- name: download translations
|
||||||
needs: Lint
|
uses: crowdin/github-action@v2
|
||||||
uses: ./.gitea/workflows/common_build.yml
|
with:
|
||||||
|
config: './.gitea/workflows/assets/crowdin.yml'
|
||||||
|
upload_sources: false
|
||||||
|
upload_translations: false
|
||||||
|
download_translations: true
|
||||||
|
create_pull_request: false
|
||||||
|
push_translations: false
|
||||||
|
env:
|
||||||
|
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
|
||||||
|
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
||||||
|
- name: Check for uncommitted changes
|
||||||
|
id: check-changes
|
||||||
|
uses: mskri/check-uncommitted-changes-action@v1.0.1
|
||||||
|
- name: Commit Changes
|
||||||
|
if: steps.check-changes.outputs.outcome == failure()
|
||||||
|
run: |
|
||||||
|
git config --global user.email aminecmi+giteadrone@pm.me
|
||||||
|
git config --global user.name giteadrone
|
||||||
|
git add ./androidApp/src/main/res/*
|
||||||
|
git commit -m "translation: translation files"
|
||||||
|
- name: Push changes
|
||||||
|
if: steps.check-changes.outputs.outcome == failure()
|
||||||
|
uses: appleboy/git-push-action@v1.0.0
|
||||||
|
with:
|
||||||
|
author_name: giteadrone
|
||||||
|
author_email: aminecmi+giteadrone@pm.me
|
||||||
|
remote: ${{ secrets.REMOTE_URL }}
|
||||||
|
ssh_key: ${{ secrets.PRIVATE_KEY }}
|
||||||
|
branch: ${{ github.head_ref || github.ref_name }}
|
||||||
|
# build:
|
||||||
|
# needs: Lint
|
||||||
|
# uses: ./.gitea/workflows/common_build.yml
|
||||||
|
@ -6,9 +6,8 @@ import android.content.Intent
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.Button
|
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.constraintlayout.widget.ConstraintLayout
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import bou.amine.apps.readerforselfossv2.android.R
|
import bou.amine.apps.readerforselfossv2.android.R
|
||||||
import bou.amine.apps.readerforselfossv2.android.UpsertSourceActivity
|
import bou.amine.apps.readerforselfossv2.android.UpsertSourceActivity
|
||||||
@ -32,33 +31,82 @@ class SourcesListAdapter(
|
|||||||
private val items: ArrayList<SelfossModel.SourceDetail>,
|
private val items: ArrayList<SelfossModel.SourceDetail>,
|
||||||
) : RecyclerView.Adapter<SourcesListAdapter.ViewHolder>(),
|
) : RecyclerView.Adapter<SourcesListAdapter.ViewHolder>(),
|
||||||
DIAware {
|
DIAware {
|
||||||
private val c: Context = app.baseContext
|
|
||||||
private lateinit var binding: SourceListItemBinding
|
|
||||||
|
|
||||||
override val di: DI by closestDI(app)
|
override val di: DI by closestDI(app)
|
||||||
private val repository: Repository by instance()
|
|
||||||
private val appSettingsService: AppSettingsService by instance()
|
|
||||||
|
|
||||||
override fun onCreateViewHolder(
|
override fun onCreateViewHolder(
|
||||||
parent: ViewGroup,
|
parent: ViewGroup,
|
||||||
viewType: Int,
|
viewType: Int,
|
||||||
): ViewHolder {
|
): ViewHolder {
|
||||||
binding = SourceListItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
val binding = SourceListItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||||
return ViewHolder(binding.root)
|
return ViewHolder(binding)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBindViewHolder(
|
override fun onBindViewHolder(
|
||||||
holder: ViewHolder,
|
holder: ViewHolder,
|
||||||
position: Int,
|
position: Int,
|
||||||
) {
|
) {
|
||||||
val itm = items[position]
|
holder.bind(items[position], position)
|
||||||
|
}
|
||||||
|
|
||||||
val deleteBtn: Button = holder.mView.findViewById(R.id.deleteBtn)
|
override fun getItemId(position: Int) = position.toLong()
|
||||||
|
|
||||||
deleteBtn.setOnClickListener {
|
override fun getItemViewType(position: Int) = position
|
||||||
val (id, title) = items[position]
|
|
||||||
|
override fun getItemCount(): Int = items.size
|
||||||
|
|
||||||
|
inner class ViewHolder(
|
||||||
|
val binding: SourceListItemBinding,
|
||||||
|
) : RecyclerView.ViewHolder(binding.root) {
|
||||||
|
private val context: Context = app.applicationContext
|
||||||
|
private val repository: Repository by instance()
|
||||||
|
private val appSettingsService: AppSettingsService by instance()
|
||||||
|
|
||||||
|
fun bind(
|
||||||
|
source: SelfossModel.SourceDetail,
|
||||||
|
position: Int,
|
||||||
|
) {
|
||||||
|
binding.apply {
|
||||||
|
sourceTitle.text = source.title.getHtmlDecoded()
|
||||||
|
if (source.getIcon(repository.baseUrl).isEmpty()) {
|
||||||
|
itemImage.setBackgroundAndText(source.title.getHtmlDecoded())
|
||||||
|
} else {
|
||||||
|
context.circularDrawable(source.getIcon(repository.baseUrl), itemImage, appSettingsService)
|
||||||
|
}
|
||||||
|
|
||||||
|
errorText.apply {
|
||||||
|
visibility = if (!source.error.isNullOrBlank()) View.VISIBLE else View.GONE
|
||||||
|
text = source.error
|
||||||
|
}
|
||||||
|
|
||||||
|
deleteBtn.setOnClickListener { showDeleteConfirmationDialog(source, position) }
|
||||||
|
|
||||||
|
root.setOnClickListener {
|
||||||
|
repository.setSelectedSource(source)
|
||||||
|
app.startActivity(Intent(app, UpsertSourceActivity::class.java))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun showDeleteConfirmationDialog(
|
||||||
|
source: SelfossModel.SourceDetail,
|
||||||
|
position: Int,
|
||||||
|
) {
|
||||||
|
AlertDialog
|
||||||
|
.Builder(app)
|
||||||
|
.setTitle(app.getString(R.string.confirm_delete_title))
|
||||||
|
.setMessage(app.getString(R.string.confirm_delete_message, source.title))
|
||||||
|
.setPositiveButton(android.R.string.ok) { _, _ -> deleteSource(source, position) }
|
||||||
|
.setNegativeButton(android.R.string.cancel, null)
|
||||||
|
.show()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun deleteSource(
|
||||||
|
source: SelfossModel.SourceDetail,
|
||||||
|
position: Int,
|
||||||
|
) {
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
val successfullyDeletedSource = repository.deleteSource(id, title)
|
val successfullyDeletedSource = repository.deleteSource(source.id, source.title)
|
||||||
|
launch(Dispatchers.Main) {
|
||||||
if (successfullyDeletedSource) {
|
if (successfullyDeletedSource) {
|
||||||
items.removeAt(position)
|
items.removeAt(position)
|
||||||
notifyItemRemoved(position)
|
notifyItemRemoved(position)
|
||||||
@ -73,37 +121,6 @@ class SourcesListAdapter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
holder.mView.setOnClickListener {
|
|
||||||
val source = items[position]
|
|
||||||
|
|
||||||
repository.setSelectedSource(source)
|
|
||||||
app.startActivity(Intent(app, UpsertSourceActivity::class.java))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (itm.getIcon(repository.baseUrl).isEmpty()) {
|
|
||||||
binding.itemImage.setBackgroundAndText(itm.title.getHtmlDecoded())
|
|
||||||
} else {
|
|
||||||
c.circularDrawable(itm.getIcon(repository.baseUrl), binding.itemImage, appSettingsService)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!itm.error.isNullOrBlank()) {
|
|
||||||
binding.errorText.visibility = View.VISIBLE
|
|
||||||
binding.errorText.text = itm.error
|
|
||||||
} else {
|
|
||||||
binding.errorText.visibility = View.GONE
|
|
||||||
}
|
|
||||||
|
|
||||||
binding.sourceTitle.text = itm.title.getHtmlDecoded()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getItemId(position: Int) = position.toLong()
|
|
||||||
|
|
||||||
override fun getItemViewType(position: Int) = position
|
|
||||||
|
|
||||||
override fun getItemCount(): Int = items.size
|
|
||||||
|
|
||||||
inner class ViewHolder(
|
|
||||||
val mView: ConstraintLayout,
|
|
||||||
) : RecyclerView.ViewHolder(mView)
|
|
||||||
}
|
}
|
||||||
|
@ -129,4 +129,7 @@
|
|||||||
<string name="action_about">"Quant a"</string>
|
<string name="action_about">"Quant a"</string>
|
||||||
<string name="marked_as_read">"Element llegit"</string>
|
<string name="marked_as_read">"Element llegit"</string>
|
||||||
<string name="marked_as_unread">"Item unread"</string>
|
<string name="marked_as_unread">"Item unread"</string>
|
||||||
|
<string name="confirm_delete_title">Confirm Deletion</string>
|
||||||
|
<string name="confirm_delete_message">Are you sure you want to delete the following source?\n%s</string>
|
||||||
|
<string name="test_only_delete_late">Tototta</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -129,4 +129,7 @@
|
|||||||
<string name="action_about">"Über"</string>
|
<string name="action_about">"Über"</string>
|
||||||
<string name="marked_as_read">"Artikel gelesen"</string>
|
<string name="marked_as_read">"Artikel gelesen"</string>
|
||||||
<string name="marked_as_unread">"Item unread"</string>
|
<string name="marked_as_unread">"Item unread"</string>
|
||||||
|
<string name="confirm_delete_title">Confirm Deletion</string>
|
||||||
|
<string name="confirm_delete_message">Are you sure you want to delete the following source?\n%s</string>
|
||||||
|
<string name="test_only_delete_late">Tototta</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -129,4 +129,7 @@
|
|||||||
<string name="action_about">"Acerca de"</string>
|
<string name="action_about">"Acerca de"</string>
|
||||||
<string name="marked_as_read">"Artículo leído"</string>
|
<string name="marked_as_read">"Artículo leído"</string>
|
||||||
<string name="marked_as_unread">"Artículo no leído"</string>
|
<string name="marked_as_unread">"Artículo no leído"</string>
|
||||||
|
<string name="confirm_delete_title">Confirm Deletion</string>
|
||||||
|
<string name="confirm_delete_message">Are you sure you want to delete the following source?\n%s</string>
|
||||||
|
<string name="test_only_delete_late">Tototta</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -129,4 +129,7 @@
|
|||||||
<string name="action_about">"À propos"</string>
|
<string name="action_about">"À propos"</string>
|
||||||
<string name="marked_as_read">"Marqué comme lu"</string>
|
<string name="marked_as_read">"Marqué comme lu"</string>
|
||||||
<string name="marked_as_unread">"Marqué comme non lu"</string>
|
<string name="marked_as_unread">"Marqué comme non lu"</string>
|
||||||
|
<string name="confirm_delete_title">Confirm Deletion</string>
|
||||||
|
<string name="confirm_delete_message">Are you sure you want to delete the following source?\n%s</string>
|
||||||
|
<string name="test_only_delete_late">Tototta</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -129,4 +129,7 @@
|
|||||||
<string name="action_about">"Acerca de"</string>
|
<string name="action_about">"Acerca de"</string>
|
||||||
<string name="marked_as_read">"Elemento lido"</string>
|
<string name="marked_as_read">"Elemento lido"</string>
|
||||||
<string name="marked_as_unread">"Elemento non lido"</string>
|
<string name="marked_as_unread">"Elemento non lido"</string>
|
||||||
|
<string name="confirm_delete_title">Confirm Deletion</string>
|
||||||
|
<string name="confirm_delete_message">Are you sure you want to delete the following source?\n%s</string>
|
||||||
|
<string name="test_only_delete_late">Tototta</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -129,4 +129,7 @@
|
|||||||
<string name="action_about">"Tentang"</string>
|
<string name="action_about">"Tentang"</string>
|
||||||
<string name="marked_as_read">"Membaca item"</string>
|
<string name="marked_as_read">"Membaca item"</string>
|
||||||
<string name="marked_as_unread">"Item unread"</string>
|
<string name="marked_as_unread">"Item unread"</string>
|
||||||
|
<string name="confirm_delete_title">Confirm Deletion</string>
|
||||||
|
<string name="confirm_delete_message">Are you sure you want to delete the following source?\n%s</string>
|
||||||
|
<string name="test_only_delete_late">Tototta</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -129,4 +129,7 @@
|
|||||||
<string name="action_about">"Informazioni"</string>
|
<string name="action_about">"Informazioni"</string>
|
||||||
<string name="marked_as_read">"Articolo letto"</string>
|
<string name="marked_as_read">"Articolo letto"</string>
|
||||||
<string name="marked_as_unread">"Item unread"</string>
|
<string name="marked_as_unread">"Item unread"</string>
|
||||||
|
<string name="confirm_delete_title">Confirm Deletion</string>
|
||||||
|
<string name="confirm_delete_message">Are you sure you want to delete the following source?\n%s</string>
|
||||||
|
<string name="test_only_delete_late">Tototta</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -129,4 +129,7 @@
|
|||||||
<string name="action_about">"정보"</string>
|
<string name="action_about">"정보"</string>
|
||||||
<string name="marked_as_read">"항목 읽기"</string>
|
<string name="marked_as_read">"항목 읽기"</string>
|
||||||
<string name="marked_as_unread">"Item unread"</string>
|
<string name="marked_as_unread">"Item unread"</string>
|
||||||
|
<string name="confirm_delete_title">Confirm Deletion</string>
|
||||||
|
<string name="confirm_delete_message">Are you sure you want to delete the following source?\n%s</string>
|
||||||
|
<string name="test_only_delete_late">Tototta</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -129,4 +129,7 @@
|
|||||||
<string name="action_about">"Over"</string>
|
<string name="action_about">"Over"</string>
|
||||||
<string name="marked_as_read">"Artikel gelezen"</string>
|
<string name="marked_as_read">"Artikel gelezen"</string>
|
||||||
<string name="marked_as_unread">"Item unread"</string>
|
<string name="marked_as_unread">"Item unread"</string>
|
||||||
|
<string name="confirm_delete_title">Confirm Deletion</string>
|
||||||
|
<string name="confirm_delete_message">Are you sure you want to delete the following source?\n%s</string>
|
||||||
|
<string name="test_only_delete_late">Tototta</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -129,4 +129,7 @@
|
|||||||
<string name="action_about">"Sobre"</string>
|
<string name="action_about">"Sobre"</string>
|
||||||
<string name="marked_as_read">"Item lido"</string>
|
<string name="marked_as_read">"Item lido"</string>
|
||||||
<string name="marked_as_unread">"Item unread"</string>
|
<string name="marked_as_unread">"Item unread"</string>
|
||||||
|
<string name="confirm_delete_title">Confirm Deletion</string>
|
||||||
|
<string name="confirm_delete_message">Are you sure you want to delete the following source?\n%s</string>
|
||||||
|
<string name="test_only_delete_late">Tototta</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -129,4 +129,7 @@
|
|||||||
<string name="action_about">"Sobre"</string>
|
<string name="action_about">"Sobre"</string>
|
||||||
<string name="marked_as_read">"Item lido"</string>
|
<string name="marked_as_read">"Item lido"</string>
|
||||||
<string name="marked_as_unread">"Item unread"</string>
|
<string name="marked_as_unread">"Item unread"</string>
|
||||||
|
<string name="confirm_delete_title">Confirm Deletion</string>
|
||||||
|
<string name="confirm_delete_message">Are you sure you want to delete the following source?\n%s</string>
|
||||||
|
<string name="test_only_delete_late">Tototta</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -129,4 +129,7 @@
|
|||||||
<string name="action_about">"මේ ගැන"</string>
|
<string name="action_about">"මේ ගැන"</string>
|
||||||
<string name="marked_as_read">"Item read"</string>
|
<string name="marked_as_read">"Item read"</string>
|
||||||
<string name="marked_as_unread">"Item unread"</string>
|
<string name="marked_as_unread">"Item unread"</string>
|
||||||
|
<string name="confirm_delete_title">Confirm Deletion</string>
|
||||||
|
<string name="confirm_delete_message">Are you sure you want to delete the following source?\n%s</string>
|
||||||
|
<string name="test_only_delete_late">Tototta</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -129,4 +129,7 @@
|
|||||||
<string name="action_about">"Hakkında"</string>
|
<string name="action_about">"Hakkında"</string>
|
||||||
<string name="marked_as_read">"Öğeleri oku"</string>
|
<string name="marked_as_read">"Öğeleri oku"</string>
|
||||||
<string name="marked_as_unread">"Item unread"</string>
|
<string name="marked_as_unread">"Item unread"</string>
|
||||||
|
<string name="confirm_delete_title">Confirm Deletion</string>
|
||||||
|
<string name="confirm_delete_message">Are you sure you want to delete the following source?\n%s</string>
|
||||||
|
<string name="test_only_delete_late">Tototta</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -129,4 +129,7 @@
|
|||||||
<string name="action_about">"关于我们"</string>
|
<string name="action_about">"关于我们"</string>
|
||||||
<string name="marked_as_read">"已读"</string>
|
<string name="marked_as_read">"已读"</string>
|
||||||
<string name="marked_as_unread">"未读条目"</string>
|
<string name="marked_as_unread">"未读条目"</string>
|
||||||
|
<string name="confirm_delete_title">Confirm Deletion</string>
|
||||||
|
<string name="confirm_delete_message">Are you sure you want to delete the following source?\n%s</string>
|
||||||
|
<string name="test_only_delete_late">Tototta</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -129,4 +129,7 @@
|
|||||||
<string name="action_about">"关于我们"</string>
|
<string name="action_about">"关于我们"</string>
|
||||||
<string name="marked_as_read">"已读"</string>
|
<string name="marked_as_read">"已读"</string>
|
||||||
<string name="marked_as_unread">"未讀項目"</string>
|
<string name="marked_as_unread">"未讀項目"</string>
|
||||||
|
<string name="confirm_delete_title">Confirm Deletion</string>
|
||||||
|
<string name="confirm_delete_message">Are you sure you want to delete the following source?\n%s</string>
|
||||||
|
<string name="test_only_delete_late">Tototta</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -131,4 +131,7 @@
|
|||||||
<string name="action_about">"About"</string>
|
<string name="action_about">"About"</string>
|
||||||
<string name="marked_as_read">"Item read"</string>
|
<string name="marked_as_read">"Item read"</string>
|
||||||
<string name="marked_as_unread">"Item unread"</string>
|
<string name="marked_as_unread">"Item unread"</string>
|
||||||
|
<string name="confirm_delete_title">Confirm Deletion</string>
|
||||||
|
<string name="confirm_delete_message">Are you sure you want to delete the following source?\n%s</string>
|
||||||
|
<string name="test_only_delete_late">Tototta</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user