Compare commits
1 commit
main
...
e2e-dabble
Author | SHA1 | Date | |
---|---|---|---|
|
a4461bf47f |
149 changed files with 912 additions and 7689 deletions
|
@ -1,21 +0,0 @@
|
|||
image: "registry.gitlab.e.foundation/e/os/docker-android-apps-cicd:latest"
|
||||
|
||||
stages:
|
||||
- build
|
||||
|
||||
before_script:
|
||||
- export GRADLE_USER_HOME=$(pwd)/.gradle
|
||||
- chmod +x ./gradlew
|
||||
|
||||
cache:
|
||||
key: ${CI_PROJECT_ID}
|
||||
paths:
|
||||
- .gradle/
|
||||
|
||||
buildRelease:
|
||||
stage: build
|
||||
script:
|
||||
- ./gradlew assembleFdroid
|
||||
artifacts:
|
||||
paths:
|
||||
- app/build/outputs/apk/fdroid/release
|
28
README.md
28
README.md
|
@ -2,8 +2,32 @@
|
|||
This is the Android app for [ntfy](https://github.com/binwiederhier/ntfy) ([ntfy.sh](https://ntfy.sh)). You can find the app in [F-Droid](https://f-droid.org/packages/io.heckel.ntfy/) or the [Play Store](https://play.google.com/store/apps/details?id=io.heckel.ntfy),
|
||||
or as .apk files on the [releases page](https://github.com/binwiederhier/ntfy-android/releases).
|
||||
|
||||
## Build
|
||||
For up-to-date building instructions, please see the [official docs](https://docs.ntfy.sh/develop/#android-app).
|
||||
# Build
|
||||
|
||||
## Building without Firebase (F-Droid flavor)
|
||||
Without Firebase, you may want to still change the default `app_base_url` in [strings.xml](https://github.com/binwiederhier/ntfy-android/blob/main/app/src/main/res/values/strings.xml)
|
||||
if you're self-hosting the server. Then run:
|
||||
```
|
||||
# To build an unsigned .apk (app/build/outputs/apk/fdroid/*.apk)
|
||||
./gradlew assembleFdroidRelease
|
||||
|
||||
# To build a bundle .aab (app/fdroid/release/*.aab)
|
||||
./gradlew bundleFdroidRelease
|
||||
```
|
||||
|
||||
## Building with Firebase (FCM, Google Play flavor)
|
||||
To build your own version with Firebase, you must:
|
||||
* Create a Firebase/FCM account
|
||||
* Place your account file at `app/google-services.json`
|
||||
* And change `app_base_url` in [strings.xml](https://github.com/binwiederhier/ntfy-android/blob/main/app/src/main/res/values/strings.xml)
|
||||
* Then run:
|
||||
```
|
||||
# To build an unsigned .apk (app/build/outputs/apk/play/*.apk)
|
||||
./gradlew assemblePlayRelease
|
||||
|
||||
# To build a bundle .aab (app/play/release/*.aab)
|
||||
./gradlew bundlePlayRelease
|
||||
```
|
||||
|
||||
## Translations
|
||||
We're using [Weblate](https://hosted.weblate.org/projects/ntfy/) to translate the ntfy Android app. We'd love your participation.
|
||||
|
|
|
@ -1,21 +1,19 @@
|
|||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'kotlin-android'
|
||||
apply plugin: 'kotlin-android-extensions'
|
||||
apply plugin: 'kotlin-kapt'
|
||||
apply plugin: 'com.google.gms.google-services'
|
||||
|
||||
android {
|
||||
compileSdkVersion 33
|
||||
compileSdkVersion 31
|
||||
|
||||
defaultConfig {
|
||||
applicationId "foundation.e.ntfy"
|
||||
minSdkVersion 23
|
||||
targetSdkVersion 33
|
||||
applicationId "io.heckel.ntfy"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 31
|
||||
|
||||
versionCode 33
|
||||
versionName "1.17.0"
|
||||
versionCode 28
|
||||
versionName "1.14.0"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
||||
|
@ -27,10 +25,6 @@ android {
|
|||
}
|
||||
}
|
||||
|
||||
buildFeatures {
|
||||
viewBinding = true
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled true
|
||||
|
@ -48,12 +42,10 @@ android {
|
|||
play {
|
||||
buildConfigField 'boolean', 'FIREBASE_AVAILABLE', 'true'
|
||||
buildConfigField 'boolean', 'RATE_APP_AVAILABLE', 'true'
|
||||
buildConfigField 'boolean', 'INSTALL_PACKAGES_AVAILABLE', 'false'
|
||||
}
|
||||
fdroid {
|
||||
buildConfigField 'boolean', 'FIREBASE_AVAILABLE', 'false'
|
||||
buildConfigField 'boolean', 'RATE_APP_AVAILABLE', 'false'
|
||||
buildConfigField 'boolean', 'INSTALL_PACKAGES_AVAILABLE', 'true'
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -64,75 +56,46 @@ android {
|
|||
|
||||
kotlinOptions {
|
||||
jvmTarget = JavaVersion.VERSION_1_8.toString()
|
||||
freeCompilerArgs += [
|
||||
'-Xjvm-default=all-compatibility' // https://stackoverflow.com/a/71234042/1440785
|
||||
]
|
||||
}
|
||||
namespace "io.heckel.ntfy"
|
||||
}
|
||||
|
||||
// Disables GoogleServices tasks for F-Droid variant
|
||||
android.applicationVariants.all { variant ->
|
||||
def shouldProcessGoogleServices = variant.flavorName == "play"
|
||||
def googleTask = tasks.findByName("process${variant.name.capitalize()}GoogleServices")
|
||||
googleTask.enabled = shouldProcessGoogleServices
|
||||
}
|
||||
|
||||
// Strips out REQUEST_INSTALL_PACKAGES permission for Google Play variant
|
||||
android.applicationVariants.all { variant ->
|
||||
def shouldStripInstallPermission = variant.flavorName == "play"
|
||||
if (shouldStripInstallPermission) {
|
||||
variant.outputs.each { output ->
|
||||
def processManifest = output.getProcessManifestProvider().get()
|
||||
processManifest.doLast { task ->
|
||||
def outputDir = task.getMultiApkManifestOutputDirectory().get().asFile
|
||||
def manifestOutFile = file("$outputDir/AndroidManifest.xml")
|
||||
def newFileContents = manifestOutFile.collect { s -> s.contains("android.permission.REQUEST_INSTALL_PACKAGES") ? "" : s }.join("\n")
|
||||
manifestOutFile.write(newFileContents, 'UTF-8')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
// AndroidX, The Basics
|
||||
implementation "androidx.appcompat:appcompat:1.6.1"
|
||||
implementation "androidx.core:core-ktx:1.10.1"
|
||||
implementation "androidx.appcompat:appcompat:1.4.2"
|
||||
implementation "androidx.core:core-ktx:1.8.0"
|
||||
implementation "androidx.constraintlayout:constraintlayout:2.1.4"
|
||||
implementation "androidx.activity:activity-ktx:1.7.1"
|
||||
implementation "androidx.fragment:fragment-ktx:1.5.7"
|
||||
implementation "androidx.work:work-runtime-ktx:2.8.1"
|
||||
implementation "androidx.activity:activity-ktx:1.4.0"
|
||||
implementation "androidx.fragment:fragment-ktx:1.4.1"
|
||||
implementation "androidx.work:work-runtime-ktx:2.7.1"
|
||||
implementation 'androidx.preference:preference-ktx:1.2.0'
|
||||
|
||||
// JSON serialization
|
||||
implementation 'com.google.code.gson:gson:2.10'
|
||||
implementation 'com.google.code.gson:gson:2.9.0'
|
||||
|
||||
// Room (SQLite)
|
||||
def room_version = "2.5.1"
|
||||
def room_version = "2.4.2"
|
||||
implementation "androidx.room:room-ktx:$room_version"
|
||||
kapt "androidx.room:room-compiler:$room_version"
|
||||
|
||||
// OkHttp (HTTP library)
|
||||
implementation 'com.squareup.okhttp3:okhttp:4.10.0'
|
||||
implementation 'com.squareup.okhttp3:okhttp:4.9.3'
|
||||
|
||||
// Firebase, sigh ... (only Google Play)
|
||||
playImplementation 'com.google.firebase:firebase-messaging:23.1.2'
|
||||
playImplementation 'com.google.firebase:firebase-messaging:23.0.5'
|
||||
|
||||
// RecyclerView
|
||||
implementation "androidx.recyclerview:recyclerview:1.3.0"
|
||||
implementation "androidx.recyclerview:recyclerview:1.3.0-alpha02"
|
||||
|
||||
// Swipe down to refresh
|
||||
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
|
||||
|
||||
// Material design
|
||||
implementation "com.google.android.material:material:1.9.0"
|
||||
implementation "com.google.android.material:material:1.6.1"
|
||||
|
||||
// LiveData
|
||||
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.6.1"
|
||||
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1"
|
||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||
|
||||
// Image viewer
|
||||
implementation 'com.github.stfalcon-studio:StfalconImageViewer:v1.0.1'
|
||||
|
||||
implementation 'foundation.e:elib:0.0.1-alpha11'
|
||||
}
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
"formatVersion": 1,
|
||||
"database": {
|
||||
"version": 12,
|
||||
"identityHash": "d230005f4d9824ba9aa34c61003bdcbb",
|
||||
"identityHash": "250db1985385d64d880124071eab96fc",
|
||||
"entities": [
|
||||
{
|
||||
"tableName": "Subscription",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `baseUrl` TEXT NOT NULL, `topic` TEXT NOT NULL, `instant` INTEGER NOT NULL, `mutedUntil` INTEGER NOT NULL, `minPriority` INTEGER NOT NULL, `autoDelete` INTEGER NOT NULL, `lastNotificationId` TEXT, `icon` TEXT, `upAppId` TEXT, `upConnectorToken` TEXT, `displayName` TEXT, PRIMARY KEY(`id`))",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `baseUrl` TEXT NOT NULL, `topic` TEXT NOT NULL, `instant` INTEGER NOT NULL, `mutedUntil` INTEGER NOT NULL, `minPriority` INTEGER NOT NULL, `autoDelete` INTEGER NOT NULL, `lastNotificationId` TEXT, `icon` TEXT, `upAppId` TEXT, `upConnectorToken` TEXT, `displayName` TEXT, `encryptionKey` BLOB, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
|
@ -79,6 +79,12 @@
|
|||
"columnName": "displayName",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "encryptionKey",
|
||||
"columnName": "encryptionKey",
|
||||
"affinity": "BLOB",
|
||||
"notNull": false
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
|
@ -112,7 +118,7 @@
|
|||
},
|
||||
{
|
||||
"tableName": "Notification",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `subscriptionId` INTEGER NOT NULL, `timestamp` INTEGER NOT NULL, `title` TEXT NOT NULL, `message` TEXT NOT NULL, `encoding` TEXT NOT NULL, `notificationId` INTEGER NOT NULL, `priority` INTEGER NOT NULL DEFAULT 3, `tags` TEXT NOT NULL, `click` TEXT NOT NULL, `actions` TEXT, `deleted` INTEGER NOT NULL, `icon_url` TEXT, `icon_contentUri` TEXT, `attachment_name` TEXT, `attachment_type` TEXT, `attachment_size` INTEGER, `attachment_expires` INTEGER, `attachment_url` TEXT, `attachment_contentUri` TEXT, `attachment_progress` INTEGER, PRIMARY KEY(`id`, `subscriptionId`))",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `subscriptionId` INTEGER NOT NULL, `timestamp` INTEGER NOT NULL, `title` TEXT NOT NULL, `message` TEXT NOT NULL, `encoding` TEXT NOT NULL, `notificationId` INTEGER NOT NULL, `priority` INTEGER NOT NULL DEFAULT 3, `tags` TEXT NOT NULL, `click` TEXT NOT NULL, `actions` TEXT, `deleted` INTEGER NOT NULL, `attachment_name` TEXT, `attachment_type` TEXT, `attachment_size` INTEGER, `attachment_expires` INTEGER, `attachment_url` TEXT, `attachment_contentUri` TEXT, `attachment_progress` INTEGER, PRIMARY KEY(`id`, `subscriptionId`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
|
@ -187,18 +193,6 @@
|
|||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "icon.url",
|
||||
"columnName": "icon_url",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "icon.contentUri",
|
||||
"columnName": "icon_contentUri",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "attachment.name",
|
||||
"columnName": "attachment_name",
|
||||
|
@ -338,7 +332,7 @@
|
|||
"views": [],
|
||||
"setupQueries": [
|
||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'd230005f4d9824ba9aa34c61003bdcbb')"
|
||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '250db1985385d64d880124071eab96fc')"
|
||||
]
|
||||
}
|
||||
}
|
|
@ -1,356 +0,0 @@
|
|||
{
|
||||
"formatVersion": 1,
|
||||
"database": {
|
||||
"version": 13,
|
||||
"identityHash": "44fc291d937fdf02b9bc2d0abb10d2e0",
|
||||
"entities": [
|
||||
{
|
||||
"tableName": "Subscription",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `baseUrl` TEXT NOT NULL, `topic` TEXT NOT NULL, `instant` INTEGER NOT NULL, `mutedUntil` INTEGER NOT NULL, `minPriority` INTEGER NOT NULL, `autoDelete` INTEGER NOT NULL, `insistent` INTEGER NOT NULL, `lastNotificationId` TEXT, `icon` TEXT, `upAppId` TEXT, `upConnectorToken` TEXT, `displayName` TEXT, `dedicatedChannels` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "baseUrl",
|
||||
"columnName": "baseUrl",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "topic",
|
||||
"columnName": "topic",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "instant",
|
||||
"columnName": "instant",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "mutedUntil",
|
||||
"columnName": "mutedUntil",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "minPriority",
|
||||
"columnName": "minPriority",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "autoDelete",
|
||||
"columnName": "autoDelete",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "insistent",
|
||||
"columnName": "insistent",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastNotificationId",
|
||||
"columnName": "lastNotificationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "icon",
|
||||
"columnName": "icon",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "upAppId",
|
||||
"columnName": "upAppId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "upConnectorToken",
|
||||
"columnName": "upConnectorToken",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "displayName",
|
||||
"columnName": "displayName",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "dedicatedChannels",
|
||||
"columnName": "dedicatedChannels",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"columnNames": [
|
||||
"id"
|
||||
],
|
||||
"autoGenerate": false
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_Subscription_baseUrl_topic",
|
||||
"unique": true,
|
||||
"columnNames": [
|
||||
"baseUrl",
|
||||
"topic"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_Subscription_baseUrl_topic` ON `${TABLE_NAME}` (`baseUrl`, `topic`)"
|
||||
},
|
||||
{
|
||||
"name": "index_Subscription_upConnectorToken",
|
||||
"unique": true,
|
||||
"columnNames": [
|
||||
"upConnectorToken"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_Subscription_upConnectorToken` ON `${TABLE_NAME}` (`upConnectorToken`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": []
|
||||
},
|
||||
{
|
||||
"tableName": "Notification",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `subscriptionId` INTEGER NOT NULL, `timestamp` INTEGER NOT NULL, `title` TEXT NOT NULL, `message` TEXT NOT NULL, `encoding` TEXT NOT NULL, `notificationId` INTEGER NOT NULL, `priority` INTEGER NOT NULL DEFAULT 3, `tags` TEXT NOT NULL, `click` TEXT NOT NULL, `actions` TEXT, `deleted` INTEGER NOT NULL, `icon_url` TEXT, `icon_contentUri` TEXT, `attachment_name` TEXT, `attachment_type` TEXT, `attachment_size` INTEGER, `attachment_expires` INTEGER, `attachment_url` TEXT, `attachment_contentUri` TEXT, `attachment_progress` INTEGER, PRIMARY KEY(`id`, `subscriptionId`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "subscriptionId",
|
||||
"columnName": "subscriptionId",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "timestamp",
|
||||
"columnName": "timestamp",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "title",
|
||||
"columnName": "title",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "message",
|
||||
"columnName": "message",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "encoding",
|
||||
"columnName": "encoding",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "notificationId",
|
||||
"columnName": "notificationId",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "priority",
|
||||
"columnName": "priority",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true,
|
||||
"defaultValue": "3"
|
||||
},
|
||||
{
|
||||
"fieldPath": "tags",
|
||||
"columnName": "tags",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "click",
|
||||
"columnName": "click",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "actions",
|
||||
"columnName": "actions",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "deleted",
|
||||
"columnName": "deleted",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "icon.url",
|
||||
"columnName": "icon_url",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "icon.contentUri",
|
||||
"columnName": "icon_contentUri",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "attachment.name",
|
||||
"columnName": "attachment_name",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "attachment.type",
|
||||
"columnName": "attachment_type",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "attachment.size",
|
||||
"columnName": "attachment_size",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "attachment.expires",
|
||||
"columnName": "attachment_expires",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "attachment.url",
|
||||
"columnName": "attachment_url",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "attachment.contentUri",
|
||||
"columnName": "attachment_contentUri",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "attachment.progress",
|
||||
"columnName": "attachment_progress",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": false
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"columnNames": [
|
||||
"id",
|
||||
"subscriptionId"
|
||||
],
|
||||
"autoGenerate": false
|
||||
},
|
||||
"indices": [],
|
||||
"foreignKeys": []
|
||||
},
|
||||
{
|
||||
"tableName": "User",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`baseUrl` TEXT NOT NULL, `username` TEXT NOT NULL, `password` TEXT NOT NULL, PRIMARY KEY(`baseUrl`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "baseUrl",
|
||||
"columnName": "baseUrl",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "username",
|
||||
"columnName": "username",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "password",
|
||||
"columnName": "password",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"columnNames": [
|
||||
"baseUrl"
|
||||
],
|
||||
"autoGenerate": false
|
||||
},
|
||||
"indices": [],
|
||||
"foreignKeys": []
|
||||
},
|
||||
{
|
||||
"tableName": "Log",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `timestamp` INTEGER NOT NULL, `tag` TEXT NOT NULL, `level` INTEGER NOT NULL, `message` TEXT NOT NULL, `exception` TEXT)",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "timestamp",
|
||||
"columnName": "timestamp",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "tag",
|
||||
"columnName": "tag",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "level",
|
||||
"columnName": "level",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "message",
|
||||
"columnName": "message",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "exception",
|
||||
"columnName": "exception",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"columnNames": [
|
||||
"id"
|
||||
],
|
||||
"autoGenerate": true
|
||||
},
|
||||
"indices": [],
|
||||
"foreignKeys": []
|
||||
}
|
||||
],
|
||||
"views": [],
|
||||
"setupQueries": [
|
||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '44fc291d937fdf02b9bc2d0abb10d2e0')"
|
||||
]
|
||||
}
|
||||
}
|
|
@ -1,6 +1,5 @@
|
|||
package io.heckel.ntfy.firebase
|
||||
|
||||
@Suppress("UNUSED_PARAMETER")
|
||||
class FirebaseMessenger {
|
||||
fun subscribe(topic: String) {
|
||||
// Dummy to keep F-Droid flavor happy
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
package="io.heckel.ntfy">
|
||||
<!-- Permissions -->
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <!-- For instant delivery foregrounds service -->
|
||||
|
@ -9,23 +8,14 @@
|
|||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <!-- To restart service on reboot -->
|
||||
<uses-permission android:name="android.permission.VIBRATE"/> <!-- Incoming notifications should be able to vibrate the phone -->
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28"/> <!-- Only required on SDK <= 28 -->
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/> <!-- To install packages downloaded through ntfy; craazyy! -->
|
||||
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/> <!-- To reschedule the websocket retry -->
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <!-- As of Android 13, we need to ask for permission to post notifications -->
|
||||
|
||||
<!--
|
||||
Permission REQUEST_INSTALL_PACKAGES (F-Droid only!):
|
||||
- Permission is used to install .apk files that were received as attachments
|
||||
- Google rejected the permission for ntfy, so this permission is STRIPPED OUT by the build process
|
||||
for the Google Play variant of the app.
|
||||
-->
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
|
||||
|
||||
<application
|
||||
android:name=".app.Application"
|
||||
android:allowBackup="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:persistent="true"
|
||||
android:roundIcon="@mipmap/ic_launcher"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme"
|
||||
|
@ -36,10 +26,10 @@
|
|||
<activity
|
||||
android:name=".ui.MainActivity"
|
||||
android:label="@string/app_name"
|
||||
android:excludeFromRecents="true"
|
||||
android:exported="true">
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
@ -143,13 +133,6 @@
|
|||
android:exported="false">
|
||||
</receiver>
|
||||
|
||||
<!-- Broadcast receiver for when the notification is swiped away (currently only to cancel the insistent sound) -->
|
||||
<receiver
|
||||
android:name=".msg.NotificationService$DeleteBroadcastReceiver"
|
||||
android:enabled="true"
|
||||
android:exported="false">
|
||||
</receiver>
|
||||
|
||||
<!-- Firebase messaging (note that this is empty in the F-Droid flavor) -->
|
||||
<service
|
||||
android:name=".firebase.FirebaseService"
|
||||
|
@ -176,25 +159,5 @@
|
|||
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||
android:resource="@xml/file_paths"/>
|
||||
</provider>
|
||||
|
||||
<activity
|
||||
android:name=".ui.MainSettingsActivity"
|
||||
android:theme="@style/PreferenceTheme"/>
|
||||
|
||||
<activity-alias
|
||||
android:name=".ui.SettingsActivityLink"
|
||||
android:exported="true"
|
||||
android:label="@string/eos_settings_title"
|
||||
android:targetActivity=".ui.MainSettingsActivity">
|
||||
<intent-filter>
|
||||
<action android:name="com.android.settings.action.EXTRA_SETTINGS" />
|
||||
</intent-filter>
|
||||
<meta-data
|
||||
android:name="com.android.settings.category"
|
||||
android:value="com.android.settings.category.device" />
|
||||
<meta-data
|
||||
android:name="com.android.settings.icon"
|
||||
android:resource="@drawable/ic_notification" />
|
||||
</activity-alias>
|
||||
</application>
|
||||
</manifest>
|
||||
|
|
|
@ -1,10 +1,16 @@
|
|||
package io.heckel.ntfy.app
|
||||
|
||||
import android.app.Application
|
||||
import android.content.Context
|
||||
import io.heckel.ntfy.db.Database
|
||||
import io.heckel.ntfy.db.Repository
|
||||
import io.heckel.ntfy.util.Log
|
||||
|
||||
class Application : Application() {
|
||||
private val database by lazy {
|
||||
Log.init(this) // What a hack, but this is super early and used everywhere
|
||||
Database.getInstance(this)
|
||||
}
|
||||
val repository by lazy {
|
||||
val repository = Repository.getInstance(applicationContext)
|
||||
if (repository.getRecordLogs()) {
|
||||
|
|
|
@ -2,14 +2,12 @@ package io.heckel.ntfy.backup
|
|||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import android.util.Base64
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.GsonBuilder
|
||||
import com.google.gson.stream.JsonReader
|
||||
import io.heckel.ntfy.R
|
||||
import io.heckel.ntfy.app.Application
|
||||
import io.heckel.ntfy.db.Repository
|
||||
import io.heckel.ntfy.firebase.FirebaseMessenger
|
||||
import io.heckel.ntfy.msg.NotificationService
|
||||
import io.heckel.ntfy.util.Log
|
||||
import io.heckel.ntfy.util.topicUrl
|
||||
import java.io.InputStreamReader
|
||||
|
@ -18,8 +16,6 @@ class Backuper(val context: Context) {
|
|||
private val gson = Gson()
|
||||
private val resolver = context.applicationContext.contentResolver
|
||||
private val repository = (context.applicationContext as Application).repository
|
||||
private val messenger = FirebaseMessenger()
|
||||
private val notifier = NotificationService(context)
|
||||
|
||||
suspend fun backup(uri: Uri, withSettings: Boolean = true, withSubscriptions: Boolean = true, withUsers: Boolean = true) {
|
||||
Log.d(TAG, "Backing up settings to file $uri")
|
||||
|
@ -90,40 +86,25 @@ class Backuper(val context: Context) {
|
|||
|
||||
private suspend fun applySubscriptions(subscriptions: List<Subscription>?) {
|
||||
if (subscriptions == null) {
|
||||
return
|
||||
return;
|
||||
}
|
||||
val appBaseUrl = context.getString(R.string.app_base_url)
|
||||
subscriptions.forEach { s ->
|
||||
try {
|
||||
// Add to database
|
||||
val subscription = io.heckel.ntfy.db.Subscription(
|
||||
repository.addSubscription(io.heckel.ntfy.db.Subscription(
|
||||
id = s.id,
|
||||
baseUrl = s.baseUrl,
|
||||
topic = s.topic,
|
||||
instant = s.instant,
|
||||
dedicatedChannels = s.dedicatedChannels,
|
||||
mutedUntil = s.mutedUntil,
|
||||
minPriority = s.minPriority ?: Repository.MIN_PRIORITY_USE_GLOBAL,
|
||||
autoDelete = s.autoDelete ?: Repository.AUTO_DELETE_USE_GLOBAL,
|
||||
insistent = s.insistent ?: Repository.INSISTENT_MAX_PRIORITY_USE_GLOBAL,
|
||||
lastNotificationId = s.lastNotificationId,
|
||||
icon = s.icon,
|
||||
upAppId = s.upAppId,
|
||||
upConnectorToken = s.upConnectorToken,
|
||||
displayName = s.displayName,
|
||||
)
|
||||
repository.addSubscription(subscription)
|
||||
|
||||
// Subscribe to Firebase topics
|
||||
if (s.baseUrl == appBaseUrl) {
|
||||
messenger.subscribe(s.topic)
|
||||
}
|
||||
|
||||
// Create dedicated channels
|
||||
if (s.dedicatedChannels) {
|
||||
notifier.createSubscriptionNotificationChannels(subscription)
|
||||
// TODO Backup/restore individual notification channel settings
|
||||
}
|
||||
encryptionKey = Base64.decode(s.encryptionKey, Base64.DEFAULT)
|
||||
))
|
||||
} catch (e: Exception) {
|
||||
Log.w(TAG, "Unable to restore subscription ${s.id} (${topicUrl(s.baseUrl, s.topic)}): ${e.message}. Ignoring.", e)
|
||||
}
|
||||
|
@ -132,7 +113,7 @@ class Backuper(val context: Context) {
|
|||
|
||||
private suspend fun applyNotifications(notifications: List<Notification>?) {
|
||||
if (notifications == null) {
|
||||
return
|
||||
return;
|
||||
}
|
||||
notifications.forEach { n ->
|
||||
try {
|
||||
|
@ -169,14 +150,6 @@ class Backuper(val context: Context) {
|
|||
} else {
|
||||
null
|
||||
}
|
||||
val icon = if (n.icon != null) {
|
||||
io.heckel.ntfy.db.Icon(
|
||||
url = n.icon.url,
|
||||
contentUri = n.icon.contentUri,
|
||||
)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
repository.addNotification(io.heckel.ntfy.db.Notification(
|
||||
id = n.id,
|
||||
subscriptionId = n.subscriptionId,
|
||||
|
@ -188,7 +161,6 @@ class Backuper(val context: Context) {
|
|||
priority = n.priority,
|
||||
tags = n.tags,
|
||||
click = n.click,
|
||||
icon = icon,
|
||||
actions = actions,
|
||||
attachment = attachment,
|
||||
deleted = n.deleted
|
||||
|
@ -201,7 +173,7 @@ class Backuper(val context: Context) {
|
|||
|
||||
private suspend fun applyUsers(users: List<User>?) {
|
||||
if (users == null) {
|
||||
return
|
||||
return;
|
||||
}
|
||||
users.forEach { u ->
|
||||
try {
|
||||
|
@ -249,16 +221,15 @@ class Backuper(val context: Context) {
|
|||
baseUrl = s.baseUrl,
|
||||
topic = s.topic,
|
||||
instant = s.instant,
|
||||
dedicatedChannels = s.dedicatedChannels,
|
||||
mutedUntil = s.mutedUntil,
|
||||
minPriority = s.minPriority,
|
||||
autoDelete = s.autoDelete,
|
||||
insistent = s.insistent,
|
||||
lastNotificationId = s.lastNotificationId,
|
||||
icon = s.icon,
|
||||
upAppId = s.upAppId,
|
||||
upConnectorToken = s.upConnectorToken,
|
||||
displayName = s.displayName
|
||||
displayName = s.displayName,
|
||||
encryptionKey = if (s.encryptionKey != null) Base64.encodeToString(s.encryptionKey, Base64.DEFAULT) else null
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -298,14 +269,6 @@ class Backuper(val context: Context) {
|
|||
} else {
|
||||
null
|
||||
}
|
||||
val icon = if (n.icon != null) {
|
||||
Icon(
|
||||
url = n.icon.url,
|
||||
contentUri = n.icon.contentUri,
|
||||
)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
Notification(
|
||||
id = n.id,
|
||||
subscriptionId = n.subscriptionId,
|
||||
|
@ -316,7 +279,6 @@ class Backuper(val context: Context) {
|
|||
priority = n.priority,
|
||||
tags = n.tags,
|
||||
click = n.click,
|
||||
icon = icon,
|
||||
actions = actions,
|
||||
attachment = attachment,
|
||||
deleted = n.deleted
|
||||
|
@ -368,16 +330,15 @@ data class Subscription(
|
|||
val baseUrl: String,
|
||||
val topic: String,
|
||||
val instant: Boolean,
|
||||
val dedicatedChannels: Boolean,
|
||||
val mutedUntil: Long,
|
||||
val minPriority: Int?,
|
||||
val autoDelete: Long?,
|
||||
val insistent: Int?,
|
||||
val lastNotificationId: String?,
|
||||
val icon: String?,
|
||||
val upAppId: String?,
|
||||
val upConnectorToken: String?,
|
||||
val displayName: String?
|
||||
val displayName: String?,
|
||||
val encryptionKey: String? // as base64
|
||||
)
|
||||
|
||||
data class Notification(
|
||||
|
@ -386,11 +347,10 @@ data class Notification(
|
|||
val timestamp: Long,
|
||||
val title: String,
|
||||
val message: String,
|
||||
val encoding: String, // "base64" or ""
|
||||
val encoding: String, // "base64", "jwe", or ""
|
||||
val priority: Int, // 1=min, 3=default, 5=max
|
||||
val tags: String,
|
||||
val click: String, // URL/intent to open on notification click
|
||||
val icon: Icon?,
|
||||
val actions: List<Action>?,
|
||||
val attachment: Attachment?,
|
||||
val deleted: Boolean
|
||||
|
@ -421,11 +381,6 @@ data class Attachment(
|
|||
val progress: Int, // Progress during download, -1 if not downloaded
|
||||
)
|
||||
|
||||
data class Icon(
|
||||
val url: String, // URL (mandatory, see ntfy server)
|
||||
val contentUri: String?, // After it's downloaded, the content:// location
|
||||
)
|
||||
|
||||
data class User(
|
||||
val baseUrl: String,
|
||||
val username: String,
|
||||
|
|
|
@ -18,54 +18,19 @@ data class Subscription(
|
|||
@ColumnInfo(name = "mutedUntil") val mutedUntil: Long,
|
||||
@ColumnInfo(name = "minPriority") val minPriority: Int,
|
||||
@ColumnInfo(name = "autoDelete") val autoDelete: Long, // Seconds
|
||||
@ColumnInfo(name = "insistent") val insistent: Int, // Ring constantly for max priority notifications (-1 = use global, 0 = off, 1 = on)
|
||||
@ColumnInfo(name = "lastNotificationId") val lastNotificationId: String?, // Used for polling, with since=<id>
|
||||
@ColumnInfo(name = "icon") val icon: String?, // content://-URI (or later other identifier)
|
||||
@ColumnInfo(name = "upAppId") val upAppId: String?, // UnifiedPush application package name
|
||||
@ColumnInfo(name = "upConnectorToken") val upConnectorToken: String?, // UnifiedPush connector token
|
||||
@ColumnInfo(name = "displayName") val displayName: String?,
|
||||
@ColumnInfo(name = "dedicatedChannels") val dedicatedChannels: Boolean,
|
||||
@ColumnInfo(name = "encryptionKey") val encryptionKey: ByteArray?,
|
||||
@Ignore val totalCount: Int = 0, // Total notifications
|
||||
@Ignore val newCount: Int = 0, // New notifications
|
||||
@Ignore val lastActive: Long = 0, // Unix timestamp
|
||||
@Ignore val state: ConnectionState = ConnectionState.NOT_APPLICABLE
|
||||
) {
|
||||
constructor(
|
||||
id: Long,
|
||||
baseUrl: String,
|
||||
topic: String,
|
||||
instant: Boolean,
|
||||
mutedUntil: Long,
|
||||
minPriority: Int,
|
||||
autoDelete: Long,
|
||||
insistent: Int,
|
||||
lastNotificationId: String,
|
||||
icon: String,
|
||||
upAppId: String,
|
||||
upConnectorToken: String,
|
||||
displayName: String?,
|
||||
dedicatedChannels: Boolean
|
||||
) :
|
||||
this(
|
||||
id,
|
||||
baseUrl,
|
||||
topic,
|
||||
instant,
|
||||
mutedUntil,
|
||||
minPriority,
|
||||
autoDelete,
|
||||
insistent,
|
||||
lastNotificationId,
|
||||
icon,
|
||||
upAppId,
|
||||
upConnectorToken,
|
||||
displayName,
|
||||
dedicatedChannels,
|
||||
totalCount = 0,
|
||||
newCount = 0,
|
||||
lastActive = 0,
|
||||
state = ConnectionState.NOT_APPLICABLE
|
||||
)
|
||||
constructor(id: Long, baseUrl: String, topic: String, instant: Boolean, mutedUntil: Long, minPriority: Int, autoDelete: Long, lastNotificationId: String, icon: String, upAppId: String, upConnectorToken: String, displayName: String?, encryptionKey: ByteArray?) :
|
||||
this(id, baseUrl, topic, instant, mutedUntil, minPriority, autoDelete, lastNotificationId, icon, upAppId, upConnectorToken, displayName, encryptionKey, 0, 0, 0, ConnectionState.NOT_APPLICABLE)
|
||||
}
|
||||
|
||||
enum class ConnectionState {
|
||||
|
@ -80,13 +45,12 @@ data class SubscriptionWithMetadata(
|
|||
val mutedUntil: Long,
|
||||
val autoDelete: Long,
|
||||
val minPriority: Int,
|
||||
val insistent: Int,
|
||||
val lastNotificationId: String?,
|
||||
val icon: String?,
|
||||
val upAppId: String?,
|
||||
val upConnectorToken: String?,
|
||||
val displayName: String?,
|
||||
val dedicatedChannels: Boolean,
|
||||
val encryptionKey: ByteArray?,
|
||||
val totalCount: Int,
|
||||
val newCount: Int,
|
||||
val lastActive: Long
|
||||
|
@ -99,12 +63,11 @@ data class Notification(
|
|||
@ColumnInfo(name = "timestamp") val timestamp: Long, // Unix timestamp
|
||||
@ColumnInfo(name = "title") val title: String,
|
||||
@ColumnInfo(name = "message") val message: String,
|
||||
@ColumnInfo(name = "encoding") val encoding: String, // "base64" or ""
|
||||
@ColumnInfo(name = "encoding") val encoding: String, // "" (raw UTF-8), "base64", or "jwe" (encryption)
|
||||
@ColumnInfo(name = "notificationId") val notificationId: Int, // Android notification popup ID
|
||||
@ColumnInfo(name = "priority", defaultValue = "3") val priority: Int, // 1=min, 3=default, 5=max
|
||||
@ColumnInfo(name = "tags") val tags: String,
|
||||
@ColumnInfo(name = "click") val click: String, // URL/intent to open on notification click
|
||||
@Embedded(prefix = "icon_") val icon: Icon?,
|
||||
@ColumnInfo(name = "actions") val actions: List<Action>?,
|
||||
@Embedded(prefix = "attachment_") val attachment: Attachment?,
|
||||
@ColumnInfo(name = "deleted") val deleted: Boolean,
|
||||
|
@ -130,15 +93,6 @@ const val ATTACHMENT_PROGRESS_FAILED = -3
|
|||
const val ATTACHMENT_PROGRESS_DELETED = -4
|
||||
const val ATTACHMENT_PROGRESS_DONE = 100
|
||||
|
||||
@Entity
|
||||
data class Icon(
|
||||
@ColumnInfo(name = "url") val url: String, // URL (mandatory, see ntfy server)
|
||||
@ColumnInfo(name = "contentUri") val contentUri: String?, // After it's downloaded, the content:// location
|
||||
) {
|
||||
constructor(url:String) :
|
||||
this(url, null)
|
||||
}
|
||||
|
||||
@Entity
|
||||
data class Action(
|
||||
@ColumnInfo(name = "id") val id: String, // Synthetic ID to identify result, and easily pass via Broadcast and WorkManager
|
||||
|
@ -196,7 +150,7 @@ data class LogEntry(
|
|||
this(0, timestamp, tag, level, message, exception)
|
||||
}
|
||||
|
||||
@androidx.room.Database(entities = [Subscription::class, Notification::class, User::class, LogEntry::class], version = 13)
|
||||
@androidx.room.Database(entities = [Subscription::class, Notification::class, User::class, LogEntry::class], version = 12)
|
||||
@TypeConverters(Converters::class)
|
||||
abstract class Database : RoomDatabase() {
|
||||
abstract fun subscriptionDao(): SubscriptionDao
|
||||
|
@ -223,7 +177,6 @@ abstract class Database : RoomDatabase() {
|
|||
.addMigrations(MIGRATION_9_10)
|
||||
.addMigrations(MIGRATION_10_11)
|
||||
.addMigrations(MIGRATION_11_12)
|
||||
.addMigrations(MIGRATION_12_13)
|
||||
.fallbackToDestructiveMigration()
|
||||
.build()
|
||||
this.instance = instance
|
||||
|
@ -318,15 +271,8 @@ abstract class Database : RoomDatabase() {
|
|||
override fun migrate(db: SupportSQLiteDatabase) {
|
||||
db.execSQL("ALTER TABLE Subscription ADD COLUMN lastNotificationId TEXT")
|
||||
db.execSQL("ALTER TABLE Subscription ADD COLUMN displayName TEXT")
|
||||
db.execSQL("ALTER TABLE Notification ADD COLUMN icon_url TEXT") // Room limitation: Has to be nullable for @Embedded
|
||||
db.execSQL("ALTER TABLE Notification ADD COLUMN icon_contentUri TEXT")
|
||||
}
|
||||
}
|
||||
|
||||
private val MIGRATION_12_13 = object : Migration(12, 13) {
|
||||
override fun migrate(db: SupportSQLiteDatabase) {
|
||||
db.execSQL("ALTER TABLE Subscription ADD COLUMN insistent INTEGER NOT NULL DEFAULT (-1)") // = Repository.INSISTENT_MAX_PRIORITY_USE_GLOBAL
|
||||
db.execSQL("ALTER TABLE Subscription ADD COLUMN dedicatedChannels INTEGER NOT NULL DEFAULT (0)")
|
||||
db.execSQL("ALTER TABLE Subscription ADD COLUMN encryptionKey BLOB")
|
||||
db.execSQL("ALTER TABLE Notification ADD COLUMN encryption TEXT NOT NULL DEFAULT('')")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -336,7 +282,7 @@ abstract class Database : RoomDatabase() {
|
|||
interface SubscriptionDao {
|
||||
@Query("""
|
||||
SELECT
|
||||
s.id, s.baseUrl, s.topic, s.instant, s.mutedUntil, s.minPriority, s.autoDelete, s.insistent, s.lastNotificationId, s.icon, s.upAppId, s.upConnectorToken, s.displayName, s.dedicatedChannels,
|
||||
s.id, s.baseUrl, s.topic, s.instant, s.mutedUntil, s.minPriority, s.autoDelete, s.lastNotificationId, s.icon, s.upAppId, s.upConnectorToken, s.displayName, s.encryptionKey,
|
||||
COUNT(n.id) totalCount,
|
||||
COUNT(CASE n.notificationId WHEN 0 THEN NULL ELSE n.id END) newCount,
|
||||
IFNULL(MAX(n.timestamp),0) AS lastActive
|
||||
|
@ -349,7 +295,7 @@ interface SubscriptionDao {
|
|||
|
||||
@Query("""
|
||||
SELECT
|
||||
s.id, s.baseUrl, s.topic, s.instant, s.mutedUntil, s.minPriority, s.autoDelete, s.insistent, s.lastNotificationId, s.icon, s.upAppId, s.upConnectorToken, s.displayName, s.dedicatedChannels,
|
||||
s.id, s.baseUrl, s.topic, s.instant, s.mutedUntil, s.minPriority, s.autoDelete, s.lastNotificationId, s.icon, s.upAppId, s.upConnectorToken, s.displayName, s.encryptionKey,
|
||||
COUNT(n.id) totalCount,
|
||||
COUNT(CASE n.notificationId WHEN 0 THEN NULL ELSE n.id END) newCount,
|
||||
IFNULL(MAX(n.timestamp),0) AS lastActive
|
||||
|
@ -362,7 +308,7 @@ interface SubscriptionDao {
|
|||
|
||||
@Query("""
|
||||
SELECT
|
||||
s.id, s.baseUrl, s.topic, s.instant, s.mutedUntil, s.minPriority, s.autoDelete, s.insistent, s.lastNotificationId, s.icon, s.upAppId, s.upConnectorToken, s.displayName, s.dedicatedChannels,
|
||||
s.id, s.baseUrl, s.topic, s.instant, s.mutedUntil, s.minPriority, s.autoDelete, s.lastNotificationId, s.icon, s.upAppId, s.upConnectorToken, s.displayName, s.encryptionKey,
|
||||
COUNT(n.id) totalCount,
|
||||
COUNT(CASE n.notificationId WHEN 0 THEN NULL ELSE n.id END) newCount,
|
||||
IFNULL(MAX(n.timestamp),0) AS lastActive
|
||||
|
@ -375,7 +321,7 @@ interface SubscriptionDao {
|
|||
|
||||
@Query("""
|
||||
SELECT
|
||||
s.id, s.baseUrl, s.topic, s.instant, s.mutedUntil, s.minPriority, s.autoDelete, s.insistent, s.lastNotificationId, s.icon, s.upAppId, s.upConnectorToken, s.displayName, s.dedicatedChannels,
|
||||
s.id, s.baseUrl, s.topic, s.instant, s.mutedUntil, s.minPriority, s.autoDelete, s.lastNotificationId, s.icon, s.upAppId, s.upConnectorToken, s.displayName, s.encryptionKey,
|
||||
COUNT(n.id) totalCount,
|
||||
COUNT(CASE n.notificationId WHEN 0 THEN NULL ELSE n.id END) newCount,
|
||||
IFNULL(MAX(n.timestamp),0) AS lastActive
|
||||
|
@ -388,7 +334,7 @@ interface SubscriptionDao {
|
|||
|
||||
@Query("""
|
||||
SELECT
|
||||
s.id, s.baseUrl, s.topic, s.instant, s.mutedUntil, s.minPriority, s.autoDelete, s.insistent, s.lastNotificationId, s.icon, s.upAppId, s.upConnectorToken, s.displayName, s.dedicatedChannels,
|
||||
s.id, s.baseUrl, s.topic, s.instant, s.mutedUntil, s.minPriority, s.autoDelete, s.lastNotificationId, s.icon, s.upAppId, s.upConnectorToken, s.displayName, s.encryptionKey,
|
||||
COUNT(n.id) totalCount,
|
||||
COUNT(CASE n.notificationId WHEN 0 THEN NULL ELSE n.id END) newCount,
|
||||
IFNULL(MAX(n.timestamp),0) AS lastActive
|
||||
|
@ -426,12 +372,6 @@ interface NotificationDao {
|
|||
@Query("SELECT * FROM notification WHERE deleted = 1 AND attachment_contentUri <> ''")
|
||||
fun listDeletedWithAttachments(): List<Notification>
|
||||
|
||||
@Query("SELECT DISTINCT icon_contentUri FROM notification WHERE deleted != 1 AND icon_contentUri <> ''")
|
||||
fun listActiveIconUris(): List<String>
|
||||
|
||||
@Query("UPDATE notification SET icon_contentUri = null WHERE icon_contentUri = :uri")
|
||||
fun clearIconUri(uri: String)
|
||||
|
||||
@Insert(onConflict = OnConflictStrategy.IGNORE)
|
||||
fun add(notification: Notification)
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@ package io.heckel.ntfy.db
|
|||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.media.MediaPlayer
|
||||
import android.os.Build
|
||||
import androidx.annotation.WorkerThread
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
|
@ -19,10 +18,7 @@ class Repository(private val sharedPrefs: SharedPreferences, private val databas
|
|||
|
||||
private val connectionStates = ConcurrentHashMap<Long, ConnectionState>()
|
||||
private val connectionStatesLiveData = MutableLiveData(connectionStates)
|
||||
|
||||
// TODO Move these into an ApplicationState singleton
|
||||
val detailViewSubscriptionId = AtomicLong(0L) // Omg, what a hack ...
|
||||
val mediaPlayer = MediaPlayer()
|
||||
|
||||
init {
|
||||
Log.d(TAG, "Created $this")
|
||||
|
@ -96,14 +92,6 @@ class Repository(private val sharedPrefs: SharedPreferences, private val databas
|
|||
return notificationDao.listDeletedWithAttachments()
|
||||
}
|
||||
|
||||
fun getActiveIconUris(): Set<String> {
|
||||
return notificationDao.listActiveIconUris().toSet()
|
||||
}
|
||||
|
||||
fun clearIconUri(uri: String) {
|
||||
notificationDao.clearIconUri(uri)
|
||||
}
|
||||
|
||||
fun getNotificationsLiveData(subscriptionId: Long): LiveData<List<Notification>> {
|
||||
return notificationDao.listFlow(subscriptionId).asLiveData()
|
||||
}
|
||||
|
@ -292,26 +280,6 @@ class Repository(private val sharedPrefs: SharedPreferences, private val databas
|
|||
.apply()
|
||||
}
|
||||
|
||||
fun getUnifiedPushEnabled(): Boolean {
|
||||
return sharedPrefs.getBoolean(SHARED_PREFS_UNIFIEDPUSH_ENABLED, true) // Enabled by default
|
||||
}
|
||||
|
||||
fun setUnifiedPushEnabled(enabled: Boolean) {
|
||||
sharedPrefs.edit()
|
||||
.putBoolean(SHARED_PREFS_UNIFIEDPUSH_ENABLED, enabled)
|
||||
.apply()
|
||||
}
|
||||
|
||||
fun getInsistentMaxPriorityEnabled(): Boolean {
|
||||
return sharedPrefs.getBoolean(SHARED_PREFS_INSISTENT_MAX_PRIORITY_ENABLED, false) // Disabled by default
|
||||
}
|
||||
|
||||
fun setInsistentMaxPriorityEnabled(enabled: Boolean) {
|
||||
sharedPrefs.edit()
|
||||
.putBoolean(SHARED_PREFS_INSISTENT_MAX_PRIORITY_ENABLED, enabled)
|
||||
.apply()
|
||||
}
|
||||
|
||||
fun getRecordLogs(): Boolean {
|
||||
return sharedPrefs.getBoolean(SHARED_PREFS_RECORD_LOGS_ENABLED, false) // Disabled by default
|
||||
}
|
||||
|
@ -409,16 +377,15 @@ class Repository(private val sharedPrefs: SharedPreferences, private val databas
|
|||
baseUrl = s.baseUrl,
|
||||
topic = s.topic,
|
||||
instant = s.instant,
|
||||
dedicatedChannels = s.dedicatedChannels,
|
||||
mutedUntil = s.mutedUntil,
|
||||
minPriority = s.minPriority,
|
||||
autoDelete = s.autoDelete,
|
||||
insistent = s.insistent,
|
||||
lastNotificationId = s.lastNotificationId,
|
||||
icon = s.icon,
|
||||
upAppId = s.upAppId,
|
||||
upConnectorToken = s.upConnectorToken,
|
||||
displayName = s.displayName,
|
||||
encryptionKey = s.encryptionKey,
|
||||
totalCount = s.totalCount,
|
||||
newCount = s.newCount,
|
||||
lastActive = s.lastActive,
|
||||
|
@ -436,16 +403,15 @@ class Repository(private val sharedPrefs: SharedPreferences, private val databas
|
|||
baseUrl = s.baseUrl,
|
||||
topic = s.topic,
|
||||
instant = s.instant,
|
||||
dedicatedChannels = s.dedicatedChannels,
|
||||
mutedUntil = s.mutedUntil,
|
||||
minPriority = s.minPriority,
|
||||
autoDelete = s.autoDelete,
|
||||
insistent = s.insistent,
|
||||
lastNotificationId = s.lastNotificationId,
|
||||
icon = s.icon,
|
||||
upAppId = s.upAppId,
|
||||
upConnectorToken = s.upConnectorToken,
|
||||
displayName = s.displayName,
|
||||
encryptionKey = s.encryptionKey,
|
||||
totalCount = s.totalCount,
|
||||
newCount = s.newCount,
|
||||
lastActive = s.lastActive,
|
||||
|
@ -487,8 +453,6 @@ class Repository(private val sharedPrefs: SharedPreferences, private val databas
|
|||
const val SHARED_PREFS_CONNECTION_PROTOCOL = "ConnectionProtocol"
|
||||
const val SHARED_PREFS_DARK_MODE = "DarkMode"
|
||||
const val SHARED_PREFS_BROADCAST_ENABLED = "BroadcastEnabled"
|
||||
const val SHARED_PREFS_UNIFIEDPUSH_ENABLED = "UnifiedPushEnabled"
|
||||
const val SHARED_PREFS_INSISTENT_MAX_PRIORITY_ENABLED = "InsistentMaxPriority"
|
||||
const val SHARED_PREFS_RECORD_LOGS_ENABLED = "RecordLogs"
|
||||
const val SHARED_PREFS_BATTERY_OPTIMIZATIONS_REMIND_TIME = "BatteryOptimizationsRemindTime"
|
||||
const val SHARED_PREFS_WEBSOCKET_REMIND_TIME = "JsonStreamRemindTime" // "Use WebSocket" banner (used to be JSON stream deprecation banner)
|
||||
|
@ -520,9 +484,6 @@ class Repository(private val sharedPrefs: SharedPreferences, private val databas
|
|||
const val AUTO_DELETE_THREE_MONTHS_SECONDS = 90 * ONE_DAY_SECONDS
|
||||
const val AUTO_DELETE_DEFAULT_SECONDS = AUTO_DELETE_ONE_MONTH_SECONDS
|
||||
|
||||
const val INSISTENT_MAX_PRIORITY_USE_GLOBAL = -1 // Values must match values.xml
|
||||
const val INSISTENT_MAX_PRIORITY_ENABLED = 1 // 0 = Disabled (but not needed in code)
|
||||
|
||||
const val CONNECTION_PROTOCOL_JSONHTTP = "jsonhttp"
|
||||
const val CONNECTION_PROTOCOL_WS = "ws"
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ class ApiService {
|
|||
user: User? = null,
|
||||
message: String,
|
||||
title: String = "",
|
||||
priority: Int = PRIORITY_DEFAULT,
|
||||
priority: Int = 3,
|
||||
tags: List<String> = emptyList(),
|
||||
delay: String = "",
|
||||
body: RequestBody? = null,
|
||||
|
@ -45,7 +45,7 @@ class ApiService {
|
|||
) {
|
||||
val url = topicUrl(baseUrl, topic)
|
||||
val query = mutableListOf<String>()
|
||||
if (priority in ALL_PRIORITIES) {
|
||||
if (priority in 1..5) {
|
||||
query.add("priority=$priority")
|
||||
}
|
||||
if (tags.isNotEmpty()) {
|
||||
|
@ -95,7 +95,7 @@ class ApiService {
|
|||
throw Exception("Unexpected response ${response.code} when polling topic $url")
|
||||
}
|
||||
val body = response.body?.string()?.trim()
|
||||
if (body.isNullOrEmpty()) return emptyList()
|
||||
if (body == null || body.isEmpty()) return emptyList()
|
||||
val notifications = body.lines().mapNotNull { line ->
|
||||
parser.parse(line, subscriptionId = subscriptionId, notificationId = 0) // No notification when we poll
|
||||
}
|
||||
|
@ -108,7 +108,6 @@ class ApiService {
|
|||
fun subscribe(
|
||||
baseUrl: String,
|
||||
topics: String,
|
||||
unifiedPushTopics: String,
|
||||
since: String?,
|
||||
user: User?,
|
||||
notify: (topic: String, Notification) -> Unit,
|
||||
|
@ -117,7 +116,7 @@ class ApiService {
|
|||
val sinceVal = since ?: "all"
|
||||
val url = topicUrlJson(baseUrl, topics, sinceVal)
|
||||
Log.d(TAG, "Opening subscription connection to $url")
|
||||
val request = requestBuilder(url, user, unifiedPushTopics).build()
|
||||
val request = requestBuilder(url, user).build()
|
||||
val call = subscriberClient.newCall(request)
|
||||
call.enqueue(object : Callback {
|
||||
override fun onResponse(call: Call, response: Response) {
|
||||
|
@ -167,7 +166,7 @@ class ApiService {
|
|||
}
|
||||
|
||||
class UnauthorizedException(val user: User?) : Exception()
|
||||
class EntityTooLargeException : Exception()
|
||||
class EntityTooLargeException() : Exception()
|
||||
|
||||
companion object {
|
||||
val USER_AGENT = "ntfy/${BuildConfig.VERSION_NAME} (${BuildConfig.FLAVOR}; Android ${Build.VERSION.RELEASE}; SDK ${Build.VERSION.SDK_INT})"
|
||||
|
@ -179,16 +178,13 @@ class ApiService {
|
|||
const val EVENT_KEEPALIVE = "keepalive"
|
||||
const val EVENT_POLL_REQUEST = "poll_request"
|
||||
|
||||
fun requestBuilder(url: String, user: User?, unifiedPushTopics: String? = null): Request.Builder {
|
||||
fun requestBuilder(url: String, user: User?): Request.Builder {
|
||||
val builder = Request.Builder()
|
||||
.url(url)
|
||||
.addHeader("User-Agent", USER_AGENT)
|
||||
if (user != null) {
|
||||
builder.addHeader("Authorization", Credentials.basic(user.username, user.password, UTF_8))
|
||||
}
|
||||
if (unifiedPushTopics != null) {
|
||||
builder.addHeader("Rate-Topics", unifiedPushTopics)
|
||||
}
|
||||
return builder
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,168 +0,0 @@
|
|||
package io.heckel.ntfy.msg
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import androidx.core.content.FileProvider
|
||||
import androidx.work.Worker
|
||||
import androidx.work.WorkerParameters
|
||||
import io.heckel.ntfy.BuildConfig
|
||||
import io.heckel.ntfy.app.Application
|
||||
import io.heckel.ntfy.db.*
|
||||
import io.heckel.ntfy.util.Log
|
||||
import io.heckel.ntfy.util.sha256
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import java.io.File
|
||||
import java.util.Date
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class DownloadIconWorker(private val context: Context, params: WorkerParameters) : Worker(context, params) {
|
||||
private val client = OkHttpClient.Builder()
|
||||
.callTimeout(1, TimeUnit.MINUTES) // Total timeout for entire request
|
||||
.connectTimeout(15, TimeUnit.SECONDS)
|
||||
.readTimeout(15, TimeUnit.SECONDS)
|
||||
.writeTimeout(15, TimeUnit.SECONDS)
|
||||
.build()
|
||||
private val notifier = NotificationService(context)
|
||||
private lateinit var repository: Repository
|
||||
private lateinit var subscription: Subscription
|
||||
private lateinit var notification: Notification
|
||||
private lateinit var icon: Icon
|
||||
private var uri: Uri? = null
|
||||
|
||||
override fun doWork(): Result {
|
||||
if (context.applicationContext !is Application) return Result.failure()
|
||||
val notificationId = inputData.getString(INPUT_DATA_ID) ?: return Result.failure()
|
||||
val app = context.applicationContext as Application
|
||||
repository = app.repository
|
||||
notification = repository.getNotification(notificationId) ?: return Result.failure()
|
||||
subscription = repository.getSubscription(notification.subscriptionId) ?: return Result.failure()
|
||||
icon = notification.icon ?: return Result.failure()
|
||||
try {
|
||||
val iconFile = createIconFile(icon)
|
||||
val yesterdayTimestamp = Date().time - MAX_CACHE_MILLIS
|
||||
if (!iconFile.exists() || iconFile.lastModified() < yesterdayTimestamp) {
|
||||
downloadIcon(iconFile)
|
||||
} else {
|
||||
Log.d(TAG, "Loading icon from cache: $iconFile")
|
||||
val iconUri = createIconUri(iconFile)
|
||||
this.uri = iconUri // Required for cleanup in onStopped()
|
||||
save(icon.copy(contentUri = iconUri.toString()))
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
failed(e)
|
||||
}
|
||||
return Result.success()
|
||||
}
|
||||
|
||||
override fun onStopped() {
|
||||
Log.d(TAG, "Icon download was canceled")
|
||||
maybeDeleteFile()
|
||||
}
|
||||
|
||||
private fun downloadIcon(iconFile: File) {
|
||||
Log.d(TAG, "Downloading icon from ${icon.url}")
|
||||
try {
|
||||
val request = Request.Builder()
|
||||
.url(icon.url)
|
||||
.addHeader("User-Agent", ApiService.USER_AGENT)
|
||||
.build()
|
||||
client.newCall(request).execute().use { response ->
|
||||
Log.d(TAG, "Headers received: $response, Content-Length: ${response.headers["Content-Length"]}")
|
||||
if (!response.isSuccessful || response.body == null) {
|
||||
throw Exception("Unexpected response: ${response.code}")
|
||||
} else if (shouldAbortDownload(response)) {
|
||||
Log.d(TAG, "Aborting download: Content-Length is larger than auto-download setting")
|
||||
return
|
||||
}
|
||||
val resolver = applicationContext.contentResolver
|
||||
val uri = createIconUri(iconFile)
|
||||
this.uri = uri // Required for cleanup in onStopped()
|
||||
|
||||
Log.d(TAG, "Starting download to content URI: $uri")
|
||||
var bytesCopied: Long = 0
|
||||
val outFile = resolver.openOutputStream(uri) ?: throw Exception("Cannot open output stream")
|
||||
val downloadLimit = getDownloadLimit()
|
||||
outFile.use { fileOut ->
|
||||
val fileIn = response.body!!.byteStream()
|
||||
val buffer = ByteArray(BUFFER_SIZE)
|
||||
var bytes = fileIn.read(buffer)
|
||||
while (bytes >= 0) {
|
||||
if (bytesCopied > downloadLimit) {
|
||||
throw Exception("Icon is longer than max download size.")
|
||||
}
|
||||
fileOut.write(buffer, 0, bytes)
|
||||
bytesCopied += bytes
|
||||
bytes = fileIn.read(buffer)
|
||||
}
|
||||
}
|
||||
Log.d(TAG, "Icon download: successful response, proceeding with download")
|
||||
save(icon.copy(contentUri = uri.toString()))
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
failed(e)
|
||||
}
|
||||
}
|
||||
|
||||
private fun failed(e: Exception) {
|
||||
Log.w(TAG, "Icon download failed", e)
|
||||
maybeDeleteFile()
|
||||
}
|
||||
|
||||
private fun maybeDeleteFile() {
|
||||
val uriCopy = uri
|
||||
if (uriCopy != null) {
|
||||
Log.d(TAG, "Deleting leftover icon $uriCopy")
|
||||
val resolver = applicationContext.contentResolver
|
||||
resolver.delete(uriCopy, null, null)
|
||||
}
|
||||
}
|
||||
|
||||
private fun save(newIcon: Icon) {
|
||||
Log.d(TAG, "Updating icon: $newIcon")
|
||||
icon = newIcon
|
||||
notification = notification.copy(icon = newIcon)
|
||||
notifier.update(subscription, notification)
|
||||
repository.updateNotification(notification)
|
||||
}
|
||||
|
||||
private fun shouldAbortDownload(response: Response): Boolean {
|
||||
val maxAutoDownloadSize = getDownloadLimit()
|
||||
val size = response.headers["Content-Length"]?.toLongOrNull() ?: return false // Don't abort here if size unknown
|
||||
return size > maxAutoDownloadSize
|
||||
}
|
||||
|
||||
private fun getDownloadLimit(): Long {
|
||||
return if (repository.getAutoDownloadMaxSize() != Repository.AUTO_DOWNLOAD_NEVER && repository.getAutoDownloadMaxSize() != Repository.AUTO_DOWNLOAD_ALWAYS) {
|
||||
Math.min(repository.getAutoDownloadMaxSize(), MAX_ICON_DOWNLOAD_BYTES)
|
||||
} else {
|
||||
DEFAULT_MAX_ICON_DOWNLOAD_BYTES
|
||||
}
|
||||
}
|
||||
|
||||
private fun createIconFile(icon: Icon): File {
|
||||
val iconDir = File(context.cacheDir, ICON_CACHE_DIR)
|
||||
if (!iconDir.exists() && !iconDir.mkdirs()) {
|
||||
throw Exception("Cannot create cache directory for icons: $iconDir")
|
||||
}
|
||||
val hash = icon.url.sha256()
|
||||
return File(iconDir, hash)
|
||||
}
|
||||
|
||||
private fun createIconUri(iconFile: File): Uri {
|
||||
return FileProvider.getUriForFile(context, FILE_PROVIDER_AUTHORITY, iconFile)
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val INPUT_DATA_ID = "id"
|
||||
const val FILE_PROVIDER_AUTHORITY = BuildConfig.APPLICATION_ID + ".provider" // See AndroidManifest.xml
|
||||
const val DEFAULT_MAX_ICON_DOWNLOAD_BYTES = 307_200L // 300 KB
|
||||
const val MAX_ICON_DOWNLOAD_BYTES = 5_242_880L // 5 MB
|
||||
const val MAX_CACHE_MILLIS = 1000*60*60*24 // 24 hours
|
||||
const val ICON_CACHE_DIR = "icons"
|
||||
|
||||
private const val TAG = "NtfyIconDownload"
|
||||
private const val BUFFER_SIZE = 8 * 1024
|
||||
}
|
||||
}
|
|
@ -11,77 +11,29 @@ import io.heckel.ntfy.util.Log
|
|||
* Download attachment in the background via WorkManager
|
||||
*
|
||||
* The indirection via WorkManager is required since this code may be executed
|
||||
* in a doze state and Internet may not be available. It's also best practice, apparently.
|
||||
* in a doze state and Internet may not be available. It's also best practice apparently.
|
||||
*/
|
||||
object DownloadManager {
|
||||
private const val TAG = "NtfyDownloadManager"
|
||||
private const val DOWNLOAD_WORK_ATTACHMENT_NAME_PREFIX = "io.heckel.ntfy.DOWNLOAD_FILE_"
|
||||
private const val DOWNLOAD_WORK_ICON_NAME_PREFIX = "io.heckel.ntfy.DOWNLOAD_ICON_"
|
||||
private const val DOWNLOAD_WORK_BOTH_NAME_PREFIX = "io.heckel.ntfy.DOWNLOAD_BOTH_"
|
||||
private const val DOWNLOAD_WORK_NAME_PREFIX = "io.heckel.ntfy.DOWNLOAD_FILE_"
|
||||
|
||||
fun enqueue(context: Context, notificationId: String, userAction: Boolean, type: DownloadType) {
|
||||
when (type) {
|
||||
DownloadType.ATTACHMENT -> enqueueAttachment(context, notificationId, userAction)
|
||||
DownloadType.ICON -> enqueueIcon(context, notificationId)
|
||||
DownloadType.BOTH -> enqueueAttachmentAndIcon(context, notificationId, userAction)
|
||||
}
|
||||
}
|
||||
|
||||
private fun enqueueAttachment(context: Context, notificationId: String, userAction: Boolean) {
|
||||
fun enqueue(context: Context, notificationId: String, userAction: Boolean) {
|
||||
val workManager = WorkManager.getInstance(context)
|
||||
val workName = DOWNLOAD_WORK_ATTACHMENT_NAME_PREFIX + notificationId
|
||||
val workName = DOWNLOAD_WORK_NAME_PREFIX + notificationId
|
||||
Log.d(TAG,"Enqueuing work to download attachment for notification $notificationId, work: $workName")
|
||||
val workRequest = OneTimeWorkRequest.Builder(DownloadAttachmentWorker::class.java)
|
||||
val workRequest = OneTimeWorkRequest.Builder(DownloadWorker::class.java)
|
||||
.setInputData(workDataOf(
|
||||
DownloadAttachmentWorker.INPUT_DATA_ID to notificationId,
|
||||
DownloadAttachmentWorker.INPUT_DATA_USER_ACTION to userAction
|
||||
DownloadWorker.INPUT_DATA_ID to notificationId,
|
||||
DownloadWorker.INPUT_DATA_USER_ACTION to userAction
|
||||
))
|
||||
.build()
|
||||
workManager.enqueueUniqueWork(workName, ExistingWorkPolicy.KEEP, workRequest)
|
||||
}
|
||||
|
||||
private fun enqueueIcon(context: Context, notificationId: String) {
|
||||
val workManager = WorkManager.getInstance(context)
|
||||
val workName = DOWNLOAD_WORK_ICON_NAME_PREFIX + notificationId
|
||||
Log.d(TAG,"Enqueuing work to download icon for notification $notificationId, work: $workName")
|
||||
val workRequest = OneTimeWorkRequest.Builder(DownloadIconWorker::class.java)
|
||||
.setInputData(workDataOf(
|
||||
DownloadAttachmentWorker.INPUT_DATA_ID to notificationId
|
||||
))
|
||||
.build()
|
||||
workManager.enqueueUniqueWork(workName, ExistingWorkPolicy.KEEP, workRequest)
|
||||
}
|
||||
|
||||
private fun enqueueAttachmentAndIcon(context: Context, notificationId: String, userAction: Boolean) {
|
||||
val workManager = WorkManager.getInstance(context)
|
||||
val workName = DOWNLOAD_WORK_BOTH_NAME_PREFIX + notificationId
|
||||
val attachmentWorkRequest = OneTimeWorkRequest.Builder(DownloadAttachmentWorker::class.java)
|
||||
.setInputData(workDataOf(
|
||||
DownloadAttachmentWorker.INPUT_DATA_ID to notificationId,
|
||||
DownloadAttachmentWorker.INPUT_DATA_USER_ACTION to userAction
|
||||
))
|
||||
.build()
|
||||
val iconWorkRequest = OneTimeWorkRequest.Builder(DownloadIconWorker::class.java)
|
||||
.setInputData(workDataOf(
|
||||
DownloadAttachmentWorker.INPUT_DATA_ID to notificationId
|
||||
))
|
||||
.build()
|
||||
Log.d(TAG,"Enqueuing work to download both attachment and icon for notification $notificationId, work: $workName")
|
||||
workManager.beginUniqueWork(workName, ExistingWorkPolicy.KEEP, attachmentWorkRequest)
|
||||
.then(iconWorkRequest)
|
||||
.enqueue()
|
||||
}
|
||||
|
||||
fun cancel(context: Context, id: String) {
|
||||
val workManager = WorkManager.getInstance(context)
|
||||
val workName = DOWNLOAD_WORK_ATTACHMENT_NAME_PREFIX + id
|
||||
Log.d(TAG, "Cancelling attachment download for notification $id, work: $workName")
|
||||
val workName = DOWNLOAD_WORK_NAME_PREFIX + id
|
||||
Log.d(TAG, "Cancelling download for notification $id, work: $workName")
|
||||
workManager.cancelUniqueWork(workName)
|
||||
}
|
||||
}
|
||||
|
||||
enum class DownloadType {
|
||||
ATTACHMENT,
|
||||
ICON,
|
||||
BOTH
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@ import okhttp3.Response
|
|||
import java.io.File
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class DownloadAttachmentWorker(private val context: Context, params: WorkerParameters) : Worker(context, params) {
|
||||
class DownloadWorker(private val context: Context, params: WorkerParameters) : Worker(context, params) {
|
||||
private val client = OkHttpClient.Builder()
|
||||
.callTimeout(15, TimeUnit.MINUTES) // Total timeout for entire request
|
||||
.connectTimeout(15, TimeUnit.SECONDS)
|
||||
|
@ -80,9 +80,9 @@ class DownloadAttachmentWorker(private val context: Context, params: WorkerParam
|
|||
this.uri = uri // Required for cleanup in onStopped()
|
||||
|
||||
Log.d(TAG, "Starting download to content URI: $uri")
|
||||
val contentLength = response.headers["Content-Length"]?.toLongOrNull()
|
||||
var bytesCopied: Long = 0
|
||||
val outFile = resolver.openOutputStream(uri) ?: throw Exception("Cannot open output stream")
|
||||
val downloadLimit = getDownloadLimit(userAction)
|
||||
outFile.use { fileOut ->
|
||||
val fileIn = response.body!!.byteStream()
|
||||
val buffer = ByteArray(BUFFER_SIZE)
|
||||
|
@ -102,8 +102,8 @@ class DownloadAttachmentWorker(private val context: Context, params: WorkerParam
|
|||
save(attachment.copy(progress = progress))
|
||||
lastProgress = System.currentTimeMillis()
|
||||
}
|
||||
if (downloadLimit != null && bytesCopied > downloadLimit) {
|
||||
throw Exception("Attachment is longer than max download size.")
|
||||
if (contentLength != null && bytesCopied > contentLength) {
|
||||
throw Exception("Attachment is longer than response headers said.")
|
||||
}
|
||||
fileOut.write(buffer, 0, bytes)
|
||||
bytesCopied += bytes
|
||||
|
@ -182,20 +182,12 @@ class DownloadAttachmentWorker(private val context: Context, params: WorkerParam
|
|||
Repository.AUTO_DOWNLOAD_NEVER -> return true
|
||||
Repository.AUTO_DOWNLOAD_ALWAYS -> return false
|
||||
else -> {
|
||||
val size = attachment.size ?: return false // Don't abort if size unknown
|
||||
val size = attachment.size ?: return true // Abort if size unknown
|
||||
return size > maxAutoDownloadSize
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getDownloadLimit(userAction: Boolean): Long? {
|
||||
return if (userAction || repository.getAutoDownloadMaxSize() == Repository.AUTO_DOWNLOAD_ALWAYS) {
|
||||
null
|
||||
} else {
|
||||
repository.getAutoDownloadMaxSize()
|
||||
}
|
||||
}
|
||||
|
||||
private fun createUri(notification: Notification): Uri {
|
||||
val attachmentDir = File(context.cacheDir, ATTACHMENT_CACHE_DIR)
|
||||
if (!attachmentDir.exists() && !attachmentDir.mkdirs()) {
|
|
@ -13,7 +13,6 @@ data class Message(
|
|||
val priority: Int?,
|
||||
val tags: List<String>?,
|
||||
val click: String?,
|
||||
val icon: String?,
|
||||
val actions: List<MessageAction>?,
|
||||
val title: String?,
|
||||
val message: String,
|
||||
|
|
|
@ -19,7 +19,7 @@ class NotificationDispatcher(val context: Context, val repository: Repository) {
|
|||
private val distributor = Distributor(context)
|
||||
|
||||
fun init() {
|
||||
notifier.createDefaultNotificationChannels()
|
||||
notifier.createNotificationChannels()
|
||||
}
|
||||
|
||||
fun dispatch(subscription: Subscription, notification: Notification) {
|
||||
|
@ -29,8 +29,7 @@ class NotificationDispatcher(val context: Context, val repository: Repository) {
|
|||
val notify = shouldNotify(subscription, notification, muted)
|
||||
val broadcast = shouldBroadcast(subscription)
|
||||
val distribute = shouldDistribute(subscription)
|
||||
val downloadAttachment = shouldDownloadAttachment(notification)
|
||||
val downloadIcon = shouldDownloadIcon(notification)
|
||||
val download = shouldDownload(notification)
|
||||
if (notify) {
|
||||
notifier.display(subscription, notification)
|
||||
}
|
||||
|
@ -42,16 +41,12 @@ class NotificationDispatcher(val context: Context, val repository: Repository) {
|
|||
distributor.sendMessage(appId, connectorToken, decodeBytesMessage(notification))
|
||||
}
|
||||
}
|
||||
if (downloadAttachment && downloadIcon) {
|
||||
DownloadManager.enqueue(context, notification.id, userAction = false, type = DownloadType.BOTH)
|
||||
} else if (downloadAttachment) {
|
||||
DownloadManager.enqueue(context, notification.id, userAction = false, type = DownloadType.ATTACHMENT)
|
||||
} else if (downloadIcon) {
|
||||
DownloadManager.enqueue(context, notification.id, userAction = false, type = DownloadType.ICON)
|
||||
if (download) {
|
||||
DownloadManager.enqueue(context, notification.id, userAction = false)
|
||||
}
|
||||
}
|
||||
|
||||
private fun shouldDownloadAttachment(notification: Notification): Boolean {
|
||||
private fun shouldDownload(notification: Notification): Boolean {
|
||||
if (notification.attachment == null) {
|
||||
return false
|
||||
}
|
||||
|
@ -60,7 +55,8 @@ class NotificationDispatcher(val context: Context, val repository: Repository) {
|
|||
Log.d(TAG, "Attachment already expired at ${attachment.expires}, not downloading")
|
||||
return false
|
||||
}
|
||||
when (val maxAutoDownloadSize = repository.getAutoDownloadMaxSize()) {
|
||||
val maxAutoDownloadSize = repository.getAutoDownloadMaxSize()
|
||||
when (maxAutoDownloadSize) {
|
||||
Repository.AUTO_DOWNLOAD_ALWAYS -> return true
|
||||
Repository.AUTO_DOWNLOAD_NEVER -> return false
|
||||
else -> {
|
||||
|
@ -71,9 +67,6 @@ class NotificationDispatcher(val context: Context, val repository: Repository) {
|
|||
}
|
||||
}
|
||||
}
|
||||
private fun shouldDownloadIcon(notification: Notification): Boolean {
|
||||
return notification.icon != null
|
||||
}
|
||||
|
||||
private fun shouldNotify(subscription: Subscription, notification: Notification, muted: Boolean): Boolean {
|
||||
if (subscription.upAppId != null) {
|
||||
|
|
|
@ -4,7 +4,6 @@ import com.google.gson.Gson
|
|||
import com.google.gson.reflect.TypeToken
|
||||
import io.heckel.ntfy.db.Action
|
||||
import io.heckel.ntfy.db.Attachment
|
||||
import io.heckel.ntfy.db.Icon
|
||||
import io.heckel.ntfy.db.Notification
|
||||
import io.heckel.ntfy.util.joinTags
|
||||
import io.heckel.ntfy.util.toPriority
|
||||
|
@ -50,7 +49,6 @@ class NotificationParser {
|
|||
)
|
||||
}
|
||||
} else null
|
||||
val icon: Icon? = if (message.icon != null && message.icon != "") Icon(url = message.icon) else null
|
||||
val notification = Notification(
|
||||
id = message.id,
|
||||
subscriptionId = subscriptionId,
|
||||
|
@ -61,7 +59,6 @@ class NotificationParser {
|
|||
priority = toPriority(message.priority),
|
||||
tags = joinTags(message.tags),
|
||||
click = message.click ?: "",
|
||||
icon = icon,
|
||||
actions = actions,
|
||||
attachment = attachment,
|
||||
notificationId = notificationId,
|
||||
|
|
|
@ -5,8 +5,6 @@ import android.content.ActivityNotFoundException
|
|||
import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.media.AudioAttributes
|
||||
import android.media.AudioManager
|
||||
import android.media.RingtoneManager
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
|
@ -23,9 +21,9 @@ import io.heckel.ntfy.ui.MainActivity
|
|||
import io.heckel.ntfy.util.*
|
||||
import java.util.*
|
||||
|
||||
|
||||
class NotificationService(val context: Context) {
|
||||
private val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
||||
private val repository = Repository.getInstance(context)
|
||||
|
||||
fun display(subscription: Subscription, notification: Notification) {
|
||||
Log.d(TAG, "Displaying notification $notification")
|
||||
|
@ -53,56 +51,27 @@ class NotificationService(val context: Context) {
|
|||
|
||||
fun cancel(notificationId: Int) {
|
||||
if (notificationId != 0) {
|
||||
Log.d(TAG, "Cancelling notification $notificationId")
|
||||
Log.d(TAG, "Cancelling notification ${notificationId}")
|
||||
notificationManager.cancel(notificationId)
|
||||
}
|
||||
}
|
||||
|
||||
fun createDefaultNotificationChannels() {
|
||||
maybeCreateNotificationGroup(DEFAULT_GROUP, context.getString(R.string.channel_notifications_group_default_name))
|
||||
ALL_PRIORITIES.forEach { priority -> maybeCreateNotificationChannel(DEFAULT_GROUP, priority) }
|
||||
}
|
||||
|
||||
fun createSubscriptionNotificationChannels(subscription: Subscription) {
|
||||
val groupId = subscriptionGroupId(subscription)
|
||||
maybeCreateNotificationGroup(groupId, subscriptionGroupName(subscription))
|
||||
ALL_PRIORITIES.forEach { priority -> maybeCreateNotificationChannel(groupId, priority) }
|
||||
}
|
||||
|
||||
fun deleteSubscriptionNotificationChannels(subscription: Subscription) {
|
||||
val groupId = subscriptionGroupId(subscription)
|
||||
ALL_PRIORITIES.forEach { priority -> maybeDeleteNotificationChannel(groupId, priority) }
|
||||
maybeDeleteNotificationGroup(groupId)
|
||||
}
|
||||
|
||||
fun channelsSupported(): Boolean {
|
||||
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
|
||||
}
|
||||
|
||||
private fun subscriptionGroupId(subscription: Subscription): String {
|
||||
return SUBSCRIPTION_GROUP_PREFIX + subscription.id.toString()
|
||||
}
|
||||
|
||||
private fun subscriptionGroupName(subscription: Subscription): String {
|
||||
return subscription.displayName ?: subscriptionTopicShortUrl(subscription)
|
||||
fun createNotificationChannels() {
|
||||
(1..5).forEach { priority -> maybeCreateNotificationChannel(priority) }
|
||||
}
|
||||
|
||||
private fun displayInternal(subscription: Subscription, notification: Notification, update: Boolean = false) {
|
||||
val title = formatTitle(subscription, notification)
|
||||
val groupId = if (subscription.dedicatedChannels) subscriptionGroupId(subscription) else DEFAULT_GROUP
|
||||
val channelId = toChannelId(groupId, notification.priority)
|
||||
val insistent = notification.priority == PRIORITY_MAX &&
|
||||
(repository.getInsistentMaxPriorityEnabled() || subscription.insistent == Repository.INSISTENT_MAX_PRIORITY_ENABLED)
|
||||
val channelId = toChannelId(notification.priority)
|
||||
val builder = NotificationCompat.Builder(context, channelId)
|
||||
.setSmallIcon(R.drawable.ic_notification)
|
||||
.setColor(ContextCompat.getColor(context, Colors.notificationIcon(context)))
|
||||
.setColor(ContextCompat.getColor(context, Colors.notificationIcon))
|
||||
.setContentTitle(title)
|
||||
.setOnlyAlertOnce(true) // Do not vibrate or play sound if already showing (updates!)
|
||||
.setAutoCancel(true) // Cancel when notification is clicked
|
||||
setStyleAndText(builder, subscription, notification) // Preview picture or big text style
|
||||
setClickAction(builder, subscription, notification)
|
||||
maybeSetDeleteIntent(builder, insistent)
|
||||
maybeSetSound(builder, insistent, update)
|
||||
maybeSetSound(builder, update)
|
||||
maybeSetProgress(builder, notification)
|
||||
maybeAddOpenAction(builder, notification)
|
||||
maybeAddBrowseAction(builder, notification)
|
||||
|
@ -110,26 +79,12 @@ class NotificationService(val context: Context) {
|
|||
maybeAddCancelAction(builder, notification)
|
||||
maybeAddUserActions(builder, notification)
|
||||
|
||||
maybeCreateNotificationGroup(groupId, subscriptionGroupName(subscription))
|
||||
maybeCreateNotificationChannel(groupId, notification.priority)
|
||||
maybePlayInsistentSound(groupId, insistent)
|
||||
|
||||
maybeCreateNotificationChannel(notification.priority)
|
||||
notificationManager.notify(notification.notificationId, builder.build())
|
||||
}
|
||||
|
||||
private fun maybeSetDeleteIntent(builder: NotificationCompat.Builder, insistent: Boolean) {
|
||||
if (!insistent) {
|
||||
return
|
||||
}
|
||||
val intent = Intent(context, DeleteBroadcastReceiver::class.java)
|
||||
val pendingIntent = PendingIntent.getBroadcast(context, Random().nextInt(), intent, PendingIntent.FLAG_IMMUTABLE)
|
||||
builder.setDeleteIntent(pendingIntent)
|
||||
}
|
||||
|
||||
private fun maybeSetSound(builder: NotificationCompat.Builder, insistent: Boolean, update: Boolean) {
|
||||
// Note that the sound setting is ignored in Android => O (26) in favor of notification channels
|
||||
val hasSound = !update && !insistent
|
||||
if (hasSound) {
|
||||
private fun maybeSetSound(builder: NotificationCompat.Builder, update: Boolean) {
|
||||
if (!update) {
|
||||
val defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
|
||||
builder.setSound(defaultSoundUri)
|
||||
} else {
|
||||
|
@ -141,8 +96,6 @@ class NotificationService(val context: Context) {
|
|||
val contentUri = notification.attachment?.contentUri
|
||||
val isSupportedImage = supportedImage(notification.attachment?.type)
|
||||
val subscriptionIcon = if (subscription.icon != null) subscription.icon.readBitmapFromUriOrNull(context) else null
|
||||
val notificationIcon = if (notification.icon != null) notification.icon.contentUri?.readBitmapFromUriOrNull(context) else null
|
||||
val largeIcon = notificationIcon ?: subscriptionIcon
|
||||
if (contentUri != null && isSupportedImage) {
|
||||
try {
|
||||
val attachmentBitmap = contentUri.readBitmapFromUri(context)
|
||||
|
@ -151,7 +104,7 @@ class NotificationService(val context: Context) {
|
|||
.setLargeIcon(attachmentBitmap)
|
||||
.setStyle(NotificationCompat.BigPictureStyle()
|
||||
.bigPicture(attachmentBitmap)
|
||||
.bigLargeIcon(largeIcon)) // May be null
|
||||
.bigLargeIcon(subscriptionIcon)) // May be null
|
||||
} catch (_: Exception) {
|
||||
val message = maybeAppendActionErrors(formatMessageMaybeWithAttachmentInfos(notification), notification)
|
||||
builder
|
||||
|
@ -163,7 +116,7 @@ class NotificationService(val context: Context) {
|
|||
builder
|
||||
.setContentText(message)
|
||||
.setStyle(NotificationCompat.BigTextStyle().bigText(message))
|
||||
.setLargeIcon(largeIcon) // May be null
|
||||
.setLargeIcon(subscriptionIcon) // May be null
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -211,9 +164,6 @@ class NotificationService(val context: Context) {
|
|||
}
|
||||
|
||||
private fun maybeAddOpenAction(builder: NotificationCompat.Builder, notification: Notification) {
|
||||
if (!canOpenAttachment(notification.attachment)) {
|
||||
return
|
||||
}
|
||||
if (notification.attachment?.contentUri != null) {
|
||||
val contentUri = Uri.parse(notification.attachment.contentUri)
|
||||
val intent = Intent(Intent.ACTION_VIEW, contentUri).apply {
|
||||
|
@ -325,7 +275,7 @@ class NotificationService(val context: Context) {
|
|||
|
||||
/**
|
||||
* Receives the broadcast from
|
||||
* - the "http" and "broadcast" action button (the "view" action is handled differently)
|
||||
* - the "http" and "broadcast" action button (the "view" actio is handled differently)
|
||||
* - the "download"/"cancel" action button
|
||||
*
|
||||
* Then queues a Worker via WorkManager to execute the action in the background
|
||||
|
@ -335,7 +285,7 @@ class NotificationService(val context: Context) {
|
|||
val type = intent.getStringExtra(BROADCAST_EXTRA_TYPE) ?: return
|
||||
val notificationId = intent.getStringExtra(BROADCAST_EXTRA_NOTIFICATION_ID) ?: return
|
||||
when (type) {
|
||||
BROADCAST_TYPE_DOWNLOAD_START -> DownloadManager.enqueue(context, notificationId, userAction = true, DownloadType.ATTACHMENT)
|
||||
BROADCAST_TYPE_DOWNLOAD_START -> DownloadManager.enqueue(context, notificationId, userAction = true)
|
||||
BROADCAST_TYPE_DOWNLOAD_CANCEL -> DownloadManager.cancel(context, notificationId)
|
||||
BROADCAST_TYPE_USER_ACTION -> {
|
||||
val actionId = intent.getStringExtra(BROADCAST_EXTRA_ACTION_ID) ?: return
|
||||
|
@ -345,18 +295,6 @@ class NotificationService(val context: Context) {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Receives a broadcast when a notification is swiped away. This is currently
|
||||
* only called for notifications with an insistent sound.
|
||||
*/
|
||||
class DeleteBroadcastReceiver : BroadcastReceiver() {
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
Log.d(TAG, "Media player: Stopping insistent ring")
|
||||
val mediaPlayer = Repository.getInstance(context).mediaPlayer
|
||||
mediaPlayer.stop()
|
||||
}
|
||||
}
|
||||
|
||||
private fun detailActivityIntent(subscription: Subscription): PendingIntent? {
|
||||
val intent = Intent(context, DetailActivity::class.java).apply {
|
||||
putExtra(MainActivity.EXTRA_SUBSCRIPTION_ID, subscription.id)
|
||||
|
@ -368,21 +306,20 @@ class NotificationService(val context: Context) {
|
|||
}
|
||||
return TaskStackBuilder.create(context).run {
|
||||
addNextIntentWithParentStack(intent) // Add the intent, which inflates the back stack
|
||||
getPendingIntent(Random().nextInt(), PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) // Get the PendingIntent containing the entire back stack
|
||||
getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) // Get the PendingIntent containing the entire back stack
|
||||
}
|
||||
}
|
||||
|
||||
private fun maybeCreateNotificationChannel(group: String, priority: Int) {
|
||||
if (channelsSupported()) {
|
||||
private fun maybeCreateNotificationChannel(priority: Int) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
// Note: To change a notification channel, you must delete the old one and create a new one!
|
||||
|
||||
val channelId = toChannelId(group, priority)
|
||||
val pause = 300L
|
||||
val channel = when (priority) {
|
||||
PRIORITY_MIN -> NotificationChannel(channelId, context.getString(R.string.channel_notifications_min_name), NotificationManager.IMPORTANCE_MIN)
|
||||
PRIORITY_LOW -> NotificationChannel(channelId, context.getString(R.string.channel_notifications_low_name), NotificationManager.IMPORTANCE_LOW)
|
||||
PRIORITY_HIGH -> {
|
||||
val channel = NotificationChannel(channelId, context.getString(R.string.channel_notifications_high_name), NotificationManager.IMPORTANCE_HIGH)
|
||||
1 -> NotificationChannel(CHANNEL_ID_MIN, context.getString(R.string.channel_notifications_min_name), NotificationManager.IMPORTANCE_MIN)
|
||||
2 -> NotificationChannel(CHANNEL_ID_LOW, context.getString(R.string.channel_notifications_low_name), NotificationManager.IMPORTANCE_LOW)
|
||||
4 -> {
|
||||
val channel = NotificationChannel(CHANNEL_ID_HIGH, context.getString(R.string.channel_notifications_high_name), NotificationManager.IMPORTANCE_HIGH)
|
||||
channel.enableVibration(true)
|
||||
channel.vibrationPattern = longArrayOf(
|
||||
pause, 100, pause, 100, pause, 100,
|
||||
|
@ -390,11 +327,10 @@ class NotificationService(val context: Context) {
|
|||
)
|
||||
channel
|
||||
}
|
||||
PRIORITY_MAX -> {
|
||||
val channel = NotificationChannel(channelId, context.getString(R.string.channel_notifications_max_name), NotificationManager.IMPORTANCE_HIGH) // IMPORTANCE_MAX does not exist
|
||||
5 -> {
|
||||
val channel = NotificationChannel(CHANNEL_ID_MAX, context.getString(R.string.channel_notifications_max_name), NotificationManager.IMPORTANCE_HIGH) // IMPORTANCE_MAX does not exist
|
||||
channel.enableLights(true)
|
||||
channel.enableVibration(true)
|
||||
channel.setBypassDnd(true)
|
||||
channel.vibrationPattern = longArrayOf(
|
||||
pause, 100, pause, 100, pause, 100,
|
||||
pause, 2000,
|
||||
|
@ -405,71 +341,19 @@ class NotificationService(val context: Context) {
|
|||
)
|
||||
channel
|
||||
}
|
||||
else -> NotificationChannel(channelId, context.getString(R.string.channel_notifications_default_name), NotificationManager.IMPORTANCE_DEFAULT)
|
||||
else -> NotificationChannel(CHANNEL_ID_DEFAULT, context.getString(R.string.channel_notifications_default_name), NotificationManager.IMPORTANCE_DEFAULT)
|
||||
}
|
||||
channel.group = group
|
||||
notificationManager.createNotificationChannel(channel)
|
||||
}
|
||||
}
|
||||
|
||||
private fun maybeDeleteNotificationChannel(group: String, priority: Int) {
|
||||
if (channelsSupported()) {
|
||||
notificationManager.deleteNotificationChannel(toChannelId(group, priority))
|
||||
}
|
||||
}
|
||||
|
||||
private fun maybeCreateNotificationGroup(id: String, name: String) {
|
||||
if (channelsSupported()) {
|
||||
notificationManager.createNotificationChannelGroup(NotificationChannelGroup(id, name))
|
||||
}
|
||||
}
|
||||
|
||||
private fun maybeDeleteNotificationGroup(id: String) {
|
||||
if (channelsSupported()) {
|
||||
notificationManager.deleteNotificationChannelGroup(id)
|
||||
}
|
||||
}
|
||||
|
||||
private fun toChannelId(groupId: String, priority: Int): String {
|
||||
private fun toChannelId(priority: Int): String {
|
||||
return when (priority) {
|
||||
PRIORITY_MIN -> groupId + GROUP_SUFFIX_PRIORITY_MIN
|
||||
PRIORITY_LOW -> groupId + GROUP_SUFFIX_PRIORITY_LOW
|
||||
PRIORITY_HIGH -> groupId + GROUP_SUFFIX_PRIORITY_HIGH
|
||||
PRIORITY_MAX -> groupId + GROUP_SUFFIX_PRIORITY_MAX
|
||||
else -> groupId + GROUP_SUFFIX_PRIORITY_DEFAULT
|
||||
}
|
||||
}
|
||||
|
||||
private fun maybePlayInsistentSound(groupId: String, insistent: Boolean) {
|
||||
if (!insistent) {
|
||||
return
|
||||
}
|
||||
try {
|
||||
val mediaPlayer = repository.mediaPlayer
|
||||
val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
|
||||
if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
|
||||
Log.d(TAG, "Media player: Playing insistent alarm on alarm channel")
|
||||
mediaPlayer.reset()
|
||||
mediaPlayer.setDataSource(context, getInsistentSound(groupId))
|
||||
mediaPlayer.setAudioAttributes(AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_ALARM).build())
|
||||
mediaPlayer.isLooping = true
|
||||
mediaPlayer.prepare()
|
||||
mediaPlayer.start()
|
||||
} else {
|
||||
Log.d(TAG, "Media player: Alarm volume is 0; not playing insistent alarm")
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.w(TAG, "Media player: Failed to play insistent alarm", e)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getInsistentSound(groupId: String): Uri {
|
||||
return if (channelsSupported()) {
|
||||
val channelId = toChannelId(groupId, PRIORITY_MAX)
|
||||
val channel = notificationManager.getNotificationChannel(channelId)
|
||||
channel.sound
|
||||
} else {
|
||||
RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
|
||||
1 -> CHANNEL_ID_MIN
|
||||
2 -> CHANNEL_ID_LOW
|
||||
4 -> CHANNEL_ID_HIGH
|
||||
5 -> CHANNEL_ID_MAX
|
||||
else -> CHANNEL_ID_DEFAULT
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -529,13 +413,11 @@ class NotificationService(val context: Context) {
|
|||
|
||||
private const val TAG = "NtfyNotifService"
|
||||
|
||||
private const val DEFAULT_GROUP = "ntfy"
|
||||
private const val SUBSCRIPTION_GROUP_PREFIX = "ntfy-subscription-"
|
||||
private const val GROUP_SUFFIX_PRIORITY_MIN = "-min"
|
||||
private const val GROUP_SUFFIX_PRIORITY_LOW = "-low"
|
||||
private const val GROUP_SUFFIX_PRIORITY_DEFAULT = ""
|
||||
private const val GROUP_SUFFIX_PRIORITY_HIGH = "-high"
|
||||
private const val GROUP_SUFFIX_PRIORITY_MAX = "-max"
|
||||
private const val CHANNEL_ID_MIN = "ntfy-min"
|
||||
private const val CHANNEL_ID_LOW = "ntfy-low"
|
||||
private const val CHANNEL_ID_DEFAULT = "ntfy"
|
||||
private const val CHANNEL_ID_HIGH = "ntfy-high"
|
||||
private const val CHANNEL_ID_MAX = "ntfy-max"
|
||||
|
||||
private const val VIEW_ACTION_EXTRA_URL = "url"
|
||||
private const val VIEW_ACTION_EXTRA_NOTIFICATION_ID = "notificationId"
|
||||
|
|
|
@ -8,6 +8,5 @@ interface Connection {
|
|||
|
||||
data class ConnectionId(
|
||||
val baseUrl: String,
|
||||
val topicsToSubscriptionIds: Map<String, Long>,
|
||||
val topicIsUnifiedPush: Map<String, Boolean>
|
||||
val topicsToSubscriptionIds: Map<String, Long>
|
||||
)
|
||||
|
|
|
@ -3,6 +3,7 @@ package io.heckel.ntfy.service
|
|||
import io.heckel.ntfy.db.*
|
||||
import io.heckel.ntfy.util.Log
|
||||
import io.heckel.ntfy.msg.ApiService
|
||||
import io.heckel.ntfy.util.Encryption
|
||||
import io.heckel.ntfy.util.topicUrl
|
||||
import kotlinx.coroutines.*
|
||||
import okhttp3.Call
|
||||
|
@ -21,10 +22,8 @@ class JsonConnection(
|
|||
) : Connection {
|
||||
private val baseUrl = connectionId.baseUrl
|
||||
private val topicsToSubscriptionIds = connectionId.topicsToSubscriptionIds
|
||||
private val topicIsUnifiedPush = connectionId.topicIsUnifiedPush
|
||||
private val subscriptionIds = topicsToSubscriptionIds.values
|
||||
private val topicsStr = topicsToSubscriptionIds.keys.joinToString(separator = ",")
|
||||
private val unifiedPushTopicsStr = topicIsUnifiedPush.filter { entry -> entry.value }.keys.joinToString(separator = ",")
|
||||
private val url = topicUrl(baseUrl, topicsStr)
|
||||
|
||||
private var since: String? = sinceId
|
||||
|
@ -44,7 +43,8 @@ class JsonConnection(
|
|||
since = notification.id
|
||||
val subscriptionId = topicsToSubscriptionIds[topic] ?: return@notify
|
||||
val subscription = repository.getSubscription(subscriptionId) ?: return@notify
|
||||
val notificationWithSubscriptionId = notification.copy(subscriptionId = subscription.id)
|
||||
val notificationDecrypted = Encryption.maybeDecrypt(subscription, notification)
|
||||
val notificationWithSubscriptionId = notificationDecrypted.copy(subscriptionId = subscription.id)
|
||||
notificationListener(subscription, notificationWithSubscriptionId)
|
||||
}
|
||||
val failed = AtomicBoolean(false)
|
||||
|
@ -58,7 +58,7 @@ class JsonConnection(
|
|||
// Call /json subscribe endpoint and loop until the call fails, is canceled,
|
||||
// or the job or service are cancelled/stopped
|
||||
try {
|
||||
call = api.subscribe(baseUrl, topicsStr, unifiedPushTopicsStr, since, user, notify, fail)
|
||||
call = api.subscribe(baseUrl, topicsStr, since, user, notify, fail)
|
||||
while (!failed.get() && !call.isCanceled() && isActive && serviceActive()) {
|
||||
stateChangeListener(subscriptionIds, ConnectionState.CONNECTED)
|
||||
Log.d(TAG,"[$url] Connection is active (failed=$failed, callCanceled=${call.isCanceled()}, jobActive=$isActive, serviceStarted=${serviceActive()}")
|
||||
|
|
|
@ -10,18 +10,17 @@ import android.os.PowerManager
|
|||
import android.os.SystemClock
|
||||
import androidx.core.app.NotificationCompat
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.preference.PreferenceManager
|
||||
import io.heckel.ntfy.BuildConfig
|
||||
import io.heckel.ntfy.R
|
||||
import io.heckel.ntfy.app.Application
|
||||
import io.heckel.ntfy.db.ConnectionState
|
||||
import io.heckel.ntfy.db.Repository
|
||||
import io.heckel.ntfy.db.Subscription
|
||||
import io.heckel.ntfy.util.Log
|
||||
import io.heckel.ntfy.msg.ApiService
|
||||
import io.heckel.ntfy.msg.NotificationDispatcher
|
||||
import io.heckel.ntfy.ui.Colors
|
||||
import io.heckel.ntfy.ui.MainActivity
|
||||
import io.heckel.ntfy.util.Log
|
||||
import io.heckel.ntfy.util.topicUrl
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
@ -89,16 +88,23 @@ class SubscriberService : Service() {
|
|||
|
||||
Log.init(this) // Init logs in all entry points
|
||||
Log.d(TAG, "Subscriber service has been created")
|
||||
|
||||
val title = getString(R.string.channel_subscriber_notification_title)
|
||||
val text = if (BuildConfig.FIREBASE_AVAILABLE) {
|
||||
getString(R.string.channel_subscriber_notification_instant_text)
|
||||
} else {
|
||||
getString(R.string.channel_subscriber_notification_noinstant_text)
|
||||
}
|
||||
notificationManager = createNotificationChannel()
|
||||
serviceNotification = createNotification(title, text)
|
||||
|
||||
startForeground(NOTIFICATION_SERVICE_ID, serviceNotification)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
Log.d(TAG, "Subscriber service has been destroyed")
|
||||
stopService()
|
||||
val preferenceKey = getString(R.string.eos_preference_key_is_enabled)
|
||||
if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean(preferenceKey, false)) {
|
||||
sendBroadcast(Intent(this, AutoRestartReceiver::class.java))
|
||||
}
|
||||
|
||||
sendBroadcast(Intent(this, AutoRestartReceiver::class.java)) // Restart it if necessary!
|
||||
super.onDestroy()
|
||||
}
|
||||
|
||||
|
@ -132,6 +138,7 @@ class SubscriberService : Service() {
|
|||
}
|
||||
}
|
||||
wakeLock = null
|
||||
stopForeground(true)
|
||||
stopSelf()
|
||||
} catch (e: Exception) {
|
||||
Log.d(TAG, "Service stopped without being started: ${e.message}")
|
||||
|
@ -165,8 +172,8 @@ class SubscriberService : Service() {
|
|||
.filter { s -> s.instant }
|
||||
val activeConnectionIds = connections.keys().toList().toSet()
|
||||
val desiredConnectionIds = instantSubscriptions // Set<ConnectionId>
|
||||
.groupBy { s -> ConnectionId(s.baseUrl, emptyMap(), emptyMap()) }
|
||||
.map { entry -> entry.key.copy(topicsToSubscriptionIds = entry.value.associate { s -> s.topic to s.id }, topicIsUnifiedPush = entry.value.associate { s -> s.topic to (s.upConnectorToken != null) }) }
|
||||
.groupBy { s -> ConnectionId(s.baseUrl, emptyMap()) }
|
||||
.map { entry -> entry.key.copy(topicsToSubscriptionIds = entry.value.associate { s -> s.topic to s.id }) }
|
||||
.toSet()
|
||||
val newConnectionIds = desiredConnectionIds.subtract(activeConnectionIds)
|
||||
val obsoleteConnectionIds = activeConnectionIds.subtract(desiredConnectionIds)
|
||||
|
@ -193,7 +200,7 @@ class SubscriberService : Service() {
|
|||
// retrieve old messages. This is important, so we don't download attachments from old messages.
|
||||
|
||||
val since = sinceByBaseUrl[connectionId.baseUrl] ?: "none"
|
||||
val serviceActive = { isServiceStarted }
|
||||
val serviceActive = { -> isServiceStarted }
|
||||
val user = repository.getUser(connectionId.baseUrl)
|
||||
val connection = if (repository.getConnectionProtocol() == Repository.CONNECTION_PROTOCOL_WS) {
|
||||
val alarmManager = getSystemService(ALARM_SERVICE) as AlarmManager
|
||||
|
@ -284,13 +291,12 @@ class SubscriberService : Service() {
|
|||
}
|
||||
return NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
|
||||
.setSmallIcon(R.drawable.ic_notification_instant)
|
||||
.setColor(ContextCompat.getColor(this, Colors.notificationIcon(this)))
|
||||
.setColor(ContextCompat.getColor(this, Colors.notificationIcon))
|
||||
.setContentTitle(title)
|
||||
.setContentText(text)
|
||||
.setContentIntent(pendingIntent)
|
||||
.setSound(null)
|
||||
.setShowWhen(false) // Don't show date/time
|
||||
.setOngoing(true) // Starting SDK 33 / Android 13, foreground notifications can be swiped away
|
||||
.setGroup(NOTIFICATION_GROUP_ID) // Do not group with other notifications
|
||||
.build()
|
||||
}
|
||||
|
@ -303,11 +309,11 @@ class SubscriberService : Service() {
|
|||
override fun onTaskRemoved(rootIntent: Intent) {
|
||||
val restartServiceIntent = Intent(applicationContext, SubscriberService::class.java).also {
|
||||
it.setPackage(packageName)
|
||||
}
|
||||
val restartServicePendingIntent: PendingIntent = PendingIntent.getService(this, 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE)
|
||||
applicationContext.getSystemService(Context.ALARM_SERVICE)
|
||||
val alarmService: AlarmManager = applicationContext.getSystemService(Context.ALARM_SERVICE) as AlarmManager
|
||||
alarmService.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 1000, restartServicePendingIntent)
|
||||
};
|
||||
val restartServicePendingIntent: PendingIntent = PendingIntent.getService(this, 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE);
|
||||
applicationContext.getSystemService(Context.ALARM_SERVICE);
|
||||
val alarmService: AlarmManager = applicationContext.getSystemService(Context.ALARM_SERVICE) as AlarmManager;
|
||||
alarmService.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 1000, restartServicePendingIntent);
|
||||
}
|
||||
|
||||
/* This re-starts the service on reboot; see manifest */
|
||||
|
|
|
@ -2,11 +2,10 @@ package io.heckel.ntfy.service
|
|||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import androidx.preference.PreferenceManager
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.work.*
|
||||
import io.heckel.ntfy.app.Application
|
||||
import io.heckel.ntfy.util.Log
|
||||
import io.heckel.ntfy.R
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
|
@ -44,17 +43,11 @@ class SubscriberServiceManager(private val context: Context) {
|
|||
Log.d(TAG, "ServiceStartWorker: Failed, no application found (work ID: ${id})")
|
||||
return Result.failure()
|
||||
}
|
||||
|
||||
withContext(Dispatchers.IO) {
|
||||
val app = context.applicationContext as Application
|
||||
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(app)
|
||||
val preferenceKey = context.getString(R.string.eos_preference_key_is_enabled)
|
||||
val action = if (sharedPreferences.getBoolean(preferenceKey, false)) {
|
||||
SubscriberService.Action.START
|
||||
} else {
|
||||
SubscriberService.Action.STOP
|
||||
}
|
||||
|
||||
val subscriptionIdsWithInstantStatus = app.repository.getSubscriptionIdsWithInstantStatus()
|
||||
val instantSubscriptions = subscriptionIdsWithInstantStatus.toList().filter { (_, instant) -> instant }.size
|
||||
val action = if (instantSubscriptions > 0) SubscriberService.Action.START else SubscriberService.Action.STOP
|
||||
val serviceState = SubscriberService.readServiceState(context)
|
||||
if (serviceState == SubscriberService.ServiceState.STOPPED && action == SubscriberService.Action.STOP) {
|
||||
return@withContext Result.success()
|
||||
|
@ -62,7 +55,7 @@ class SubscriberServiceManager(private val context: Context) {
|
|||
Log.d(TAG, "ServiceStartWorker: Starting foreground service with action $action (work ID: ${id})")
|
||||
Intent(context, SubscriberService::class.java).also {
|
||||
it.action = action.name
|
||||
context.startService(it)
|
||||
ContextCompat.startForegroundService(context, it)
|
||||
}
|
||||
}
|
||||
return Result.success()
|
||||
|
|
|
@ -7,6 +7,7 @@ import android.os.Looper
|
|||
import io.heckel.ntfy.db.*
|
||||
import io.heckel.ntfy.msg.ApiService.Companion.requestBuilder
|
||||
import io.heckel.ntfy.msg.NotificationParser
|
||||
import io.heckel.ntfy.util.Encryption
|
||||
import io.heckel.ntfy.util.Log
|
||||
import io.heckel.ntfy.util.topicShortUrl
|
||||
import io.heckel.ntfy.util.topicUrlWs
|
||||
|
@ -56,10 +57,8 @@ class WsConnection(
|
|||
private val since = AtomicReference<String?>(sinceId)
|
||||
private val baseUrl = connectionId.baseUrl
|
||||
private val topicsToSubscriptionIds = connectionId.topicsToSubscriptionIds
|
||||
private val topicIsUnifiedPush = connectionId.topicIsUnifiedPush
|
||||
private val subscriptionIds = topicsToSubscriptionIds.values
|
||||
private val topicsStr = topicsToSubscriptionIds.keys.joinToString(separator = ",")
|
||||
private val unifiedPushTopicsStr = topicIsUnifiedPush.filter { entry -> entry.value }.keys.joinToString(separator = ",")
|
||||
private val shortUrl = topicShortUrl(baseUrl, topicsStr)
|
||||
|
||||
init {
|
||||
|
@ -80,7 +79,7 @@ class WsConnection(
|
|||
val sinceId = since.get()
|
||||
val sinceVal = sinceId ?: "all"
|
||||
val urlWithSince = topicUrlWs(baseUrl, topicsStr, sinceVal)
|
||||
val request = requestBuilder(urlWithSince, user, unifiedPushTopicsStr).build()
|
||||
val request = requestBuilder(urlWithSince, user).build()
|
||||
Log.d(TAG, "$shortUrl (gid=$globalId): Opening $urlWithSince with listener ID $nextListenerId ...")
|
||||
webSocket = client.newWebSocket(request, Listener(nextListenerId))
|
||||
}
|
||||
|
@ -146,7 +145,8 @@ class WsConnection(
|
|||
val notification = notificationWithTopic.notification
|
||||
val subscriptionId = topicsToSubscriptionIds[topic] ?: return@synchronize
|
||||
val subscription = repository.getSubscription(subscriptionId) ?: return@synchronize
|
||||
val notificationWithSubscriptionId = notification.copy(subscriptionId = subscription.id)
|
||||
val notificationDecrypted = Encryption.maybeDecrypt(subscription, notification)
|
||||
val notificationWithSubscriptionId = notificationDecrypted.copy(subscriptionId = subscription.id)
|
||||
notificationListener(subscription, notificationWithSubscriptionId)
|
||||
since.set(notification.id)
|
||||
}
|
||||
|
|
|
@ -5,6 +5,8 @@ import android.app.AlertDialog
|
|||
import android.app.Dialog
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.text.Editable
|
||||
import android.text.TextWatcher
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
|
|
|
@ -8,10 +8,7 @@ import io.heckel.ntfy.util.isDarkThemeOn
|
|||
class Colors {
|
||||
companion object {
|
||||
const val refreshProgressIndicator = R.color.teal
|
||||
|
||||
fun notificationIcon(context: Context): Int {
|
||||
return if (isDarkThemeOn(context)) R.color.teal_light else R.color.teal
|
||||
}
|
||||
const val notificationIcon = R.color.teal
|
||||
|
||||
fun itemSelectedBackground(context: Context): Int {
|
||||
return if (isDarkThemeOn(context)) R.color.black_800b else R.color.gray_400
|
||||
|
|
|
@ -7,7 +7,6 @@ import android.content.Context
|
|||
import android.content.Intent
|
||||
import android.content.Intent.ACTION_VIEW
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.text.Html
|
||||
import android.view.ActionMode
|
||||
|
@ -111,16 +110,15 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra
|
|||
baseUrl = baseUrl,
|
||||
topic = topic,
|
||||
instant = instant,
|
||||
dedicatedChannels = false,
|
||||
mutedUntil = 0,
|
||||
minPriority = Repository.MIN_PRIORITY_USE_GLOBAL,
|
||||
autoDelete = Repository.AUTO_DELETE_USE_GLOBAL,
|
||||
insistent = Repository.INSISTENT_MAX_PRIORITY_USE_GLOBAL,
|
||||
lastNotificationId = null,
|
||||
icon = null,
|
||||
upAppId = null,
|
||||
upConnectorToken = null,
|
||||
displayName = null,
|
||||
encryptionKey = null,
|
||||
totalCount = 0,
|
||||
newCount = 0,
|
||||
lastActive = Date().time/1000
|
||||
|
@ -136,7 +134,9 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra
|
|||
// Fetch cached messages
|
||||
try {
|
||||
val user = repository.getUser(subscription.baseUrl) // May be null
|
||||
val notifications = api.poll(subscription.id, subscription.baseUrl, subscription.topic, user)
|
||||
val notifications = api
|
||||
.poll(subscription.id, subscription.baseUrl, subscription.topic, user)
|
||||
.map { n -> Encryption.maybeDecrypt(subscription, n) }
|
||||
notifications.forEach { notification -> repository.addNotification(notification) }
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Unable to fetch notifications: ${e.message}", e)
|
||||
|
@ -181,7 +181,7 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra
|
|||
howToExample.linksClickable = true
|
||||
|
||||
val howToText = getString(R.string.detail_how_to_example, topicUrl)
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
|
||||
howToExample.text = Html.fromHtml(howToText, Html.FROM_HTML_MODE_LEGACY)
|
||||
} else {
|
||||
howToExample.text = Html.fromHtml(howToText)
|
||||
|
@ -244,7 +244,7 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra
|
|||
adapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
|
||||
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
|
||||
if (positionStart == 0) {
|
||||
Log.d(TAG, "$itemCount item(s) inserted at 0, scrolling to the top")
|
||||
Log.d(TAG, "$itemCount item(s) inserted at $positionStart, scrolling to the top")
|
||||
mainList.scrollToPosition(positionStart)
|
||||
}
|
||||
}
|
||||
|
@ -257,13 +257,6 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra
|
|||
|
||||
// Mark this subscription as "open" so we don't receive notifications for it
|
||||
repository.detailViewSubscriptionId.set(subscriptionId)
|
||||
|
||||
// Stop insistent playback (if running, otherwise it'll throw)
|
||||
try {
|
||||
repository.mediaPlayer.stop()
|
||||
} catch (_: Exception) {
|
||||
// Ignore errors
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
|
@ -476,7 +469,9 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra
|
|||
try {
|
||||
val subscription = repository.getSubscription(subscriptionId) ?: return@launch
|
||||
val user = repository.getUser(subscription.baseUrl) // May be null
|
||||
val notifications = api.poll(subscription.id, subscription.baseUrl, subscription.topic, user, subscription.lastNotificationId)
|
||||
val notifications = api
|
||||
.poll(subscription.id, subscription.baseUrl, subscription.topic, user, subscription.lastNotificationId)
|
||||
.map { n -> Encryption.maybeDecrypt(subscription, n) }
|
||||
val newNotifications = repository.onlyNewNotifications(subscriptionId, notifications)
|
||||
val toastMessage = if (newNotifications.isEmpty()) {
|
||||
getString(R.string.refresh_message_no_results)
|
||||
|
@ -581,7 +576,7 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra
|
|||
dialog.setOnShowListener {
|
||||
dialog
|
||||
.getButton(AlertDialog.BUTTON_POSITIVE)
|
||||
.dangerButton(this)
|
||||
.setTextAppearance(R.style.DangerText)
|
||||
}
|
||||
dialog.show()
|
||||
}
|
||||
|
@ -619,7 +614,7 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra
|
|||
dialog.setOnShowListener {
|
||||
dialog
|
||||
.getButton(AlertDialog.BUTTON_POSITIVE)
|
||||
.dangerButton(this)
|
||||
.setTextAppearance(R.style.DangerText)
|
||||
}
|
||||
dialog.show()
|
||||
}
|
||||
|
@ -629,7 +624,7 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra
|
|||
handleActionModeClick(notification)
|
||||
} else if (notification.click != "") {
|
||||
try {
|
||||
startActivity(Intent(ACTION_VIEW, Uri.parse(notification.click)))
|
||||
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(notification.click)))
|
||||
} catch (e: Exception) {
|
||||
Log.w(TAG, "Cannot open click URL", e)
|
||||
runOnUiThread {
|
||||
|
@ -730,7 +725,7 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra
|
|||
dialog.setOnShowListener {
|
||||
dialog
|
||||
.getButton(AlertDialog.BUTTON_POSITIVE)
|
||||
.dangerButton(this)
|
||||
.setTextAppearance(R.style.DangerText)
|
||||
}
|
||||
dialog.show()
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ import android.widget.*
|
|||
import androidx.cardview.widget.CardView
|
||||
import androidx.constraintlayout.helper.widget.Flow
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.constraintlayout.widget.ConstraintProperties.WRAP_CONTENT
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.content.FileProvider
|
||||
|
@ -27,16 +28,13 @@ import com.google.android.material.button.MaterialButton
|
|||
import com.stfalcon.imageviewer.StfalconImageViewer
|
||||
import io.heckel.ntfy.R
|
||||
import io.heckel.ntfy.db.*
|
||||
import io.heckel.ntfy.msg.DownloadAttachmentWorker
|
||||
import io.heckel.ntfy.msg.DownloadManager
|
||||
import io.heckel.ntfy.msg.DownloadType
|
||||
import io.heckel.ntfy.msg.DownloadWorker
|
||||
import io.heckel.ntfy.msg.NotificationService
|
||||
import io.heckel.ntfy.msg.NotificationService.Companion.ACTION_VIEW
|
||||
import io.heckel.ntfy.util.*
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.*
|
||||
|
||||
|
||||
class DetailAdapter(private val activity: Activity, private val lifecycleScope: CoroutineScope, private val repository: Repository, private val onClick: (Notification) -> Unit, private val onLongClick: (Notification) -> Unit) :
|
||||
ListAdapter<Notification, DetailAdapter.DetailViewHolder>(TopicDiffCallback) {
|
||||
|
@ -82,7 +80,6 @@ class DetailAdapter(private val activity: Activity, private val lifecycleScope:
|
|||
private val dateView: TextView = itemView.findViewById(R.id.detail_item_date_text)
|
||||
private val titleView: TextView = itemView.findViewById(R.id.detail_item_title_text)
|
||||
private val messageView: TextView = itemView.findViewById(R.id.detail_item_message_text)
|
||||
private val iconView: ImageView = itemView.findViewById(R.id.detail_item_icon)
|
||||
private val newDotImageView: View = itemView.findViewById(R.id.detail_item_new_dot)
|
||||
private val tagsView: TextView = itemView.findViewById(R.id.detail_item_tags_text)
|
||||
private val menuButton: ImageButton = itemView.findViewById(R.id.detail_item_menu_button)
|
||||
|
@ -133,70 +130,52 @@ class DetailAdapter(private val activity: Activity, private val lifecycleScope:
|
|||
cardView.setCardBackgroundColor(Colors.cardBackgroundColor(context))
|
||||
}
|
||||
val attachment = notification.attachment
|
||||
val attachmentFileStat = maybeFileStat(context, attachment?.contentUri)
|
||||
val iconFileStat = maybeFileStat(context, notification.icon?.contentUri)
|
||||
val exists = if (attachment?.contentUri != null) fileExists(context, attachment.contentUri) else false
|
||||
renderPriority(context, notification)
|
||||
resetCardButtons()
|
||||
maybeRenderMenu(context, notification, attachmentFileStat)
|
||||
maybeRenderAttachment(context, notification, attachmentFileStat)
|
||||
maybeRenderIcon(context, notification, iconFileStat)
|
||||
maybeRenderMenu(context, notification, exists)
|
||||
maybeRenderAttachment(context, notification, exists)
|
||||
maybeRenderActions(context, notification)
|
||||
}
|
||||
|
||||
private fun renderPriority(context: Context, notification: Notification) {
|
||||
when (notification.priority) {
|
||||
PRIORITY_MIN -> {
|
||||
1 -> {
|
||||
priorityImageView.visibility = View.VISIBLE
|
||||
priorityImageView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_priority_1_24dp))
|
||||
}
|
||||
PRIORITY_LOW -> {
|
||||
2 -> {
|
||||
priorityImageView.visibility = View.VISIBLE
|
||||
priorityImageView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_priority_2_24dp))
|
||||
}
|
||||
PRIORITY_DEFAULT -> {
|
||||
3 -> {
|
||||
priorityImageView.visibility = View.GONE
|
||||
}
|
||||
PRIORITY_HIGH -> {
|
||||
4 -> {
|
||||
priorityImageView.visibility = View.VISIBLE
|
||||
priorityImageView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_priority_4_24dp))
|
||||
}
|
||||
PRIORITY_MAX -> {
|
||||
5 -> {
|
||||
priorityImageView.visibility = View.VISIBLE
|
||||
priorityImageView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_priority_5_24dp))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun maybeRenderAttachment(context: Context, notification: Notification, attachmentFileStat: FileInfo?) {
|
||||
private fun maybeRenderAttachment(context: Context, notification: Notification, exists: Boolean) {
|
||||
if (notification.attachment == null) {
|
||||
attachmentImageView.visibility = View.GONE
|
||||
attachmentBoxView.visibility = View.GONE
|
||||
return
|
||||
}
|
||||
val attachment = notification.attachment
|
||||
val image = attachment.contentUri != null && supportedImage(attachment.type) && previewableImage(attachmentFileStat)
|
||||
val bitmap = if (image) attachment.contentUri?.readBitmapFromUriOrNull(context) else null
|
||||
maybeRenderAttachmentImage(context, bitmap)
|
||||
maybeRenderAttachmentBox(context, notification, attachment, attachmentFileStat, bitmap)
|
||||
val image = attachment.contentUri != null && exists && supportedImage(attachment.type)
|
||||
maybeRenderAttachmentImage(context, attachment, image)
|
||||
maybeRenderAttachmentBox(context, notification, attachment, exists, image)
|
||||
}
|
||||
|
||||
private fun maybeRenderIcon(context: Context, notification: Notification, iconStat: FileInfo?) {
|
||||
if (notification.icon == null || !previewableImage(iconStat)) {
|
||||
iconView.visibility = View.GONE
|
||||
return
|
||||
}
|
||||
try {
|
||||
val icon = notification.icon
|
||||
val bitmap = icon.contentUri?.readBitmapFromUri(context) ?: throw Exception("uri empty")
|
||||
iconView.setImageBitmap(bitmap)
|
||||
iconView.visibility = View.VISIBLE
|
||||
} catch (_: Exception) {
|
||||
iconView.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
private fun maybeRenderMenu(context: Context, notification: Notification, attachmentFileStat: FileInfo?) {
|
||||
val menuButtonPopupMenu = maybeCreateMenuPopup(context, menuButton, notification, attachmentFileStat) // Heavy lifting not during on-click
|
||||
private fun maybeRenderMenu(context: Context, notification: Notification, exists: Boolean) {
|
||||
val menuButtonPopupMenu = maybeCreateMenuPopup(context, menuButton, notification, exists) // Heavy lifting not during on-click
|
||||
if (menuButtonPopupMenu != null) {
|
||||
menuButton.setOnClickListener { menuButtonPopupMenu.show() }
|
||||
menuButton.visibility = View.VISIBLE
|
||||
|
@ -206,7 +185,7 @@ class DetailAdapter(private val activity: Activity, private val lifecycleScope:
|
|||
}
|
||||
|
||||
private fun maybeRenderActions(context: Context, notification: Notification) {
|
||||
if (!notification.actions.isNullOrEmpty()) {
|
||||
if (notification.actions != null && notification.actions.isNotEmpty()) {
|
||||
actionsWrapperView.visibility = View.VISIBLE
|
||||
val actionsCount = Math.min(notification.actions.size, 3) // per documentation, only 3 actions are available
|
||||
for (i in 0 until actionsCount) {
|
||||
|
@ -222,7 +201,7 @@ class DetailAdapter(private val activity: Activity, private val lifecycleScope:
|
|||
|
||||
private fun resetCardButtons() {
|
||||
// clear any previously created dynamic buttons
|
||||
actionsFlow.allViews.forEach { actionsFlow.removeView(it) }
|
||||
actionsFlow.allViews.forEach { it -> actionsFlow.removeView(it) }
|
||||
actionsWrapperView.removeAllViews()
|
||||
actionsWrapperView.addView(actionsFlow)
|
||||
}
|
||||
|
@ -241,14 +220,14 @@ class DetailAdapter(private val activity: Activity, private val lifecycleScope:
|
|||
return button
|
||||
}
|
||||
|
||||
private fun maybeRenderAttachmentBox(context: Context, notification: Notification, attachment: Attachment, attachmentFileStat: FileInfo?, bitmap: Bitmap?) {
|
||||
if (bitmap != null) {
|
||||
private fun maybeRenderAttachmentBox(context: Context, notification: Notification, attachment: Attachment, exists: Boolean, image: Boolean) {
|
||||
if (image) {
|
||||
attachmentBoxView.visibility = View.GONE
|
||||
return
|
||||
}
|
||||
attachmentInfoView.text = formatAttachmentDetails(context, attachment, attachmentFileStat)
|
||||
attachmentInfoView.text = formatAttachmentDetails(context, attachment, exists)
|
||||
attachmentIconView.setImageResource(mimeTypeToIconResource(attachment.type))
|
||||
val attachmentBoxPopupMenu = maybeCreateMenuPopup(context, attachmentBoxView, notification, attachmentFileStat) // Heavy lifting not during on-click
|
||||
val attachmentBoxPopupMenu = maybeCreateMenuPopup(context, attachmentBoxView, notification, exists) // Heavy lifting not during on-click
|
||||
if (attachmentBoxPopupMenu != null) {
|
||||
attachmentBoxView.setOnClickListener { attachmentBoxPopupMenu.show() }
|
||||
} else {
|
||||
|
@ -261,12 +240,11 @@ class DetailAdapter(private val activity: Activity, private val lifecycleScope:
|
|||
attachmentBoxView.visibility = View.VISIBLE
|
||||
}
|
||||
|
||||
private fun maybeCreateMenuPopup(context: Context, anchor: View?, notification: Notification, attachmentFileStat: FileInfo?): PopupMenu? {
|
||||
private fun maybeCreateMenuPopup(context: Context, anchor: View?, notification: Notification, exists: Boolean): PopupMenu? {
|
||||
val popup = PopupMenu(context, anchor)
|
||||
popup.menuInflater.inflate(R.menu.menu_detail_attachment, popup.menu)
|
||||
val attachment = notification.attachment // May be null
|
||||
val hasAttachment = attachment != null
|
||||
val attachmentExists = attachmentFileStat != null
|
||||
val hasClickLink = notification.click != ""
|
||||
val downloadItem = popup.menu.findItem(R.id.detail_item_menu_download)
|
||||
val cancelItem = popup.menu.findItem(R.id.detail_item_menu_cancel)
|
||||
|
@ -288,10 +266,10 @@ class DetailAdapter(private val activity: Activity, private val lifecycleScope:
|
|||
if (hasClickLink) {
|
||||
copyContentsItem.setOnMenuItemClickListener { copyContents(context, notification) }
|
||||
}
|
||||
openItem.isVisible = hasAttachment && attachmentExists
|
||||
downloadItem.isVisible = hasAttachment && !attachmentExists && !expired && !inProgress
|
||||
deleteItem.isVisible = hasAttachment && attachmentExists
|
||||
saveFileItem.isVisible = hasAttachment && attachmentExists
|
||||
openItem.isVisible = hasAttachment && exists
|
||||
downloadItem.isVisible = hasAttachment && !exists && !expired && !inProgress
|
||||
deleteItem.isVisible = hasAttachment && exists
|
||||
saveFileItem.isVisible = hasAttachment && exists
|
||||
copyUrlItem.isVisible = hasAttachment && !expired
|
||||
cancelItem.isVisible = hasAttachment && inProgress
|
||||
copyContentsItem.isVisible = notification.click != ""
|
||||
|
@ -304,9 +282,8 @@ class DetailAdapter(private val activity: Activity, private val lifecycleScope:
|
|||
return popup
|
||||
}
|
||||
|
||||
private fun formatAttachmentDetails(context: Context, attachment: Attachment, attachmentFileStat: FileInfo?): String {
|
||||
private fun formatAttachmentDetails(context: Context, attachment: Attachment, exists: Boolean): String {
|
||||
val name = attachment.name
|
||||
val exists = attachmentFileStat != null
|
||||
val notYetDownloaded = !exists && attachment.progress == ATTACHMENT_PROGRESS_NONE
|
||||
val downloading = !exists && attachment.progress in 0..99
|
||||
val deleted = !exists && (attachment.progress == ATTACHMENT_PROGRESS_DONE || attachment.progress == ATTACHMENT_PROGRESS_DELETED)
|
||||
|
@ -351,12 +328,13 @@ class DetailAdapter(private val activity: Activity, private val lifecycleScope:
|
|||
}
|
||||
}
|
||||
|
||||
private fun maybeRenderAttachmentImage(context: Context, bitmap: Bitmap?) {
|
||||
if (bitmap == null) {
|
||||
private fun maybeRenderAttachmentImage(context: Context, attachment: Attachment, image: Boolean) {
|
||||
if (!image) {
|
||||
attachmentImageView.visibility = View.GONE
|
||||
return
|
||||
}
|
||||
try {
|
||||
val bitmap = attachment.contentUri?.readBitmapFromUri(context) ?: throw Exception("uri empty")
|
||||
attachmentImageView.setImageBitmap(bitmap)
|
||||
attachmentImageView.setOnClickListener {
|
||||
val loadImage = { view: ImageView, image: Bitmap -> view.setImageBitmap(image) }
|
||||
|
@ -373,12 +351,6 @@ class DetailAdapter(private val activity: Activity, private val lifecycleScope:
|
|||
}
|
||||
|
||||
private fun openFile(context: Context, attachment: Attachment): Boolean {
|
||||
if (!canOpenAttachment(attachment)) {
|
||||
Toast
|
||||
.makeText(context, context.getString(R.string.detail_item_cannot_open_apk), Toast.LENGTH_LONG)
|
||||
.show()
|
||||
return true
|
||||
}
|
||||
Log.d(TAG, "Opening file ${attachment.contentUri}")
|
||||
try {
|
||||
val contentUri = Uri.parse(attachment.contentUri)
|
||||
|
@ -417,7 +389,7 @@ class DetailAdapter(private val activity: Activity, private val lifecycleScope:
|
|||
val inFile = resolver.openInputStream(inUri) ?: throw Exception("Cannot open input stream")
|
||||
val outUri = if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
|
||||
val file = ensureSafeNewFile(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), attachment.name)
|
||||
FileProvider.getUriForFile(context, DownloadAttachmentWorker.FILE_PROVIDER_AUTHORITY, file)
|
||||
FileProvider.getUriForFile(context, DownloadWorker.FILE_PROVIDER_AUTHORITY, file)
|
||||
} else {
|
||||
val contentUri = MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL)
|
||||
resolver.insert(contentUri, values) ?: throw Exception("Cannot insert content")
|
||||
|
@ -471,7 +443,7 @@ class DetailAdapter(private val activity: Activity, private val lifecycleScope:
|
|||
ActivityCompat.requestPermissions(activity, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), REQUEST_CODE_WRITE_STORAGE_PERMISSION_FOR_DOWNLOAD)
|
||||
return true
|
||||
}
|
||||
DownloadManager.enqueue(context, notification.id, userAction = true, DownloadType.ATTACHMENT)
|
||||
DownloadManager.enqueue(context, notification.id, userAction = true)
|
||||
return true
|
||||
}
|
||||
|
||||
|
@ -527,10 +499,6 @@ class DetailAdapter(private val activity: Activity, private val lifecycleScope:
|
|||
}
|
||||
context.sendBroadcast(intent)
|
||||
}
|
||||
|
||||
private fun previewableImage(fileStat: FileInfo?): Boolean {
|
||||
return if (fileStat != null) fileStat.size <= IMAGE_PREVIEW_MAX_BYTES else false
|
||||
}
|
||||
}
|
||||
|
||||
object TopicDiffCallback : DiffUtil.ItemCallback<Notification>() {
|
||||
|
@ -546,6 +514,5 @@ class DetailAdapter(private val activity: Activity, private val lifecycleScope:
|
|||
companion object {
|
||||
const val TAG = "NtfyDetailAdapter"
|
||||
const val REQUEST_CODE_WRITE_STORAGE_PERMISSION_FOR_DOWNLOAD = 9876
|
||||
const val IMAGE_PREVIEW_MAX_BYTES = 5 * 1024 * 1024 // Too large images crash the app with "Canvas: trying to draw too large(233280000bytes) bitmap."
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,10 +4,8 @@ import android.content.ContentResolver
|
|||
import android.content.ClipData
|
||||
import android.content.ClipboardManager
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.provider.Settings
|
||||
import android.text.TextUtils
|
||||
import android.widget.Toast
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
|
@ -22,8 +20,7 @@ import io.heckel.ntfy.BuildConfig
|
|||
import io.heckel.ntfy.R
|
||||
import io.heckel.ntfy.db.Repository
|
||||
import io.heckel.ntfy.db.Subscription
|
||||
import io.heckel.ntfy.msg.DownloadAttachmentWorker
|
||||
import io.heckel.ntfy.msg.NotificationService
|
||||
import io.heckel.ntfy.msg.DownloadWorker
|
||||
import io.heckel.ntfy.service.SubscriberServiceManager
|
||||
import io.heckel.ntfy.util.*
|
||||
import kotlinx.coroutines.*
|
||||
|
@ -38,7 +35,6 @@ class DetailSettingsActivity : AppCompatActivity() {
|
|||
private lateinit var repository: Repository
|
||||
private lateinit var serviceManager: SubscriberServiceManager
|
||||
private lateinit var settingsFragment: SettingsFragment
|
||||
private lateinit var notificationService: NotificationService
|
||||
private var subscriptionId: Long = 0
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
|
@ -49,7 +45,6 @@ class DetailSettingsActivity : AppCompatActivity() {
|
|||
|
||||
repository = Repository.getInstance(this)
|
||||
serviceManager = SubscriberServiceManager(this)
|
||||
notificationService = NotificationService(this)
|
||||
subscriptionId = intent.getLongExtra(DetailActivity.EXTRA_SUBSCRIPTION_ID, 0)
|
||||
|
||||
if (savedInstanceState == null) {
|
||||
|
@ -80,11 +75,9 @@ class DetailSettingsActivity : AppCompatActivity() {
|
|||
private lateinit var resolver: ContentResolver
|
||||
private lateinit var repository: Repository
|
||||
private lateinit var serviceManager: SubscriberServiceManager
|
||||
private lateinit var notificationService: NotificationService
|
||||
private lateinit var subscription: Subscription
|
||||
|
||||
private lateinit var iconSetPref: Preference
|
||||
private lateinit var openChannelsPref: Preference
|
||||
private lateinit var iconSetLauncher: ActivityResultLauncher<String>
|
||||
private lateinit var iconRemovePref: Preference
|
||||
|
||||
|
@ -94,7 +87,6 @@ class DetailSettingsActivity : AppCompatActivity() {
|
|||
// Dependencies (Fragments need a default constructor)
|
||||
repository = Repository.getInstance(requireActivity())
|
||||
serviceManager = SubscriberServiceManager(requireActivity())
|
||||
notificationService = NotificationService(requireActivity())
|
||||
resolver = requireContext().applicationContext.contentResolver
|
||||
|
||||
// Create result launcher for custom icon (must be created in onCreatePreferences() directly)
|
||||
|
@ -118,18 +110,15 @@ class DetailSettingsActivity : AppCompatActivity() {
|
|||
loadMutedUntilPref()
|
||||
loadMinPriorityPref()
|
||||
loadAutoDeletePref()
|
||||
loadInsistentMaxPriorityPref()
|
||||
loadPasswordPref()
|
||||
loadIconSetPref()
|
||||
loadIconRemovePref()
|
||||
if (notificationService.channelsSupported()) {
|
||||
loadDedicatedChannelsPrefs()
|
||||
loadOpenChannelsPrefs()
|
||||
}
|
||||
} else {
|
||||
val notificationsHeaderId = context?.getString(R.string.detail_settings_notifications_header_key) ?: return
|
||||
val notificationsHeader: PreferenceCategory? = findPreference(notificationsHeaderId)
|
||||
notificationsHeader?.isVisible = false
|
||||
}
|
||||
|
||||
loadDisplayNamePref()
|
||||
loadTopicUrlPref()
|
||||
}
|
||||
|
@ -157,48 +146,6 @@ class DetailSettingsActivity : AppCompatActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
private fun loadDedicatedChannelsPrefs() {
|
||||
val prefId = context?.getString(R.string.detail_settings_notifications_dedicated_channels_key) ?: return
|
||||
val pref: SwitchPreference? = findPreference(prefId)
|
||||
pref?.isVisible = true
|
||||
pref?.isChecked = subscription.dedicatedChannels
|
||||
pref?.preferenceDataStore = object : PreferenceDataStore() {
|
||||
override fun putBoolean(key: String?, value: Boolean) {
|
||||
save(subscription.copy(dedicatedChannels = value))
|
||||
if (value) {
|
||||
notificationService.createSubscriptionNotificationChannels(subscription)
|
||||
} else {
|
||||
notificationService.deleteSubscriptionNotificationChannels(subscription)
|
||||
}
|
||||
openChannelsPref.isVisible = value
|
||||
}
|
||||
override fun getBoolean(key: String?, defValue: Boolean): Boolean {
|
||||
return subscription.dedicatedChannels
|
||||
}
|
||||
}
|
||||
pref?.summaryProvider = Preference.SummaryProvider<SwitchPreference> { preference ->
|
||||
if (preference.isChecked) {
|
||||
getString(R.string.detail_settings_notifications_dedicated_channels_summary_on)
|
||||
} else {
|
||||
getString(R.string.detail_settings_notifications_dedicated_channels_summary_off)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun loadOpenChannelsPrefs() {
|
||||
val prefId = context?.getString(R.string.detail_settings_notifications_open_channels_key) ?: return
|
||||
openChannelsPref = findPreference(prefId) ?: return
|
||||
openChannelsPref.isVisible = subscription.dedicatedChannels
|
||||
openChannelsPref.preferenceDataStore = object : PreferenceDataStore() { } // Dummy store to protect from accidentally overwriting
|
||||
openChannelsPref.onPreferenceClickListener = Preference.OnPreferenceClickListener { _ ->
|
||||
val settingsIntent = Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
.putExtra(Settings.EXTRA_APP_PACKAGE, requireContext().applicationContext.packageName)
|
||||
startActivity(settingsIntent);
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
private fun loadMutedUntilPref() {
|
||||
val prefId = context?.getString(R.string.detail_settings_notifications_muted_until_key) ?: return
|
||||
val pref: ListPreference? = findPreference(prefId)
|
||||
|
@ -229,8 +176,9 @@ class DetailSettingsActivity : AppCompatActivity() {
|
|||
return subscription.mutedUntil.toString()
|
||||
}
|
||||
}
|
||||
pref?.summaryProvider = Preference.SummaryProvider<ListPreference> {
|
||||
when (val mutedUntilValue = subscription.mutedUntil) {
|
||||
pref?.summaryProvider = Preference.SummaryProvider<ListPreference> { _ ->
|
||||
val mutedUntilValue = subscription.mutedUntil
|
||||
when (mutedUntilValue) {
|
||||
Repository.MUTED_UNTIL_SHOW_ALL -> getString(R.string.settings_notifications_muted_until_show_all)
|
||||
Repository.MUTED_UNTIL_FOREVER -> getString(R.string.settings_notifications_muted_until_forever)
|
||||
else -> {
|
||||
|
@ -262,8 +210,8 @@ class DetailSettingsActivity : AppCompatActivity() {
|
|||
value = repository.getMinPriority()
|
||||
}
|
||||
val summary = when (value) {
|
||||
PRIORITY_MIN -> getString(R.string.settings_notifications_min_priority_summary_any)
|
||||
PRIORITY_MAX -> getString(R.string.settings_notifications_min_priority_summary_max)
|
||||
1 -> getString(R.string.settings_notifications_min_priority_summary_any)
|
||||
5 -> getString(R.string.settings_notifications_min_priority_summary_max)
|
||||
else -> {
|
||||
val minPriorityString = toPriorityString(requireContext(), value)
|
||||
getString(R.string.settings_notifications_min_priority_summary_x_or_higher, value, minPriorityString)
|
||||
|
@ -290,7 +238,7 @@ class DetailSettingsActivity : AppCompatActivity() {
|
|||
pref?.summaryProvider = Preference.SummaryProvider<ListPreference> { preference ->
|
||||
var seconds = preference.value.toLongOrNull() ?: Repository.AUTO_DELETE_USE_GLOBAL
|
||||
val global = seconds == Repository.AUTO_DELETE_USE_GLOBAL
|
||||
if (global) {
|
||||
if (seconds == Repository.AUTO_DELETE_USE_GLOBAL) {
|
||||
seconds = repository.getAutoDeleteSeconds()
|
||||
}
|
||||
val summary = when (seconds) {
|
||||
|
@ -306,30 +254,27 @@ class DetailSettingsActivity : AppCompatActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
private fun loadInsistentMaxPriorityPref() {
|
||||
val prefId = context?.getString(R.string.detail_settings_notifications_insistent_max_priority_key) ?: return
|
||||
val pref: ListPreference? = findPreference(prefId)
|
||||
pref?.isVisible = true
|
||||
pref?.value = subscription.insistent.toString()
|
||||
private fun loadPasswordPref() {
|
||||
val prefId = context?.getString(R.string.detail_settings_notifications_password_key) ?: return
|
||||
val pref: EditTextPreference? = findPreference(prefId)
|
||||
pref?.isVisible = true // Hack: Show all settings at once, because subscription is loaded asynchronously
|
||||
pref?.text = ""
|
||||
pref?.preferenceDataStore = object : PreferenceDataStore() {
|
||||
override fun putString(key: String?, value: String?) {
|
||||
val intValue = value?.toIntOrNull() ?:return
|
||||
save(subscription.copy(insistent = intValue))
|
||||
val newPassword = value ?: return
|
||||
val encryptionKey = if (newPassword.trim().isEmpty()) null else Encryption.deriveKey(newPassword, topicUrl(subscription))
|
||||
save(subscription.copy(encryptionKey = encryptionKey))
|
||||
}
|
||||
override fun getString(key: String?, defValue: String?): String {
|
||||
return subscription.insistent.toString()
|
||||
return ""
|
||||
}
|
||||
}
|
||||
pref?.summaryProvider = Preference.SummaryProvider<ListPreference> { preference ->
|
||||
val value = preference.value.toIntOrNull() ?: Repository.INSISTENT_MAX_PRIORITY_USE_GLOBAL
|
||||
val global = value == Repository.INSISTENT_MAX_PRIORITY_USE_GLOBAL
|
||||
val enabled = if (global) repository.getInsistentMaxPriorityEnabled() else value == Repository.INSISTENT_MAX_PRIORITY_ENABLED
|
||||
val summary = if (enabled) {
|
||||
getString(R.string.settings_notifications_insistent_max_priority_summary_enabled)
|
||||
pref?.summaryProvider = Preference.SummaryProvider<EditTextPreference> { pref ->
|
||||
if (TextUtils.isEmpty(pref.text)) {
|
||||
"No password set"
|
||||
} else {
|
||||
getString(R.string.settings_notifications_insistent_max_priority_summary_disabled)
|
||||
"Password saved"
|
||||
}
|
||||
maybeAppendGlobal(summary, global)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -338,7 +283,7 @@ class DetailSettingsActivity : AppCompatActivity() {
|
|||
iconSetPref = findPreference(prefId) ?: return
|
||||
iconSetPref.isVisible = subscription.icon == null
|
||||
iconSetPref.preferenceDataStore = object : PreferenceDataStore() { } // Dummy store to protect from accidentally overwriting
|
||||
iconSetPref.onPreferenceClickListener = Preference.OnPreferenceClickListener {
|
||||
iconSetPref.onPreferenceClickListener = Preference.OnPreferenceClickListener { _ ->
|
||||
iconSetLauncher.launch("image/*")
|
||||
true
|
||||
}
|
||||
|
@ -349,7 +294,7 @@ class DetailSettingsActivity : AppCompatActivity() {
|
|||
iconRemovePref = findPreference(prefId) ?: return
|
||||
iconRemovePref.isVisible = subscription.icon != null
|
||||
iconRemovePref.preferenceDataStore = object : PreferenceDataStore() { } // Dummy store to protect from accidentally overwriting
|
||||
iconRemovePref.onPreferenceClickListener = Preference.OnPreferenceClickListener {
|
||||
iconRemovePref.onPreferenceClickListener = Preference.OnPreferenceClickListener { _ ->
|
||||
iconRemovePref.isVisible = false
|
||||
iconSetPref.isVisible = true
|
||||
deleteIcon(subscription.icon)
|
||||
|
@ -376,17 +321,16 @@ class DetailSettingsActivity : AppCompatActivity() {
|
|||
pref?.dialogMessage = getString(R.string.detail_settings_appearance_display_name_message, topicShortUrl(subscription.baseUrl, subscription.topic))
|
||||
pref?.preferenceDataStore = object : PreferenceDataStore() {
|
||||
override fun putString(key: String?, value: String?) {
|
||||
val displayName = if (value != "") value else null
|
||||
val displayName: String? = if (value == "") {
|
||||
null
|
||||
} else {
|
||||
value
|
||||
}
|
||||
val newSubscription = subscription.copy(displayName = displayName)
|
||||
save(newSubscription)
|
||||
// Update activity title
|
||||
activity?.runOnUiThread {
|
||||
activity?.title = displayName(newSubscription)
|
||||
}
|
||||
// Update dedicated notification channel
|
||||
if (newSubscription.dedicatedChannels) {
|
||||
notificationService.createSubscriptionNotificationChannels(newSubscription)
|
||||
}
|
||||
}
|
||||
override fun getString(key: String?, defValue: String?): String {
|
||||
return subscription.displayName ?: ""
|
||||
|
@ -476,7 +420,7 @@ class DetailSettingsActivity : AppCompatActivity() {
|
|||
return null
|
||||
}
|
||||
val file = File(dir, subscription.id.toString())
|
||||
return FileProvider.getUriForFile(requireContext(), DownloadAttachmentWorker.FILE_PROVIDER_AUTHORITY, file)
|
||||
return FileProvider.getUriForFile(requireContext(), DownloadWorker.FILE_PROVIDER_AUTHORITY, file)
|
||||
}
|
||||
|
||||
private fun deleteIcon(uri: String?) {
|
||||
|
|
|
@ -21,7 +21,7 @@ class DetailViewModel(private val repository: Repository) : ViewModel() {
|
|||
|
||||
class DetailViewModelFactory(private val repository: Repository) : ViewModelProvider.Factory {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override fun <T : ViewModel> create(modelClass: Class<T>): T =
|
||||
override fun <T : ViewModel?> create(modelClass: Class<T>) =
|
||||
with(modelClass){
|
||||
when {
|
||||
isAssignableFrom(DetailViewModel::class.java) -> DetailViewModel(repository) as T
|
||||
|
|
|
@ -1,12 +1,10 @@
|
|||
package io.heckel.ntfy.ui
|
||||
|
||||
import android.Manifest
|
||||
import android.animation.Animator
|
||||
import android.animation.AnimatorListenerAdapter
|
||||
import android.app.AlertDialog
|
||||
import android.content.ActivityNotFoundException
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
|
@ -22,7 +20,6 @@ import android.widget.Toast
|
|||
import androidx.activity.viewModels
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
|
@ -35,9 +32,8 @@ import io.heckel.ntfy.app.Application
|
|||
import io.heckel.ntfy.db.Repository
|
||||
import io.heckel.ntfy.db.Subscription
|
||||
import io.heckel.ntfy.firebase.FirebaseMessenger
|
||||
import io.heckel.ntfy.util.Log
|
||||
import io.heckel.ntfy.msg.ApiService
|
||||
import io.heckel.ntfy.msg.DownloadManager
|
||||
import io.heckel.ntfy.msg.DownloadType
|
||||
import io.heckel.ntfy.msg.NotificationDispatcher
|
||||
import io.heckel.ntfy.service.SubscriberService
|
||||
import io.heckel.ntfy.service.SubscriberServiceManager
|
||||
|
@ -210,16 +206,18 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc
|
|||
schedulePeriodicServiceRestartWorker()
|
||||
schedulePeriodicDeleteWorker()
|
||||
|
||||
// Permissions
|
||||
maybeRequestNotificationPermission()
|
||||
testenc()
|
||||
}
|
||||
|
||||
private fun maybeRequestNotificationPermission() {
|
||||
// Android 13 (SDK 33) requires that we ask for permission to post notifications
|
||||
// https://developer.android.com/develop/ui/views/notifications/notification-permission
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_DENIED) {
|
||||
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.POST_NOTIFICATIONS), 0)
|
||||
fun testenc() {
|
||||
try {
|
||||
val key = Encryption.deriveKey("secr3t password", "https://ntfy.sh/mysecret")
|
||||
Log.d("encryption", "key ${key.toHex()}")
|
||||
val ciphertext = "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..vbe1Qv_-mKYbUgce.EfmOUIUi7lxXZG_o4bqXZ9pmpr1Rzs4Y5QLE2XD2_aw_SQ.y2hadrN5b2LEw7_PJHhbcA"
|
||||
val plaintext = Encryption.decrypt(ciphertext, key)
|
||||
Log.d("encryption", "decryptString: $plaintext")
|
||||
} catch (e: Exception) {
|
||||
Log.e("encryption", "failed", e)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -397,10 +395,6 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc
|
|||
}
|
||||
true
|
||||
}
|
||||
R.id.main_menu_donate -> {
|
||||
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.main_menu_donate_url))))
|
||||
true
|
||||
}
|
||||
R.id.main_menu_docs -> {
|
||||
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.main_menu_docs_url))))
|
||||
true
|
||||
|
@ -450,16 +444,15 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc
|
|||
baseUrl = baseUrl,
|
||||
topic = topic,
|
||||
instant = instant,
|
||||
dedicatedChannels = false,
|
||||
mutedUntil = 0,
|
||||
minPriority = Repository.MIN_PRIORITY_USE_GLOBAL,
|
||||
autoDelete = Repository.AUTO_DELETE_USE_GLOBAL,
|
||||
insistent = Repository.INSISTENT_MAX_PRIORITY_USE_GLOBAL,
|
||||
lastNotificationId = null,
|
||||
icon = null,
|
||||
upAppId = null,
|
||||
upConnectorToken = null,
|
||||
displayName = null,
|
||||
encryptionKey = null,
|
||||
totalCount = 0,
|
||||
newCount = 0,
|
||||
lastActive = Date().time/1000
|
||||
|
@ -476,13 +469,10 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc
|
|||
lifecycleScope.launch(Dispatchers.IO) {
|
||||
try {
|
||||
val user = repository.getUser(subscription.baseUrl) // May be null
|
||||
val notifications = api.poll(subscription.id, subscription.baseUrl, subscription.topic, user)
|
||||
notifications.forEach { notification ->
|
||||
repository.addNotification(notification)
|
||||
if (notification.icon != null) {
|
||||
DownloadManager.enqueue(this@MainActivity, notification.id, userAction = false, DownloadType.ICON)
|
||||
}
|
||||
}
|
||||
val notifications = api
|
||||
.poll(subscription.id, subscription.baseUrl, subscription.topic, user)
|
||||
.map { n -> Encryption.maybeDecrypt(subscription, n) }
|
||||
notifications.forEach { notification -> repository.addNotification(notification) }
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Unable to fetch notifications: ${e.message}", e)
|
||||
}
|
||||
|
@ -518,7 +508,9 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc
|
|||
Log.d(TAG, "subscription: ${subscription}")
|
||||
try {
|
||||
val user = repository.getUser(subscription.baseUrl) // May be null
|
||||
val notifications = api.poll(subscription.id, subscription.baseUrl, subscription.topic, user, subscription.lastNotificationId)
|
||||
val notifications = api
|
||||
.poll(subscription.id, subscription.baseUrl, subscription.topic, user, subscription.lastNotificationId)
|
||||
.map { n -> Encryption.maybeDecrypt(subscription, n) }
|
||||
val newNotifications = repository.onlyNewNotifications(subscription.id, notifications)
|
||||
newNotifications.forEach { notification ->
|
||||
newNotificationsCount++
|
||||
|
@ -622,7 +614,7 @@ class MainActivity : AppCompatActivity(), ActionMode.Callback, AddFragment.Subsc
|
|||
dialog.setOnShowListener {
|
||||
dialog
|
||||
.getButton(AlertDialog.BUTTON_POSITIVE)
|
||||
.dangerButton(this)
|
||||
.setTextAppearance(R.style.DangerText)
|
||||
}
|
||||
dialog.show()
|
||||
}
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
package io.heckel.ntfy.ui
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.BitmapFactory
|
||||
import android.graphics.Color
|
||||
import android.net.Uri
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
|
@ -15,8 +17,10 @@ import io.heckel.ntfy.R
|
|||
import io.heckel.ntfy.db.ConnectionState
|
||||
import io.heckel.ntfy.db.Repository
|
||||
import io.heckel.ntfy.db.Subscription
|
||||
import io.heckel.ntfy.util.displayName
|
||||
import io.heckel.ntfy.msg.NotificationService
|
||||
import io.heckel.ntfy.util.Log
|
||||
import io.heckel.ntfy.util.readBitmapFromUriOrNull
|
||||
import io.heckel.ntfy.util.displayName
|
||||
import java.text.DateFormat
|
||||
import java.util.*
|
||||
|
||||
|
@ -96,8 +100,6 @@ class MainAdapter(private val repository: Repository, private val onClick: (Subs
|
|||
val showMutedUntilIcon = !showMutedForeverIcon && (subscription.mutedUntil > 1L || globalMutedUntil > 1L) && !isUnifiedPush
|
||||
if (subscription.icon != null) {
|
||||
imageView.setImageBitmap(subscription.icon.readBitmapFromUriOrNull(context))
|
||||
} else {
|
||||
imageView.setImageResource(R.drawable.ic_sms_gray_24dp)
|
||||
}
|
||||
nameView.text = displayName(subscription)
|
||||
statusView.text = statusMessage
|
||||
|
@ -117,7 +119,7 @@ class MainAdapter(private val repository: Repository, private val onClick: (Subs
|
|||
if (selected.contains(subscription.id)) {
|
||||
itemView.setBackgroundResource(Colors.itemSelectedBackground(context))
|
||||
} else {
|
||||
itemView.setBackgroundColor(Color.TRANSPARENT)
|
||||
itemView.setBackgroundColor(Color.TRANSPARENT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,71 +0,0 @@
|
|||
package io.heckel.ntfy.ui
|
||||
|
||||
import android.content.res.Configuration
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.WindowInsetsController
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import io.heckel.ntfy.R
|
||||
import io.heckel.ntfy.databinding.MainSettingsActivityBinding
|
||||
|
||||
class MainSettingsActivity : AppCompatActivity() {
|
||||
|
||||
private lateinit var mBinding: MainSettingsActivityBinding
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.R)
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
mBinding = MainSettingsActivityBinding.inflate(layoutInflater)
|
||||
setContentView(mBinding.root)
|
||||
|
||||
setupToolbar()
|
||||
setSystemBarsAppearance()
|
||||
showPreferencesFragment()
|
||||
}
|
||||
|
||||
private fun setupToolbar() {
|
||||
mBinding.toolbar.setNavigationOnClickListener {
|
||||
onBackPressedDispatcher.onBackPressed()
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.R)
|
||||
private fun setSystemBarsAppearance() {
|
||||
val insetsController = window.insetsController ?: return
|
||||
|
||||
val isLightMode = isSystemInLightMode()
|
||||
if (isLightMode) {
|
||||
insetsController.setSystemBarsAppearance(
|
||||
WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS,
|
||||
WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
|
||||
)
|
||||
insetsController.setSystemBarsAppearance(
|
||||
WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS,
|
||||
WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS
|
||||
)
|
||||
} else {
|
||||
insetsController.setSystemBarsAppearance(
|
||||
0,
|
||||
WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
|
||||
)
|
||||
insetsController.setSystemBarsAppearance(
|
||||
0,
|
||||
WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun isSystemInLightMode(): Boolean {
|
||||
val nightModeFlags = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
|
||||
return nightModeFlags != Configuration.UI_MODE_NIGHT_YES
|
||||
}
|
||||
|
||||
private fun showPreferencesFragment() {
|
||||
supportFragmentManager
|
||||
.beginTransaction()
|
||||
.replace(R.id.fragment_container, PreferencesFragment())
|
||||
.commit()
|
||||
}
|
||||
}
|
|
@ -8,8 +8,10 @@ import androidx.lifecycle.ViewModelProvider
|
|||
import androidx.lifecycle.viewModelScope
|
||||
import io.heckel.ntfy.db.*
|
||||
import io.heckel.ntfy.up.Distributor
|
||||
import io.heckel.ntfy.util.Log
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlin.collections.List
|
||||
|
||||
class SubscriptionsViewModel(private val repository: Repository) : ViewModel() {
|
||||
fun list(): LiveData<List<Subscription>> {
|
||||
|
@ -49,7 +51,7 @@ class SubscriptionsViewModel(private val repository: Repository) : ViewModel() {
|
|||
|
||||
class SubscriptionsViewModelFactory(private val repository: Repository) : ViewModelProvider.Factory {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override fun <T : ViewModel> create(modelClass: Class<T>): T =
|
||||
override fun <T : ViewModel?> create(modelClass: Class<T>) =
|
||||
with(modelClass){
|
||||
when {
|
||||
isAssignableFrom(SubscriptionsViewModel::class.java) -> SubscriptionsViewModel(repository) as T
|
||||
|
|
|
@ -8,6 +8,7 @@ import android.widget.RadioButton
|
|||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import io.heckel.ntfy.R
|
||||
import io.heckel.ntfy.db.Database
|
||||
import io.heckel.ntfy.db.Repository
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
|
|
|
@ -1,37 +0,0 @@
|
|||
package io.heckel.ntfy.ui
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.view.Menu
|
||||
import android.view.MenuInflater
|
||||
import android.view.MenuItem
|
||||
import android.widget.Toolbar
|
||||
import androidx.preference.PreferenceFragmentCompat
|
||||
import androidx.preference.SwitchPreferenceCompat
|
||||
import io.heckel.ntfy.R
|
||||
import io.heckel.ntfy.service.SubscriberService
|
||||
import io.heckel.ntfy.util.Log
|
||||
|
||||
class PreferencesFragment : PreferenceFragmentCompat() {
|
||||
|
||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||
setPreferencesFromResource(R.xml.settings_preferences, rootKey)
|
||||
|
||||
val preference: SwitchPreferenceCompat? =
|
||||
findPreference(getString(R.string.eos_preference_key_is_enabled))
|
||||
|
||||
preference?.setOnPreferenceChangeListener { _, newValue ->
|
||||
val isChecked = newValue as Boolean
|
||||
val intent = Intent(context, SubscriberService::class.java)
|
||||
intent.action = if (isChecked) {
|
||||
SubscriberService.Action.START.name
|
||||
} else {
|
||||
SubscriberService.Action.STOP.name
|
||||
}
|
||||
|
||||
requireContext().startService(intent)
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
|
@ -85,7 +85,7 @@ class SettingsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPrefere
|
|||
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
super.onSaveInstanceState(outState)
|
||||
// Save current activity title, so we can set it again after a configuration change
|
||||
// Save current activity title so we can set it again after a configuration change
|
||||
outState.putCharSequence(TITLE_TAG, title)
|
||||
}
|
||||
|
||||
|
@ -165,8 +165,9 @@ class SettingsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPrefere
|
|||
return repository.getGlobalMutedUntil().toString()
|
||||
}
|
||||
}
|
||||
mutedUntil?.summaryProvider = Preference.SummaryProvider<ListPreference> {
|
||||
when (val mutedUntilValue = repository.getGlobalMutedUntil()) {
|
||||
mutedUntil?.summaryProvider = Preference.SummaryProvider<ListPreference> { _ ->
|
||||
val mutedUntilValue = repository.getGlobalMutedUntil()
|
||||
when (mutedUntilValue) {
|
||||
Repository.MUTED_UNTIL_SHOW_ALL -> getString(R.string.settings_notifications_muted_until_show_all)
|
||||
Repository.MUTED_UNTIL_FOREVER -> getString(R.string.settings_notifications_muted_until_forever)
|
||||
else -> {
|
||||
|
@ -190,9 +191,10 @@ class SettingsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPrefere
|
|||
}
|
||||
}
|
||||
minPriority?.summaryProvider = Preference.SummaryProvider<ListPreference> { pref ->
|
||||
when (val minPriorityValue = pref.value.toIntOrNull() ?: 1) { // 1/low means all priorities
|
||||
PRIORITY_MIN -> getString(R.string.settings_notifications_min_priority_summary_any)
|
||||
PRIORITY_MAX -> getString(R.string.settings_notifications_min_priority_summary_max)
|
||||
val minPriorityValue = pref.value.toIntOrNull() ?: 1 // 1/low means all priorities
|
||||
when (minPriorityValue) {
|
||||
1 -> getString(R.string.settings_notifications_min_priority_summary_any)
|
||||
5 -> getString(R.string.settings_notifications_min_priority_summary_max)
|
||||
else -> {
|
||||
val minPriorityString = toPriorityString(requireContext(), minPriorityValue)
|
||||
getString(R.string.settings_notifications_min_priority_summary_x_or_higher, minPriorityValue, minPriorityString)
|
||||
|
@ -200,26 +202,6 @@ class SettingsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPrefere
|
|||
}
|
||||
}
|
||||
|
||||
// Keep alerting for max priority
|
||||
val insistentMaxPriorityPrefId = context?.getString(R.string.settings_notifications_insistent_max_priority_key) ?: return
|
||||
val insistentMaxPriority: SwitchPreference? = findPreference(insistentMaxPriorityPrefId)
|
||||
insistentMaxPriority?.isChecked = repository.getInsistentMaxPriorityEnabled()
|
||||
insistentMaxPriority?.preferenceDataStore = object : PreferenceDataStore() {
|
||||
override fun putBoolean(key: String?, value: Boolean) {
|
||||
repository.setInsistentMaxPriorityEnabled(value)
|
||||
}
|
||||
override fun getBoolean(key: String?, defValue: Boolean): Boolean {
|
||||
return repository.getInsistentMaxPriorityEnabled()
|
||||
}
|
||||
}
|
||||
insistentMaxPriority?.summaryProvider = Preference.SummaryProvider<SwitchPreference> { pref ->
|
||||
if (pref.isChecked) {
|
||||
getString(R.string.settings_notifications_insistent_max_priority_summary_enabled)
|
||||
} else {
|
||||
getString(R.string.settings_notifications_insistent_max_priority_summary_disabled)
|
||||
}
|
||||
}
|
||||
|
||||
// Channel settings
|
||||
val channelPrefsPrefId = context?.getString(R.string.settings_notifications_channel_prefs_key) ?: return
|
||||
val channelPrefs: Preference? = findPreference(channelPrefsPrefId)
|
||||
|
@ -248,7 +230,8 @@ class SettingsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPrefere
|
|||
}
|
||||
}
|
||||
autoDownload?.summaryProvider = Preference.SummaryProvider<ListPreference> { pref ->
|
||||
when (val maxSize = pref.value.toLongOrNull() ?: repository.getAutoDownloadMaxSize()) {
|
||||
val maxSize = pref.value.toLongOrNull() ?: repository.getAutoDownloadMaxSize()
|
||||
when (maxSize) {
|
||||
Repository.AUTO_DOWNLOAD_NEVER -> getString(R.string.settings_notifications_auto_download_summary_never)
|
||||
Repository.AUTO_DOWNLOAD_ALWAYS -> getString(R.string.settings_notifications_auto_download_summary_always)
|
||||
else -> getString(R.string.settings_notifications_auto_download_summary_smaller_than_x, formatBytes(maxSize, decimals = 0))
|
||||
|
@ -280,7 +263,8 @@ class SettingsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPrefere
|
|||
}
|
||||
}
|
||||
autoDelete?.summaryProvider = Preference.SummaryProvider<ListPreference> { pref ->
|
||||
when (pref.value.toLongOrNull() ?: repository.getAutoDeleteSeconds()) {
|
||||
val seconds = pref.value.toLongOrNull() ?: repository.getAutoDeleteSeconds()
|
||||
when (seconds) {
|
||||
Repository.AUTO_DELETE_NEVER -> getString(R.string.settings_notifications_auto_delete_summary_never)
|
||||
Repository.AUTO_DELETE_ONE_DAY_SECONDS -> getString(R.string.settings_notifications_auto_delete_summary_one_day)
|
||||
Repository.AUTO_DELETE_THREE_DAYS_SECONDS -> getString(R.string.settings_notifications_auto_delete_summary_three_days)
|
||||
|
@ -364,26 +348,6 @@ class SettingsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPrefere
|
|||
}
|
||||
}
|
||||
|
||||
// Enable UnifiedPush
|
||||
val unifiedPushEnabledPrefId = context?.getString(R.string.settings_advanced_unifiedpush_key) ?: return
|
||||
val unifiedPushEnabled: SwitchPreference? = findPreference(unifiedPushEnabledPrefId)
|
||||
unifiedPushEnabled?.isChecked = repository.getUnifiedPushEnabled()
|
||||
unifiedPushEnabled?.preferenceDataStore = object : PreferenceDataStore() {
|
||||
override fun putBoolean(key: String?, value: Boolean) {
|
||||
repository.setUnifiedPushEnabled(value)
|
||||
}
|
||||
override fun getBoolean(key: String?, defValue: Boolean): Boolean {
|
||||
return repository.getUnifiedPushEnabled()
|
||||
}
|
||||
}
|
||||
unifiedPushEnabled?.summaryProvider = Preference.SummaryProvider<SwitchPreference> { pref ->
|
||||
if (pref.isChecked) {
|
||||
getString(R.string.settings_advanced_unifiedpush_summary_enabled)
|
||||
} else {
|
||||
getString(R.string.settings_advanced_unifiedpush_summary_disabled)
|
||||
}
|
||||
}
|
||||
|
||||
// Export logs
|
||||
val exportLogsPrefId = context?.getString(R.string.settings_advanced_export_logs_key) ?: return
|
||||
val exportLogs: ListPreference? = findPreference(exportLogsPrefId)
|
||||
|
@ -431,7 +395,7 @@ class SettingsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPrefere
|
|||
getString(R.string.settings_advanced_record_logs_summary_disabled)
|
||||
}
|
||||
}
|
||||
recordLogsEnabled?.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, _ ->
|
||||
recordLogsEnabled?.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, v ->
|
||||
lifecycleScope.launch(Dispatchers.IO) {
|
||||
repository.getSubscriptions().forEach { s ->
|
||||
Log.addScrubTerm(shortUrl(s.baseUrl), Log.TermType.Domain)
|
||||
|
@ -476,7 +440,7 @@ class SettingsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPrefere
|
|||
backup?.preferenceDataStore = object : PreferenceDataStore() { } // Dummy store to protect from accidentally overwriting
|
||||
backup?.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, v ->
|
||||
backupSelection = v.toString()
|
||||
val timestamp = SimpleDateFormat("yyMMdd-HHmm").format(Date())
|
||||
val timestamp = SimpleDateFormat("yyMMdd-HHmm").format(Date());
|
||||
val suggestedFilename = when (backupSelection) {
|
||||
BACKUP_EVERYTHING_NO_USERS -> "ntfy-backup-no-users-$timestamp.json"
|
||||
BACKUP_SETTINGS_ONLY -> "ntfy-settings-$timestamp.json"
|
||||
|
@ -623,9 +587,10 @@ class SettingsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPrefere
|
|||
throw Exception("Unexpected response ${response.code}")
|
||||
}
|
||||
val body = response.body?.string()?.trim()
|
||||
if (body.isNullOrEmpty()) throw Exception("Return body is empty")
|
||||
if (body == null || body.isEmpty()) throw Exception("Return body is empty")
|
||||
Log.d(TAG, "Logs uploaded successfully: $body")
|
||||
val resp = gson.fromJson(body.toString(), NopasteResponse::class.java)
|
||||
val context = context ?: return@launch
|
||||
requireActivity().runOnUiThread {
|
||||
val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
||||
val clip = ClipData.newPlainText("logs URL", resp.url)
|
||||
|
@ -641,6 +606,7 @@ class SettingsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPrefere
|
|||
}
|
||||
} catch (e: Exception) {
|
||||
Log.w(TAG, "Error uploading logs", e)
|
||||
val context = context ?: return@launch
|
||||
requireActivity().runOnUiThread {
|
||||
Toast
|
||||
.makeText(context, getString(R.string.settings_advanced_export_logs_error_uploading, e.message), Toast.LENGTH_LONG)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package io.heckel.ntfy.ui
|
||||
|
||||
import android.content.Intent
|
||||
import android.graphics.BitmapFactory
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.os.Parcelable
|
||||
|
@ -294,7 +295,7 @@ class ShareActivity : AppCompatActivity() {
|
|||
.show()
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
val errorMessage = if (e is ApiService.UnauthorizedException) {
|
||||
val message = if (e is ApiService.UnauthorizedException) {
|
||||
if (e.user != null) {
|
||||
getString(R.string.detail_test_message_error_unauthorized_user, e.user.username)
|
||||
} else {
|
||||
|
@ -307,7 +308,7 @@ class ShareActivity : AppCompatActivity() {
|
|||
}
|
||||
runOnUiThread {
|
||||
progress.visibility = View.GONE
|
||||
errorText.text = errorMessage
|
||||
errorText.text = message
|
||||
errorImage.visibility = View.VISIBLE
|
||||
errorText.visibility = View.VISIBLE
|
||||
}
|
||||
|
@ -325,7 +326,7 @@ class ShareActivity : AppCompatActivity() {
|
|||
contentText.text.isNotEmpty() && topicText.text.isNotEmpty()
|
||||
}
|
||||
sendItem.isEnabled = enabled
|
||||
sendItem.icon?.alpha = if (enabled) 255 else 130
|
||||
sendItem.icon.alpha = if (enabled) 255 else 130
|
||||
}
|
||||
|
||||
private fun getBaseUrl(): String {
|
||||
|
|
|
@ -3,17 +3,19 @@ package io.heckel.ntfy.ui
|
|||
import android.app.AlertDialog
|
||||
import android.app.Dialog
|
||||
import android.content.Context
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.text.Editable
|
||||
import android.text.TextWatcher
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import android.widget.Button
|
||||
import android.widget.TextView
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import com.google.android.material.textfield.TextInputEditText
|
||||
import io.heckel.ntfy.R
|
||||
import io.heckel.ntfy.db.User
|
||||
import io.heckel.ntfy.util.AfterChangedTextWatcher
|
||||
import io.heckel.ntfy.util.dangerButton
|
||||
import io.heckel.ntfy.util.validUrl
|
||||
|
||||
class UserFragment : DialogFragment() {
|
||||
|
@ -96,14 +98,28 @@ class UserFragment : DialogFragment() {
|
|||
|
||||
// Delete button should be red
|
||||
if (user != null) {
|
||||
dialog
|
||||
.getButton(AlertDialog.BUTTON_NEUTRAL)
|
||||
.dangerButton(requireContext())
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
dialog
|
||||
.getButton(AlertDialog.BUTTON_NEUTRAL)
|
||||
.setTextAppearance(R.style.DangerText)
|
||||
} else {
|
||||
dialog
|
||||
.getButton(AlertDialog.BUTTON_NEUTRAL)
|
||||
.setTextColor(ContextCompat.getColor(requireContext(), Colors.dangerText(requireContext())))
|
||||
}
|
||||
}
|
||||
|
||||
// Validate input when typing
|
||||
val textWatcher = AfterChangedTextWatcher {
|
||||
validateInput()
|
||||
val textWatcher = object : TextWatcher {
|
||||
override fun afterTextChanged(s: Editable?) {
|
||||
validateInput()
|
||||
}
|
||||
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
|
||||
// Nothing
|
||||
}
|
||||
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
|
||||
// Nothing
|
||||
}
|
||||
}
|
||||
baseUrlView.addTextChangedListener(textWatcher)
|
||||
usernameView.addTextChangedListener(textWatcher)
|
||||
|
@ -124,7 +140,7 @@ class UserFragment : DialogFragment() {
|
|||
}
|
||||
|
||||
// Show keyboard when the dialog is shown (see https://stackoverflow.com/a/19573049/1440785)
|
||||
dialog.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)
|
||||
dialog.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
|
||||
|
||||
return dialog
|
||||
}
|
||||
|
|
|
@ -10,10 +10,12 @@ import io.heckel.ntfy.service.SubscriberServiceManager
|
|||
import io.heckel.ntfy.util.*
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.sync.Mutex
|
||||
import kotlinx.coroutines.sync.withLock
|
||||
import java.util.*
|
||||
import kotlin.random.Random
|
||||
|
||||
/**
|
||||
* This is the UnifiedPush broadcast receiver to handle the distributor actions REGISTER and UNREGISTER.
|
||||
|
@ -38,11 +40,6 @@ class BroadcastReceiver : android.content.BroadcastReceiver() {
|
|||
val repository = app.repository
|
||||
val distributor = Distributor(app)
|
||||
Log.d(TAG, "REGISTER received for app $appId (connectorToken=$connectorToken)")
|
||||
if (!repository.getUnifiedPushEnabled()) {
|
||||
Log.w(TAG, "Refusing registration because 'EnableUP' is disabled")
|
||||
distributor.sendRegistrationFailed(appId, connectorToken, "UnifiedPush is disabled in ntfy")
|
||||
return
|
||||
}
|
||||
if (appId.isBlank()) {
|
||||
Log.w(TAG, "Refusing registration: Empty application")
|
||||
distributor.sendRegistrationFailed(appId, connectorToken, "Empty application string")
|
||||
|
@ -75,16 +72,15 @@ class BroadcastReceiver : android.content.BroadcastReceiver() {
|
|||
baseUrl = baseUrl,
|
||||
topic = topic,
|
||||
instant = true, // No Firebase, always instant!
|
||||
dedicatedChannels = false,
|
||||
mutedUntil = 0,
|
||||
minPriority = Repository.MIN_PRIORITY_USE_GLOBAL,
|
||||
autoDelete = Repository.AUTO_DELETE_USE_GLOBAL,
|
||||
insistent = Repository.INSISTENT_MAX_PRIORITY_USE_GLOBAL,
|
||||
lastNotificationId = null,
|
||||
icon = null,
|
||||
upAppId = appId,
|
||||
upConnectorToken = connectorToken,
|
||||
displayName = null,
|
||||
encryptionKey = null,
|
||||
totalCount = 0,
|
||||
newCount = 0,
|
||||
lastActive = Date().time/1000
|
||||
|
|
|
@ -10,7 +10,7 @@ import io.heckel.ntfy.util.Log
|
|||
*/
|
||||
class Distributor(val context: Context) {
|
||||
fun sendMessage(app: String, connectorToken: String, message: ByteArray) {
|
||||
Log.d(TAG, "Sending MESSAGE to $app (token=$connectorToken): ${message.size} bytes")
|
||||
Log.d(TAG, "Sending MESSAGE to $app (token=$connectorToken): ${String(message)} (${message.size} bytes)}")
|
||||
val broadcastIntent = Intent()
|
||||
broadcastIntent.`package` = app
|
||||
broadcastIntent.action = ACTION_MESSAGE
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
package io.heckel.ntfy.util
|
||||
|
||||
const val ANDROID_APP_MIME_TYPE = "application/vnd.android.package-archive"
|
||||
|
||||
const val PRIORITY_MIN = 1
|
||||
const val PRIORITY_LOW = 2
|
||||
const val PRIORITY_DEFAULT = 3
|
||||
const val PRIORITY_HIGH = 4
|
||||
const val PRIORITY_MAX = 5
|
||||
|
||||
val ALL_PRIORITIES = listOf(PRIORITY_MIN, PRIORITY_LOW, PRIORITY_DEFAULT, PRIORITY_HIGH, PRIORITY_MAX)
|
68
app/src/main/java/io/heckel/ntfy/util/Encryption.kt
Normal file
68
app/src/main/java/io/heckel/ntfy/util/Encryption.kt
Normal file
|
@ -0,0 +1,68 @@
|
|||
package io.heckel.ntfy.util
|
||||
|
||||
import android.util.Base64
|
||||
import io.heckel.ntfy.db.Notification
|
||||
import io.heckel.ntfy.db.Subscription
|
||||
import io.heckel.ntfy.msg.NotificationParser
|
||||
import java.security.MessageDigest
|
||||
import javax.crypto.Cipher
|
||||
import javax.crypto.SecretKeyFactory
|
||||
import javax.crypto.spec.GCMParameterSpec
|
||||
import javax.crypto.spec.PBEKeySpec
|
||||
import javax.crypto.spec.SecretKeySpec
|
||||
|
||||
fun ByteArray.toHex(): String = joinToString(separator = "") { eachByte -> "%02x".format(eachByte) }
|
||||
|
||||
object Encryption {
|
||||
private const val TAG = "NtfyEncryption"
|
||||
private const val keyDerivIter = 50000
|
||||
private const val keyLenBits = 256
|
||||
private const val gcmTagLenBits = 128
|
||||
private const val encodingJwe = "jwe"
|
||||
private val parser = NotificationParser()
|
||||
|
||||
fun maybeDecrypt(subscription: Subscription, notification: Notification): Notification {
|
||||
if (notification.encoding != encodingJwe) {
|
||||
return notification
|
||||
} else if (subscription.encryptionKey == null) {
|
||||
Log.w(TAG, "Notification is encrypted, but key is missing: $notification; leaving encrypted message intact")
|
||||
return notification
|
||||
}
|
||||
return try {
|
||||
val plaintext = decrypt(notification.message, subscription.encryptionKey)
|
||||
val decryptedNotification = parser.parse(plaintext) ?: throw Exception("Cannot parse decrypted message: $plaintext")
|
||||
if (decryptedNotification.id != notification.id || decryptedNotification.timestamp != notification.timestamp) {
|
||||
throw Exception("Message ID or timestamp mismatch in decrypted message: $plaintext")
|
||||
}
|
||||
decryptedNotification
|
||||
} catch (e: Exception) {
|
||||
Log.w(TAG, "Unable to decrypt message, falling back to original", e)
|
||||
notification
|
||||
}
|
||||
}
|
||||
|
||||
fun deriveKey(password: String, topicUrl: String): ByteArray {
|
||||
val salt = MessageDigest.getInstance("SHA-256").digest(topicUrl.toByteArray())
|
||||
val factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256")
|
||||
val spec = PBEKeySpec(password.toCharArray(), salt, keyDerivIter, keyLenBits)
|
||||
return factory.generateSecret(spec).encoded
|
||||
}
|
||||
|
||||
fun decrypt(input: String, key: ByteArray): String {
|
||||
val parts = input.split(".")
|
||||
if (parts.size != 5 || parts[1] != "") {
|
||||
throw Exception("Unexpected format")
|
||||
}
|
||||
val encodedHeader = parts[0]
|
||||
val iv = Base64.decode(parts[2], Base64.URL_SAFE)
|
||||
val ciphertext = Base64.decode(parts[3], Base64.URL_SAFE)
|
||||
val tag = Base64.decode(parts[4], Base64.URL_SAFE)
|
||||
val ciphertextWithTag = ciphertext + tag
|
||||
val secretKeySpec = SecretKeySpec(key, "AES")
|
||||
val gcmParameterSpec = GCMParameterSpec(gcmTagLenBits, iv)
|
||||
val cipher: Cipher = Cipher.getInstance("AES/GCM/NoPadding")
|
||||
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, gcmParameterSpec)
|
||||
cipher.updateAAD(encodedHeader.toByteArray())
|
||||
return String(cipher.doFinal(ciphertextWithTag))
|
||||
}
|
||||
}
|
|
@ -22,16 +22,12 @@ import android.util.Base64
|
|||
import android.util.TypedValue
|
||||
import android.view.View
|
||||
import android.view.Window
|
||||
import android.widget.Button
|
||||
import android.widget.ImageView
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.core.content.ContextCompat
|
||||
import io.heckel.ntfy.BuildConfig
|
||||
import io.heckel.ntfy.R
|
||||
import io.heckel.ntfy.db.*
|
||||
import io.heckel.ntfy.msg.MESSAGE_ENCODING_BASE64
|
||||
import io.heckel.ntfy.ui.Colors
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
|
@ -41,10 +37,7 @@ import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
|||
import okhttp3.RequestBody
|
||||
import okio.BufferedSink
|
||||
import okio.source
|
||||
import java.io.File
|
||||
import java.io.FileNotFoundException
|
||||
import java.io.IOException
|
||||
import java.security.MessageDigest
|
||||
import java.io.*
|
||||
import java.security.SecureRandom
|
||||
import java.text.DateFormat
|
||||
import java.text.StringCharacterIterator
|
||||
|
@ -53,6 +46,7 @@ import kotlin.math.abs
|
|||
import kotlin.math.absoluteValue
|
||||
|
||||
fun topicUrl(baseUrl: String, topic: String) = "${baseUrl}/${topic}"
|
||||
fun topicUrl(subscription: Subscription) = topicUrl(subscription.baseUrl, subscription.topic)
|
||||
fun topicUrlUp(baseUrl: String, topic: String) = "${baseUrl}/${topic}?up=1" // UnifiedPush
|
||||
fun topicUrlJson(baseUrl: String, topic: String, since: String) = "${topicUrl(baseUrl, topic)}/json?since=$since"
|
||||
fun topicUrlWs(baseUrl: String, topic: String, since: String) = "${topicUrl(baseUrl, topic)}/ws?since=$since"
|
||||
|
@ -60,12 +54,8 @@ fun topicUrlAuth(baseUrl: String, topic: String) = "${topicUrl(baseUrl, topic)}/
|
|||
fun topicUrlJsonPoll(baseUrl: String, topic: String, since: String) = "${topicUrl(baseUrl, topic)}/json?poll=1&since=$since"
|
||||
fun topicShortUrl(baseUrl: String, topic: String) = shortUrl(topicUrl(baseUrl, topic))
|
||||
|
||||
fun subscriptionTopicShortUrl(subscription: Subscription) : String {
|
||||
return topicShortUrl(subscription.baseUrl, subscription.topic)
|
||||
}
|
||||
|
||||
fun displayName(subscription: Subscription) : String {
|
||||
return subscription.displayName ?: subscriptionTopicShortUrl(subscription)
|
||||
return subscription.displayName ?: topicShortUrl(subscription.baseUrl, subscription.topic)
|
||||
}
|
||||
|
||||
fun shortUrl(url: String) = url
|
||||
|
@ -99,16 +89,17 @@ fun formatDateShort(timestampSecs: Long): String {
|
|||
}
|
||||
|
||||
fun toPriority(priority: Int?): Int {
|
||||
return if (priority != null && ALL_PRIORITIES.contains(priority)) priority else PRIORITY_DEFAULT
|
||||
if (priority != null && (1..5).contains(priority)) return priority
|
||||
else return 3
|
||||
}
|
||||
|
||||
fun toPriorityString(context: Context, priority: Int): String {
|
||||
return when (priority) {
|
||||
PRIORITY_MIN -> context.getString(R.string.settings_notifications_priority_min)
|
||||
PRIORITY_LOW -> context.getString(R.string.settings_notifications_priority_low)
|
||||
PRIORITY_DEFAULT -> context.getString(R.string.settings_notifications_priority_default)
|
||||
PRIORITY_HIGH -> context.getString(R.string.settings_notifications_priority_high)
|
||||
PRIORITY_MAX -> context.getString(R.string.settings_notifications_priority_max)
|
||||
1 -> context.getString(R.string.settings_notifications_priority_min)
|
||||
2 -> context.getString(R.string.settings_notifications_priority_low)
|
||||
3 -> context.getString(R.string.settings_notifications_priority_default)
|
||||
4 -> context.getString(R.string.settings_notifications_priority_high)
|
||||
5 -> context.getString(R.string.settings_notifications_priority_max)
|
||||
else -> context.getString(R.string.settings_notifications_priority_default)
|
||||
}
|
||||
}
|
||||
|
@ -224,6 +215,16 @@ fun maybeAppendActionErrors(message: String, notification: Notification): String
|
|||
}
|
||||
}
|
||||
|
||||
// Checks in the most horrible way if a content URI exists; I couldn't find a better way
|
||||
fun fileExists(context: Context, contentUri: String?): Boolean {
|
||||
return try {
|
||||
fileStat(context, Uri.parse(contentUri)) // Throws if the file does not exist
|
||||
true
|
||||
} catch (_: Exception) {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
// Queries the filename of a content URI
|
||||
fun fileName(context: Context, contentUri: String?, fallbackName: String): String {
|
||||
return try {
|
||||
|
@ -259,14 +260,6 @@ fun fileStat(context: Context, contentUri: Uri?): FileInfo {
|
|||
}
|
||||
}
|
||||
|
||||
fun maybeFileStat(context: Context, contentUri: String?): FileInfo? {
|
||||
return try {
|
||||
fileStat(context, Uri.parse(contentUri)) // Throws if the file does not exist
|
||||
} catch (_: Exception) {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
data class FileInfo(
|
||||
val filename: String,
|
||||
val size: Long,
|
||||
|
@ -325,7 +318,7 @@ fun mimeTypeToIconResource(mimeType: String?): Int {
|
|||
R.drawable.ic_file_video_orange_24dp
|
||||
} else if (mimeType?.startsWith("audio/") == true) {
|
||||
R.drawable.ic_file_audio_purple_24dp
|
||||
} else if (mimeType == ANDROID_APP_MIME_TYPE) {
|
||||
} else if (mimeType == "application/vnd.android.package-archive") {
|
||||
R.drawable.ic_file_app_gray_24dp
|
||||
} else {
|
||||
R.drawable.ic_file_document_blue_24dp
|
||||
|
@ -336,15 +329,6 @@ fun supportedImage(mimeType: String?): Boolean {
|
|||
return listOf("image/jpeg", "image/png").contains(mimeType)
|
||||
}
|
||||
|
||||
// Google Play doesn't allow us to install received .apk files anymore.
|
||||
// See https://github.com/binwiederhier/ntfy/issues/531
|
||||
fun canOpenAttachment(attachment: Attachment?): Boolean {
|
||||
if (attachment?.type == ANDROID_APP_MIME_TYPE && !BuildConfig.INSTALL_PACKAGES_AVAILABLE) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// Check if battery optimization is enabled, see https://stackoverflow.com/a/49098293/1440785
|
||||
fun isIgnoringBatteryOptimizations(context: Context): Boolean {
|
||||
val powerManager = context.applicationContext.getSystemService(Context.POWER_SERVICE) as PowerManager
|
||||
|
@ -425,16 +409,11 @@ fun View.ripple(scope: CoroutineScope) {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
fun Uri.readBitmapFromUri(context: Context): Bitmap {
|
||||
val resolver = context.applicationContext.contentResolver
|
||||
val bitmapStream = resolver.openInputStream(this)
|
||||
val bitmap = BitmapFactory.decodeStream(bitmapStream)
|
||||
if (bitmap.byteCount > 100 * 1024 * 1024) {
|
||||
// If the Bitmap is too large to be rendered (100 MB), it will throw a RuntimeException downstream.
|
||||
// This workaround throws a catchable exception instead. See issue #474. From https://stackoverflow.com/a/53334563/1440785
|
||||
throw Exception("Bitmap too large to draw on Canvas (${bitmap.byteCount} bytes)")
|
||||
}
|
||||
return bitmap
|
||||
return BitmapFactory.decodeStream(bitmapStream)
|
||||
}
|
||||
|
||||
fun String.readBitmapFromUri(context: Context): Bitmap {
|
||||
|
@ -483,29 +462,11 @@ fun ensureSafeNewFile(dir: File, name: String): File {
|
|||
|
||||
fun copyToClipboard(context: Context, notification: Notification) {
|
||||
val message = decodeMessage(notification)
|
||||
val text = message + "\n\n" + formatDateShort(notification.timestamp)
|
||||
val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
||||
val clip = ClipData.newPlainText("notification message", message)
|
||||
val clip = ClipData.newPlainText("notification message", text)
|
||||
clipboard.setPrimaryClip(clip)
|
||||
Toast
|
||||
.makeText(context, context.getString(R.string.detail_copied_to_clipboard_message), Toast.LENGTH_LONG)
|
||||
.show()
|
||||
}
|
||||
|
||||
fun String.sha256(): String {
|
||||
val md = MessageDigest.getInstance("SHA-256")
|
||||
val digest = md.digest(this.toByteArray())
|
||||
return digest.fold("") { str, it -> str + "%02x".format(it) }
|
||||
}
|
||||
|
||||
fun Button.dangerButton(context: Context) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
setTextAppearance(R.style.DangerText)
|
||||
} else {
|
||||
setTextColor(ContextCompat.getColor(context, Colors.dangerText(context)))
|
||||
}
|
||||
}
|
||||
|
||||
fun Long.nullIfZero(): Long? {
|
||||
return if (this == 0L) return null else this
|
||||
}
|
||||
|
||||
|
|
|
@ -2,19 +2,16 @@ package io.heckel.ntfy.work
|
|||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import androidx.core.content.FileProvider
|
||||
import androidx.work.CoroutineWorker
|
||||
import androidx.work.WorkerParameters
|
||||
import io.heckel.ntfy.BuildConfig
|
||||
import io.heckel.ntfy.db.ATTACHMENT_PROGRESS_DELETED
|
||||
import io.heckel.ntfy.db.Repository
|
||||
import io.heckel.ntfy.msg.DownloadIconWorker
|
||||
import io.heckel.ntfy.ui.DetailAdapter
|
||||
import io.heckel.ntfy.util.Log
|
||||
import io.heckel.ntfy.util.maybeFileStat
|
||||
import io.heckel.ntfy.util.topicShortUrl
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import java.io.File
|
||||
|
||||
/**
|
||||
* Deletes notifications marked for deletion and attachments for deleted notifications.
|
||||
|
@ -30,23 +27,8 @@ class DeleteWorker(ctx: Context, params: WorkerParameters) : CoroutineWorker(ctx
|
|||
|
||||
override suspend fun doWork(): Result {
|
||||
return withContext(Dispatchers.IO) {
|
||||
// Run "expired icons" and "expired attachments" before notifications,
|
||||
// so we will also catch manually deleted notifications
|
||||
try {
|
||||
deleteExpiredIcons()
|
||||
} catch (e: Exception) {
|
||||
Log.w(TAG, "Failed to delete expired icons", e)
|
||||
}
|
||||
try {
|
||||
deleteExpiredAttachments()
|
||||
} catch (e: Exception) {
|
||||
Log.w(TAG, "Failed to delete expired attachments", e)
|
||||
}
|
||||
try {
|
||||
deleteExpiredNotifications()
|
||||
} catch (e: Exception) {
|
||||
Log.w(TAG, "Failed to delete expired notifications", e)
|
||||
}
|
||||
deleteExpiredAttachments() // Before notifications, so we will also catch manually deleted notifications
|
||||
deleteExpiredNotifications()
|
||||
return@withContext Result.success()
|
||||
}
|
||||
}
|
||||
|
@ -77,32 +59,6 @@ class DeleteWorker(ctx: Context, params: WorkerParameters) : CoroutineWorker(ctx
|
|||
}
|
||||
}
|
||||
|
||||
private fun deleteExpiredIcons() {
|
||||
Log.d(TAG, "Deleting icons for deleted notifications")
|
||||
val repository = Repository.getInstance(applicationContext)
|
||||
val activeIconUris = repository.getActiveIconUris()
|
||||
val activeIconFilenames = activeIconUris
|
||||
.mapNotNull { maybeFileStat(applicationContext, it)?.filename }
|
||||
.toSet()
|
||||
val iconDir = File(applicationContext.cacheDir, DownloadIconWorker.ICON_CACHE_DIR)
|
||||
val allIconFilenames = iconDir.listFiles()?.map{ file -> file.name }.orEmpty()
|
||||
val filenamesToDelete = allIconFilenames.minus(activeIconFilenames)
|
||||
filenamesToDelete.forEach { filename ->
|
||||
try {
|
||||
val file = File(iconDir, filename)
|
||||
val deleted = file.delete()
|
||||
if (!deleted) {
|
||||
Log.w(TAG, "Unable to delete icon: $filename")
|
||||
}
|
||||
val uri = FileProvider.getUriForFile(applicationContext,
|
||||
DownloadIconWorker.FILE_PROVIDER_AUTHORITY, file).toString()
|
||||
repository.clearIconUri(uri)
|
||||
} catch (e: Exception) {
|
||||
Log.w(TAG, "Failed to delete icon: ${e.message}", e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun deleteExpiredNotifications() {
|
||||
Log.d(TAG, "Deleting expired notifications")
|
||||
val repository = Repository.getInstance(applicationContext)
|
||||
|
@ -128,6 +84,7 @@ class DeleteWorker(ctx: Context, params: WorkerParameters) : CoroutineWorker(ctx
|
|||
val deleteOlderThanTimestamp = (System.currentTimeMillis()/1000) - HARD_DELETE_AFTER_SECONDS
|
||||
Log.d(TAG, "[$logId] Hard deleting notifications older than $markDeletedOlderThanTimestamp")
|
||||
repository.removeNotificationsIfOlderThan(subscription.id, deleteOlderThanTimestamp)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ import io.heckel.ntfy.BuildConfig
|
|||
import io.heckel.ntfy.db.Repository
|
||||
import io.heckel.ntfy.msg.ApiService
|
||||
import io.heckel.ntfy.msg.NotificationDispatcher
|
||||
import io.heckel.ntfy.util.Encryption
|
||||
import io.heckel.ntfy.util.Log
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
|
@ -40,13 +41,15 @@ class PollWorker(ctx: Context, params: WorkerParameters) : CoroutineWorker(ctx,
|
|||
subscriptions.forEach{ subscription ->
|
||||
try {
|
||||
val user = repository.getUser(subscription.baseUrl)
|
||||
val notifications = api.poll(
|
||||
subscriptionId = subscription.id,
|
||||
baseUrl = subscription.baseUrl,
|
||||
topic = subscription.topic,
|
||||
user = user,
|
||||
since = subscription.lastNotificationId
|
||||
)
|
||||
val notifications = api
|
||||
.poll(
|
||||
subscriptionId = subscription.id,
|
||||
baseUrl = subscription.baseUrl,
|
||||
topic = subscription.topic,
|
||||
user = user,
|
||||
since = subscription.lastNotificationId
|
||||
)
|
||||
.map { n -> Encryption.maybeDecrypt(subscription, n) }
|
||||
val newNotifications = repository
|
||||
.onlyNewNotifications(subscription.id, notifications)
|
||||
.map { it.copy(notificationId = Random.nextInt()) }
|
||||
|
|
|
@ -1,31 +0,0 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="50dp"
|
||||
android:height="50dp"
|
||||
android:viewportWidth="50"
|
||||
android:viewportHeight="50">
|
||||
<path
|
||||
android:pathData="m7.8399,6.35c-3.58,0 -6.6469,2.817 -6.6469,6.3983v0.003l0.0351,27.8668 -0.8991,6.6347 12.2261,-3.248L42.9487,44.0049c3.58,0 6.6469,-2.8208 6.6469,-6.4022v-24.8545c0,-3.5803 -3.0652,-6.3967 -6.6438,-6.3983h-0.0031zM7.8399,10.8662h35.1088,0.0031c1.2579,0.0013 2.1277,0.9164 2.1277,1.8821v24.8544c0,0.9666 -0.8714,1.8821 -2.1307,1.8821L11.8924,39.4849l-6.2114,1.8768 0.0633,-0.366 -0.0343,-28.2473c0,-0.9665 0.8706,-1.8821 2.13,-1.8821z"
|
||||
android:strokeWidth="0.754022"
|
||||
android:fillColor="#FFFFFFFF"
|
||||
android:strokeColor="#00000000"/>
|
||||
<path
|
||||
android:pathData="m11.5278,32.0849l0,-3.346l7.0363,-3.721q0.3397,-0.1732 0.6551,-0.2596 0.3397,-0.1153 0.6066,-0.1732 0.2912,-0.0288 0.5823,-0.0576l0,-0.2308q-0.2912,-0.0288 -0.5823,-0.1153 -0.2669,-0.0576 -0.6066,-0.1443 -0.3154,-0.1153 -0.6551,-0.2884l-7.0363,-3.721l0,-3.3749l10.8699,5.9132l0,3.6056z"
|
||||
android:strokeWidth="0.525121"
|
||||
android:fillColor="#FFFFFFFF"
|
||||
android:strokeColor="#00000000"/>
|
||||
<path
|
||||
android:pathData="m10.9661,15.6112l0,4.8516l7.3742,3.9002c0.0157,0.0077 0.0305,0.0128 0.0461,0.0204 -0.0157,0.0077 -0.0305,0.0128 -0.0461,0.0204l-7.3742,3.9002l0,4.8267l0.7961,-0.4333 11.1995,-6.0969l0,-4.463zM12.0931,17.6933 L21.8346,22.9981l0,2.7446l-9.7414,5.2999l0,-1.8679l6.6912,-3.5416 0.0084,-0.0051c0.1961,-0.0992 0.3826,-0.1724 0.5531,-0.2191l0.0127,0l0.0167,-0.0051c0.2034,-0.0691 0.3777,-0.1209 0.5279,-0.1545l1.0684,-0.1046l0,-1.4644l-0.5154,-0.0497c-0.1632,-0.0153 -0.3288,-0.0505 -0.4944,-0.0997l-0.0167,-0.0051 -0.0167,-0.0051c-0.1632,-0.0352 -0.3552,-0.0811 -0.5656,-0.1344 -0.1802,-0.0668 -0.3706,-0.1479 -0.5698,-0.2492l-0.0084,-0.0051 -6.6912,-3.5416z"
|
||||
android:strokeWidth="0.525121"
|
||||
android:fillColor="#FFFFFFFF"
|
||||
android:strokeColor="#00000000"/>
|
||||
<path
|
||||
android:pathData="m26.7503,30.9206l11.6118,0l0,3.1388L26.7503,34.0594Z"
|
||||
android:strokeWidth="0.525121"
|
||||
android:fillColor="#FFFFFFFF"
|
||||
android:strokeColor="#00000000"/>
|
||||
<path
|
||||
android:pathData="m26.1875,30.2775l0,0.6427 0,3.7845l12.7371,0l0,-4.4272zM27.3113,31.563l10.4896,0l0,1.8515l-10.4896,0z"
|
||||
android:strokeWidth="0.525121"
|
||||
android:fillColor="#FFFFFFFF"
|
||||
android:strokeColor="#00000000"/>
|
||||
</vector>
|
|
@ -1,31 +1,31 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="22dp"
|
||||
android:height="22dp"
|
||||
android:width="50dp"
|
||||
android:height="50dp"
|
||||
android:viewportWidth="50"
|
||||
android:viewportHeight="50">
|
||||
<path
|
||||
android:pathData="m7.8399,6.35c-3.58,0 -6.6469,2.817 -6.6469,6.3983v0.003l0.0351,27.8668 -0.8991,6.6347 12.2261,-3.248L42.9487,44.0049c3.58,0 6.6469,-2.8208 6.6469,-6.4022v-24.8545c0,-3.5803 -3.0652,-6.3967 -6.6438,-6.3983h-0.0031zM7.8399,10.8662h35.1088,0.0031c1.2579,0.0013 2.1277,0.9164 2.1277,1.8821v24.8544c0,0.9666 -0.8714,1.8821 -2.1307,1.8821L11.8924,39.4849l-6.2114,1.8768 0.0633,-0.366 -0.0343,-28.2473c0,-0.9665 0.8706,-1.8821 2.13,-1.8821z"
|
||||
android:strokeWidth="0.754022"
|
||||
android:fillColor="?android:attr/colorControlNormal"
|
||||
android:fillColor="#338574"
|
||||
android:strokeColor="#00000000"/>
|
||||
<path
|
||||
android:pathData="m11.5278,32.0849l0,-3.346l7.0363,-3.721q0.3397,-0.1732 0.6551,-0.2596 0.3397,-0.1153 0.6066,-0.1732 0.2912,-0.0288 0.5823,-0.0576l0,-0.2308q-0.2912,-0.0288 -0.5823,-0.1153 -0.2669,-0.0576 -0.6066,-0.1443 -0.3154,-0.1153 -0.6551,-0.2884l-7.0363,-3.721l0,-3.3749l10.8699,5.9132l0,3.6056z"
|
||||
android:strokeWidth="0.525121"
|
||||
android:fillColor="?android:attr/colorControlNormal"
|
||||
android:fillColor="#338574"
|
||||
android:strokeColor="#00000000"/>
|
||||
<path
|
||||
android:pathData="m10.9661,15.6112l0,4.8516l7.3742,3.9002c0.0157,0.0077 0.0305,0.0128 0.0461,0.0204 -0.0157,0.0077 -0.0305,0.0128 -0.0461,0.0204l-7.3742,3.9002l0,4.8267l0.7961,-0.4333 11.1995,-6.0969l0,-4.463zM12.0931,17.6933 L21.8346,22.9981l0,2.7446l-9.7414,5.2999l0,-1.8679l6.6912,-3.5416 0.0084,-0.0051c0.1961,-0.0992 0.3826,-0.1724 0.5531,-0.2191l0.0127,0l0.0167,-0.0051c0.2034,-0.0691 0.3777,-0.1209 0.5279,-0.1545l1.0684,-0.1046l0,-1.4644l-0.5154,-0.0497c-0.1632,-0.0153 -0.3288,-0.0505 -0.4944,-0.0997l-0.0167,-0.0051 -0.0167,-0.0051c-0.1632,-0.0352 -0.3552,-0.0811 -0.5656,-0.1344 -0.1802,-0.0668 -0.3706,-0.1479 -0.5698,-0.2492l-0.0084,-0.0051 -6.6912,-3.5416z"
|
||||
android:strokeWidth="0.525121"
|
||||
android:fillColor="?android:attr/colorControlNormal"
|
||||
android:fillColor="#338574"
|
||||
android:strokeColor="#00000000"/>
|
||||
<path
|
||||
android:pathData="m26.7503,30.9206l11.6118,0l0,3.1388L26.7503,34.0594Z"
|
||||
android:strokeWidth="0.525121"
|
||||
android:fillColor="?android:attr/colorControlNormal"
|
||||
android:fillColor="#338574"
|
||||
android:strokeColor="#00000000"/>
|
||||
<path
|
||||
android:pathData="m26.1875,30.2775l0,0.6427 0,3.7845l12.7371,0l0,-4.4272zM27.3113,31.563l10.4896,0l0,1.8515l-10.4896,0z"
|
||||
android:strokeWidth="0.525121"
|
||||
android:fillColor="?android:attr/colorControlNormal"
|
||||
android:fillColor="#338574"
|
||||
android:strokeColor="#00000000"/>
|
||||
</vector>
|
||||
|
|
|
@ -6,21 +6,21 @@
|
|||
<path
|
||||
android:pathData="M7.8398,6.35C4.2598,6.35 1.1932,9.1672 1.1932,12.7486L1.1932,12.7512L1.2283,40.6182L0.3292,47.2529L12.5553,44.0051L35.9384,44.0051L36.5848,39.4849L11.8923,39.4849L5.6808,41.3618L5.7444,40.9954L5.7097,12.7486C5.7097,11.7821 6.5805,10.866 7.8398,10.866L42.9488,10.866L42.9519,10.866C44.2097,10.8673 45.0794,11.7828 45.0794,12.7486L45.0794,25.7395L49.5954,25.7395L49.5954,12.7481C49.5954,9.1677 46.5305,6.3517 42.9519,6.35L42.9488,6.35L7.8398,6.35zM49.5954,31.4735C45.6685,38.326 43.7215,41.7259 42.4176,44.0051L42.9488,44.0051C46.5288,44.0051 49.5954,41.1842 49.5954,37.6029L49.5954,31.4735z"
|
||||
android:strokeWidth="2.84985"
|
||||
android:fillColor="#FFFFFFFF"
|
||||
android:fillColor="#338574"
|
||||
android:strokeColor="#00000000"/>
|
||||
<path
|
||||
android:pathData="m11.5278,32.0849l0,-3.346l7.0363,-3.721q0.3397,-0.1732 0.6551,-0.2596 0.3397,-0.1153 0.6066,-0.1732 0.2912,-0.0288 0.5823,-0.0576l0,-0.2308q-0.2912,-0.0288 -0.5823,-0.1153 -0.2669,-0.0576 -0.6066,-0.1443 -0.3154,-0.1153 -0.6551,-0.2884l-7.0363,-3.721l0,-3.3749l10.8699,5.9132l0,3.6056z"
|
||||
android:strokeWidth="0.525121"
|
||||
android:fillColor="#FFFFFFFF"
|
||||
android:fillColor="#338574"
|
||||
android:strokeColor="#00000000"/>
|
||||
<path
|
||||
android:pathData="m10.9661,15.6112l0,4.8516l7.3742,3.9002c0.0157,0.0077 0.0305,0.0128 0.0461,0.0204 -0.0157,0.0077 -0.0305,0.0128 -0.0461,0.0204l-7.3742,3.9002l0,4.8267l0.7961,-0.4333 11.1995,-6.0969l0,-4.463zM12.0931,17.6933 L21.8346,22.9981l0,2.7446l-9.7414,5.2999l0,-1.8679l6.6912,-3.5416 0.0084,-0.0051c0.1961,-0.0992 0.3826,-0.1724 0.5531,-0.2191l0.0127,0l0.0167,-0.0051c0.2034,-0.0691 0.3777,-0.1209 0.5279,-0.1545l1.0684,-0.1046l0,-1.4644l-0.5154,-0.0497c-0.1632,-0.0153 -0.3288,-0.0505 -0.4944,-0.0997l-0.0167,-0.0051 -0.0167,-0.0051c-0.1632,-0.0352 -0.3552,-0.0811 -0.5656,-0.1344 -0.1802,-0.0668 -0.3706,-0.1479 -0.5698,-0.2492l-0.0084,-0.0051 -6.6912,-3.5416z"
|
||||
android:strokeWidth="0.525121"
|
||||
android:fillColor="#FFFFFFFF"
|
||||
android:fillColor="#338574"
|
||||
android:strokeColor="#00000000"/>
|
||||
<path
|
||||
android:pathData="m41.6796,15.3498c-4.1394,7.2567 -7.8235,13.7146 -10.2159,17.9374h8.5829l-1.8531,12.962c1.2024,-2.1043 3.8969,-6.8095 10.2878,-17.9601h-8.6543z"
|
||||
android:strokeWidth="1"
|
||||
android:fillColor="#FFFFFFFF"
|
||||
android:fillColor="#338574"
|
||||
android:strokeColor="#00000000"/>
|
||||
</vector>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
android:orientation="horizontal"
|
||||
android:background="?android:attr/selectableItemBackground"
|
||||
android:focusable="true"
|
||||
android:paddingBottom="6dp" android:paddingTop="6dp" android:paddingEnd="6dp">
|
||||
android:paddingBottom="6dp" android:paddingTop="6dp">
|
||||
<TextView
|
||||
android:text="Sun, October 31, 2021, 10:43:12"
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -47,12 +47,13 @@
|
|||
app:layout_constraintStart_toEndOf="@id/detail_item_priority_image"
|
||||
android:layout_marginStart="5dp"/>
|
||||
<ImageButton
|
||||
android:layout_width="28dp"
|
||||
android:layout_width="46dp"
|
||||
android:layout_height="26dp" app:srcCompat="@drawable/ic_more_horiz_gray_24dp"
|
||||
android:id="@+id/detail_item_menu_button"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="7dp"
|
||||
android:background="?android:attr/selectableItemBackground" android:paddingTop="-5dp"
|
||||
app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="3dp"/>
|
||||
/>
|
||||
<TextView
|
||||
android:text="This is a very very very long message. It could be as long as 1024 charaters, which is a lot more than you'd think. No, really so far this message is barely 180 characters long. I can't believe how long 1024 bytes are. This is outrageous. Oh you know what, I think I won't type the whole thing. This seems a little too long for a sample text. Well, anyway, it was nice chatting. So far this message is about 400 bytes long. So maybe just double what you see and that's that."
|
||||
android:layout_width="0dp"
|
||||
|
@ -63,7 +64,8 @@
|
|||
android:autoLink="web"
|
||||
app:layout_constraintTop_toBottomOf="@id/detail_item_title_text"
|
||||
app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="12dp"
|
||||
app:layout_constraintBottom_toTopOf="@id/detail_item_attachment_image" app:layout_constraintEnd_toStartOf="@id/detail_item_icon" android:layout_marginEnd="6dp"/>
|
||||
app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="12dp"
|
||||
app:layout_constraintBottom_toTopOf="@id/detail_item_attachment_image"/>
|
||||
<TextView
|
||||
android:text="This is an optional title. It can also be a little longer but not too long."
|
||||
android:layout_width="0dp"
|
||||
|
@ -72,9 +74,10 @@
|
|||
android:textColor="?android:attr/textColorPrimary"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
||||
android:autoLink="web"
|
||||
app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="12dp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:layout_marginStart="12dp" android:textStyle="bold"
|
||||
app:layout_constraintTop_toBottomOf="@+id/detail_item_date_text" app:layout_constraintEnd_toStartOf="@id/detail_item_icon" android:layout_marginEnd="6dp" tools:layout_constraintEnd_toStartOf="@id/detail_item_icon"/>
|
||||
app:layout_constraintTop_toBottomOf="@+id/detail_item_date_text"/>
|
||||
<ImageView
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="16dp" app:srcCompat="@drawable/ic_priority_5_24dp"
|
||||
|
@ -87,9 +90,9 @@
|
|||
android:layout_height="wrap_content" app:srcCompat="@drawable/ic_cancel_gray_24dp"
|
||||
android:id="@+id/detail_item_attachment_image" app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@id/detail_item_message_text"
|
||||
android:layout_marginStart="12dp" android:layout_marginEnd="6dp"
|
||||
android:layout_marginStart="12dp" android:layout_marginEnd="12dp"
|
||||
android:scaleType="centerCrop"
|
||||
android:adjustViewBounds="true" android:maxHeight="150dp" android:layout_marginTop="7dp"
|
||||
android:adjustViewBounds="true" android:maxHeight="150dp" android:layout_marginTop="5dp"
|
||||
app:shapeAppearanceOverlay="@style/roundedCornersImageView" android:visibility="visible"
|
||||
android:layout_marginBottom="3dp" app:layout_constraintBottom_toTopOf="@id/detail_item_tags_text"/>
|
||||
<TextView
|
||||
|
@ -99,7 +102,7 @@
|
|||
android:id="@+id/detail_item_tags_text"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||
app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="12dp"
|
||||
app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="6dp"
|
||||
app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="12dp"
|
||||
app:layout_constraintTop_toBottomOf="@id/detail_item_attachment_image"
|
||||
app:layout_constraintBottom_toTopOf="@id/detail_item_attachment_file_box"
|
||||
app:layout_constraintHorizontal_bias="0.0" android:layout_marginTop="2dp"
|
||||
|
@ -108,7 +111,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" app:layout_constraintTop_toBottomOf="@id/detail_item_tags_text"
|
||||
android:id="@+id/detail_item_attachment_file_box" app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent" android:layout_marginStart="12dp" android:layout_marginEnd="6dp"
|
||||
app:layout_constraintEnd_toEndOf="parent" android:layout_marginStart="12dp" android:layout_marginEnd="12dp"
|
||||
android:visibility="visible" android:layout_marginTop="2dp"
|
||||
android:background="?android:attr/selectableItemBackground"
|
||||
android:clickable="true" android:focusable="true" android:padding="4dp" android:paddingStart="0dp">
|
||||
|
@ -190,21 +193,5 @@
|
|||
android:id="@+id/detail_item_padding_bottom"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/detail_item_actions_wrapper" app:layout_constraintBottom_toBottomOf="parent"/>
|
||||
<ImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="0dp"
|
||||
app:srcCompat="@drawable/ic_notification"
|
||||
android:id="@+id/detail_item_icon"
|
||||
android:visibility="visible"
|
||||
android:maxHeight="40dp"
|
||||
android:maxWidth="40dp"
|
||||
android:adjustViewBounds="true"
|
||||
android:scaleType="fitStart"
|
||||
android:padding="0dp"
|
||||
app:layout_constraintTop_toTopOf="@+id/detail_item_date_text"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/detail_item_message_text"
|
||||
app:layout_constraintEnd_toStartOf="@id/detail_item_menu_button"
|
||||
android:layout_marginEnd="6dp"/>
|
||||
<androidx.constraintlayout.widget.Guideline android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/guideline2" app:layout_constraintGuide_begin="27dp" android:orientation="horizontal"/>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
|
|
@ -1,49 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:orientation="vertical"
|
||||
android:fitsSystemWindows="true"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<com.google.android.material.appbar.AppBarLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fitsSystemWindows="true">
|
||||
|
||||
<com.google.android.material.appbar.CollapsingToolbarLayout
|
||||
android:id="@+id/collapsing_toolbar"
|
||||
style="?attr/collapsingToolbarLayoutLargeStyle"
|
||||
android:background="@color/e_background"
|
||||
android:layout_width="match_parent"
|
||||
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
|
||||
android:layout_height="?attr/collapsingToolbarLayoutLargeSize">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
app:navigationIcon="@drawable/e_ic_back"
|
||||
app:title="@string/eos_settings_title"
|
||||
android:id="@+id/toolbar"
|
||||
android:background="@color/e_background"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
app:layout_collapseMode="pin" />
|
||||
|
||||
</com.google.android.material.appbar.CollapsingToolbarLayout>
|
||||
|
||||
</com.google.android.material.appbar.AppBarLayout>
|
||||
|
||||
<androidx.core.widget.NestedScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fillViewport="true"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/fragment_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
|
||||
</LinearLayout>
|
|
@ -0,0 +1,59 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
ntfy EDIT:
|
||||
This is a slightly edited copy of the original Android project layout
|
||||
to reduce the marginBottom of the message to something reasonable (was: 48dp).
|
||||
|
||||
~ Copyright (C) 2015 The Android Open Source Project
|
||||
~
|
||||
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
~ you may not use this file except in compliance with the License.
|
||||
~ You may obtain a copy of the License at
|
||||
~
|
||||
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||
~
|
||||
~ Unless required by applicable law or agreed to in writing, software
|
||||
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
~ See the License for the specific language governing permissions and
|
||||
~ limitations under the License
|
||||
-->
|
||||
|
||||
<ScrollView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="48dp"
|
||||
android:layout_marginBottom="48dp"
|
||||
android:overScrollMode="ifContentScrolls">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@android:id/message"
|
||||
style="?android:attr/textAppearanceSmall"
|
||||
android:layout_marginLeft="24dp"
|
||||
android:layout_marginRight="24dp"
|
||||
android:layout_marginStart="24dp"
|
||||
android:layout_marginEnd="24dp"
|
||||
android:layout_marginBottom="2dp"
|
||||
android:layout_marginTop="4dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="?android:attr/textColorSecondary"/>
|
||||
|
||||
<EditText
|
||||
android:id="@android:id/edit"
|
||||
android:layout_marginLeft="20dp"
|
||||
android:layout_marginRight="20dp"
|
||||
android:layout_marginStart="20dp"
|
||||
android:layout_marginEnd="20dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight = "48dp"
|
||||
android:inputType="textPassword"/>
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
|
@ -8,6 +8,5 @@
|
|||
<item android:id="@+id/main_menu_settings" android:title="@string/main_menu_settings_title"/>
|
||||
<item android:id="@+id/main_menu_docs" android:title="@string/main_menu_docs_title"/>
|
||||
<item android:id="@+id/main_menu_rate" android:title="@string/main_menu_rate_title"/>
|
||||
<item android:id="@+id/main_menu_donate" android:title="@string/main_menu_donate_title"/>
|
||||
<item android:id="@+id/main_menu_report_bug" android:title="@string/main_menu_report_bug_title"/>
|
||||
</menu>
|
||||
|
|
|
@ -2,12 +2,4 @@
|
|||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@mipmap/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
<monochrome>
|
||||
<inset
|
||||
android:drawable="@drawable/ic_launcher_monochrome"
|
||||
android:insetLeft="30%"
|
||||
android:insetTop="30%"
|
||||
android:insetRight="30%"
|
||||
android:insetBottom="30%"/>
|
||||
</monochrome>
|
||||
</adaptive-icon>
|
||||
|
|
|
@ -2,12 +2,4 @@
|
|||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@mipmap/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
<monochrome>
|
||||
<inset
|
||||
android:drawable="@drawable/ic_launcher_monochrome"
|
||||
android:insetLeft="30%"
|
||||
android:insetTop="30%"
|
||||
android:insetRight="30%"
|
||||
android:insetBottom="30%"/>
|
||||
</monochrome>
|
||||
</adaptive-icon>
|
||||
</adaptive-icon>
|
|
@ -1,71 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_notifications_low_name">أولوية منخفضة</string>
|
||||
<string name="channel_notifications_max_name">الأولوية القصوى</string>
|
||||
<string name="channel_notifications_min_name">الحد الأدنى للأولوية</string>
|
||||
<string name="channel_subscriber_notification_title">الإستماع (إلتقاط) الإشعارات الواردة</string>
|
||||
<string name="channel_notifications_default_name">الأولوية الافتراضية</string>
|
||||
<string name="channel_subscriber_service_name">خدمة الاشتراك</string>
|
||||
<string name="channel_notifications_high_name">أولوية عليا</string>
|
||||
<string name="channel_notifications_group_default_name">افتراضي</string>
|
||||
<string name="add_dialog_topic_name_hint">اسم الموضوع، على سبيل المثال phil_alerts</string>
|
||||
<string name="add_dialog_use_another_server">استخدم خادمًا آخر</string>
|
||||
<string name="add_dialog_button_cancel">إلغاء</string>
|
||||
<string name="add_dialog_button_subscribe">اشترك</string>
|
||||
<string name="add_dialog_button_back">العودة</string>
|
||||
<string name="add_dialog_button_login">لِج</string>
|
||||
<string name="add_dialog_error_connection_failed">فشل الاتصال: %1$s</string>
|
||||
<string name="detail_clear_dialog_permanently_delete">الحذف بشكل نهائي</string>
|
||||
<string name="detail_clear_dialog_cancel">إلغاء</string>
|
||||
<string name="detail_delete_dialog_cancel">إلغاء</string>
|
||||
<string name="detail_instant_delivery_disabled">التسليم الفوري مُعطَّل</string>
|
||||
<string name="detail_item_menu_cancel">إلغاء التنزيل</string>
|
||||
<string name="detail_item_menu_save_file">حفظ الملف</string>
|
||||
<string name="detail_item_menu_copy_url">إنسخ الرابط</string>
|
||||
<string name="detail_item_menu_copy_contents_copied">تم نسخ الإشعار إلى الحافظة</string>
|
||||
<string name="user_dialog_button_save">حفظ</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">اختر عنوان URL للخدمة</string>
|
||||
<string name="add_dialog_login_title">تسجيل الدخول مطلوب</string>
|
||||
<string name="detail_copied_to_clipboard_message">تم نسخه إلى الحافظة</string>
|
||||
<string name="detail_instant_delivery_enabled">التسليم الفوري مُفعَّل</string>
|
||||
<string name="channel_subscriber_notification_instant_text">مشترِك في الإستلام الفوري للمواضيع</string>
|
||||
<string name="add_dialog_login_username_hint">إسم المستخدم</string>
|
||||
<string name="add_dialog_login_new_user">مستخدم جديد</string>
|
||||
<string name="add_dialog_login_password_hint">كلمة المرور</string>
|
||||
<string name="detail_how_to_example">مثال (باستخدام curl): <br/> <tt> $ curl -d \"أهلًا\" %1$s </tt></string>
|
||||
<string name="detail_item_snack_deleted">تم حذف الإشعار</string>
|
||||
<string name="detail_item_snack_undo">إلغاء</string>
|
||||
<string name="detail_item_menu_copy_contents">نسخ الإشعار</string>
|
||||
<string name="detail_item_tags">الوسوم: %1$s</string>
|
||||
<string name="detail_test_message_error">لا يمكن إرسال رسالة: %1$s</string>
|
||||
<string name="detail_no_notifications_text">لم تتلق بعد أية إشعارات حول هذا الموضوع.</string>
|
||||
<string name="detail_delete_dialog_permanently_delete">الحذف بشكل نهائي</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">تم الاشتراك في المواضيع</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">مشترك في موضوعين</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">مشترك في ثلاثة مواضيع</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_six">مشترك في ستة مواضيع</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">مشترك في أربعة مواضيع</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_five">مشترك في خمسة مواضيع</string>
|
||||
<string name="main_menu_settings_title">الإعدادات</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">مشترك في موضوع واحد</string>
|
||||
<string name="main_menu_rate_title">قيم البرنامج ⭐</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">تم الاشتراك في 2 موضوع فوري</string>
|
||||
<string name="refresh_message_result">تم استلام %1$d اشعار(ات)</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">مشترك في %1$d موضوع</string>
|
||||
<string name="main_menu_notifications_enabled">الاشعارات مفعلة</string>
|
||||
<string name="main_menu_notifications_disabled_forever">الاشعارات مكتومة</string>
|
||||
<string name="channel_subscriber_notification_instant_text_six">تم الاشتراك في 6 مواضيع فورية</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">تم الاشتراك في 3 مواضيع فورية</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">تم الاشتراك في 5 مواضيع فورية</string>
|
||||
<string name="main_menu_notifications_disabled_until">الاشعارات مكتومة حتي %1$s</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">تم الاشتراك في %1$d مواضيع فورية</string>
|
||||
<string name="main_menu_report_bug_title">التبليغ عن خطأ</string>
|
||||
<string name="main_action_bar_title">المواضيع المسجلة</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">الغاء الاشتراك</string>
|
||||
<string name="main_menu_docs_title">اقرا المراجع</string>
|
||||
<string name="refresh_message_no_results">كل شئ محدث لاخر تحديث</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">تم الاشتراك في 1 موضوع فوري</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">تم الاشتراك في 4 مواضيع فورية</string>
|
||||
<string name="main_menu_donate_title">تبرع 💸</string>
|
||||
<string name="settings_title">اﻹعدادات</string>
|
||||
</resources>
|
|
@ -1,9 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_notifications_low_name">Нисък приоритет</string>
|
||||
<string name="channel_notifications_default_name">Подразбиран приоритет</string>
|
||||
<string name="channel_notifications_high_name">Висок приоритет</string>
|
||||
<string name="channel_notifications_max_name">Най-висок приоритет</string>
|
||||
<string name="channel_notifications_low_name">Известия (нисък приоритет)</string>
|
||||
<string name="channel_notifications_default_name">Известия (подразбиран приоритет)</string>
|
||||
<string name="channel_notifications_high_name">Известия (висок приоритет)</string>
|
||||
<string name="channel_notifications_max_name">Известия (максимален приоритет)</string>
|
||||
<string name="channel_subscriber_service_name">Абонаментна услуга</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Има абонамент за теми с незабавно доставяне</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">Има абонамент за три теми с незабавно доставяне</string>
|
||||
|
@ -51,7 +51,7 @@
|
|||
\nПаролите са премахнати, но не са изброени тук.</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_empty">Не са променени никакви теми/имена на хостове. Абонирани ли сте\?</string>
|
||||
<string name="user_dialog_description_add">Тук можете да добавите потребител. Всички теми на сървъра ще използват този потребител.</string>
|
||||
<string name="channel_notifications_min_name">Най-нисък приоритет</string>
|
||||
<string name="channel_notifications_min_name">Известия (минимален приоритет)</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Има абонамент за тема с незабавно доставяне</string>
|
||||
<string name="notification_dialog_muted_forever_toast_message">Известията са заглушени</string>
|
||||
<string name="channel_subscriber_notification_title">Очаква входящи известия</string>
|
||||
|
@ -63,8 +63,8 @@
|
|||
<string name="main_menu_notifications_disabled_until">Известията са заглушени до %1$s</string>
|
||||
<string name="detail_menu_notifications_disabled_until">Известията са заглушени до %1$s</string>
|
||||
<string name="main_how_to_intro">Докоснете бутона с +, за да създадете тема или да се абонирате. След това ще получавате известия на устройството си, след като изпратите съобщения чрез метода PUT или POST.</string>
|
||||
<string name="detail_how_to_intro">За да изпратите известия в тази тема направете заявка чрез методите PUT или POST към адреса й.</string>
|
||||
<string name="detail_no_notifications_text">Липсват известия в темата</string>
|
||||
<string name="detail_how_to_intro">За да изпратите известия в тази тема, просто изпратете PUT или POST към адреса й.</string>
|
||||
<string name="detail_no_notifications_text">В момента в темата няма известия</string>
|
||||
<string name="settings_general_default_base_url_message">За да използвате по подразбиране собствен сървър при абониране за нови теми и/или споделяне на теми, въведете адрес на сървъра.</string>
|
||||
<string name="notification_dialog_muted_until_toast_message">Известията са заглушени до %1$s</string>
|
||||
<string name="settings_advanced_export_logs_summary">Дневниците се копират в междинната памет или се изпращат към nopaste.net (собственост на автора на ntfy). Имената на хостовете и темите могат да бъдат цензурирани, но съдържанието на известията никога.</string>
|
||||
|
@ -80,7 +80,7 @@
|
|||
<string name="main_action_mode_delete_dialog_permanently_delete">Премахване</string>
|
||||
<string name="main_item_status_unified_push">%1$s (UnifiedPush)</string>
|
||||
<string name="main_item_status_reconnecting">свързване…</string>
|
||||
<string name="main_no_subscriptions_text">Липсват абонаменти</string>
|
||||
<string name="main_no_subscriptions_text">В момента няма абонаменти</string>
|
||||
<string name="main_unified_push_toast">Този абонамент се управлява от %1$s чрез UnifiedPush</string>
|
||||
<string name="add_dialog_button_cancel">Отказ</string>
|
||||
<string name="add_dialog_button_subscribe">Абониране</string>
|
||||
|
@ -142,12 +142,12 @@
|
|||
\n%3$s</string>
|
||||
<string name="settings_title">Настройки</string>
|
||||
<string name="settings_notifications_header">Известия</string>
|
||||
<string name="settings_notifications_min_priority_title">Най-нисък приоритет</string>
|
||||
<string name="settings_notifications_min_priority_title">Mинимален приоритет</string>
|
||||
<string name="settings_notifications_min_priority_min">Всички</string>
|
||||
<string name="settings_notifications_min_priority_low">Нисък приоритет и по-висок</string>
|
||||
<string name="settings_notifications_min_priority_default">Подразбиран приоритет и по-висок</string>
|
||||
<string name="settings_notifications_min_priority_high">Висок приоритет и по-висок</string>
|
||||
<string name="settings_notifications_min_priority_max">Само най-висок приоритет</string>
|
||||
<string name="settings_notifications_min_priority_max">Само максимален приоритет</string>
|
||||
<string name="settings_notifications_min_priority_summary_max">Показват се известията с приоритет 5 (най-висок)</string>
|
||||
<string name="settings_notifications_min_priority_summary_any">Показват се всички известия</string>
|
||||
<string name="settings_notifications_auto_delete_never">Никога</string>
|
||||
|
@ -237,7 +237,7 @@
|
|||
<string name="notification_popup_file_download_failed">%1$s
|
||||
\nФайл: %2$s, неуспешно изтеглен</string>
|
||||
<string name="settings_notifications_auto_download_title">Изтегляне на прикачени файлове</string>
|
||||
<string name="settings_notifications_auto_delete_title">Автоматично премахване</string>
|
||||
<string name="settings_notifications_auto_delete_title">Премахване на известия</string>
|
||||
<string name="settings_notifications_auto_download_summary_always">Прикачените файлове се изтеглят автоматично</string>
|
||||
<string name="settings_notifications_auto_download_summary_never">Прикачените файлове не се изтеглят автоматично</string>
|
||||
<string name="settings_notifications_auto_download_summary_smaller_than_x">Прикачените файлове до %1$s се изтеглят автоматично</string>
|
||||
|
@ -293,10 +293,10 @@
|
|||
<string name="detail_item_download_info_download_failed_expires_x">грешка при изтегляне, валидността изтича на %1$s</string>
|
||||
<string name="share_content_image_error">Изображението не може да бъде отворено: %1$s</string>
|
||||
<string name="share_content_file_error">Информацията за файла не може да бъде прочетена: %1$s</string>
|
||||
<string name="settings_notifications_priority_min">най-нисък</string>
|
||||
<string name="settings_notifications_priority_min">минимален</string>
|
||||
<string name="settings_notifications_priority_low">нисък</string>
|
||||
<string name="settings_notifications_priority_default">подразбиран</string>
|
||||
<string name="settings_notifications_priority_max">най-висок</string>
|
||||
<string name="settings_notifications_priority_max">максимален</string>
|
||||
<string name="settings_notifications_priority_high">висок</string>
|
||||
<string name="detail_deep_link_subscribed_toast_message">Абонирани сте за темата %1$s</string>
|
||||
<string name="settings_notifications_channel_prefs_summary">Отмяна на „Не безпокойте“, звуци и т.н.</string>
|
||||
|
@ -327,20 +327,4 @@
|
|||
<string name="detail_settings_about_header">Относно</string>
|
||||
<string name="detail_settings_about_topic_url_title">Адрес на темата</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">Копирано в междинната памет</string>
|
||||
<string name="main_menu_donate_title">Даряване 💸</string>
|
||||
<string name="detail_item_cannot_open_apk">Ntfy не може да инсталира получени приложения. Вместо това изтеглете чрез браузъра. За подробности вижте дефект №531.</string>
|
||||
<string name="channel_notifications_group_default_name">Подразбирани</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Потребителски настройки за известия</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">Използва потребителски настройки за този абонамент</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">Продължително сигнализиране за най-високия приоритет</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">Известията с най-висок приоритет сигнализират веднъж</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Настройки на известията</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Продължително сигнализиране</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">Отмяна на „Не безпокойте“, звуци и т.н.</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Единично сигнализиране</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">Подразбирани настройки (отмяна на „Не безпокойте“, звуци и т.н.)</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">Известията с най-висок приоритет сигнализират, докато не бъдат затворени</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy ще работи като дистрибутор на UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_title">Включване на UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfy няма да работи като дистрибутор на UnifiedPush</string>
|
||||
</resources>
|
|
@ -1,11 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_notifications_low_name">কম গুরুত্ব</string>
|
||||
<string name="channel_notifications_min_name">সর্বনিম্ন গুরুত্ব</string>
|
||||
<string name="channel_notifications_default_name">স্বাভাবিক গুরুত্ব</string>
|
||||
<string name="channel_notifications_max_name">সর্বোচ্চ্য গুরুত্ব</string>
|
||||
<string name="channel_notifications_group_default_name">স্বাভাবিক</string>
|
||||
<string name="channel_notifications_high_name">বেশি গুরুত্ব</string>
|
||||
<string name="channel_subscriber_notification_title">আগত নোটিফিকেশন এর জন্য অপেক্ষা করা হচ্ছে</string>
|
||||
<string name="channel_subscriber_notification_instant_text">তাত্ক্ষণিক পাওয়া বিষয়গুলোতে যোগ দেওয়া হয়েছে</string>
|
||||
</resources>
|
|
@ -1,346 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_notifications_min_name">Prioritat mínima</string>
|
||||
<string name="channel_notifications_low_name">Prioritat baixa</string>
|
||||
<string name="channel_notifications_default_name">Prioritat per defecte</string>
|
||||
<string name="channel_notifications_high_name">Prioritat alta</string>
|
||||
<string name="channel_notifications_max_name">Prioritat màxima</string>
|
||||
<string name="channel_subscriber_service_name">Servei Subscripció</string>
|
||||
<string name="main_menu_donate_title">Donar 💸</string>
|
||||
<string name="main_item_status_reconnecting">reconnectant…</string>
|
||||
<string name="channel_subscriber_notification_title">Escoltant notificacions entrants</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Subscrit per entrega instantània de temes</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Subscrit per entrega instantània d\'un tema</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Subscrit per dues entregues instantànies de temes</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">Subscrit per tres entregues instantànies de temes</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">Subscrit per quatre entregues instantànies de temes</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">Subscrit per cinc entregues instantànies de temes</string>
|
||||
<string name="channel_subscriber_notification_instant_text_six">Subscrit per sis entregues instantànies de temes</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">Subscrit per %1$d entregues instantànies de temes</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">Subscrit als temes</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">Subscrit a un tema</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">Subscrit a dos temes</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">Subscrit a tres temes</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_six">Subscrit a sis temes</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">Eliminat permanentment</string>
|
||||
<string name="main_action_mode_delete_dialog_cancel">Cancel·lar</string>
|
||||
<string name="main_item_status_text_one">%1$d notificació</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">Subscrit a %1$d temes</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">Subscrit a quatre temes</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_five">Subscrit a cinc temes</string>
|
||||
<string name="refresh_message_result">%1$d notificacions rebudes</string>
|
||||
<string name="refresh_message_no_results">Tot està actualitzat</string>
|
||||
<string name="refresh_message_error">No es poden actualitzar %1$d subscripciones
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="refresh_message_error_one">No s\'ha pogut actualitzar la subscripció: %1$s</string>
|
||||
<string name="main_action_bar_title">Temes subscrits</string>
|
||||
<string name="main_menu_notifications_enabled">Notificacions activades</string>
|
||||
<string name="main_menu_notifications_disabled_forever">Notificacions silenciades</string>
|
||||
<string name="main_menu_notifications_disabled_until">Notificacions silenciades fins: %1$s</string>
|
||||
<string name="main_menu_settings_title">Ajustos</string>
|
||||
<string name="main_menu_report_bug_title">Reportar un problema</string>
|
||||
<string name="main_menu_docs_title">Llegir la documentació</string>
|
||||
<string name="main_menu_rate_title">Valora la aplicació ⭐</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">Donar-se de baixa</string>
|
||||
<string name="main_action_mode_delete_dialog_message">Donar-se de baixa del tema(es) seleccionat(s) permanentment i eliminar totes les notificacions\?</string>
|
||||
<string name="main_item_status_text_not_one">%1$d notificacions</string>
|
||||
<string name="channel_notifications_group_default_name">Per defecte</string>
|
||||
<string name="main_item_date_yesterday">ahir</string>
|
||||
<string name="main_add_button_description">Afegir subscripció</string>
|
||||
<string name="main_how_to_intro">Prem + per crear o subscriure\'t a un tema. Després rebràs notificacions al teu dispositiu quan enviïs missatges mitjançant PUT o POST.</string>
|
||||
<string name="main_no_subscriptions_text">Sembla que encara no tens cap subscripció.</string>
|
||||
<string name="main_banner_battery_text">L\'optimització de la bateria hauria de ser desactivada per tal d\'evitar problemes amb l\'entrega de notificacions.</string>
|
||||
<string name="main_banner_websocket_button_dismiss">Descartar</string>
|
||||
<string name="detail_test_message_error_unauthorized_anon">No es pot enviar el missatge: No es permeten publicacions anònimes.</string>
|
||||
<string name="detail_instant_delivery_disabled">Entrega instantània desactivada</string>
|
||||
<string name="detail_item_menu_copy_contents">Copiar la notificació</string>
|
||||
<string name="detail_item_menu_copy_contents_copied">Notificació copiada al porta-retalls</string>
|
||||
<string name="detail_menu_test">Enviar notificació de prova</string>
|
||||
<string name="notification_dialog_save">Guardar</string>
|
||||
<string name="main_banner_battery_button_remind_later">Preguntar més endavant</string>
|
||||
<string name="main_banner_battery_button_dismiss">Descartar</string>
|
||||
<string name="main_banner_battery_button_fix_now">Arreglar ara</string>
|
||||
<string name="main_banner_websocket_button_remind_later">Preguntar més endavant</string>
|
||||
<string name="add_dialog_button_back">Enrere</string>
|
||||
<string name="add_dialog_title">Subscriure\'s a un tema</string>
|
||||
<string name="detail_deep_link_subscribed_toast_message">Subscrit al tema %1$s</string>
|
||||
<string name="detail_item_tags">Etiquetes: %1$s</string>
|
||||
<string name="detail_test_message_error_too_large">No es pot enviar el missatge: L\'adjunt és massa gran.</string>
|
||||
<string name="detail_item_snack_undo">Desfer</string>
|
||||
<string name="detail_item_menu_delete">Elimina arxiu</string>
|
||||
<string name="detail_item_menu_download">Descarrega l\'arxiu</string>
|
||||
<string name="detail_item_menu_cancel">Cancel·la la descàrrega</string>
|
||||
<string name="detail_item_menu_copy_url">Copiar la URL</string>
|
||||
<string name="detail_item_menu_copy_url_copied">URL copiada al porta-retalls</string>
|
||||
<string name="detail_item_cannot_open_url">No es pot obrir la URL: %1$s</string>
|
||||
<string name="detail_item_cannot_save">No es pot guardar l\'adjunt: %1$s</string>
|
||||
<string name="detail_item_cannot_delete">No es pot eliminar l\'adjunt: %1$s</string>
|
||||
<string name="detail_action_mode_menu_delete">Eliminar</string>
|
||||
<string name="detail_action_mode_delete_dialog_permanently_delete">Eliminar definitivament</string>
|
||||
<string name="detail_action_mode_delete_dialog_cancel">Cancel·lar</string>
|
||||
<string name="detail_settings_title">Configuració de la subscripció</string>
|
||||
<string name="share_title">Compartir</string>
|
||||
<string name="share_menu_send">Compartir</string>
|
||||
<string name="share_content_image_error">No es pot llegir la imatge: %1$s</string>
|
||||
<string name="share_content_image_text">S\'ha compartit una imatge amb tu</string>
|
||||
<string name="share_content_file_text">S\'ha compartit un arxiu amb tu</string>
|
||||
<string name="share_content_file_error">No es pot llegir la informació de l\'arxiu: %1$s</string>
|
||||
<string name="share_topic_title">Compartir amb</string>
|
||||
<string name="share_successful">Missatge publicat</string>
|
||||
<string name="detail_test_title">Test: Pots definir un títol.</string>
|
||||
<string name="detail_test_message">Això es una notificació de prova de l\'aplicació per Android de ntfy. Té un nivell de prioritat %1$d. Si n\'envies una altra, pot ser diferent.</string>
|
||||
<string name="detail_test_message_error">No es pot enviar el missatge: %1$s</string>
|
||||
<string name="detail_test_message_error_unauthorized_user">No es pot enviar el missatge: L\'usuari \"%1$s\" no està autoritzat.</string>
|
||||
<string name="detail_copied_to_clipboard_message">Copiat al porta-retalls</string>
|
||||
<string name="detail_item_snack_deleted">Notificació eliminada</string>
|
||||
<string name="detail_item_menu_open">Obre arxiu</string>
|
||||
<string name="detail_item_menu_save_file">Guardar l\'arxiu</string>
|
||||
<string name="detail_item_cannot_download">No es pot obrir o descarregar l\'adjunt. L\'enllaç ha caducat i no es pot trobar un arxiu local.</string>
|
||||
<string name="detail_item_download_failed">No s\'ha pogut descarregar l\'adjunt: %1$s</string>
|
||||
<string name="detail_item_download_info_not_downloaded">no descarregat</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expired">no descarregat, enllaç caducat</string>
|
||||
<string name="detail_item_download_info_downloading_x_percent">%1$d%% descarregat</string>
|
||||
<string name="detail_item_download_info_deleted">eliminat</string>
|
||||
<string name="detail_item_download_info_deleted_expired">eliminat, enllaç caducat</string>
|
||||
<string name="add_dialog_topic_name_hint">Nom del tema, p. ex. alertes_josep</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">Esborra URL de servei</string>
|
||||
<string name="detail_no_notifications_text">Encara no has rebut cap notificació en aquest tema.</string>
|
||||
<string name="detail_how_to_intro">Per enviar notificacions en aquest tema, fes PUT o POST a la URL del tema.</string>
|
||||
<string name="detail_how_to_example">Exemple (usant curl):<br/><tt>$ curl -d \"Hola\" %1$s</tt></string>
|
||||
<string name="main_unified_push_toast">Aquesta subscripció és gestionada per %1$s via UnifiedPush</string>
|
||||
<string name="main_how_to_link">Instruccions detallades disponibles a ntfy.sh i a la documentació.</string>
|
||||
<string name="main_banner_websocket_text">WebSockets és el mètode recomanat per connectar-te al teu servidor. Pot millorar el rendiment de la bateria, però pot requerir <a href="https://ntfy.sh/docs/config/#nginxapache2caddy">configuració addicional al teu proxy</a>. Aquesta opció pot ser habil·litada a Configuració.</string>
|
||||
<string name="main_banner_websocket_button_enable_now">Activar ara</string>
|
||||
<string name="add_dialog_description_below">Els temes poden no estar protegits per contrasenya, tria un nom difícil d\'endevinar. Un cop subscrit podràs publicar notificacions PUT/POST.</string>
|
||||
<string name="add_dialog_use_another_server">Usar un altre servidor</string>
|
||||
<string name="add_dialog_use_another_server_description">Introdueix URLs a sota per subscriure\'t a temes d\'altres servidors.</string>
|
||||
<string name="add_dialog_instant_delivery_description">Assegura que els missatges s\'entreguin immediatament, fins i tot amb el dispositiu inactiu.</string>
|
||||
<string name="add_dialog_button_cancel">Cancel·lar</string>
|
||||
<string name="add_dialog_instant_delivery">Entrega instantània en mode Descans</string>
|
||||
<string name="add_dialog_foreground_description">L\'entrega instantània sempre està activada per a amfitrions diferents de %1$s.</string>
|
||||
<string name="add_dialog_button_subscribe">Subscriure</string>
|
||||
<string name="add_dialog_button_login">Entrar</string>
|
||||
<string name="add_dialog_error_connection_failed">Connexió fallida: %1$s</string>
|
||||
<string name="add_dialog_login_title">Inici de sessió necessari</string>
|
||||
<string name="add_dialog_login_description">Aquest tema necessita que iniciïs sessió. Introdueix nom d\'usuari i contrasenya.</string>
|
||||
<string name="add_dialog_login_username_hint">Nom d\'usuari</string>
|
||||
<string name="add_dialog_login_password_hint">Contrasenya</string>
|
||||
<string name="add_dialog_login_error_not_authorized">Inici de sessió fallit. L\'usuari %1$s no està autoritzat.</string>
|
||||
<string name="add_dialog_login_new_user">Nou usuari</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">Tria URL de servei</string>
|
||||
<string name="detail_how_to_link">Instruccions detallades disponibles a ntfy.sh i a la documentació.</string>
|
||||
<string name="detail_clear_dialog_message">Vols esborrar totes les notificacions d\'aquest tema\?</string>
|
||||
<string name="detail_clear_dialog_permanently_delete">Eliminar definitivament</string>
|
||||
<string name="detail_clear_dialog_cancel">Cancel·lar</string>
|
||||
<string name="detail_delete_dialog_message">Vols eliminar la subscripció a aquest tema i totes les notificacions\?</string>
|
||||
<string name="detail_delete_dialog_permanently_delete">Eliminar definitivament</string>
|
||||
<string name="detail_delete_dialog_cancel">Cancel·lar</string>
|
||||
<string name="detail_instant_delivery_enabled">Entrega instantània activada</string>
|
||||
<string name="detail_item_saved_successfully">Guardat amb el nom \"%1$s\" a la carpeta \"Downloads\"</string>
|
||||
<string name="detail_item_cannot_open">No es pot obrir l\'adjunt: %1$s</string>
|
||||
<string name="detail_item_cannot_open_not_found">No es pot obrir l\'adjunt: L\'arxiu pot haver estat eliminat, o potser cap aplicació instal·lada el pot obrir.</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expires_x">no descarregat, caduca al %1$s</string>
|
||||
<string name="detail_item_download_info_deleted_expires_x">eliminat, l\'enllaç caduca al %1$s</string>
|
||||
<string name="detail_item_download_info_download_failed_expires_x">descàrrega fallida, l\'enllaç caduca el %1$s</string>
|
||||
<string name="detail_menu_disable_instant">Desactivar entrega instantània</string>
|
||||
<string name="detail_menu_copy_url">Copiar adreça del tema</string>
|
||||
<string name="detail_item_download_info_download_failed">descàrrega fallida</string>
|
||||
<string name="detail_menu_notifications_enabled">Notificacions activades</string>
|
||||
<string name="detail_menu_clear">Eliminar totes les notificacions</string>
|
||||
<string name="detail_menu_settings">Configuració de la subscripció</string>
|
||||
<string name="detail_item_download_info_download_failed_expired">descàrrega fallida, enllaç caducat</string>
|
||||
<string name="detail_menu_notifications_disabled_forever">Notificacions silenciades</string>
|
||||
<string name="share_suggested_topics">Temes suggerits</string>
|
||||
<string name="notification_dialog_title">Silenciar notificacions</string>
|
||||
<string name="detail_menu_notifications_disabled_until">Notificacions silenciades fins %1$s</string>
|
||||
<string name="notification_dialog_cancel">Cancel·lar</string>
|
||||
<string name="detail_menu_enable_instant">Activar entrega instantània</string>
|
||||
<string name="detail_item_cannot_open_apk">Les aplicacions ja no poden ser instal·lades. Descarrega-les a través del navegador. Pots trobar més detalls a #531.</string>
|
||||
<string name="detail_menu_unsubscribe">Eliminar subscripció</string>
|
||||
<string name="detail_action_mode_menu_copy">Copiar</string>
|
||||
<string name="detail_action_mode_delete_dialog_message">Eliminar definitivament la notificació\?</string>
|
||||
<string name="share_content_title">Vista prèvia del missatge</string>
|
||||
<string name="share_content_text_hint">Afegeix contingut per compartir aquí</string>
|
||||
<string name="notification_dialog_enabled_toast_message">Notificacions reactivades</string>
|
||||
<string name="notification_dialog_muted_forever_toast_message">Notificacions silenciades</string>
|
||||
<string name="notification_dialog_muted_until_toast_message">Notificacions silenciades fins a %1$s</string>
|
||||
<string name="notification_dialog_show_all">Mostrar totes les notificacions</string>
|
||||
<string name="notification_dialog_30min">30 minuts</string>
|
||||
<string name="notification_dialog_1h">1 hora</string>
|
||||
<string name="notification_dialog_2h">2 hores</string>
|
||||
<string name="notification_dialog_8h">8 hores</string>
|
||||
<string name="notification_dialog_tomorrow">Fins demà</string>
|
||||
<string name="notification_dialog_forever">Fins que es reactivi</string>
|
||||
<string name="settings_notifications_header">Notificacions</string>
|
||||
<string name="settings_notifications_min_priority_title">Prioritat mínima</string>
|
||||
<string name="settings_notifications_min_priority_summary_any">Mostrant totes les notificacions</string>
|
||||
<string name="settings_notifications_min_priority_summary_x_or_higher">Mostrar notificacions de prioritat %1$d (%2$s) o superior</string>
|
||||
<string name="settings_notifications_min_priority_summary_max">Mostrar notificacions si la prioritat és 5 (màxima)</string>
|
||||
<string name="settings_notifications_priority_low">baixa</string>
|
||||
<string name="settings_notifications_priority_default">normal</string>
|
||||
<string name="settings_notifications_priority_high">alta</string>
|
||||
<string name="settings_notifications_priority_min">mín</string>
|
||||
<string name="settings_notifications_priority_max">màx</string>
|
||||
<string name="settings_notifications_channel_prefs_title">Configuració de canal</string>
|
||||
<string name="settings_notifications_channel_prefs_summary">Sobreescriure No Molestar, sons, etc.</string>
|
||||
<string name="settings_notifications_auto_download_title">Descarregar adjunts</string>
|
||||
<string name="settings_notifications_auto_download_summary_always">Descarregar automàticament tots els adjunts</string>
|
||||
<string name="settings_notifications_auto_download_summary_smaller_than_x">Descarregar automàticament adjunts fins a %1$s</string>
|
||||
<string name="settings_notifications_auto_download_never">No descarregar mai res automàticament</string>
|
||||
<string name="settings_notifications_auto_download_always">Descarregar automàticament tot</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_week">Eliminar automàticament les notificacions al cap d\'una setmana</string>
|
||||
<string name="settings_notifications_auto_delete_one_day">Al cap d\'un dia</string>
|
||||
<string name="settings_notifications_auto_delete_never">Mai</string>
|
||||
<string name="settings_notifications_auto_delete_three_days">Al cap de 3 dies</string>
|
||||
<string name="settings_notifications_auto_delete_one_week">Al cap d\'una setmana</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">Mantenir alertes per prioritat màxima</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">Alertar contínuament de les notificacions de prioritat màxima fins que es descartin</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">Alertar un sol cop per notificacions de prioritat màxima</string>
|
||||
<string name="settings_general_default_base_url_title">Servidor predeterminat</string>
|
||||
<string name="settings_general_default_base_url_message">Introdueix la URL base del teu servidor per usar-lo com a predeterminat a l\'hora de subscriure\'t a nous temes o compartir a temes.</string>
|
||||
<string name="settings_general_default_base_url_default_summary">%1$s (predeterminat)</string>
|
||||
<string name="settings_general_users_title">Gestionar usuaris</string>
|
||||
<string name="settings_general_users_prefs_user_add">Afegir usuaris</string>
|
||||
<string name="settings_general_users_prefs_user_add_title">Afegir nou usuari</string>
|
||||
<string name="settings_general_users_prefs_user_add_summary">Crear nou usuari per a un nou servidor</string>
|
||||
<string name="settings_general_dark_mode_summary_system">Usant el predeterminat del sistema</string>
|
||||
<string name="settings_general_dark_mode_summary_light">Mode clar activat</string>
|
||||
<string name="settings_general_dark_mode_summary_dark">Mode fosc activat. Que ets un vampir\?</string>
|
||||
<string name="settings_general_dark_mode_entry_system">Usar predeterminat del sistema</string>
|
||||
<string name="settings_backup_restore_backup_summary">Exportar configuració, notificacions i usuaris</string>
|
||||
<string name="settings_backup_restore_restore_title">Recuperar des d\'arxiu</string>
|
||||
<string name="settings_backup_restore_restore_summary">Importar configuració, notificacions i usuaris</string>
|
||||
<string name="settings_general_dark_mode_entry_light">Mode clar</string>
|
||||
<string name="settings_backup_restore_restore_failed">Recuperació fallida: %1$s</string>
|
||||
<string name="settings_advanced_header">Avançat</string>
|
||||
<string name="settings_advanced_broadcast_title">Publicar missatges</string>
|
||||
<string name="settings_advanced_broadcast_summary_enabled">Les aplicacions poden rebre notificacions d\'entrada com a missatges</string>
|
||||
<string name="settings_advanced_record_logs_summary_enabled">Gravant (fins a 1000 entrades) al dispositiu…</string>
|
||||
<string name="settings_advanced_export_logs_title">Copiar/carregar registres</string>
|
||||
<string name="settings_advanced_export_logs_summary">Copiar registres al porta-retalls, o carregar-los a nopaste.net (propietat de l\'autor de ntfy). Els noms de host i els temes poden ser censurats, les notificacions mai.</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_original">Copiar al porta-retalls</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_scrubbed">Copiar al porta-retalls (censurat)</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">Usant configuració predeterminada (sons, sobreescriure No Molestar, etc.)</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Configuració de notificacions</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">Sobreescriure No Molestar, sons, etc.</string>
|
||||
<string name="detail_settings_appearance_icon_error_saving">No s\'ha pogut guardar la icona: %1$s</string>
|
||||
<string name="detail_settings_appearance_display_name_title">Nom</string>
|
||||
<string name="detail_settings_appearance_display_name_message">Tria un nom personalitzat per a aquesta subscripció. Deixa en blanc per usar el predeterminat (%1$s).</string>
|
||||
<string name="detail_settings_appearance_display_name_default_summary">%1$s (predeterminat)</string>
|
||||
<string name="detail_settings_global_setting_title">Usar configuració global</string>
|
||||
<string name="detail_settings_global_setting_suffix">usant configuració global</string>
|
||||
<string name="detail_settings_about_topic_url_title">URL del tema</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">Copiat al porta-retalls</string>
|
||||
<string name="user_dialog_title_add">Afegir usuari</string>
|
||||
<string name="user_dialog_description_edit">Pots editar el nom d\'usuari o la contrasenya de l\'usuari seleccionat, o eliminar-lo.</string>
|
||||
<string name="user_dialog_base_url_hint">URL de servei</string>
|
||||
<string name="main_item_status_unified_push">%1$s (UnifiedPush)</string>
|
||||
<string name="settings_notifications_auto_delete_one_month">Al cap d\'un mes</string>
|
||||
<string name="settings_general_users_prefs_title">Usuaris</string>
|
||||
<string name="settings_general_users_prefs_user_not_used">No usat per cap tema</string>
|
||||
<string name="settings_general_dark_mode_title">Mode fosc</string>
|
||||
<string name="settings_advanced_connection_protocol_title">Protocol de connexió</string>
|
||||
<string name="notification_popup_file_downloading">Descarregant %1$s, %2$d%%
|
||||
\n%3$s</string>
|
||||
<string name="settings_title">Configuració</string>
|
||||
<string name="settings_notifications_muted_until_show_all">Mostrant totes les notificacions</string>
|
||||
<string name="settings_notifications_muted_until_forever">Notificacions silenciades fins que es reactivin</string>
|
||||
<string name="settings_notifications_muted_until_x">Notificacions silenciades fins %1$s</string>
|
||||
<string name="settings_notifications_min_priority_min">Qualsevol prioritat</string>
|
||||
<string name="settings_notifications_min_priority_low">Prioritat baixa i superiors</string>
|
||||
<string name="settings_notifications_min_priority_max">Només prioritat màxima</string>
|
||||
<string name="settings_advanced_unifiedpush_title">Activar UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy actuarà com a distribuidor de UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfy no actuarà com a distribuidor de UnifiedPush</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">Activar registre per poder compartir-lo més endavant per resoldre problemes.</string>
|
||||
<string name="settings_advanced_clear_logs_title">Eliminar registres</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_scrubbed">Carregar i copiar enllaç (censurat)</string>
|
||||
<string name="settings_advanced_clear_logs_summary">Eliminar registres i tornar a començar</string>
|
||||
<string name="settings_advanced_clear_logs_deleted_toast">Registres eliminats</string>
|
||||
<string name="settings_advanced_export_logs_copied_logs">Registres copiats al porta-retalls</string>
|
||||
<string name="settings_advanced_export_logs_uploading">Carregant registre…</string>
|
||||
<string name="settings_advanced_export_logs_copied_url">Registres carregats i URL copiada</string>
|
||||
<string name="settings_advanced_export_logs_error_uploading">Ha fallat la càrrega de registres: %1$s</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Usa un flux JSON a través d\'HTTP per tal de connectar-te al servidor. Aquest mètode és robust, però pot consumir molta bateria.</string>
|
||||
<string name="settings_about_version_title">Versió</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Usa WebSockets per connectar al servidor. Aquest és el mètode recomanat, però pot necessitar configuració addicional al teu proxy.</string>
|
||||
<string name="settings_about_version_format">ntfy %1$s (%2$s)</string>
|
||||
<string name="detail_settings_notifications_instant_title">Entrega instantània</string>
|
||||
<string name="detail_settings_notifications_instant_summary_on">Les notificacions s\'entreguen instantàniament. Requereix d\'un servei en primer pla i consumeix molta bateria.</string>
|
||||
<string name="detail_settings_notifications_instant_summary_off">Les notificacions s\'entreguen usant FireBase. L\'entrega es pot retardar, però consumeix menys bateria.</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Configuració personalitzada de notificacions</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">Usant configuració personalitzada en aquesta subscripció</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Mantenir alertes</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Alertar un sol cop</string>
|
||||
<string name="detail_settings_appearance_icon_set_title">Icona de subscripció</string>
|
||||
<string name="detail_settings_about_header">Quant a</string>
|
||||
<string name="detail_settings_appearance_icon_remove_title">Icona de subscripció (prem per eliminar)</string>
|
||||
<string name="user_dialog_title_edit">Editar usuari</string>
|
||||
<string name="user_dialog_description_add">Pots afegir un usuari aquí. Tots els temes del servidor usaran aquest usuari.</string>
|
||||
<string name="user_dialog_username_hint">Nom d\'usuari</string>
|
||||
<string name="user_dialog_button_cancel">Cancel·lar</string>
|
||||
<string name="notification_popup_action_open">Obrir</string>
|
||||
<string name="notification_popup_action_browse">Explorar</string>
|
||||
<string name="notification_popup_action_download">Descarregar</string>
|
||||
<string name="notification_popup_action_cancel">Cancel·lar</string>
|
||||
<string name="notification_popup_file">%1$s
|
||||
\nArxiu: %2$s</string>
|
||||
<string name="notification_popup_file_download_successful">%1$s
|
||||
\nArxiu: %2$s, descarregat</string>
|
||||
<string name="notification_popup_file_download_failed">%1$s
|
||||
\nArxiu: %2$s, descàrrega fallida</string>
|
||||
<string name="notification_popup_user_action_failed">%1$s fallida: %2$s</string>
|
||||
<string name="settings_notifications_muted_until_title">Silenciar notificacions</string>
|
||||
<string name="settings_notifications_min_priority_default">Prioritat normal i superiors</string>
|
||||
<string name="settings_notifications_min_priority_high">Prioritat alta i superiors</string>
|
||||
<string name="settings_notifications_auto_download_100k">Si inferior a 100 kB</string>
|
||||
<string name="settings_notifications_auto_download_500k">Si inferior a 500 kB</string>
|
||||
<string name="settings_notifications_auto_download_1m">Si inferior a 1 MB</string>
|
||||
<string name="settings_notifications_auto_download_5m">Si inferior a 5 MB</string>
|
||||
<string name="settings_notifications_auto_download_10m">Si inferior a 10 MB</string>
|
||||
<string name="settings_notifications_auto_download_50m">Si inferior a 50 MB</string>
|
||||
<string name="settings_notifications_auto_delete_title">Eliminar notificacions</string>
|
||||
<string name="settings_notifications_auto_delete_summary_never">No eliminar mai les notificacions automàticament</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_day">Eliminar les notificacions automàticament al cap d\'un dia</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_days">Eliminar automàticament les notificacions al cap de tres dies</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_month">Eliminar automàticament les notificacions al cap d\'un mes</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_months">Eliminar automàticament les notificacions al cap de 3 mesos</string>
|
||||
<string name="settings_notifications_auto_delete_three_months">Al cap de 3 mesos</string>
|
||||
<string name="settings_general_header">General</string>
|
||||
<string name="settings_general_users_summary">Afegir/eliminar usuaris a temes protegits</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_one">Usat pel tema %1$s</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_many">Usat pels temes %1$s</string>
|
||||
<string name="settings_general_dark_mode_entry_dark">Mode fosc</string>
|
||||
<string name="settings_backup_restore_header">Còpia de seguretat & Restauració</string>
|
||||
<string name="settings_backup_restore_backup_title">Fer còpia de seguretat en arxiu</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything">Tot</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything_no_users">Tot, excepte usuaris</string>
|
||||
<string name="settings_backup_restore_backup_entry_settings_only">Només configuració</string>
|
||||
<string name="settings_backup_restore_backup_successful">Còpia de seguretat creada</string>
|
||||
<string name="settings_backup_restore_backup_failed">Còpia de seguretat fallida: %1$s</string>
|
||||
<string name="settings_backup_restore_restore_successful">Recuperació exitosa</string>
|
||||
<string name="settings_advanced_broadcast_summary_disabled">Les aplicacions no poden rebre notificacions com a missatges</string>
|
||||
<string name="settings_advanced_record_logs_title">Gravar registres</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_text">Aquest temes/noms de host han estat reemplaçats per noms de fruites, per tal que els puguis compartir tranquil·lament:
|
||||
\n
|
||||
\n%1$s
|
||||
\n
|
||||
\nLes contrasenyes s\'han descartat, però no es mostren.</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_empty">Cap tema/nom de host ha estat censurat. Potser no tens cap subscripció\?</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_button_ok">D\'acord</string>
|
||||
<string name="settings_about_version_copied_to_clipboard_message">Copiat al porta-retalls</string>
|
||||
<string name="detail_settings_appearance_header">Apariència</string>
|
||||
<string name="detail_settings_appearance_icon_set_summary">Triar una icona per mostrar a les notificacions</string>
|
||||
<string name="detail_settings_appearance_icon_remove_summary">Icona mostrada a notificacions d\'aquest tema</string>
|
||||
<string name="user_dialog_password_hint_add">Contrasenya</string>
|
||||
<string name="user_dialog_password_hint_edit">Contrasenya (no canvia si es deixa en blanc)</string>
|
||||
<string name="user_dialog_button_add">Afegir usuari</string>
|
||||
<string name="settings_notifications_auto_download_summary_never">Mai descarregar automàticament els adjunts</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_jsonhttp">Flux JSON a través d\'HTTP</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">WebSockets</string>
|
||||
<string name="settings_about_header">Quant a</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_original">Carregar i copiar enllaç</string>
|
||||
<string name="user_dialog_button_delete">Eliminar usuari</string>
|
||||
<string name="user_dialog_button_save">Guardar</string>
|
||||
</resources>
|
|
@ -22,8 +22,8 @@
|
|||
\n%2$s</string>
|
||||
<string name="main_action_bar_title">Odebíraná témata</string>
|
||||
<string name="main_menu_notifications_enabled">Oznámení zapnuta</string>
|
||||
<string name="channel_notifications_default_name">Výchozí priorita</string>
|
||||
<string name="channel_notifications_high_name">Vysoká priorita</string>
|
||||
<string name="channel_notifications_default_name">Oznámení (výchozí priorita)</string>
|
||||
<string name="channel_notifications_high_name">Oznámení (vysoká priorita)</string>
|
||||
<string name="main_menu_notifications_disabled_until">Oznámení ztlumena do %1$s</string>
|
||||
<string name="main_menu_settings_title">Nastavení</string>
|
||||
<string name="main_menu_docs_title">Přečíst dokumentaci</string>
|
||||
|
@ -213,7 +213,7 @@
|
|||
<string name="settings_advanced_clear_logs_summary">Odstranit dříve zaznamenané protokoly a začít znovu</string>
|
||||
<string name="settings_advanced_clear_logs_deleted_toast">Protokoly odstraněny</string>
|
||||
<string name="settings_advanced_connection_protocol_title">Protokol připojení</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Pro připojení k serveru použít WebSockets. Jedná se o doporučenou metodu, která však může vyžadovat další konfiguraci v proxy serveru.</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Pro připojení k serveru použít WebSockets. Toto nastavení se stane výchozím v červnu 2022.</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">WebSockets</string>
|
||||
<string name="settings_about_header">O programu</string>
|
||||
<string name="settings_about_version_title">Verze</string>
|
||||
|
@ -255,9 +255,9 @@
|
|||
<string name="detail_menu_test">Odeslat testovací oznámení</string>
|
||||
<string name="detail_menu_clear">Vymazat všechna oznámení</string>
|
||||
<string name="settings_notifications_muted_until_forever">Oznámení ztlumena až do obnovení</string>
|
||||
<string name="channel_notifications_low_name">Malá priorita</string>
|
||||
<string name="channel_notifications_min_name">Nejnižší priorita</string>
|
||||
<string name="channel_notifications_max_name">Nejvyšší priorita</string>
|
||||
<string name="channel_notifications_low_name">Oznámení (malá priorita)</string>
|
||||
<string name="channel_notifications_min_name">Oznámení (nejnižší priorita)</string>
|
||||
<string name="channel_notifications_max_name">Oznámení (nejvyšší priorita)</string>
|
||||
<string name="detail_menu_copy_url">Kopírovat adresu tématu</string>
|
||||
<string name="detail_settings_title">Nastavení odběru</string>
|
||||
<string name="detail_action_mode_delete_dialog_cancel">Zrušit</string>
|
||||
|
@ -299,7 +299,7 @@
|
|||
<string name="settings_advanced_export_logs_entry_copy_original">Kopírovat do schránky</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_scrubbed">Kopírovat do schránky (cenzurované)</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_button_ok">OK</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Pro připojení k serveru použít JSON přes protokol HTTP. Tato metoda je ověřená v praxi, ale může spotřebovávat více baterie.</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Pro připojení k serveru použít JSON přes protokol HTTP. Tato metoda je zastaralá a bude odstraněna v červnu 2022.</string>
|
||||
<string name="user_dialog_description_add">Zde můžete přidat uživatele. Tento uživatel bude používán ve všech tématech pro daný server.</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_jsonhttp">JSON přes HTTP</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">Přihlášeno k odběru pěti témat okamžitého doručení</string>
|
||||
|
@ -317,30 +317,4 @@
|
|||
<string name="channel_subscriber_notification_instant_text_six">Přihlášeno k odběru šesti témat okamžitého doručení</string>
|
||||
<string name="detail_settings_notifications_instant_summary_off">Oznámení jsou doručena pomocí služby Firebase. Doručování může být zpožděné, ale spotřebovává méně baterie.</string>
|
||||
<string name="detail_settings_notifications_instant_title">Okamžité doručení</string>
|
||||
<string name="detail_settings_appearance_display_name_title">Zobrazit název</string>
|
||||
<string name="detail_settings_appearance_display_name_message">Nastavit vlastní zobrazovaný název pro tento odběr. Pro výchozí hodnotu (%1$s) ponechte prázdné.</string>
|
||||
<string name="detail_settings_appearance_display_name_default_summary">%1$s (výchozí)</string>
|
||||
<string name="detail_settings_about_header">O aplikaci</string>
|
||||
<string name="detail_settings_about_topic_url_title">URL tématu</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">Zkopírováno do schránky</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">Vymazat URL služby</string>
|
||||
<string name="main_banner_websocket_button_enable_now">Povolit nyní</string>
|
||||
<string name="main_banner_websocket_text">WebSockets jsou doporučenou metodou připojení k vašemu serveru, která může zlepšit zvýšit výdrž baterie, ale může vyžadovat <a href="https://ntfy.sh/docs/config/#nginxapache2caddy">další konfiguraci v proxy serveru</a>. Metodu připojení lze přepnout v Nastavení.</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">Zvolit URL služby</string>
|
||||
<string name="main_menu_donate_title">Přispět 💸</string>
|
||||
<string name="detail_item_cannot_open_apk">Aplikace již nelze nainstalovat. Místo toho stahujte přes prohlížeč. Podrobnosti naleznete v issue #531.</string>
|
||||
<string name="channel_notifications_group_default_name">Výchozí</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">Upozornění s nejvyšší prioritou pouze jednou</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">Používání vlastních nastavení pro tento odběr</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Konfigurace nastavení oznámení</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Stále upozorňovat</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Upozornit pouze jednou</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Vlastní nastavení oznámení</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">Zachovat upozornění na nejvyšší prioritu</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">Oznámení s maximální prioritou nepřetržitě upozorňují až do odvolání</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">Použití výchozího nastavení (zvuky, vlastní nastavení funkce Nerušit, atd.)</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">Vlastní nastavení funkce Nerušit (DND), zvuky, atd.</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy bude fungovat jako distributor UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_title">Povolit UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfy nebude fungovat jako distributor UnifiedPush</string>
|
||||
</resources>
|
||||
</resources>
|
||||
|
|
|
@ -1,6 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_notifications_high_name">Blaenoriaeth uchel</string>
|
||||
<string name="channel_notifications_min_name">Blaenoriaeth lleiaf</string>
|
||||
<string name="channel_notifications_low_name">Blaenoriaeth isel</string>
|
||||
</resources>
|
||||
<resources></resources>
|
|
@ -1,20 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_subscriber_notification_instant_text">Abonnerer på emner med øjeblikkelig levering</string>
|
||||
<string name="channel_notifications_max_name">Maks. prioritet</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Abonnerer på to emner om øjeblikkelig levering</string>
|
||||
<string name="channel_notifications_group_default_name">standard</string>
|
||||
<string name="channel_subscriber_notification_instant_text_six">Abonnerer på seks emner med øjeblikkelig levering</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">Abonnerer på tre emner med øjeblikkelig levering</string>
|
||||
<string name="channel_subscriber_service_name">Abonnementsservice</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">Abonnerer på fem emner med øjeblikkelig levering</string>
|
||||
<string name="channel_notifications_default_name">Standardprioritet</string>
|
||||
<string name="channel_notifications_min_name">Minimum prioritet</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">Abonnerer på %1$d emner med øjeblikkelig levering</string>
|
||||
<string name="channel_notifications_low_name">Lav prioritet</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">Abonnerer på emner</string>
|
||||
<string name="channel_subscriber_notification_title">Lytter efter indgående notifikationer</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Abonnerer på et emne med øjeblikkelig levering</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">Abonnerer på fire emner med øjeblikkelig levering</string>
|
||||
<string name="channel_notifications_high_name">Høj prioritet</string>
|
||||
</resources>
|
|
@ -1,11 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_notifications_low_name">Niedrige Priorität</string>
|
||||
<string name="channel_notifications_default_name">Normale Priorität</string>
|
||||
<string name="channel_notifications_high_name">Hohe Priorität</string>
|
||||
<string name="channel_notifications_max_name">Höchste Priorität</string>
|
||||
<string name="channel_notifications_low_name">Benachrichtigungen (niedrige Priorität)</string>
|
||||
<string name="channel_notifications_default_name">Benachrichtigungen (normale Priorität)</string>
|
||||
<string name="channel_notifications_high_name">Benachrichtigungen (hohe Priorität)</string>
|
||||
<string name="channel_notifications_max_name">Benachrichtigungen (max. Priorität)</string>
|
||||
<string name="channel_subscriber_service_name">Abo Service</string>
|
||||
<string name="channel_notifications_min_name">Min. Priorität</string>
|
||||
<string name="channel_notifications_min_name">Benachrichtigungen (min. Priorität)</string>
|
||||
<string name="channel_subscriber_notification_title">Warte auf Benachrichtigungen</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Ein Sofortnachrichten-Thema abonniert</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Zwei Sofortnachrichten-Themen abonniert</string>
|
||||
|
@ -69,7 +69,7 @@
|
|||
<string name="detail_delete_dialog_permanently_delete">Endgültig löschen</string>
|
||||
<string name="detail_delete_dialog_cancel">Abbrechen</string>
|
||||
<string name="detail_test_title">Test: Du kannst einen Titel festlegen.</string>
|
||||
<string name="detail_test_message">Dies ist eine Test-Benachrichtigung aus der ntfy Android-App. Sie hat die Priorität %1$d. Wenn Du eine neue Test-Benachrichtigung sendest, sieht diese vielleicht anders aus.</string>
|
||||
<string name="detail_test_message">Dies ist eine Test-Benachrichtigung aus der ntfy Android-App. Sie hat die Priorität %1$d. Wenn Du eine neue Test-Benachrichtigung sendest, siehst diese vielleicht anders aus.</string>
|
||||
<string name="detail_test_message_error">Nachricht kann nicht gesendet werden: %1$s</string>
|
||||
<string name="detail_test_message_error_unauthorized_user">Nachricht kann nicht gesendet werden: Benutzer \"%1$s\" hat keine Berechtigung.</string>
|
||||
<string name="detail_test_message_error_too_large">Nachricht kann nicht gesendet werden: Anhang zu groß.</string>
|
||||
|
@ -309,7 +309,7 @@
|
|||
<string name="detail_settings_appearance_header">Darstellung</string>
|
||||
<string name="detail_settings_appearance_icon_set_title">Abo-Icon</string>
|
||||
<string name="detail_settings_appearance_icon_set_summary">Ein Icon zur Darstellung in Benachrichtigungen auswählen</string>
|
||||
<string name="detail_settings_appearance_icon_remove_title">Abo-Icon (entfernen durch Antippen)</string>
|
||||
<string name="detail_settings_appearance_icon_remove_title">Abo-Icon (entfernen durch antippen)</string>
|
||||
<string name="detail_settings_appearance_icon_error_saving">Kann Icon nicht speichern: %1$s</string>
|
||||
<string name="detail_settings_global_setting_title">Globale Einstellung verwenden</string>
|
||||
<string name="detail_settings_global_setting_suffix">globale Einstellung</string>
|
||||
|
@ -323,26 +323,8 @@
|
|||
<string name="add_dialog_base_urls_dropdown_clear">Service-URL löschen</string>
|
||||
<string name="detail_settings_appearance_display_name_default_summary">%1$s (Standard)</string>
|
||||
<string name="detail_settings_appearance_display_name_title">Anzeigename</string>
|
||||
<string name="detail_settings_appearance_display_name_message">Gib einen eigenen Anzeigenamen für dieses Abo an. Leer lassen für den Standardwert (%1$s).</string>
|
||||
<string name="detail_settings_appearance_display_name_message">Gib einen eigenen Anzeigenamen für diese Abo an. Leer lassen für den Standardwert (%1$s).</string>
|
||||
<string name="detail_settings_about_topic_url_title">Themen-URL</string>
|
||||
<string name="detail_settings_about_header">Über</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">In Zwischenablage kopiert</string>
|
||||
<string name="main_menu_donate_title">Spenden 💸</string>
|
||||
<string name="detail_item_cannot_open_apk">Apps können nicht mehr installiert werden. Bitte stattdessen über einen Browser herunterladen. Details siehe Issue #531.</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">Verwende eigene Einstellungen für dieses Thema</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Beanchrichtigungseinstellungen konfigurieren</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Durchgehend alarmieren</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Nur einmal alarmieren</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">Bei höchster Priorität dauerhaft alarmieren</string>
|
||||
<string name="channel_notifications_group_default_name">Standard</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">Benachrichtigungen mit höchster Priorität alarmieren nur einmal</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">Benachrichtigungen mit höchster Priorität alarmieren dauerhaft bis sie bestätigt werden</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Eigene Benachrichtigungseinstellungen</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">Verwende Standardeinstellungen (Töne, Übergehen von \"Nicht Stören\" etc.)</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">„Bitte nicht stören“ unterbrechen, Töne, etc.</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfy arbeitet nicht als UnifiedPush-Distributor</string>
|
||||
<string name="settings_advanced_unifiedpush_title">UnifiedPush aktivieren</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy arbeitet als UnifiedPush-Distributor</string>
|
||||
<string name="eos_settings_enable_title">Den Verteiler aktivieren</string>
|
||||
<string name="eos_settings_enable_description">Es ermöglicht Drittanbieteranwendungen, UnifiedPush-Benachrichtigungen zu empfangen</string>
|
||||
</resources>
|
|
@ -1,84 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="main_menu_settings_title">Ρυθμίσεις</string>
|
||||
<string name="channel_notifications_max_name">Μέγιστη προτεραιότητα</string>
|
||||
<string name="channel_subscriber_notification_title">Ακρόαση για εισερχόμενες ειδοποιήσεις</string>
|
||||
<string name="main_menu_report_bug_title">Αναφέρετε ένα σφάλμα</string>
|
||||
<string name="main_menu_rate_title">Βαθμολογήστε την εφαρμογή ⭐</string>
|
||||
<string name="main_action_mode_delete_dialog_message">Κατάργηση συνδρομής στο επιλεγμένο θέμα και μόνιμη διαγραφή όλων των ειδοποιήσεων;</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">Μόνιμη διαγραφή</string>
|
||||
<string name="main_item_status_text_one">%1$d ειδοποίηση</string>
|
||||
<string name="main_item_status_text_not_one">%1$d ειδοποιήσεις</string>
|
||||
<string name="main_item_status_reconnecting">επανασύνδεση…</string>
|
||||
<string name="main_item_status_unified_push">%1$s (UnifiedPush)</string>
|
||||
<string name="main_item_date_yesterday">εχθές</string>
|
||||
<string name="main_add_button_description">Προσθήκη συνδρομής</string>
|
||||
<string name="channel_notifications_min_name">Ελάχιστη προτεραιότητα</string>
|
||||
<string name="channel_notifications_low_name">Χαμηλή προτεραιότητα</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Έχει γίνει εγγραφή σε θέματα άμεσης παράδοσης</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Έχει γίνει εγγραφή σε δύο θέματα άμεσης παράδοσης</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">Έχει γίνει εγγραφή σε %1$d θέματα άμεσης παράδοσης</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">Έχει γίνει εγγραφή σε δύο θέματα</string>
|
||||
<string name="channel_notifications_high_name">Υψηλή προτεραιότητα</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">Έχει γίνει εγγραφή σε τέσσερα θέματα άμεσης παράδοσης</string>
|
||||
<string name="channel_notifications_default_name">Προκαθορισμένη προτεραιότητα</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">Έχει γίνει εγγραφή σε πέντε θέματα άμεσης παράδοσης</string>
|
||||
<string name="channel_subscriber_service_name">Συνδρομητική υπηρεσία</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">Έχει γίνει εγγραφή σε τρία θέματα</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Έχει γίνει εγγραφή σε ένα θέμα άμεσης παράδοσης</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">Έχει γίνει εγγραφή σε τρία θέματα άμεσης παράδοσης</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">Έχει γίνει εγγραφεί σε θέματα</string>
|
||||
<string name="channel_subscriber_notification_instant_text_six">Έχει γίνει εγγραφή σε έξι θέματα άμεσης παράδοσης</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">Έχει γίνει εγγραφή σε ένα θέμα</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">Έχει γίνει εγγραφή σε τέσσερα θέματα</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_five">Έχει γίνει εγγραφή σε πέντε θέματα</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_six">Έχει γίνει εγγραφή σε έξι θέματα</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">Έχει γίνει εγγραφή σε %1$d θέματα</string>
|
||||
<string name="refresh_message_no_results">Όλα είναι ενημερωμένα</string>
|
||||
<string name="refresh_message_result">Λήφθηκαν %1$d ειδοποίηση/ειδοποιήσεις</string>
|
||||
<string name="refresh_message_error">Δεν ήταν δυνατή η ανανέωση %1$d συνδρομών
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="refresh_message_error_one">Δεν ήταν δυνατή η ανανέωση της συνδρομής: %1$s</string>
|
||||
<string name="main_action_bar_title">Θέματα με συνδρομή</string>
|
||||
<string name="main_menu_notifications_enabled">Ειδοποιήσεις ενεργοποιημένες</string>
|
||||
<string name="main_menu_notifications_disabled_forever">Ειδοποιήσεις σιωπήθηκαν</string>
|
||||
<string name="main_menu_notifications_disabled_until">Ειδοποιήσεις σε σιωπή μέχρι %1$s</string>
|
||||
<string name="main_menu_docs_title">Διαβάστε τα έγγραφα</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">Κατάργηση συνδρομής</string>
|
||||
<string name="main_action_mode_delete_dialog_cancel">Ακύρωση</string>
|
||||
<string name="main_no_subscriptions_text">Φαίνεται ότι δεν έχετε ακόμη συνδρομές.</string>
|
||||
<string name="main_unified_push_toast">Αυτή η συνδρομή διαχειρίζεται από %1$s μέσω του UnifiedPush</string>
|
||||
<string name="main_how_to_intro">Κάντε κλικ στο + για να δημιουργήσετε ή να εγγραφείτε σε ένα θέμα. Στη συνέχεια, λαμβάνετε ειδοποιήσεις στη συσκευή σας κατά την αποστολή μηνυμάτων μέσω PUT ή POST.</string>
|
||||
<string name="main_banner_battery_text">Η βελτιστοποίηση μπαταρίας θα πρέπει να είναι απενεργοποιημένη για την εφαρμογή ώστε αποφευχθούν προβλήματα κατά την παράδοσης ειδοποιήσεων.</string>
|
||||
<string name="main_how_to_link">Λεπτομερείς οδηγίες που διατίθενται στο ntfy.sh, και στα έγγραφα.</string>
|
||||
<string name="main_banner_battery_button_remind_later">Ερώτηση αργότερα</string>
|
||||
<string name="main_banner_battery_button_dismiss">Απόρριψη</string>
|
||||
<string name="main_banner_battery_button_fix_now">Διορθώστε τώρα</string>
|
||||
<string name="channel_notifications_group_default_name">Προκαθορισμένο</string>
|
||||
<string name="add_dialog_description_below">Τα θέματα μπορεί να μην προστατεύονται από κωδικό, οπότε επιλέξτε ένα όνομα που να είναι δύσκολο να μαντευτεί. Όταν εγγραφείτε, θα μπορείτε να κάνετε PUT/POST ειδοποιήσεις.</string>
|
||||
<string name="add_dialog_topic_name_hint">Όνομα θέματος</string>
|
||||
<string name="add_dialog_use_another_server">Χρήση άλλου server/εξυπηρετητή</string>
|
||||
<string name="add_dialog_title">Εγγραφή σε ειδοποίηση</string>
|
||||
<string name="main_menu_donate_title">Κάντε δωρεά</string>
|
||||
<string name="main_banner_websocket_text">Η μετάβαση σε WebSockets είναι ο συνιστώμενος τρόπος σύνδεσης με τον διακομιστή σας και μπορεί να βελτιώσει τη διάρκεια ζωής της μπαταρίας, αλλά μπορεί να απαιτεί <a href="https://ntfy.sh/docs/config/#nginxapache2caddy">πρόσθετες ρυθμίσεις στο διακομιστή μεσολάβησης</a>. Αυτό μπορεί να ενεργοποιηθεί στις Ρυθμίσεις.</string>
|
||||
<string name="add_dialog_login_password_hint">Κωδικός πρόσβασης</string>
|
||||
<string name="add_dialog_login_error_not_authorized">Η σύνδεση απέτυχε. Ο χρήστης %1$s δεν είναι εξουσιοδοτημένος.</string>
|
||||
<string name="add_dialog_foreground_description">Η άμεση παράδοση είναι πάντα ενεργή για χρήστες εκτός από τον/την %1$s.</string>
|
||||
<string name="add_dialog_login_new_user">Νέος χρήστης</string>
|
||||
<string name="add_dialog_login_title">Απαιτείται σύνδεση</string>
|
||||
<string name="main_banner_websocket_button_remind_later">Ρωτήστε αργότερα</string>
|
||||
<string name="add_dialog_instant_delivery_description">Εξασφαλίζει την άμεση παράδοση των μηνυμάτων, ακόμη και αν η συσκευή είναι ανενεργή.</string>
|
||||
<string name="main_banner_websocket_button_enable_now">Ενεργοποίηση τώρα</string>
|
||||
<string name="add_dialog_use_another_server_description">Εισάγετε τις παρακάτω διευθύνσεις URL υπηρεσιών για να εγγραφείτε σε θέματα από άλλους διακομιστές.</string>
|
||||
<string name="add_dialog_button_cancel">Ακύρωση</string>
|
||||
<string name="add_dialog_error_connection_failed">Η σύνδεση απέτυχε: %1$s</string>
|
||||
<string name="add_dialog_button_subscribe">Εγγραφή</string>
|
||||
<string name="add_dialog_button_login">Σύνδεση</string>
|
||||
<string name="add_dialog_login_username_hint">Όνομα χρήστη</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">Επιλέξτε URL υπηρεσίας</string>
|
||||
<string name="add_dialog_instant_delivery">Άμεση παράδοση σε κατάσταση doze</string>
|
||||
<string name="add_dialog_login_description">Αυτό το θέμα απαιτεί να συνδεθείτε. Παρακαλώ πληκτρολογήστε ένα όνομα χρήστη και έναν κωδικό πρόσβασης.</string>
|
||||
<string name="main_banner_websocket_button_dismiss">Απορρίψτε το</string>
|
||||
<string name="add_dialog_button_back">Πίσω</string>
|
||||
</resources>
|
|
@ -1,2 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
|
@ -1,11 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_notifications_min_name">Prioridad mínima</string>
|
||||
<string name="channel_notifications_min_name">Notificaciones (prioridad mínima)</string>
|
||||
<string name="detail_item_menu_copy_url">Copiar URL</string>
|
||||
<string name="notification_popup_action_open">Abrir</string>
|
||||
<string name="channel_notifications_low_name">Prioridad baja</string>
|
||||
<string name="channel_notifications_default_name">Prioridad predeterminada</string>
|
||||
<string name="channel_notifications_max_name">Prioridad máxima</string>
|
||||
<string name="channel_notifications_low_name">Notificaciones (prioridad baja)</string>
|
||||
<string name="channel_notifications_default_name">Notificaciones (prioridad por defecto)</string>
|
||||
<string name="channel_notifications_max_name">Notificaciones (prioridad máxima)</string>
|
||||
<string name="channel_subscriber_service_name">Servicio de Suscripciones</string>
|
||||
<string name="channel_subscriber_notification_title">Escuchando por notificaciones entrantes</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Suscrito a un tópico de entrega instantánea</string>
|
||||
|
@ -221,7 +221,7 @@
|
|||
<string name="user_dialog_button_add">Añadir usuario</string>
|
||||
<string name="user_dialog_button_cancel">Cancelar</string>
|
||||
<string name="user_dialog_button_save">Guardar</string>
|
||||
<string name="channel_notifications_high_name">Prioridad alta</string>
|
||||
<string name="channel_notifications_high_name">Notificaciones (prioridad alta)</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Suscrito a tópicos de entrega instantánea</string>
|
||||
<string name="main_item_status_unified_push">%1$s (UnifiedPush)</string>
|
||||
<string name="add_dialog_use_another_server_description">Introduzca las URL de servicio para suscribirse a los tópicos de otros servidores.</string>
|
||||
|
@ -327,22 +327,4 @@
|
|||
<string name="add_dialog_base_urls_dropdown_clear">Borrar la URL del servicio</string>
|
||||
<string name="main_banner_websocket_text">Cambiar a WebSockets es la forma recomendada para conectarse a su servidor, y podría mejorar la vida de la batería, pero puede requerir <a href="https://ntfy.sh/docs/config/#nginxapache2caddy">configuración adicional en su proxy</a>. Esto se puede cambiar en la Configuración.</string>
|
||||
<string name="main_banner_websocket_button_enable_now">Habilitar ahora</string>
|
||||
<string name="main_menu_donate_title">Donar 💸</string>
|
||||
<string name="detail_item_cannot_open_apk">Las aplicaciones ya no se pueden instalar desde ntfy. Descárguelas a través del navegador. Consulte el issue #531 para obtener más información.</string>
|
||||
<string name="channel_notifications_group_default_name">Predeterminado</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">Mantener alertas para la máxima prioridad</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">Las notificaciones de prioridad máxima alertan continuamente hasta que se descartan</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">Las notificaciones de prioridad máxima solo alertan una vez</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">Ignorar No Molestar (DND), sonidos, etc.</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Seguir alertando</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Configuración de notificaciones personalizadas</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Alertar solo una vez</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">Utilizando configuración personalizada para esta suscripción</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">Utilizando configuración predeterminada (sonidos, no molestar, etc.)</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Configuración de la notificación</string>
|
||||
<string name="settings_advanced_unifiedpush_title">Activar UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy actuará como distribuidor UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfy no actuará como distribuidor UnifiedPush</string>
|
||||
<string name="eos_settings_enable_title">Habilitar el distribuidor</string>
|
||||
<string name="eos_settings_enable_description">Permite a las aplicaciones de terceros recibir notificaciones de UnifiedPush</string>
|
||||
</resources>
|
|
@ -1,42 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_notifications_min_name">اولویت اصلی</string>
|
||||
<string name="channel_notifications_default_name">اولویت پیش تعریف</string>
|
||||
<string name="channel_notifications_low_name">اولویت پایین</string>
|
||||
<string name="channel_notifications_group_default_name">پیش تعریف</string>
|
||||
<string name="channel_subscriber_notification_instant_text">عضویت یافته در تحویل فوری اطلاعیه ها</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">عضویت یافته در تحویل یک موضوع</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">عضویت یافته در دریافت سه موضوع</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">عضویت یافته در دریافت پنج موضوع</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">عضویت یافته در دریافت %1$d موضوع</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">عضویت یافته در موضوعات</string>
|
||||
<string name="main_menu_settings_title">تنظیمات</string>
|
||||
<string name="main_menu_report_bug_title">گزارش یک نقص فنی</string>
|
||||
<string name="main_menu_docs_title">مطالعه مستندات</string>
|
||||
<string name="main_menu_rate_title">رتبه دهی به اپ ⭐</string>
|
||||
<string name="main_menu_donate_title">حمایت مالی 💸</string>
|
||||
<string name="main_item_status_text_one">%1$d اطلاعیه</string>
|
||||
<string name="main_item_status_text_not_one">%1$d اطلاعیه</string>
|
||||
<string name="main_item_status_reconnecting">در حال اتصال دوباره …</string>
|
||||
<string name="main_item_date_yesterday">دیروز</string>
|
||||
<string name="main_no_subscriptions_text">به نظر می رسد شما هنوز هیچ عضویتی ندارید.</string>
|
||||
<string name="channel_notifications_high_name">اولویت بالا</string>
|
||||
<string name="channel_notifications_max_name">بالاترین اولویت</string>
|
||||
<string name="channel_subscriber_service_name">آبونمان دریافت خدمات</string>
|
||||
<string name="channel_subscriber_notification_title">گوش به زنگ دریافت اطلاعیه</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">عضویت یافته در دریافت دو موضوع</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">عضویت یافته در دریافت چهار موضوع</string>
|
||||
<string name="channel_subscriber_notification_instant_text_six">عضویت یافته در دریافت شش موضوع</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">عضویت یافته در یک موضوع</string>
|
||||
<string name="refresh_message_result">%1$d اطلاعیه دریافت شد</string>
|
||||
<string name="refresh_message_no_results">همه چیز بروزآوری شده است</string>
|
||||
<string name="refresh_message_error_one">بروزآوری آبونمان %1$s ناموفق بود</string>
|
||||
<string name="main_menu_notifications_enabled">ارسال اطلاعیه در</string>
|
||||
<string name="main_menu_notifications_disabled_forever">اطلاعیه ها بی صدا شده اند</string>
|
||||
<string name="main_menu_notifications_disabled_until">اطلاعیه ها تا %1$s بی صدا شده اند</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">لغو اشتراک</string>
|
||||
<string name="main_action_mode_delete_dialog_message">از سرفصل های انتخاب شده لغو عضویت و همه اطلاعیه ها را برای همیشه پاک کن؟</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">حذف برای همیشه</string>
|
||||
<string name="main_action_mode_delete_dialog_cancel">لغو</string>
|
||||
<string name="main_add_button_description">افزون اشتراک</string>
|
||||
</resources>
|
|
@ -1,346 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="user_dialog_button_add">Lisää käyttäjä</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything_no_users">Kaikki, paitsi käyttäjät</string>
|
||||
<string name="add_dialog_login_password_hint">Salasana</string>
|
||||
<string name="add_dialog_login_error_not_authorized">Kirjautuminen epäonnistui %1$s ei oikeuksia.</string>
|
||||
<string name="settings_general_header">Pääkäyttäjä</string>
|
||||
<string name="add_dialog_foreground_description">Välitön toimitus on aina päällä muille palvelimille kuin %1$s.</string>
|
||||
<string name="detail_clear_dialog_message">Poistetaanko kaikki tämän topikin ilmoitukset \?</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Tilattu välittömään topikkiin</string>
|
||||
<string name="detail_settings_appearance_display_name_title">Näytön nimi</string>
|
||||
<string name="detail_item_menu_copy_url_copied">URL kopioitu leikkelepöydälle</string>
|
||||
<string name="detail_item_snack_deleted">Ilmoitus poistettu</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_original">Kopioi leikkelepöydälle</string>
|
||||
<string name="settings_advanced_broadcast_summary_disabled">Sovellukset eivät voi vastaanottaa ilmoituksia ja lähetyksiä</string>
|
||||
<string name="detail_menu_clear">Poista kaikki ilmoitukset</string>
|
||||
<string name="channel_notifications_max_name">Maksimi tärkeys</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_empty">Aiheita/isäntänimiä ei ole muokattu. Ehkä sinulla ei ole topikkeja\?</string>
|
||||
<string name="add_dialog_login_new_user">Uusi käyttäjä</string>
|
||||
<string name="user_dialog_description_add">Kaikki tietyn palvelimen topikit käyttävät tätä käyttäjää.</string>
|
||||
<string name="share_content_text_hint">Lisää jaettavaksi täällä</string>
|
||||
<string name="settings_backup_restore_backup_title">Varmuuskopioi tiedostoon</string>
|
||||
<string name="share_successful">Viesti julkaistu</string>
|
||||
<string name="settings_advanced_clear_logs_title">Tyhjennä logit</string>
|
||||
<string name="settings_general_users_title">Hallitse käyttäjiä</string>
|
||||
<string name="add_dialog_login_title">Kirjautuminen tarvitaan</string>
|
||||
<string name="settings_notifications_priority_min">min</string>
|
||||
<string name="settings_notifications_auto_delete_summary_never">Älä koskaan poista automaattisesti ilmoituksia</string>
|
||||
<string name="notification_popup_file_download_successful">%1$s
|
||||
\nTiedosto: %2$s, ladattu</string>
|
||||
<string name="notification_popup_action_browse">Julkaise</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Jatka hälyttämistä</string>
|
||||
<string name="settings_advanced_broadcast_title">Lähetä viestejä</string>
|
||||
<string name="main_menu_rate_title">Äänestä aplikaatiota</string>
|
||||
<string name="detail_item_cannot_delete">Ei voida poistaa liitettä %1$s</string>
|
||||
<string name="settings_backup_restore_backup_summary">Vie asetukset, ilmoitukset ja käyttäjät</string>
|
||||
<string name="notification_popup_file_downloading">Lataa %1$s, %2$d%%
|
||||
\n%3$s</string>
|
||||
<string name="main_item_status_text_not_one">%1$d Huomautusta</string>
|
||||
<string name="user_dialog_description_edit">Voit muokata valitun käyttäjän käyttäjätunnusta/salasanaa tai poistaa sen.</string>
|
||||
<string name="notification_dialog_show_all">Näytä kaikki ilmoitukset</string>
|
||||
<string name="settings_notifications_min_priority_min">Kaikki tärkeydet</string>
|
||||
<string name="notification_dialog_30min">30 minuuttia</string>
|
||||
<string name="detail_item_menu_delete">Poista tiedosto</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Tilattu kahteen välittömään topikkiin</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Tee hälytys vain kerran</string>
|
||||
<string name="settings_notifications_auto_download_never">Älä koskaan lataa automaattisesti mitään</string>
|
||||
<string name="notification_popup_user_action_failed">%1$s epäonnistunut: %2$s</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_scrubbed">Tallenna ja kopioi linkki (sensuroitu)</string>
|
||||
<string name="refresh_message_result">%1$d ilmoitusta vastaanotettu</string>
|
||||
<string name="notification_dialog_1h">1 tunti</string>
|
||||
<string name="detail_settings_notifications_instant_title">Välitön lähetys</string>
|
||||
<string name="notification_dialog_forever">Jatkamiseen asti</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_week">Poista ilmoitukset viikon jälkeen</string>
|
||||
<string name="settings_advanced_export_logs_error_uploading">Ei voida tallentaa logia: %1$s</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expires_x">Ei ladattu, vanhentunut %1$s</string>
|
||||
<string name="detail_no_notifications_text">Et ole vielä saanut yhtään ilmoitusta tästä topikista.</string>
|
||||
<string name="detail_item_cannot_open_url">Ei voida avata URL: %1$s</string>
|
||||
<string name="settings_notifications_min_priority_title">Pienin prioriteetti</string>
|
||||
<string name="share_menu_send">Jaa</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">Tilattu kahteen topikkiin</string>
|
||||
<string name="detail_settings_title">Tilausasetukset</string>
|
||||
<string name="detail_item_saved_successfully">Tallennettu nimellä %1$s lataukset kansioon</string>
|
||||
<string name="settings_notifications_auto_delete_one_month">jälkeen kolmenkymmenen päivän</string>
|
||||
<string name="channel_notifications_group_default_name">Oletus</string>
|
||||
<string name="detail_menu_test">Lähetä testi ilmoitus</string>
|
||||
<string name="settings_notifications_priority_high">korkea</string>
|
||||
<string name="main_no_subscriptions_text">Näyttää siltä, että sinulla ei ole vielä tilauksia.</string>
|
||||
<string name="settings_general_users_prefs_user_add_title">Lisää uusi käyttäjä</string>
|
||||
<string name="detail_menu_disable_instant">Poista välittömät ilmoitukset käytöstä</string>
|
||||
<string name="detail_action_mode_delete_dialog_cancel">Peruuta</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">Tilattu %1$d topikkiin</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_original">Tallenna ja kopioi linkki</string>
|
||||
<string name="main_banner_battery_button_fix_now">Korjaa nyt</string>
|
||||
<string name="detail_item_download_info_not_downloaded">Ei ladattu</string>
|
||||
<string name="user_dialog_button_save">Tallenna</string>
|
||||
<string name="detail_delete_dialog_cancel">Peruuta</string>
|
||||
<string name="settings_about_version_copied_to_clipboard_message">Kopioitu leikkelepöydälle</string>
|
||||
<string name="notification_popup_action_download">Lataa</string>
|
||||
<string name="detail_item_cannot_download">Liitettä ei voi avata tai ladata. Linkki vanhentui, eikä paikallista tiedostoa löytynyt.</string>
|
||||
<string name="main_menu_notifications_enabled">Huomautukset päällä</string>
|
||||
<string name="settings_general_dark_mode_summary_system">Käytä järjestelmän oletusta</string>
|
||||
<string name="main_menu_notifications_disabled_forever">Hiljennetyt huomautukset</string>
|
||||
<string name="detail_item_menu_download">Lataa tiedosto</string>
|
||||
<string name="channel_subscriber_notification_instant_text_six">Tilattu kuuteen välittömään topikkiin</string>
|
||||
<string name="main_banner_websocket_button_remind_later">Kysy myöhemmin</string>
|
||||
<string name="detail_item_menu_copy_contents_copied">Ilmoitus kopioitu leikkelepöydälle</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_one">Käytetty topikissa %1$s</string>
|
||||
<string name="detail_settings_appearance_header">Ulkoasu</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_month">Poista ilmoitukset kuukauden jälkeen</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">Tilattu kolmeen välittömään topikkiin</string>
|
||||
<string name="channel_subscriber_service_name">Tilaus palvelu</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">Tilattu viiteen välittömään topikkiin</string>
|
||||
<string name="settings_general_users_prefs_user_add">Lisää käyttäjiä</string>
|
||||
<string name="settings_notifications_auto_delete_three_months">jälkeen kolmen kuukauden</string>
|
||||
<string name="main_add_button_description">Lisää tilaus</string>
|
||||
<string name="notification_dialog_muted_forever_toast_message">Ilmoitukset hiljennetty</string>
|
||||
<string name="settings_notifications_muted_until_show_all">Näytä kaikki ilmoitukset</string>
|
||||
<string name="notification_popup_file_download_failed">%1$s
|
||||
\ntiedosto: %2$s, lataus virhe</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">Poista pysyvästi</string>
|
||||
<string name="settings_notifications_auto_delete_three_days">Jälkeen kolmen päivän</string>
|
||||
<string name="settings_general_dark_mode_summary_light">Vaalea tila päälle</string>
|
||||
<string name="detail_item_cannot_open">Ei voida avata liitettä %1$s</string>
|
||||
<string name="settings_notifications_auto_download_5m">Jos tiedoston koko on alle 5 MB</string>
|
||||
<string name="settings_general_dark_mode_entry_light">Vaalea tila</string>
|
||||
<string name="detail_item_cannot_open_not_found">Liitettä ei voi avata: Tiedosto on ehkä poistettu tai mikään asennettu sovellus ei voi avata tiedostoa.</string>
|
||||
<string name="settings_general_dark_mode_title">Tumma tila</string>
|
||||
<string name="detail_item_download_failed">Ei voida ladata tiedostoa: %1$s</string>
|
||||
<string name="settings_about_version_title">Versio</string>
|
||||
<string name="channel_notifications_default_name">Oletus tärkeys</string>
|
||||
<string name="detail_item_download_info_download_failed">Lataus epäonnistunut</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">Kopoitu leikkelepöydälle</string>
|
||||
<string name="settings_notifications_min_priority_high">Korkea prioriteetti ja sen ylittävät</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">Tärkeimmät ilmoitukset hälyttävät vain kerran</string>
|
||||
<string name="add_dialog_description_below">Topikit eivät ole salasanasuojattuja, joten valitse nimi, jota on vaikea arvata. Kun olet tilannut, voit käyttää PUT/POST ilmoituksia.</string>
|
||||
<string name="settings_backup_restore_header">Varmuuskopioi & palauta</string>
|
||||
<string name="main_item_status_reconnecting">Uudelleen yhdistää …</string>
|
||||
<string name="detail_delete_dialog_message">Lopetetaanko tämän aiheen tilaus ja poistetaanko kaikki saamasi ilmoitukset\?</string>
|
||||
<string name="settings_title">Asetukset</string>
|
||||
<string name="settings_general_dark_mode_entry_dark">Tumma tila</string>
|
||||
<string name="share_content_file_error">Tiedostoa ei voi lukea info: %1$s</string>
|
||||
<string name="add_dialog_instant_delivery_description">Varmistaa, että viestit toimitetaan välittömästi, vaikka laite olisi passiivinen.</string>
|
||||
<string name="detail_action_mode_menu_delete">Poista</string>
|
||||
<string name="main_menu_notifications_disabled_until">Huomautukset hiljennetty %1$s saakka</string>
|
||||
<string name="detail_item_download_info_deleted_expires_x">Poistettu, linkki vanhentuu %1$s</string>
|
||||
<string name="main_banner_websocket_button_enable_now">Ota käyttöön</string>
|
||||
<string name="main_item_date_yesterday">Eilen</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">Mukautettujen asetusten käyttäminen tälle tilaukselle</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfy ei toimi UnifiedPush-jakelijana</string>
|
||||
<string name="detail_settings_global_setting_suffix">Käytetään globaalia asetusta</string>
|
||||
<string name="detail_clear_dialog_permanently_delete">Poista pysyvästi</string>
|
||||
<string name="main_banner_battery_button_remind_later">Kysy myöhemmin</string>
|
||||
<string name="channel_notifications_min_name">Pieni tärkeys</string>
|
||||
<string name="notification_popup_action_open">Auki</string>
|
||||
<string name="detail_item_menu_open">Avaa tiedosto</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">Tärkeimmät ilmoitukset hälyttävät jatkuvasti, kunnes ne hylätään</string>
|
||||
<string name="main_how_to_link">Yksityiskohtaiset ohjeet löytyvät osoitteesta ntfy.sh .</string>
|
||||
<string name="settings_notifications_channel_prefs_summary">Älä häiritse tila (DND) äänet, jne.</string>
|
||||
<string name="settings_general_users_prefs_user_not_used">Ei käytetty missään topikissa</string>
|
||||
<string name="detail_how_to_link">Yksityiskohtaiset ohjeet ovat saatavilla osoitteessa ntfy.sh ja dokumenteissa.</string>
|
||||
<string name="settings_notifications_muted_until_title">Hiljennetyt ilmoitukset</string>
|
||||
<string name="detail_test_message_error">Ei voida lähettää: %1$s</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">Tilattu neljään topikkiin</string>
|
||||
<string name="settings_general_default_base_url_default_summary">%1$s (oletus)</string>
|
||||
<string name="detail_instant_delivery_enabled">Välitön lähetys päällä</string>
|
||||
<string name="notification_dialog_2h">2 tuntia</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything">Kaikki</string>
|
||||
<string name="settings_general_users_summary">Lisää/poista käyttäjiä suojatuille topikeille</string>
|
||||
<string name="add_dialog_use_another_server_description">Syötä palvelun URL-osoitte alle tilataksesi topikkeja muilta palvelimilta.</string>
|
||||
<string name="settings_notifications_auto_delete_one_day">Jälkeen yhden päivän</string>
|
||||
<string name="settings_general_dark_mode_summary_dark">Tumma tila päällä. Oletko vampyyri \?</string>
|
||||
<string name="settings_general_users_prefs_user_add_summary">Lisää uusi käyttäjä uudelle palvelimelle</string>
|
||||
<string name="settings_general_dark_mode_entry_system">Käytä oletusasetusta</string>
|
||||
<string name="notification_dialog_save">Tallenna</string>
|
||||
<string name="user_dialog_base_url_hint">Palvelun URL</string>
|
||||
<string name="detail_item_download_info_download_failed_expires_x">Lataus epäonnistunut, linkki vanhentunut %1$s</string>
|
||||
<string name="settings_notifications_priority_max">max</string>
|
||||
<string name="user_dialog_password_hint_add">Salasana</string>
|
||||
<string name="settings_notifications_min_priority_summary_any">Näytä kaikki ilmoitukset</string>
|
||||
<string name="main_unified_push_toast">%1$s hallinnoi tätä tilausta UnifiedPushin kautta</string>
|
||||
<string name="detail_item_menu_copy_contents">Kopioi ilmoitus</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">Tilattu %1$d välittömään topikkiin</string>
|
||||
<string name="detail_menu_enable_instant">Ota välittömät ilmoitukset käyttöön</string>
|
||||
<string name="settings_advanced_export_logs_summary">Kopioi lokit leikepöydälle tai lataa osoitteeseen nopaste.net (omistaja ntfy). Isäntänimet ja aiheet voidaan sensuroida, ilmoituksia ei koskaan tehdä.</string>
|
||||
<string name="detail_action_mode_delete_dialog_permanently_delete">Poista pysyvästi</string>
|
||||
<string name="notification_dialog_enabled_toast_message">Jatka ilmoituksia</string>
|
||||
<string name="main_menu_report_bug_title">Raportoi bugista</string>
|
||||
<string name="add_dialog_button_cancel">Peruuta</string>
|
||||
<string name="settings_notifications_min_priority_summary_max">Näytä ilmoitukset jos tärkeys on 5 (max)</string>
|
||||
<string name="settings_advanced_broadcast_summary_enabled">Sovellukset voivat vastaanottaa saapuvia ilmoituksia ja lähetyksiä</string>
|
||||
<string name="notification_dialog_tomorrow">Huomiseen saakka</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Määritä ilmoitusasetukset</string>
|
||||
<string name="add_dialog_topic_name_hint">Topikin nimi, esimerkiksi pentin_hälytykset</string>
|
||||
<string name="channel_notifications_low_name">Matala tärkeys</string>
|
||||
<string name="settings_notifications_auto_download_title">Lataa liitteet</string>
|
||||
<string name="user_dialog_button_delete">Poista käyttäjä</string>
|
||||
<string name="add_dialog_error_connection_failed">Yhteys epäonnistui: %1$s</string>
|
||||
<string name="detail_menu_notifications_disabled_forever">Ilmoitukset hiljennetty</string>
|
||||
<string name="share_content_image_text">Kanssasi jaettiin kuva</string>
|
||||
<string name="main_banner_websocket_text">WebSocketsiin vaihtaminen on suositeltu tapa muodostaa yhteys palvelimeesi, ja se voi parantaa akun käyttöikää, mutta saattaa edellyttää <a href="https://ntfy.sh/docs/config/#nginxapache2caddy">additional config in your proxy</a>. Tämän voi vaihtaa asetuksista.</string>
|
||||
<string name="settings_notifications_channel_prefs_title">Kanavan asetukset</string>
|
||||
<string name="settings_notifications_auto_download_50m">Jos tiedoston koko on alle 50 MB</string>
|
||||
<string name="detail_clear_dialog_cancel">Peruuta</string>
|
||||
<string name="main_action_mode_delete_dialog_cancel">Peruuta</string>
|
||||
<string name="settings_notifications_min_priority_default">Oletus prioriteetin ja sen ylittävät</string>
|
||||
<string name="detail_test_message_error_unauthorized_anon">Viestiä ei voi lähettää: Nimetöntä lähetystä ei sallita.</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">WebSocketit</string>
|
||||
<string name="detail_copied_to_clipboard_message">Kopioitu leikepöydälle</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">Tilattu topikkiin</string>
|
||||
<string name="detail_action_mode_menu_copy">Kopioi</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_jsonhttp">JSON stream yli HTTP</string>
|
||||
<string name="user_dialog_title_add">Lisää käyttäjä</string>
|
||||
<string name="detail_item_download_info_deleted">Poistettu</string>
|
||||
<string name="add_dialog_button_subscribe">Tilaa</string>
|
||||
<string name="settings_advanced_clear_logs_deleted_toast">Logit poistettu</string>
|
||||
<string name="detail_item_download_info_downloading_x_percent">%1$d%% ladattu</string>
|
||||
<string name="user_dialog_button_cancel">Peruuta</string>
|
||||
<string name="add_dialog_button_login">Kirjaudu</string>
|
||||
<string name="settings_backup_restore_restore_summary">Tuo asetukset, ilmoitukset ja käyttäjät</string>
|
||||
<string name="channel_subscriber_notification_title">Kuuntelee sisääntulevia viestejä</string>
|
||||
<string name="detail_how_to_intro">Jos haluat lähettää ilmoituksia tähän topikkiin, lähetä PUT tai POST topikin URL-osoitteeseen.</string>
|
||||
<string name="settings_general_users_prefs_title">Käyttäjät</string>
|
||||
<string name="detail_item_cannot_open_apk">Sovelluksia ei voi enää asentaa. Lataa sen sijaan selaimen kautta. Katso numero #531 saadaksesi lisätietoja.</string>
|
||||
<string name="settings_advanced_clear_logs_summary">Poista aiemmin tallennetut lokit ja aloita alusta</string>
|
||||
<string name="refresh_message_error_one">Ei voitu päivittää: %1$s</string>
|
||||
<string name="add_dialog_login_username_hint">Käyttäjänimi</string>
|
||||
<string name="detail_settings_about_header">-</string>
|
||||
<string name="settings_advanced_export_logs_uploading">Tallenna logi …</string>
|
||||
<string name="detail_item_menu_copy_url">Kopioi URL</string>
|
||||
<string name="detail_menu_notifications_disabled_until">Ilmoitukset hiljennetty %1$s asti</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_text">Nämä aiheet/isäntänimet korvattiin hedelmien nimillä, joten voit jakaa lokin huoletta:
|
||||
\n
|
||||
\n%1$s
|
||||
\n
|
||||
\nSalasanat on poistettu, ja niitä ei ole listattu tässä.</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy toimii UnifiedPush-jakelijana</string>
|
||||
<string name="add_dialog_use_another_server">Käytä eri palvelinta</string>
|
||||
<string name="settings_notifications_priority_default">oletus</string>
|
||||
<string name="settings_notifications_auto_download_100k">Jos tiedoston koko on alle 100 kB</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">Valitse palvelimen URL</string>
|
||||
<string name="add_dialog_instant_delivery">Välitön toimitus torkkutilassa</string>
|
||||
<string name="settings_notifications_auto_delete_title">Poista ilmoitukset</string>
|
||||
<string name="detail_delete_dialog_permanently_delete">Poista pysyvästi</string>
|
||||
<string name="share_content_title">Viestin esikatselu</string>
|
||||
<string name="settings_notifications_auto_download_500k">Jos tiedoston koko on alle 500 kB</string>
|
||||
<string name="settings_general_default_base_url_title">Oletuspalvelin</string>
|
||||
<string name="settings_notifications_muted_until_x">Ilmoitukset mykistetty, %1$s saakka</string>
|
||||
<string name="main_banner_battery_text">Akun optimoinnin tulee olla pois päältä ilmoitusten toimitusongelmien välttämiseksi.</string>
|
||||
<string name="settings_advanced_unifiedpush_title">Ota käyttöön UnifiedPush</string>
|
||||
<string name="settings_general_default_base_url_message">Anna palvelimesi juurikansio URL, jotta voit käyttää omaa palvelintasi oletuksena uusien topikkien tilaamisessa ja/tai aiheiden jakamisessa.</string>
|
||||
<string name="user_dialog_password_hint_edit">Salasana (ei voi muuttaa, jos jätetään tyhjäksi)</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">Ota logaus käyttöön, jotta voit jakaa lokit myöhemmin diagnosoidaksesi ongelmia.</string>
|
||||
<string name="main_action_mode_delete_dialog_message">Lopetetaanko valittujen aiheiden tilaus ja poistetaanko kaikki ilmoitukset pysyvästi \?</string>
|
||||
<string name="notification_dialog_muted_until_toast_message">Ilmoituset hiljennetty %1$s asti</string>
|
||||
<string name="share_title">Jaa</string>
|
||||
<string name="refresh_message_error">Ei voitu päivittää %1$d tilausta
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Käytä JSON HTTP:n kautta muodostaaksesi yhteyden palvelimeen. Tämä menetelmä on testattu, mutta se voi kuluttaa enemmän akkua.</string>
|
||||
<string name="settings_advanced_export_logs_copied_logs">Logit kopioitu leikkelepöydälle</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_six">Tilattu kuuteen topikkiin</string>
|
||||
<string name="detail_settings_notifications_instant_summary_on">Ilmoitukset toimitetaan välittömästi. kuluttaa enemmän akkua.</string>
|
||||
<string name="detail_test_title">Testi: Voit asettaa otsikon, jos haluat.</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Käytä WebSocketsia yhteyden muodostamiseen palvelimeen. Tämä on suositeltu tapa, mutta se voi vaatia lisämäärityksiä välityspalvelimessasi.</string>
|
||||
<string name="settings_notifications_auto_download_summary_smaller_than_x">Lataa automaattisesti liitteet %1$s saakka</string>
|
||||
<string name="settings_notifications_auto_download_10m">Jos tiedoston koko on alle 10 MB</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_button_ok">OK</string>
|
||||
<string name="settings_advanced_connection_protocol_title">Yhteys protokolla</string>
|
||||
<string name="notification_popup_action_cancel">Peruuta</string>
|
||||
<string name="settings_backup_restore_restore_title">Palauta tiedostosta</string>
|
||||
<string name="share_content_image_error">Kuvaa ei voi lukea %1$s</string>
|
||||
<string name="notification_dialog_cancel">Peruuta</string>
|
||||
<string name="main_banner_battery_button_dismiss">Hylkää</string>
|
||||
<string name="detail_menu_copy_url">Kopioi topikin osoite</string>
|
||||
<string name="settings_notifications_min_priority_low">Matalan prioriteetin ylittävät</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Mukautetut ilmoitusasetukset</string>
|
||||
<string name="main_menu_settings_title">Asetukset</string>
|
||||
<string name="share_topic_title">Jaettu</string>
|
||||
<string name="detail_settings_appearance_icon_set_summary">Aseta kuvake, joka näytetään ilmoituksissa</string>
|
||||
<string name="main_how_to_intro">Napsauta + luodaksesi topikin tai tilataksesi sen. Tämän jälkeen saat ilmoituksia laitteellesi, kun lähetät viestejä PUT- tai POST-yhteydellä.</string>
|
||||
<string name="main_action_bar_title">Tilatut topikit</string>
|
||||
<string name="detail_menu_notifications_enabled">Ilmoitukset päälle</string>
|
||||
<string name="settings_backup_restore_backup_entry_settings_only">Vain asetukset</string>
|
||||
<string name="detail_item_cannot_save">Ei voida tallentaa liitettä: %1$s</string>
|
||||
<string name="detail_item_snack_undo">Kumoa</string>
|
||||
<string name="settings_backup_restore_backup_successful">Varmuuskopio luotu</string>
|
||||
<string name="detail_settings_appearance_display_name_default_summary">%1$s (oletus)</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">Tilattu kolmeen topikkiin</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_five">Tilattu viiteen topikkiin</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">Lopeta tilaus</string>
|
||||
<string name="add_dialog_login_description">Tämä topikki vaatii kirjautumisen. Kirjoita käyttäjätunnus ja salasana.</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_many">Käytetty topikeissa %1$s</string>
|
||||
<string name="detail_settings_global_setting_title">Käytä globaalia asetusta</string>
|
||||
<string name="settings_notifications_auto_download_summary_never">Älä koskaan lataa automaattisesti liitteitä</string>
|
||||
<string name="detail_item_download_info_deleted_expired">Poistettu, linkki vanhentunut</string>
|
||||
<string name="detail_item_menu_save_file">Tallenna tiedosto</string>
|
||||
<string name="main_menu_docs_title">Lue dokumentaatiota</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_day">Poista ilmoitukset yhden päivän jälkeen</string>
|
||||
<string name="refresh_message_no_results">Kaikki päivitetty</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expired">Ei ladattu, linkki vanhentunut</string>
|
||||
<string name="settings_advanced_record_logs_summary_enabled">Logaus (jopa 1 000 merkintää) laitteeseen…</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_days">Poista ilmoitukset 3 päivän jälkeen</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Tilattu yhteen välittömään topikkiin</string>
|
||||
<string name="share_content_file_text">Tedoston on jaettu sinulle</string>
|
||||
<string name="main_banner_websocket_button_dismiss">Hylkää</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">Poista palvelimen URL</string>
|
||||
<string name="detail_action_mode_delete_dialog_message">Poista valitut tilaukset välittömästi \?</string>
|
||||
<string name="detail_settings_about_topic_url_title">Topikin URL</string>
|
||||
<string name="add_dialog_title">Liity topikkin</string>
|
||||
<string name="add_dialog_button_back">Takaisin</string>
|
||||
<string name="settings_advanced_header">Kehittyneet</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_months">Poista ilmoitukset kolmen kuukauden jälkeen</string>
|
||||
<string name="notification_popup_file">%1$s
|
||||
\nTiedosto: %2$s</string>
|
||||
<string name="settings_notifications_muted_until_forever">Ilmoitukset mykistetty, kunnes niitä jatketaan</string>
|
||||
<string name="detail_how_to_example">Esimerkki (käytä curl):<br/><tt>$ curl -d \"Hei\" %1$s</tt></string>
|
||||
<string name="detail_settings_appearance_icon_set_title">Kuvake</string>
|
||||
<string name="detail_instant_delivery_disabled">Välitön lähetys pois</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">Tilattu neljään välittömään topikkiin</string>
|
||||
<string name="settings_notifications_auto_download_1m">Jos tiedoston koko on alle 1 MB</string>
|
||||
<string name="detail_item_download_info_download_failed_expired">Lataus epäonnistunut, linkki vanhentunut</string>
|
||||
<string name="detail_settings_notifications_instant_summary_off">Ilmoitukset toimitetaan Firebasella. Toimitus saattaa viivästyä, mutta kuluttaa vähemmän akkua.</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">Älä häiritse (DND) ohitus, äänet jne.</string>
|
||||
<string name="detail_test_message_error_unauthorized_user">Viestiä ei voi lähettää: Käyttäjällä \"%1$s\" ei ole oikeuksia.</string>
|
||||
<string name="notification_dialog_title">Hiljennetyt ilmoitukset</string>
|
||||
<string name="settings_notifications_min_priority_summary_x_or_higher">Näytä ilmoitukset jos täkeys on %1$d (%2$s) tai enemmän</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_scrubbed">Kopioi leikkelepöydälle (sensuroitu)</string>
|
||||
<string name="settings_advanced_export_logs_copied_url">Logit tallennettu ja URL kopioitu</string>
|
||||
<string name="settings_advanced_export_logs_title">Kopioi/tallenna logit</string>
|
||||
<string name="detail_settings_appearance_icon_remove_summary">Tämän topikin ilmoituksissa näkyvä kuvake</string>
|
||||
<string name="settings_backup_restore_backup_failed">Varmuuskopio epäonnistunut: %1$s</string>
|
||||
<string name="detail_test_message_error_too_large">Viestiä ei voi lähettää: Liite on liian suuri.</string>
|
||||
<string name="settings_notifications_priority_low">matala</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">Tilattu yhteen topikkiin</string>
|
||||
<string name="settings_about_version_format">ntfy %1$s (%2$s)</string>
|
||||
<string name="settings_notifications_auto_download_summary_always">Lataa automaattisesti liitteet</string>
|
||||
<string name="user_dialog_title_edit">Muokkaa käyttäjää</string>
|
||||
<string name="settings_backup_restore_restore_successful">Palautus onnistui</string>
|
||||
<string name="settings_notifications_auto_delete_one_week">jälkeen seitsemän päivän</string>
|
||||
<string name="settings_backup_restore_restore_failed">Palautus epäonnistui: %1$s</string>
|
||||
<string name="settings_notifications_header">Ilmoitukset</string>
|
||||
<string name="detail_test_message">Tämä on testi-ilmoitus ntfy Android -sovelluksesta. Sillä on prioriteettitaso %1$d. Jos lähetät toisen, se voi näyttää erilaiselta.</string>
|
||||
<string name="detail_settings_appearance_icon_remove_title">Kuvake (napauta poistaaksesi)</string>
|
||||
<string name="share_suggested_topics">Ehdotetut topikit</string>
|
||||
<string name="detail_settings_appearance_display_name_message">Aseta tälle topikille mukautettu näyttönimi. Jätä tyhjäksi oletuksena (%1$s).</string>
|
||||
<string name="detail_settings_appearance_icon_error_saving">Ei voida tallentaa kuvaketta %1$s</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">Oletusasetusten käyttäminen (äänet, Älä häiritse -tilan ohitus jne.)</string>
|
||||
<string name="detail_item_menu_cancel">Peruuta lataus</string>
|
||||
<string name="channel_notifications_high_name">Korkea tärkeys</string>
|
||||
<string name="settings_advanced_record_logs_title">Nauhoitetut logit</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">Pidä hälytykset korkeimmalla tasolla</string>
|
||||
<string name="settings_notifications_min_priority_max">Vain maksimi ja ylittävät</string>
|
||||
<string name="settings_about_header">About</string>
|
||||
<string name="main_menu_donate_title">Lahjoita 💸</string>
|
||||
<string name="notification_dialog_8h">8 tuntia</string>
|
||||
<string name="detail_deep_link_subscribed_toast_message">Topikki %1$s tilattu</string>
|
||||
<string name="user_dialog_username_hint">Käyttäjätunnus</string>
|
||||
<string name="detail_menu_unsubscribe">Lopeta tilaus</string>
|
||||
<string name="settings_notifications_auto_download_always">Lataa automaattisesti kaikki</string>
|
||||
<string name="detail_menu_settings">Tilauksien asetukset</string>
|
||||
<string name="settings_notifications_auto_delete_never">Ei koskaan</string>
|
||||
<string name="main_item_status_unified_push">%1$s (Yleis Push)</string>
|
||||
<string name="detail_item_tags">Tagit %1$s</string>
|
||||
<string name="main_item_status_text_one">%1$d Huomautus</string>
|
||||
</resources>
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_notifications_low_name">Priorité basse</string>
|
||||
<string name="channel_notifications_default_name">Priorité par défaut</string>
|
||||
<string name="channel_notifications_low_name">Notifications (priorité basse)</string>
|
||||
<string name="channel_notifications_default_name">Notifications (priorité normale)</string>
|
||||
<string name="channel_subscriber_service_name">Abonnement</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Abonné à deux sujets à réception instantanée</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">Abonné à quatre sujets à réception instantanée</string>
|
||||
|
@ -19,11 +19,11 @@
|
|||
<string name="main_item_date_yesterday">hier</string>
|
||||
<string name="main_add_button_description">Ajout d\'abonnement</string>
|
||||
<string name="main_how_to_link">Des instructions détaillées sont disponible sur ntfy.sh et dans la documentation.</string>
|
||||
<string name="main_banner_battery_text">L\'optimisation de la batterie devrait être désactivée pour l\'application afin d\'éviter des problèmes de réception de notifications.</string>
|
||||
<string name="main_banner_battery_text">L\'optimisation de la pile devrait être désactivée pour l\'application afin d\'éviter des problèmes de réception de notifications.</string>
|
||||
<string name="main_banner_websocket_button_remind_later">Demander plus tard</string>
|
||||
<string name="main_banner_websocket_button_dismiss">Ignorer</string>
|
||||
<string name="add_dialog_topic_name_hint">Nom de sujet, ex. : phils_alerts</string>
|
||||
<string name="add_dialog_instant_delivery">Réception instantanée en mode économie d\'énergie</string>
|
||||
<string name="add_dialog_instant_delivery">Livraison instantanée en mode somnolence</string>
|
||||
<string name="add_dialog_button_cancel">Annuler</string>
|
||||
<string name="add_dialog_button_subscribe">Abonner</string>
|
||||
<string name="add_dialog_button_back">Retour</string>
|
||||
|
@ -53,9 +53,9 @@
|
|||
<string name="detail_action_mode_delete_dialog_permanently_delete">Supprimer définitivement</string>
|
||||
<string name="detail_action_mode_delete_dialog_message">Supprimer définitivement la ou les notification(s) sélectionnée(s) \?</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Abonné à un sujet à réception instantanée</string>
|
||||
<string name="channel_notifications_max_name">Priorité maximale</string>
|
||||
<string name="channel_notifications_min_name">Priorité minimale</string>
|
||||
<string name="channel_notifications_high_name">Priorité élevée</string>
|
||||
<string name="channel_notifications_max_name">Notifications (priorité maximale)</string>
|
||||
<string name="channel_notifications_min_name">Notifications (priorité minimale)</string>
|
||||
<string name="channel_notifications_high_name">Notifications (priorité élevée)</string>
|
||||
<string name="channel_subscriber_notification_title">Écoute les notifications entrantes</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Abonné aux sujets à réception instantanée</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">Abonné à trois sujets à réception instantanée</string>
|
||||
|
@ -105,7 +105,7 @@
|
|||
<string name="detail_test_message">Ceci est une notification de test depuis l\'application Android ntfy. Elle a une priorité de niveau %1$d. Si vous en envoyez une autre, elle pourrait avoir un apparence différente.</string>
|
||||
<string name="detail_test_message_error_unauthorized_anon">Incapable d\'envoyer le message : La publication anonyme est interdite.</string>
|
||||
<string name="detail_test_message_error_unauthorized_user">Incapable d\'envoyer le message : L\'utilisateur \"%1$s\" n\'est pas autorisé.</string>
|
||||
<string name="detail_test_message_error_too_large">Impossible d\'envoyer le message : La pièce jointe est trop lourde.</string>
|
||||
<string name="detail_test_message_error_too_large">Incapable d\'envoyer le message : La pièce jointe est trop large.</string>
|
||||
<string name="detail_instant_delivery_enabled">Livraison instantanée active</string>
|
||||
<string name="detail_item_snack_deleted">Notification supprimée</string>
|
||||
<string name="detail_item_menu_copy_url_copied">L\'URL a été copiée dans le presse-papier</string>
|
||||
|
@ -269,7 +269,7 @@
|
|||
<string name="settings_notifications_priority_min">min</string>
|
||||
<string name="settings_general_users_prefs_title">Utilisateurs</string>
|
||||
<string name="settings_general_dark_mode_summary_system">Utilisé le thème système</string>
|
||||
<string name="settings_notifications_min_priority_summary_any">Affichage de toutes les notifications</string>
|
||||
<string name="settings_notifications_min_priority_summary_any">Toutes les notifications</string>
|
||||
<string name="settings_notifications_priority_default">défaut</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_days">Supprimer automatiquement les notifications après 3 jours</string>
|
||||
<string name="settings_notifications_auto_delete_one_day">Après un jour</string>
|
||||
|
@ -299,7 +299,7 @@
|
|||
\n
|
||||
\nLes mots de passe sont nettoyés, mais ne sont pas listés ici.</string>
|
||||
<string name="detail_deep_link_subscribed_toast_message">Abonné au sujet %1$s</string>
|
||||
<string name="settings_notifications_channel_prefs_summary">Ignorer « ne pas déranger », sons, etc.</string>
|
||||
<string name="settings_notifications_channel_prefs_summary">Ignorer Ne pas déranger (DND), sons, etc.</string>
|
||||
<string name="notification_popup_user_action_failed">%1$s a échoué : %2$s</string>
|
||||
<string name="settings_notifications_channel_prefs_title">Paramètres du canal</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_six">Abonné à six sujets</string>
|
||||
|
@ -321,28 +321,4 @@
|
|||
<string name="add_dialog_base_urls_dropdown_choose">Choisir l\'URL du service</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">Supprimer l\'URL du service</string>
|
||||
<string name="main_banner_websocket_button_enable_now">Activer maintenant</string>
|
||||
<string name="detail_settings_appearance_display_name_title">Nom d\'affichage</string>
|
||||
<string name="detail_settings_appearance_display_name_default_summary">%1$s</string>
|
||||
<string name="detail_settings_appearance_display_name_message">Mettre un nom d\'affichage personnalisé pour cette souscription. Laisse ce champ vide pour mettre la valeur par défaut (%1$s).</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">Copié au Presse-papier</string>
|
||||
<string name="detail_settings_about_header">À propos</string>
|
||||
<string name="detail_settings_about_topic_url_title">URL du sujet</string>
|
||||
<string name="channel_notifications_group_default_name">Défaut</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Conserver les notifications</string>
|
||||
<string name="main_menu_donate_title">Faire un don 💸</string>
|
||||
<string name="detail_item_cannot_open_apk">Les applications ne peuvent plus être installées. Veuillez les télécharger via un navigateur. Voir le ticket #531 pour plus de détails.</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">Conserver les notifications avec une priorité maximale</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Paramètres personnalisés de la notification</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Affiche les notifications une fois seulement</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">Utilisation de paramètres personnalisés pour cet abonnement</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">Utilisation des paramètres par défaut (sons, ignorer « ne pas déranger », etc.)</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">Les notifications avec une priorité maximale ne sont affichées qu\'une seule fois</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Configurer les paramètres de la notification</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">Les notifications avec une priorité maximale sont affichées jusqu\'à ce qu\'elles soient rejetées</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">Ignorer « ne pas déranger », sons, etc.</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy agira comme un distributeur UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfy n\'agira pas comme un distributeur UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_title">Activer le \"UnifiedPush\"</string>
|
||||
<string name="eos_settings_enable_title">Activer le distributeur</string>
|
||||
<string name="eos_settings_enable_description">Cela permet aux applications tierces de recevoir des notifications UnifiedPush</string>
|
||||
</resources>
|
|
@ -1,346 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_notifications_min_name">Prioridade Min</string>
|
||||
<string name="channel_notifications_low_name">Prioridade baixa</string>
|
||||
<string name="channel_notifications_default_name">Prioridade por defecto</string>
|
||||
<string name="channel_notifications_high_name">Prioridade alta</string>
|
||||
<string name="channel_notifications_max_name">Prioridade Máx</string>
|
||||
<string name="channel_subscriber_service_name">Servizo de subscrición</string>
|
||||
<string name="channel_notifications_group_default_name">Por defecto</string>
|
||||
<string name="channel_subscriber_notification_title">Agardando por notificacións entrantes</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Subscrita ao envío instantáneo de asuntos</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Subscrita ao envío instantáneo dun asunto</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Subscrita ao envío instantáneo de dous asuntos</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">Subscrita ao envío instantáneo de tres asuntos</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">Subscrita ao envío instantáneo de catro asuntos</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">Subscrita ao envío instantáneo de cinco asuntos</string>
|
||||
<string name="channel_subscriber_notification_instant_text_six">Subscrita ao envío instantáneo de seis asuntos</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">Subscrita ao envío instantáneo de %1$d asuntos</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">Subscrita a asuntos</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_six">Subscrita a seis asuntos</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">Subscrita a %1$d asuntos</string>
|
||||
<string name="refresh_message_error">Non se actualizaron %1$d subscricións
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="refresh_message_error_one">Non se actualizou a subscrición: %1$s</string>
|
||||
<string name="main_action_bar_title">Asuntos subscritos</string>
|
||||
<string name="main_menu_notifications_enabled">Notificacións activadas</string>
|
||||
<string name="main_menu_notifications_disabled_forever">Notificacións acaladas</string>
|
||||
<string name="main_menu_notifications_disabled_until">Notificacións acaladas ata %1$s</string>
|
||||
<string name="main_menu_settings_title">Axustes</string>
|
||||
<string name="main_menu_report_bug_title">Informar dun fallo</string>
|
||||
<string name="main_menu_docs_title">Ler documentación</string>
|
||||
<string name="main_menu_rate_title">Valorar a app ⭐</string>
|
||||
<string name="main_menu_donate_title">Doar 💸</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">Retirar subscrición</string>
|
||||
<string name="main_action_mode_delete_dialog_message">Retirar a subscrición ao(s) asunto(s) seleccionado(s) e eliminar definitivamente tódalas notificacións\?</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">Eliminar definitivamente</string>
|
||||
<string name="main_action_mode_delete_dialog_cancel">Cancelar</string>
|
||||
<string name="main_item_status_text_one">%1$d notificación</string>
|
||||
<string name="main_item_status_text_not_one">%1$d notificacións</string>
|
||||
<string name="main_item_status_reconnecting">reconectando…</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">Subscrita a un asunto</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">Subscrita a dous asuntos</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">Subscrita a tres asuntos</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">Subscrita a catro asuntos</string>
|
||||
<string name="refresh_message_result">%1$d notificación(s) recibida(s)</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_five">Subscrita a cinco asuntos</string>
|
||||
<string name="refresh_message_no_results">Todo ao día</string>
|
||||
<string name="main_item_status_unified_push">%1$s (UnifiedPush)</string>
|
||||
<string name="main_item_date_yesterday">onte</string>
|
||||
<string name="main_how_to_intro">Preme no + para crear ou subscribirte a un tema. Posteriormente recibirás notificacións no teu dispositivo cando se envían mensaxes a través de PUT ou POST.</string>
|
||||
<string name="main_unified_push_toast">Esta subscrición está xestionada por %1$s a través de UnifiedPush</string>
|
||||
<string name="main_how_to_link">Instruccións detalladas dispoñibles en ntfy.sh, e na documentación.</string>
|
||||
<string name="main_add_button_description">Engadir subscrición</string>
|
||||
<string name="main_no_subscriptions_text">Semella que aínda non tes ningunha subscrición.</string>
|
||||
<string name="main_banner_battery_text">A optimización da batería debe estar desactivada para a app para evitar problemas coas notificacións.</string>
|
||||
<string name="main_banner_battery_button_remind_later">Preguntar máis tarde</string>
|
||||
<string name="main_banner_battery_button_dismiss">Desbotar</string>
|
||||
<string name="main_banner_battery_button_fix_now">Arranxar agora</string>
|
||||
<string name="main_banner_websocket_text">O cambio a WebSockets é o xeito recomendado para conectar co servidor, pode mellorar a vida da batería, pero pode requerir <a href="https://ntfy.sh/docs/config/#nginxapache2caddy">configuración adicional no teu proxy</a>. Pódese cambiar nos Axustes.</string>
|
||||
<string name="main_banner_websocket_button_remind_later">Preguntar máis tarde</string>
|
||||
<string name="main_banner_websocket_button_dismiss">Desbotar</string>
|
||||
<string name="main_banner_websocket_button_enable_now">Activar agora</string>
|
||||
<string name="add_dialog_title">Subscribir ao tema</string>
|
||||
<string name="add_dialog_description_below">Os temas poden non estar protexidos con contrasinal, escolle un nome dificil de adiviñar. Unha vez subscrito, podes PUT/POST notificacións.</string>
|
||||
<string name="add_dialog_topic_name_hint">Nome do tema, ex. alertas_xoan</string>
|
||||
<string name="add_dialog_use_another_server">Usar outro servidor</string>
|
||||
<string name="add_dialog_use_another_server_description">Escribe o URL do servizo para subscribirte a temas doutros servidores.</string>
|
||||
<string name="add_dialog_instant_delivery">Entrega inmediata en modo silencioso</string>
|
||||
<string name="add_dialog_instant_delivery_description">Asegura que as mensaxes se entregan de xeito inmediato, incluso se o dispositivo non está activo.</string>
|
||||
<string name="add_dialog_foreground_description">A entrega inmediata sempre está activa para hóspedes diferentes a %1$s.</string>
|
||||
<string name="add_dialog_button_cancel">Cancelar</string>
|
||||
<string name="add_dialog_button_subscribe">Subscribir</string>
|
||||
<string name="add_dialog_button_back">Atrás</string>
|
||||
<string name="add_dialog_button_login">Acceder</string>
|
||||
<string name="add_dialog_error_connection_failed">Fallou a conexión: %1$s</string>
|
||||
<string name="add_dialog_login_title">Require iniciar sesión</string>
|
||||
<string name="add_dialog_login_description">Este tema require que inicies sesión. Escribe as túas credenciais.</string>
|
||||
<string name="add_dialog_login_username_hint">Identificador</string>
|
||||
<string name="add_dialog_login_password_hint">Contrasinal</string>
|
||||
<string name="add_dialog_login_error_not_authorized">Fallou o acceso. A usuaria %1$s non está autorizada.</string>
|
||||
<string name="add_dialog_login_new_user">Nova usuaria</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">Escribe URL do servizo</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">Limpar URL do servizo</string>
|
||||
<string name="detail_no_notifications_text">Aínda non recibiches notificacións deste tema.</string>
|
||||
<string name="detail_how_to_example">Exemplo (usando curl): <br/><tt>$ curl -d \"Ola\" %1$s</tt></string>
|
||||
<string name="detail_how_to_link">Tes instruccións polo miúdo en ntfy.sh, e na documentación.</string>
|
||||
<string name="detail_clear_dialog_message">Eliminar todas as notificacións neste tema\?</string>
|
||||
<string name="detail_clear_dialog_permanently_delete">Eliminar permanentemente</string>
|
||||
<string name="detail_clear_dialog_cancel">Cancelar</string>
|
||||
<string name="detail_delete_dialog_message">Retirar subscrición ao tema e eliminar todas as notificacións recibidas\?</string>
|
||||
<string name="detail_delete_dialog_permanently_delete">Eliminar permanentemente</string>
|
||||
<string name="detail_delete_dialog_cancel">Cancelar</string>
|
||||
<string name="detail_test_title">Proba: podes poñerlle un título se queres.</string>
|
||||
<string name="detail_test_message">Esta é unha notificación de proba desde a app ntfy Android. Ten nivel %1$d de prioridade. Se envías outra, podería ser diferente.</string>
|
||||
<string name="detail_test_message_error">Non se enviou a mensaxe: %1$s</string>
|
||||
<string name="detail_test_message_error_unauthorized_anon">Non se enviou a mensaxe: Non está permitida a publicación anónima.</string>
|
||||
<string name="detail_test_message_error_unauthorized_user">Non se enviou a mensaxe: A usuaria \"%1$s\" non ten autorización.</string>
|
||||
<string name="detail_test_message_error_too_large">Non se enviou a mensaxe: O adxunto é demasiado grande.</string>
|
||||
<string name="detail_copied_to_clipboard_message">Copiado ao portapapeis</string>
|
||||
<string name="detail_instant_delivery_enabled">Entrega inmediata activada</string>
|
||||
<string name="detail_instant_delivery_disabled">Entrega inmediata desactivada</string>
|
||||
<string name="detail_deep_link_subscribed_toast_message">Subscrita ao tema %1$s</string>
|
||||
<string name="detail_item_tags">Etiquetas: %1$s</string>
|
||||
<string name="detail_item_snack_deleted">Notificación eliminada</string>
|
||||
<string name="detail_item_snack_undo">Desfacer</string>
|
||||
<string name="detail_item_menu_open">Abrir ficheiro</string>
|
||||
<string name="detail_item_menu_delete">Eliminar ficheiro</string>
|
||||
<string name="detail_item_menu_download">Descargar ficheiro</string>
|
||||
<string name="detail_item_menu_cancel">Cancelar descarga</string>
|
||||
<string name="detail_item_menu_save_file">Gardar ficheiro</string>
|
||||
<string name="detail_item_menu_copy_url">Copiar URL</string>
|
||||
<string name="detail_item_menu_copy_url_copied">URL copiado ao portapapeis</string>
|
||||
<string name="detail_item_menu_copy_contents">Copiar notificación</string>
|
||||
<string name="detail_item_menu_copy_contents_copied">Notificación copiada ao portapapeis</string>
|
||||
<string name="detail_item_saved_successfully">Gardado como \"%1$s\" no cartafol \"Descargas\"</string>
|
||||
<string name="detail_how_to_intro">Enviar notificacións a este tema, simplemente envía con PUT ou POST ao URL do tema.</string>
|
||||
<string name="detail_item_cannot_download">Non se pode abrir ou descargar o adxunto. A ligazón caducou e non se atopa un ficheiro local.</string>
|
||||
<string name="detail_item_cannot_open">Non se pode abrir: %1$s</string>
|
||||
<string name="detail_item_cannot_open_not_found">Non se pode abrir o adxunto: pode que fose eliminado, ou ningunha app instalada pode abrir o ficheiro.</string>
|
||||
<string name="detail_item_cannot_open_url">Non se pode abrir URL: %1$s</string>
|
||||
<string name="detail_item_cannot_open_apk">Xa non poden instalarse as apps. Descarga desde un navegador. Ver detalles no issue #531.</string>
|
||||
<string name="detail_item_cannot_save">Non se pode gardar o adxunto: %1$s</string>
|
||||
<string name="detail_item_cannot_delete">Non se pode borrar o adxunto: %1$s</string>
|
||||
<string name="detail_item_download_failed">Non se puido descargar o adxunto: %1$s</string>
|
||||
<string name="detail_item_download_info_not_downloaded">non descargado</string>
|
||||
<string name="detail_item_download_info_downloading_x_percent">%1$d%% descargado</string>
|
||||
<string name="detail_item_download_info_deleted_expires_x">eliminado, a ligazón caduca o %1$s</string>
|
||||
<string name="detail_item_download_info_download_failed">fallou a descarga</string>
|
||||
<string name="detail_item_download_info_download_failed_expired">fallou a descarga, caducou a ligazón</string>
|
||||
<string name="detail_item_download_info_download_failed_expires_x">fallou a descarga, a ligazón caduca %1$s</string>
|
||||
<string name="detail_menu_notifications_enabled">Notificación activas</string>
|
||||
<string name="detail_menu_notifications_disabled_forever">Notificacións acaladas</string>
|
||||
<string name="detail_menu_enable_instant">Activar entrega inmediata</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expires_x">non descargado, caduca %1$s</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expired">non descargado, caducou a ligazón</string>
|
||||
<string name="detail_item_download_info_deleted">eliminado</string>
|
||||
<string name="detail_item_download_info_deleted_expired">eliminado, caducou a ligazón</string>
|
||||
<string name="detail_menu_notifications_disabled_until">Notificacións acaladas ate %1$s</string>
|
||||
<string name="detail_menu_disable_instant">Desactivar o envío instantáneo</string>
|
||||
<string name="detail_menu_test">Enviar notificación de proba</string>
|
||||
<string name="detail_action_mode_delete_dialog_message">Eliminar a notificación(s) permanentemente\?</string>
|
||||
<string name="detail_action_mode_delete_dialog_permanently_delete">Eliminar permanentemente</string>
|
||||
<string name="detail_action_mode_delete_dialog_cancel">Cancelar</string>
|
||||
<string name="detail_settings_title">Axustes da subscrición</string>
|
||||
<string name="share_title">Compartir</string>
|
||||
<string name="share_content_title">Vista previa da mensaxe</string>
|
||||
<string name="share_content_image_error">Non se pode ler a imaxe: %1$s</string>
|
||||
<string name="share_content_file_text">Compartiron un ficheiro contigo</string>
|
||||
<string name="share_content_text_hint">Engadir aquí o contido para compartir</string>
|
||||
<string name="share_content_image_text">Compartiron unha imaxe contigo</string>
|
||||
<string name="share_content_file_error">Non se pode ler a info do ficheiro: %1$s</string>
|
||||
<string name="share_topic_title">Compartir con</string>
|
||||
<string name="share_suggested_topics">Temas suxeridos</string>
|
||||
<string name="share_successful">Mensaxe publicada</string>
|
||||
<string name="notification_dialog_cancel">Cancelar</string>
|
||||
<string name="notification_dialog_save">Gardar</string>
|
||||
<string name="notification_dialog_enabled_toast_message">Reactivadas as notificacións</string>
|
||||
<string name="notification_popup_file_download_successful">%1$s
|
||||
\nFicheiro: %2$s, descargado</string>
|
||||
<string name="notification_popup_file_download_failed">%1$s
|
||||
\nFicheiro: %2$s, fallou a descarga</string>
|
||||
<string name="notification_popup_user_action_failed">Fallo en %1$s: %2$s</string>
|
||||
<string name="settings_title">Axutes</string>
|
||||
<string name="settings_notifications_header">Notificacións</string>
|
||||
<string name="notification_dialog_title">Acalar notificacións</string>
|
||||
<string name="settings_notifications_muted_until_title">Acalar notificacións</string>
|
||||
<string name="settings_notifications_muted_until_show_all">Mostrando todas as notificacións</string>
|
||||
<string name="settings_notifications_min_priority_min">Calquera prioridade</string>
|
||||
<string name="settings_notifications_min_priority_low">Prioridade baixa ou superior</string>
|
||||
<string name="settings_notifications_min_priority_default">Prioridade por defecto e superior</string>
|
||||
<string name="detail_menu_copy_url">Copiar enderezo do tema</string>
|
||||
<string name="detail_menu_clear">Limpar todas as notificacións</string>
|
||||
<string name="detail_menu_settings">Axustes da subscrición</string>
|
||||
<string name="detail_menu_unsubscribe">Retirar subscrición</string>
|
||||
<string name="detail_action_mode_menu_copy">Copiar</string>
|
||||
<string name="detail_action_mode_menu_delete">Eliminar</string>
|
||||
<string name="share_menu_send">Compartir</string>
|
||||
<string name="notification_dialog_muted_forever_toast_message">Notificacións acaladas</string>
|
||||
<string name="notification_dialog_muted_until_toast_message">Acalar notificacións %1$s</string>
|
||||
<string name="notification_dialog_show_all">Mostrar todas as notificacións</string>
|
||||
<string name="notification_dialog_30min">30 minutos</string>
|
||||
<string name="notification_dialog_1h">1 hora</string>
|
||||
<string name="notification_dialog_2h">2 horas</string>
|
||||
<string name="notification_dialog_forever">Ata reactivalas</string>
|
||||
<string name="notification_dialog_8h">8 horas</string>
|
||||
<string name="notification_dialog_tomorrow">Ata mañán</string>
|
||||
<string name="notification_popup_action_open">Abrir</string>
|
||||
<string name="notification_popup_action_browse">Buscar</string>
|
||||
<string name="notification_popup_action_download">Descargar</string>
|
||||
<string name="notification_popup_action_cancel">Cancelar</string>
|
||||
<string name="notification_popup_file">%1$s
|
||||
\nFicheiro: %2$s</string>
|
||||
<string name="notification_popup_file_downloading">Descargando %1$s, %2$d%%
|
||||
\n%3$s</string>
|
||||
<string name="settings_notifications_muted_until_forever">Notificacións acaladas ata retomalas</string>
|
||||
<string name="settings_notifications_muted_until_x">Notificacións acaladas ate %1$s</string>
|
||||
<string name="settings_notifications_min_priority_title">Prioridade mínima</string>
|
||||
<string name="settings_notifications_min_priority_summary_any">Mostrando todas as notificacións</string>
|
||||
<string name="settings_notifications_min_priority_summary_x_or_higher">Mostrar notificacións se a prioridade é %1$d (%2$s) ou superior</string>
|
||||
<string name="settings_notifications_min_priority_summary_max">Mostrar notificacións se a prioridade é 5 (máx.)</string>
|
||||
<string name="settings_notifications_min_priority_high">Alta prioridade ou superior</string>
|
||||
<string name="settings_notifications_min_priority_max">Só máxima prioridade</string>
|
||||
<string name="settings_notifications_priority_min">mínima</string>
|
||||
<string name="settings_notifications_priority_low">baixa</string>
|
||||
<string name="settings_notifications_channel_prefs_title">Axustes da canle</string>
|
||||
<string name="settings_notifications_priority_default">por defecto</string>
|
||||
<string name="settings_notifications_priority_high">alta</string>
|
||||
<string name="settings_notifications_priority_max">máxima</string>
|
||||
<string name="settings_notifications_channel_prefs_summary">Obviar Non Molestar (DND), sons, etc.</string>
|
||||
<string name="settings_notifications_auto_download_title">Descargar adxuntos</string>
|
||||
<string name="settings_notifications_auto_download_summary_always">Descarga automática dos adxuntos</string>
|
||||
<string name="settings_notifications_auto_download_summary_never">Non descargar automaticamente os adxuntos</string>
|
||||
<string name="settings_notifications_auto_download_summary_smaller_than_x">Descarga automática dos adxuntos ata %1$s</string>
|
||||
<string name="settings_notifications_auto_download_never">Non descargar nunca automaticamente</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_week">Eliminar automaticamene as notificacións após unha semana</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_month">Eliminar automaticamente as notificacións após un mes</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_months">Eliminar automaticamente as notificacións após 3 meses</string>
|
||||
<string name="settings_notifications_auto_delete_never">Nunca</string>
|
||||
<string name="settings_notifications_auto_delete_one_day">Após un día</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">Manter as alertas da prioridade máis alta ata que se desboten</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">Notificar as alertas da máxima prioridade só unha vez</string>
|
||||
<string name="settings_general_header">Xeral</string>
|
||||
<string name="settings_general_default_base_url_title">Servidor por defecto</string>
|
||||
<string name="settings_general_default_base_url_default_summary">%1$s (por defecto)</string>
|
||||
<string name="settings_general_users_title">Xestionar usuarias</string>
|
||||
<string name="settings_general_users_summary">Engade/elimina usuarias dos temas protexidos</string>
|
||||
<string name="settings_general_users_prefs_title">Usuarias</string>
|
||||
<string name="settings_general_users_prefs_user_not_used">Non utilizado por ningún tema</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_one">Usado polo tema %1$s</string>
|
||||
<string name="settings_general_users_prefs_user_add">Engadir usuarias</string>
|
||||
<string name="settings_general_users_prefs_user_add_title">Engadir nova usuaria</string>
|
||||
<string name="settings_general_users_prefs_user_add_summary">Crear unha nova usuaria para un novo servidor</string>
|
||||
<string name="settings_general_dark_mode_title">Modo escuro</string>
|
||||
<string name="settings_general_dark_mode_summary_system">Seguir o establecido no sistema</string>
|
||||
<string name="settings_general_dark_mode_summary_light">Modo claro activado</string>
|
||||
<string name="settings_general_dark_mode_summary_dark">Modo escuro activado. Es un morcego\?</string>
|
||||
<string name="settings_general_dark_mode_entry_system">Seguir ao sistema</string>
|
||||
<string name="settings_general_dark_mode_entry_light">Modo claro</string>
|
||||
<string name="settings_general_dark_mode_entry_dark">Modo escuro</string>
|
||||
<string name="settings_backup_restore_header">Copia e Restablecemento</string>
|
||||
<string name="settings_backup_restore_backup_title">Copia de apoio nun ficheiro</string>
|
||||
<string name="settings_backup_restore_backup_summary">Exportar configuración, notificacións e usuarias</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything">Todo</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything_no_users">Todo, menos as usuarias</string>
|
||||
<string name="settings_backup_restore_backup_entry_settings_only">Só os axustes</string>
|
||||
<string name="settings_backup_restore_backup_successful">Copia creada</string>
|
||||
<string name="settings_backup_restore_backup_failed">Fallou a copia: %1$s</string>
|
||||
<string name="settings_notifications_auto_download_always">Descargar todo automaticamente</string>
|
||||
<string name="settings_notifications_auto_download_100k">Se inferior a 100 kB</string>
|
||||
<string name="settings_notifications_auto_download_500k">Se inferior a 500 kB</string>
|
||||
<string name="settings_notifications_auto_download_1m">Se inferior a 1 MB</string>
|
||||
<string name="settings_notifications_auto_download_5m">Se inferior a 5 MB</string>
|
||||
<string name="settings_notifications_auto_download_10m">Se inferior a 10 MB</string>
|
||||
<string name="settings_notifications_auto_download_50m">Se inferior a 50 MB</string>
|
||||
<string name="settings_notifications_auto_delete_title">Eliminar notificacións</string>
|
||||
<string name="settings_notifications_auto_delete_summary_never">Non eliminar nunca automaticamente as notificacións</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_day">Eliminar automaticamente as notificacións após un día</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_days">Eliminar automaticamente as notificacións após 3 días</string>
|
||||
<string name="settings_notifications_auto_delete_three_days">Após 3 días</string>
|
||||
<string name="settings_notifications_auto_delete_one_week">Após unha semana</string>
|
||||
<string name="settings_notifications_auto_delete_one_month">Após un mes</string>
|
||||
<string name="settings_notifications_auto_delete_three_months">Após 3 meses</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">Manter as alertas da prioridade máis alta</string>
|
||||
<string name="settings_general_default_base_url_message">Escribe o enderezo URL raíz do teu servidor para usar o servidor propio por defecto cando te subscribas a novos temas e/ou compartas os temas.</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_many">Usado polos temas %1$s</string>
|
||||
<string name="settings_advanced_broadcast_summary_enabled">As app poden recibir notificacións entrantes como difusións</string>
|
||||
<string name="settings_advanced_broadcast_summary_disabled">As app non poden recibir notificacións entrantes como difusións</string>
|
||||
<string name="settings_backup_restore_restore_failed">Fallou o restablecemento: %1$s</string>
|
||||
<string name="settings_advanced_header">Avanzado</string>
|
||||
<string name="settings_advanced_broadcast_title">Mensaxes de difusión</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_text">Estes temas e nomes de servidor serán substituídos por nomes de froita, así podes compartilos sen problema:
|
||||
\n
|
||||
\n%1$s
|
||||
\n
|
||||
\nOs contrasinais son anulados, pero non aparecen aquí.</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_button_ok">OK</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Usar WebSockets para conectar co servidor. Este é o método recomendado, pero podería precisar configuración adicional no teu proxy.</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_jsonhttp">Fluxo JSON sobre HTTP</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">WebSockets</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Usar un fluxo JSON sobre HTTP para conectar co servidor. Este método é robusto, pero podería consumir máis batería.</string>
|
||||
<string name="settings_about_version_copied_to_clipboard_message">Copiado ao portapapeis</string>
|
||||
<string name="detail_settings_notifications_instant_title">Entrega inmediata</string>
|
||||
<string name="settings_about_header">Acerca de</string>
|
||||
<string name="settings_about_version_title">Versión</string>
|
||||
<string name="settings_about_version_format">ntfy %1$s (%2$s)</string>
|
||||
<string name="detail_settings_notifications_instant_summary_off">Notificacións entregadas usando Firebase. A entrega podería sufrir demora, pero consume menos batería.</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Axustes personais de notificación</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">Usar axustes personais para esta subscrición</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">Usar axustes por defecto (sons, obviar Non Molestar, etc.)</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">Obviar Non Molestar (DND), sons, etc.</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Configurar axustes da notificación</string>
|
||||
<string name="detail_settings_appearance_icon_error_saving">Non se gardou a icona: %1$s</string>
|
||||
<string name="detail_settings_appearance_display_name_title">Nome mostrado</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">Copiado ao portapapeis</string>
|
||||
<string name="settings_backup_restore_restore_title">Restablecer desde ficheiro</string>
|
||||
<string name="settings_backup_restore_restore_summary">Importar configuración, notificacións e usuarias</string>
|
||||
<string name="settings_backup_restore_restore_successful">Restablecemento correcto</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">nfty actuará como distribuidora UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">nfty non actuará como distribuidora UnifiedPush</string>
|
||||
<string name="settings_advanced_record_logs_title">Gravar rexistros</string>
|
||||
<string name="settings_advanced_record_logs_summary_enabled">Gravando (ata 1000 entradas) no dispositivo…</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">Activar rexistro, así poderás compartir os rexistros para diagnosticar problemas.</string>
|
||||
<string name="settings_advanced_clear_logs_title">Limpar rexistros</string>
|
||||
<string name="settings_advanced_export_logs_title">Copiar/subir rexistros</string>
|
||||
<string name="settings_advanced_export_logs_summary">Copia os rexistros ao portapapeis, ou súbeos a nopaste.net (propiedade de ntfy). Os nomes de servidor e temas poden agocharse, as notificacións non.</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_original">Copiar ao portapapeis</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_scrubbed">Copiar ao portapapeis (censurado)</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_original">Subir e copiar ligazón</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_scrubbed">Subir e copiar ligazón (censurado)</string>
|
||||
<string name="settings_advanced_export_logs_copied_logs">Rexistros copiados ao portapapeis</string>
|
||||
<string name="settings_advanced_export_logs_uploading">Subindo o rexistro …</string>
|
||||
<string name="settings_advanced_export_logs_copied_url">Rexistros subidos e URL copiado</string>
|
||||
<string name="settings_advanced_export_logs_error_uploading">Non se puido subir o rexistro: %1$s</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_empty">Non se editaron temas/servidores. Non tes ningunha subscrición\?</string>
|
||||
<string name="settings_advanced_clear_logs_summary">Eliminar os rexistros anteriores e volver a comezar</string>
|
||||
<string name="settings_advanced_clear_logs_deleted_toast">Rexistros eliminados</string>
|
||||
<string name="settings_advanced_connection_protocol_title">Protocolo de conexión</string>
|
||||
<string name="detail_settings_notifications_instant_summary_on">As notificacións entregaranse inmediatamente. Require un servizo en segundo plano e consume máis batería.</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Seguir avisando</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Avisar só unha vez</string>
|
||||
<string name="detail_settings_appearance_header">Aspecto</string>
|
||||
<string name="detail_settings_appearance_icon_set_title">Icona da subscrición</string>
|
||||
<string name="detail_settings_appearance_icon_set_summary">Establecer a icona a mostrar na notificación</string>
|
||||
<string name="detail_settings_appearance_icon_remove_title">Icona da subscrición (toca para eliminar)</string>
|
||||
<string name="detail_settings_appearance_icon_remove_summary">Icona mostrada na notificación deste tema</string>
|
||||
<string name="user_dialog_button_add">Engadir usuaria</string>
|
||||
<string name="detail_settings_appearance_display_name_message">Establece o nome para mostrar para esta subscrición. Deixa en branco para valor por defecto (%1$s).</string>
|
||||
<string name="detail_settings_appearance_display_name_default_summary">%1$s (por defecto)</string>
|
||||
<string name="detail_settings_global_setting_title">Usar axuste global</string>
|
||||
<string name="detail_settings_global_setting_suffix">usando o axuste global</string>
|
||||
<string name="detail_settings_about_header">Acerca de</string>
|
||||
<string name="detail_settings_about_topic_url_title">URL do tema</string>
|
||||
<string name="user_dialog_title_add">Engadir usuaria</string>
|
||||
<string name="user_dialog_button_cancel">Cancelar</string>
|
||||
<string name="user_dialog_button_delete">Eliminar usuaria</string>
|
||||
<string name="user_dialog_button_save">Gardar</string>
|
||||
<string name="settings_advanced_unifiedpush_title">Activar UnifiedPush</string>
|
||||
<string name="user_dialog_title_edit">Editar usuaria</string>
|
||||
<string name="user_dialog_description_add">Podes engadir aquí unha usuaria. Todos os temas do servidor indicado usarán esta usuaria.</string>
|
||||
<string name="user_dialog_description_edit">Podes editar as credenciais da usuaria seleccionada, ou eliminala.</string>
|
||||
<string name="user_dialog_base_url_hint">URL do servizo</string>
|
||||
<string name="user_dialog_username_hint">Identificador</string>
|
||||
<string name="user_dialog_password_hint_add">Contrasinal</string>
|
||||
<string name="user_dialog_password_hint_edit">Contrasinal (baleiro para non cambiar)</string>
|
||||
</resources>
|
|
@ -1,92 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_notifications_default_name">महत्वपूर्ण</string>
|
||||
<string name="channel_notifications_high_name">ज्यादा महत्वपूर्ण</string>
|
||||
<string name="channel_notifications_max_name">बहुत ज्यादा महत्वपूर्ण</string>
|
||||
<string name="channel_notifications_group_default_name">साधारण</string>
|
||||
<string name="channel_notifications_min_name">बहुत कम महत्त्व</string>
|
||||
<string name="channel_notifications_low_name">कम महत्व</string>
|
||||
<string name="channel_subscriber_service_name">सदस्यता सेवा</string>
|
||||
<string name="channel_subscriber_notification_title">आने वाली सूचनाओं को सुनना</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">दो त्वरित वितरण विषय का जानना</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">तीन त्वरित वितरण विषय का जानना</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">चार त्वरित वितरण विषय का जानना</string>
|
||||
<string name="channel_subscriber_notification_instant_text">त्वरित वितरण विषय का जानना</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">एक त्वरित वितरण विषय का जानना</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">%1$d त्वरित वितरण विषयों का जानना</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">विषयों का जानना</string>
|
||||
<string name="channel_subscriber_notification_instant_text_six">छह त्वरित वितरण विषयों का जानना</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">पाँच त्वरित वितरण विषयों का जानना</string>
|
||||
<string name="add_dialog_login_password_hint">पासवर्ड</string>
|
||||
<string name="add_dialog_login_error_not_authorized">लॉगिन विफल। उपयोगकर्ता %1$s अधिकृत नहीं है।</string>
|
||||
<string name="add_dialog_foreground_description">%1$s के अलावा अन्य मेज़बानों के लिए तत्काल डिलीवरी हमेशा चालू रहती है।</string>
|
||||
<string name="add_dialog_login_new_user">नया उपयोगकर्ता</string>
|
||||
<string name="add_dialog_login_title">लॉगिन आवश्यक</string>
|
||||
<string name="main_menu_rate_title">एप को रेट करें</string>
|
||||
<string name="main_item_status_text_not_one">%1$d सूचनाएं</string>
|
||||
<string name="refresh_message_result">%1$d सूचना(एं ) प्राप्त</string>
|
||||
<string name="detail_no_notifications_text">इस विषय पर आपको अभी तक कोई सूचना नहीं मिली है।</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">दो विषयों की सदस्यता</string>
|
||||
<string name="main_no_subscriptions_text">ऐसा लगता है कि आपके पास अभी तक कोई सदस्यता नहीं है।</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">%1$d विषयों की सदस्यता</string>
|
||||
<string name="main_banner_battery_button_fix_now">अब ठीक करें</string>
|
||||
<string name="main_menu_notifications_enabled">सूचनाएं चालू</string>
|
||||
<string name="main_menu_notifications_disabled_forever">सूचनाएं मौन</string>
|
||||
<string name="main_banner_websocket_button_remind_later">बाद में पूछें</string>
|
||||
<string name="main_add_button_description">सदस्यता जोड़ें</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">स्थायी रूप से मिटाएं</string>
|
||||
<string name="add_dialog_description_below">सम्भवतः विषय पासवर्ड से सुरक्षित नहीं हो सकते हैं, इसलिए ऐसा नाम चुनें जिसका अनुमान लगाना कठिन हो। एक बार सदस्यता लेने के बाद, आप सूचनाएं PUT/POST कर सकते हैं।</string>
|
||||
<string name="main_item_status_reconnecting">फिर से जुड़ रहा है…</string>
|
||||
<string name="add_dialog_instant_delivery_description">यह सुनिश्चित करता है कि डिवाइस निष्क्रिय होने पर भी संदेश तुरंत वितरित हो।</string>
|
||||
<string name="main_menu_notifications_disabled_until">सूचनाएं मौन जब तक %1$s</string>
|
||||
<string name="main_banner_websocket_button_enable_now">अब चालू करें</string>
|
||||
<string name="main_item_date_yesterday">बीता हुआ कल</string>
|
||||
<string name="main_banner_battery_button_remind_later">बाद में पूछें</string>
|
||||
<string name="main_how_to_link">विस्तृत निर्देश ntfy.sh और दस्तावेज़ों में उपलब्ध हैं।</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">चार विषयों की सदस्यता</string>
|
||||
<string name="add_dialog_use_another_server_description">दूसरे सर्वर्स के विषयों की सदस्यता लेने के लिए सर्विस URLs दर्ज करें।</string>
|
||||
<string name="main_unified_push_toast">यह सदस्यता UnifiedPush के माध्यम से %1$s द्वारा प्रबंधित की जाती है</string>
|
||||
<string name="main_menu_report_bug_title">खराबी रिपोर्ट करें</string>
|
||||
<string name="add_dialog_button_cancel">रद्द</string>
|
||||
<string name="add_dialog_topic_name_hint">विषय का नाम, उदा. phils_alerts</string>
|
||||
<string name="add_dialog_error_connection_failed">कनेक्शन विफल हुआ: %1$s</string>
|
||||
<string name="main_action_mode_delete_dialog_cancel">रद्द करना</string>
|
||||
<string name="add_dialog_button_subscribe">सदस्यता लें</string>
|
||||
<string name="add_dialog_button_login">लॉग इन करें</string>
|
||||
<string name="refresh_message_error_one">सदस्यताएं रिफ्रेश नहीं हो सकी: %1$s</string>
|
||||
<string name="add_dialog_login_username_hint">यूजरनेम</string>
|
||||
<string name="add_dialog_use_another_server">दूसरे सर्वर का प्रयोग करें</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">सर्विस URL का चयन करें</string>
|
||||
<string name="add_dialog_instant_delivery">Doze मोड में तुरंत डिलीवरी</string>
|
||||
<string name="main_banner_battery_text">अधिसूचना वितरण समस्याओं से बचने के लिए ऐप के लिए बैटरी ऑप्टिमाइजेशन बंद होना चाहिए।</string>
|
||||
<string name="main_action_mode_delete_dialog_message">चयनित विषय(विषयों) से सदस्यता समाप्त करें और सभी सूचनाएं स्थायी रूप से हटा दें\?</string>
|
||||
<string name="refresh_message_error">%1$d सदस्यताएं रिफ्रेश नहीं हो सकी
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_six">छह विषयों की सदस्यता</string>
|
||||
<string name="main_banner_battery_button_dismiss">रद्द करें</string>
|
||||
<string name="main_menu_settings_title">सेटिंग्स</string>
|
||||
<string name="main_how_to_intro">किसी विषय को बनाने या उसकी सदस्यता लेने के लिए + पर क्लिक करें। बाद में PUT या POST के माध्यम से संदेश भेजते समय आपको अपने डिवाइस पर सूचनाएं प्राप्त होती हैं।</string>
|
||||
<string name="main_action_bar_title">सदस्यता लिए गए विषय</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">तीन विषयों की सदस्यता</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_five">पांच विषयों की सदस्यता</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">सदस्यता रद्द</string>
|
||||
<string name="add_dialog_login_description">इस विषय के लिए आपको लॉगिन करना होगा। कृपया यूजरनेम और पासवर्ड टाइप करें।</string>
|
||||
<string name="main_menu_docs_title">दस्तावेज़ पढ़ें</string>
|
||||
<string name="refresh_message_no_results">सब कुछ नवीनतम जानकारी से युक्त</string>
|
||||
<string name="main_banner_websocket_button_dismiss">रद्द करें</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">सर्विस URL हटाएं</string>
|
||||
<string name="add_dialog_title">विषय की सदस्यता लें</string>
|
||||
<string name="add_dialog_button_back">पीछे जाएं</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">एक विषय की सदस्यता</string>
|
||||
<string name="main_menu_donate_title">दान करें</string>
|
||||
<string name="main_item_status_text_one">%1$d सूचना</string>
|
||||
<string name="detail_clear_dialog_cancel">रद्द करें</string>
|
||||
<string name="detail_delete_dialog_cancel">रद्द करें</string>
|
||||
<string name="detail_how_to_link">विस्तृत निर्देश ntfy.sh पर और डॉक्स में उपलब्ध हैं।</string>
|
||||
<string name="detail_clear_dialog_permanently_delete">स्थायी रूप से हटाएं</string>
|
||||
<string name="detail_how_to_intro">इस विषय पर सूचनाएं भेजने के लिए, बस विषय URL पर PUT या POST करें।</string>
|
||||
<string name="detail_how_to_example">उदाहरण (curl का उपयोग करके):<br/><tt>$curl -d \"नमस्कार\"%1$s</tt></string>
|
||||
<string name="detail_clear_dialog_message">इस विषय की सभी सूचनाएँ हटाएँ?</string>
|
||||
<string name="main_banner_websocket_text">WebSockets पर स्विच करना आपके सर्वर से कनेक्ट करने का अनुशंसित तरीका है, और बैटरी जीवन में सुधार कर सकता है, लेकिन आपके <a href="https://ntfy.sh/docs/config/#nginxapache2caddy">proxy में अतिरिक्त कॉन्फ़िगरेशन</a> की आवश्यकता हो सकती है। इसे सेटिंग्स में टॉगल किया जा सकता है।</string>
|
||||
</resources>
|
||||
<resources></resources>
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_notifications_min_name">Obavijesti (minimalni prioritet)</string>
|
||||
<string name="channel_notifications_low_name">Obavijesti (niski prioritet)</string>
|
||||
<string name="channel_notifications_default_name">Obavijesti (standardni prioritet)</string>
|
||||
<string name="channel_notifications_high_name">Obavijesti (visoki prioritet)</string>
|
||||
<string name="channel_notifications_max_name">Obavijesti (maksimalni prioritet)</string>
|
||||
</resources>
|
|
@ -1,136 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">Végleges törlés</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Feliratkozva egy azonnal kézbesített témára</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">Feliratkozva öt azonnal kézbesített témára</string>
|
||||
<string name="channel_subscriber_notification_instant_text_six">Feliratkozva hat azonnal kézbesített témára</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">Feliratkozva %1$d azonnal kézbesített témára</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">Feliratkozott témák</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">Feliratkozva egy témára</string>
|
||||
<string name="main_menu_notifications_disabled_forever">Értesítések némítva</string>
|
||||
<string name="main_menu_notifications_disabled_until">Értesítések némítva %1$s-ig</string>
|
||||
<string name="main_menu_settings_title">Beállítások</string>
|
||||
<string name="main_item_status_text_not_one">%1$d értesítés</string>
|
||||
<string name="main_item_status_reconnecting">Újra-csatlakozás …</string>
|
||||
<string name="main_item_status_unified_push">%1$s (ÖsszesítettKüldés)</string>
|
||||
<string name="main_add_button_description">Feliratkozás hozzáadása</string>
|
||||
<string name="main_no_subscriptions_text">Úgy néz ki hogy még nincsen egy feliratkozás sem.</string>
|
||||
<string name="main_how_to_intro">Kattintson a + ra hogy létrehozzon vagy feliratkozzon egy témára. Aztán mikor PUT vagy POST-al küld üzeneteket, értesítéseket kap a készülékén.</string>
|
||||
<string name="channel_notifications_min_name">Minimum prioritás</string>
|
||||
<string name="channel_notifications_low_name">Alacsony prioritás</string>
|
||||
<string name="channel_notifications_default_name">Alapértelmezett prioritás</string>
|
||||
<string name="channel_notifications_max_name">Maximum prioritás</string>
|
||||
<string name="channel_notifications_high_name">Magas prioritás</string>
|
||||
<string name="channel_subscriber_service_name">Feliratkozó Szolgálat</string>
|
||||
<string name="channel_subscriber_notification_title">Bejövő üzenetek fogadása</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Feliratkozva azonnal kézbesített témákra</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Feliratkozva két azonnal kézbesített témára</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">Feliratkozva három azonnal kézbesített témára</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">Feliratkozva négy azonnal kézbesített témára</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_six">Feliratkozva hat témára</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_five">Feliratkozva öt témára</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">Feliratkozva négy témára</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">Feliratkozva három témára</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">Feliratkozva %1$d témára</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">Feliratkozva két témára</string>
|
||||
<string name="main_menu_docs_title">Dokumentáció olvasása</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">Leiratkozás</string>
|
||||
<string name="refresh_message_result">%1$d üzenet érkezett</string>
|
||||
<string name="refresh_message_no_results">Minden a legfrissebb verzió</string>
|
||||
<string name="refresh_message_error">Nem lehetett %1$d feliratkozást frissíteni
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="refresh_message_error_one">Feliratkozást frissítése nem lehetséges: %1$s</string>
|
||||
<string name="main_menu_notifications_enabled">Értesítések bekapcsolva</string>
|
||||
<string name="main_action_bar_title">Feliratkozott témák</string>
|
||||
<string name="main_menu_report_bug_title">Hiba jelentése</string>
|
||||
<string name="main_item_date_yesterday">tegnap</string>
|
||||
<string name="main_menu_rate_title">Applikáció értékelése ⭐</string>
|
||||
<string name="main_action_mode_delete_dialog_message">Leiratkozás a kiválasztott témá(k)-ról és végleges törlése minden üzenetnek\?</string>
|
||||
<string name="main_item_status_text_one">%1$d értesítés</string>
|
||||
<string name="main_action_mode_delete_dialog_cancel">Mégse</string>
|
||||
<string name="channel_notifications_group_default_name">Alapértelmezett</string>
|
||||
<string name="main_menu_donate_title">Adomány 💸</string>
|
||||
<string name="main_banner_websocket_button_dismiss">Bezár</string>
|
||||
<string name="add_dialog_instant_delivery_description">Garantálja az azonnali üzenetküldést, akkor is, ha az eszköz inaktív.</string>
|
||||
<string name="add_dialog_foreground_description">Az azonnali üzenetküldés mindig bekapcsolva a %1$s címen kívül.</string>
|
||||
<string name="add_dialog_button_login">Bejelentkezés</string>
|
||||
<string name="add_dialog_error_connection_failed">Kapcsolódási hiba: %1$s</string>
|
||||
<string name="add_dialog_login_title">Bejelentkezés szükséges</string>
|
||||
<string name="add_dialog_login_description">Ehhez a témához be kell jelentkezni. Kérem add meg a felhasználó nevedet és jelszavadat!</string>
|
||||
<string name="add_dialog_login_username_hint">Felhasználó</string>
|
||||
<string name="add_dialog_login_new_user">Új felhasználó</string>
|
||||
<string name="detail_how_to_link">Részletes leírás elérhető a ntfy.sh oldalon és a dokumentációban.</string>
|
||||
<string name="detail_clear_dialog_permanently_delete">Végleges törlés</string>
|
||||
<string name="detail_clear_dialog_cancel">Mégse</string>
|
||||
<string name="detail_delete_dialog_message">Leiratkozás a témáról és az összes értesítés törlése\?</string>
|
||||
<string name="detail_delete_dialog_cancel">Mégse</string>
|
||||
<string name="detail_test_title">Teszt: Beállíthatsz témát, ha szeretnél.</string>
|
||||
<string name="detail_item_snack_deleted">Értesítés törölve</string>
|
||||
<string name="detail_item_menu_download">Fájl letöltése</string>
|
||||
<string name="detail_test_message_error_unauthorized_user">Nem sikerült az üzenetet elküldeni: A \"%1$s\" felhasználó jogosultságai nem megfelelőek.</string>
|
||||
<string name="detail_item_menu_copy_url_copied">URL a vágólapra másolva</string>
|
||||
<string name="detail_item_menu_copy_contents">Értesítés másolása</string>
|
||||
<string name="add_dialog_title">Feliratokozás a témára</string>
|
||||
<string name="main_banner_websocket_button_enable_now">Engedélyezés most</string>
|
||||
<string name="add_dialog_instant_delivery">Azonnali küldés dózis módban</string>
|
||||
<string name="add_dialog_login_password_hint">Jelszó</string>
|
||||
<string name="add_dialog_login_error_not_authorized">Bejelentkezési hiba. A %1$s felhasználó nem azonosítható.</string>
|
||||
<string name="detail_clear_dialog_message">Töröljük az összes értesítést ebben a témában\?</string>
|
||||
<string name="detail_test_message_error_too_large">Nem sikerült az üzenetet elküldeni: A csatolmány túl nagy.</string>
|
||||
<string name="detail_deep_link_subscribed_toast_message">Feliratkozva a %1$s témára</string>
|
||||
<string name="detail_item_menu_copy_contents_copied">Értesítés a vágólapra másolva</string>
|
||||
<string name="main_banner_battery_button_remind_later">Később</string>
|
||||
<string name="main_how_to_link">Részletes leírás elérhető a ntfy.sh oldalon és a dokumentációban.</string>
|
||||
<string name="main_banner_battery_text">Az akkumulátor optimalizáció kikapcsolása javasolt az értesítési problémák elkerülésére.</string>
|
||||
<string name="main_banner_websocket_button_remind_later">Később</string>
|
||||
<string name="main_banner_battery_button_dismiss">Bezár</string>
|
||||
<string name="main_banner_battery_button_fix_now">Javítás most</string>
|
||||
<string name="add_dialog_description_below">A témák nem feltétlenül jelszóval védettek, ezért válassz olyan nevet, amelyet nehéz kitalálni! Ha feliratkoztál, akkor küldhetsz PUT/POST értesítéseket.</string>
|
||||
<string name="add_dialog_topic_name_hint">Téma neve, pl. tibi_jelzesei</string>
|
||||
<string name="add_dialog_use_another_server">Használj másik szervert</string>
|
||||
<string name="add_dialog_use_another_server_description">Add meg a szolgáltatók címét alább, hogy más szerveren futó témákra is feliratkozhass.</string>
|
||||
<string name="add_dialog_button_subscribe">Feliratkozás</string>
|
||||
<string name="add_dialog_button_back">Vissza</string>
|
||||
<string name="detail_no_notifications_text">Még nem érkezett értesítés ebben a témában.</string>
|
||||
<string name="detail_delete_dialog_permanently_delete">Végleges törlés</string>
|
||||
<string name="detail_test_message_error_unauthorized_anon">Nem sikerült az üzenetet elküldni: A névtelen publikálás nem engedélyezett.</string>
|
||||
<string name="detail_copied_to_clipboard_message">Vágólapra másolva</string>
|
||||
<string name="detail_instant_delivery_enabled">Azonnali küldés bekapcsolva</string>
|
||||
<string name="detail_instant_delivery_disabled">Azonnali küldés kikapcsolva</string>
|
||||
<string name="detail_item_menu_open">Fájl megnyitása</string>
|
||||
<string name="detail_item_menu_delete">Fájl törlése</string>
|
||||
<string name="detail_item_menu_copy_url">URL másolása</string>
|
||||
<string name="detail_item_menu_cancel">Letöltés leállítása</string>
|
||||
<string name="detail_item_menu_save_file">Fájl mentése</string>
|
||||
<string name="detail_item_cannot_download">Nem sikerült a melléklet megnyitása vagy letöltése. A link lejárt és a helyi fájl nem található.</string>
|
||||
<string name="detail_item_cannot_open">A melléklet nem nyitható meg: %1$s</string>
|
||||
<string name="detail_item_cannot_open_not_found">A melléklet nem nyitható meg: A fájl törölve lett, vagy nincs megfelelő alkalmazás telepítve a megnyitáshoz.</string>
|
||||
<string name="detail_item_saved_successfully">Mentve \"%1$s\" néven a \"Downloads\" mappába</string>
|
||||
<string name="detail_item_cannot_open_url">Az URL nem nyitható meg: %1$s</string>
|
||||
<string name="add_dialog_button_cancel">Mégse</string>
|
||||
<string name="detail_test_message">Ez egy teszt értesítés az Android ntfy alkalmazásból. A beállított prioritás %1$d. Ha küldesz egy újat nem feltétlenül így fog kinézni.</string>
|
||||
<string name="detail_test_message_error">Nem sikerült az üzenetet elküldeni: %1$s</string>
|
||||
<string name="detail_item_snack_undo">Visszavon</string>
|
||||
<string name="detail_item_download_info_deleted">törölve</string>
|
||||
<string name="detail_menu_unsubscribe">Leiratkozás</string>
|
||||
<string name="detail_action_mode_menu_copy">Másolás</string>
|
||||
<string name="detail_action_mode_menu_delete">Törlés</string>
|
||||
<string name="share_menu_send">Megosztás</string>
|
||||
<string name="notification_dialog_30min">30 perc</string>
|
||||
<string name="notification_dialog_1h">1 óra</string>
|
||||
<string name="notification_popup_action_cancel">Mégse</string>
|
||||
<string name="detail_action_mode_delete_dialog_cancel">Mégse</string>
|
||||
<string name="notification_dialog_save">Mentés</string>
|
||||
<string name="notification_dialog_show_all">Összes értesítés mutatása</string>
|
||||
<string name="notification_dialog_muted_forever_toast_message">Értesítések lenémítva</string>
|
||||
<string name="notification_dialog_2h">2 óra</string>
|
||||
<string name="notification_dialog_8h">8 óra</string>
|
||||
<string name="settings_title">Beállítások</string>
|
||||
<string name="detail_item_download_info_downloading_x_percent">%1$d%% letöltve</string>
|
||||
<string name="share_title">Megosztás</string>
|
||||
<string name="notification_dialog_title">Értesítések némítása</string>
|
||||
<string name="notification_dialog_cancel">Mégse</string>
|
||||
<string name="settings_notifications_header">Értesítések</string>
|
||||
<string name="settings_notifications_muted_until_title">Értesítések némítása</string>
|
||||
</resources>
|
|
@ -1,12 +1,12 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_subscriber_notification_noinstant_text">Berlangganan ke topik</string>
|
||||
<string name="channel_notifications_default_name">Prioritas bawaan</string>
|
||||
<string name="channel_notifications_max_name">Prioritas maks</string>
|
||||
<string name="channel_notifications_min_name">Prioritas min</string>
|
||||
<string name="channel_notifications_low_name">Prioritas rendah</string>
|
||||
<string name="channel_notifications_default_name">Notifikasi (prioritas default)</string>
|
||||
<string name="channel_notifications_max_name">Notifikasi (prioritas maks)</string>
|
||||
<string name="channel_notifications_min_name">Notifikasi (prioritas min)</string>
|
||||
<string name="channel_notifications_low_name">Notifikasi (prioritas rendah)</string>
|
||||
<string name="channel_subscriber_service_name">Layanan Langganan</string>
|
||||
<string name="channel_subscriber_notification_title">Mendengarkan notifikasi masuk</string>
|
||||
<string name="channel_subscriber_notification_title">Mendengarkan untuk notifikasi masuk</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Berlangganan ke topik pengiriman instan</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Berlangganan ke satu topik pengiriman instan</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Berlangganan ke dua topik pengiriman instan</string>
|
||||
|
@ -19,11 +19,11 @@
|
|||
\n%2$s</string>
|
||||
<string name="refresh_message_error_one">Tidak dapat memuat ulang langganan: %1$s</string>
|
||||
<string name="main_action_bar_title">Topik berlangganan</string>
|
||||
<string name="main_menu_notifications_enabled">Notifikasi menyala</string>
|
||||
<string name="main_menu_notifications_enabled">Notifikasi nyala</string>
|
||||
<string name="main_menu_notifications_disabled_forever">Notifikasi dibisukan</string>
|
||||
<string name="main_menu_notifications_disabled_until">Notifikasi dibisukan sampai %1$s</string>
|
||||
<string name="main_menu_settings_title">Pengaturan</string>
|
||||
<string name="main_menu_report_bug_title">Laporkan kutu</string>
|
||||
<string name="main_menu_report_bug_title">Laporkan sebuah kutu</string>
|
||||
<string name="main_menu_docs_title">Baca dokumentasi</string>
|
||||
<string name="main_menu_rate_title">Beri nilai aplikasi ⭐</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">Batalkan langganan</string>
|
||||
|
@ -35,7 +35,7 @@
|
|||
<string name="main_how_to_intro">Tekan + untuk membuat atau berlangganan ke sebuah topik. Setelah itu Anda menerima notifikasi pada perangkat Anda saat mengirim pesan via PUT atau POST.</string>
|
||||
<string name="main_how_to_link">Instruksi rinci tersedia di ntfy.sh, dan dalam dokumentasi.</string>
|
||||
<string name="main_unified_push_toast">Langganan ini dikelola oleh %1$s melalui UnifiedPush</string>
|
||||
<string name="main_banner_battery_text">Pengoptimalan baterai untuk aplikasi sebaiknya dimatikan supaya masalah pengiriman notifikasi dapat dihindari.</string>
|
||||
<string name="main_banner_battery_text">Pengoptimalan baterai untuk aplikasi seharusnya mati supaya masalah pengiriman notifikasi dapat dihindari.</string>
|
||||
<string name="main_banner_battery_button_remind_later">Tanya nanti</string>
|
||||
<string name="main_banner_battery_button_dismiss">Abaikan</string>
|
||||
<string name="main_banner_battery_button_fix_now">Perbaiki sekarang</string>
|
||||
|
@ -54,7 +54,7 @@
|
|||
<string name="add_dialog_login_error_not_authorized">Login gagal. Pengguna %1$s tidak diizinkan.</string>
|
||||
<string name="add_dialog_login_new_user">Pengguna baru</string>
|
||||
<string name="detail_no_notifications_text">Anda belum menerima notifikasi apa pun.</string>
|
||||
<string name="detail_how_to_intro">Untuk mengirimkan notifikasi ke topik ini, lakukan PUT atau POST ke URL topik.</string>
|
||||
<string name="detail_how_to_intro">Untuk mengirimkan notifikasi ke topik ini, tinggal PUT atau POST ke URL topik.</string>
|
||||
<string name="detail_how_to_example">Contoh (menggunakan curl):<br/><tt>$ curl -d \"Hai\" %1$s</tt></string>
|
||||
<string name="detail_how_to_link">Instruksi rinci tersedia di ntfy.sh, dan dalam dokumentasi.</string>
|
||||
<string name="detail_clear_dialog_message">Hapus semua notifikasi di topik ini\?</string>
|
||||
|
@ -68,7 +68,7 @@
|
|||
<string name="detail_test_message_error_unauthorized_anon">Tidak dapat mengirimkan pesan: Penerbitan anonim tidak diizinkan.</string>
|
||||
<string name="detail_test_message_error_too_large">Tidak dapat mengirimkan pesan: Lampiran terlalu besar.</string>
|
||||
<string name="detail_copied_to_clipboard_message">Disalin ke papan klip</string>
|
||||
<string name="detail_instant_delivery_enabled">Pengiriman instan menyala</string>
|
||||
<string name="detail_instant_delivery_enabled">Pengiriman instan nyala</string>
|
||||
<string name="detail_instant_delivery_disabled">Pengiriman instan mati</string>
|
||||
<string name="detail_item_tags">Tanda: %1$s</string>
|
||||
<string name="detail_item_snack_deleted">Notifikasi dihapus</string>
|
||||
|
@ -165,8 +165,8 @@
|
|||
<string name="settings_general_users_prefs_user_used_by_many">Digunakan oleh topik %1$s</string>
|
||||
<string name="settings_general_users_prefs_user_add_title">Tambahkan pengguna baru</string>
|
||||
<string name="settings_general_dark_mode_title">Mode gelap</string>
|
||||
<string name="settings_general_dark_mode_summary_light">Mode terang menyala</string>
|
||||
<string name="settings_general_dark_mode_summary_dark">Mode gelap menyala. Apakah Anda seorang vampir\?</string>
|
||||
<string name="settings_general_dark_mode_summary_light">Mode terang nyala</string>
|
||||
<string name="settings_general_dark_mode_summary_dark">Mode gelap nyala. Apakah Anda seorang vampir\?</string>
|
||||
<string name="settings_general_dark_mode_entry_system">Gunakan bawaan sistem</string>
|
||||
<string name="settings_general_dark_mode_entry_light">Mode terang</string>
|
||||
<string name="settings_general_dark_mode_entry_dark">Mode gelap</string>
|
||||
|
@ -216,7 +216,7 @@
|
|||
<string name="settings_notifications_auto_download_summary_always">Unduh semua lampiran secara otomatis</string>
|
||||
<string name="settings_notifications_auto_download_500k">Jika di bawah 500 kB</string>
|
||||
<string name="user_dialog_button_save">Simpan</string>
|
||||
<string name="channel_notifications_high_name">Prioritas tinggi</string>
|
||||
<string name="channel_notifications_high_name">Notifikasi (prioritas tinggi)</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">Hapus secara permanen</string>
|
||||
<string name="add_dialog_button_subscribe">Berlangganan</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">Berlangganan ke %1$d topik pengiriman instan</string>
|
||||
|
@ -236,7 +236,7 @@
|
|||
<string name="main_item_status_text_not_one">%1$d notifikasi</string>
|
||||
<string name="detail_test_message">Ini adalah notifikasi uji coba dari aplikasi Android ntfy. Ini memiliki tingkat prioritas %1$d. Jika Anda kirim yang lain, itu mungkin kelihatan berbeda.</string>
|
||||
<string name="detail_test_message_error_unauthorized_user">Tidak dapat mengirimkan pesan: Pengguna \"%1$s\" tidak diizinkan.</string>
|
||||
<string name="detail_menu_notifications_enabled">Notifikasi menyala</string>
|
||||
<string name="detail_menu_notifications_enabled">Notifikasi nyala</string>
|
||||
<string name="notification_popup_file_download_successful">%1$s
|
||||
\nFile: %2$s, terunduh</string>
|
||||
<string name="detail_item_saved_successfully">Disimpan sebagai \"%1$s\" dalam folder \"Downloads\"</string>
|
||||
|
@ -255,7 +255,7 @@
|
|||
<string name="settings_notifications_min_priority_default">Prioritas default dan di atas</string>
|
||||
<string name="settings_notifications_priority_high">tinggi</string>
|
||||
<string name="settings_notifications_auto_download_1m">Jika di bawah 1 MB</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">Nyalakan pencatatan, supaya Anda dapat membagikan catatan nanti untuk mendiagnosa masalah.</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">Nyalakan pencatatan supaya Anda dapat membagikan catatan nanti untuk mendiagnosa masalah.</string>
|
||||
<string name="settings_advanced_export_logs_error_uploading">Tidak dapat mengunggah catatan: %1$s</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_text">Topik/nama host diganti dengan nama-nama buah, jadi Anda dapat membagikan catatan tanpa khawatir:
|
||||
\n
|
||||
|
@ -289,7 +289,7 @@
|
|||
<string name="settings_backup_restore_restore_failed">Pemulihan gagal: %1$s</string>
|
||||
<string name="settings_advanced_header">Tingkat lanjut</string>
|
||||
<string name="settings_advanced_broadcast_summary_enabled">Aplikasi dapat menerima notifikasi yang datang sebagai siaran</string>
|
||||
<string name="settings_advanced_export_logs_summary">Salin catatan ke papan klip, atau unggah ke nopaste.net (dimiliki oleh penulis ntfy). Nama host dan topik dapat disensor, notifikasi tidak akan disensor.</string>
|
||||
<string name="settings_advanced_export_logs_summary">Salin catatan ke papn klip, atau unggah ke nopaste.net (dimiliki oleh penulis ntfy). Nama host dan topik dapat disensor, notifikasi tidak akan disensor.</string>
|
||||
<string name="settings_about_version_copied_to_clipboard_message">Disalin ke papan klip</string>
|
||||
<string name="user_dialog_password_hint_add">Kata Sandi</string>
|
||||
<string name="user_dialog_button_delete">Hapus pengguna</string>
|
||||
|
@ -327,20 +327,4 @@
|
|||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">Disalin ke papan klip</string>
|
||||
<string name="detail_settings_about_header">Tentang</string>
|
||||
<string name="detail_settings_about_topic_url_title">URL Topik</string>
|
||||
<string name="main_menu_donate_title">Donasi 💸</string>
|
||||
<string name="detail_item_cannot_open_apk">Aplikasi tidak dapat dipasang lagi. Unduh melalui peramban. Lihat masalah #531 untuk detail lebih lanjut.</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">Notifikasi prioritas maks hanya memperingati sekali</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Atur pengaturan notifikasi</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">Sampingan Jangan Ganggu, suara, dll.</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Peringati hanya sekali</string>
|
||||
<string name="channel_notifications_group_default_name">Bawaan</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Tetap memperingati</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">Tetap memperingati untuk prioritas tertinggi</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">Notifikasi prioritas maks memperingatkan secara berkelanjutan sampai diabaikan</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Pengaturan notifikasi kustom</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">Menggunakan pengaturan kustom untuk langganan ini</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">Menggunakan pengaturan bawaan (suara, sampingan Jangan Ganggu, dll.)</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy akan menjadi sebagai distributor UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfy tidak akan menjadi sebagai distributor UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_title">Aktifkan UnifiedPush</string>
|
||||
</resources>
|
|
@ -1,9 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_notifications_low_name">Priorità bassa</string>
|
||||
<string name="channel_notifications_low_name">Notifiche (priorità bassa)</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">Iscritto a tre topic</string>
|
||||
<string name="channel_notifications_high_name">Priorità alta</string>
|
||||
<string name="channel_notifications_max_name">Priorità massima</string>
|
||||
<string name="channel_notifications_high_name">Notifiche (priorità alta)</string>
|
||||
<string name="channel_notifications_max_name">Notifiche (priorità massima)</string>
|
||||
<string name="channel_subscriber_service_name">Servizio di iscrizione</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Iscritto ai topic a consegna istantanea</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Iscritto a due topic a consegna istantanea</string>
|
||||
|
@ -166,7 +166,7 @@
|
|||
\nLe password sono state ripulite, ma non sono elencate qui.</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_button_ok">Ok</string>
|
||||
<string name="settings_advanced_clear_logs_title">Cancella i log</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Usa stream JSON over HTTP per collegarti al server. Questo metodo è collaudato, ma può consumare più batteria.</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Usa stream JSON over HTTP per collegarti al server. Questo metodo è deprecato e sarà rimosso a giugno 2022.</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_jsonhttp">Stream JSON over HTTP</string>
|
||||
<string name="user_dialog_description_add">Puoi aggiungere un utente qui. Tutti i topic per il dato server utilizzeranno questo utente.</string>
|
||||
<string name="user_dialog_description_edit">Puoi modificare username/password per l\'utente selezionato, oppure eliminarlo.</string>
|
||||
|
@ -179,8 +179,8 @@
|
|||
<string name="user_dialog_button_delete">Elimina utente</string>
|
||||
<string name="user_dialog_button_save">Salva</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">Iscritto a %1$d topic</string>
|
||||
<string name="channel_notifications_default_name">Priorità di default</string>
|
||||
<string name="channel_notifications_min_name">Priorità minima</string>
|
||||
<string name="channel_notifications_default_name">Notifiche (priorità di default)</string>
|
||||
<string name="channel_notifications_min_name">Notifiche (priorità minima)</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Iscritto a un topic a consegna istantanea</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">Iscritto a quattro topic</string>
|
||||
<string name="main_menu_docs_title">Leggi la documentazione</string>
|
||||
|
@ -285,7 +285,7 @@
|
|||
<string name="settings_advanced_export_logs_uploading">Log in upload …</string>
|
||||
<string name="settings_advanced_clear_logs_summary">Elimina i log precedentemente salvati, e ricomincia</string>
|
||||
<string name="settings_advanced_connection_protocol_title">Protocollo di connessione</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Usa WebSockets per collegarti al server. Questo è il metodo consigliato, ma potrebbe richiedere una configurazione aggiuntiva del proxy.</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Usa WebSockets per collegarti al server. Questo metodo diventerà il default a giugno 2022.</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">WebSockets</string>
|
||||
<string name="user_dialog_title_add">Aggiungi utente</string>
|
||||
<string name="settings_about_version_copied_to_clipboard_message">Copiato negli appunti</string>
|
||||
|
@ -317,19 +317,4 @@
|
|||
<string name="detail_settings_appearance_icon_remove_summary">Icona visualizzata nelle notifiche di questo topic</string>
|
||||
<string name="detail_settings_appearance_icon_error_saving">Impossibile salvare l\'icona: %1$s</string>
|
||||
<string name="detail_settings_global_setting_suffix">utilizzando l\'impostazione globale</string>
|
||||
<string name="detail_settings_appearance_display_name_title">Nome visualizzato</string>
|
||||
<string name="main_banner_websocket_text">E\' consigliato il passaggio a WebSockets per connettersi al server e potrebbe migliorare la durata della batteria, ma potrebbe richiedere <a href="https://ntfy.sh/docs/config/#nginxapache2caddy">un\'ulteriore configurazione del proxy</a>. Questa opzione può essere selezionata nelle Impostazioni.</string>
|
||||
<string name="detail_settings_appearance_display_name_default_summary">%1$s (predefinito)</string>
|
||||
<string name="detail_settings_appearance_display_name_message">Impostare un nome di visualizzazione personalizzato per questa iscrizione. Lasciare vuoto per il nome predefinito (%1$s).</string>
|
||||
<string name="detail_settings_about_header">Informazioni</string>
|
||||
<string name="detail_settings_about_topic_url_title">URL argomento</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">Copiato negli appunti</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">Scegli il servizio URL</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">Pulisci il servizio URL</string>
|
||||
<string name="main_banner_websocket_button_enable_now">Attiva ora</string>
|
||||
<string name="channel_notifications_group_default_name">Default</string>
|
||||
<string name="main_menu_donate_title">Dona 💸</string>
|
||||
<string name="detail_item_cannot_open_apk">Le app non possono più essere installate: devono essere scaricate via browser. Vedi l\'issue #531 per dettagli.</string>
|
||||
<string name="eos_settings_enable_title">Abilitare il distributore</string>
|
||||
<string name="eos_settings_enable_description">Consente alle applicazioni di terze parti di ricevere notifiche UnifiedPush</string>
|
||||
</resources>
|
||||
</resources>
|
||||
|
|
|
@ -1,315 +1,42 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">מנוי ל־%1$d נושאים</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">רשום ל-%1$d נושאים</string>
|
||||
<string name="refresh_message_result">%1$d התראות התקבלו</string>
|
||||
<string name="refresh_message_no_results">הכול עדכני</string>
|
||||
<string name="refresh_message_error_one">הרענון של המינוי הבא נכשל: %1$s</string>
|
||||
<string name="main_action_bar_title">מינוי לנושאים</string>
|
||||
<string name="main_menu_notifications_enabled">התראות פעילות</string>
|
||||
<string name="refresh_message_no_results">הכל מעודכן</string>
|
||||
<string name="refresh_message_error_one">הרענון של הרישום הבא נכשל: %1$s</string>
|
||||
<string name="main_action_bar_title">רישומים לנושאים</string>
|
||||
<string name="main_menu_notifications_enabled">התראות פועלות</string>
|
||||
<string name="main_menu_notifications_disabled_until">ההתראות מושתקות עד %1$s</string>
|
||||
<string name="main_menu_settings_title">הגדרות</string>
|
||||
<string name="main_menu_report_bug_title">דיווח על תקלה</string>
|
||||
<string name="main_menu_docs_title">הצגת התיעוד</string>
|
||||
<string name="main_menu_rate_title">דירוג היישומון ⭐</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">ביטול מינוי</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">מחיקה לצמיתות</string>
|
||||
<string name="main_menu_report_bug_title">דווח/י על באג</string>
|
||||
<string name="main_menu_docs_title">קרא/י את הדוקומנטציה</string>
|
||||
<string name="main_menu_rate_title">דרג/י את האפליקציה ⭐</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">הסר/י רישום</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">מחק/י לצמיתות</string>
|
||||
<string name="main_action_mode_delete_dialog_cancel">ביטול</string>
|
||||
<string name="main_item_status_text_one">התראה %1$d</string>
|
||||
<string name="main_item_status_text_not_one">%1$d התראות</string>
|
||||
<string name="main_item_status_text_one">התראת %1$d</string>
|
||||
<string name="main_item_status_text_not_one">התראות %1$d</string>
|
||||
<string name="main_item_date_yesterday">אתמול</string>
|
||||
<string name="main_add_button_description">הוספת מינוי</string>
|
||||
<string name="main_no_subscriptions_text">נראה שאין לך מינויים עדיין.</string>
|
||||
<string name="main_banner_battery_text">צריך לכבות מיטוב סוללה כדי שהיישומון יוכל להימנע מבעיות משלוח וקבלת התראות.</string>
|
||||
<string name="main_banner_battery_button_remind_later">לשאול אחר כך</string>
|
||||
<string name="main_banner_battery_button_dismiss">התעלמות</string>
|
||||
<string name="main_banner_battery_button_fix_now">לתקן עכשיו</string>
|
||||
<string name="main_banner_websocket_button_remind_later">לשאול אחר כך</string>
|
||||
<string name="channel_notifications_min_name">עדיפות מזערית</string>
|
||||
<string name="channel_subscriber_service_name">שירות מנויים</string>
|
||||
<string name="channel_subscriber_notification_title">בהאזנה להתראות נכנסות</string>
|
||||
<string name="channel_notifications_low_name">עדיפות נמוכה</string>
|
||||
<string name="channel_notifications_default_name">עדיפות ברירת מחדל</string>
|
||||
<string name="channel_notifications_high_name">עדיפות גבוהה</string>
|
||||
<string name="channel_notifications_max_name">עדיפות מרבית</string>
|
||||
<string name="refresh_message_error">הרענון של %1$d מהרישומים נכשל
|
||||
<string name="main_add_button_description">הוספת רישום</string>
|
||||
<string name="main_no_subscriptions_text">נראה שלא נרשמת לאף נושא עדיין.</string>
|
||||
<string name="main_banner_battery_text">מיטוב סוללה צריך להיות כבוי עבור האפליקציה כדי להימנע מבעיות בשליחת וקבלת התראות.</string>
|
||||
<string name="main_banner_battery_button_remind_later">שאל אחר כך</string>
|
||||
<string name="main_banner_battery_button_dismiss">הסר</string>
|
||||
<string name="main_banner_battery_button_fix_now">תקן עכשיו</string>
|
||||
<string name="main_banner_websocket_button_remind_later">שאל אחר כך</string>
|
||||
<string name="channel_notifications_min_name">התראות (עדיפות מינימאלית)</string>
|
||||
<string name="channel_subscriber_service_name">שירות רישום</string>
|
||||
<string name="channel_subscriber_notification_title">מאזין להתראות נכנסות</string>
|
||||
<string name="channel_notifications_low_name">התראות (עדיפות נמוכה)</string>
|
||||
<string name="channel_notifications_default_name">התראות (עדיפות ברירת מחדל)</string>
|
||||
<string name="channel_notifications_high_name">התראות (עדיפות גבוהה)</string>
|
||||
<string name="channel_notifications_max_name">התראות (עדיפות מקסימאלית)</string>
|
||||
<string name="refresh_message_error">הרענון של %1$d רישומים נכשל
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="main_menu_notifications_disabled_forever">התראות מושתקות</string>
|
||||
<string name="main_action_mode_delete_dialog_message">לבטל מינוי מהנושאים שנבחרו ולמחוק את כל ההתראות לצמיתות?</string>
|
||||
<string name="main_item_status_reconnecting">התחברות מחדש…</string>
|
||||
<string name="main_how_to_intro">לחיצה על + תאפשר ליצור או להירשם לנושא. לאחר מכן התראות תגענה למכשיר שלך בעת שליחת הודעות עם PUT או POST.</string>
|
||||
<string name="main_how_to_link">הוראות מפורטות זמינות ב־ntfy.sh, ובתיעוד.</string>
|
||||
<string name="main_menu_donate_title">תרומה 💸</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">מנוי לשני נושאים במשלוח מהיר</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">מנוי לשלושה נושאים במשלוח מהיר</string>
|
||||
<string name="channel_subscriber_notification_instant_text">מנוי לנושאים במשלוח מהיר</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">מנוי לנושא אחד במשלוח מהיר</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">מנוי לארבעה נושאים במשלוח מהיר</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">מנוי לחמישה נושאים במשלוח מהיר</string>
|
||||
<string name="channel_subscriber_notification_instant_text_six">מנוי לשישה נושאים במשלוח מהיר</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">מנוי ל־%1$d נושאים במשלוח מהיר</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">מנוי לנושאים</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">מנוי לנושא אחד</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">מנוי לשני נושאים</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">מנוי לשלושה נושאים</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">מנוי לארבעה נושאים</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_five">מנוי לחמישה נושאים</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_six">מנוי לשישה נושאים</string>
|
||||
<string name="channel_notifications_group_default_name">ברירת מחדל</string>
|
||||
<string name="add_dialog_description_below">כנראה שהנושאים אינם מוגנים בסיסמה, אז כדאי לבחור שם שקשה לנחש. לאחר הרשמה, אפשר לשלוח התראות עם PUT/POST.</string>
|
||||
<string name="main_banner_websocket_button_enable_now">להפעיל כעת</string>
|
||||
<string name="add_dialog_topic_name_hint">שם הנושא, למשל: shimons_alerts</string>
|
||||
<string name="add_dialog_use_another_server">להשתמש בשרת אחר</string>
|
||||
<string name="add_dialog_instant_delivery">משלוח מיידי במצב תנומה</string>
|
||||
<string name="main_banner_websocket_button_dismiss">התעלמות</string>
|
||||
<string name="add_dialog_title">הרשמה לנושא</string>
|
||||
<string name="main_item_status_unified_push">%1$s (UnifiedPush)</string>
|
||||
<string name="detail_how_to_intro">כדי לשלוח התראות לנושא הזה צריך פשוט לשלוח בקשות PUT או POST לכתובת הנושא.</string>
|
||||
<string name="detail_test_message_error_unauthorized_user">אי אפשר לשלוח הודעה: למשתמש „%1$s” אין הרשאה.</string>
|
||||
<string name="detail_deep_link_subscribed_toast_message">נרשמת לנושא %1$s</string>
|
||||
<string name="detail_item_tags">תגיות: %1$s</string>
|
||||
<string name="detail_item_snack_undo">הסגה</string>
|
||||
<string name="detail_item_menu_delete">מחיקת קובץ</string>
|
||||
<string name="detail_menu_settings">הגדרות המינוי</string>
|
||||
<string name="detail_action_mode_menu_delete">מחיקה</string>
|
||||
<string name="notification_dialog_cancel">ביטול</string>
|
||||
<string name="notification_dialog_muted_until_toast_message">ההתראות מושתקות עד %1$s</string>
|
||||
<string name="notification_dialog_show_all">הצגת כל ההתראות</string>
|
||||
<string name="notification_popup_user_action_failed">%1$s נכשל: %2$s</string>
|
||||
<string name="settings_notifications_min_priority_summary_any">כל ההתראות מוצגות</string>
|
||||
<string name="settings_notifications_min_priority_summary_max">להציג התראות אם העדיפות היא 5 (מרבית)</string>
|
||||
<string name="settings_notifications_min_priority_min">כל עדיפות שהיא</string>
|
||||
<string name="settings_notifications_min_priority_default">עדיפות ברירת מחדל ומעלה</string>
|
||||
<string name="settings_notifications_min_priority_high">עדיפות גבוהה ומעלה</string>
|
||||
<string name="settings_notifications_min_priority_max">עדיפות מרבית בלבד</string>
|
||||
<string name="settings_notifications_priority_min">מזערית</string>
|
||||
<string name="settings_notifications_auto_download_100k">אם מתחת ל־100 ק״ב</string>
|
||||
<string name="settings_notifications_auto_download_500k">אם מתחת ל־500 ק״ב</string>
|
||||
<string name="settings_notifications_auto_download_1m">אם מתחת ל־1 מ״ב</string>
|
||||
<string name="settings_notifications_auto_download_5m">אם מתחת ל־5 מ״ב</string>
|
||||
<string name="settings_notifications_auto_download_10m">אם מתחת ל־10 מ״ב</string>
|
||||
<string name="settings_notifications_auto_download_50m">אם מתחת ל־50 מ״ב</string>
|
||||
<string name="detail_item_download_info_downloading_x_percent">%1$d%% ירדו</string>
|
||||
<string name="detail_menu_clear">פינוי כל ההתראות</string>
|
||||
<string name="notification_popup_file_download_successful">%1$s
|
||||
\nקובץ: %2$s, ירד</string>
|
||||
<string name="notification_popup_file_download_failed">%1$s
|
||||
\nקובץ: %2$s, ההורדה נכשלה</string>
|
||||
<string name="settings_notifications_auto_delete_summary_never">לעולם לא למחוק התראות אוטומטית</string>
|
||||
<string name="settings_general_users_title">ניהול משתמשים</string>
|
||||
<string name="settings_general_users_summary">הוספת/הסרת משתמשים מ/על נושאים מוגנים</string>
|
||||
<string name="settings_backup_restore_header">גיבוי ושחזור</string>
|
||||
<string name="settings_backup_restore_backup_title">גיבוי לקובץ</string>
|
||||
<string name="settings_backup_restore_backup_successful">נוצר גיבוי</string>
|
||||
<string name="settings_advanced_broadcast_title">הודעות שידור</string>
|
||||
<string name="settings_advanced_broadcast_summary_enabled">יישומונים יכולים לקבל התראות נכנסות בתור שידורים</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">להמשיך להודיע</string>
|
||||
<string name="add_dialog_login_password_hint">סיסמה</string>
|
||||
<string name="add_dialog_login_description">הנושא הזה דורש כניסה למערכת. נא למלא שם משתמש וסיסמה.</string>
|
||||
<string name="add_dialog_login_error_not_authorized">הכניסה נכשלה. למשתמש %1$s אין הרשאה.</string>
|
||||
<string name="add_dialog_login_new_user">משתמש חדש</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">נא לבחור כתובת שירות</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">מחיקת כתובת השירות</string>
|
||||
<string name="detail_no_notifications_text">עדיין לא קיבלת התראות לנושא הזה.</string>
|
||||
<string name="detail_how_to_example">דוגמה (עם curl):<br/><tt>$ curl -d \"Shalom\" %1$s</tt></string>
|
||||
<string name="detail_how_to_link">יש הנחיות מפורטות ב־ntfy.sh ובתיעוד.</string>
|
||||
<string name="detail_clear_dialog_message">למחוק את כל ההתראות בנושא הזה?</string>
|
||||
<string name="detail_clear_dialog_permanently_delete">למחוק לצמיתות</string>
|
||||
<string name="detail_clear_dialog_cancel">ביטול</string>
|
||||
<string name="detail_delete_dialog_message">לבטל את המינוי לנושא הזה ולמחוק את כל ההתראות שהתקבלו?</string>
|
||||
<string name="detail_test_message_error_too_large">אי אפשר לשלוח הודעה: הצרופה גדולה מדי.</string>
|
||||
<string name="detail_item_menu_cancel">ביטול הורדה</string>
|
||||
<string name="detail_item_menu_save_file">שמירת קובץ</string>
|
||||
<string name="detail_item_menu_copy_contents_copied">ההתראה הועתקה ללוח הגזירים</string>
|
||||
<string name="detail_item_cannot_download">אי אפשר לפתוח או להוריד את הצרופה. תוקף הקישור פג ואין קובץ מקומי.</string>
|
||||
<string name="detail_item_cannot_save">לא ניתן לשמור צרופה: %1$s</string>
|
||||
<string name="detail_item_download_info_not_downloaded">לא ירדה</string>
|
||||
<string name="detail_item_download_info_deleted">נמחקה</string>
|
||||
<string name="detail_item_download_info_deleted_expired">נמחקה, תוקף הקישור פג</string>
|
||||
<string name="detail_item_download_info_download_failed_expires_x">ההורדה נכשלה, תוקף הקישור יפוג ב־%1$s</string>
|
||||
<string name="detail_menu_notifications_disabled_forever">התראות מושתקות</string>
|
||||
<string name="detail_menu_notifications_disabled_until">ההתראות מושתקות עד %1$s</string>
|
||||
<string name="detail_menu_test">שליחת התראת בדיקה</string>
|
||||
<string name="detail_menu_copy_url">העתקת כתובת הנושא</string>
|
||||
<string name="detail_action_mode_menu_copy">העתקה</string>
|
||||
<string name="share_title">שיתוף</string>
|
||||
<string name="share_menu_send">שיתוף</string>
|
||||
<string name="share_content_text_hint">הוספת הקשר לשיתוף כאן</string>
|
||||
<string name="share_topic_title">שיתוף אל</string>
|
||||
<string name="share_suggested_topics">נושאים מוצעים</string>
|
||||
<string name="notification_dialog_title">השתקת התראות</string>
|
||||
<string name="notification_dialog_save">שמירה</string>
|
||||
<string name="notification_dialog_enabled_toast_message">ההתראות נמשכות</string>
|
||||
<string name="notification_dialog_muted_forever_toast_message">ההתראות מושתקות</string>
|
||||
<string name="notification_dialog_30min">חצי שעה</string>
|
||||
<string name="notification_dialog_1h">שעה</string>
|
||||
<string name="notification_dialog_2h">שעתיים</string>
|
||||
<string name="notification_dialog_8h">8 שעות</string>
|
||||
<string name="notification_dialog_tomorrow">עד מחר</string>
|
||||
<string name="notification_popup_action_open">פתיחה</string>
|
||||
<string name="notification_popup_action_browse">עיון</string>
|
||||
<string name="notification_popup_action_download">הורדה</string>
|
||||
<string name="notification_popup_action_cancel">ביטול</string>
|
||||
<string name="notification_popup_file">%1$s
|
||||
\nקובץ: %2$s</string>
|
||||
<string name="settings_title">הגדרות</string>
|
||||
<string name="settings_notifications_header">התראות</string>
|
||||
<string name="settings_notifications_muted_until_show_all">כל ההתראות מוצגות</string>
|
||||
<string name="settings_notifications_muted_until_forever">ההתראות מושתקות עד לביטול השתקה</string>
|
||||
<string name="settings_notifications_muted_until_x">התראות מושתקות עד %1$s</string>
|
||||
<string name="settings_notifications_min_priority_title">התראה מזערית</string>
|
||||
<string name="settings_notifications_auto_delete_one_month">לאחר חודש</string>
|
||||
<string name="settings_notifications_auto_delete_three_months">לאחר 3 חודשים</string>
|
||||
<string name="settings_general_header">כללי</string>
|
||||
<string name="settings_general_default_base_url_title">שרת ברירת מחדל</string>
|
||||
<string name="settings_general_default_base_url_default_summary">%1$s (ברירת מחדל)</string>
|
||||
<string name="settings_general_users_prefs_title">משתמשים</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_many">בשימוש הנושאים %1$s</string>
|
||||
<string name="settings_general_users_prefs_user_add">הוספת משתמשים</string>
|
||||
<string name="settings_general_users_prefs_user_add_title">הוספת משתמש חדש</string>
|
||||
<string name="settings_general_users_prefs_user_add_summary">יצירת משתמש חדש לשרת חדש</string>
|
||||
<string name="settings_general_dark_mode_title">מצב כהה</string>
|
||||
<string name="settings_general_dark_mode_summary_system">ברירת מחדל המערכת</string>
|
||||
<string name="settings_general_dark_mode_summary_light">מצב בהיר פעיל</string>
|
||||
<string name="settings_general_dark_mode_summary_dark">מצב ככה פעיל. מדובר בערפד/ית?</string>
|
||||
<string name="settings_backup_restore_backup_summary">ייצוא הגדרות, התראות ומשתמשים</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything">הכול</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything_no_users">הכול חוץ מהמשתמשים</string>
|
||||
<string name="settings_backup_restore_backup_failed">הגיבוי נכשל: %1$s</string>
|
||||
<string name="settings_backup_restore_restore_title">שחזור מקובץ</string>
|
||||
<string name="settings_backup_restore_restore_failed">השחזור נכשל: %1$s</string>
|
||||
<string name="settings_advanced_header">מתקדם</string>
|
||||
<string name="settings_advanced_export_logs_copied_url">היומנים הועלו והכתובת הועתקה</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_button_ok">אישור</string>
|
||||
<string name="settings_advanced_export_logs_error_uploading">לא ניתן להעלות יומנים: %1$s</string>
|
||||
<string name="settings_advanced_clear_logs_title">פינוי יומנים</string>
|
||||
<string name="detail_settings_appearance_header">מראה</string>
|
||||
<string name="detail_settings_appearance_icon_set_title">סמל מינוי</string>
|
||||
<string name="main_unified_push_toast">המינוי הזה מנוהל על ידי %1$s דרך UnifiedPush</string>
|
||||
<string name="add_dialog_use_another_server_description">נא למלא את כתובת השירותים להלן כדי להירשם לנושאים משרתים אחרים.</string>
|
||||
<string name="add_dialog_button_login">כניסה</string>
|
||||
<string name="add_dialog_error_connection_failed">החיבור נכשל: %1$s</string>
|
||||
<string name="add_dialog_login_title">יש להיכנס</string>
|
||||
<string name="add_dialog_login_username_hint">שם משתמש</string>
|
||||
<string name="detail_delete_dialog_cancel">ביטול</string>
|
||||
<string name="detail_test_title">בדיקה: אפשר להגדיר כותרת אם מתחשק לך.</string>
|
||||
<string name="detail_test_message">זאת התראת בדיקה מהיישומון של ntfy ל־Android. רמת העדיפות שלו היא %1$d. אם תישלח התראה נוספת היא עשויה להיראות אחרת.</string>
|
||||
<string name="detail_test_message_error">לא ניתן לשלוח הודעה: %1$s</string>
|
||||
<string name="detail_test_message_error_unauthorized_anon">לא ניתן לשלוח הודעה: אסור לפרסם באופן אלמוני.</string>
|
||||
<string name="share_successful">ההודעה פורסמה</string>
|
||||
<string name="settings_notifications_channel_prefs_title">הגדרות ערוץ</string>
|
||||
<string name="settings_notifications_auto_download_summary_never">לעולם לא להוריד צרופות אוטומטית</string>
|
||||
<string name="settings_notifications_auto_download_summary_smaller_than_x">להוריד צרופות עד %1$s אוטומטית</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_month">למחוק התראות אוטומטית לאחר חודש</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_months">למחוק התראות אוטומטית לאחר 3 חודשים</string>
|
||||
<string name="settings_notifications_auto_delete_never">אף פעם לא</string>
|
||||
<string name="settings_notifications_auto_delete_one_day">לאחר יום</string>
|
||||
<string name="settings_general_users_prefs_user_not_used">לא בשימוש של אף נושא</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_one">בשימוש הנושא %1$s</string>
|
||||
<string name="settings_advanced_export_logs_copied_logs">היומן הועתק ללוח הגזירים</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_original">העתקה ללוח הגזירים</string>
|
||||
<string name="user_dialog_title_add">הוספת משתמש</string>
|
||||
<string name="user_dialog_password_hint_add">סיסמה</string>
|
||||
<string name="user_dialog_password_hint_edit">סיסמה (לא תשתנה אם יישאר ריק)</string>
|
||||
<string name="user_dialog_button_add">הוספת משתמש</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expires_x">לא ירדה, התוקף יפוג ב־%1$s</string>
|
||||
<string name="settings_notifications_auto_delete_title">מחיקת התראות</string>
|
||||
<string name="settings_notifications_auto_delete_one_week">לאחר שבוע</string>
|
||||
<string name="settings_advanced_connection_protocol_title">פרוטוקול חיבור</string>
|
||||
<string name="settings_about_version_copied_to_clipboard_message">הועתק ללוח הגזירים</string>
|
||||
<string name="settings_advanced_export_logs_title">העתקת/העלאת יומנים</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_original">להעלות ולהעתיק קישור</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_scrubbed">להעלות ולהעתיק קישור (מצונזר)</string>
|
||||
<string name="detail_settings_appearance_icon_set_summary">נא להגדיר סמל שיוצג בהתראות</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">הועתק ללוח הגזירים</string>
|
||||
<string name="detail_settings_appearance_icon_remove_summary">סמל שמוצג בהתראות לנושא הזה</string>
|
||||
<string name="add_dialog_instant_delivery_description">מוודא שהודעות נמסרות מיידית, אפילו אם המכשיר לא פעיל.</string>
|
||||
<string name="add_dialog_button_subscribe">הרשמה</string>
|
||||
<string name="add_dialog_button_back">חזרה</string>
|
||||
<string name="add_dialog_button_cancel">ביטול</string>
|
||||
<string name="detail_delete_dialog_permanently_delete">למחוק לצמיתות</string>
|
||||
<string name="detail_copied_to_clipboard_message">הועתק ללוח הגזירים</string>
|
||||
<string name="detail_item_snack_deleted">ההתראה נמחקה</string>
|
||||
<string name="detail_item_menu_download">הורדת קובץ</string>
|
||||
<string name="detail_item_menu_copy_url">העתקת כתובת</string>
|
||||
<string name="detail_item_menu_copy_url_copied">הכתובת הועתקה ללוח הגזירים</string>
|
||||
<string name="detail_item_menu_copy_contents">העתקת התראה</string>
|
||||
<string name="detail_item_saved_successfully">נשמרה בשם „%1$s” בתיקיית ה„הורדות/Download”</string>
|
||||
<string name="detail_item_menu_open">פתיחת קובץ</string>
|
||||
<string name="share_content_file_text">שותף איתך קובץ</string>
|
||||
<string name="settings_backup_restore_backup_entry_settings_only">הגדרות בלבד</string>
|
||||
<string name="detail_item_cannot_open">אי אפשר לפתוח צרופה: %1$s</string>
|
||||
<string name="detail_menu_unsubscribe">ביטול מינוי</string>
|
||||
<string name="detail_action_mode_delete_dialog_message">למחוק את ההתראות הנבחרות לצמיתות?</string>
|
||||
<string name="detail_action_mode_delete_dialog_permanently_delete">למחוק לצמיתות</string>
|
||||
<string name="detail_action_mode_delete_dialog_cancel">ביטול</string>
|
||||
<string name="detail_settings_title">הגדרות מינוי</string>
|
||||
<string name="share_content_title">תצוגת הודעה מקדימה</string>
|
||||
<string name="share_content_image_text">שותפה איתך תמונה</string>
|
||||
<string name="share_content_image_error">לא ניתן לקרוא תמונה: %1$s</string>
|
||||
<string name="share_content_file_error">לא ניתן לקרוא פרטי קובץ: %1$s</string>
|
||||
<string name="settings_notifications_min_priority_summary_x_or_higher">להציג התראות אם העדיפות היא %1$d (%2$s) ומעלה</string>
|
||||
<string name="notification_dialog_forever">עד לביטול ההשתקה</string>
|
||||
<string name="settings_notifications_muted_until_title">השתקת התראות</string>
|
||||
<string name="settings_notifications_auto_download_title">הורדות צרופות</string>
|
||||
<string name="settings_notifications_channel_prefs_summary">מעקף „לא להפריע” (DND) צלילים וכו׳.</string>
|
||||
<string name="settings_notifications_min_priority_low">עדיפות נמוכה ומעלה</string>
|
||||
<string name="settings_notifications_priority_low">נמוכה</string>
|
||||
<string name="settings_notifications_priority_max">מרבית</string>
|
||||
<string name="settings_general_dark_mode_entry_light">מצב בהיר</string>
|
||||
<string name="settings_notifications_priority_default">ברירת מחדל</string>
|
||||
<string name="settings_notifications_priority_high">גבוהה</string>
|
||||
<string name="settings_notifications_auto_download_always">להוריד הכול אוטומטית</string>
|
||||
<string name="settings_notifications_auto_download_summary_always">להוריד את כל הצרופות אוטומטית</string>
|
||||
<string name="settings_notifications_auto_download_never">לעולם לא להוריד כלום</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_day">למחוק התראות אוטומטית לאחר יום</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_days">למחוק התראות אוטומטית לאחר 3 ימים</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_week">למחוק התראות אוטומטית לאחר שבוע</string>
|
||||
<string name="settings_notifications_auto_delete_three_days">לאחר 3 ימים</string>
|
||||
<string name="settings_general_dark_mode_entry_system">כמו המערכת</string>
|
||||
<string name="settings_general_dark_mode_entry_dark">מצב כהה</string>
|
||||
<string name="settings_backup_restore_restore_summary">ייבוא הגדרות, התראות ומשתמשים</string>
|
||||
<string name="settings_backup_restore_restore_successful">השחזור הצליח</string>
|
||||
<string name="detail_item_download_info_download_failed">ההורדה נכשלה</string>
|
||||
<string name="settings_advanced_broadcast_summary_disabled">יישומונים לא יכולים לקבל התראות כשידורים</string>
|
||||
<string name="settings_advanced_unifiedpush_title">הפעלת UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy ישמש כמפיץ UnifiedPush</string>
|
||||
<string name="settings_about_version_title">גרסה</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">WebSockets</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_jsonhttp">תזרים JSON על גבי HTTP</string>
|
||||
<string name="settings_about_header">על אודות</string>
|
||||
<string name="settings_about_version_format">ntfy %1$s (%2$s)</string>
|
||||
<string name="detail_settings_appearance_icon_remove_title">סמל מינוי (נגיעה להסרה)</string>
|
||||
<string name="detail_settings_appearance_icon_error_saving">לא ניתן לשמור סמל: %1$s</string>
|
||||
<string name="detail_settings_appearance_display_name_title">שם תצוגה</string>
|
||||
<string name="detail_settings_appearance_display_name_default_summary">%1$s (ברירת מחדל)</string>
|
||||
<string name="detail_settings_about_header">על אודות</string>
|
||||
<string name="detail_settings_about_topic_url_title">כתובת נושא</string>
|
||||
<string name="user_dialog_title_edit">עריכת משתמש</string>
|
||||
<string name="user_dialog_description_add">כאן אפשר להוסיף משתמש. כל הנושאים לשרת שצוין ישתמשו במשתמש הזה.</string>
|
||||
<string name="user_dialog_description_edit">אפשר לערוך שם משתמש/סיסמה למשתמש הנבחר או למחוק אותו.</string>
|
||||
<string name="user_dialog_base_url_hint">כתובת שירות</string>
|
||||
<string name="user_dialog_username_hint">שם משתמש</string>
|
||||
<string name="user_dialog_button_cancel">ביטול</string>
|
||||
<string name="user_dialog_button_delete">מחיקת משתמש</string>
|
||||
<string name="user_dialog_button_save">שמירה</string>
|
||||
<string name="detail_item_cannot_delete">לא ניתן למחוק צרופה: %1$s</string>
|
||||
<string name="detail_item_download_failed">לא ניתן להוריד צרופה: %1$s</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expired">לא ירדה, תוקף הקישור פג</string>
|
||||
<string name="detail_item_download_info_deleted_expires_x">נמחקה, הקישור יפוג ב־%1$s</string>
|
||||
<string name="detail_item_download_info_download_failed_expired">ההורדה נכשלה, תוקף הקישור פג</string>
|
||||
<string name="detail_menu_notifications_enabled">התראות פעילות</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_scrubbed">העתקה ללוח הגזירים (מצונזר)</string>
|
||||
<string name="settings_advanced_export_logs_uploading">היומן נשלח…</string>
|
||||
<string name="settings_advanced_clear_logs_deleted_toast">יומנים נמחקו</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">הגדרות תצורת התראות</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">להודיע רק פעם אחת</string>
|
||||
<string name="main_banner_websocket_text">החלפה ל־WebSockets היא הדרך המומלצת להתחבר לשרת שלך ויכולה לשפר את חייה הסוללה אך היא עשויה לדרוש <a href="https://ntfy.sh/docs/config/#nginxapache2caddy">שינויים נוספים במתווך שלך</a>. אפשר להפעיל או לכבות את זה בהגדרות.</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">להמשיך להודיע לעדיפות הגבוהה ביותר</string>
|
||||
<string name="detail_item_cannot_open_not_found">לא ניתן לפתוח את הצרופה: יכול להיות שהקובץ נמחק או שאין יישומון מותקן שיכול לפתוח את הקובץ.</string>
|
||||
<string name="detail_item_cannot_open_url">לא ניתן לפתוח כתובת: %1$s</string>
|
||||
<string name="notification_popup_file_downloading">בהורדה%1$s, %2$d%%
|
||||
\n%3$s</string>
|
||||
<string name="detail_item_cannot_open_apk">אי אפשר להתקין עוד יישומונים. יש להוריד דרך הדפדפן במקום. בתקלה #531 מופיעים פרטים נוספים.</string>
|
||||
<string name="detail_settings_global_setting_suffix">נעשה שימוש בהגדרות גלובליות</string>
|
||||
</resources>
|
||||
<string name="main_action_mode_delete_dialog_message">להסיר את הרישום מהנושא(ים) הנבחר(ים) ולמחוק את כל ההתראות לצמיתות\?</string>
|
||||
<string name="main_item_status_reconnecting">מתחבר מחדש…</string>
|
||||
<string name="main_how_to_intro">לחצ\\י על + על מנת ליצור או להירשם אל מול נושא מסוים. לאחר מכן תקבל\\י התראות במכשירך כשתשלח\\י התראות דרך PUT או POST.</string>
|
||||
<string name="main_how_to_link">הוראות מפורטות זמינות ב-ntfy.sh, ובדוקומנטציה.</string>
|
||||
</resources>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_notifications_min_name">優先度 最低</string>
|
||||
<string name="channel_notifications_min_name">通知 (優先度最低)</string>
|
||||
<string name="detail_delete_dialog_cancel">キャンセル</string>
|
||||
<string name="detail_menu_notifications_enabled">通知オン</string>
|
||||
<string name="settings_notifications_auto_download_summary_never">添付ファイルは自動的にダウンロードしない</string>
|
||||
|
@ -12,13 +12,13 @@
|
|||
<string name="settings_notifications_auto_delete_one_week">1週間後</string>
|
||||
<string name="settings_notifications_auto_delete_one_month">1か月後</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">WebSockets</string>
|
||||
<string name="channel_notifications_high_name">優先度 高</string>
|
||||
<string name="channel_notifications_default_name">優先度 通常</string>
|
||||
<string name="channel_notifications_high_name">通知 (優先度高)</string>
|
||||
<string name="channel_notifications_default_name">通知 (優先度通常)</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">トピックを2件購読しています</string>
|
||||
<string name="add_dialog_login_new_user">新規ユーザー</string>
|
||||
<string name="channel_notifications_max_name">優先度 最高</string>
|
||||
<string name="channel_notifications_max_name">通知 (優先度最高)</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">即時配信トピックを2件購読しています</string>
|
||||
<string name="channel_notifications_low_name">優先度 低</string>
|
||||
<string name="channel_notifications_low_name">通知 (優先度低)</string>
|
||||
<string name="channel_subscriber_notification_title">通知の受信を待機しています</string>
|
||||
<string name="channel_subscriber_notification_instant_text">即時配信トピックを購読しています</string>
|
||||
<string name="channel_subscriber_service_name">購読サービス</string>
|
||||
|
@ -324,23 +324,4 @@
|
|||
<string name="add_dialog_base_urls_dropdown_clear">サービスURLをクリア</string>
|
||||
<string name="main_banner_websocket_text">WebSocketへの切り替えはサーバーへの接続方法として推奨され、バッテリー寿命を改善できる可能性がありますが、<a href="https://ntfy.sh/docs/config/#nginxapache2caddy">プロクシへの追加設定</a>が必要となります。設定から切り替えることができます。</string>
|
||||
<string name="main_banner_websocket_button_enable_now">今すぐ有効化</string>
|
||||
<string name="detail_settings_about_header">About</string>
|
||||
<string name="detail_settings_about_topic_url_title">トピックのURL</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">クリップボードにコピーしました</string>
|
||||
<string name="main_menu_donate_title">寄付する💸</string>
|
||||
<string name="detail_item_cannot_open_apk">アプリはインストールできなくなりました。代替手段としてブラウザからダウンロードしてください。詳細は issue #531 をご参照ください。</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">優先度最高は非表示になるまで通知継続</string>
|
||||
<string name="channel_notifications_group_default_name">デフォルト</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">優先度最高は通知継続</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">優先度最高は一回のみ通知</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">カスタム通知設定</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">通知設定を編集</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">デフォルト設定を使用(サウンドやおやすみモード時の動作等)</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">おやすみモード時の動作やサウンド等</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">この購読にカスタム設定を利用</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">通知を継続</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">一回のみ通知</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfyがUnifiedPushディストリビュータとして振る舞うようになります</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfyはUnifiedPushディストリビュータとして振る舞いません</string>
|
||||
<string name="settings_advanced_unifiedpush_title">UnifiedPushを有効化する</string>
|
||||
</resources>
|
|
@ -1,330 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="detail_how_to_link">자세한 설명은 ntfy.sh와 docs 페이지에서 찾으실 수 있습니다.</string>
|
||||
<string name="channel_notifications_high_name">알림 (우선순위 높음)</string>
|
||||
<string name="main_menu_notifications_disabled_forever">알림 음소거됨</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">즉시 전달 주제 3개 구독중</string>
|
||||
<string name="add_dialog_use_another_server">다른 서버 사용</string>
|
||||
<string name="main_menu_notifications_enabled">알림 켜짐</string>
|
||||
<string name="channel_notifications_default_name">알림 (우선순위 기본)</string>
|
||||
<string name="channel_notifications_max_name">알림 (우선순위 최상)</string>
|
||||
<string name="channel_subscriber_service_name">구독 서비스</string>
|
||||
<string name="channel_subscriber_notification_title">알림 수신중</string>
|
||||
<string name="channel_subscriber_notification_instant_text">즉시 전달 주제를 구독함</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">즉시 전달 주제 1개 구독중</string>
|
||||
<string name="channel_subscriber_notification_instant_text_six">즉시 전달 주제 6개 구독중</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">즉시 전달 주제 %1$d개 구독중</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">주제 구독중</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">주제 1개 구독 중</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">주제 2개 구독 중</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">주제 3개 구독 중</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">주제 %1$d개 구독 중</string>
|
||||
<string name="refresh_message_result">알림 %1$d개를 받았습니다</string>
|
||||
<string name="refresh_message_no_results">모든 알림이 최신입니다</string>
|
||||
<string name="refresh_message_error">%1$d개의 구독을 새로고침할 수 없었습니다
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="refresh_message_error_one">구독 새로고침 실패: %1$s</string>
|
||||
<string name="main_action_bar_title">구독한 주제</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">구독 해제</string>
|
||||
<string name="main_action_mode_delete_dialog_message">선택한 주제를 구독 해제하고 모든 알림을 영원히 삭제하시겠습니까\?</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">영구 삭제</string>
|
||||
<string name="main_action_mode_delete_dialog_cancel">취소</string>
|
||||
<string name="main_item_status_text_one">알림 %1$d개</string>
|
||||
<string name="main_item_status_text_not_one">알림 %1$d개</string>
|
||||
<string name="main_item_status_reconnecting">재연결중 …</string>
|
||||
<string name="main_no_subscriptions_text">아직 아무런 구독을 추가하지 않으신 것 같습니다.</string>
|
||||
<string name="main_how_to_link">자세한 설명은 ntfy.sh와 docs 페이지에서 찾으실 수 있습니다.</string>
|
||||
<string name="main_unified_push_toast">이 구독은 UnifiedPush를 통해 %1$s에서 관리됩니다</string>
|
||||
<string name="main_banner_battery_text">알림 문제를 최소화하기 위해서는 앱의 배터리 최적화를 비활성화해야 합니다.</string>
|
||||
<string name="main_banner_battery_button_remind_later">나중에 물어보기</string>
|
||||
<string name="main_banner_battery_button_dismiss">무시하기</string>
|
||||
<string name="main_banner_battery_button_fix_now">지금 수정하기</string>
|
||||
<string name="main_banner_websocket_button_remind_later">나중에 물어보기</string>
|
||||
<string name="main_banner_websocket_button_dismiss">무시하기</string>
|
||||
<string name="main_banner_websocket_button_enable_now">지금 활성화</string>
|
||||
<string name="add_dialog_title">주제 구독하기</string>
|
||||
<string name="add_dialog_description_below">주제는 비밀번호로 보호되지 않을 수 있으니 추측하기 어려운 이름을 사용하십시오. 구독한 뒤 PUT/POST 알림을 보낼 수 있습니다.</string>
|
||||
<string name="add_dialog_foreground_description">%1$s 이외 서버에서는 즉시 알림을 끌 수 없습니다.</string>
|
||||
<string name="add_dialog_button_cancel">취소</string>
|
||||
<string name="add_dialog_button_subscribe">구독하기</string>
|
||||
<string name="add_dialog_button_back">뒤로가기</string>
|
||||
<string name="add_dialog_button_login">로그인</string>
|
||||
<string name="add_dialog_error_connection_failed">연결 실패: %1$s</string>
|
||||
<string name="add_dialog_login_title">로그인 필요함</string>
|
||||
<string name="add_dialog_login_description">이 주제는 로그인이 필요합니다. 사용자 이름과 비밀번호를 입력해 주세요.</string>
|
||||
<string name="add_dialog_login_username_hint">사용자 이름</string>
|
||||
<string name="add_dialog_login_password_hint">비밀번호</string>
|
||||
<string name="add_dialog_login_error_not_authorized">로그인 실패. 사용자 %1$s은(는) 인증되지 않았습니다.</string>
|
||||
<string name="add_dialog_login_new_user">사용자 추가</string>
|
||||
<string name="detail_no_notifications_text">아직 이 주제 관련 알림을 받지 않았습니다.</string>
|
||||
<string name="detail_clear_dialog_permanently_delete">영구 삭제</string>
|
||||
<string name="detail_clear_dialog_cancel">취소</string>
|
||||
<string name="detail_delete_dialog_message">이 주제를 구독 해제하고 모든 알림을 삭제하시겠습니까\?</string>
|
||||
<string name="detail_test_message_error">메세지를 보낼 수 없습니다: %1$s</string>
|
||||
<string name="detail_test_message_error_unauthorized_anon">메세지를 보낼 수 없습니다: 익명 발송이 허용되지 않습니다.</string>
|
||||
<string name="detail_test_message_error_unauthorized_user">메세지를 보낼 수 없습니다: 사용자 \"%1$s\"은(는) 인증되지 않았습니다.</string>
|
||||
<string name="detail_test_message_error_too_large">메세지를 보낼 수 없습니다: 첨부 파일이 너무 큽니다.</string>
|
||||
<string name="detail_item_tags">태그: %1$s</string>
|
||||
<string name="detail_item_snack_deleted">알림 삭제됨</string>
|
||||
<string name="detail_item_menu_copy_url">URL 복사</string>
|
||||
<string name="detail_item_cannot_open">첨부 파일을 열 수 없습니다: %1$s</string>
|
||||
<string name="detail_item_cannot_open_not_found">첨부 파일을 열 수 없습니다: 파일이 삭제되었거나 파일을 열 수 있는 앱이 없습니다.</string>
|
||||
<string name="detail_menu_enable_instant">즉시 전달 켜기</string>
|
||||
<string name="detail_menu_disable_instant">즉시 전달 끄기</string>
|
||||
<string name="detail_menu_clear">모든 알림 초기화</string>
|
||||
<string name="share_menu_send">공유</string>
|
||||
<string name="share_content_text_hint">여기에 공유할 내용 추가</string>
|
||||
<string name="share_content_image_text">이미지가 공유됨</string>
|
||||
<string name="share_successful">메세지 발송됨</string>
|
||||
<string name="notification_dialog_title">알림 음소거</string>
|
||||
<string name="notification_dialog_cancel">취소</string>
|
||||
<string name="notification_popup_action_open">열기</string>
|
||||
<string name="notification_popup_action_browse">탐색</string>
|
||||
<string name="notification_popup_action_download">다운로드</string>
|
||||
<string name="notification_popup_action_cancel">취소</string>
|
||||
<string name="notification_popup_file">%1$s
|
||||
\n파일: %2$s</string>
|
||||
<string name="notification_popup_file_downloading">%1$s 다운로드중, %2$d%%
|
||||
\n%3$s</string>
|
||||
<string name="notification_popup_file_download_successful">%1$s
|
||||
\n파일: %2$s, 다운로드됨</string>
|
||||
<string name="notification_popup_file_download_failed">%1$s
|
||||
\n파일: %2$s, 다운로드 실패</string>
|
||||
<string name="notification_popup_user_action_failed">%1$s 실패: %2$s</string>
|
||||
<string name="settings_title">설정</string>
|
||||
<string name="settings_notifications_header">알림</string>
|
||||
<string name="settings_notifications_muted_until_title">알림 음소거</string>
|
||||
<string name="settings_notifications_muted_until_show_all">모든 알림 표시</string>
|
||||
<string name="settings_notifications_muted_until_forever">해제시까지 알림 음소거</string>
|
||||
<string name="settings_notifications_muted_until_x">%1$s까지 알림 음소거</string>
|
||||
<string name="settings_notifications_min_priority_title">최소 우선순위</string>
|
||||
<string name="settings_notifications_min_priority_summary_any">모든 알림 보기</string>
|
||||
<string name="settings_notifications_min_priority_summary_x_or_higher">우선순위가 %1$d (%2$s) 보다 높은 알림만 보기</string>
|
||||
<string name="settings_notifications_min_priority_summary_max">우선순위가 5 (최상) 인 알림만 보기</string>
|
||||
<string name="settings_notifications_min_priority_min">아무 우선순위</string>
|
||||
<string name="settings_notifications_min_priority_low">낮음 이상</string>
|
||||
<string name="settings_notifications_min_priority_default">기본 이상</string>
|
||||
<string name="settings_notifications_min_priority_high">높음 이상</string>
|
||||
<string name="settings_notifications_min_priority_max">최상</string>
|
||||
<string name="settings_notifications_priority_min">최하</string>
|
||||
<string name="settings_notifications_priority_low">낮음</string>
|
||||
<string name="settings_notifications_priority_default">기본</string>
|
||||
<string name="settings_notifications_priority_high">높음</string>
|
||||
<string name="settings_notifications_priority_max">최상</string>
|
||||
<string name="settings_notifications_channel_prefs_title">채널 설정</string>
|
||||
<string name="settings_notifications_channel_prefs_summary">방해 금지 모드 무시하기, 소리, 기타 설정.</string>
|
||||
<string name="settings_notifications_auto_download_summary_always">모든 첨부 파일을 자동 다운로드</string>
|
||||
<string name="settings_notifications_auto_download_title">첨부 파일 다운로드</string>
|
||||
<string name="settings_notifications_auto_download_summary_never">첨부 파일을 자동으로 다운로드하지 않음</string>
|
||||
<string name="settings_notifications_auto_download_summary_smaller_than_x">첨부 파일 크기가 %1$s보다 작다면 자동 다운로드</string>
|
||||
<string name="settings_notifications_auto_download_never">어떤 파일도 자동으로 다운로드하지 않음</string>
|
||||
<string name="settings_notifications_auto_download_always">모든 파일을 자동으로 다운로드</string>
|
||||
<string name="settings_notifications_auto_download_100k">100kB보다 작다면</string>
|
||||
<string name="settings_notifications_auto_download_500k">500kB보다 작다면</string>
|
||||
<string name="settings_notifications_auto_download_1m">1MB보다 작다면</string>
|
||||
<string name="settings_notifications_auto_download_5m">5MB보다 작다면</string>
|
||||
<string name="settings_notifications_auto_download_10m">10MB보다 작다면</string>
|
||||
<string name="settings_notifications_auto_delete_title">알림 삭제</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_day">알림을 1일 뒤 자동으로 삭제함</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_days">알림을 3일 뒤 자동으로 삭제함</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_week">알림을 1주 뒤 자동으로 삭제함</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_months">알림을 3달 뒤 자동으로 삭제함</string>
|
||||
<string name="settings_notifications_auto_delete_never">자동 삭제 안함</string>
|
||||
<string name="settings_notifications_auto_delete_one_day">1일 뒤</string>
|
||||
<string name="settings_notifications_auto_delete_three_days">3일 뒤</string>
|
||||
<string name="settings_notifications_auto_delete_one_week">1주 뒤</string>
|
||||
<string name="settings_notifications_auto_delete_one_month">1달 뒤</string>
|
||||
<string name="settings_notifications_auto_delete_three_months">3달 뒤</string>
|
||||
<string name="settings_general_header">일반</string>
|
||||
<string name="settings_general_default_base_url_title">기본 서버</string>
|
||||
<string name="settings_general_default_base_url_default_summary">%1$s (기본)</string>
|
||||
<string name="settings_general_dark_mode_title">다크 모드</string>
|
||||
<string name="settings_general_dark_mode_summary_system">시스템 설정 사용중</string>
|
||||
<string name="settings_general_dark_mode_summary_light">라이트 모드 사용중</string>
|
||||
<string name="settings_general_dark_mode_summary_dark">다크 모드 사용중. 혹시 뱀파이어신가요\?</string>
|
||||
<string name="settings_general_dark_mode_entry_system">시스템 설정 사용</string>
|
||||
<string name="settings_general_dark_mode_entry_light">라이트 모드</string>
|
||||
<string name="settings_general_dark_mode_entry_dark">다크 모드</string>
|
||||
<string name="settings_backup_restore_header">백업 및 복원</string>
|
||||
<string name="settings_backup_restore_backup_title">파일에 백업</string>
|
||||
<string name="settings_backup_restore_backup_summary">설정, 알림, 사용자 내보내기</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything">모두</string>
|
||||
<string name="settings_backup_restore_restore_summary">설정, 알림, 사용자 가져오기</string>
|
||||
<string name="settings_backup_restore_restore_successful">복원 성공</string>
|
||||
<string name="settings_backup_restore_restore_failed">복원 실패: %1$s</string>
|
||||
<string name="settings_advanced_header">고급 설정</string>
|
||||
<string name="settings_advanced_broadcast_summary_disabled">앱이 들어오는 알림을 브로드캐스트할 수 없습니다</string>
|
||||
<string name="settings_advanced_record_logs_title">로그 기록</string>
|
||||
<string name="settings_advanced_export_logs_summary">로그를 클립보드에 복사하거나 nopaste.net(ntfy 소유주가 운영하는)에 업로드합니다. 서버 주소나 주제는 가려지지만 알림은 가려지지 않습니다.</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_original">클립보드에 복사</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_scrubbed">클립보드에 복사 (검열본)</string>
|
||||
<string name="settings_advanced_export_logs_copied_url">로그가 업로드되고 링크를 복사했습니다</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_empty">어떠한 주제/서버 이름도 검열되지 않았습니다. 구독이 없던 것은 아닌가요\?</string>
|
||||
<string name="settings_advanced_clear_logs_deleted_toast">로그 삭제됨</string>
|
||||
<string name="settings_advanced_connection_protocol_title">연결 프로토콜</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_jsonhttp">JSON stream over HTTP</string>
|
||||
<string name="detail_settings_appearance_header">표시 설정</string>
|
||||
<string name="channel_notifications_low_name">알림 (우선순위 낮음)</string>
|
||||
<string name="user_dialog_button_save">저장</string>
|
||||
<string name="channel_notifications_min_name">알림 (우선순위 최하)</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">즉시 전달 주제 2개 구독중</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">즉시 전달 주제 5개 구독중</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">즉시 전달 주제 4개 구독중</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">주제 4개 구독 중</string>
|
||||
<string name="main_menu_report_bug_title">버그 제보</string>
|
||||
<string name="add_dialog_topic_name_hint">주제 이름, 예를 들어 phils_alerts</string>
|
||||
<string name="add_dialog_use_another_server_description">알림을 받을 서버의 주소를 아래에 입력해주세요.</string>
|
||||
<string name="add_dialog_instant_delivery">대기 상태에서 즉시 알림 받기</string>
|
||||
<string name="detail_clear_dialog_message">이 주제의 모든 알림을 삭제하시겠습니까\?</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_five">주제 5개 구독 중</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_six">주제 6개 구독 중</string>
|
||||
<string name="main_menu_notifications_disabled_until">알림 %1$s까지 음소거됨</string>
|
||||
<string name="main_menu_settings_title">설정</string>
|
||||
<string name="main_menu_docs_title">문서 보기</string>
|
||||
<string name="main_menu_rate_title">앱 평가하기 ⭐</string>
|
||||
<string name="main_how_to_intro">+ 버튼을 눌러 주제를 구독할 수 있습니다. 이후 장치에서 PUT이나 POST를 통해 보내진 알림을 받을 수 있습니다.</string>
|
||||
<string name="main_item_status_unified_push">%1$s (UnifiedPush)</string>
|
||||
<string name="main_item_date_yesterday">어제</string>
|
||||
<string name="main_add_button_description">구독 추가</string>
|
||||
<string name="main_banner_websocket_text">웹소켓으로 연결하는 방법이 권장하는 방법이며 배터리 수명을 증가시킬수 있지만, 서버에 따라 <a href="https://ntfy.sh/docs/config/#nginxapache2caddy">추가 설정</a>이 필요할 수 있습니다. 이것은 설정에서 변경 가능합니다.</string>
|
||||
<string name="add_dialog_instant_delivery_description">장치가 활성화되지 않은 상태에서도 알림을 즉시 받을수 있도록 합니다.</string>
|
||||
<string name="detail_delete_dialog_permanently_delete">영구 삭제</string>
|
||||
<string name="detail_delete_dialog_cancel">취소</string>
|
||||
<string name="detail_instant_delivery_enabled">즉시 전달 켜짐</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">서비스 URL 초기화</string>
|
||||
<string name="detail_how_to_intro">알림을 받으려면 아래 주소로 PUT이나 POST 요청을 보내세요.</string>
|
||||
<string name="detail_deep_link_subscribed_toast_message">주제 %1$s 를 구독했습니다</string>
|
||||
<string name="detail_item_menu_cancel">다운로드 취소</string>
|
||||
<string name="detail_item_menu_copy_contents_copied">알림이 클립보드로 복사됨</string>
|
||||
<string name="detail_item_cannot_save">첨부 파일을 저장할 수 없습니다: %1$s</string>
|
||||
<string name="detail_item_cannot_delete">첨부 파일을 삭제할 수 없습니다: %1$s</string>
|
||||
<string name="share_content_title">메세지 미리보기</string>
|
||||
<string name="notification_dialog_muted_forever_toast_message">알림 음소거됨</string>
|
||||
<string name="notification_dialog_show_all">모든 알림 보기</string>
|
||||
<string name="detail_test_message">이것은 ntfy 안드로이드 앱에서 보낸 시험용 알림입니다. 우선순위는 %1$d입니다. 다시 알림을 보낸다면 다르게 보일 수 있습니다.</string>
|
||||
<string name="detail_item_snack_undo">실행 취소</string>
|
||||
<string name="detail_item_menu_delete">파일 삭제</string>
|
||||
<string name="detail_item_menu_download">파일 다운로드</string>
|
||||
<string name="detail_item_cannot_download">첨부 파일을 열거나 다운로드할 수 없습니다. 링크가 만료되었으며 로컬 사본을 찾을 수 없습니다.</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_one">주제 %1$s에서 사용됨</string>
|
||||
<string name="settings_about_version_copied_to_clipboard_message">클립보드에 복사됨</string>
|
||||
<string name="detail_settings_global_setting_title">전역 설정 사용하기</string>
|
||||
<string name="detail_copied_to_clipboard_message">클립보드에 복사됨</string>
|
||||
<string name="detail_item_menu_open">파일 열기</string>
|
||||
<string name="detail_item_menu_copy_url_copied">URL이 클립보드에 복사됨</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">서비스 URL 선택</string>
|
||||
<string name="detail_how_to_example">예제 (curl 사용):<br/><tt>$ curl -d \\\"Hi\\\" %1$s</tt></string>
|
||||
<string name="share_content_file_error">파일 정보를 읽을 수 없습니다: %1$s</string>
|
||||
<string name="detail_test_title">테스트: 원한다면 제목을 설정할 수 있습니다.</string>
|
||||
<string name="detail_instant_delivery_disabled">즉시 전달 꺼짐</string>
|
||||
<string name="detail_item_menu_save_file">파일 저장</string>
|
||||
<string name="detail_item_download_failed">첨부 파일을 다운로드할 수 없습니다: %1$s</string>
|
||||
<string name="detail_item_download_info_not_downloaded">다운로드되지 않음</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expired">다운로드되지 않음, 링크 만료됨</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expires_x">다운로드되지 않음, %1$s에 만료됨</string>
|
||||
<string name="detail_item_download_info_deleted">삭제됨</string>
|
||||
<string name="detail_item_download_info_download_failed">다운로드 실패</string>
|
||||
<string name="detail_menu_notifications_enabled">알림 켜짐</string>
|
||||
<string name="detail_menu_test">시험용 알림 발송</string>
|
||||
<string name="detail_menu_settings">구독 설정</string>
|
||||
<string name="detail_item_menu_copy_contents">알림 복사</string>
|
||||
<string name="detail_item_saved_successfully">\"Downloads\" 폴더에 \"%1$s\"로 저장됨</string>
|
||||
<string name="detail_item_cannot_open_url">URL을 열 수 없습니다: %1$s</string>
|
||||
<string name="detail_item_download_info_downloading_x_percent">%1$d%% 다운로드됨</string>
|
||||
<string name="detail_action_mode_menu_copy">복사</string>
|
||||
<string name="detail_action_mode_menu_delete">삭제</string>
|
||||
<string name="detail_action_mode_delete_dialog_permanently_delete">영구 삭제</string>
|
||||
<string name="share_topic_title">공유하기</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_month">알림을 1달 뒤 자동으로 삭제함</string>
|
||||
<string name="settings_general_users_summary">보호된 주제를 위한 사용자 추가/삭제</string>
|
||||
<string name="detail_item_download_info_download_failed_expired">다운로드 실패, 링크 만료됨</string>
|
||||
<string name="detail_item_download_info_deleted_expired">삭제됨, 링크 만료됨</string>
|
||||
<string name="detail_item_download_info_deleted_expires_x">삭제됨, 링크 %1$s에 만료됨</string>
|
||||
<string name="detail_item_download_info_download_failed_expires_x">다운로드 실패, 링크 %1$s에 만료됨</string>
|
||||
<string name="detail_menu_notifications_disabled_forever">알림 음소거됨</string>
|
||||
<string name="detail_menu_notifications_disabled_until">%1$s까지 알림 음소거됨</string>
|
||||
<string name="detail_menu_copy_url">주제 주소 복사</string>
|
||||
<string name="detail_menu_unsubscribe">구독 해제</string>
|
||||
<string name="detail_action_mode_delete_dialog_message">선택한 알림을 영원히 삭제하시겠습니까\?</string>
|
||||
<string name="detail_action_mode_delete_dialog_cancel">취소</string>
|
||||
<string name="detail_settings_title">구독 설정</string>
|
||||
<string name="share_title">공유</string>
|
||||
<string name="share_content_image_error">이미지를 읽을 수 없습니다: %1$s</string>
|
||||
<string name="share_content_file_text">파일이 공유됨</string>
|
||||
<string name="share_suggested_topics">주제 추천</string>
|
||||
<string name="notification_dialog_1h">1시간 후</string>
|
||||
<string name="notification_dialog_2h">2시간 후</string>
|
||||
<string name="notification_dialog_8h">8시간 후</string>
|
||||
<string name="notification_dialog_forever">해제시</string>
|
||||
<string name="notification_dialog_save">저장</string>
|
||||
<string name="notification_dialog_enabled_toast_message">알림 음소거 해제됨</string>
|
||||
<string name="notification_dialog_tomorrow">내일</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_many">주제 %1$s에서 사용됨</string>
|
||||
<string name="settings_backup_restore_backup_entry_settings_only">설정만</string>
|
||||
<string name="settings_advanced_broadcast_summary_enabled">앱이 들어오는 알림을 브로드캐스트할 수 있습니다</string>
|
||||
<string name="settings_advanced_export_logs_title">로그 복사/업로드</string>
|
||||
<string name="notification_dialog_muted_until_toast_message">알림 %1$s까지 음소거됨</string>
|
||||
<string name="notification_dialog_30min">30분 후</string>
|
||||
<string name="settings_notifications_auto_download_50m">50MB보다 작다면</string>
|
||||
<string name="settings_notifications_auto_delete_summary_never">알림을 자동으로 삭제하지 않음</string>
|
||||
<string name="settings_general_users_prefs_user_not_used">어떤 주제에서도 사용되지 않음</string>
|
||||
<string name="settings_general_users_prefs_user_add_title">새 사용자 추가</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything_no_users">사용자 제외 모두</string>
|
||||
<string name="settings_general_default_base_url_message">새 주제를 구독하거나 공유할 때 사용할 서버의 루트 URL을 입력하십시오.</string>
|
||||
<string name="settings_general_users_title">사용자 관리</string>
|
||||
<string name="settings_general_users_prefs_user_add">사용자 추가</string>
|
||||
<string name="settings_general_users_prefs_user_add_summary">새 서버를 위한 사용자 추가</string>
|
||||
<string name="settings_general_users_prefs_title">사용자</string>
|
||||
<string name="settings_backup_restore_backup_successful">백업 생성됨</string>
|
||||
<string name="settings_advanced_broadcast_title">메세지 브로드캐스트</string>
|
||||
<string name="settings_advanced_record_logs_summary_enabled">장치에 로그(최대 1000줄) 기록 …</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">나중에 문제 보고를 위해 로그를 기록합니다.</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_scrubbed">업로드 후 링크 복사 (검열본)</string>
|
||||
<string name="settings_backup_restore_backup_failed">백업 실패: %1$s</string>
|
||||
<string name="settings_backup_restore_restore_title">파일에서 복원</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_original">업로드 후 링크 복사</string>
|
||||
<string name="settings_advanced_export_logs_copied_logs">로그가 클립보드에 복사됨</string>
|
||||
<string name="settings_advanced_export_logs_uploading">로그 업로드중 …</string>
|
||||
<string name="settings_advanced_export_logs_error_uploading">로그를 업로드할 수 없음: %1$s</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_text">여기 적힌 주제/서버 이름은 과일 이름으로 변경되었으므로 로그를 안전하게 공유할 수 있습니다:
|
||||
\n
|
||||
\n%1$s
|
||||
\n
|
||||
\n비밀번호도 가려졌지만 이곳에 표시되지 않았습니다.</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_button_ok">확인</string>
|
||||
<string name="settings_advanced_clear_logs_title">로그 초기화</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">JSON stream over HTTP로 연결합니다. 이 방식은 안정적이지만 배터리를 더 많이 사용합니다.</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">웹소켓</string>
|
||||
<string name="settings_about_header">정보</string>
|
||||
<string name="detail_settings_notifications_instant_title">즉시 전달</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">웹소켓을 사용해 서버에 연결합니다. 권장되는 방식이지만 서버 프록시에 추가 설정이 필요할 수 있습니다.</string>
|
||||
<string name="settings_advanced_clear_logs_summary">기존 로그를 모두 지우고 새로 시작</string>
|
||||
<string name="settings_about_version_title">버전</string>
|
||||
<string name="settings_about_version_format">ntfy %1$s (%2$s)</string>
|
||||
<string name="detail_settings_notifications_instant_summary_on">알림이 즉시 전달됩니다. 서비스가 항시 실행되어야 하며 배터리 소모가 많습니다.</string>
|
||||
<string name="detail_settings_notifications_instant_summary_off">알림이 Firebase를 통해 전달됩니다. 약간의 지연이 발생할 수 있으나 배터리 소모가 적습니다.</string>
|
||||
<string name="detail_settings_appearance_icon_set_title">구독 아이콘</string>
|
||||
<string name="detail_settings_appearance_icon_remove_title">구독 아이콘 (터치해서 제거)</string>
|
||||
<string name="detail_settings_appearance_icon_remove_summary">이 주제의 알림에 표시될 아이콘</string>
|
||||
<string name="detail_settings_appearance_display_name_message">이 구독을 표시할 이름을 지정합니다. 빈 값을 지정하면 기본 이름(%1$s)이 사용됩니다.</string>
|
||||
<string name="detail_settings_appearance_display_name_default_summary">%1$s (기본)</string>
|
||||
<string name="detail_settings_about_header">정보</string>
|
||||
<string name="detail_settings_appearance_icon_set_summary">알림에 표시될 아이콘을 지정합니다</string>
|
||||
<string name="detail_settings_appearance_icon_error_saving">아이콘을 저장할 수 없습니다: %1$s</string>
|
||||
<string name="detail_settings_global_setting_suffix">전역 설정 사용중</string>
|
||||
<string name="user_dialog_description_add">여기에서 사용자를 추가할 수 있습니다. 지정한 서버의 모든 주제는 이 로그인 정보를 사용합니다.</string>
|
||||
<string name="user_dialog_username_hint">사용자 이름</string>
|
||||
<string name="user_dialog_button_cancel">취소</string>
|
||||
<string name="detail_settings_appearance_display_name_title">표시 이름</string>
|
||||
<string name="detail_settings_about_topic_url_title">주제 URL</string>
|
||||
<string name="user_dialog_title_edit">사용자 편집</string>
|
||||
<string name="user_dialog_base_url_hint">서비스 URL</string>
|
||||
<string name="user_dialog_password_hint_edit">비밀번호 (변경시에만 입력)</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">클립보드에 복사됨</string>
|
||||
<string name="user_dialog_title_add">사용자 추가</string>
|
||||
<string name="user_dialog_description_edit">선택한 사용자의 아이디나 비밀번호를 변경하거나 삭제할 수 있습니다.</string>
|
||||
<string name="user_dialog_password_hint_add">비밀번호</string>
|
||||
<string name="user_dialog_button_add">사용자 추가</string>
|
||||
<string name="user_dialog_button_delete">사용자 삭제</string>
|
||||
</resources>
|
|
@ -1,32 +1,32 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="add_dialog_login_new_user">Ny bruker</string>
|
||||
<string name="channel_notifications_low_name">Lav prioritet</string>
|
||||
<string name="channel_notifications_default_name">Standard prioritet</string>
|
||||
<string name="channel_notifications_low_name">Merknader (lav prioritet)</string>
|
||||
<string name="channel_notifications_default_name">Merknader (forvalgt prioritet)</string>
|
||||
<string name="channel_subscriber_service_name">Abonnementstjeneste</string>
|
||||
<string name="channel_subscriber_notification_title">Lytter etter innkommende varsler</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Abonnert på emner med umiddelbar levering</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Abonnert på ett emne med umiddelbar levering</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">Abonnert på fire emner med umiddelbar levering</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">Abonnert på %1$d emner med umiddelbar levering</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">Abonnert på ett emne</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">Abonnert på to emner</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">Abonnert på emner</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">Abonnert på tre emner</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">Abonnert på fire emner</string>
|
||||
<string name="refresh_message_result">%1$d varsling(er) mottatt</string>
|
||||
<string name="channel_notifications_max_name">Maks prioritet</string>
|
||||
<string name="refresh_message_error_one">Kunne ikke oppdatere abonnement: %1$s</string>
|
||||
<string name="main_menu_notifications_enabled">Varsler påslått</string>
|
||||
<string name="main_menu_notifications_disabled_forever">Varsler dempet</string>
|
||||
<string name="channel_subscriber_notification_title">Lytter etter innkommende merknader</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Du abonnerer på emner med umiddelbar levering</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Du abonnerer på ett emne med umiddelbar levering</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">Du abonnerer på fire emner med umiddelbar levering</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">Du abonnerer på %1$d emner med umiddelbar levering</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">Du abonnerer på ett emne</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">Du abonnerer på to emner</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">Du abonnerer på emner</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">Du abonnerer på tre emner</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">Du abonnerer på fire emner</string>
|
||||
<string name="refresh_message_result">%1$d merknad(er) mottatt</string>
|
||||
<string name="channel_notifications_max_name">Merknader (maks.-prioritet)</string>
|
||||
<string name="refresh_message_error_one">Kunne ikke gjenoppfriske abonnementet: %1$s</string>
|
||||
<string name="main_menu_notifications_enabled">Merknader påslått</string>
|
||||
<string name="main_menu_notifications_disabled_forever">Merknader avslått</string>
|
||||
<string name="main_menu_docs_title">Les dokumentasjonen</string>
|
||||
<string name="main_menu_rate_title">Vurder appen ⭐</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">Avslutt abonnement</string>
|
||||
<string name="main_menu_rate_title">Vurder programmet ⭐</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">Opphev abonnement</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">Slett for godt</string>
|
||||
<string name="main_action_mode_delete_dialog_cancel">Avbryt</string>
|
||||
<string name="main_item_status_text_one">%1$d varsling</string>
|
||||
<string name="main_item_status_text_not_one">%1$d varsler</string>
|
||||
<string name="main_item_status_reconnecting">kobler til på nytt …</string>
|
||||
<string name="main_item_status_text_one">%1$d merknad</string>
|
||||
<string name="main_item_status_text_not_one">%1$d merknader</string>
|
||||
<string name="main_item_status_reconnecting">kobler til igjen …</string>
|
||||
<string name="main_item_date_yesterday">i går</string>
|
||||
<string name="main_add_button_description">Legg til abonnement</string>
|
||||
<string name="main_banner_websocket_button_remind_later">Spør senere</string>
|
||||
|
@ -36,41 +36,41 @@
|
|||
<string name="add_dialog_instant_delivery">Umiddelbar varsling i slumremodus</string>
|
||||
<string name="main_banner_battery_button_remind_later">Spør senere</string>
|
||||
<string name="main_banner_battery_button_fix_now">Fiks nå</string>
|
||||
<string name="main_action_mode_delete_dialog_message">Avslutt abonnementet på de valgte emnene og slett alle varsler permanent\?</string>
|
||||
<string name="main_no_subscriptions_text">Det ser ut til at du ikke har noen abonnementer ennå.</string>
|
||||
<string name="main_banner_battery_text">Batterioptimalisering bør være av for å unngå problemer med varsellevering.</string>
|
||||
<string name="main_action_mode_delete_dialog_message">Opphev abonnement på valgte emne(r) og slett alle merknader du har mottatt for godt\?</string>
|
||||
<string name="main_no_subscriptions_text">Abonner på noe først</string>
|
||||
<string name="main_banner_battery_text">Batterioptimalisering bør skrus av for å unngå problemer med merknadsleveringen.</string>
|
||||
<string name="main_banner_battery_button_dismiss">Avfei</string>
|
||||
<string name="main_banner_websocket_button_dismiss">Avfei</string>
|
||||
<string name="add_dialog_description_below">Emner er kanskje ikke passordbeskyttet, så velg et navn som er vanskelig å gjette. Når du har abonnert, kan du sende PUT/POST-varsler.</string>
|
||||
<string name="add_dialog_use_another_server_description">Skriv inn tjeneste-URLer nedenfor for å abonnere på emner fra andre servere.</string>
|
||||
<string name="add_dialog_description_below">Det kan hende emner ikke er passordsbeskyttet, så velg et navn som ikke er enkelt å gjette. Når du har abonnert kan du utføre PUT/POST av merknader.</string>
|
||||
<string name="add_dialog_use_another_server_description">Du kan abonnere på emner fra en annen tjener. Skriv inn tjener-nettadressen nedenfor.</string>
|
||||
<string name="main_item_status_unified_push">%1$s (UnifiedPush)</string>
|
||||
<string name="add_dialog_button_login">Logg inn</string>
|
||||
<string name="add_dialog_error_connection_failed">Tilkobling mislyktes: %1$s</string>
|
||||
<string name="add_dialog_login_username_hint">Brukernavn</string>
|
||||
<string name="add_dialog_login_password_hint">Passord</string>
|
||||
<string name="add_dialog_login_error_not_authorized">Innlogging mislyktes. Bruker %1$s har ikke tilgang.</string>
|
||||
<string name="add_dialog_login_error_not_authorized">Innlogging mislyktes. Brukeren %1$s er ikke identitetsbekreftet.</string>
|
||||
<string name="detail_no_notifications_text">Du har ikke mottatt noen merknader om dette emnet enda.</string>
|
||||
<string name="detail_clear_dialog_message">Slett alle varsler i dette emnet\?</string>
|
||||
<string name="detail_clear_dialog_message">Slett alle andre merknader i emnet\?</string>
|
||||
<string name="detail_delete_dialog_permanently_delete">Slett for godt</string>
|
||||
<string name="detail_delete_dialog_cancel">Avbryt</string>
|
||||
<string name="detail_test_title">Test: Du kan sette en tittel hvis du vil.</string>
|
||||
<string name="detail_test_title">Test: Du kan sette en tittel hvis du vil</string>
|
||||
<string name="detail_test_message_error">Kan ikke sende melding: %1$s</string>
|
||||
<string name="detail_how_to_link">Detaljerte instruksjoner er tilgjengelig på ntfy.sh, og i dokumentasjonen.</string>
|
||||
<string name="detail_how_to_link">Mer detaljert instruks er å finne på ntfy.sh-nettsiden og i dokumentasjonen.</string>
|
||||
<string name="detail_delete_dialog_message">Opphev abonnement på dette emnet og slett alle merknader du har mottatt\?</string>
|
||||
<string name="detail_test_message_error_unauthorized_anon">Kan ikke sende melding: Anonym publisering er ikke tillatt.</string>
|
||||
<string name="detail_test_message_error_unauthorized_anon">Kan ikke sende melding: Anonym publisering tillates ikke</string>
|
||||
<string name="add_dialog_instant_delivery_description">Forsikrer at meldinger blir levert umiddelbart, selv når enheten er inaktiv.</string>
|
||||
<string name="add_dialog_login_description">Dette emnet krever at du logger inn. Skriv inn et brukernavn og passord.</string>
|
||||
<string name="detail_how_to_intro">For å sende merknader til dette emnet kan du utføre PUT eller POST til emne-nettadressen.</string>
|
||||
<string name="detail_how_to_example">Eksempel (ved bruk av curl):<br/><tt>$ curl -d \"Hei\" %1$s</tt></string>
|
||||
<string name="detail_how_to_example">Eksempel (ved bruk av Curl):<br/><tt>$ curl -d «Hei» %1$s</tt></string>
|
||||
<string name="detail_item_snack_deleted">Merknad slettet</string>
|
||||
<string name="detail_item_menu_cancel">Avbryt nedlasting</string>
|
||||
<string name="detail_item_menu_save_file">Lagre fil</string>
|
||||
<string name="detail_item_menu_copy_url">Kopier nettadresse</string>
|
||||
<string name="detail_item_menu_copy_url_copied">URL kopiert til utklippstavlen</string>
|
||||
<string name="detail_item_menu_copy_url_copied">Nettadresse kopiert til utklippstavlen</string>
|
||||
<string name="detail_item_menu_copy_contents">Kopier merknad</string>
|
||||
<string name="detail_item_cannot_download">Kan ikke åpne eller laste ned vedlegg. Lenken utløp og ingen lokal fil ble funnet.</string>
|
||||
<string name="detail_item_cannot_open">Kan ikke åpne vedlegg: %1$s</string>
|
||||
<string name="detail_item_cannot_open_not_found">Kan ikke åpne vedlegg: Filen kan ha blitt slettet, eller ingen installerte apper kan åpne filen.</string>
|
||||
<string name="detail_item_cannot_open_not_found">Kan ikke åpne vedlegg: Filen kan ha blitt slettet, eller så mangler det et program til å åpne filen.</string>
|
||||
<string name="detail_item_cannot_open_url">Kan ikke åpne klikkbar nettadresse: %1$s</string>
|
||||
<string name="detail_item_cannot_delete">Kan ikke slette vedlegg: %1$s</string>
|
||||
<string name="detail_item_download_info_not_downloaded">ikke nedlastet</string>
|
||||
|
@ -81,8 +81,8 @@
|
|||
<string name="detail_item_download_info_download_failed">nedlasting mislyktes</string>
|
||||
<string name="detail_item_download_info_download_failed_expired">nedlasting mislyktes, utløpt lenke</string>
|
||||
<string name="detail_item_download_info_download_failed_expires_x">nedlasting mislyktes, lenke utløper %1$s</string>
|
||||
<string name="detail_menu_notifications_enabled">Varsler på</string>
|
||||
<string name="detail_menu_notifications_disabled_forever">Varsler dempet</string>
|
||||
<string name="detail_menu_notifications_enabled">Merknader påslått</string>
|
||||
<string name="detail_menu_notifications_disabled_forever">Merknader avslått</string>
|
||||
<string name="detail_menu_enable_instant">Skru på umiddelbar levering</string>
|
||||
<string name="detail_menu_disable_instant">Skru av umiddelbar levering</string>
|
||||
<string name="detail_menu_test">Send testmerknad</string>
|
||||
|
@ -91,17 +91,17 @@
|
|||
<string name="detail_menu_settings">Abonnementsinnstillinger</string>
|
||||
<string name="detail_menu_unsubscribe">Opphev abonnement</string>
|
||||
<string name="detail_instant_delivery_disabled">Umiddelbar levering avskrudd</string>
|
||||
<string name="detail_item_menu_copy_contents_copied">Varsel kopiert til utklippstavlen</string>
|
||||
<string name="detail_test_message_error_unauthorized_user">Kan ikke sende melding: Brukeren \"%1$s\" er ikke autorisert.</string>
|
||||
<string name="detail_test_message_error_too_large">Kan ikke sende melding: Vedlegget er for stort.</string>
|
||||
<string name="detail_item_menu_copy_contents_copied">Merknad kopiert til utklippstavlen</string>
|
||||
<string name="detail_test_message_error_unauthorized_user">Kan ikke sende melding: Brukeren «%1$s» er ikke identitetsbekreftet</string>
|
||||
<string name="detail_test_message_error_too_large">Kan ikke sende melding: Vedlegget er for stort</string>
|
||||
<string name="detail_copied_to_clipboard_message">Kopiert til utklippstavlen</string>
|
||||
<string name="detail_instant_delivery_enabled">Umiddelbar levering påskrudd</string>
|
||||
<string name="detail_action_mode_delete_dialog_permanently_delete">Slett permanent</string>
|
||||
<string name="detail_action_mode_delete_dialog_permanently_delete">Slett for godt</string>
|
||||
<string name="detail_action_mode_delete_dialog_cancel">Avbryt</string>
|
||||
<string name="share_title">Del</string>
|
||||
<string name="share_menu_send">Del</string>
|
||||
<string name="share_content_title">Meldingsforhåndsvisning</string>
|
||||
<string name="share_content_text_hint">Legg til innhold for å dele her</string>
|
||||
<string name="share_content_text_hint">Legg innhold du ønsker å dele her</string>
|
||||
<string name="share_content_image_text">Et bilde ble delt med deg</string>
|
||||
<string name="share_content_file_text">En fil ble delt med deg</string>
|
||||
<string name="share_topic_title">Del til</string>
|
||||
|
@ -112,33 +112,33 @@
|
|||
<string name="notification_dialog_2h">2 timer</string>
|
||||
<string name="notification_dialog_8h">8 timer</string>
|
||||
<string name="notification_dialog_tomorrow">Til i morgen</string>
|
||||
<string name="notification_dialog_forever">Inntil gjenopptatt</string>
|
||||
<string name="notification_dialog_forever">Til de blir slått på igjen</string>
|
||||
<string name="notification_popup_action_open">Åpne</string>
|
||||
<string name="settings_title">Innstillinger</string>
|
||||
<string name="settings_notifications_header">Merknader</string>
|
||||
<string name="settings_notifications_muted_until_title">Skru av varsler</string>
|
||||
<string name="settings_notifications_muted_until_show_all">Viser alle varsler</string>
|
||||
<string name="settings_notifications_muted_until_forever">Varsler er dempet til de gjenopptas</string>
|
||||
<string name="settings_notifications_muted_until_x">Varsler avslått til %1$s</string>
|
||||
<string name="settings_notifications_muted_until_title">Sett merknader på pause</string>
|
||||
<string name="settings_notifications_muted_until_show_all">Alle merknader vil bli vist</string>
|
||||
<string name="settings_notifications_muted_until_forever">Merknader forstummet til de blir skrudd på igjen</string>
|
||||
<string name="settings_notifications_muted_until_x">Merknader forstummet til %1$s</string>
|
||||
<string name="settings_notifications_min_priority_min">Alle prioriteter</string>
|
||||
<string name="settings_notifications_min_priority_summary_max">Vis varsler hvis prioritet er 5 (maks.)</string>
|
||||
<string name="settings_notifications_min_priority_default">Standardprioritet og over</string>
|
||||
<string name="settings_notifications_min_priority_summary_max">Vis merknader hvis prioritet er 5 (maks.)</string>
|
||||
<string name="settings_notifications_min_priority_default">Forvalgt prioritet</string>
|
||||
<string name="settings_notifications_min_priority_low">Lav prioritet og høyere</string>
|
||||
<string name="settings_notifications_min_priority_high">Høy prioritet og over</string>
|
||||
<string name="settings_notifications_min_priority_high">Høy prioritet og høyere</string>
|
||||
<string name="settings_notifications_min_priority_max">Kun maks.-prioritet</string>
|
||||
<string name="settings_notifications_auto_download_title">Last ned vedlegg</string>
|
||||
<string name="settings_notifications_auto_download_summary_always">Last ned alle vedlegg automatisk</string>
|
||||
<string name="settings_notifications_auto_download_summary_never">Last aldri ned vedlegg automatisk</string>
|
||||
<string name="settings_notifications_auto_download_summary_never">Aldri last ned vedlegg automatisk</string>
|
||||
<string name="settings_notifications_auto_download_summary_smaller_than_x">Last ned vedlegg opptil %1$s automatisk</string>
|
||||
<string name="settings_notifications_auto_download_never">Aldri last ned noe automatisk</string>
|
||||
<string name="settings_notifications_auto_download_never">Aldri last ned automatisk</string>
|
||||
<string name="settings_notifications_auto_download_always">Alltid last ned automatisk</string>
|
||||
<string name="settings_notifications_auto_download_100k">Hvis under 100 kB</string>
|
||||
<string name="settings_notifications_auto_download_1m">Hvis under 1 MB</string>
|
||||
<string name="settings_notifications_auto_download_5m">Hvis under 5 MB</string>
|
||||
<string name="settings_notifications_auto_download_10m">Hvis under 10 MB</string>
|
||||
<string name="settings_notifications_min_priority_summary_any">Viser alle varsler</string>
|
||||
<string name="settings_notifications_min_priority_summary_x_or_higher">Vis varsler hvis prioritet er %1$d (%2$s) eller høyere</string>
|
||||
<string name="settings_notifications_auto_delete_summary_never">Slett aldri varsler automatisk</string>
|
||||
<string name="settings_notifications_auto_download_100k">Hvis mindre enn 100 KB</string>
|
||||
<string name="settings_notifications_auto_download_1m">Hvis mindre enn 1 MB</string>
|
||||
<string name="settings_notifications_auto_download_5m">Hvis mindre enn 5 MB</string>
|
||||
<string name="settings_notifications_auto_download_10m">Hvis mindre enn 10 MB</string>
|
||||
<string name="settings_notifications_min_priority_summary_any">Merknader av alle prioriteter vises</string>
|
||||
<string name="settings_notifications_min_priority_summary_x_or_higher">Vis merknader hvis prioritet er %1$d (%2$s) eller høyere</string>
|
||||
<string name="settings_notifications_auto_delete_summary_never">Aldri slett merknader automatisk</string>
|
||||
<string name="settings_notifications_auto_delete_one_week">Etter én uke</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_month">Slett merknader automatisk etter én måned</string>
|
||||
<string name="settings_notifications_auto_delete_one_month">Etter én måned</string>
|
||||
|
@ -149,37 +149,37 @@
|
|||
<string name="settings_general_users_summary">Legg til/fjern brukere for beskyttede emner</string>
|
||||
<string name="settings_general_users_prefs_title">Brukere</string>
|
||||
<string name="settings_general_users_prefs_user_not_used">Ikke brukt av noen emner</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_one">Brukt av emnet \"%1$s\"</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_many">Brukt av emnene %1$s</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_one">Brukt av emnet «%1$s»</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_many">Brukt av emnene «%1$s»</string>
|
||||
<string name="settings_general_users_prefs_user_add">Legg til brukere</string>
|
||||
<string name="settings_general_users_prefs_user_add_title">Legg til ny bruker</string>
|
||||
<string name="settings_general_users_prefs_user_add_summary">Opprett en ny bruker for en ny tjener</string>
|
||||
<string name="settings_general_dark_mode_title">Mørk drakt</string>
|
||||
<string name="settings_general_dark_mode_summary_system">Bruker systemets standard</string>
|
||||
<string name="settings_general_dark_mode_summary_light">Lys modus på</string>
|
||||
<string name="settings_general_dark_mode_summary_dark">Mørk modus på. Er du en vampyr\?</string>
|
||||
<string name="settings_general_dark_mode_summary_system">Ikled systemets drakt</string>
|
||||
<string name="settings_general_dark_mode_summary_light">Lys drakt iført</string>
|
||||
<string name="settings_general_dark_mode_summary_dark">Mørk dra iført. Er du en mørkets fyrste\?</string>
|
||||
<string name="settings_general_dark_mode_entry_system">Bruk systemets forvalg</string>
|
||||
<string name="settings_general_dark_mode_entry_light">Lys drakt</string>
|
||||
<string name="settings_general_dark_mode_entry_dark">Mørk drakt</string>
|
||||
<string name="settings_backup_restore_header">Sikkerhetskopiering og gjenoppretting</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_day">Slett merknader automatisk etter én dag</string>
|
||||
<string name="settings_general_default_base_url_message">Skriv inn serverens rot-URL for å bruke din egen server som standard når du abonnerer på nye emner og/eller deler til emner.</string>
|
||||
<string name="settings_general_default_base_url_message">For å bruke din egen tjener som forvalg når du abonnerer på nye emner og/eller deler til emner, kan du skrive inn tjenerens grunn-nettadresse.</string>
|
||||
<string name="settings_backup_restore_restore_title">Gjenopprett fra fil</string>
|
||||
<string name="settings_advanced_header">Avansert</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_scrubbed">Kopier til utklippstavlen (sensurert)</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_scrubbed">Last opp og kopier lenke (sensurert)</string>
|
||||
<string name="settings_advanced_export_logs_copied_logs">Loggføring kopiert til utklippstavlen</string>
|
||||
<string name="settings_advanced_export_logs_uploading">Laster opp logg …</string>
|
||||
<string name="settings_advanced_export_logs_copied_url">Logger lastet opp og URL kopiert</string>
|
||||
<string name="settings_backup_restore_backup_title">Sikkerhetskopier til fil</string>
|
||||
<string name="settings_backup_restore_backup_summary">Eksporter konfigurasjon, varsler og brukere</string>
|
||||
<string name="settings_advanced_export_logs_copied_url">Loggføring opplastet og nettadresse kopiert</string>
|
||||
<string name="settings_backup_restore_backup_title">Sikkerhetskopiering til fil</string>
|
||||
<string name="settings_backup_restore_backup_summary">Eksporter oppsett, merknader og brukere</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything">Alt</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything_no_users">Alt, unntatt brukere</string>
|
||||
<string name="settings_advanced_broadcast_summary_enabled">Programmer kan motta innkommende merknader som kringkastinger</string>
|
||||
<string name="settings_advanced_broadcast_summary_disabled">Programmer kan motta merknader som kringkastinger</string>
|
||||
<string name="settings_advanced_record_logs_title">Registrer logger</string>
|
||||
<string name="settings_advanced_record_logs_summary_enabled">Logger (opptil 1000 oppføringer) til enheten …</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">Slå på logging, slik at du kan dele logger senere for å diagnostisere problemer.</string>
|
||||
<string name="settings_advanced_record_logs_title">Loggføring</string>
|
||||
<string name="settings_advanced_record_logs_summary_enabled">Logger blir registrert på enheten din. Opptil 1000 oppføringer lagres.</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">Skru på registrering av logger, slik at du kan dele dem senere. Dette er nyttig i avlusingsøyemed.</string>
|
||||
<string name="settings_advanced_export_logs_title">Kopier/last opp logger</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_original">Kopier til utklippstavlen</string>
|
||||
<string name="settings_advanced_export_logs_error_uploading">Kunne ikke laste opp logger: %1$s</string>
|
||||
|
@ -188,43 +188,43 @@
|
|||
\n
|
||||
\n%1$s
|
||||
\n
|
||||
\nPassord er fjernet, men er ikke opplistet her.</string>
|
||||
\nPassord vil alltid fjernes, men er ikke opplistet her.</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_empty">Ingen emner/vertsnavn ble fjernet. Kanskje du ikke har noen abonnementer\?</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_button_ok">OK</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_button_ok">Skjønner</string>
|
||||
<string name="settings_advanced_clear_logs_title">Tøm loggføring</string>
|
||||
<string name="settings_advanced_clear_logs_summary">Slett tidligere registrert loggføring, og start på ny</string>
|
||||
<string name="settings_advanced_clear_logs_deleted_toast">Logger slettet</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Bruk en JSON-strøm over HTTP for å koble til tjeneren. Dette er en godt utprøvd metode, men kan bruke mer batteri.</string>
|
||||
<string name="settings_advanced_clear_logs_deleted_toast">Loggføring slettet</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Bruk en JSON-strøm over HTTP for å koble til tjeneren. Dette er en godt utprøvd metode, selv om den kan bruke mer batteri.</string>
|
||||
<string name="settings_about_header">Om</string>
|
||||
<string name="settings_about_version_copied_to_clipboard_message">Kopiert til utklippstavlen</string>
|
||||
<string name="user_dialog_title_add">Legg til bruker</string>
|
||||
<string name="user_dialog_title_edit">Rediger bruker</string>
|
||||
<string name="user_dialog_base_url_hint">Tjeneste-URL</string>
|
||||
<string name="user_dialog_base_url_hint">Tjener-nettadresse</string>
|
||||
<string name="user_dialog_description_edit">Du kan redigere brukernavn/passord for valgt bruker, eller slette den helt.</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_jsonhttp">JSON-strøm over HTTP</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">Vev-sockets</string>
|
||||
<string name="user_dialog_description_add">Du kan legge til en bruker her. Alle emner for den gitte serveren vil bruke denne brukeren.</string>
|
||||
<string name="user_dialog_description_add">Du kan legge til en bruker her som du kan tilknytte et gitt emne senere.</string>
|
||||
<string name="settings_about_version_format">ntfy %1$s (%2$s)</string>
|
||||
<string name="user_dialog_password_hint_edit">Passord (uendret hvis tomt)</string>
|
||||
<string name="user_dialog_button_add">Legg til bruker</string>
|
||||
<string name="user_dialog_button_cancel">Avbryt</string>
|
||||
<string name="user_dialog_button_delete">Slett bruker</string>
|
||||
<string name="user_dialog_button_save">Lagre</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">Abonnert på tre emner med umiddelbar levering</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">Abonnert på %1$d emner</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">Du abonnerer på tre emner med umiddelbar levering</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">Du abonnerer på %1$d emner</string>
|
||||
<string name="main_menu_settings_title">Innstillinger</string>
|
||||
<string name="channel_notifications_min_name">Minste prioritet</string>
|
||||
<string name="channel_notifications_high_name">Høy prioritet</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Abonnert på to emner med umiddelbar levering</string>
|
||||
<string name="refresh_message_error">Kunne ikke oppdatere %1$d abonnement(er)
|
||||
<string name="channel_notifications_min_name">Merknader (min.-prioritet)</string>
|
||||
<string name="channel_notifications_high_name">Merknader (høy prioritet)</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Du abonnerer på to emner med umiddelbar levering</string>
|
||||
<string name="refresh_message_error">Kunne ikke gjenoppfriske %1$d abonnement(er)
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="add_dialog_button_back">Tilbake</string>
|
||||
<string name="refresh_message_no_results">Alt er oppdatert</string>
|
||||
<string name="refresh_message_no_results">Alt er av nyeste dato</string>
|
||||
<string name="main_action_bar_title">Abonnerte emner</string>
|
||||
<string name="main_menu_notifications_disabled_until">Varsler dempet til %1$s</string>
|
||||
<string name="add_dialog_login_title">Innlogging nødvendig</string>
|
||||
<string name="main_menu_report_bug_title">Rapporter en feil</string>
|
||||
<string name="main_menu_notifications_disabled_until">Merknader avslått til %1$s</string>
|
||||
<string name="add_dialog_login_title">Innlogging kreves</string>
|
||||
<string name="main_menu_report_bug_title">Innrapporter en feil</string>
|
||||
<string name="add_dialog_button_subscribe">Abonner</string>
|
||||
<string name="detail_clear_dialog_permanently_delete">Slett for godt</string>
|
||||
<string name="detail_item_tags">Etiketter: %1$s</string>
|
||||
|
@ -234,10 +234,10 @@
|
|||
<string name="detail_item_menu_delete">Slett fil</string>
|
||||
<string name="detail_item_menu_download">Last ned fil</string>
|
||||
<string name="detail_item_menu_open">Åpne fil</string>
|
||||
<string name="detail_item_saved_successfully">Lagret som \"%1$s\" i nedlastingsmappen</string>
|
||||
<string name="detail_item_saved_successfully">Lagret som «%1$s» i nedlastingsmappen</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expired">ikke nedlastet, utløpt lenke</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expires_x">ikke nedlastet, utløper %1$s</string>
|
||||
<string name="detail_menu_notifications_disabled_until">Varsler avslått til %1$s</string>
|
||||
<string name="detail_menu_notifications_disabled_until">Merknader avslått til %1$s</string>
|
||||
<string name="detail_item_cannot_save">Kan ikke lagre vedlegg: %1$s</string>
|
||||
<string name="detail_action_mode_menu_copy">Kopier</string>
|
||||
<string name="notification_popup_action_cancel">Avbryt</string>
|
||||
|
@ -245,9 +245,9 @@
|
|||
\nFil: %2$s</string>
|
||||
<string name="notification_popup_file_downloading">Laster ned %1$s, %2$d%%
|
||||
\n%3$s</string>
|
||||
<string name="detail_item_download_failed">Kunne ikke laste ned vedlegg: %1$s</string>
|
||||
<string name="detail_item_download_failed">Nedlasting av vedlegg mislyktes: %1$s</string>
|
||||
<string name="detail_action_mode_menu_delete">Slett</string>
|
||||
<string name="detail_action_mode_delete_dialog_message">Vil du slette valgt(e) varsling(er) permanent\?</string>
|
||||
<string name="detail_action_mode_delete_dialog_message">Slett valgt(e) merknad(er)\?</string>
|
||||
<string name="detail_settings_title">Abonnementsinnstillinger</string>
|
||||
<string name="share_suggested_topics">Foreslåtte emner</string>
|
||||
<string name="share_successful">Melding publisert</string>
|
||||
|
@ -256,27 +256,27 @@
|
|||
<string name="notification_popup_file_download_successful">%1$s
|
||||
\nFil: %2$s, nedlastet</string>
|
||||
<string name="share_content_image_error">Kan ikke lese bilde: %1$s</string>
|
||||
<string name="notification_dialog_enabled_toast_message">Varsler gjenopptatt</string>
|
||||
<string name="notification_dialog_muted_until_toast_message">Varsler avslått til %1$s</string>
|
||||
<string name="settings_notifications_min_priority_title">Minste prioritet</string>
|
||||
<string name="share_content_file_error">Kan ikke lese filinformasjon: %1$s</string>
|
||||
<string name="notification_dialog_title">Skru av varsler</string>
|
||||
<string name="notification_dialog_muted_forever_toast_message">Varsler dempet</string>
|
||||
<string name="notification_dialog_enabled_toast_message">Merknader skrudd på igjen</string>
|
||||
<string name="notification_dialog_muted_until_toast_message">Merknader satt på pause til %1$s</string>
|
||||
<string name="settings_notifications_min_priority_title">Min.-prioritet</string>
|
||||
<string name="share_content_file_error">Kan ikke lese filinfo: %1$s</string>
|
||||
<string name="notification_dialog_title">Sett merknader på pause</string>
|
||||
<string name="notification_dialog_muted_forever_toast_message">Merknader satt på pause</string>
|
||||
<string name="notification_dialog_1h">1 time</string>
|
||||
<string name="notification_popup_file_download_failed">%1$s
|
||||
\nFil: %2$s, nedlasting mislyktes</string>
|
||||
<string name="user_dialog_username_hint">Brukernavn</string>
|
||||
<string name="settings_notifications_auto_download_50m">Hvis under 50 MB</string>
|
||||
<string name="settings_notifications_auto_download_50m">Hvis mindre enn 50 MB</string>
|
||||
<string name="settings_notifications_auto_delete_title">Slett merknader</string>
|
||||
<string name="settings_notifications_auto_download_500k">Hvis under 500 kB</string>
|
||||
<string name="settings_notifications_auto_download_500k">Hvis mindre enn 500 KB</string>
|
||||
<string name="settings_backup_restore_backup_failed">Sikkerhetskopiering mislyktes: %1$s</string>
|
||||
<string name="settings_backup_restore_restore_successful">Gjenoppretting vellykket</string>
|
||||
<string name="settings_backup_restore_restore_successful">Gjenopprettet</string>
|
||||
<string name="user_dialog_password_hint_add">Passord</string>
|
||||
<string name="settings_backup_restore_restore_failed">Gjenoppretting mislyktes: %1$s</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_original">Last opp og kopier lenke</string>
|
||||
<string name="settings_about_version_title">Versjon</string>
|
||||
<string name="settings_advanced_broadcast_title">Kringkast meldinger</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_days">Slett varsler automatisk etter tre dager</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_days">Slett merknader automatisk etter tre dager</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_months">Slett merknader automatisk etter tre måneder</string>
|
||||
<string name="settings_notifications_auto_delete_one_day">Etter én dag</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_week">Slett merknader automatisk etter én uke</string>
|
||||
|
@ -285,12 +285,12 @@
|
|||
<string name="settings_general_default_base_url_default_summary">%1$s (forvalg)</string>
|
||||
<string name="settings_backup_restore_backup_entry_settings_only">Kun innstillinger</string>
|
||||
<string name="settings_backup_restore_restore_summary">Importer oppsett, merknader og brukere</string>
|
||||
<string name="detail_test_message">Dette er et testvarsel fra ntfy Android-appen. Den har en nivå %1$d prioritet. Hvis du sender en annen, kan den se annerledes ut.</string>
|
||||
<string name="settings_backup_restore_backup_successful">Sikkerhetskopiering opprettet</string>
|
||||
<string name="settings_advanced_export_logs_summary">Kopier logger til utklippstavlen, eller last opp til nopaste.net (eid av ntfy-utvikleren). Vertsnavn og emner kan sensureres, men varsler vil aldri bli det.</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Bruk WebSockets for å koble til serveren. Dette er den anbefalte metoden, men kan kreve ytterligere konfigurasjon i proxyen din.</string>
|
||||
<string name="main_how_to_intro">Klikk på + for å opprette eller abonnere på et emne. Etterpå mottar du varsler på enheten din når du sender meldinger via PUT eller POST.</string>
|
||||
<string name="main_how_to_link">Detaljerte instruksjoner er tilgjengelig på ntfy.sh, og i dokumentasjonen.</string>
|
||||
<string name="detail_test_message">Dette er en testmerknad fra ntfy-Androidprogrammet. Det har %1$d-prioritet. vis du sender en ny kan det hende den ser annerledes ut.</string>
|
||||
<string name="settings_backup_restore_backup_successful">Sikkerhetskopi utført</string>
|
||||
<string name="settings_advanced_export_logs_summary">Kopier logger til utklippstavlen, eller last opp til nopaste.net (eid av ntfy-utvikleren). Vertsnavn og emner kan sensureres, men merknader vil aldri bli det.</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Bruk Vev-socket-er for å koble til tjeneren. Dette er eksperimentelt. Si ifra hvis det bruker mindre batteri eller er ustabilt.</string>
|
||||
<string name="main_how_to_intro">Abonner på et emne ved å klikke på knappen nedenfor. Etter dette kan du sende meldinger via PUT eller POST, og du kan motta merknader på enheten din.</string>
|
||||
<string name="main_how_to_link">Mer detaljert instruks er å finne på ntfy.sh-nettsiden og i dokumentasjonen.</string>
|
||||
<string name="main_unified_push_toast">Dette abonnementet håndteres av %1$s via UnifiedPush</string>
|
||||
<string name="add_dialog_foreground_description">Umiddelbar levering er alltid påskrudd for andre verter enn %1$s.</string>
|
||||
<string name="settings_notifications_priority_min">min</string>
|
||||
|
@ -298,49 +298,4 @@
|
|||
<string name="settings_notifications_priority_default">forvalg</string>
|
||||
<string name="settings_notifications_priority_high">høy</string>
|
||||
<string name="settings_notifications_priority_max">maks.</string>
|
||||
<string name="channel_subscriber_notification_instant_text_six">Abonnert på seks emner med umiddelbar levering</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">Abonnert på fem emner med umiddelbar levering</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_five">Abonnert på fem emner</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_six">Abonnert på seks emner</string>
|
||||
<string name="channel_notifications_group_default_name">Standard</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">Velg tjenestens URL</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">Fjern tjeneste-URL</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">Fortsett å varsle for høyeste prioritet</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">Varslinger med maksimal prioritet varsler kontinuerlig til de blir avvist</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">Maks prioriterte varsler varsles bare én gang</string>
|
||||
<string name="detail_settings_notifications_instant_title">Umiddelbar levering</string>
|
||||
<string name="detail_settings_notifications_instant_summary_on">Varsler leveres umiddelbart. Krever en forgrunnsservice og bruker mer batteri.</string>
|
||||
<string name="detail_settings_notifications_instant_summary_off">Varsler leveres med Firebase. Leveringen kan bli forsinket, men bruker mindre batteri.</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Egendefinerte varslingsinnstillinger</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">Bruker egendefinerte innstillinger for dette abonnementet</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">Bruker standardinnstillinger (lyder, Ikke forstyrr-overstyring osv.)</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Konfigurer varslingsinnstillinger</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">Ikke forstyrr (DND) overstyring, lyder osv.</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Fortsett å varsle</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Varsle bare én gang</string>
|
||||
<string name="detail_settings_appearance_icon_remove_summary">Ikon som vises i varsler for dette emnet</string>
|
||||
<string name="detail_settings_appearance_icon_error_saving">Kan ikke lagre ikon: %1$s</string>
|
||||
<string name="detail_settings_appearance_display_name_title">Visningsnavn</string>
|
||||
<string name="detail_settings_appearance_display_name_default_summary">%1$s (standard)</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">Kopier til utklippstavlen</string>
|
||||
<string name="detail_settings_appearance_display_name_message">Angi et tilpasset visningsnavn for dette abonnementet. La stå tomt for standard (%1$s).</string>
|
||||
<string name="main_menu_donate_title">Doner 💸</string>
|
||||
<string name="main_banner_websocket_text">Å bytte til WebSockets er den anbefalte måten å koble til serveren på, og kan forbedre batterilevetiden, men kan kreve <a href="https://ntfy.sh/docs/config/#nginxapache2caddy">ytterligere konfigurasjon i proxy-serveren</a>. Dette kan endres i innstillingene.</string>
|
||||
<string name="main_banner_websocket_button_enable_now">Aktiver nå</string>
|
||||
<string name="detail_deep_link_subscribed_toast_message">Abonnerte på emnet %1$s</string>
|
||||
<string name="detail_settings_appearance_header">Utseende</string>
|
||||
<string name="detail_settings_appearance_icon_set_summary">Angi et ikon som skal vises i varsler</string>
|
||||
<string name="detail_settings_appearance_icon_set_title">Abonnement-ikon</string>
|
||||
<string name="detail_settings_global_setting_title">Bruk globale innstillinger</string>
|
||||
<string name="detail_settings_about_header">Om</string>
|
||||
<string name="detail_settings_about_topic_url_title">Emne-URL</string>
|
||||
<string name="notification_popup_user_action_failed">%1$s mislyktes: %2$s</string>
|
||||
<string name="detail_item_cannot_open_apk">Apper kan ikke installeres lenger. Last ned via nettleseren i stedet. Se feilrapport #531 for detaljer.</string>
|
||||
<string name="detail_settings_appearance_icon_remove_title">Abonnement-ikon (trykk for å fjerne)</string>
|
||||
<string name="settings_notifications_channel_prefs_summary">Ikke forstyrr (DND) overstyring, lyder osv.</string>
|
||||
<string name="settings_notifications_channel_prefs_title">Kanalinnstillinger</string>
|
||||
<string name="detail_settings_global_setting_suffix">ved hjelp av globale innstillinger</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfy vil ikke opptre som UnifiedPush-distributør</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy vil opptre som UnifiedPush-distributør</string>
|
||||
<string name="settings_advanced_unifiedpush_title">Skru på UnifiedPush</string>
|
||||
</resources>
|
||||
</resources>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_notifications_low_name">Lage prioriteit</string>
|
||||
<string name="channel_notifications_max_name">Maximum prioriteit</string>
|
||||
<string name="channel_notifications_low_name">Meldingen (lage prioriteit)</string>
|
||||
<string name="channel_notifications_max_name">Meldingen (max. prioriteit)</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Geabonneerd op onderwerpen voor directe levering</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Geabonneerd op één onderwerp voor directe levering</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">Geabonneerd op vier onderwerpen voor directe levering</string>
|
||||
|
@ -37,8 +37,8 @@
|
|||
<string name="add_dialog_button_login">Inloggen</string>
|
||||
<string name="add_dialog_use_another_server">Gebruik een andere server</string>
|
||||
<string name="channel_notifications_min_name">Meldingen (min. prioriteit)</string>
|
||||
<string name="channel_notifications_default_name">Standaard prioriteit</string>
|
||||
<string name="channel_notifications_high_name">Hoge prioriteit</string>
|
||||
<string name="channel_notifications_default_name">Meldingen (standaard prioriteit)</string>
|
||||
<string name="channel_notifications_high_name">Meldingen (hoge prioriteit)</string>
|
||||
<string name="channel_subscriber_service_name">Abonnementenservice</string>
|
||||
<string name="main_how_to_intro">Klik op de + om een onderwerp aan te maken of erop te abonneren. Nadien ontvang je meldingen op je toestel bij het verzenden van berichten via PUT or POST.</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Geabonneerd op twee onderwerpen voor directe levering</string>
|
||||
|
@ -65,7 +65,7 @@
|
|||
<string name="main_menu_rate_title">Beoordeel de app ⭐</string>
|
||||
<string name="main_item_status_text_one">%1$d melding</string>
|
||||
<string name="main_action_mode_delete_dialog_message">Afmelden van de geselecteerde onderwerp(en) en alle meldingen definitief verwijderen\?</string>
|
||||
<string name="main_item_status_unified_push">%1$s (Unified Push)</string>
|
||||
<string name="main_item_status_unified_push">%1$s (UnifiedPush)</string>
|
||||
<string name="main_no_subscriptions_text">Het lijkt erop dat u nog geen abonnementen heeft.</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">Permanent verwijderen</string>
|
||||
<string name="main_unified_push_toast">Dit abonnement wordt beheerd door %1$s via UnifiedPush</string>
|
||||
|
@ -73,7 +73,7 @@
|
|||
<string name="main_banner_websocket_button_dismiss">Afwijzen</string>
|
||||
<string name="user_dialog_button_delete">Gebruiker verwijderen</string>
|
||||
<string name="user_dialog_button_cancel">Annuleren</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">WebSocket</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">WebSockets</string>
|
||||
<string name="settings_about_version_title">Versie</string>
|
||||
<string name="settings_about_header">Over</string>
|
||||
<string name="settings_advanced_connection_protocol_title">Verbindingsprotocol</string>
|
||||
|
@ -164,8 +164,8 @@
|
|||
<string name="settings_advanced_clear_logs_title">Logs verwijderen</string>
|
||||
<string name="settings_advanced_clear_logs_deleted_toast">Logs verwijderd</string>
|
||||
<string name="user_dialog_description_add">Je kunt hier een gebruiker toevoegen. Alle onderwerpen voor de opgegeven server zullen deze gebruiker gebruiken.</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Gebruik WebSockets om verbinding te maken met de server. Dit is de aangeraden methode, maar deze kan extra configuratie in uw proxy vereisen.</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Gebruik een JSON stream via HTTP om verbinding te maken met de server. Deze methode is getest maar kan meer batterij verbruiken.</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Gebruik WebSockets om verbinding te maken met de server. Dit wordt de standaard in juni 2022.</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Gebruik een JSON stream via HTTP om verbinding te maken met de server. Deze methode is verouderd en wordt in juni 2022 verwijderd.</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_scrubbed">Upload en kopieer link (gecensureerd)</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_text">Deze onderwerpen/hostnamen zijn vervangen met fruitnamen zodat je het log kunt delen zonder zorgen:
|
||||
\n
|
||||
|
@ -226,7 +226,7 @@
|
|||
<string name="settings_advanced_header">Geavanceerd</string>
|
||||
<string name="settings_advanced_record_logs_title">Logs opnemen</string>
|
||||
<string name="settings_advanced_record_logs_summary_enabled">Loggen (tot 1,000 vermeldingen) naar apparaat …</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">Loggen inschakelen, deze kan later gedeeld worden om problemen te analyseren.</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">Schakel loggen in zodat je logs later kunt delen om problemen te diagnosticeren.</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_empty">Er zijn geen onderwerpen/hostnamen gecensureerd. Misschien heb je geen abonnementen\?</string>
|
||||
<string name="detail_item_download_info_deleted">verwijderd</string>
|
||||
<string name="settings_notifications_auto_download_always">Alles automatisch downloaden</string>
|
||||
|
@ -317,30 +317,4 @@
|
|||
<string name="detail_settings_appearance_icon_set_summary">Stel een icoon in wat zal worden weergegeven in notificaties</string>
|
||||
<string name="detail_settings_appearance_icon_remove_title">Abonnementen icoon (tap om te verwijderen)</string>
|
||||
<string name="detail_settings_global_setting_suffix">Gebruikt globale instelling</string>
|
||||
<string name="detail_settings_appearance_display_name_default_summary">%1$s (standaard)</string>
|
||||
<string name="detail_settings_appearance_display_name_title">Schermnaam</string>
|
||||
<string name="detail_settings_appearance_display_name_message">Zet een schermnaam voor dit abonnement. Laat het veld leeg om de standaard naam te kiezen (%1$s).</string>
|
||||
<string name="detail_settings_about_header">Over</string>
|
||||
<string name="detail_settings_about_topic_url_title">Onderwerp URL</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">Gekopieerd naar klembord</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">Kies service URL</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">Service URL verwijderen</string>
|
||||
<string name="main_banner_websocket_button_enable_now">Nu inschakelen</string>
|
||||
<string name="main_banner_websocket_text">WebSockets is de aangeraden manier om te verbinden met uw server en kan batterij verbruik verminderen. Het kan <a href="https://ntfy.sh/docs/config/#nginxapache2caddy"> extra configuratie in uw proxy</a> vereisen. Dit kan omgeschakeld worden in de instellingen.</string>
|
||||
<string name="channel_notifications_group_default_name">Standaard</string>
|
||||
<string name="main_menu_donate_title">Doneer 💸</string>
|
||||
<string name="detail_item_cannot_open_apk">Apps kunnen niet meer worden geïnstalleerd. Download deze via de browser. Raadpleeg issue #531 voor meer details.</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">Behoud meldingen voor hoogste prioriteit</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">Max prioriteit berichten geven continue een melding totdat deze worden gesloten</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">Max prioriteit berichten geven eenmalig een melding</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Instellingen voor aangepaste melding</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">Aangepaste instellingen in gebruik voor dit abonnement</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Aanpassen instellingen voor meldingen</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Blijven melden</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Eenmalig melden</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">Standaard instellingen in gebruik (geluiden, Niet storen, etc.)</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">Niet storen (DND) negeren, geluiden, etc.</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy zal optreden als UnifiedPush-distributeur</string>
|
||||
<string name="settings_advanced_unifiedpush_title">UnifiedPush inschakelen</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfy treedt niet op als UnifiedPush-distributeur</string>
|
||||
</resources>
|
||||
</resources>
|
||||
|
|
|
@ -1,346 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_notifications_min_name">Minimalny priorytet</string>
|
||||
<string name="channel_notifications_low_name">Niski priorytet</string>
|
||||
<string name="channel_notifications_default_name">Domyślny priorytet</string>
|
||||
<string name="channel_notifications_max_name">Maksymalny priorytet</string>
|
||||
<string name="channel_notifications_min_name">Powiadomienia (minimalny priorytet)</string>
|
||||
<string name="channel_notifications_low_name">Powiadomienia (niski priorytet)</string>
|
||||
<string name="channel_notifications_default_name">Powiadomienia (domyślny priorytet)</string>
|
||||
<string name="channel_notifications_max_name">Powiadomienia (maksymalny priorytet)</string>
|
||||
<string name="channel_subscriber_notification_title">Oczekiwanie na przychodzące powiadomienia</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Subskrybujesz tematy z natychmiastowym dostarczaniem</string>
|
||||
<string name="channel_notifications_high_name">Wysoki priorytet</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Subskrybujesz tematy z natychmiastową dostawą</string>
|
||||
<string name="channel_notifications_high_name">Powiadomienia (wysoki priorytet)</string>
|
||||
<string name="channel_subscriber_service_name">Usługa subskrypcji</string>
|
||||
<string name="add_dialog_login_username_hint">Nazwa użytkownika</string>
|
||||
<string name="detail_action_mode_delete_dialog_message">Usunąć wybrane powiadomienie(a) trwale\?</string>
|
||||
<string name="detail_action_mode_delete_dialog_cancel">Anuluj</string>
|
||||
<string name="notification_dialog_save">Zapisz</string>
|
||||
<string name="settings_title">Ustawienia</string>
|
||||
<string name="settings_notifications_muted_until_title">Wycisz powiadomienia</string>
|
||||
<string name="settings_notifications_muted_until_forever">Powiadomienia wyciszone do wznowienia</string>
|
||||
<string name="settings_notifications_min_priority_default">Podstawowy priorytet i wyższy</string>
|
||||
<string name="settings_notifications_auto_delete_title">Usuń powiadomienia</string>
|
||||
<string name="settings_general_dark_mode_title">Tryb ciemny</string>
|
||||
<string name="settings_backup_restore_restore_failed">Przywracanie nie powiodło się: %1$s</string>
|
||||
<string name="settings_advanced_clear_logs_deleted_toast">Logi usunięte</string>
|
||||
<string name="user_dialog_base_url_hint">Adres URL usługi</string>
|
||||
<string name="detail_settings_appearance_display_name_title">Nazwa wyświetlana</string>
|
||||
<string name="detail_settings_appearance_display_name_default_summary">%1$s (domyślny)</string>
|
||||
<string name="user_dialog_title_edit">Edytuj użytkownika</string>
|
||||
<string name="user_dialog_description_add">Tutaj możesz dodać użytkownika. Wszystkie tematy na podanym serwerze będą wtedy korzystać z tego użytkownika.</string>
|
||||
<string name="user_dialog_description_edit">Możesz zmienić lub usunąć nazwę użytkownika/hasło dla wybranego użytkownika.</string>
|
||||
<string name="user_dialog_username_hint">Nazwa użytkownika</string>
|
||||
<string name="notification_dialog_muted_until_toast_message">Powiadomienia wyciszone przez %1$s</string>
|
||||
<string name="detail_item_menu_download">Pobierz plik</string>
|
||||
<string name="detail_action_mode_menu_copy">Kopiuj</string>
|
||||
<string name="detail_menu_clear">Wyczyść powiadomienia</string>
|
||||
<string name="detail_item_menu_delete">Usuń plik</string>
|
||||
<string name="detail_item_menu_cancel">Anuluj pobieranie</string>
|
||||
<string name="detail_item_cannot_open_url">Nie można otworzyć adresu URL: %1$s</string>
|
||||
<string name="detail_item_download_info_download_failed_expires_x">pobieranie nie powiodło się, link wygasa %1$s</string>
|
||||
<string name="share_content_text_hint">Dodaj treść do udostępnienia</string>
|
||||
<string name="share_content_image_error">Nie można odczytać obrazu: %1$s</string>
|
||||
<string name="notification_dialog_show_all">Pokaż wszystkie powiadomienia</string>
|
||||
<string name="notification_dialog_30min">30 minut</string>
|
||||
<string name="notification_dialog_1h">1 godzina</string>
|
||||
<string name="notification_dialog_8h">8 godzin</string>
|
||||
<string name="notification_dialog_forever">Do wznowienia</string>
|
||||
<string name="settings_notifications_auto_download_500k">Jeśli poniżej 500 kB</string>
|
||||
<string name="settings_notifications_channel_prefs_title">Ustawienia kanału</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_months">Automatycznie usuń powiadomienia po 3 miesiącach</string>
|
||||
<string name="settings_notifications_auto_download_5m">Jeśli poniżej 5 MB</string>
|
||||
<string name="settings_notifications_auto_delete_summary_never">Nigdy nie usuwaj powiadomień automatycznie</string>
|
||||
<string name="settings_general_users_prefs_title">Użytkownicy</string>
|
||||
<string name="settings_general_dark_mode_summary_light">Tryb jasny włączony</string>
|
||||
<string name="settings_general_dark_mode_entry_system">Użyj domyślnych ustawień systemu</string>
|
||||
<string name="settings_general_dark_mode_entry_light">Tryb jasny</string>
|
||||
<string name="settings_general_dark_mode_entry_dark">Tryb ciemny</string>
|
||||
<string name="settings_advanced_broadcast_summary_disabled">Aplikacje nie mogą odbierać powiadomień jako transmisje</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_original">Kopiuj do schowka</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_scrubbed">Kopiuj do schowka (ocenzurowane)</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_text">Te tematy / nazwy hostów zostały zastąpione nazwami owoców, więc możesz udostępnić dziennik bez obaw:
|
||||
\n
|
||||
\n%1$s
|
||||
\n
|
||||
\nHasła zostały usunięte, ale nie są tutaj wymienione.</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">Włącz rejestrowanie, aby móc później udostępnić logi w celu zdiagnozowania problemów.</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Zasubskrybowano do dwóch tematów z natychmiastową dostawą</string>
|
||||
<string name="settings_advanced_export_logs_summary">Kopiuj logi do schowka, lub prześlij na nopaste.net (własność autora ntfy). Nazwy hostów i tematy mogą być cenzurowane, powiadomienia nigdy nie będą.</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_six">Zasubskrybowano sześć tematów</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">Zasubskrybowano do %1$d tematów z natychmiastową dostawą</string>
|
||||
<string name="detail_settings_notifications_instant_summary_off">Powiadomienia są dostarczane za pomocą Firebase. Dostarczanie może być opóźnione, ale zużywa mniej baterii.</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_five">Zasubskrybowano pięć tematów</string>
|
||||
<string name="add_dialog_use_another_server_description">Wpisz poniżej adresy URL serwisów, aby subskrybować tematy z innych serwerów.</string>
|
||||
<string name="detail_clear_dialog_permanently_delete">Usuń trwale</string>
|
||||
<string name="main_how_to_intro">Kliknij +, aby utworzyć lub zasubskrybować temat. Następnie otrzymasz powiadomienia na swoim urządzeniu, gdy wiadomości zostaną opublikowane za pośrednictwem PUT lub POST.</string>
|
||||
<string name="main_item_status_text_not_one">%1$d powiadomienia</string>
|
||||
<string name="main_add_button_description">Dodaj subskrypcję</string>
|
||||
<string name="main_item_status_reconnecting">ponowne połączenie …</string>
|
||||
<string name="main_no_subscriptions_text">Wygląda na to, że nie masz jeszcze żadnych subskrypcji.</string>
|
||||
<string name="detail_no_notifications_text">Nie otrzymałeś jeszcze żadnych powiadomień dla tego tematu.</string>
|
||||
<string name="detail_test_message">To jest testowe powiadomienie z aplikacji ntfy na Androida. Ma ono priorytet na poziomie %1$d. Jeśli wyślesz kolejne, może ono wyglądać inaczej.</string>
|
||||
<string name="detail_item_download_info_deleted_expired">usunięto, łącze wygasło</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Użyj WebSockets, aby połączyć się z serwerem. Jest to zalecana metoda, ale może wymagać dodatkowej konfiguracji w twoim proxy.</string>
|
||||
<string name="detail_settings_appearance_display_name_message">Ustaw niestandardową nazwę wyświetlaną dla tej subskrypcji. Pozostaw puste dla domyślnej (%1$s).</string>
|
||||
<string name="detail_settings_global_setting_title">Użyj ustawienia globalnego</string>
|
||||
<string name="share_menu_send">Udostępnij</string>
|
||||
<string name="notification_dialog_2h">2 godziny</string>
|
||||
<string name="notification_dialog_tomorrow">Do jutra</string>
|
||||
<string name="notification_popup_action_cancel">Anuluj</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_day">Automatycznie usuń powiadomienia po jednym dniu</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_days">Automatycznie usuń powiadomienia po 3 dniach</string>
|
||||
<string name="settings_notifications_auto_delete_one_month">Po miesiącu</string>
|
||||
<string name="settings_notifications_min_priority_high">Wysoki priorytet i wyższy</string>
|
||||
<string name="notification_popup_user_action_failed">%1$s nie powiodło się: %2$s</string>
|
||||
<string name="settings_backup_restore_header">Kopia zapasowa & Przywracanie</string>
|
||||
<string name="settings_backup_restore_backup_summary">Eksportuj konfigurację, powiadomienia i użytkowników</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_scrubbed">Prześlij i kopiuj łącze (ocenzurowane)</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">Zasubskrybowane tematy</string>
|
||||
<string name="main_how_to_link">Szczegółowe instrukcje są dostępne w ntfy.sh, oraz w dokumentacji.</string>
|
||||
<string name="main_banner_battery_text">Optymalizacja baterii powinna być wyłączona dla aplikacji, aby uniknąć problemów z dostarczaniem powiadomień.</string>
|
||||
<string name="main_menu_rate_title">Oceń aplikację ⭐</string>
|
||||
<string name="main_action_mode_delete_dialog_message">Zrezygnować z wybranego tematu/ów i trwale usunąć wszystkie powiadomienia\?</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">Usuń trwale</string>
|
||||
<string name="add_dialog_foreground_description">Natychmiastowe dostarczanie jest zawsze włączone dla hostów innych niż %1$s.</string>
|
||||
<string name="add_dialog_button_back">Powrót</string>
|
||||
<string name="add_dialog_error_connection_failed">Połączenie nieudane: %1$s</string>
|
||||
<string name="add_dialog_button_login">Zaloguj się</string>
|
||||
<string name="add_dialog_button_subscribe">Subskrybuj</string>
|
||||
<string name="add_dialog_login_password_hint">Hasło</string>
|
||||
<string name="add_dialog_instant_delivery_description">Zapewnia natychmiastowe dostarczanie wiadomości, nawet jeśli urządzenie jest nieaktywne.</string>
|
||||
<string name="add_dialog_login_title">Wymagane jest zalogowanie się</string>
|
||||
<string name="add_dialog_instant_delivery">Natychmiastowe dostarczanie w trybie drzemki</string>
|
||||
<string name="detail_delete_dialog_permanently_delete">Usuń trwale</string>
|
||||
<string name="detail_delete_dialog_cancel">Anuluj</string>
|
||||
<string name="detail_test_title">Test: Jeśli chcesz, możesz ustawić tytuł.</string>
|
||||
<string name="detail_instant_delivery_disabled">Natychmiastowe dostarczanie wyłączone</string>
|
||||
<string name="detail_test_message_error">Nie można wysłać wiadomości: %1$s</string>
|
||||
<string name="detail_instant_delivery_enabled">Natychmiastowe dostarczanie włączone</string>
|
||||
<string name="detail_test_message_error_unauthorized_anon">Nie można wysłać wiadomości: Anonimowa publikacja nie jest dozwolona.</string>
|
||||
<string name="detail_test_message_error_unauthorized_user">Nie można wysłać wiadomości: Użytkownik \"%1$s\" nie ma uprawnień.</string>
|
||||
<string name="detail_test_message_error_too_large">Nie można wysłać wiadomości: Załącznik jest zbyt duży.</string>
|
||||
<string name="detail_copied_to_clipboard_message">Skopiowano do schowka</string>
|
||||
<string name="detail_item_cannot_delete">Nie można usunąć załącznika: %1$s</string>
|
||||
<string name="detail_item_download_failed">Nie można pobrać załącznika: %1$s</string>
|
||||
<string name="detail_item_download_info_not_downloaded">nie pobrany</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expired">nie pobrany, link wygasł</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expires_x">nie pobrany, wygasa %1$s</string>
|
||||
<string name="detail_menu_notifications_enabled">Powiadomienia włączone</string>
|
||||
<string name="detail_menu_test">Wyślij powiadomienie testowe</string>
|
||||
<string name="detail_menu_copy_url">Kopiuj adres tematu</string>
|
||||
<string name="detail_menu_unsubscribe">Zrezygnuj z subskrypcji</string>
|
||||
<string name="detail_action_mode_menu_delete">Usuń</string>
|
||||
<string name="detail_menu_disable_instant">Wyłącz natychmiastowe dostarczanie</string>
|
||||
<string name="detail_item_download_info_download_failed_expired">pobieranie nie powiodło się, łącze wygasło</string>
|
||||
<string name="share_content_file_text">Podzielono się z Tobą plikiem</string>
|
||||
<string name="share_content_file_error">Nie można odczytać informacji o pliku: %1$s</string>
|
||||
<string name="share_topic_title">Udostępnij do</string>
|
||||
<string name="notification_dialog_cancel">Anuluj</string>
|
||||
<string name="notification_popup_action_open">Otwórz</string>
|
||||
<string name="notification_popup_action_browse">Przeglądaj</string>
|
||||
<string name="notification_popup_action_download">Pobierz</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_week">Automatycznie usuń powiadomienia po tygodniu</string>
|
||||
<string name="settings_general_default_base_url_title">Serwer domyślny</string>
|
||||
<string name="settings_advanced_broadcast_summary_enabled">Aplikacje mogą odbierać przychodzące powiadomienia jako transmisje</string>
|
||||
<string name="settings_about_header">Informacje o</string>
|
||||
<string name="user_dialog_button_add">Dodaj użytkownika</string>
|
||||
<string name="main_menu_notifications_disabled_forever">Powiadomienia wyciszone</string>
|
||||
<string name="main_menu_notifications_enabled">Powiadomienia włączone</string>
|
||||
<string name="add_dialog_login_new_user">Nowy użytkownik</string>
|
||||
<string name="add_dialog_description_below">Tematy mogą nie być chronione hasłem, więc wybierz nazwę, która jest trudna do odgadnięcia. Po subskrypcji możesz wysyłać powiadomienia PUT/POST.</string>
|
||||
<string name="add_dialog_title">Zasubskrybuj temat</string>
|
||||
<string name="add_dialog_topic_name_hint">Nazwa tematu, np. moje_powiadomienia</string>
|
||||
<string name="add_dialog_use_another_server">Użyj innego serwera</string>
|
||||
<string name="add_dialog_login_description">Ten temat wymaga zalogowania. Proszę podaj nazwę użytkownika i hasło.</string>
|
||||
<string name="add_dialog_login_error_not_authorized">Logowanie nie powiodło się. Użytkownik %1$s nie jest upoważniony.</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">Zasubskrybowano do pięciu tematów z natychmiastowym dostarczaniem</string>
|
||||
<string name="channel_subscriber_notification_instant_text_six">Zasubskrybowano do sześciu tematów z natychmiastowym dostarczaniem</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">Zasubskrybowano dwa tematy</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">Zasubskrybowano jeden temat</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">Zasubskrybowano %1$d tematów</string>
|
||||
<string name="refresh_message_no_results">Wszystko jest aktualne</string>
|
||||
<string name="refresh_message_error">Nie można odświeżyć %1$d subskrypcji
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="refresh_message_error_one">Nie można odświeżyć subskrypcji: %1$s</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">Zasubskrybowano trzy tematy</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">Zasubskrybowano cztery tematy</string>
|
||||
<string name="detail_clear_dialog_cancel">Anuluj</string>
|
||||
<string name="detail_deep_link_subscribed_toast_message">Temat %1$s zasubskrybowany</string>
|
||||
<string name="detail_item_snack_deleted">Powiadomienie usunięte</string>
|
||||
<string name="detail_item_snack_undo">Cofnij</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_one">Używane przez temat %1$s</string>
|
||||
<string name="settings_general_users_prefs_user_not_used">Nieużywane przez żadne tematy</string>
|
||||
<string name="settings_advanced_clear_logs_title">Wyczyść logi</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">WebSockety</string>
|
||||
<string name="detail_settings_global_setting_suffix">przy użyciu ustawienia globalnego</string>
|
||||
<string name="detail_settings_about_header">Informacje o</string>
|
||||
<string name="detail_settings_about_topic_url_title">Adres URL tematu</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">Skopiowano do schowka</string>
|
||||
<string name="user_dialog_password_hint_add">Hasło</string>
|
||||
<string name="user_dialog_password_hint_edit">Hasło (niezmienione, jeśli pozostawiono puste)</string>
|
||||
<string name="user_dialog_button_delete">Usuń użytkownika</string>
|
||||
<string name="user_dialog_button_save">Zapisz</string>
|
||||
<string name="main_menu_notifications_disabled_until">Powiadomienia wyciszone przez %1$s</string>
|
||||
<string name="main_action_mode_delete_dialog_cancel">Anuluj</string>
|
||||
<string name="main_menu_docs_title">Przeczytaj dokumentację</string>
|
||||
<string name="main_action_bar_title">Subskrybowane tematy</string>
|
||||
<string name="main_menu_settings_title">Ustawienia</string>
|
||||
<string name="main_item_status_unified_push">%1$s (UnifiedPush)</string>
|
||||
<string name="main_menu_report_bug_title">Zgłoś błąd</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">Zrezygnuj z subskrypcji</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Zasubskrybowano jeden temat z natychmiastową dostawą</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">Zasubskrybowano do trzech tematów z natychmiastową dostawą</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">Zasubskrybowano do czterech tematów z natychmiastową dostawą</string>
|
||||
<string name="refresh_message_result">Otrzymano %1$d powiadomień</string>
|
||||
<string name="main_item_status_text_one">%1$d powiadomienie</string>
|
||||
<string name="main_unified_push_toast">Ta subskrypcja jest zarządzana przez %1$s poprzez UnifiedPush</string>
|
||||
<string name="main_banner_battery_button_remind_later">Zapytaj później</string>
|
||||
<string name="main_banner_battery_button_dismiss">Odrzuć</string>
|
||||
<string name="main_banner_battery_button_fix_now">Napraw teraz</string>
|
||||
<string name="add_dialog_button_cancel">Anuluj</string>
|
||||
<string name="main_item_date_yesterday">wczoraj</string>
|
||||
<string name="detail_delete_dialog_message">Zrezygnować z subskrypcji tego tematu i usunąć wszystkie otrzymane powiadomienia\?</string>
|
||||
<string name="detail_menu_enable_instant">Włącz natychmiastowe dostarczanie</string>
|
||||
<string name="detail_menu_notifications_disabled_forever">Powiadomienia wyciszone</string>
|
||||
<string name="detail_menu_notifications_disabled_until">Powiadomienia wyciszone przez %1$s</string>
|
||||
<string name="user_dialog_button_cancel">Anuluj</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">Wyczyść adres URL usługi</string>
|
||||
<string name="detail_item_menu_save_file">Zapisz plik</string>
|
||||
<string name="detail_item_cannot_save">Nie można zapisać załącznika: %1$s</string>
|
||||
<string name="detail_item_menu_open">Otwórz plik</string>
|
||||
<string name="detail_item_menu_copy_url">Kopiuj Adres URL</string>
|
||||
<string name="detail_item_menu_copy_url_copied">Adres URL skopiowany do schowka</string>
|
||||
<string name="detail_item_menu_copy_contents">Kopiuj powiadomienie</string>
|
||||
<string name="detail_item_menu_copy_contents_copied">Powiadomienie skopiowane do schowka</string>
|
||||
<string name="detail_item_saved_successfully">Zapisane jako \"%1$s\" w folderze \"Downloads\"</string>
|
||||
<string name="detail_item_cannot_download">Nie można otworzyć lub pobrać załącznika. Link wygasł i nie można było znaleźć lokalnego pliku.</string>
|
||||
<string name="detail_item_cannot_open">Nie można otworzyć załącznika: %1$s</string>
|
||||
<string name="detail_item_cannot_open_not_found">Nie można otworzyć załącznika: Plik mógł zostać usunięty lub żadna zainstalowana aplikacja nie może go otworzyć.</string>
|
||||
<string name="detail_item_download_info_downloading_x_percent">%1$d%% pobrano</string>
|
||||
<string name="detail_menu_settings">Ustawienia subskrypcji</string>
|
||||
<string name="detail_action_mode_delete_dialog_permanently_delete">Usuń trwale</string>
|
||||
<string name="detail_settings_title">Ustawienia subskrypcji</string>
|
||||
<string name="share_title">Udostępnij</string>
|
||||
<string name="share_content_title">Podgląd wiadomości</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">Wybierz adres URL usługi</string>
|
||||
<string name="detail_how_to_intro">Aby wysłać powiadomienia do tego tematu, wyślij PUT lub POST-Request na adres URL tematu.</string>
|
||||
<string name="detail_how_to_example">Przykład (za pomocą curl):<br/><tt>$ curl -d \"Cześć\" %1$s</tt></string>
|
||||
<string name="detail_how_to_link">Szczegółowe instrukcje są dostępne w ntfy.sh, oraz w dokumentacji.</string>
|
||||
<string name="detail_clear_dialog_message">Usunąć wszystkie powiadomienia z tego tematu\?</string>
|
||||
<string name="detail_item_tags">Tagi: %1$s</string>
|
||||
<string name="detail_item_download_info_deleted">usunięto</string>
|
||||
<string name="detail_item_download_info_deleted_expires_x">usunięto, łącze wygasa %1$s</string>
|
||||
<string name="detail_item_download_info_download_failed">pobieranie nie powiodło się</string>
|
||||
<string name="share_content_image_text">Podzielono się z Tobą obrazem</string>
|
||||
<string name="share_suggested_topics">Sugerowane tematy</string>
|
||||
<string name="share_successful">Wiadomość opublikowana</string>
|
||||
<string name="notification_dialog_title">Wycisz powiadomienia</string>
|
||||
<string name="notification_dialog_enabled_toast_message">Powiadomienia wznowione</string>
|
||||
<string name="notification_dialog_muted_forever_toast_message">Powiadomienia wyciszone</string>
|
||||
<string name="notification_popup_file">%1$s
|
||||
\nPlik: %2$s</string>
|
||||
<string name="notification_popup_file_downloading">Pobieranie %1$s, %2$d%%
|
||||
\n%3$s</string>
|
||||
<string name="notification_popup_file_download_successful">%1$s
|
||||
\nPlik: %2$s, pobrany</string>
|
||||
<string name="notification_popup_file_download_failed">%1$s
|
||||
\nPlik: %2$s, pobieranie nie powiodło się</string>
|
||||
<string name="settings_notifications_header">Powiadomienia</string>
|
||||
<string name="settings_notifications_muted_until_show_all">Wszystkie powiadomienia</string>
|
||||
<string name="settings_notifications_muted_until_x">Powiadomienia wyciszone przez %1$s</string>
|
||||
<string name="settings_notifications_min_priority_title">Minimalny priorytet</string>
|
||||
<string name="settings_notifications_min_priority_summary_any">Wszystkie powiadomienia</string>
|
||||
<string name="settings_notifications_min_priority_summary_x_or_higher">Pokaż powiadomienia, jeśli priorytet jest %1$d (%2$s) lub wyższy</string>
|
||||
<string name="settings_notifications_min_priority_summary_max">Pokaż powiadomienia, jeśli priorytet wynosi 5 (max)</string>
|
||||
<string name="settings_notifications_min_priority_min">Dowolny priorytet</string>
|
||||
<string name="settings_notifications_min_priority_low">Niski priorytet i wyższy</string>
|
||||
<string name="settings_notifications_min_priority_max">Tylko maksymalny priorytet</string>
|
||||
<string name="settings_notifications_priority_min">minimum</string>
|
||||
<string name="settings_notifications_priority_low">niski</string>
|
||||
<string name="settings_notifications_priority_default">podstawowy</string>
|
||||
<string name="settings_notifications_priority_high">wysoki</string>
|
||||
<string name="settings_notifications_priority_max">maksymalny</string>
|
||||
<string name="settings_notifications_auto_download_title">Pobierz załączniki</string>
|
||||
<string name="settings_notifications_auto_download_summary_always">Automatycznie pobierz wszystkie załączniki</string>
|
||||
<string name="settings_notifications_auto_download_summary_never">Nigdy automatycznie nie pobieraj wszystkich załączników</string>
|
||||
<string name="settings_notifications_auto_download_summary_smaller_than_x">Automatycznie pobierz załączniki do %1$s</string>
|
||||
<string name="settings_notifications_auto_download_never">Nigdy nie pobieraj niczego automatycznie</string>
|
||||
<string name="settings_notifications_auto_download_always">Automatycznie pobieraj wszystko</string>
|
||||
<string name="settings_notifications_auto_download_100k">Jeśli poniżej 100 kB</string>
|
||||
<string name="settings_notifications_auto_download_1m">Jeśli poniżej 1 MB</string>
|
||||
<string name="settings_notifications_auto_download_10m">Jeśli poniżej 10 MB</string>
|
||||
<string name="settings_notifications_auto_download_50m">Jeśli poniżej 50 MB</string>
|
||||
<string name="settings_notifications_channel_prefs_summary">Zastąpić DND (nie przeszkadzać), dźwięki itp.</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_month">Automatycznie usuń powiadomienia po miesiącu</string>
|
||||
<string name="settings_notifications_auto_delete_never">Nigdy</string>
|
||||
<string name="settings_notifications_auto_delete_one_day">Po jednym dniu</string>
|
||||
<string name="settings_notifications_auto_delete_three_days">Po 3 dniach</string>
|
||||
<string name="settings_notifications_auto_delete_one_week">Po tygodniu</string>
|
||||
<string name="settings_notifications_auto_delete_three_months">Po 3 miesiącach</string>
|
||||
<string name="settings_general_header">Ogólne</string>
|
||||
<string name="settings_general_default_base_url_default_summary">%1$s (domyślny)</string>
|
||||
<string name="settings_general_users_title">Zarządzaj użytkownikami</string>
|
||||
<string name="settings_general_users_summary">Dodaj/usuń użytkowników dla tematów chronionych</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_many">Używane przez tematy %1$s</string>
|
||||
<string name="settings_general_users_prefs_user_add">Dodaj użytkowników</string>
|
||||
<string name="settings_general_users_prefs_user_add_title">Dodaj nowego użytkownika</string>
|
||||
<string name="settings_general_users_prefs_user_add_summary">Stwórz nowego użytkownika dla nowego serwera</string>
|
||||
<string name="settings_general_dark_mode_summary_system">Używanie domyślnych ustawień systemu</string>
|
||||
<string name="settings_general_dark_mode_summary_dark">Tryb ciemny włączony. Jesteś wampirem\?</string>
|
||||
<string name="settings_backup_restore_backup_title">Kopia zapasowa do pliku</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything">Wszystko</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything_no_users">Wszystko, z wyjątkiem użytkowników</string>
|
||||
<string name="settings_backup_restore_backup_entry_settings_only">Tylko ustawienia</string>
|
||||
<string name="settings_backup_restore_backup_successful">Kopia zapasowa utworzona</string>
|
||||
<string name="settings_backup_restore_backup_failed">Kopia zapasowa nie powiodła się: %1$s</string>
|
||||
<string name="settings_backup_restore_restore_title">Przywróc z pliku</string>
|
||||
<string name="settings_backup_restore_restore_summary">Importuj konfigurację, powiadomienia i użytkowników</string>
|
||||
<string name="settings_backup_restore_restore_successful">Przywrócono pomyślnie</string>
|
||||
<string name="settings_advanced_header">Zaawansowane</string>
|
||||
<string name="settings_advanced_broadcast_title">Roześlij wiadomości</string>
|
||||
<string name="settings_advanced_record_logs_summary_enabled">Rejestrowanie (do 1000 wpisów) do urządzenia …</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_original">Prześlij i kopiuj łącze</string>
|
||||
<string name="settings_advanced_record_logs_title">Zapisz logi</string>
|
||||
<string name="settings_advanced_export_logs_title">Kopiuj/wyślij logi</string>
|
||||
<string name="settings_advanced_export_logs_copied_logs">Logi skopiowane do schowka</string>
|
||||
<string name="settings_advanced_export_logs_uploading">Przesyłanie logów …</string>
|
||||
<string name="settings_advanced_export_logs_copied_url">Logi przesłane i URL skopiowane</string>
|
||||
<string name="settings_general_default_base_url_message">Wpisz tutaj główny adres URL swojego serwera, aby używać go jako domyślnego podczas subskrybowania nowych tematów i/lub udostępniania.</string>
|
||||
<string name="user_dialog_title_add">Dodaj użytkownika</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_empty">Żadne tematy/nazwy hostów nie zostały zredagowane. Może nie masz żadnych subskrypcji\?</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_button_ok">OK</string>
|
||||
<string name="settings_advanced_clear_logs_summary">Usuń poprzednio zarejestrowane logi i zacznij od nowa</string>
|
||||
<string name="settings_advanced_export_logs_error_uploading">Przesyłanie logów nie powiodło się: %1$s</string>
|
||||
<string name="detail_settings_notifications_instant_title">Natychmiastowe dostarczanie</string>
|
||||
<string name="settings_advanced_connection_protocol_title">Protokół połączenia</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_jsonhttp">Strumień JSON przez HTTP</string>
|
||||
<string name="settings_about_version_title">Wersja</string>
|
||||
<string name="settings_about_version_format">ntfy %1$s (%2$s)</string>
|
||||
<string name="settings_about_version_copied_to_clipboard_message">Skopiowano do schowka</string>
|
||||
<string name="detail_settings_notifications_instant_summary_on">Powiadomienia są dostarczane natychmiastowo. Wymaga usługi pierwszego planu i zużywa więcej baterii.</string>
|
||||
<string name="detail_settings_appearance_header">Wygląd</string>
|
||||
<string name="detail_settings_appearance_icon_set_title">Ikona subskrypcji</string>
|
||||
<string name="detail_settings_appearance_icon_set_summary">Wybierz ikonę, która ma być wyświetlana w powiadomieniach</string>
|
||||
<string name="detail_settings_appearance_icon_remove_title">Ikona subskrypcji (dotknij, aby usunąć)</string>
|
||||
<string name="detail_settings_appearance_icon_remove_summary">Ikona wyświetlana w powiadomieniach dla tego tematu</string>
|
||||
<string name="detail_settings_appearance_icon_error_saving">Nie można zapisać ikony: %1$s</string>
|
||||
<string name="main_banner_websocket_text">Przełączanie do WebSockets jest zalecanym sposobem łączenia się z Twoim serwerem, i może poprawić żywotność baterii, ale może wymagać <a href="https://ntfy.sh/docs/config/#nginxapache2caddy">dodatkowej konfiguracji w proxy</a>. To może być przełączane w ustawieniach.</string>
|
||||
<string name="main_banner_websocket_button_remind_later">Zapytaj później</string>
|
||||
<string name="main_banner_websocket_button_dismiss">Odrzuć</string>
|
||||
<string name="main_banner_websocket_button_enable_now">Aktywuj teraz</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Użyj strumienia JSON przez HTTP, aby połączyć się z serwerem. Ta metoda jest sprawdzona, ale może zużywać więcej baterii.</string>
|
||||
<string name="main_menu_donate_title">Wspomóż💸</string>
|
||||
<string name="detail_item_cannot_open_apk">Aplikacja nie może zostać zainstalowana. Pobierz ją poprzez przeglądarkę. Sprawdź problem #531 po więcej informacji.</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">Nadal wysyłaj powiadomienia dla najwyższych priorytetów</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Własne ustawienia powiadomień</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">Używa własnych ustawień dla tej subskrypcji</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Skonfiguruj ustawienia powiadomień</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">Nadpisanie trybu nie przeszkadzać, dźwięki, itp.</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Cały czas alarmuj</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Wyślij alarm tylko raz</string>
|
||||
<string name="channel_notifications_group_default_name">Domyślne</string>
|
||||
<string name="settings_advanced_unifiedpush_title">Załącz</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">Powiadomienia o najwyższym priorytecie wysyłają alarm do czasu ich potwierdzenia</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">Powiadomienia o najwyższym priorytecie wysyłają powiadomienie tylko raz</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">Ntfy będzie działać jako dystrybutor UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">Ntfy nie będzie dystrybutorem UnifiedPush</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">Używa domyślnych ustawień (dźwięki, nadpisanie trybu nie przeszkadzać, itp.)</string>
|
||||
</resources>
|
|
@ -4,14 +4,14 @@
|
|||
<string name="detail_menu_test">Enviar notificação de teste</string>
|
||||
<string name="detail_menu_copy_url">Copiar endereço do tema</string>
|
||||
<string name="notification_dialog_show_all">Mostrar todas notificações</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">Inscrito em três tópicos de entrega instantânea</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">Inscrito em quatro tópicos de entrega instantânea</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">Inscrito em três temas de entrega instantânea</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">Inscrito em quatro temas de entrega instantânea</string>
|
||||
<string name="channel_notifications_default_name">Notificações (prioridade padrão)</string>
|
||||
<string name="channel_notifications_min_name">Notificações (prioridade mínima)</string>
|
||||
<string name="main_menu_notifications_enabled">Notificações ativadas</string>
|
||||
<string name="main_menu_settings_title">Configurações</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">Inscrito em tópicos</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">Inscrito em três tópicos</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">Inscrito em temas</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">Inscrito em três temas</string>
|
||||
<string name="main_menu_report_bug_title">Relatar um problema</string>
|
||||
<string name="main_item_status_reconnecting">Reconectando …</string>
|
||||
<string name="channel_notifications_high_name">Notificações (prioridade alta)</string>
|
||||
|
@ -19,35 +19,35 @@
|
|||
<string name="channel_subscriber_service_name">Serviço de Assinatura</string>
|
||||
<string name="channel_subscriber_notification_title">Aguardando notificações</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Inscrito em temas de entrega instantânea</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Inscrito em um tópico de entrega instantânea</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">Inscrito em %1$d tópicos de entrega instantânea</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">Inscrito em dois tópicos</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">Inscrito em quatro tópicos</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">Inscrito em %1$d tópicos</string>
|
||||
<string name="refresh_message_result">%1$d notificação(ões) recebida(s)</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Inscrito em um tema de entrega instantânea</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">Inscrito em %1$d temas de entrega instantânea</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">Inscrito em dois temas</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">Inscrito em quatro temas</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">Inscrito em %1$d temas</string>
|
||||
<string name="refresh_message_result">%1$d notificações recebidas</string>
|
||||
<string name="refresh_message_no_results">Tudo está atualizado</string>
|
||||
<string name="refresh_message_error">Não foi possível atualizar %1$d subscrições
|
||||
<string name="refresh_message_error">Não foi possível atualizar %1$d inscrições
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="main_action_bar_title">Temas inscritos</string>
|
||||
<string name="main_menu_notifications_disabled_until">Notificações silenciadas até %1$s</string>
|
||||
<string name="main_menu_rate_title">Avalie o aplicativo ⭐</string>
|
||||
<string name="main_action_mode_delete_dialog_message">Cancelar inscrição dos tópicos selecionados e remover permanentemente todas notificações\?</string>
|
||||
<string name="main_action_mode_delete_dialog_message">Cancelar inscrição dos temas selecionados e remover permanentemente todas notificações\?</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">Remover permanentemente</string>
|
||||
<string name="main_action_mode_delete_dialog_cancel">Cancelar</string>
|
||||
<string name="main_item_date_yesterday">ontem</string>
|
||||
<string name="main_add_button_description">Adicionar Subscrição</string>
|
||||
<string name="main_add_button_description">Inscrever-se</string>
|
||||
<string name="main_no_subscriptions_text">Parece que você não tem nenhuma inscrição ainda.</string>
|
||||
<string name="main_how_to_link">Instruções detalhadas disponíveis em ntfy.sh, e na documentação.</string>
|
||||
<string name="main_banner_battery_text">O modo Economia de Energia deve estar desligado para evitar problemas de entrega de notificação no aplicativo.</string>
|
||||
<string name="main_item_status_unified_push">%1$s(UnifiedPush)</string>
|
||||
<string name="main_banner_battery_text">Otimização de bateria deve estar desligada para evitar problemas de entrega de notificação no aplicativo.</string>
|
||||
<string name="main_item_status_unified_push">%1$s (UnifiedPush)</string>
|
||||
<string name="main_banner_websocket_button_remind_later">Perguntar depois</string>
|
||||
<string name="main_banner_websocket_button_dismiss">Dispensar</string>
|
||||
<string name="add_dialog_title">Inscrever-se no tópico</string>
|
||||
<string name="add_dialog_description_below">Os tópicos podem não ser protegidos por senha, escolha um nome difícil de adivinhar. Uma vez inscrito, você pode usar as notificações PUT/POST.</string>
|
||||
<string name="add_dialog_topic_name_hint">Nome do tópico, ex: alertas_jose</string>
|
||||
<string name="add_dialog_title">Inscrever-se no tema</string>
|
||||
<string name="add_dialog_description_below">Temas podem não ser protegidos por senha, escolha um nome difícil de adivinhar. Uma vez inscrito, você pode usar as notificações PUT/POST.</string>
|
||||
<string name="add_dialog_topic_name_hint">Nome do tema, ex: alertas_jose</string>
|
||||
<string name="add_dialog_use_another_server">Usar outro servidor</string>
|
||||
<string name="add_dialog_use_another_server_description">Insira as URLs do servidor abaixo para inscrever-se nos tópicos de outros servidores.</string>
|
||||
<string name="add_dialog_use_another_server_description">Insira as URLs do servidor abaixo para inscrever-se nos temas de outros servidores.</string>
|
||||
<string name="add_dialog_foreground_description">Entrega instantânea está sempre ligada para hosts, exceto %1$s.</string>
|
||||
<string name="add_dialog_button_back">Voltar</string>
|
||||
<string name="add_dialog_error_connection_failed">Conexão falhou: %1$s</string>
|
||||
|
@ -55,9 +55,9 @@
|
|||
<string name="add_dialog_login_username_hint">Nome de usuário</string>
|
||||
<string name="add_dialog_login_error_not_authorized">Login falhou. Usuário %1$s não autorizado.</string>
|
||||
<string name="add_dialog_login_new_user">Novo usuário</string>
|
||||
<string name="detail_no_notifications_text">Você não recebeu nenhuma notificação desse tópico ainda.</string>
|
||||
<string name="detail_no_notifications_text">Você não recebeu nenhuma notificação desse tema ainda.</string>
|
||||
<string name="detail_how_to_example">Exemplo (usando curl): <br/><tt>$ curl -d \"Oi\" %1$s</tt></string>
|
||||
<string name="detail_clear_dialog_message">Apagar todas as notificações desse tópico\?</string>
|
||||
<string name="detail_clear_dialog_message">Apagar todas as notificações desse tema\?</string>
|
||||
<string name="detail_clear_dialog_permanently_delete">Apagar permanentemente</string>
|
||||
<string name="detail_delete_dialog_message">Cancelar inscrição desse tema e apagar todas as notificações recebidas\?</string>
|
||||
<string name="detail_delete_dialog_cancel">Cancelar</string>
|
||||
|
@ -184,9 +184,9 @@
|
|||
<string name="settings_advanced_clear_logs_title">Limpar logs</string>
|
||||
<string name="settings_advanced_clear_logs_summary">Apagar logs registrados anteriormente e recomeçar</string>
|
||||
<string name="settings_advanced_connection_protocol_title">Protocolo de conexão</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Usar WebSockets para se conectar ao servidor. Este é o método recomendado, mas pode exigir configurações adicionais no seu proxy.</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Usar WebSockets para conectar ao servidor. Isso irá se tornar o padrão em Junho de 2022.</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_jsonhttp">Stream JSON sobre HTTP</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">Web Sockets</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">WebSockets</string>
|
||||
<string name="settings_about_header">Sobre</string>
|
||||
<string name="settings_about_version_title">Versão</string>
|
||||
<string name="settings_about_version_format">ntfy %1$s (%2$s)</string>
|
||||
|
@ -199,29 +199,29 @@
|
|||
<string name="user_dialog_button_cancel">Cancelar</string>
|
||||
<string name="user_dialog_button_delete">Apagar usuário</string>
|
||||
<string name="channel_notifications_low_name">Notificações (prioridade baixa)</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Inscrito em dois tópicos de entrega instantânea</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Inscrito em dois temas de entrega instantânea</string>
|
||||
<string name="user_dialog_button_save">Salvar</string>
|
||||
<string name="main_item_status_text_one">%1$d notificação</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">Inscrito em um tópico</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">Inscrito em um tema</string>
|
||||
<string name="main_menu_notifications_disabled_forever">Notificações silenciadas</string>
|
||||
<string name="refresh_message_error_one">Não foi possível atualizar a inscrição: %1$s</string>
|
||||
<string name="main_menu_docs_title">Leia a documentação</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">Cancelar inscrição</string>
|
||||
<string name="main_unified_push_toast">Essa inscrição é gerenciada por %1$s via UnifiedPush</string>
|
||||
<string name="main_item_status_text_not_one">%1$d notificações</string>
|
||||
<string name="main_how_to_intro">Clique no + para criar ou inscrever-se em um tópico. Em seguida você receberá notificações no seu dispositivo ao enviar mensagens via PUT ou POST.</string>
|
||||
<string name="main_how_to_intro">Clique no + para criar ou inscrever-se em um tema. Você receberá notificações no seu dispositivo ao enviar mensagens via PUT ou POST.</string>
|
||||
<string name="main_banner_battery_button_remind_later">Perguntar depois</string>
|
||||
<string name="main_banner_battery_button_dismiss">Dispensar</string>
|
||||
<string name="add_dialog_button_subscribe">Inscrever-se</string>
|
||||
<string name="main_banner_battery_button_fix_now">Consertar agora</string>
|
||||
<string name="add_dialog_instant_delivery">Entrega instantânea em modo descanso</string>
|
||||
<string name="add_dialog_instant_delivery">Entrega instantânea em modo soneca</string>
|
||||
<string name="add_dialog_button_cancel">Cancelar</string>
|
||||
<string name="add_dialog_instant_delivery_description">Garante que as mensagens são entregues imediatamente, mesmo se o dispositivo estiver inativo.</string>
|
||||
<string name="add_dialog_button_login">Entrar</string>
|
||||
<string name="add_dialog_login_password_hint">Senha</string>
|
||||
<string name="add_dialog_login_description">Este tópico requer login. Insira um nome de usuário e senha.</string>
|
||||
<string name="add_dialog_login_description">Esse tema requer login. Insira um nome de usuário e senha.</string>
|
||||
<string name="detail_item_snack_deleted">Notificação removida</string>
|
||||
<string name="detail_how_to_intro">Para enviar notificações para esse tópico, basta usar os métodos PUT ou POST na URL do tema.</string>
|
||||
<string name="detail_how_to_intro">Para enviar notificações para esse tema, basta usar os métodos PUT ou POST na URL do tema.</string>
|
||||
<string name="detail_how_to_link">Instruções detalhadas disponíveis em ntfy.sh e na documentação.</string>
|
||||
<string name="detail_clear_dialog_cancel">Cancelar</string>
|
||||
<string name="detail_delete_dialog_permanently_delete">Apagar permanentemente</string>
|
||||
|
@ -246,7 +246,7 @@
|
|||
<string name="settings_advanced_export_logs_scrub_dialog_empty">Nenhum tema/hostname foram censurados. Talvez você não tenha inscrições\?</string>
|
||||
<string name="settings_advanced_clear_logs_deleted_toast">Logs apagados</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_original">Copiar para área de transferência</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Usar um stream JSON via HTTP para conectar ao servidor. Esse método já funciona bem mas pode consumir mais bateria.</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Usar uma stream JSON sobre HTTP para conectar ao servidor. Esse método foi descontinuado e será removido em Junho de 2022.</string>
|
||||
<string name="user_dialog_description_add">Você pode adicionar um usuário aqui. Todos os temas para esse servidor usarão esse usuário.</string>
|
||||
<string name="user_dialog_username_hint">Nome de usuário</string>
|
||||
<string name="user_dialog_password_hint_edit">Senha (não será modificado se deixado em branco)</string>
|
||||
|
@ -317,30 +317,4 @@
|
|||
<string name="channel_subscriber_notification_instant_text_six">Inscrito em seis tópicos de entrega instantânea</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_five">Inscrito em cinco tópicos</string>
|
||||
<string name="detail_settings_global_setting_suffix">usando configurações globais</string>
|
||||
<string name="detail_settings_appearance_display_name_title">Nome de exibição</string>
|
||||
<string name="detail_settings_appearance_display_name_default_summary">%1$s (padrão)</string>
|
||||
<string name="detail_settings_appearance_display_name_message">Defina um nome personalizado para esta inscrição. Deixe em branco para padrão (%1$s).</string>
|
||||
<string name="main_banner_websocket_text">Mudar para WebSockets é o modo recomendado de conectar ao seu servidor, e pode melhorar a vida da bateria, mas pode necessitar de <a href="https://ntfy.sh/docs/config/#nginxapache2caddy">configurações adicionais no seu proxy</a>. Isso pode ser habilitado nas Configurações.</string>
|
||||
<string name="detail_settings_about_header">Sobre</string>
|
||||
<string name="detail_settings_about_topic_url_title">URL do tópico</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">Copiado para área de transferência</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">Escolha o URL do serviço</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">Limpar o URL do serviço</string>
|
||||
<string name="main_banner_websocket_button_enable_now">Habilitar agora</string>
|
||||
<string name="channel_notifications_group_default_name">Padrão</string>
|
||||
<string name="main_menu_donate_title">Doar 💸</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">Notificações de prioridade máxima alertam apenas uma vez</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Definir configurações de notificação</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">Sobrepor Não Perturbe (DND), sons, etc.</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfy não atuará como distribuidor UnifiedPush</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Configurações de notificação personalizadas</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Alertar apenas uma vez</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">Usando configurações personalizadas para esta assinatura</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">Usando configurações padrão (sons, substituição de Não perturbe, etc.)</string>
|
||||
<string name="detail_item_cannot_open_apk">Apps não podem mais ser instalados, baixe pelo navegador. Veja a issue #531 para detalhes.</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">Continue alertando para a prioridade mais alta</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">Notificações de prioridade máxima alertam continuamente até serem dispensadas</string>
|
||||
<string name="settings_advanced_unifiedpush_title">Habilitar UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy vai agir como um distribuidor UnifiedPush</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Continuar alertando</string>
|
||||
</resources>
|
||||
</resources>
|
||||
|
|
|
@ -1,343 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_subscriber_notification_instant_text_three">Três tópicos de entrega instantânea subscritos</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">Quatro tópicos de entrega instantânea subscritos</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">Cinco tópicos de entrega instantânea subscritos</string>
|
||||
<string name="channel_subscriber_notification_instant_text_six">Seis tópicos de entrega instantânea subscritos</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">%1$d tópico(s) de entrega instantânea subscrito(s)</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">Tópicos subscritos</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">Um tópico subscrito</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">Dois tópicos subscritos</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">Três tópicos subscritos</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_six">Seis tópicos subscritos</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">%1$d tópico(s) subscrito(s)</string>
|
||||
<string name="refresh_message_result">%1$d notificação(ões) recebida(s)</string>
|
||||
<string name="refresh_message_no_results">Está tudo atualizado</string>
|
||||
<string name="refresh_message_error">Não foi possível atualizar %1$d subscrição(ões)
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="refresh_message_error_one">Não foi possível atualizar a subscrição: %1$s</string>
|
||||
<string name="main_action_bar_title">Tópicos subscritos</string>
|
||||
<string name="main_menu_notifications_enabled">Notificações ativadas</string>
|
||||
<string name="main_menu_notifications_disabled_forever">Notificações silenciadas</string>
|
||||
<string name="channel_notifications_min_name">Prioridade mínima</string>
|
||||
<string name="channel_notifications_low_name">Prioridade baixa</string>
|
||||
<string name="channel_subscriber_service_name">Serviço de subscrição</string>
|
||||
<string name="channel_subscriber_notification_title">À escuta de novas notificações</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Tópicos de entrega instantânea subscritos</string>
|
||||
<string name="main_menu_notifications_disabled_until">Notificações silenciadas até %1$s</string>
|
||||
<string name="main_menu_settings_title">Configurações</string>
|
||||
<string name="main_menu_report_bug_title">Reportar um problema</string>
|
||||
<string name="main_menu_docs_title">Ler a documentação</string>
|
||||
<string name="main_menu_rate_title">Avaliar a aplicação ⭐</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">Cancelar subscrição</string>
|
||||
<string name="main_action_mode_delete_dialog_message">Cancelar a subscrição do(s) tópico(s) selecionado(s) e eliminar permanentemente todas as notificações\?</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">Eliminar permanentemente</string>
|
||||
<string name="main_action_mode_delete_dialog_cancel">Cancelar</string>
|
||||
<string name="main_item_status_text_one">%1$d notificação</string>
|
||||
<string name="main_item_status_text_not_one">%1$d notificações</string>
|
||||
<string name="main_item_status_reconnecting">A restabelecer ligação …</string>
|
||||
<string name="main_item_date_yesterday">ontem</string>
|
||||
<string name="main_add_button_description">Adicionar subscrição</string>
|
||||
<string name="main_no_subscriptions_text">Parece que ainda não tem subscrições.</string>
|
||||
<string name="main_how_to_link">Instruções detalhadas disponíveis em ntfy.sh, e na documentação.</string>
|
||||
<string name="main_unified_push_toast">Esta subscrição é controlada por %1$s via UnifiedPush</string>
|
||||
<string name="main_banner_battery_text">A otimização de bateria deve estar desativada para a aplicação, de modo a evitar problemas na receção de notificações.</string>
|
||||
<string name="main_banner_battery_button_remind_later">Perguntar depois</string>
|
||||
<string name="main_banner_battery_button_dismiss">Dispensar</string>
|
||||
<string name="main_banner_battery_button_fix_now">Corrigir agora</string>
|
||||
<string name="main_banner_websocket_button_remind_later">Perguntar depois</string>
|
||||
<string name="add_dialog_title">Subscrever tópico</string>
|
||||
<string name="add_dialog_topic_name_hint">Nome do tópico, por exemplo: \"alertas_do_filipe\"</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">Quatro tópicos subscritos</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_five">Cinco tópicos subscritos</string>
|
||||
<string name="main_how_to_intro">Clique no + para subscrever um tópico. Depois, receberá notificações no seu dispositivo quando enviar mensagens via PUT ou POST.</string>
|
||||
<string name="channel_notifications_max_name">Prioridade máxima</string>
|
||||
<string name="main_banner_websocket_text">Trocar para WebSockets é a forma recomendada de se ligar ao seu servidor, podendo melhorar a duração da bateria, mas pode necessitar <a href="https://ntfy.sh/docs/config/#nginxapache2caddy">configurações adicionais no seu \"proxy\"</a>. Isto pode ser alterado nas Configurações.</string>
|
||||
<string name="main_banner_websocket_button_dismiss">Dispensar</string>
|
||||
<string name="channel_notifications_default_name">Prioridade padrão</string>
|
||||
<string name="channel_notifications_high_name">Prioridade alta</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Um tópico de entrega instantânea subscrito</string>
|
||||
<string name="main_banner_websocket_button_enable_now">Ativar agora</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Dois tópicos de entrega instantânea subscritos</string>
|
||||
<string name="add_dialog_description_below">Tópicos podem não ser protegidos por palavra-passe, portanto escolha um nome que seja difícil de adivinhar. Uma vez inscrito, poderá enviar notificações PUT/POST.</string>
|
||||
<string name="main_item_status_unified_push">%1$s (UnifiedPush)</string>
|
||||
<string name="add_dialog_use_another_server">Utilizar outro servidor</string>
|
||||
<string name="add_dialog_button_login">Entrar</string>
|
||||
<string name="add_dialog_login_title">Autenticação necessária</string>
|
||||
<string name="detail_clear_dialog_message">Deseja eliminar todas as notificações nesse tópico\?</string>
|
||||
<string name="detail_clear_dialog_permanently_delete">Eliminar permanentemente</string>
|
||||
<string name="detail_delete_dialog_permanently_delete">Eliminar permanentemente</string>
|
||||
<string name="detail_delete_dialog_cancel">Cancelar</string>
|
||||
<string name="detail_test_title">Teste: Pode definir um título se quiser.</string>
|
||||
<string name="detail_test_message_error">Não foi possível enviar a mensagem: %1$s</string>
|
||||
<string name="detail_test_message_error_unauthorized_anon">Não foi possível enviar a mensagem: Publicações anónimas não são permitidas.</string>
|
||||
<string name="detail_copied_to_clipboard_message">Copiado para a área de transferência</string>
|
||||
<string name="detail_deep_link_subscribed_toast_message">Tópico \"%1$s\" subscrito</string>
|
||||
<string name="detail_item_tags">Etiquetas: %1$s</string>
|
||||
<string name="detail_item_snack_deleted">Notificação eliminada</string>
|
||||
<string name="detail_item_snack_undo">Desfazer</string>
|
||||
<string name="detail_item_menu_download">Descarregar ficheiro</string>
|
||||
<string name="detail_item_menu_cancel">Cancelar a descarga</string>
|
||||
<string name="detail_item_cannot_open">Não foi possível abrir o anexo: %1$s</string>
|
||||
<string name="detail_item_cannot_open_not_found">Não foi possível abrir o anexo: O ficheiro pode ter sido eliminado, ou não existe nenhuma aplicação instalada que o consiga abrir.</string>
|
||||
<string name="detail_item_cannot_open_url">Não foi possível abrir o URL: %1$s</string>
|
||||
<string name="detail_item_cannot_save">Não foi possível guardar o anexo: %1$s</string>
|
||||
<string name="detail_item_cannot_delete">Não foi possível eliminar o anexo: %1$s</string>
|
||||
<string name="detail_item_download_failed">Não foi possível descarregar o anexo: %1$s</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expires_x">não foi decarregado, expira em %1$s</string>
|
||||
<string name="detail_item_download_info_downloading_x_percent">%1$d%% decarregado</string>
|
||||
<string name="detail_item_download_info_deleted">eliminado</string>
|
||||
<string name="detail_item_download_info_deleted_expired">eliminado, a ligação expirou</string>
|
||||
<string name="detail_item_download_info_deleted_expires_x">eliminado, a ligação expira em %1$s</string>
|
||||
<string name="detail_item_download_info_download_failed">falha ao descarregar</string>
|
||||
<string name="detail_item_download_info_download_failed_expired">falha ao descarregar, a ligação expirou</string>
|
||||
<string name="detail_item_download_info_download_failed_expires_x">falha ao descarregar, a ligação expira em %1$s</string>
|
||||
<string name="detail_menu_notifications_enabled">Notificações atvadas</string>
|
||||
<string name="detail_menu_notifications_disabled_forever">Notificações silenciadas</string>
|
||||
<string name="detail_menu_enable_instant">Ativar a entrega instantânea</string>
|
||||
<string name="detail_menu_disable_instant">Desativar a entrega instantânea</string>
|
||||
<string name="detail_menu_test">Enviar uma notificação de teste</string>
|
||||
<string name="detail_menu_copy_url">Copiar o endereço do tópico</string>
|
||||
<string name="detail_menu_clear">Limpar todas as notificações</string>
|
||||
<string name="detail_menu_settings">Configurações das subscrições</string>
|
||||
<string name="detail_menu_unsubscribe">Anular subscrição</string>
|
||||
<string name="detail_action_mode_menu_delete">Eliminar</string>
|
||||
<string name="detail_action_mode_delete_dialog_message">Deseja eliminar permanentemente a(s) notificação(ões) selecionada(s)\?</string>
|
||||
<string name="detail_action_mode_delete_dialog_permanently_delete">Eliminar permanentemente</string>
|
||||
<string name="detail_action_mode_delete_dialog_cancel">Cancelar</string>
|
||||
<string name="detail_settings_title">Configurações das subscrições</string>
|
||||
<string name="share_title">Partilhar</string>
|
||||
<string name="share_menu_send">Partilhar</string>
|
||||
<string name="share_content_title">Pré-visualização da mensagem</string>
|
||||
<string name="share_content_image_text">Uma imagem foi partilhada consigo</string>
|
||||
<string name="share_topic_title">Partilhar para</string>
|
||||
<string name="share_suggested_topics">Tópicos sugeridos</string>
|
||||
<string name="share_successful">Mensagem publicada</string>
|
||||
<string name="notification_dialog_cancel">Cancelar</string>
|
||||
<string name="notification_dialog_save">Guardar</string>
|
||||
<string name="notification_dialog_enabled_toast_message">Notificações retomadas</string>
|
||||
<string name="notification_dialog_muted_until_toast_message">Notificações silenciadas até %1$s</string>
|
||||
<string name="notification_dialog_show_all">Mostrar todas as notificações</string>
|
||||
<string name="notification_dialog_2h">2 horas</string>
|
||||
<string name="notification_dialog_8h">8 horas</string>
|
||||
<string name="notification_dialog_tomorrow">Até amanhã</string>
|
||||
<string name="notification_dialog_forever">Até serem retomadas</string>
|
||||
<string name="notification_popup_action_browse">Navegar</string>
|
||||
<string name="notification_popup_action_download">Descarregar</string>
|
||||
<string name="notification_popup_action_cancel">Cancelar</string>
|
||||
<string name="notification_popup_file">%1$s
|
||||
\nFicheiro: %2$s</string>
|
||||
<string name="notification_popup_file_downloading">A descarregar %1$s, %2$d%%
|
||||
\n%3$s</string>
|
||||
<string name="notification_popup_file_download_successful">%1$s
|
||||
\nFicheiro: %2$s, descarregado</string>
|
||||
<string name="notification_popup_file_download_failed">%1$s
|
||||
\nFicheiro: %2$s, falha ao descarregar</string>
|
||||
<string name="notification_popup_user_action_failed">%1$s falhou: %2$s</string>
|
||||
<string name="settings_title">Configurações</string>
|
||||
<string name="settings_notifications_header">Notificações</string>
|
||||
<string name="settings_notifications_muted_until_title">Silenciar as notificações</string>
|
||||
<string name="settings_notifications_muted_until_show_all">A mostrar todas as notificações</string>
|
||||
<string name="settings_notifications_muted_until_forever">Notificações silenciadas até serem retomadas</string>
|
||||
<string name="settings_notifications_muted_until_x">Notificações silenciadas até %1$s</string>
|
||||
<string name="settings_notifications_min_priority_title">Prioridade mínima</string>
|
||||
<string name="settings_notifications_min_priority_summary_any">A mostrar todas as notificações</string>
|
||||
<string name="settings_notifications_min_priority_summary_x_or_higher">Mostrar notificações se a prioridade for %1$d (%2$s) ou superior</string>
|
||||
<string name="settings_notifications_min_priority_summary_max">Mostrar notificações se a prioridade for 5 (máxima)</string>
|
||||
<string name="settings_notifications_min_priority_min">Qualquer prioridade</string>
|
||||
<string name="settings_notifications_min_priority_low">Prioridade baixa ou superior</string>
|
||||
<string name="settings_notifications_min_priority_default">Prioridade padrão ou superior</string>
|
||||
<string name="settings_notifications_min_priority_high">Prioridade alta ou superior</string>
|
||||
<string name="settings_notifications_min_priority_max">Apenas prioridade máxima</string>
|
||||
<string name="settings_notifications_priority_min">mínima</string>
|
||||
<string name="settings_notifications_priority_low">baixa</string>
|
||||
<string name="settings_notifications_priority_default">padrão</string>
|
||||
<string name="settings_notifications_priority_high">alta</string>
|
||||
<string name="settings_notifications_priority_max">máxima</string>
|
||||
<string name="settings_notifications_channel_prefs_title">Configurações de canal</string>
|
||||
<string name="settings_notifications_channel_prefs_summary">Sobrescrever modo \"Não incomodar\" (NI), sons, etc.</string>
|
||||
<string name="settings_notifications_auto_download_title">Descarregar os anexos</string>
|
||||
<string name="settings_notifications_auto_download_summary_always">Descarregar todos os anexos automaticamente</string>
|
||||
<string name="settings_notifications_auto_download_summary_never">Nunca descarregar todos os anexos automaticamente</string>
|
||||
<string name="settings_notifications_auto_download_summary_smaller_than_x">Descarregar os anexos automaticamente até %1$s</string>
|
||||
<string name="settings_notifications_auto_download_never">Nunca descarregar nada automaticamente</string>
|
||||
<string name="settings_notifications_auto_download_always">Descarregar tudo automaticamente</string>
|
||||
<string name="settings_notifications_auto_download_100k">Se abaixo de 100kB</string>
|
||||
<string name="settings_notifications_auto_download_500k">Se abaixo de 500 kB</string>
|
||||
<string name="settings_notifications_auto_download_1m">Se abaixo de 1 MB</string>
|
||||
<string name="settings_notifications_auto_delete_title">Elminar as notificações</string>
|
||||
<string name="settings_notifications_auto_delete_summary_never">Nunca eliminar as notificações automaticamente</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_day">Elminar as notificações automaticamente após um dia</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_days">Eliminar as notificações automaticamente após 3 dias</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_week">Eliminar as notificações automaticamente após uma semana</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_month">Eliminar as notificações automaticamente após um mês</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_months">Eliminar as notificações automaticamente após 3 meses</string>
|
||||
<string name="settings_notifications_auto_delete_never">Nunca</string>
|
||||
<string name="settings_notifications_auto_delete_one_day">Após um dia</string>
|
||||
<string name="settings_notifications_auto_delete_three_days">Após 3 dias</string>
|
||||
<string name="settings_notifications_auto_delete_one_week">Após uma semana</string>
|
||||
<string name="settings_notifications_auto_delete_one_month">Após um mês</string>
|
||||
<string name="settings_notifications_auto_delete_three_months">Após 3 meses</string>
|
||||
<string name="settings_general_header">Geral</string>
|
||||
<string name="settings_general_default_base_url_title">Servidor padrão</string>
|
||||
<string name="settings_general_default_base_url_message">Insira o URL raíz do servidor para utilizar seu próprio como padrão ao subscrever novos tópicos e/ou partilhar em tópicos.</string>
|
||||
<string name="settings_general_default_base_url_default_summary">%1$s (padrão)</string>
|
||||
<string name="settings_general_users_title">Gerir utilizadores</string>
|
||||
<string name="settings_general_users_summary">Adicionar/remover utilizadores em tópicos protegidos</string>
|
||||
<string name="settings_general_users_prefs_title">Utilizadores</string>
|
||||
<string name="settings_general_users_prefs_user_not_used">Não utilizado por nenhum tópico</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_one">Utilizado pelo tópico %1$s</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_many">Utilizado pelos tópicos %1$s</string>
|
||||
<string name="settings_general_users_prefs_user_add">Adicionar utilizadores</string>
|
||||
<string name="settings_general_users_prefs_user_add_title">Adicionar novo utilizador</string>
|
||||
<string name="settings_general_users_prefs_user_add_summary">Crie um novo utilizador para um novo servidor</string>
|
||||
<string name="settings_general_dark_mode_summary_dark">Modo escuro ligado. Por acaso é um vampiro\?</string>
|
||||
<string name="settings_general_dark_mode_entry_system">Usar a predefinição do sistema</string>
|
||||
<string name="settings_general_dark_mode_entry_light">Modo claro</string>
|
||||
<string name="settings_general_dark_mode_entry_dark">Modo escuro</string>
|
||||
<string name="settings_backup_restore_header">Cópias de segurança e restauro</string>
|
||||
<string name="settings_backup_restore_backup_title">Fazer cópia de segurança para um ficheiro</string>
|
||||
<string name="settings_backup_restore_backup_summary">Exportar as configurações, notificações e utilizadores</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything">Tudo</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything_no_users">Tudo, exceto os utilizadores</string>
|
||||
<string name="settings_backup_restore_backup_entry_settings_only">Apenas as configurações</string>
|
||||
<string name="settings_backup_restore_backup_successful">Cópia criada</string>
|
||||
<string name="settings_backup_restore_backup_failed">Falha ao criar cópia: %1$s</string>
|
||||
<string name="detail_item_saved_successfully">Guardado como \"%1$s\" na pasta \"Downloads\" (\"Transferências\")</string>
|
||||
<string name="detail_item_menu_copy_contents_copied">Notificação copiada para a área de transferência</string>
|
||||
<string name="detail_item_cannot_download">Não foi possível abrir ou descarregar o anexo. A ligação expirou e nenhum ficheiro local foi encontrado.</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expired">não foi descarregado, a ligação expirou</string>
|
||||
<string name="detail_menu_notifications_disabled_until">Notificações silenciadas até %1$s</string>
|
||||
<string name="share_content_image_error">Não foi possível ler a imagem: %1$s</string>
|
||||
<string name="settings_notifications_auto_download_10m">Se abaixo de 10 MB</string>
|
||||
<string name="add_dialog_foreground_description">A entrega instantânea está sempre ligada para \"hosts\" que não sejam %1$s.</string>
|
||||
<string name="add_dialog_use_another_server_description">Insira os URLs de serviço abaixo para subscrever tópicos de outros servidores.</string>
|
||||
<string name="add_dialog_button_cancel">Cancelar</string>
|
||||
<string name="add_dialog_button_subscribe">Subscrever</string>
|
||||
<string name="add_dialog_error_connection_failed">A ligação falhou: %1$s</string>
|
||||
<string name="add_dialog_login_description">Esse tópico necessita autenticação. Por favor, insira um nome de utilizador e palavra-passe.</string>
|
||||
<string name="add_dialog_login_new_user">Novo utilizador</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">Escolha URL de serviço</string>
|
||||
<string name="detail_how_to_example">Exemplo (utilizando curl): <br/><tt>$ curl -d \"Olá\" %1$s</tt></string>
|
||||
<string name="detail_delete_dialog_message">Deseja anular a subscrição deste tópico e eliminar todas as notificações recebidas\?</string>
|
||||
<string name="detail_test_message">Esta é uma notificação de teste da aplicação Android do ntfy. Tem uma prioridade de nível %1$d. Se enviar outra notificação, poderá ser diferente.</string>
|
||||
<string name="detail_test_message_error_too_large">Não foi possível enviar a mensagem: O anexo é grande demais.</string>
|
||||
<string name="detail_instant_delivery_enabled">Entrega instantânea ativada</string>
|
||||
<string name="detail_item_menu_open">Abrir ficheiro</string>
|
||||
<string name="detail_item_menu_save_file">Guardar o ficheiro</string>
|
||||
<string name="detail_item_menu_copy_url">Copiar URL</string>
|
||||
<string name="detail_item_download_info_not_downloaded">não foi descarregado</string>
|
||||
<string name="add_dialog_instant_delivery">Entrega instantânea em modo soneca</string>
|
||||
<string name="add_dialog_instant_delivery_description">Garante que as mensagens são entregues imediatamente, mesmo que o dispositivo esteja inativo.</string>
|
||||
<string name="add_dialog_button_back">Voltar</string>
|
||||
<string name="add_dialog_login_username_hint">Nome de utilizador</string>
|
||||
<string name="add_dialog_login_password_hint">Palavra-passe</string>
|
||||
<string name="add_dialog_login_error_not_authorized">A autenticação falhou. O utilizador \"%1$s\" não foi autorizado.</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">Limpar URL de serviço</string>
|
||||
<string name="detail_no_notifications_text">Ainda não recebeu nenhuma notificação neste tópico.</string>
|
||||
<string name="detail_how_to_intro">Para enviar notificações deste tópico, simplesmente faça um pedido PUT ou POST para o URL do tópico.</string>
|
||||
<string name="detail_how_to_link">Instruções detalhadas disponíveis em ntfy.sh, e na documentação.</string>
|
||||
<string name="detail_clear_dialog_cancel">Cancelar</string>
|
||||
<string name="detail_test_message_error_unauthorized_user">Não foi possível enviar a mensagem: O utilizador \"%1$s\" não está autorizado.</string>
|
||||
<string name="detail_instant_delivery_disabled">Entrega instantânea desativada</string>
|
||||
<string name="detail_item_menu_delete">Eliminar ficheiro</string>
|
||||
<string name="detail_item_menu_copy_url_copied">URL copiado para a área de transferência</string>
|
||||
<string name="detail_item_menu_copy_contents">Copiar notificação</string>
|
||||
<string name="notification_dialog_30min">30 minutos</string>
|
||||
<string name="notification_popup_action_open">Abrir</string>
|
||||
<string name="detail_action_mode_menu_copy">Copiar</string>
|
||||
<string name="share_content_text_hint">Adicione conteúdo a partilhar aqui</string>
|
||||
<string name="share_content_file_error">Não foi possível ler as informações do ficheiro: %1$s</string>
|
||||
<string name="notification_dialog_muted_forever_toast_message">Notificações silenciadas</string>
|
||||
<string name="settings_notifications_auto_download_5m">Se abaixo de 5 MB</string>
|
||||
<string name="share_content_file_text">Um ficheiro foi partilhado consigo</string>
|
||||
<string name="notification_dialog_1h">1 hora</string>
|
||||
<string name="settings_notifications_auto_download_50m">Se abaixo de 50 MB</string>
|
||||
<string name="notification_dialog_title">Silenciar notificações</string>
|
||||
<string name="settings_general_dark_mode_summary_light">Modo claro</string>
|
||||
<string name="settings_general_dark_mode_title">Modo escuro</string>
|
||||
<string name="settings_general_dark_mode_summary_system">Usar a predefinição do sistema</string>
|
||||
<string name="main_menu_donate_title">Doar 💸</string>
|
||||
<string name="settings_backup_restore_restore_failed">Falha ao restaurar %1$s</string>
|
||||
<string name="settings_advanced_header">Avançado</string>
|
||||
<string name="settings_advanced_broadcast_title">Messagens de transmissão</string>
|
||||
<string name="settings_advanced_broadcast_summary_disabled">As aplicações não podem receber notificações como transmissões</string>
|
||||
<string name="settings_advanced_broadcast_summary_enabled">As aplicações podem receber notificações como transmissões</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_original">Copiar para área de transferência</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_scrubbed">Copiar para área de transferência (censurado)</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_original">Enviar e copiar ligação</string>
|
||||
<string name="settings_advanced_export_logs_uploading">A enviar registos …</string>
|
||||
<string name="settings_advanced_export_logs_copied_url">Registos enviados e URL copiado</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Utilizar uma \"stream\" de JSON através de HTTP para se ligar ao servidor. Este método foi bem testado na pratica, mas pode consumir mais bateria.</string>
|
||||
<string name="settings_about_version_format">ntfy %1$s (%2$s)</string>
|
||||
<string name="detail_settings_notifications_instant_summary_off">As notificações são entregues utilizando o Firebase. A entrega pode atrasar, mas consome menos bateria.</string>
|
||||
<string name="detail_settings_appearance_header">Aparência</string>
|
||||
<string name="detail_settings_appearance_icon_set_title">Ícone de subscrição</string>
|
||||
<string name="detail_settings_appearance_icon_set_summary">Defina um ícone para ser exibido nas notificações</string>
|
||||
<string name="detail_settings_appearance_icon_remove_title">Ícone de subscrição (toque para remover)</string>
|
||||
<string name="detail_settings_appearance_display_name_message">Defina um nome de exibição personalizado para esta subscrição. Deixe em branco para o padrão (%1$s).</string>
|
||||
<string name="detail_settings_appearance_display_name_default_summary">%1$s (padrão)</string>
|
||||
<string name="detail_settings_global_setting_title">Usar configuração global</string>
|
||||
<string name="detail_settings_global_setting_suffix">usar configuração global</string>
|
||||
<string name="detail_settings_about_header">Sobre a aplicação</string>
|
||||
<string name="detail_settings_about_topic_url_title">URL do tópico</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">Copiado para a área de transferência</string>
|
||||
<string name="user_dialog_title_add">Adicionar utilizador</string>
|
||||
<string name="settings_backup_restore_restore_title">Restaurar de um ficheiro</string>
|
||||
<string name="settings_backup_restore_restore_summary">Importar configurações, notificações e usuários</string>
|
||||
<string name="settings_backup_restore_restore_successful">Restauração concluída</string>
|
||||
<string name="settings_advanced_record_logs_summary_enabled">A registar (até 1000 entradas) no dispositivo …</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">Ative os registos para os poder partilhar mais tarde e diagnosticar problemas.</string>
|
||||
<string name="settings_advanced_record_logs_title">Registos</string>
|
||||
<string name="settings_advanced_export_logs_title">Copiar/enviar registos</string>
|
||||
<string name="settings_advanced_export_logs_summary">Copie os registos para a área de transferência ou faça envie para nopaste.net (propriedade do autor do ntfy). \"Hostnames\" e tópicos podem ser censurados, as notificações não.</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_scrubbed">Enviar e copiar ligação (censurado)</string>
|
||||
<string name="settings_advanced_export_logs_copied_logs">Registos copiados para área de transferência</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_text">Esses tópicos/\"hostnames\" foram substituídos por nomes de frutas, portanto pode partilhar os registos sem se preocupar:
|
||||
\n
|
||||
\n%1$s
|
||||
\n
|
||||
\nAs palavras-passe são retiradas e não são listadas aqui.</string>
|
||||
<string name="settings_advanced_export_logs_error_uploading">Não foi possível enviar os registos: %1$s</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_button_ok">OK</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_empty">Nenhum tópico/\"hostname\" foi editado. Talvez não tenha nenhuma subscrição\?</string>
|
||||
<string name="settings_advanced_clear_logs_title">Limpar registos</string>
|
||||
<string name="settings_advanced_clear_logs_deleted_toast">Registos excluídos</string>
|
||||
<string name="settings_advanced_connection_protocol_title">Protocolo de ligação</string>
|
||||
<string name="settings_advanced_clear_logs_summary">Eliminar registos gravados anteriormente e começar de novo</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Utilizar WebSockets para se ligar ao servidor. Este é o método recomendado, mas pode exigir configuração adicional no seu proxy.</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_jsonhttp">\"Stream\" JSON através de HTTP</string>
|
||||
<string name="settings_about_header">Sobre a aplicação</string>
|
||||
<string name="settings_about_version_title">Versão</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">WebSockets</string>
|
||||
<string name="detail_settings_notifications_instant_title">Entrega instantânea</string>
|
||||
<string name="detail_settings_notifications_instant_summary_on">As notificações são entregues instantaneamente. Requer um serviço que corre em primeiro plano e consome mais bateria.</string>
|
||||
<string name="settings_about_version_copied_to_clipboard_message">Copiado para área de transferência</string>
|
||||
<string name="detail_settings_appearance_icon_error_saving">Não foi possível guardar o ícone: %1$s</string>
|
||||
<string name="detail_settings_appearance_icon_remove_summary">Ícone exibido nas notificações deste tópico</string>
|
||||
<string name="detail_settings_appearance_display_name_title">Nome de exibição</string>
|
||||
<string name="user_dialog_description_edit">Pode editar o nome/palavra-passe do utilizador selecionado ou eliminá-lo.</string>
|
||||
<string name="user_dialog_base_url_hint">URL do serviço</string>
|
||||
<string name="user_dialog_title_edit">Editar utilizador</string>
|
||||
<string name="user_dialog_description_add">Pode adicionar um utilizador aqui. Todos os tópicos para o servidor fornecido usarão esse utilizador.</string>
|
||||
<string name="user_dialog_username_hint">Nome de utilizador</string>
|
||||
<string name="user_dialog_password_hint_add">Palavra-passe</string>
|
||||
<string name="user_dialog_password_hint_edit">Palavra-passe (se deixada em branco não será alterada)</string>
|
||||
<string name="user_dialog_button_cancel">Cancelar</string>
|
||||
<string name="user_dialog_button_add">Adicionar utilizador</string>
|
||||
<string name="user_dialog_button_delete">Eliminar utilizador</string>
|
||||
<string name="user_dialog_button_save">Guardar</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">Continuar a alertar para a prioridade máxima</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Continuar a alertar</string>
|
||||
<string name="channel_notifications_group_default_name">Padrão</string>
|
||||
<string name="detail_item_cannot_open_apk">As aplicações já não podem ser instaladas. Em vez disso, descarregue pelo navegador. Consulte a questão #531 no GitHub para mais detalhes.</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">As notificações de prioridade máxima alertam continuamente até serem descartadas</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">As notificações de prioridade máxima alertam apenas uma vez</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Configurações de notificação personalizadas</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">A usar configurações personalizadas para esta subscrição</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">A usar as configurações padrão (sons, substituição de \"Não incomodar\", etc.)</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Definir configurações de notificação</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">Sobreposição de \"Não incomodar\" (NI), sons, etc.</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Alertar apenas uma vez</string>
|
||||
</resources>
|
|
@ -1,346 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="settings_backup_restore_restore_successful">Restaurat cu succes</string>
|
||||
<string name="settings_advanced_record_logs_title">Înregistrează jurnale</string>
|
||||
<string name="settings_advanced_export_logs_summary">Copiază jurnal în clipboard, sau uploadează pe nopaste.net (deținut de autorul ntfy). Numele gazdelor sau topicele pot fi cenzurate, notificările nu vor fi niciodată.</string>
|
||||
<string name="settings_advanced_export_logs_error_uploading">Nu s-au putut încărca jurnalele: %1$s</string>
|
||||
<string name="settings_about_version_format">ntfy %1$s (%2$s)</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">WebSockets</string>
|
||||
<string name="settings_about_version_copied_to_clipboard_message">Copiat în clipboard</string>
|
||||
<string name="detail_settings_notifications_instant_summary_on">Notificările sunt primite instantaneu. Necesită un serviciu în prim plan și consumă mai multă baterie.</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Setări personalizate pentru notificări</string>
|
||||
<string name="detail_settings_appearance_icon_set_summary">Setează o pictogramă care să fie afișată în notificări</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">Abonat la trei topice cu livrare instantanee</string>
|
||||
<string name="detail_settings_about_topic_url_title">URL-ul topicului</string>
|
||||
<string name="channel_subscriber_service_name">Serviciul abonărilor</string>
|
||||
<string name="user_dialog_password_hint_edit">Parolă (neschimbată dacă este lăsată necompletată)</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Abonat la două topice cu livrare instantanee</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Abonat pentru primirea topicelor cu livrare instantanee</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">Abonat la cinci topice cu livrare instantanee</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">Abonat la %1$d topice cu livrare instantanee</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">Abonat la trei topice</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">Abonat la două topice</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">Abonat la patru topice</string>
|
||||
<string name="main_banner_websocket_text">Trecerea la WebSockets este modalitatea recomandată de a vă conecta la serverul dumneavostră, și poate îmbunătăți durata de viață a bateriei, dar poate necesita <a href="https://ntfy.sh/docs/config/#nginxapache2caddy">configurare suplimentară în proxy-ul dumneavostră</a>. Acest lucru poate fi comutat în setări.</string>
|
||||
<string name="detail_item_cannot_download">Nu se poate deschide sau descărca atașamentul. Link-ul a expirat și nu s-a găsit niciun fișier local.</string>
|
||||
<string name="notification_dialog_muted_until_toast_message">Notificări oprite până la %1$s</string>
|
||||
<string name="notification_popup_file">%1$s
|
||||
\nFișier: %2$s</string>
|
||||
<string name="notification_popup_file_download_successful">%1$s
|
||||
\nFișier: %2$s, descărcat</string>
|
||||
<string name="notification_popup_file_download_failed">%1$s
|
||||
\nFile: %2$s, descărcare eșuată</string>
|
||||
<string name="settings_notifications_muted_until_show_all">Se afișează toate notificările</string>
|
||||
<string name="settings_notifications_min_priority_summary_any">Se afișează toate notificările</string>
|
||||
<string name="settings_notifications_priority_low">mică</string>
|
||||
<string name="settings_notifications_priority_high">mare</string>
|
||||
<string name="settings_notifications_priority_max">maximă</string>
|
||||
<string name="settings_notifications_channel_prefs_summary">Suprascriere nu deranjați (DND), sunete, etc.</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">Notificările cu prioritate maximă se alertă continuu până la respingere</string>
|
||||
<string name="settings_advanced_broadcast_summary_enabled">Aplicațiile pot primi notificări primite ca difuzări</string>
|
||||
<string name="settings_advanced_broadcast_summary_disabled">Aplicațiile nu pot primi notificări ca difuzări</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_text">Aceste topice/nume de gazde au fost înlocuite cu nume de fructe, ca să puteți distribui jurnalul fără griji:
|
||||
\n
|
||||
\n%1$s
|
||||
\n
|
||||
\nParolele sunt criptate, dar nu sunt listate aici.</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Folosește WebSockets pentru conectarea la server. Asta este metoda recomandată, dar ar putea necesita setări adiționale în proxy-ul dumneavoastră</string>
|
||||
<string name="detail_settings_appearance_icon_remove_title">Pictogramă abonament (apăsați pentru a elimina)</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_jsonhttp">Flux JSON prin HTTP</string>
|
||||
<string name="settings_notifications_auto_delete_title">Șterge notificări</string>
|
||||
<string name="settings_notifications_auto_download_always">Descarcă totul automat</string>
|
||||
<string name="settings_notifications_auto_download_100k">Dacă e mai mic de 100 kB</string>
|
||||
<string name="settings_notifications_auto_download_500k">Dacă e mai mic de 500 kB</string>
|
||||
<string name="settings_notifications_auto_download_1m">Dacă e mai mic de 1 MB</string>
|
||||
<string name="settings_notifications_auto_download_5m">Dacă e mai mic de 5 MB</string>
|
||||
<string name="settings_notifications_auto_download_10m">Dacă e mai mic de 10 MB</string>
|
||||
<string name="settings_notifications_auto_download_50m">Dacă e mai mic de 50 MB</string>
|
||||
<string name="settings_notifications_auto_delete_never">Niciodată</string>
|
||||
<string name="settings_notifications_auto_delete_three_days">Peste 3 zile</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">Păstrează alertele pentru prioritatea maximă</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">Notificările cu prioritate maximă se alertă o singură dată</string>
|
||||
<string name="settings_general_header">General</string>
|
||||
<string name="settings_general_default_base_url_title">Server implicit</string>
|
||||
<string name="settings_general_default_base_url_message">Introduceți URL-ul rădăcinii a serverului dvs. pentru utilizarea implicită atunci când vă abonați la topice noi și/sau când partajați în topice.</string>
|
||||
<string name="settings_general_default_base_url_default_summary">%1$s (implicit)</string>
|
||||
<string name="settings_general_users_prefs_user_add">Adaugă utilizatori</string>
|
||||
<string name="settings_general_users_prefs_user_add_summary">Crează un utilizator nou pentru un server nou</string>
|
||||
<string name="settings_general_users_title">Gestionați utilizatorii</string>
|
||||
<string name="settings_general_users_summary">Adaugă/șterge utilizatori pentru subiecte protejate</string>
|
||||
<string name="settings_general_users_prefs_user_not_used">Nu este folosit de niciun topic</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_one">Folosit de topicul %1$s</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_many">Folosit de topicele %1$s</string>
|
||||
<string name="settings_general_dark_mode_summary_system">Folosește implicitul sistemului</string>
|
||||
<string name="settings_general_dark_mode_summary_light">Modul luminos pornit</string>
|
||||
<string name="settings_general_dark_mode_summary_dark">Mod întunecat pornit. Ești un vampir\?</string>
|
||||
<string name="settings_general_dark_mode_entry_system">Folosește implicitul sistemului</string>
|
||||
<string name="settings_general_dark_mode_entry_light">Mod luminos</string>
|
||||
<string name="settings_general_dark_mode_entry_dark">Mod întunecat</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything">Totul</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything_no_users">Totul, înafară de utilizatori</string>
|
||||
<string name="settings_backup_restore_header">Backup și restaurare</string>
|
||||
<string name="settings_backup_restore_backup_title">Back up în fișier</string>
|
||||
<string name="settings_backup_restore_backup_summary">Exportați configurația, notificările și utilizatorii</string>
|
||||
<string name="settings_backup_restore_backup_entry_settings_only">Doar setări</string>
|
||||
<string name="settings_backup_restore_backup_successful">Backup creat</string>
|
||||
<string name="settings_backup_restore_backup_failed">Backup eșuat: %1$s</string>
|
||||
<string name="settings_backup_restore_restore_title">Restaurează din fișier</string>
|
||||
<string name="settings_backup_restore_restore_failed">Restaurare eșuată: %1$s</string>
|
||||
<string name="settings_advanced_header">Avansat</string>
|
||||
<string name="settings_advanced_broadcast_title">Difuzați mesaje</string>
|
||||
<string name="settings_advanced_record_logs_summary_enabled">Se salvează (până la 1,000 de intrări) pe dispozitiv…</string>
|
||||
<string name="settings_advanced_export_logs_title">Copiază/uploadează jurnale</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_original">Copiază în clipboard</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_scrubbed">Copiază în clipboard (cenzurat)</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_original">Uploadează și copiază linkul</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_scrubbed">Uploadează și copiază linkul (cenzurat)</string>
|
||||
<string name="settings_advanced_export_logs_copied_logs">Jurnale copiate în clipboard</string>
|
||||
<string name="settings_advanced_export_logs_uploading">Încărcare jurnal …</string>
|
||||
<string name="settings_advanced_export_logs_copied_url">Jurnal încărcat și URL copiat</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">Activați înregistrarea în jurnal, astfel încât să puteți partaja jurnalele mai târziu pentru a diagnostica probleme.</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_button_ok">OK</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_empty">Niciun topic sau nume de gazde au fost redactate. Poate nu ai niciun abonament\?</string>
|
||||
<string name="settings_advanced_clear_logs_summary">Șterge jurnalele înregistrate anterior, și începe de la capăt</string>
|
||||
<string name="settings_advanced_clear_logs_deleted_toast">Jurnale șterse</string>
|
||||
<string name="settings_advanced_connection_protocol_title">Protocolul conexiunii</string>
|
||||
<string name="settings_advanced_clear_logs_title">Șterge jurnale</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Utilizați un flux JSON prin HTTP pentru conectarea la server. Această metodă este efectivă, dar poate folosi mai multă baterie.</string>
|
||||
<string name="settings_about_header">Despre</string>
|
||||
<string name="settings_about_version_title">Versiune</string>
|
||||
<string name="detail_settings_notifications_instant_title">Primire instantanee</string>
|
||||
<string name="detail_settings_notifications_instant_summary_off">Notificările sunt primite cu Firebase. Primirea poate fi întârziată, dar folosește mai puțină baterie.</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Configurează setările pentru notificări</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">Se folosesc setări personalizate pentru acest abonament</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">Folosește setările implicite (sunete, trece peste Nu deranjați, etc.)</string>
|
||||
<string name="detail_settings_appearance_header">Aparență</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">Suprascrierea \"nu deranjați\" (DND), sunete, etc.</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Alertează în continuare</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Alertează doar o dată</string>
|
||||
<string name="detail_settings_appearance_icon_remove_summary">Pictograma afișată în notificări pentru acest topic</string>
|
||||
<string name="detail_settings_appearance_display_name_title">Nume de afișare</string>
|
||||
<string name="detail_settings_appearance_icon_set_title">Pictogramă abonament</string>
|
||||
<string name="detail_settings_appearance_icon_error_saving">Nu s-a putut salva pictograma: %1$s</string>
|
||||
<string name="detail_settings_appearance_display_name_message">Setează un nume de afișare personalizat pentru acest abonament. Lăsați necompletat pentru numele implicit (%1$s).</string>
|
||||
<string name="detail_settings_appearance_display_name_default_summary">%1$s (implicit)</string>
|
||||
<string name="detail_settings_global_setting_title">Folosește setarea globală</string>
|
||||
<string name="detail_settings_about_header">Despre</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">Copiat în clipboard</string>
|
||||
<string name="detail_settings_global_setting_suffix">folosind setarea globală</string>
|
||||
<string name="user_dialog_title_add">Adaugă utilizator</string>
|
||||
<string name="user_dialog_title_edit">Modifică utilizator</string>
|
||||
<string name="user_dialog_description_add">Poți adaugă un utilizator aici. Toate topicele pentru serverul specificat vor folosi acest utilizator.</string>
|
||||
<string name="user_dialog_description_edit">Puteți edita numele de utilizator/parola pentru utilizatorul selectat, sau îl puteți șterge.</string>
|
||||
<string name="user_dialog_base_url_hint">URL-ul serviciului</string>
|
||||
<string name="user_dialog_username_hint">Nume de utilizator</string>
|
||||
<string name="user_dialog_password_hint_add">Parolă</string>
|
||||
<string name="user_dialog_button_add">Adaugă utilizator</string>
|
||||
<string name="user_dialog_button_cancel">Anulează</string>
|
||||
<string name="user_dialog_button_delete">Șterge utilizator</string>
|
||||
<string name="user_dialog_button_save">Salvează</string>
|
||||
<string name="channel_notifications_default_name">Prioritate normală</string>
|
||||
<string name="channel_subscriber_notification_title">Ascultând pentru notificări primite</string>
|
||||
<string name="channel_notifications_max_name">Prioritate maximă</string>
|
||||
<string name="channel_notifications_group_default_name">Implicit</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Abonat la un subiect cu livrare instantanee</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">Abonat la patru topice cu livrare instantanee</string>
|
||||
<string name="channel_subscriber_notification_instant_text_six">Abonat la șase topice cu livrare instantanee</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">Abonat la topice</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">Abonat la un topic</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_five">Abonat la cinci topice</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_six">Abonat la șase topice</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">Abonat la %1$d topice</string>
|
||||
<string name="refresh_message_result">%1$d notificări primite</string>
|
||||
<string name="refresh_message_no_results">Totul este la zi</string>
|
||||
<string name="refresh_message_error">Nu s-au putut actualiza %1$d abonări
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="refresh_message_error_one">Nu s-a putut actualiza abonarea: %1$s</string>
|
||||
<string name="main_action_bar_title">Topice abonate</string>
|
||||
<string name="main_menu_rate_title">Evaluează aplicația</string>
|
||||
<string name="main_menu_notifications_disabled_forever">Notificări dezactivate</string>
|
||||
<string name="main_menu_notifications_disabled_until">Notificări dezactivate până la %1$s</string>
|
||||
<string name="main_menu_report_bug_title">Raportează o problemă</string>
|
||||
<string name="main_menu_docs_title">Citește documentația</string>
|
||||
<string name="main_action_mode_delete_dialog_message">Dezabonează-te de la topicele selectate și șterge notificările permanent\?</string>
|
||||
<string name="main_menu_donate_title">Donează 💸</string>
|
||||
<string name="main_item_status_unified_push">%1$s (UnifiedPush)</string>
|
||||
<string name="main_add_button_description">Adaugă abonament</string>
|
||||
<string name="main_item_status_text_not_one">%1$d notificări</string>
|
||||
<string name="main_item_status_reconnecting">reconectare …</string>
|
||||
<string name="main_item_date_yesterday">ieri</string>
|
||||
<string name="main_no_subscriptions_text">Se pare că nu încă ești abonat la nimic.</string>
|
||||
<string name="main_banner_battery_text">Optimizarea bateriei ar trebui să fie oprită pentru a preveni probleme de livrare a notificărilor.</string>
|
||||
<string name="main_banner_battery_button_remind_later">Întreabă mai târziu</string>
|
||||
<string name="main_how_to_intro">Apasă pe + pentru a crea sau pentru a te abona la un topic. Apoi primiți notificări pe dispozitivul dvs. atunci când trimiteți mesaje prin intermediul PUT sau POST.</string>
|
||||
<string name="main_how_to_link">Instrucțiuni detaliate disponibile pe ntfy.sh, și pe documentație.</string>
|
||||
<string name="main_unified_push_toast">Această abonare este gestionat de %1$s prin UnifiedPush</string>
|
||||
<string name="main_banner_battery_button_dismiss">Ignoră</string>
|
||||
<string name="detail_deep_link_subscribed_toast_message">Abonat la topicul %1$s</string>
|
||||
<string name="detail_item_snack_deleted">Notificare ștearsă</string>
|
||||
<string name="detail_item_tags">Etichete: %1$s</string>
|
||||
<string name="detail_item_snack_undo">Anulează</string>
|
||||
<string name="detail_item_menu_delete">Șterge fișierul</string>
|
||||
<string name="detail_item_menu_cancel">Oprește descărcarea</string>
|
||||
<string name="detail_item_menu_save_file">Salvează fișierul</string>
|
||||
<string name="detail_item_saved_successfully">Salvat ca \"%1$s\" în directorul \"Downloads\"</string>
|
||||
<string name="detail_item_menu_copy_contents">Copiază notificarea</string>
|
||||
<string name="detail_item_menu_copy_contents_copied">Notificare copiată în clipboard</string>
|
||||
<string name="detail_item_cannot_open">Nu se poate deschide atașametul: %1$s</string>
|
||||
<string name="detail_item_cannot_open_url">Nu se poate deschide URL-ul: %1$s</string>
|
||||
<string name="detail_item_cannot_open_apk">Aplicațiile nu mai pot fi instalate. Descarcă prin intermediul browser-ului. Consultați problema #531 pentru detalii.</string>
|
||||
<string name="detail_item_download_info_deleted_expired">șters, link expirat</string>
|
||||
<string name="detail_item_download_info_deleted_expires_x">șters, link expiră la %1$s</string>
|
||||
<string name="detail_item_download_info_download_failed_expires_x">descărcare eșuată, linkul expiră la %1$s</string>
|
||||
<string name="detail_menu_notifications_enabled">Notificări pornite</string>
|
||||
<string name="detail_menu_enable_instant">Pornire primire instantanee</string>
|
||||
<string name="detail_menu_notifications_disabled_forever">Notificări oprite</string>
|
||||
<string name="detail_menu_notifications_disabled_until">Notificări oprite până la %1$s</string>
|
||||
<string name="detail_menu_copy_url">Copiază adresa topicului</string>
|
||||
<string name="detail_menu_clear">Șterge toate notificările</string>
|
||||
<string name="detail_menu_unsubscribe">Dezabonează-te</string>
|
||||
<string name="detail_action_mode_menu_copy">Copiază</string>
|
||||
<string name="detail_menu_settings">Setări abonament</string>
|
||||
<string name="detail_action_mode_menu_delete">Șterge</string>
|
||||
<string name="detail_action_mode_delete_dialog_message">Șterge notificarea/notificările selectate permanent\?</string>
|
||||
<string name="detail_settings_title">Setări abonament</string>
|
||||
<string name="share_menu_send">Distribuie</string>
|
||||
<string name="share_content_text_hint">Adaugă conținut pentru a distribui aici</string>
|
||||
<string name="share_content_image_text">O imagine a fost distribuită cu tine</string>
|
||||
<string name="share_content_file_error">Nu se poate citi informația fișierului: %1$s</string>
|
||||
<string name="share_topic_title">Distribuie la</string>
|
||||
<string name="notification_dialog_title">Oprește notificările</string>
|
||||
<string name="share_successful">Mesaj publicat</string>
|
||||
<string name="notification_dialog_save">Salvează</string>
|
||||
<string name="notification_dialog_enabled_toast_message">Notificări reactivate</string>
|
||||
<string name="notification_dialog_show_all">Arată toate notificările</string>
|
||||
<string name="notification_dialog_muted_forever_toast_message">Notificări oprite</string>
|
||||
<string name="notification_dialog_1h">O oră</string>
|
||||
<string name="notification_dialog_forever">Până la reluare</string>
|
||||
<string name="notification_dialog_2h">2 ore</string>
|
||||
<string name="notification_dialog_8h">8 ore</string>
|
||||
<string name="notification_dialog_tomorrow">Până mâine</string>
|
||||
<string name="notification_popup_action_open">Deschide</string>
|
||||
<string name="notification_popup_action_browse">Răsfoiește</string>
|
||||
<string name="notification_popup_action_download">Descarcă</string>
|
||||
<string name="notification_popup_file_downloading">Se descarcă %1$s, %2$d%%
|
||||
\n%3$s</string>
|
||||
<string name="notification_popup_action_cancel">Anulează</string>
|
||||
<string name="notification_popup_user_action_failed">%1$s eșuat: %2$s</string>
|
||||
<string name="settings_notifications_muted_until_title">Oprire notificări</string>
|
||||
<string name="settings_notifications_muted_until_forever">Notificări oprite până la reluare</string>
|
||||
<string name="settings_notifications_muted_until_x">Notificări oprite până la %1$s</string>
|
||||
<string name="settings_notifications_header">Notificări</string>
|
||||
<string name="settings_notifications_min_priority_summary_x_or_higher">Arată notificările dacă prioritatea este %1$d (%2$s) sau mai înaltă</string>
|
||||
<string name="settings_notifications_min_priority_summary_max">Arată notificările dacă prioritatea este 5 (maximă)</string>
|
||||
<string name="settings_notifications_min_priority_min">Orice prioritate</string>
|
||||
<string name="settings_notifications_min_priority_default">Prioritate implicită sau mai înaltă</string>
|
||||
<string name="settings_notifications_min_priority_low">Prioritate mică sau mai mare</string>
|
||||
<string name="settings_notifications_priority_min">minim</string>
|
||||
<string name="settings_notifications_auto_download_title">Descarcă atașamentele</string>
|
||||
<string name="settings_notifications_priority_default">implicită</string>
|
||||
<string name="settings_notifications_auto_download_summary_smaller_than_x">Descărcare automată a atașamentelor până la %1$s</string>
|
||||
<string name="settings_notifications_auto_download_never">Niciodată să nu se descarce automat ceva</string>
|
||||
<string name="channel_notifications_min_name">Prioritate minimă</string>
|
||||
<string name="channel_notifications_low_name">Prioritate mică</string>
|
||||
<string name="channel_notifications_high_name">Prioritate mare</string>
|
||||
<string name="main_menu_notifications_enabled">Notificări pornite</string>
|
||||
<string name="main_menu_settings_title">Setări</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">Dezabonează-te</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">Șterge permanent</string>
|
||||
<string name="main_item_status_text_one">%1$d notificare</string>
|
||||
<string name="main_action_mode_delete_dialog_cancel">Anulare</string>
|
||||
<string name="main_banner_battery_button_fix_now">Rezolvă acum</string>
|
||||
<string name="main_banner_websocket_button_remind_later">Întreabă mai târziu</string>
|
||||
<string name="main_banner_websocket_button_enable_now">Activează acum</string>
|
||||
<string name="add_dialog_title">Abonează-te la topic</string>
|
||||
<string name="detail_how_to_link">Instrucțiuni detaliate disponibile pe ntfy.sh, și în documentație.</string>
|
||||
<string name="detail_clear_dialog_message">Șterge toate notificările în acest topic\?</string>
|
||||
<string name="detail_delete_dialog_message">Dezabonează-te de la acest topic și șterge toate notificările primite\?</string>
|
||||
<string name="detail_clear_dialog_permanently_delete">Șterge permanent</string>
|
||||
<string name="detail_clear_dialog_cancel">Anulează</string>
|
||||
<string name="detail_item_menu_open">Deschide fișier</string>
|
||||
<string name="detail_item_menu_copy_url_copied">URL copiat în clipboard</string>
|
||||
<string name="detail_item_download_info_deleted">șters</string>
|
||||
<string name="detail_item_download_info_download_failed">descărcare eșuată</string>
|
||||
<string name="detail_item_download_info_download_failed_expired">descărcare eșuată, linkul a expirat</string>
|
||||
<string name="detail_item_menu_download">Descarcă fișierul</string>
|
||||
<string name="detail_item_menu_copy_url">Copiază URL</string>
|
||||
<string name="detail_item_cannot_open_not_found">Nu se poate deschide atașamentul: Fișierul s-ar putea să fi fost șters, sau nu există o aplicație instalată pentru a îl deschide.</string>
|
||||
<string name="detail_item_download_info_not_downloaded">nu s-a descărcat</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expires_x">nu s-a descărcat, expiră la %1$s</string>
|
||||
<string name="detail_item_cannot_delete">Nu se poate șterge atașamentul: %1$s</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expired">nu s-a descărcat, link expirat</string>
|
||||
<string name="detail_item_download_failed">Nu se poate descărca atașamentul: %1$s</string>
|
||||
<string name="detail_menu_disable_instant">Oprește primirea instantanee</string>
|
||||
<string name="share_content_image_error">Nu se poate citi imaginea: %1$s</string>
|
||||
<string name="detail_action_mode_delete_dialog_permanently_delete">Ștergere permanentă</string>
|
||||
<string name="share_title">Distribuie</string>
|
||||
<string name="detail_action_mode_delete_dialog_cancel">Anulează</string>
|
||||
<string name="share_content_title">Previzualizare mesaj</string>
|
||||
<string name="share_content_file_text">Un fișier a fost distribuit cu tine</string>
|
||||
<string name="share_suggested_topics">Topice sugerate</string>
|
||||
<string name="settings_notifications_auto_download_summary_never">Niciodată nu descarcă atașamente automat</string>
|
||||
<string name="notification_dialog_cancel">Anulează</string>
|
||||
<string name="notification_dialog_30min">30 de minute</string>
|
||||
<string name="settings_title">Setări</string>
|
||||
<string name="settings_notifications_min_priority_title">Prioritate minimă</string>
|
||||
<string name="settings_notifications_min_priority_high">Prioritate mare sau mai înaltă</string>
|
||||
<string name="settings_notifications_min_priority_max">Doar prioritate maximă</string>
|
||||
<string name="settings_notifications_auto_delete_one_week">Peste o saptămână</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_days">Șterge notificările automat în 3 zile</string>
|
||||
<string name="settings_notifications_channel_prefs_title">Setări canal</string>
|
||||
<string name="settings_notifications_auto_download_summary_always">Descarcă toate atașamentele automat</string>
|
||||
<string name="settings_notifications_auto_delete_summary_never">Nu șterge niciodată notificarile automat</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_month">Șterge notificările automat în o lună</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_months">Șterge notificările automat în 3 luni</string>
|
||||
<string name="settings_general_dark_mode_title">Mod întunecat</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_day">Șterge notificările automat în o zi</string>
|
||||
<string name="settings_general_users_prefs_title">Utilizatori</string>
|
||||
<string name="settings_general_users_prefs_user_add_title">Adaugă un utilizator nou</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_week">Șterge notificările automat în o săptămână</string>
|
||||
<string name="settings_notifications_auto_delete_one_day">Peste o zi</string>
|
||||
<string name="settings_notifications_auto_delete_one_month">Peste o lună</string>
|
||||
<string name="settings_notifications_auto_delete_three_months">Peste 3 luni</string>
|
||||
<string name="add_dialog_use_another_server">Folosește alt server</string>
|
||||
<string name="add_dialog_button_cancel">Anulează</string>
|
||||
<string name="add_dialog_button_back">Înapoi</string>
|
||||
<string name="add_dialog_button_login">Loghează-te</string>
|
||||
<string name="add_dialog_error_connection_failed">Conexiunea a eșuat: %1$s</string>
|
||||
<string name="add_dialog_login_title">Logare necesară</string>
|
||||
<string name="add_dialog_login_description">Acest topic necesită să te loghezi. Vă rugăm să introduceți un nume de utilizator și o parola.</string>
|
||||
<string name="add_dialog_login_username_hint">Nume de utilizator</string>
|
||||
<string name="add_dialog_login_password_hint">Parolă</string>
|
||||
<string name="add_dialog_login_error_not_authorized">Logare eșuată. Utilizatorul %1$s nu este autorizat.</string>
|
||||
<string name="add_dialog_login_new_user">Utilizator nou</string>
|
||||
<string name="detail_no_notifications_text">Nu ai primit încă notificări pentru acest topic.</string>
|
||||
<string name="detail_how_to_example">Exemplu (folosing curl):<br/><tt>$ curl -d \"Salut\" %1$s</tt></string>
|
||||
<string name="detail_delete_dialog_cancel">Anulează</string>
|
||||
<string name="detail_test_title">Test: Poți specifica un titlu dacă dorești.</string>
|
||||
<string name="detail_test_message">Această este o notificare de test de la aplicația ntfy pentru Android. Are nivelul priorității %1$d. Dacă trimiți altă notificare, s-ar putea să arate altfel.</string>
|
||||
<string name="detail_test_message_error">Nu se poate trimite mesajul: %1$s</string>
|
||||
<string name="detail_test_message_error_unauthorized_anon">Nu se poate trimite mesajul: Publicarea anonimă nu este permisă.</string>
|
||||
<string name="detail_test_message_error_unauthorized_user">Nu se poate trimite mesajul: Utilizatorul \"%1$s\" nu este autorizat.</string>
|
||||
<string name="detail_test_message_error_too_large">Nu se poate trimite mesajul: Atașamentul este prea mare.</string>
|
||||
<string name="detail_copied_to_clipboard_message">Copiat în clipboard</string>
|
||||
<string name="detail_instant_delivery_enabled">Primire instantanee pornită</string>
|
||||
<string name="detail_instant_delivery_disabled">Primire instantanee oprită</string>
|
||||
<string name="main_banner_websocket_button_dismiss">Ignoră</string>
|
||||
<string name="add_dialog_description_below">Topicele nu pot fi protejate cu parolă, așadar alegeți un nume greu de ghicit. Odată abonat, puteți PUT/POST notificări</string>
|
||||
<string name="add_dialog_topic_name_hint">Numele topicului, exemplu: alertele_lui_phil</string>
|
||||
<string name="add_dialog_use_another_server_description">Introduceți URL-urile serviciilor mai jos pentru a vă abona la topice de la alte servere.</string>
|
||||
<string name="add_dialog_instant_delivery">Primire instantanee în modul doze</string>
|
||||
<string name="add_dialog_foreground_description">Primirea instantanee este întotdeauna pornită pentru gazdele înafară de %1$s.</string>
|
||||
<string name="add_dialog_button_subscribe">Abonare</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">Alege URL-ul serviciului</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">Șterge URL-ul serviciului</string>
|
||||
<string name="detail_how_to_intro">Pentru a trimite notificări pentru acest topic, pur și simplu trimiteți o cerere PUT sau POST la URL-ul topicului.</string>
|
||||
<string name="detail_delete_dialog_permanently_delete">Ștergere permanentă</string>
|
||||
<string name="add_dialog_instant_delivery_description">Asigură ca mesajele să fie primite imediat, chiar dacă dispozitivul este inactiv.</string>
|
||||
<string name="detail_item_cannot_save">Nu se poate salva atașamentul: %1$s</string>
|
||||
<string name="detail_item_download_info_downloading_x_percent">%1$d%% descărcat</string>
|
||||
<string name="detail_menu_test">Trimite notificare de probă</string>
|
||||
<string name="settings_backup_restore_restore_summary">Importă setări, notificări și utilizatori</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy va avea rol de distribuitor UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_title">Activează UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfy nu va avea rol de distribuitor UnifiedPush</string>
|
||||
</resources>
|
|
@ -1,20 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="main_action_mode_delete_dialog_cancel">Отмена</string>
|
||||
<string name="channel_notifications_default_name">Стандартный приоритет</string>
|
||||
<string name="channel_notifications_high_name">Высокий приоритет</string>
|
||||
<string name="channel_notifications_max_name">Максимальный приоритет</string>
|
||||
<string name="channel_notifications_default_name">Уведомления (приоритет по умолчанию)</string>
|
||||
<string name="channel_notifications_high_name">Уведомления (высокий приоритет)</string>
|
||||
<string name="channel_notifications_max_name">Уведомления (макс. приоритет)</string>
|
||||
<string name="channel_subscriber_service_name">Сервис подписки</string>
|
||||
<string name="channel_notifications_min_name">Минимальный приоритет</string>
|
||||
<string name="channel_notifications_low_name">Низкий приоритет</string>
|
||||
<string name="main_menu_notifications_disabled_forever">Уведомления заглушены</string>
|
||||
<string name="channel_notifications_min_name">Уведомления (мин. приоритет)</string>
|
||||
<string name="channel_notifications_low_name">Уведомления (низкий приоритет)</string>
|
||||
<string name="main_menu_notifications_disabled_forever">Уведомления приостановлены</string>
|
||||
<string name="main_menu_notifications_enabled">Уведомления включены</string>
|
||||
<string name="main_menu_report_bug_title">Сообщить об ошибке</string>
|
||||
<string name="main_menu_settings_title">Настройки</string>
|
||||
<string name="main_menu_docs_title">Документация</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">Удалить навсегда</string>
|
||||
<string name="detail_clear_dialog_cancel">Отмена</string>
|
||||
<string name="detail_delete_dialog_message">Отписаться от этой темы и удалить все полученные уведомления\?</string>
|
||||
<string name="detail_delete_dialog_message">Отписаться от этой темы, и удалить все полученые уведомления\?</string>
|
||||
<string name="detail_delete_dialog_permanently_delete">Удалить навсегда</string>
|
||||
<string name="detail_delete_dialog_cancel">Отмена</string>
|
||||
<string name="detail_test_title">Тест: Вы можете установить заголовок, если хотите.</string>
|
||||
|
@ -28,7 +28,7 @@
|
|||
<string name="detail_item_menu_copy_contents">Скопировать уведомление</string>
|
||||
<string name="detail_item_menu_copy_contents_copied">Уведомление скопировано</string>
|
||||
<string name="detail_item_saved_successfully">Сохранён как \"%1$s\" в папке \"Downloads\"</string>
|
||||
<string name="detail_menu_notifications_disabled_until">Уведомления заглушены до %1$s</string>
|
||||
<string name="detail_menu_notifications_disabled_until">Уведомления приостановлены до %1$s</string>
|
||||
<string name="detail_menu_enable_instant">Включить моментальную доставку</string>
|
||||
<string name="detail_menu_disable_instant">Выключить моментальную доставку</string>
|
||||
<string name="detail_menu_test">Отправить тестовое уведомление</string>
|
||||
|
@ -44,14 +44,14 @@
|
|||
<string name="detail_settings_title">Настройки подписок</string>
|
||||
<string name="share_title">Поделиться</string>
|
||||
<string name="share_menu_send">Поделиться</string>
|
||||
<string name="notification_dialog_title">Заглушить уведомления</string>
|
||||
<string name="notification_dialog_title">Приостановить уведомления</string>
|
||||
<string name="settings_notifications_auto_download_100k">Если меньше 100 кб</string>
|
||||
<string name="settings_notifications_auto_delete_never">Никогда</string>
|
||||
<string name="settings_notifications_auto_delete_three_days">Черед три дня</string>
|
||||
<string name="settings_notifications_auto_delete_one_day">Через один день</string>
|
||||
<string name="settings_notifications_auto_delete_one_week">Через неделю</string>
|
||||
<string name="settings_notifications_auto_delete_one_month">Через месяц</string>
|
||||
<string name="settings_notifications_auto_delete_three_months">Через три месяца</string>
|
||||
<string name="settings_notifications_auto_delete_three_months">Чкрез три месяца</string>
|
||||
<string name="settings_general_header">Общие</string>
|
||||
<string name="settings_general_default_base_url_title">Сервер по умолчанию</string>
|
||||
<string name="settings_general_default_base_url_default_summary">%1$s (по умолчанию)</string>
|
||||
|
@ -110,36 +110,36 @@
|
|||
<string name="detail_item_cannot_open">Вложение не открывается: %1$s</string>
|
||||
<string name="detail_item_cannot_open_not_found">Вложение не открывается: Возможно файл был удалёл, либо нет установленного приложения, способного открыть файл.</string>
|
||||
<string name="detail_menu_notifications_enabled">Уведомления включены</string>
|
||||
<string name="detail_menu_notifications_disabled_forever">Уведомления заглушены</string>
|
||||
<string name="detail_menu_notifications_disabled_forever">Уведомления приостановлены</string>
|
||||
<string name="notification_dialog_save">Сохранить</string>
|
||||
<string name="notification_dialog_muted_until_toast_message">Уведомления заглушены до %1$s</string>
|
||||
<string name="notification_dialog_muted_until_toast_message">Уведомления приостановлены до %1$s</string>
|
||||
<string name="notification_popup_action_open">Открыть</string>
|
||||
<string name="notification_popup_action_download">Скачать</string>
|
||||
<string name="notification_popup_file">%1$s
|
||||
\nФайл: %2$s</string>
|
||||
<string name="notification_dialog_cancel">Отмена</string>
|
||||
<string name="notification_dialog_enabled_toast_message">Уведомления разрешены</string>
|
||||
<string name="notification_dialog_muted_forever_toast_message">Уведомления заглушены</string>
|
||||
<string name="notification_dialog_enabled_toast_message">Уведомления возобновлены</string>
|
||||
<string name="notification_dialog_muted_forever_toast_message">Уведомления приостановлены</string>
|
||||
<string name="notification_dialog_show_all">Показать все уведомления</string>
|
||||
<string name="notification_dialog_30min">30 минут</string>
|
||||
<string name="notification_dialog_8h">8 часов</string>
|
||||
<string name="notification_dialog_tomorrow">До завтра</string>
|
||||
<string name="notification_dialog_1h">1 час</string>
|
||||
<string name="notification_dialog_2h">2 часа</string>
|
||||
<string name="notification_dialog_forever">До разрешения</string>
|
||||
<string name="notification_dialog_forever">До возобновления</string>
|
||||
<string name="settings_title">Настройки</string>
|
||||
<string name="settings_notifications_min_priority_min">Любой приоритет</string>
|
||||
<string name="settings_general_users_prefs_user_add">Добавить пользователей</string>
|
||||
<string name="settings_general_users_prefs_user_add_summary">Создать нового пользователя для нового сервера</string>
|
||||
<string name="settings_backup_restore_restore_title">Восстановить из файла</string>
|
||||
<string name="settings_general_users_prefs_user_add_title">Добавить нового пользователя</string>
|
||||
<string name="main_menu_notifications_disabled_until">Уведомления заглушены до %1$s</string>
|
||||
<string name="main_menu_notifications_disabled_until">Уведомления приостановлены до %1$s</string>
|
||||
<string name="refresh_message_error">Не получилось обновить %1$d подписок
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="refresh_message_error_one">Не получилось обновить подписку: %1$s</string>
|
||||
<string name="refresh_message_error_one">Не получилось обновить подписки: %1$s</string>
|
||||
<string name="main_action_bar_title">Темы подписок</string>
|
||||
<string name="main_how_to_intro">Нажмите + чтобы создать или подписаться на тему. Вы будете получать уведомления на вашем устройстве при отправке сообщений через PUT или POST-запросы.</string>
|
||||
<string name="main_how_to_intro">Нажмите + чтобы создать или подписаться на тему. Вы получите уведомления на вашем устройстве при отправлении сообщений через PUT или POST.</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Подписан на темы с мгновенной доставкой</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Подписан на две темы с мгновенной доставкой</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Подписан на одну тему с мгновенной доставкой</string>
|
||||
|
@ -156,7 +156,7 @@
|
|||
<string name="add_dialog_login_title">Требуется вход в аккаунт</string>
|
||||
<string name="add_dialog_login_description">Эта тема требует авторизации. Пожалуйста, введите имя пользователя и пароль.</string>
|
||||
<string name="add_dialog_description_below">Темы не могут быть защищены паролем. Используйте название которое сложно угадать. После подписки вы сможете отправлять уведомления через PUT/POST.</string>
|
||||
<string name="detail_test_message">Это тестовое уведомление от Android-приложения ntfy. Оно имеет уровень приоритета %1$d. Если вы отправите ещё одно, оно может выглядеть по-другому.</string>
|
||||
<string name="detail_test_message">Это тестовое уведомление от Android-приложения ntfy. Уровень приоритета уведомления: %1$d. Если вы отправите ещё одно, оно может выглядеть по-другому.</string>
|
||||
<string name="add_dialog_login_error_not_authorized">Вход не удался. Пользователь %1$s не авторизован.</string>
|
||||
<string name="detail_how_to_intro">Чтобы отправить уведомления на данную тему, просто отправьте PUT or POST на URL-адрес темы.</string>
|
||||
<string name="detail_how_to_link">Подробные инструкции на сайте ntfy.sh и в документации.</string>
|
||||
|
@ -165,10 +165,10 @@
|
|||
<string name="add_dialog_use_another_server_description">Введите URL-адрес сервиса чтобы подписаться на темы с других серверов.</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expires_x">не скачано, истекает срок действия %1$s</string>
|
||||
<string name="detail_item_download_info_download_failed_expired">не удалось скачать, срок действия ссылки истёк</string>
|
||||
<string name="settings_notifications_min_priority_max">Только максимальный приоритет</string>
|
||||
<string name="settings_notifications_min_priority_max">Только наивысший приоритет</string>
|
||||
<string name="settings_notifications_priority_low">низкий</string>
|
||||
<string name="settings_notifications_channel_prefs_title">Настройки канала</string>
|
||||
<string name="settings_notifications_channel_prefs_summary">Управление режимом \"не беспокоить\", звуками и прочим.</string>
|
||||
<string name="settings_notifications_channel_prefs_summary">Управление режимом Не беспокоить (DND), настройками звуков, и т.д.</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_days">Автоматически удалять уведомления через 3 дня</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_month">Автоматически удалять уведомления через месяц</string>
|
||||
<string name="detail_item_cannot_save">Невозможно сохранить вложение: %1$s</string>
|
||||
|
@ -194,17 +194,17 @@
|
|||
<string name="notification_popup_file_downloading">Скачивается %1$s, %2$d%%
|
||||
\n%3$s</string>
|
||||
<string name="notification_popup_file_download_successful">%1$s
|
||||
\nФайл: %2$s, скачан</string>
|
||||
\nФайл: %2$s, скачен</string>
|
||||
<string name="notification_popup_file_download_failed">%1$s
|
||||
\nФайл: %2$s, не удалось скачать</string>
|
||||
<string name="settings_notifications_muted_until_title">Заглушить уведомления</string>
|
||||
<string name="settings_notifications_muted_until_title">Приостановить уведомления</string>
|
||||
<string name="settings_notifications_muted_until_show_all">Показываются все уведомления</string>
|
||||
<string name="settings_notifications_muted_until_forever">Уведомления заглушены пока не будут разрешены</string>
|
||||
<string name="settings_notifications_muted_until_x">Уведомления заглушены до %1$s</string>
|
||||
<string name="settings_notifications_muted_until_forever">Уведомления приостановлены до того, как будут возобновлены</string>
|
||||
<string name="settings_notifications_muted_until_x">Уведомления приостановлены до %1$s</string>
|
||||
<string name="settings_notifications_min_priority_title">Самый низкий приоритет</string>
|
||||
<string name="settings_notifications_min_priority_summary_any">Отображаются все уведомления</string>
|
||||
<string name="settings_notifications_min_priority_summary_x_or_higher">Показывать уведомления если приоритет %1$d(%2$s) или выше</string>
|
||||
<string name="settings_notifications_min_priority_summary_max">Показывать уведомления если приоритет равен 5 (максимальный)</string>
|
||||
<string name="settings_notifications_min_priority_summary_max">Показывать уведомления если приоритет 5 (наивысший)</string>
|
||||
<string name="settings_notifications_min_priority_low">Низкий приоритет или выше</string>
|
||||
<string name="settings_notifications_min_priority_default">Приоритет по умолчанию и выше</string>
|
||||
<string name="settings_notifications_min_priority_high">Высокий приоритет и выше</string>
|
||||
|
@ -255,8 +255,8 @@
|
|||
<string name="settings_advanced_clear_logs_summary">Удалить ранее записанные журналы, и начать сначала</string>
|
||||
<string name="settings_advanced_clear_logs_deleted_toast">Журналы удалены</string>
|
||||
<string name="settings_advanced_connection_protocol_title">Протокол соединения</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Использовать JSON-поток через HTTP чтобы подключаться к серверу. Это надежный метод, но он может потреблять больше энергии.</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Использовать WebSockets для подключения к серверу. Это рекомендуемый метод, но может потребовать доплонительной настройки прокси-сервера.</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Использовать JSON поток через HTTP, чтобы подключиться к серверу. Этот метод устарел и будет удален в июле 2022-го года.</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Использовать WebSockets для подключения к серверу. Этот метод будет методом по умолчанию начиная с июля 2022-го.</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_jsonhttp">JSON поток поверх HTTP</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">WebSockets</string>
|
||||
<string name="settings_about_header">О программе</string>
|
||||
|
@ -306,41 +306,4 @@
|
|||
<string name="channel_subscriber_notification_instant_text_six">Подписан на шесть тем с мгновенной доставкой</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_five">Подписан на пять тем</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_six">Подписан на шесть тем</string>
|
||||
<string name="main_banner_websocket_button_enable_now">Включить сейчас</string>
|
||||
<string name="detail_settings_notifications_instant_summary_on">Уведомления доставляются сразу. Требует forground сервис и потребляет больше энергии.</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">Уведомления с наивысшим приоритетом будут требовать внимания пока не будут прочтены</string>
|
||||
<string name="channel_notifications_group_default_name">По умолчанию</string>
|
||||
<string name="detail_item_cannot_open_apk">Установка приложений через уведомления больше не поддерживается. Скачайте приложение через браузер. Подробности смотрите в отчете ntfy #531.</string>
|
||||
<string name="detail_settings_appearance_icon_set_title">Иконка подписки</string>
|
||||
<string name="detail_settings_appearance_icon_set_summary">Использовать иконку для отображения в уведомлениях</string>
|
||||
<string name="main_menu_donate_title">Пожертвовать 💸</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">Уведомления с наивысшим приориетом будут давать о себе знать только один раз</string>
|
||||
<string name="detail_settings_notifications_instant_summary_off">Уведомления будут доставляться с помощью Firebase. Могут быть задержки с доставкой, но потребляет меньше энергии.</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">Очистить URL-адрес сервера</string>
|
||||
<string name="detail_settings_appearance_header">Внешний вид</string>
|
||||
<string name="detail_settings_appearance_icon_error_saving">Невозможно сохранить иконку: %1$s</string>
|
||||
<string name="detail_settings_appearance_display_name_title">Псевдоним</string>
|
||||
<string name="detail_settings_global_setting_suffix">испольует глобальное значение</string>
|
||||
<string name="detail_settings_appearance_display_name_message">Выставить произвольный псевдоним для этой подписки. Оставьте пустым чтобы использовать значение по умолчанию (%1$s).</string>
|
||||
<string name="detail_settings_appearance_display_name_default_summary">%1$s (по умолчанию)</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">Скопирован в буфер обмена</string>
|
||||
<string name="detail_settings_notifications_instant_title">Мгновенная доставка</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Пользовательские настройки уведомлений</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Настройки уведомлений</string>
|
||||
<string name="settings_advanced_unifiedpush_title">Включить UnifiedPush</string>
|
||||
<string name="detail_settings_about_header">Настройки темы</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">Используются настройки по умолчанию (звуки, игнорирование режима \"не беспокоить\", и прочее)</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy будет действовать как сервис доставки UnifiedPush</string>
|
||||
<string name="detail_settings_about_topic_url_title">URL-адрес темы</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfy не будет действовать как сервис доставки UnifiedPush</string>
|
||||
<string name="detail_settings_appearance_icon_remove_summary">Иконка используемая в уведомлениях от этой темы</string>
|
||||
<string name="detail_settings_global_setting_title">Использовать глобальное значение</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Продолжать уведомлять</string>
|
||||
<string name="main_banner_websocket_text">Мы рекомендуем использовать WebSockets для подключения к Вашему серверу; это может продлить время работы от батареи, но может потребовать <a href="https://ntfy.sh/docs/config/#nginxapache2caddy">дополнительной настройки прокси-сервера</a>. Эта опция может быть включена или выключена в Настройках.</string>
|
||||
<string name="detail_settings_appearance_icon_remove_title">Иконка подписки (коснитесь, чтобы удалить)</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">Выберите URL-адрес сервера</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">Игнорирование режима \"не беспокоить\", звуки и прочее.</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">Используются пользовательские настройки для этой подписки</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Уведомлять только один раз</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">Продолжать уведомлять при наивысшем приоритете</string>
|
||||
</resources>
|
||||
</resources>
|
||||
|
|
|
@ -1,346 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_notifications_low_name">Nízka priorita</string>
|
||||
<string name="channel_notifications_default_name">Predvolená priorita</string>
|
||||
<string name="channel_notifications_high_name">Vysoká priorita</string>
|
||||
<string name="channel_notifications_max_name">Maximálna priorita</string>
|
||||
<string name="channel_subscriber_service_name">Služba odberu</string>
|
||||
<string name="channel_subscriber_notification_title">Počúvanie prichádzajúcich oznámení</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Prihlásený na okamžité doručovanie tém</string>
|
||||
<string name="channel_notifications_group_default_name">Predvolená</string>
|
||||
<string name="refresh_message_error">Nepodarilo sa obnoviť %1$d prihlásení
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="refresh_message_error_one">Nepodarilo sa obnoviť prihlásenie na odber: %1$s</string>
|
||||
<string name="main_action_bar_title">Odoberané témy</string>
|
||||
<string name="main_menu_notifications_enabled">Oznámenia zapnuté</string>
|
||||
<string name="main_menu_notifications_disabled_forever">Oznámenia stlmené</string>
|
||||
<string name="main_how_to_intro">Kliknutím na tlačidlo + vytvoríte tému alebo sa na ňu prihlásite. Následne budete dostávať upozornenia na svoje zariadenie pri odosielaní správ prostredníctvom PUT alebo POST.</string>
|
||||
<string name="main_how_to_link">Podrobné pokyny sú k dispozícii na stránke ntfy.sh a v dokumentácií.</string>
|
||||
<string name="main_unified_push_toast">Toto predplatné spravuje %1$s prostredníctvom služby UnifiedPush</string>
|
||||
<string name="main_banner_battery_text">Optimalizácia batérie by mala byť pre aplikáciu vypnutá, aby sa predišlo problémom s doručovaním oznámení.</string>
|
||||
<string name="main_banner_battery_button_remind_later">Opýtať sa neskôr</string>
|
||||
<string name="main_banner_battery_button_dismiss">Odmietnuť</string>
|
||||
<string name="main_banner_battery_button_fix_now">Opraviť teraz</string>
|
||||
<string name="main_banner_websocket_text">Prechod na WebSockets je odporúčaný spôsob pripojenia k serveru, ktorý by mohol zlepšiť výdrž batérie, ale môže vyžadovať <a href="https://ntfy.sh/docs/config/#nginxapache2caddy">ďalšiu konfiguráciu v proxy serveri</a>. Túto možnosť môžete prepnúť v Nastaveniach.</string>
|
||||
<string name="main_banner_websocket_button_remind_later">Opýtať sa neskôr</string>
|
||||
<string name="main_banner_websocket_button_dismiss">Odmietnuť</string>
|
||||
<string name="main_banner_websocket_button_enable_now">Povoliť teraz</string>
|
||||
<string name="add_dialog_description_below">Témy nemusia byť chránené heslom, preto zvoľte názov, ktorý je ťažké uhádnuť. Po prihlásení sa na odber môžete PUT/POST oznámenia.</string>
|
||||
<string name="add_dialog_topic_name_hint">Názov témy, napr. phils_alerts</string>
|
||||
<string name="add_dialog_use_another_server">Použiť iný server</string>
|
||||
<string name="add_dialog_use_another_server_description">Zadajte adresu URL služby a prihláste sa na odber tém z iných serverov.</string>
|
||||
<string name="add_dialog_instant_delivery">Okamžité doručenie v režime spánku</string>
|
||||
<string name="add_dialog_instant_delivery_description">Zabezpečuje okamžité doručenie správ, aj keď je zariadenie neaktívne.</string>
|
||||
<string name="add_dialog_foreground_description">Okamžité doručenie je vždy zapnuté pre hostiteľov iných ako %1$s.</string>
|
||||
<string name="add_dialog_button_cancel">Zrušiť</string>
|
||||
<string name="add_dialog_button_subscribe">Prihlásiť sa na odber</string>
|
||||
<string name="add_dialog_button_back">Späť</string>
|
||||
<string name="add_dialog_button_login">Prihlásiť sa</string>
|
||||
<string name="add_dialog_error_connection_failed">Pripojenie zlyhalo: %1$s</string>
|
||||
<string name="add_dialog_login_description">Táto téma si vyžaduje prihlásenie. Zadajte prosím používateľské meno a heslo.</string>
|
||||
<string name="add_dialog_title">Odoberať tému</string>
|
||||
<string name="add_dialog_login_username_hint">Používateľské meno</string>
|
||||
<string name="add_dialog_login_password_hint">Heslo</string>
|
||||
<string name="add_dialog_login_error_not_authorized">Prihlásenie zlyhalo. Používateľ %1$s nie je autorizovaný.</string>
|
||||
<string name="add_dialog_login_new_user">Nový používateľ</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">Výber URL adresy služby</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">Vymazanie URL adresy služby</string>
|
||||
<string name="detail_no_notifications_text">K tejto téme ste zatiaľ nedostali žiadne upozornenia.</string>
|
||||
<string name="detail_how_to_intro">Ak chcete posielať oznámenia do tejto témy, jednoducho zadajte adresu PUT alebo POST na URL adresu témy.</string>
|
||||
<string name="detail_how_to_example">Príklad (pomocou curl):<br/><tt>$ curl -d \"Ahoj\" %1$s</tt></string>
|
||||
<string name="detail_clear_dialog_cancel">Zrušiť</string>
|
||||
<string name="detail_delete_dialog_message">Odhlásiť sa z tejto témy a vymazať všetky prijaté oznámenia\?</string>
|
||||
<string name="detail_delete_dialog_permanently_delete">Vymazať natrvalo</string>
|
||||
<string name="detail_delete_dialog_cancel">Zrušiť</string>
|
||||
<string name="detail_clear_dialog_permanently_delete">Vymazať natrvalo</string>
|
||||
<string name="detail_test_title">Test: Ak chcete, môžete nastaviť názov.</string>
|
||||
<string name="detail_test_message">Toto je testovacie oznámenie z Android aplikácie ntfy. Má úroveň priority %1$d. Ak pošlete ďalšie, môže vyzerať inak.</string>
|
||||
<string name="detail_test_message_error">Nemožno odoslať správu: %1$s</string>
|
||||
<string name="detail_test_message_error_unauthorized_user">Nemožno odoslať správu: Používateľ \"%1$s\" nie je autorizovaný.</string>
|
||||
<string name="detail_test_message_error_too_large">Nemožno odoslať správu: Príloha je príliš veľká.</string>
|
||||
<string name="detail_copied_to_clipboard_message">Skopírované do schránky</string>
|
||||
<string name="detail_instant_delivery_enabled">Okamžité doručovanie zapnuté</string>
|
||||
<string name="detail_instant_delivery_disabled">Okamžité doručovanie vypnuté</string>
|
||||
<string name="detail_deep_link_subscribed_toast_message">Prihlásený na odber témy %1$s</string>
|
||||
<string name="detail_item_tags">Značky: %1$s</string>
|
||||
<string name="detail_item_snack_deleted">Oznámenie odstránené</string>
|
||||
<string name="detail_item_snack_undo">Odvolať</string>
|
||||
<string name="detail_item_menu_open">Otvoriť súbor</string>
|
||||
<string name="detail_item_menu_delete">Odstrániť súbor</string>
|
||||
<string name="detail_item_menu_download">Stiahnuť súbor</string>
|
||||
<string name="detail_item_menu_cancel">Zrušiť sťahovanie</string>
|
||||
<string name="detail_item_menu_copy_url">Kopírovať adresu URL</string>
|
||||
<string name="detail_item_menu_copy_url_copied">URL adresa skopírovaná do schránky</string>
|
||||
<string name="detail_item_menu_copy_contents">Kopírovať oznámenie</string>
|
||||
<string name="detail_item_saved_successfully">Uložené ako \"%1$s\" v priečinku \"Stiahnuté\"</string>
|
||||
<string name="detail_item_cannot_open">Nie je možné otvoriť prílohu: %1$s</string>
|
||||
<string name="detail_item_cannot_open_not_found">Nie je možné otvoriť prílohu: Súbor mohol byť vymazaný alebo ho nedokáže otvoriť žiadna nainštalovaná aplikácia.</string>
|
||||
<string name="detail_item_cannot_open_url">Nie je možné otvoriť adresu URL: %1$s</string>
|
||||
<string name="detail_item_cannot_delete">Nemožno odstrániť prílohu: %1$s</string>
|
||||
<string name="detail_item_download_failed">Nepodarilo sa stiahnuť prílohu: %1$s</string>
|
||||
<string name="detail_item_download_info_not_downloaded">nestiahnuté</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expired">nestiahnuté, odkaz vypršal</string>
|
||||
<string name="detail_item_download_info_downloading_x_percent">%1$d%% stiahnuté</string>
|
||||
<string name="detail_item_download_info_deleted">zmazané</string>
|
||||
<string name="detail_item_download_info_deleted_expired">zmazané, odkaz vypršal</string>
|
||||
<string name="detail_item_download_info_deleted_expires_x">zmazané, platnosť odkazu končí %1$s</string>
|
||||
<string name="detail_item_download_info_download_failed">stiahnutie zlyhalo</string>
|
||||
<string name="detail_item_download_info_download_failed_expired">stiahnutie zlyhalo, odkaz vypršal</string>
|
||||
<string name="detail_item_download_info_download_failed_expires_x">stiahnutie zlyhalo, platnosť odkazu končí %1$s</string>
|
||||
<string name="detail_action_mode_menu_delete">Zmazať</string>
|
||||
<string name="detail_action_mode_delete_dialog_message">Odstrániť vybrané oznámenie (oznámenia) natrvalo\?</string>
|
||||
<string name="detail_action_mode_delete_dialog_permanently_delete">Vymazať natrvalo</string>
|
||||
<string name="detail_menu_settings">Nastavenia predplatného</string>
|
||||
<string name="detail_menu_notifications_disabled_forever">Oznámenia stlmené</string>
|
||||
<string name="detail_menu_notifications_disabled_until">Oznámenia stlmené do %1$s</string>
|
||||
<string name="detail_menu_unsubscribe">Odhlásiť odber</string>
|
||||
<string name="detail_menu_enable_instant">Povoliť okamžité doručenie</string>
|
||||
<string name="detail_menu_disable_instant">Vypnúť okamžité doručenie</string>
|
||||
<string name="detail_menu_test">Odoslať testovacie oznámenie</string>
|
||||
<string name="detail_menu_clear">Vymazať všetky oznámenia</string>
|
||||
<string name="share_menu_send">Zdielať</string>
|
||||
<string name="share_content_title">Náhľad správy</string>
|
||||
<string name="share_content_text_hint">Pridajte obsah na zdieľanie sem</string>
|
||||
<string name="share_content_file_text">Bol s vami zdieľaný súbor</string>
|
||||
<string name="share_content_file_error">Nie je možné prečítať informácie o súbore: %1$s</string>
|
||||
<string name="share_topic_title">Zdieľať s</string>
|
||||
<string name="share_suggested_topics">Navrhované témy</string>
|
||||
<string name="share_successful">Správa zverejnená</string>
|
||||
<string name="notification_dialog_title">Stlmiť oznámenia</string>
|
||||
<string name="notification_dialog_cancel">Zrušiť</string>
|
||||
<string name="notification_dialog_muted_forever_toast_message">Oznámenia stlmené</string>
|
||||
<string name="notification_dialog_muted_until_toast_message">Oznámenia stlmené do %1$s</string>
|
||||
<string name="notification_dialog_save">Uložiť</string>
|
||||
<string name="notification_dialog_enabled_toast_message">Oznámenia boli obnovené</string>
|
||||
<string name="notification_dialog_1h">1 hodina</string>
|
||||
<string name="notification_dialog_2h">2 hodiny</string>
|
||||
<string name="notification_dialog_8h">8 hodín</string>
|
||||
<string name="notification_popup_action_cancel">Zrušiť</string>
|
||||
<string name="settings_title">Nastavenia</string>
|
||||
<string name="notification_dialog_tomorrow">Do zajtra</string>
|
||||
<string name="notification_dialog_forever">Do obnovenia</string>
|
||||
<string name="notification_popup_action_open">Otvoriť</string>
|
||||
<string name="notification_popup_action_browse">Prehľadávať</string>
|
||||
<string name="notification_popup_action_download">Stiahnuť</string>
|
||||
<string name="notification_popup_file">%1$s
|
||||
\nSúbor: %2$s</string>
|
||||
<string name="notification_popup_file_downloading">Sťahovanie %1$s, %2$d%%
|
||||
\n%3$s</string>
|
||||
<string name="notification_popup_file_download_failed">%1$s
|
||||
\nSúbor: %2$s, sťahovanie sa nepodarilo</string>
|
||||
<string name="notification_popup_user_action_failed">%1$s sa nepodarilo: %2$s</string>
|
||||
<string name="settings_notifications_muted_until_x">Oznámenia stlmené do %1$s</string>
|
||||
<string name="settings_notifications_muted_until_title">Stlmiť oznámenia</string>
|
||||
<string name="settings_notifications_header">Oznámenia</string>
|
||||
<string name="settings_notifications_muted_until_show_all">Zobrazenie všetkých oznámení</string>
|
||||
<string name="settings_notifications_min_priority_summary_any">Zobrazenie všetkých oznámení</string>
|
||||
<string name="settings_notifications_muted_until_forever">Oznámenia stlmené až do obnovenia</string>
|
||||
<string name="settings_notifications_min_priority_title">Najnižšia priorita</string>
|
||||
<string name="settings_notifications_min_priority_summary_x_or_higher">Zobraziť oznámenia, ak je priorita %1$d (%2$s) alebo vyššia</string>
|
||||
<string name="settings_notifications_min_priority_low">Nízka priorita a väčšia</string>
|
||||
<string name="settings_notifications_min_priority_default">Predvolená priorita a väčšia</string>
|
||||
<string name="settings_notifications_min_priority_high">Vysoká priorita a väčšia</string>
|
||||
<string name="settings_notifications_min_priority_max">Iba maximálna priorita</string>
|
||||
<string name="settings_notifications_priority_min">najnižšia</string>
|
||||
<string name="settings_notifications_priority_low">nízka</string>
|
||||
<string name="settings_notifications_channel_prefs_summary">Vypnutie funkcie Nerušiť (DND), zvuky atď.</string>
|
||||
<string name="settings_notifications_auto_download_title">Stiahnuť prílohy</string>
|
||||
<string name="settings_notifications_auto_download_summary_never">Automaticky nesťahovať prílohy</string>
|
||||
<string name="settings_notifications_auto_download_summary_always">Automaticky sťahovať prílohy</string>
|
||||
<string name="settings_notifications_auto_download_summary_smaller_than_x">Automaticky sťahovať prílohy do %1$s</string>
|
||||
<string name="settings_notifications_auto_download_never">Automaticky nesťahovať všetko</string>
|
||||
<string name="settings_notifications_auto_download_always">Automaticky sťahovať všetko</string>
|
||||
<string name="settings_notifications_auto_download_100k">Ak je menší ako 100 kB</string>
|
||||
<string name="settings_notifications_auto_download_5m">Ak je menší ako 5 MB</string>
|
||||
<string name="settings_notifications_auto_download_50m">Ak je menší ako 50 MB</string>
|
||||
<string name="settings_notifications_auto_delete_title">Odstrániť oznámenia</string>
|
||||
<string name="settings_notifications_auto_delete_summary_never">Nikdy automaticky neodstraňovať oznámenia</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_day">Automaticky odstrániť oznámenia po jednom dni</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_days">Automaticky odstrániť oznámenia po 3 dňoch</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_week">Automaticky odstrániť oznámenia po jednom týždni</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_months">Automaticky odstrániť oznámenia po 3 mesiacoch</string>
|
||||
<string name="settings_notifications_auto_delete_never">Nikdy</string>
|
||||
<string name="settings_notifications_auto_delete_one_day">Po jednom dni</string>
|
||||
<string name="settings_notifications_auto_delete_three_days">Po 3 dňoch</string>
|
||||
<string name="settings_notifications_auto_delete_one_week">Po jednom týždni</string>
|
||||
<string name="settings_notifications_auto_delete_three_months">Po 3 mesiacoch</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">Upozorňovať pre najvyššiu prioritu</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">Upozornenia s maximálnou prioritou nepretržite upozorňujú, kým nie sú zrušené</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">Oznámenia s maximálnou prioritou upozornia len raz</string>
|
||||
<string name="settings_general_header">Všeobecné</string>
|
||||
<string name="settings_general_default_base_url_message">Zadajte koreňovú URL adresu vášho servera, aby ste použili svoj vlastný server ako predvolený pri prihlásení na odber nových tém alebo zdieľaní tém.</string>
|
||||
<string name="settings_general_default_base_url_default_summary">%1$s (predvolené)</string>
|
||||
<string name="settings_general_users_title">Správa používateľov</string>
|
||||
<string name="settings_general_users_summary">Pridávanie/odstraňovanie používateľov pre chránené témy</string>
|
||||
<string name="settings_general_users_prefs_user_not_used">Nepoužíva sa v žiadnych témach</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_many">Používa sa v témach %1$s</string>
|
||||
<string name="settings_general_users_prefs_user_add">Pridať používateľov</string>
|
||||
<string name="settings_general_users_prefs_user_add_title">Pridať nového používateľa</string>
|
||||
<string name="settings_general_users_prefs_user_add_summary">Vytvoriť nového používateľa pre nový server</string>
|
||||
<string name="settings_general_dark_mode_title">Tmavý režim</string>
|
||||
<string name="settings_general_dark_mode_entry_dark">Tmavý režim</string>
|
||||
<string name="settings_general_dark_mode_summary_system">Použiť predvolené nastavenia systému</string>
|
||||
<string name="settings_general_dark_mode_summary_light">Svetlý režim zapnutý</string>
|
||||
<string name="settings_general_dark_mode_summary_dark">Tmavý režim zapnutý. Ste upír\?</string>
|
||||
<string name="settings_general_dark_mode_entry_system">Použiť predvolené nastavenie systému</string>
|
||||
<string name="settings_general_dark_mode_entry_light">Svetlý režim</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything">Všetko</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything_no_users">Všetko okrem používateľov</string>
|
||||
<string name="settings_backup_restore_backup_entry_settings_only">Iba nastavenia</string>
|
||||
<string name="settings_backup_restore_backup_successful">Záloha vytvorená</string>
|
||||
<string name="settings_backup_restore_backup_failed">Zálohovanie zlyhalo: %1$s</string>
|
||||
<string name="settings_backup_restore_restore_summary">Importovať konfiguráciu, oznámenia a používateľov</string>
|
||||
<string name="settings_backup_restore_restore_successful">Obnovenie úspešné</string>
|
||||
<string name="settings_backup_restore_restore_failed">Obnovenie zlyhalo: %1$s</string>
|
||||
<string name="settings_advanced_broadcast_title">Vysielanie správ</string>
|
||||
<string name="settings_advanced_record_logs_title">Denníky záznamov</string>
|
||||
<string name="settings_advanced_record_logs_summary_enabled">Zaznamenávanie (až 1 000 záznamov) do zariadenia …</string>
|
||||
<string name="settings_advanced_export_logs_title">Kopírovanie/odosielanie protokolov</string>
|
||||
<string name="settings_advanced_export_logs_summary">Kopírovať protokoly do schránky alebo nahrať na nopaste.net (vlastní autor ntfy). Názvy hostiteľov a témy môžu byť cenzurované, oznámenia nikdy nebudú.</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_original">Kopírovať do schránky</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_scrubbed">Kopírovať do schránky (cenzurované)</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_original">Nahrať a skopírovať odkaz</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_scrubbed">Nahrať a skopírovať odkaz (cenzurované)</string>
|
||||
<string name="settings_advanced_export_logs_uploading">Nahrávanie záznamu…</string>
|
||||
<string name="settings_advanced_export_logs_copied_logs">Záznamy skopírované do schránky</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">Zapnite zaznamenávanie, aby ste mohli neskôr zdieľať záznamy a diagnostikovať problémy.</string>
|
||||
<string name="settings_advanced_export_logs_copied_url">Záznamy nahrané a URL adresa skopírovaná</string>
|
||||
<string name="settings_advanced_export_logs_error_uploading">Nepodarilo sa nahrať záznamy: %1$s</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_text">Tieto témy/názvy hostiteľov boli nahradené názvami ovocia, takže môžete bez obáv zdieľať záznamy:
|
||||
\n
|
||||
\n%1$s
|
||||
\n
|
||||
\nHeslá sú vymazané, ale nie sú tu uvedené.</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_empty">Žiadne témy/názvy hostiteľov neboli redigované. Možno nemáte žiadne odbery\?</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_button_ok">OK</string>
|
||||
<string name="settings_advanced_clear_logs_title">Vymazať záznamy</string>
|
||||
<string name="settings_advanced_clear_logs_deleted_toast">Záznamy zmazané</string>
|
||||
<string name="settings_advanced_connection_protocol_title">Protokol pripojenia</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Použiť WebSockets na pripojenie k serveru. Je to odporúčaná metóda, ale môže vyžadovať dodatočnú konfiguráciu v proxy serveri.</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_jsonhttp">Tok JSON cez HTTP</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Použiť tok JSON cez HTTP na pripojenie k serveru. Táto metóda je overená, avšak môže spotrebovať viac batérie.</string>
|
||||
<string name="settings_about_header">O programe</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">Protokol WebSockets</string>
|
||||
<string name="settings_about_version_copied_to_clipboard_message">Skopírované do schránky</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">Vypnutie funkcie Nerušiť (DND), zvuky atď.</string>
|
||||
<string name="settings_about_version_title">Verzia</string>
|
||||
<string name="settings_about_version_format">ntfy %1$s (%2$s)</string>
|
||||
<string name="detail_settings_notifications_instant_title">Okamžité doručenie</string>
|
||||
<string name="detail_settings_notifications_instant_summary_on">Oznámenia sa doručujú okamžite. Vyžaduje službu na popredí a spotrebúva viac batérie.</string>
|
||||
<string name="detail_settings_notifications_instant_summary_off">Upozornenia sa doručujú pomocou služby Firebase. Doručenie sa môže oneskoriť, ale spotrebuje menej batérie.</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Vlastné nastavenia oznámení</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">Používanie vlastných nastavení pre toto predplatné</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">Používanie predvolených nastavení (zvuky, zrušenie funkcie Nerušiť atď.)</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Konfigurácia nastavení oznámení</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Stále upozorňovať</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Upozorniť len raz</string>
|
||||
<string name="detail_settings_appearance_header">Vzhlad</string>
|
||||
<string name="detail_settings_appearance_icon_set_title">Ikona odberu</string>
|
||||
<string name="detail_settings_appearance_icon_set_summary">Nastavenie ikony, ktorá sa má zobrazovať v oznámeniach</string>
|
||||
<string name="detail_settings_appearance_icon_remove_title">Ikona odberu (ťuknutím na ňu ho odstránite)</string>
|
||||
<string name="detail_settings_appearance_icon_remove_summary">Ikona zobrazená v oznámeniach pre túto tému</string>
|
||||
<string name="detail_settings_appearance_icon_error_saving">Ikonu sa nepodarilo uložiť: %1$s</string>
|
||||
<string name="user_dialog_button_cancel">Zrušiť</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">Skopírované do schránky</string>
|
||||
<string name="user_dialog_button_save">Uložiť</string>
|
||||
<string name="detail_settings_appearance_display_name_default_summary">%1$s (predvolené)</string>
|
||||
<string name="detail_settings_about_header">O programe</string>
|
||||
<string name="detail_settings_global_setting_title">Použiť globálne nastavenie</string>
|
||||
<string name="detail_settings_global_setting_suffix">používajú sa globálne nastavenia</string>
|
||||
<string name="detail_settings_about_topic_url_title">URL Adresa témy</string>
|
||||
<string name="user_dialog_title_add">Pridať používateľa</string>
|
||||
<string name="user_dialog_button_add">Pridať používateľa</string>
|
||||
<string name="user_dialog_description_edit">Môžete upraviť používateľské meno/heslo vybraného používateľa alebo ho vymazať.</string>
|
||||
<string name="user_dialog_base_url_hint">URL Adresa služby</string>
|
||||
<string name="user_dialog_username_hint">Používateľské meno</string>
|
||||
<string name="user_dialog_password_hint_add">Heslo</string>
|
||||
<string name="user_dialog_password_hint_edit">Heslo (nezmenené, ak zostane prázdne)</string>
|
||||
<string name="user_dialog_button_delete">Odstrániť používateľa</string>
|
||||
<string name="detail_settings_appearance_display_name_title">Zobrazený názov</string>
|
||||
<string name="channel_notifications_min_name">Minimálna priorita</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">Prihlásený na odber štyroch tém pre okamžité doručovanie</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">Prihlásený na odber tém</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">Prihlásený na odber piatich tém pre okamžité doručovanie</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Prihlásený na odber dvoch tém pre okamžité doručovanie</string>
|
||||
<string name="channel_subscriber_notification_instant_text_six">Prihlásený na odber šiestich tém pre okamžité doručovanie</string>
|
||||
<string name="refresh_message_result">Prijatých %1$d oznámení</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Prihlásený na odber jednej témy pre okamžité doručovanie</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">Prihlásený na odber troch tém pre okamžité doručovanie</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">Prihlásený na odber %1$d tém pre okamžité doručovanie</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">Prihlásený na odber jednej témy</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">Prihlásený na odber dvoch tém</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">Prihlásený na odber troch tém</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">Prihlásený na odber štyroch tém</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_five">Prihlásený na odber piatich tém</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_six">Prihlásený na odber šiestich tém</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">Prihlásený na odber %1$d tém</string>
|
||||
<string name="main_item_status_text_one">%1$d oznámenie</string>
|
||||
<string name="refresh_message_no_results">Všetko je aktualizované</string>
|
||||
<string name="main_menu_settings_title">Nastavenia</string>
|
||||
<string name="main_menu_report_bug_title">Nahlás chybu</string>
|
||||
<string name="main_menu_rate_title">Ohodnotiť aplikáciu ⭐</string>
|
||||
<string name="main_menu_docs_title">Prečítať dokumentáciu</string>
|
||||
<string name="main_menu_notifications_disabled_until">Oznámenia stlmené do %1$s</string>
|
||||
<string name="main_menu_donate_title">Prispieť 💸</string>
|
||||
<string name="main_action_mode_delete_dialog_message">Odhlásiť odber z vybraných tém a natrvalo vymazať všetky oznámenia\?</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">Vymazať natrvalo</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">Odhlásiť odber</string>
|
||||
<string name="main_action_mode_delete_dialog_cancel">Zrušiť</string>
|
||||
<string name="main_item_status_text_not_one">%1$d oznámení</string>
|
||||
<string name="main_item_status_reconnecting">obnovenie spojenia…</string>
|
||||
<string name="main_add_button_description">Pridať odber</string>
|
||||
<string name="main_item_date_yesterday">včera</string>
|
||||
<string name="main_no_subscriptions_text">Zdá sa, že zatiaľ nemáte žiadne prihlásenia na odber.</string>
|
||||
<string name="add_dialog_login_title">Vyžaduje sa prihlásenie</string>
|
||||
<string name="detail_settings_title">Nastavenia predplatného</string>
|
||||
<string name="share_title">Zdielať</string>
|
||||
<string name="detail_action_mode_delete_dialog_cancel">Zrušiť</string>
|
||||
<string name="share_content_image_text">Bol s vami zdieľaný obrázok</string>
|
||||
<string name="share_content_image_error">Nemožno načítať obrázok: %1$s</string>
|
||||
<string name="detail_menu_notifications_enabled">Oznámenia zapnuté</string>
|
||||
<string name="detail_item_menu_save_file">Uložiť súbor</string>
|
||||
<string name="detail_item_menu_copy_contents_copied">Oznámenie skopírované do schránky</string>
|
||||
<string name="detail_test_message_error_unauthorized_anon">Nemožno odoslať správu: Anonymné publikovanie nie je povolené.</string>
|
||||
<string name="detail_item_cannot_download">Nie je možné otvoriť alebo stiahnuť prílohu. Platnosť odkazu vypršala a nepodarilo sa nájsť žiadny miestny súbor.</string>
|
||||
<string name="detail_item_cannot_open_apk">Aplikácie už nie je možné nainštalovať. Namiesto toho si ich stiahnite cez prehliadač. Podrobnosti nájdete v issue #531.</string>
|
||||
<string name="detail_item_cannot_save">Nie je možné uložiť prílohu: %1$s</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expires_x">nestiahnuté, vyprší %1$s</string>
|
||||
<string name="detail_menu_copy_url">Kopírovať adresu témy</string>
|
||||
<string name="detail_action_mode_menu_copy">Kopírovať</string>
|
||||
<string name="settings_notifications_priority_default">predvolená</string>
|
||||
<string name="notification_dialog_show_all">Zobraziť všetky oznámenia</string>
|
||||
<string name="notification_popup_file_download_successful">%1$s
|
||||
\nSúbor: %2$s, stiahnutý</string>
|
||||
<string name="settings_notifications_min_priority_summary_max">Zobraziť oznámenia, ak je priorita 5 (max.)</string>
|
||||
<string name="settings_notifications_priority_high">vysoká</string>
|
||||
<string name="notification_dialog_30min">30 minút</string>
|
||||
<string name="settings_notifications_min_priority_min">Akákoľvek priorita</string>
|
||||
<string name="settings_notifications_channel_prefs_title">Nastavenia kanálu</string>
|
||||
<string name="settings_notifications_priority_max">najvyššia</string>
|
||||
<string name="settings_notifications_auto_download_500k">Ak je menší ako 500 kB</string>
|
||||
<string name="settings_notifications_auto_download_1m">Ak je menší ako 1 MB</string>
|
||||
<string name="settings_notifications_auto_download_10m">Ak je menší ako 10 MB</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_month">Automaticky odstrániť oznámenia po jednom mesiaci</string>
|
||||
<string name="settings_notifications_auto_delete_one_month">Po jednom mesiaci</string>
|
||||
<string name="settings_general_default_base_url_title">Predvolený server</string>
|
||||
<string name="settings_general_users_prefs_title">Používatelia</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_one">Používa sa v téme %1$s</string>
|
||||
<string name="settings_backup_restore_header">Zálohovanie a obnovenie</string>
|
||||
<string name="settings_backup_restore_backup_title">Zálohovanie do súboru</string>
|
||||
<string name="settings_backup_restore_backup_summary">Export konfigurácie, oznámení a používateľov</string>
|
||||
<string name="settings_backup_restore_restore_title">Obnovenie zo súboru</string>
|
||||
<string name="settings_advanced_header">Pokročilé</string>
|
||||
<string name="settings_advanced_broadcast_summary_enabled">Aplikácie môžu prijímať prichádzajúce oznámenia ako vysielanie</string>
|
||||
<string name="settings_advanced_broadcast_summary_disabled">Aplikácie nemôžu prijímať oznámenia ako vysielanie</string>
|
||||
<string name="settings_advanced_unifiedpush_title">Povolenie služby UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfy nebude fungovať ako distribútor UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy bude fungovať ako distribútor UnifiedPush</string>
|
||||
<string name="detail_how_to_link">Podrobné pokyny sú k dispozícii na stránke ntfy.sh a v dokumentácií.</string>
|
||||
<string name="detail_clear_dialog_message">Vymazať všetky oznámenia v tejto téme\?</string>
|
||||
<string name="settings_advanced_clear_logs_summary">Vymazať predtým zaznamenané záznamy a začať odznova</string>
|
||||
<string name="detail_settings_appearance_display_name_message">Nastavenie vlastného zobrazovacieho názvu pre tento odber. Pre predvolené nastavenie (%1$s) nechajte prázdne.</string>
|
||||
<string name="user_dialog_title_edit">Upraviť používateľa</string>
|
||||
<string name="user_dialog_description_add">Používateľa môžete pridať tu. Tento používateľ bude použitý vo všetkých témach pre daný server.</string>
|
||||
<string name="main_item_status_unified_push">%1$s (Služba UnifiedPush)</string>
|
||||
</resources>
|
|
@ -1,346 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_subscriber_service_name">Prenumerationstjänst</string>
|
||||
<string name="channel_subscriber_notification_title">Lyssna på inkommande meddelanden</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Prenumererar på ämnen med omedelbar leverans</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Prenumererar på ett ämne för omedelbar leverans</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Prenumererar på två ämnen med omedelbar leverans</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">Prenumererar på tre ämnen med omedelbar leverans</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">Prenumererar på fyra ämnen med omedelbar leverans</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">Prenumererar på fem ämnen med omedelbar leverans</string>
|
||||
<string name="channel_subscriber_notification_instant_text_six">Prenumererar på sex ämnen med omedelbar leverans</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">Prenumererar på ämnen</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">Prenumererar på ett ämne</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">Prenumererad på två ämnen</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">Prenumererar på tre ämnen</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">Prenumererar på fyra ämnen</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_five">Prenumererar på fem ämnen</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_six">Prenumererar på sex ämnen</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">Prenumererar på %1$d ämnen</string>
|
||||
<string name="refresh_message_result">%1$d meddelande(n) har tagits emot</string>
|
||||
<string name="refresh_message_no_results">Allt är uppdaterat</string>
|
||||
<string name="refresh_message_error">Kunde inte uppdatera %1$d prenumerationer
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="refresh_message_error_one">Kunde inte uppdatera prenumerationen: %1$s</string>
|
||||
<string name="main_action_bar_title">Prenumererade kategorier</string>
|
||||
<string name="main_menu_notifications_enabled">Aviseringar på</string>
|
||||
<string name="main_menu_notifications_disabled_forever">Notiser tystade</string>
|
||||
<string name="main_menu_notifications_disabled_until">Aviseringar tystade till %1$s</string>
|
||||
<string name="main_menu_settings_title">Inställningar</string>
|
||||
<string name="main_menu_docs_title">Läs dokumentationen</string>
|
||||
<string name="main_menu_rate_title">Betygsätt appen ⭐</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">Avprenumerera</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">Ta bort permanent</string>
|
||||
<string name="main_action_mode_delete_dialog_cancel">Avbryt</string>
|
||||
<string name="main_item_status_text_one">%1$d meddelande</string>
|
||||
<string name="main_item_status_text_not_one">%1$d meddelanden</string>
|
||||
<string name="main_item_status_reconnecting">återansluter…</string>
|
||||
<string name="main_item_status_unified_push">%1$s (UnifiedPush)</string>
|
||||
<string name="main_item_date_yesterday">igår</string>
|
||||
<string name="main_add_button_description">Lägg till prenumeration</string>
|
||||
<string name="main_no_subscriptions_text">Det verkar som att du inte har några prenumerationer än.</string>
|
||||
<string name="main_how_to_intro">Klicka på + för att skapa eller prenumerera på ett ämne. Därefter får du meddelanden på din enhet när du skickar meddelanden via PUT eller POST.</string>
|
||||
<string name="main_how_to_link">Detaljerade instruktioner finns på ntfy.sh och i dokumentationen.</string>
|
||||
<string name="main_unified_push_toast">Denna prenumeration hanteras av %1$s via UnifiedPush</string>
|
||||
<string name="main_banner_battery_text">Batterioptimering bör vara avstängd för appen för att undvika problem med leverans av meddelanden.</string>
|
||||
<string name="main_banner_battery_button_remind_later">Fråga senare</string>
|
||||
<string name="main_banner_battery_button_dismiss">Avvisa</string>
|
||||
<string name="main_banner_battery_button_fix_now">Fixa nu</string>
|
||||
<string name="main_banner_websocket_button_remind_later">Fråga senare</string>
|
||||
<string name="main_banner_websocket_button_dismiss">Avvisa</string>
|
||||
<string name="main_banner_websocket_button_enable_now">Aktivera nu</string>
|
||||
<string name="add_dialog_title">Prenumerera på ämnet</string>
|
||||
<string name="add_dialog_description_below">Ämnena kanske inte är lösenordsskyddade, så välj ett namn som är svårt att gissa. När du har prenumererat kan du PUT/POST-meddelanden.</string>
|
||||
<string name="add_dialog_use_another_server">Använd en annan server</string>
|
||||
<string name="add_dialog_use_another_server_description">Ange tjänstens webbadresser nedan för att prenumerera på ämnen från andra servrar.</string>
|
||||
<string name="add_dialog_instant_delivery_description">Säkerställer att meddelanden levereras omedelbart, även om enheten är inaktiv.</string>
|
||||
<string name="add_dialog_foreground_description">Omedelbar leverans är alltid på för andra värdar än %1$s.</string>
|
||||
<string name="add_dialog_button_cancel">Avbryt</string>
|
||||
<string name="add_dialog_button_subscribe">Prenumerera</string>
|
||||
<string name="add_dialog_button_back">Tillbaka</string>
|
||||
<string name="add_dialog_button_login">Logga in</string>
|
||||
<string name="add_dialog_error_connection_failed">Anslutningen misslyckades: %1$s</string>
|
||||
<string name="add_dialog_login_title">Inloggning krävs</string>
|
||||
<string name="add_dialog_login_description">Du måste logga in för att kunna ta del av det här ämnet. Ange ett användarnamn och lösenord.</string>
|
||||
<string name="add_dialog_instant_delivery">Omedelbar leverans i dvala</string>
|
||||
<string name="add_dialog_login_error_not_authorized">Inloggningen misslyckades. Användaren %1$s är inte auktoriserad.</string>
|
||||
<string name="add_dialog_login_new_user">Ny användare</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">Välj tjänstens URL</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">Rensa tjänstens URL</string>
|
||||
<string name="detail_no_notifications_text">Du har inte fått några meddelanden för detta ämne ännu.</string>
|
||||
<string name="detail_how_to_intro">För att skicka meddelanden till det här ämnet, PUT eller POST till ämnesadressen.</string>
|
||||
<string name="detail_how_to_example">Exempel (med curl):<br/><tt>$ curl -d \"Hej\" %1$s</tt></string>
|
||||
<string name="detail_how_to_link">Detaljerade instruktioner finns på ntfy.sh och i dokumentationen.</string>
|
||||
<string name="detail_clear_dialog_message">Ta bort alla meddelanden i det här ämnet\?</string>
|
||||
<string name="detail_clear_dialog_permanently_delete">Ta bort permanent</string>
|
||||
<string name="detail_clear_dialog_cancel">Avbryt</string>
|
||||
<string name="detail_delete_dialog_message">Vill du avsluta prenumerationen på det här ämnet och ta bort alla mottagna aviseringar\?</string>
|
||||
<string name="detail_delete_dialog_permanently_delete">Ta bort permanent</string>
|
||||
<string name="detail_delete_dialog_cancel">Avbryt</string>
|
||||
<string name="detail_test_title">Test: Du kan ange en titel om du vill.</string>
|
||||
<string name="detail_test_message">Detta är ett testmeddelande från ntfy Android-appen. Den har prioritetsnivån %1$d. Om du skickar en annan kan den se annorlunda ut.</string>
|
||||
<string name="detail_test_message_error">Kan inte skicka meddelande: %1$s</string>
|
||||
<string name="detail_test_message_error_unauthorized_user">Kan inte skicka meddelande: Användaren \"%1$s\" är inte auktoriserad.</string>
|
||||
<string name="detail_test_message_error_too_large">Kan inte skicka meddelande: Bilagan är för stor.</string>
|
||||
<string name="detail_copied_to_clipboard_message">Kopierat till urklipp</string>
|
||||
<string name="detail_instant_delivery_enabled">Omedelbar leverans på</string>
|
||||
<string name="detail_instant_delivery_disabled">Omedelbar leverans av</string>
|
||||
<string name="detail_deep_link_subscribed_toast_message">Prenumererar på ämne %1$s</string>
|
||||
<string name="channel_notifications_min_name">Lägsta prioritet</string>
|
||||
<string name="channel_notifications_low_name">Låg prioritet</string>
|
||||
<string name="channel_notifications_high_name">Hög prioritet</string>
|
||||
<string name="channel_notifications_default_name">Standard prioritet</string>
|
||||
<string name="channel_notifications_max_name">Högsta prioritet</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">Prenumererar på %1$d ämnen med omedelbar leverans</string>
|
||||
<string name="main_menu_report_bug_title">Rapportera ett fel</string>
|
||||
<string name="main_action_mode_delete_dialog_message">Avregistrera mig från de valda ämnena och radera alla meddelanden permanent\?</string>
|
||||
<string name="main_banner_websocket_text">Att byta till WebSockets är det rekommenderade sättet att ansluta till servern och kan förbättra batteritiden, men kan kräva <a href="https://ntfy.sh/docs/config/#nginxapache2caddy">ytterligare konfigurationer i din proxy</a>. Detta kan ställas in i Inställningarna.</string>
|
||||
<string name="add_dialog_login_username_hint">Användarnamn</string>
|
||||
<string name="add_dialog_login_password_hint">Lösenord</string>
|
||||
<string name="detail_test_message_error_unauthorized_anon">Kan inte skicka meddelande: Anonym publicering är inte tillåten.</string>
|
||||
<string name="detail_item_snack_deleted">Notifikation borttagen</string>
|
||||
<string name="detail_item_menu_copy_url_copied">URL kopierad till urklipp</string>
|
||||
<string name="detail_item_menu_copy_contents">Kopiera notifikation</string>
|
||||
<string name="detail_item_menu_copy_contents_copied">Notifikation kopierad till urklipp</string>
|
||||
<string name="detail_item_cannot_open_url">Kan inte öppna URL: %1$s</string>
|
||||
<string name="detail_menu_clear">Rensa alla notifikationer</string>
|
||||
<string name="detail_menu_test">Skicka testnotifikation</string>
|
||||
<string name="detail_action_mode_menu_copy">Kopiera</string>
|
||||
<string name="detail_action_mode_menu_delete">Ta bort</string>
|
||||
<string name="detail_action_mode_delete_dialog_permanently_delete">Ta bort permanent</string>
|
||||
<string name="detail_action_mode_delete_dialog_cancel">Avbryt</string>
|
||||
<string name="detail_settings_title">Prenumerationsinställningar</string>
|
||||
<string name="share_title">Dela</string>
|
||||
<string name="share_menu_send">Dela</string>
|
||||
<string name="main_menu_donate_title">Donera 💸</string>
|
||||
<string name="detail_item_snack_undo">Ångra</string>
|
||||
<string name="detail_item_menu_open">Öppna fil</string>
|
||||
<string name="detail_item_menu_delete">Ta bort fil</string>
|
||||
<string name="detail_item_menu_download">Ladda ner fil</string>
|
||||
<string name="detail_item_menu_cancel">Avbryt nedladdning</string>
|
||||
<string name="detail_item_menu_save_file">Spara fil</string>
|
||||
<string name="detail_item_menu_copy_url">Kopiera URL</string>
|
||||
<string name="detail_item_download_info_download_failed">nedladdning misslyckad</string>
|
||||
<string name="detail_menu_settings">Prenumerationsinställningar</string>
|
||||
<string name="channel_notifications_group_default_name">Förval</string>
|
||||
<string name="detail_item_cannot_open_not_found">Kan inte öppna bifogat dokument: Filen kan ha raderats eller så kan inget installerat program öppna filen.</string>
|
||||
<string name="detail_item_cannot_open_apk">Appar kan inte installeras längre. Ladda ned dem via webbläsaren istället. See Problem #531 för detaljer.</string>
|
||||
<string name="add_dialog_topic_name_hint">Ämnesnamn, t. ex. phils_alerts</string>
|
||||
<string name="detail_item_cannot_open">Kan inte öppna bifogat dokument: %1$s</string>
|
||||
<string name="user_dialog_button_save">Spara</string>
|
||||
<string name="detail_item_tags">Taggar: %1$s</string>
|
||||
<string name="detail_item_saved_successfully">Sparad som \"%1$s\" inuti \"Downloads\" mappen</string>
|
||||
<string name="detail_item_cannot_download">Kan inte öppna eller ladda ned bifogat dokument. Länken har uphört och ingen lokal fil hittades.</string>
|
||||
<string name="detail_item_cannot_save">Kan inte spara bifogat dokument: %1$s</string>
|
||||
<string name="detail_item_cannot_delete">Kan inte radera bifogat dokument: %1$s</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expires_x">nedladdning misslyckad, utgått %1$s</string>
|
||||
<string name="detail_item_download_info_downloading_x_percent">%1$d%% nedladdad</string>
|
||||
<string name="detail_item_download_info_deleted_expires_x">bortagen, länk ogiltig %1$s</string>
|
||||
<string name="detail_menu_notifications_enabled">Notifieringar på</string>
|
||||
<string name="detail_menu_notifications_disabled_until">Notifieringar av till %1$s</string>
|
||||
<string name="detail_menu_enable_instant">Aktivera direktmeddelande</string>
|
||||
<string name="share_content_file_text">En fil var delad med dig</string>
|
||||
<string name="notification_dialog_2h">2 timmar</string>
|
||||
<string name="notification_popup_action_cancel">Avbryt</string>
|
||||
<string name="notification_popup_file">%1$s
|
||||
\nFil:%2$s</string>
|
||||
<string name="notification_popup_file_downloading">Laddar ner %1$s,%2$d%%
|
||||
\n%3$s</string>
|
||||
<string name="notification_popup_file_download_successful">%1$s
|
||||
\nFil:%2$s, nedladdad</string>
|
||||
<string name="notification_popup_file_download_failed">%1$s
|
||||
\nFil:%2$s, nedladdning misslyckad</string>
|
||||
<string name="notification_popup_user_action_failed">%1$s misslyckad: %2$s</string>
|
||||
<string name="settings_notifications_min_priority_summary_x_or_higher">Visa notifieringar om prioritet är %1$d (%2$s) eller högre</string>
|
||||
<string name="settings_notifications_channel_prefs_title">Kanalinställningar</string>
|
||||
<string name="settings_notifications_auto_download_summary_smaller_than_x">Ladda automatiskt ner bifogade filer upp till %1$s</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_month">Radera notifieringarna efter en månad</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_months">Radera notifieringarna efter 3 månader</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">Fortsätt visa meddelande med högsta prioritet</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">Notifieringar med max prioritet visas tills avvisats</string>
|
||||
<string name="settings_advanced_clear_logs_title">Rensa loggar</string>
|
||||
<string name="settings_backup_restore_backup_failed">Säkerhetskopiering%1$ misslyckad: %1$s</string>
|
||||
<string name="settings_advanced_export_logs_copied_url">Loggfiler uppladdat och URL kopierad</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">Använder anpassade inställningar för den här prenumerationen</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Egna notfieringsinställningar</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">Använder standardinställningar (ljud, Stör ej åsidosättning, etc.)</string>
|
||||
<string name="detail_settings_appearance_icon_error_saving">Kan ej att spara ikon:%1$s</string>
|
||||
<string name="user_dialog_password_hint_add">Lösenord</string>
|
||||
<string name="user_dialog_password_hint_edit">Lösenord (oförändrat om blankt)</string>
|
||||
<string name="user_dialog_button_add">Lägg till användare</string>
|
||||
<string name="user_dialog_button_cancel">Avbryt</string>
|
||||
<string name="user_dialog_button_delete">Radera användare</string>
|
||||
<string name="detail_item_download_failed">Kunde inte ladda ner bifogad fil: %1$s</string>
|
||||
<string name="detail_item_download_info_not_downloaded">Nedladdning misslyckad</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expired">nedladdning misslyckad, länk ej giltig</string>
|
||||
<string name="detail_item_download_info_deleted">borttagen</string>
|
||||
<string name="detail_item_download_info_deleted_expired">borttagen, länk ogiltig</string>
|
||||
<string name="detail_menu_notifications_disabled_forever">Notifieringar av</string>
|
||||
<string name="detail_item_download_info_download_failed_expired">nedladdning misslyckad, länk ogiltig</string>
|
||||
<string name="detail_menu_copy_url">Kopiera ämnesraden</string>
|
||||
<string name="detail_menu_unsubscribe">avslutad prenumeration</string>
|
||||
<string name="detail_menu_disable_instant">Inaktivera direktmeddelande</string>
|
||||
<string name="detail_action_mode_delete_dialog_message">Ta bort markerat meddelande(n) permanent\?</string>
|
||||
<string name="share_content_text_hint">Lägg till innehåll att dela här</string>
|
||||
<string name="share_content_image_text">En bild har blivit delad med dig</string>
|
||||
<string name="share_content_title">Förhandsgranska meddelande</string>
|
||||
<string name="share_content_image_error">Kan inte läsa bild:%1$s</string>
|
||||
<string name="share_suggested_topics">Ämnesförslag</string>
|
||||
<string name="notification_dialog_title">Inaktivera notifikationer</string>
|
||||
<string name="share_topic_title">Dela med</string>
|
||||
<string name="notification_dialog_enabled_toast_message">Notifikationer aktiverat</string>
|
||||
<string name="notification_dialog_muted_forever_toast_message">Notifikationer inaktiverat</string>
|
||||
<string name="notification_dialog_muted_until_toast_message">Notifikationer inaktiverat till %1$s</string>
|
||||
<string name="notification_dialog_save">Spara</string>
|
||||
<string name="notification_popup_action_browse">Bläddra</string>
|
||||
<string name="notification_dialog_forever">Tills återaktiverad</string>
|
||||
<string name="notification_popup_action_open">Öppna</string>
|
||||
<string name="notification_popup_action_download">Ladda ner</string>
|
||||
<string name="settings_notifications_muted_until_title">Inaktivera notifieringar</string>
|
||||
<string name="settings_notifications_muted_until_show_all">Visa alla notifieringar</string>
|
||||
<string name="settings_notifications_muted_until_forever">Notifieringar inaktiverade tillsvidare</string>
|
||||
<string name="settings_title">Inställningar</string>
|
||||
<string name="settings_notifications_header">Notifieringar</string>
|
||||
<string name="settings_notifications_min_priority_high">Hög prioritet eller högre</string>
|
||||
<string name="settings_notifications_min_priority_max">Bara högsta prioritet</string>
|
||||
<string name="settings_notifications_priority_min">min</string>
|
||||
<string name="settings_notifications_priority_low">låg</string>
|
||||
<string name="settings_notifications_priority_default">standard</string>
|
||||
<string name="settings_notifications_priority_high">hög</string>
|
||||
<string name="settings_notifications_min_priority_summary_max">Visa notifieringar om prioritet är 5 (max)</string>
|
||||
<string name="settings_notifications_min_priority_min">Alla prioriteringar</string>
|
||||
<string name="settings_notifications_min_priority_low">Låg prioritet eller högre</string>
|
||||
<string name="settings_notifications_min_priority_default">Normal prioritet eller högre</string>
|
||||
<string name="settings_notifications_priority_max">max</string>
|
||||
<string name="settings_notifications_channel_prefs_summary">Stör ej (DND) åsidosätt ljud, etc.</string>
|
||||
<string name="settings_notifications_auto_download_title">Ladda ner filer</string>
|
||||
<string name="settings_notifications_auto_download_summary_never">Ladda inte automatiskt ner alla filer</string>
|
||||
<string name="settings_notifications_auto_download_summary_always">Automatiskt ladda ner alla filer</string>
|
||||
<string name="settings_notifications_auto_download_100k">Om mindre än 100 KB</string>
|
||||
<string name="settings_notifications_auto_download_500k">Om mindre än 500 KB</string>
|
||||
<string name="settings_notifications_auto_download_50m">Om mindre än 50 MB</string>
|
||||
<string name="settings_notifications_auto_delete_title">Radera notifieringarna</string>
|
||||
<string name="settings_notifications_auto_download_never">Ladda aldrig ner något automatiskt</string>
|
||||
<string name="settings_notifications_auto_download_1m">Om mindre än 1 MB</string>
|
||||
<string name="settings_notifications_auto_download_5m">Om mindre än 5 MB</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_day">Radera notifieringarna efter 1 dag</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_days">Radera notifieringarna efter 3 dagar</string>
|
||||
<string name="settings_notifications_auto_delete_never">Aldrig</string>
|
||||
<string name="settings_notifications_auto_delete_one_day">Efter en dag</string>
|
||||
<string name="settings_notifications_auto_delete_three_days">Efter 3 dagar</string>
|
||||
<string name="settings_general_users_summary">Lägg till/ta bort användare för privata ämnen</string>
|
||||
<string name="settings_general_users_prefs_title">Användare</string>
|
||||
<string name="settings_general_default_base_url_message">Ange din servers rot-URL för att använda din egen server som standard när du prenumererar på nya ämnen och/eller delar ämnen.</string>
|
||||
<string name="settings_general_default_base_url_default_summary">%1$s (standard)</string>
|
||||
<string name="settings_general_users_title">Hantera användare</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_one">Används i ämne %1$s</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_many">Används i ämnen %1$s</string>
|
||||
<string name="settings_general_users_prefs_user_add">Lägg till användare</string>
|
||||
<string name="settings_general_users_prefs_user_add_title">Lägg till ny användare</string>
|
||||
<string name="settings_general_users_prefs_user_add_summary">Lägg till en ny användare för ny server</string>
|
||||
<string name="settings_general_dark_mode_entry_light">Ljust tema</string>
|
||||
<string name="settings_general_dark_mode_entry_dark">Mörkt tema</string>
|
||||
<string name="settings_backup_restore_header">Säkerhetskopia & återställning</string>
|
||||
<string name="settings_backup_restore_backup_summary">Exportera inställningar, notifieringar och användare</string>
|
||||
<string name="settings_general_dark_mode_summary_dark">Mörkt läge aktivt. Är du en vampyr\?</string>
|
||||
<string name="settings_general_dark_mode_entry_system">Används systemstandard</string>
|
||||
<string name="settings_backup_restore_backup_title">Säkerhetskopiera till fil</string>
|
||||
<string name="settings_advanced_broadcast_title">Sända meddelanden</string>
|
||||
<string name="settings_advanced_broadcast_summary_disabled">Appar kan inte ta emot meddelanden som sändningar</string>
|
||||
<string name="settings_advanced_broadcast_summary_enabled">Appar kan ta emot inkommande meddelanden som sändningar</string>
|
||||
<string name="settings_advanced_export_logs_summary">Kopiera loggtext till urklipp, eller ladda upp till nopaste.net (ägs av skaparen av ntfy). Datornamn och ämnen kan censureras, meddelandetext censureras aldrig.</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_original">Kopiera till urklipp</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_scrubbed">Kopiera till urklipp (censurerat)</string>
|
||||
<string name="settings_advanced_export_logs_error_uploading">Kunde inte ladda upp loggar:%1$s</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_text">Dessa ämnen/hostnamn ersattes med fruktnamn, så att du kan dela loggen utan att vara orolig:
|
||||
\n
|
||||
\n%1$s
|
||||
\n
|
||||
\nLösenord har rensats, men de finns inte med här.</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_empty">Inga ämnen eller värdnamn har redigerats. Du kanske inte har några prenumerationer\?</string>
|
||||
<string name="settings_advanced_clear_logs_deleted_toast">Loggar raderade</string>
|
||||
<string name="settings_advanced_connection_protocol_title">Anslutningsprotokoll</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Använd en JSON-ström över HTTP för att ansluta till servern. Den här metoden är beprövad, men kan förbruka mer batteri.</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_jsonhttp">JSON stream över HTTP</string>
|
||||
<string name="detail_settings_notifications_instant_summary_on">Notifieringarna levereras direkt. Kräver att appen aktivt körs vilket kräver mer batteri.</string>
|
||||
<string name="settings_about_version_title">Version</string>
|
||||
<string name="settings_about_version_format">ntfy %1$s (%2$s)</string>
|
||||
<string name="settings_about_version_copied_to_clipboard_message">Kopierad till urklipp</string>
|
||||
<string name="detail_settings_appearance_header">Utseende</string>
|
||||
<string name="detail_settings_notifications_instant_title">Omedelbar leverans</string>
|
||||
<string name="detail_settings_appearance_icon_set_title">Prenumerationsikon</string>
|
||||
<string name="detail_settings_appearance_icon_set_summary">Välj en ikon att visa i notifieringarna</string>
|
||||
<string name="detail_settings_appearance_icon_remove_title">Prenumerationsikon (tryck för att radera)</string>
|
||||
<string name="detail_settings_global_setting_suffix">Använder de globala inställningarna</string>
|
||||
<string name="detail_settings_about_header">Om</string>
|
||||
<string name="detail_item_download_info_download_failed_expires_x">nedladdning misslyckad, länk ogiltig %1$s</string>
|
||||
<string name="notification_dialog_show_all">Visa alla notifikationer</string>
|
||||
<string name="share_content_file_error">Kan inte läsa filinformation:%1$s</string>
|
||||
<string name="notification_dialog_30min">30 minuter</string>
|
||||
<string name="notification_dialog_8h">8 timmar</string>
|
||||
<string name="notification_dialog_tomorrow">Tills imorgon</string>
|
||||
<string name="settings_notifications_min_priority_title">Låg prioritet</string>
|
||||
<string name="settings_notifications_muted_until_x">Notifieringar inaktiverad till %1$s</string>
|
||||
<string name="settings_notifications_min_priority_summary_any">Visa alla notifieringar</string>
|
||||
<string name="settings_notifications_auto_delete_summary_never">Radera aldrig notifieringarna</string>
|
||||
<string name="settings_notifications_auto_delete_one_week">Efter en vecka</string>
|
||||
<string name="settings_notifications_auto_delete_one_month">Efter en månad</string>
|
||||
<string name="settings_notifications_auto_delete_three_months">Efter 3 månader</string>
|
||||
<string name="settings_general_header">Allmänt</string>
|
||||
<string name="settings_general_default_base_url_title">Standardserver</string>
|
||||
<string name="settings_general_users_prefs_user_not_used">Används inte av något ämne</string>
|
||||
<string name="settings_general_dark_mode_title">Mörkt tema</string>
|
||||
<string name="settings_general_dark_mode_summary_system">Använd enhetens standardinställning</string>
|
||||
<string name="settings_general_dark_mode_summary_light">Ljust tema aktivt</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything">Allt</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything_no_users">Allt, förutom användare</string>
|
||||
<string name="settings_backup_restore_backup_successful">Säkerhetskopia skapad</string>
|
||||
<string name="settings_backup_restore_backup_entry_settings_only">Endast inställningar</string>
|
||||
<string name="settings_backup_restore_restore_summary">Importera inställningar, notifieringar och användare</string>
|
||||
<string name="settings_backup_restore_restore_successful">Återställning slutförd</string>
|
||||
<string name="settings_advanced_export_logs_title">Kopiera/ladda upp loggar</string>
|
||||
<string name="settings_backup_restore_restore_failed">Återställning misslyckades: %1$s</string>
|
||||
<string name="settings_advanced_header">Avancerat</string>
|
||||
<string name="settings_advanced_record_logs_title">Spara loggar</string>
|
||||
<string name="settings_advanced_clear_logs_summary">Rensa alla gamla loggar, börja på nytt</string>
|
||||
<string name="user_dialog_title_edit">Editera användare</string>
|
||||
<string name="user_dialog_description_edit">Du kan redigera användarnamn/lösenord för den valda användaren eller ta bort den.</string>
|
||||
<string name="settings_advanced_record_logs_summary_enabled">Loggar (upp till 1 000 poster) till enhet …</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">Aktivera loggning, så du kan dela loggar för felsökning.</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_original">Ladda upp och kopiera länk</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_scrubbed">Ladda upp och kopiera länk (censurerat)</string>
|
||||
<string name="settings_advanced_export_logs_copied_logs">Loggar kopierat till urklipp</string>
|
||||
<string name="settings_advanced_export_logs_uploading">Laddar upp loggfil…</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_button_ok">OK</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">WebSockets</string>
|
||||
<string name="settings_about_header">Om</string>
|
||||
<string name="detail_settings_notifications_instant_summary_off">Notifieringar levereras genom Firebase. Viss fördröjning kan förekomma, men kräver mindre batteri.</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Anpassa notifieringsinställningarna</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">Stör ej (DND) åsidosätts, ljud, etc.</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Fortsätt meddela</string>
|
||||
<string name="detail_settings_appearance_display_name_title">Visningsnamn</string>
|
||||
<string name="detail_settings_appearance_display_name_message">Sätt ett eget visningsnamn för denna prenumeration. Lämna blank för standard (%1$s).</string>
|
||||
<string name="detail_settings_appearance_display_name_default_summary">%1$s (standard)</string>
|
||||
<string name="detail_settings_about_topic_url_title">Ämnes-URL</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">Kopierad till urklipp</string>
|
||||
<string name="user_dialog_title_add">Lägg till användare</string>
|
||||
<string name="user_dialog_description_add">Du kan lägga till en användare här. Alla ämnen för den givna servern kommer att använda den här användaren.</string>
|
||||
<string name="user_dialog_base_url_hint">Service-URL</string>
|
||||
<string name="user_dialog_username_hint">Användarnamn</string>
|
||||
<string name="share_successful">Meddelande publicerat</string>
|
||||
<string name="notification_dialog_cancel">Avbryt</string>
|
||||
<string name="notification_dialog_1h">1 timme</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_week">Radera notifieringarna efter en vecka</string>
|
||||
<string name="settings_notifications_auto_download_always">Ladda automatiskt ner allt</string>
|
||||
<string name="settings_notifications_auto_download_10m">Om mindre än 10 MB</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">Notifieringar med max prioritet visas endast en gång</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy kommer att fungera som distributör av notifieringar</string>
|
||||
<string name="settings_backup_restore_restore_title">Återställ från fil</string>
|
||||
<string name="settings_advanced_unifiedpush_title">Aktivera pushnotiser</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfy kommer inte att fungera som distributör av notifieringar</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Använd WebSockets för att ansluta till servern. Detta är den rekommenderade metoden, men kan kräva ytterligare konfiguration i din proxy.</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Meddela endast en gång</string>
|
||||
<string name="detail_settings_global_setting_title">Använd de globala inställningarna</string>
|
||||
<string name="detail_settings_appearance_icon_remove_summary">Ikon som visas i meddelanden för detta ämne</string>
|
||||
</resources>
|
|
@ -1,20 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_notifications_low_name">அறிவிப்புகள் (குறைந்த முன்னுரிமை)</string>
|
||||
<string name="channel_notifications_high_name">அறிவிப்புகள் (உயர் முன்னுரிமை)</string>
|
||||
<string name="channel_notifications_max_name">அறிவிப்புகள் (அதிகபட்ச முன்னுரிமை)</string>
|
||||
<string name="detail_action_mode_menu_delete">நீக்கு</string>
|
||||
<string name="detail_action_mode_delete_dialog_cancel">ரத்துசெய்</string>
|
||||
<string name="share_title">பகிர்</string>
|
||||
<string name="share_menu_send">பகிர்</string>
|
||||
<string name="detail_item_download_info_deleted">நீக்கப்பட்டது</string>
|
||||
<string name="channel_subscriber_service_name">சந்தா சேவை</string>
|
||||
<string name="channel_notifications_min_name">அறிவிப்புகள் (குறைந்தபட்ச முன்னுரிமை)</string>
|
||||
<string name="detail_action_mode_menu_copy">பிரதி</string>
|
||||
<string name="channel_notifications_default_name">அறிவிப்புகள் (இயல்புநிலை முன்னுரிமை)</string>
|
||||
<string name="detail_action_mode_delete_dialog_permanently_delete">நிரந்தரமாக நீக்கு</string>
|
||||
<string name="notification_dialog_save">சேமிக்க</string>
|
||||
<string name="notification_dialog_cancel">ரத்து செய்</string>
|
||||
<string name="detail_clear_dialog_cancel">ரத்து செய்</string>
|
||||
<string name="detail_item_menu_cancel">பதிவிறக்கத்தை ரத்து செய்</string>
|
||||
</resources>
|
|
@ -2,8 +2,8 @@
|
|||
<resources>
|
||||
<string name="main_item_status_text_one">%1$d bildirim</string>
|
||||
<string name="detail_how_to_intro">Bu konuya bildirim göndermek için konu URL\'sine PUT veya POST göndermeniz yeterlidir.</string>
|
||||
<string name="channel_notifications_low_name">Düşük öncelik</string>
|
||||
<string name="channel_notifications_default_name">Öntanımlı öncelik</string>
|
||||
<string name="channel_notifications_low_name">Bildirimler (düşük öncelik)</string>
|
||||
<string name="channel_notifications_default_name">Bildirimler (öntanımlı öncelik)</string>
|
||||
<string name="channel_subscriber_service_name">Abonelik Hizmeti</string>
|
||||
<string name="channel_subscriber_notification_title">Gelen bildirimler için dinleniyor</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Anında teslimat konularına abone olundu</string>
|
||||
|
@ -13,7 +13,7 @@
|
|||
<string name="channel_subscriber_notification_instant_text_more">%1$d anında teslimat konusuna abone olundu</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">Konulara abone olundu</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">Bir konuya abone olundu</string>
|
||||
<string name="channel_notifications_min_name">En düşük öncelik</string>
|
||||
<string name="channel_notifications_min_name">Bildirimler (en düşük öncelik)</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">Dört anında teslimat konusuna abone olundu</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">Dört konuya abone olundu</string>
|
||||
<string name="refresh_message_no_results">Her şey güncel</string>
|
||||
|
@ -174,7 +174,7 @@
|
|||
<string name="settings_advanced_connection_protocol_title">Bağlantı protokolü</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Sunucuya bağlanmak için HTTP üzerinden bir JSON akışı kullanın. Bu yöntem iyi test edilmiştir, ancak daha fazla pil tüketebilir.</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Sunucuya bağlanmak için WebSockets kullanın. Bu tavsiye edilen yöntemdir, ancak vekilinizde ek yapılandırma gerektirebilir.</string>
|
||||
<string name="channel_notifications_max_name">En yüksek öncelik</string>
|
||||
<string name="channel_notifications_max_name">Bildirimler (en yüksek öncelik)</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">İki konuya abone olundu</string>
|
||||
<string name="main_add_button_description">Abonelik ekle</string>
|
||||
<string name="detail_clear_dialog_message">Bu konudaki tüm bildirimler silinsin mi\?</string>
|
||||
|
@ -195,7 +195,7 @@
|
|||
<string name="user_dialog_button_cancel">İptal</string>
|
||||
<string name="user_dialog_button_delete">Kullanıcı sil</string>
|
||||
<string name="user_dialog_button_save">Kaydet</string>
|
||||
<string name="channel_notifications_high_name">Yüksek öncelik</string>
|
||||
<string name="channel_notifications_high_name">Bildirimler (yüksek öncelik)</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">Üç konuya abone olundu</string>
|
||||
<string name="refresh_message_result">%1$d bildirim alındı</string>
|
||||
<string name="main_action_mode_delete_dialog_cancel">İptal</string>
|
||||
|
@ -327,20 +327,4 @@
|
|||
<string name="detail_settings_about_header">Hakkında</string>
|
||||
<string name="detail_settings_about_topic_url_title">Konu URL\'si</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">Panoya kopyalandı</string>
|
||||
<string name="main_menu_donate_title">Bağış yap 💸</string>
|
||||
<string name="detail_item_cannot_open_apk">Uygulamalar artık kurulamıyor. Bunun yerine tarayıcı üzerinden indirin. Ayrıntılar için sorun #531\'e bakın.</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">En yüksek öncelikli bildirimler yalnızca bir kez uyarı verir</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">Bu abonelik için özel ayarları kullan</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Bildirim ayarlarını yapılandır</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">Rahatsız Etmeyin (DND) özelliğini geçersiz kıl, sesler vb.</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Uyarmaya devam et</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Yalnızca bir kez uyar</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">En yüksek öncelik için uyarmaya et</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Özel bildirim ayarları</string>
|
||||
<string name="channel_notifications_group_default_name">Öntanımlı</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">En yüksek öncelikli bildirimler kapatılana kadar sürekli uyarı verir</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">Öntanımlı ayarları kullan (sesler, Rahatsız Etmeyin özelliğini geçersiz kıl, vb.)</string>
|
||||
<string name="settings_advanced_unifiedpush_title">UnifiedPush\'u etkinleştir</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfy bir UnifiedPush dağıtıcısı olarak davranmayacaktır</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy bir UnifiedPush dağıtıcısı olarak davranacaktır</string>
|
||||
</resources>
|
|
@ -1,346 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_notifications_min_name">Мінімальний пріоритет</string>
|
||||
<string name="channel_notifications_default_name">Звичайний пріоритет</string>
|
||||
<string name="channel_notifications_low_name">Низький пріоритет</string>
|
||||
<string name="channel_notifications_high_name">Високий пріоритет</string>
|
||||
<string name="channel_notifications_max_name">Максимальний пріоритет</string>
|
||||
<string name="channel_notifications_min_name">Сповіщення (мінімальний пріоритет)</string>
|
||||
<string name="channel_notifications_default_name">Сповіщення (звичайний пріоритет)</string>
|
||||
<string name="channel_notifications_low_name">Сповіщення (низький пріоритет)</string>
|
||||
<string name="channel_notifications_high_name">Сповіщення (високий пріоритет)</string>
|
||||
<string name="channel_notifications_max_name">Сповіщення (максимальний пріоритет)</string>
|
||||
<string name="channel_subscriber_service_name">Абонементна Послуга</string>
|
||||
<string name="channel_subscriber_notification_title">Очікую вхідні сповіщення</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Підписався на теми миттєвої доставки</string>
|
||||
<string name="detail_settings_appearance_display_name_title">Відображуване ім\'я</string>
|
||||
<string name="detail_settings_appearance_display_name_default_summary">%1$s (за умовчанням)</string>
|
||||
<string name="detail_settings_appearance_display_name_message">Встановіть спеціальну відображувану назву для цієї підписки. Залиште поле порожнім для умовчання (%1$s).</string>
|
||||
<string name="user_dialog_base_url_hint">URL служби</string>
|
||||
<string name="add_dialog_use_another_server_description">Введіть URL-адресу сервісу нижче, щоб підписатися на теми з інших серверів.</string>
|
||||
<string name="detail_item_cannot_open_url">Неможливо відкрити URL: %1$s</string>
|
||||
<string name="detail_item_menu_cancel">Скасувати завантаження</string>
|
||||
<string name="share_topic_title">Поділитися з</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_month">Автоматичне видалення сповіщень через місяць</string>
|
||||
<string name="settings_general_default_base_url_title">Сервер за замовчуванням</string>
|
||||
<string name="notification_popup_user_action_failed">%1$s не вдалося: %2$s</string>
|
||||
<string name="settings_notifications_header">Сповіщення</string>
|
||||
<string name="settings_notifications_muted_until_forever">Сповіщення вимкнено до відновлення</string>
|
||||
<string name="settings_notifications_muted_until_x">Сповіщення вимкнено до %1$s</string>
|
||||
<string name="settings_general_dark_mode_title">Темний режим</string>
|
||||
<string name="settings_general_dark_mode_summary_dark">Темний режим увімкнено. Ви вампір\?</string>
|
||||
<string name="settings_general_dark_mode_entry_system">Використовувати систему за умовчанням</string>
|
||||
<string name="settings_general_dark_mode_entry_light">Світловий режим</string>
|
||||
<string name="settings_backup_restore_backup_failed">Помилка резервного копіювання: %1$s</string>
|
||||
<string name="settings_backup_restore_restore_title">Відновити з файлу</string>
|
||||
<string name="settings_advanced_header">Просунутий</string>
|
||||
<string name="settings_advanced_export_logs_title">Копіювати/завантажувати журнали</string>
|
||||
<string name="settings_notifications_channel_prefs_title">Налаштування каналу</string>
|
||||
<string name="settings_notifications_channel_prefs_summary">Перевизначення режиму \"Не турбувати\" (DND), звуки тощо.</string>
|
||||
<string name="settings_notifications_auto_download_summary_smaller_than_x">Автоматичне завантаження вкладень до %1$s</string>
|
||||
<string name="settings_notifications_auto_download_never">Ніколи нічого не завантажуйте автоматично</string>
|
||||
<string name="settings_notifications_auto_download_100k">Якщо менше 100 кБ</string>
|
||||
<string name="settings_backup_restore_backup_summary">Експортуйте конфігурацію, сповіщення та користувачів</string>
|
||||
<string name="settings_backup_restore_header">Резервне копіювання та відновлення</string>
|
||||
<string name="settings_backup_restore_backup_title">Резервне копіювання в файл</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything">Все</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything_no_users">Все, крім користувачів</string>
|
||||
<string name="settings_backup_restore_backup_entry_settings_only">Лише налаштування</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">Підписався на п\'ять тем миттєвої доставки</string>
|
||||
<string name="channel_subscriber_notification_instant_text_six">Підписався на шість тем миттєвої доставки</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_five">Підписався на п\'ять тем</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_six">Підписався на шість тем</string>
|
||||
<string name="refresh_message_error">Не вдалося оновити %1$d підписок
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="main_menu_settings_title">Налаштування</string>
|
||||
<string name="main_menu_report_bug_title">Повідомити про помилку</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">Відписатися</string>
|
||||
<string name="main_action_mode_delete_dialog_message">Скасувати підписку на вибрані теми та остаточно видалити всі сповіщення\?</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">Видалити назавжди</string>
|
||||
<string name="main_action_mode_delete_dialog_cancel">Скасувати</string>
|
||||
<string name="main_item_status_text_one">%1$d сповіщення</string>
|
||||
<string name="main_item_status_text_not_one">%1$d сповіщень</string>
|
||||
<string name="main_item_status_reconnecting">повторне підключення…</string>
|
||||
<string name="main_item_status_unified_push">%1$s (UnifiedPush)</string>
|
||||
<string name="main_item_date_yesterday">вчора</string>
|
||||
<string name="main_add_button_description">Додати підписку</string>
|
||||
<string name="main_no_subscriptions_text">Схоже, у вас ще немає жодної підписки.</string>
|
||||
<string name="main_how_to_link">Детальні інструкції доступні на ntfy.sh і в документах.</string>
|
||||
<string name="main_unified_push_toast">Цією підпискою керує %1$s через UnifiedPush</string>
|
||||
<string name="main_banner_battery_text">Щоб уникнути проблем із доставляння сповіщень, оптимізацію акумулятора слід вимкнути.</string>
|
||||
<string name="main_banner_battery_button_remind_later">Запитайте пізніше</string>
|
||||
<string name="main_banner_battery_button_dismiss">Відхилити</string>
|
||||
<string name="main_banner_battery_button_fix_now">Виправ зараз</string>
|
||||
<string name="add_dialog_title">Підписатися на тему</string>
|
||||
<string name="add_dialog_description_below">Теми можуть не бути захищені паролем, тому виберіть назву, яку важко вгадати. Після підписки ви можете PUT/POST сповіщення.</string>
|
||||
<string name="add_dialog_topic_name_hint">Назва теми, наприклад phils_alerts</string>
|
||||
<string name="add_dialog_use_another_server">Використовувати інший сервер</string>
|
||||
<string name="add_dialog_instant_delivery">Миттєва доставка в режимі дрімання</string>
|
||||
<string name="add_dialog_instant_delivery_description">Забезпечує миттєву доставку повідомлень, навіть якщо пристрій неактивний.</string>
|
||||
<string name="add_dialog_foreground_description">Миттєва доставка завжди ввімкнена для хостів, відмінних від %1$s.</string>
|
||||
<string name="add_dialog_button_cancel">Скасувати</string>
|
||||
<string name="add_dialog_button_subscribe">Підписатися</string>
|
||||
<string name="add_dialog_button_back">Назад</string>
|
||||
<string name="detail_clear_dialog_cancel">Скасувати</string>
|
||||
<string name="detail_delete_dialog_message">Скасувати підписку на цю тему та видалити всі отримані сповіщення\?</string>
|
||||
<string name="detail_delete_dialog_cancel">Скасувати</string>
|
||||
<string name="detail_item_menu_save_file">Зберегти файл</string>
|
||||
<string name="detail_item_menu_copy_url">Копіювати URL</string>
|
||||
<string name="detail_item_download_info_deleted">видалено</string>
|
||||
<string name="detail_menu_unsubscribe">Відписатися</string>
|
||||
<string name="detail_action_mode_delete_dialog_message">Видалити вибрані сповіщення назавжди\?</string>
|
||||
<string name="detail_action_mode_delete_dialog_cancel">Скасувати</string>
|
||||
<string name="share_menu_send">Поділіться</string>
|
||||
<string name="notification_popup_file_download_failed">%1$s
|
||||
\nФайл: %2$s, не вдалося завантажити</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_one">Використовується темою %1$s</string>
|
||||
<string name="detail_settings_global_setting_suffix">за допомогою глобальних налаштувань</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">Підписався на теми</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Підписався на одну тему миттєвої доставки</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Підписався на дві теми миттєвої доставки</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">Підписався на одну тему</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">Підписано на %1$d тем</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">Підписався на три теми миттєвої доставки</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">Підписався на чотири теми миттєвої доставки</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">Підписано на %1$d тем миттєвої доставки</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">Підписався на дві теми</string>
|
||||
<string name="refresh_message_no_results">Все в актуальному стані</string>
|
||||
<string name="refresh_message_result">Отримано %1$d сповіщень</string>
|
||||
<string name="add_dialog_login_password_hint">Пароль</string>
|
||||
<string name="settings_notifications_auto_delete_never">Ніколи</string>
|
||||
<string name="settings_advanced_broadcast_summary_disabled">Програми не можуть отримувати сповіщення як трансляції</string>
|
||||
<string name="settings_advanced_record_logs_title">Журнали запису</string>
|
||||
<string name="user_dialog_password_hint_add">Пароль</string>
|
||||
<string name="user_dialog_password_hint_edit">Пароль (незмінний, якщо залишити порожнім)</string>
|
||||
<string name="user_dialog_button_cancel">Скасувати</string>
|
||||
<string name="main_menu_notifications_disabled_forever">Сповіщення вимкнено</string>
|
||||
<string name="detail_menu_notifications_disabled_until">Сповіщення вимкнено до %1$s</string>
|
||||
<string name="main_menu_notifications_disabled_until">Сповіщення вимкнено до %1$s</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">Підписався на три теми</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">Підписався на чотири теми</string>
|
||||
<string name="main_action_bar_title">Підписані теми</string>
|
||||
<string name="main_menu_docs_title">Читайте докуменацію</string>
|
||||
<string name="notification_dialog_show_all">Показати всі сповіщення</string>
|
||||
<string name="main_menu_notifications_enabled">Сповіщення ввімкнено</string>
|
||||
<string name="settings_notifications_priority_default">за замовчуванням</string>
|
||||
<string name="refresh_message_error_one">Не вдалося оновити підписку: %1$s</string>
|
||||
<string name="main_menu_rate_title">Оцініть програму ⭐</string>
|
||||
<string name="detail_test_message">Це тестове сповіщення від програми ntfy для Android. Він має рівень пріоритету %1$d. Якщо ви надішлете інший, він може виглядати інакше.</string>
|
||||
<string name="main_how_to_intro">Натисніть +, щоб створити тему або підписатися на неї. Після цього ви отримуєте сповіщення на свій пристрій, коли надсилаєте повідомлення через PUT або POST.</string>
|
||||
<string name="add_dialog_login_username_hint">Ім\'я користувача</string>
|
||||
<string name="detail_copied_to_clipboard_message">Скопійовано в буфер обміну</string>
|
||||
<string name="main_banner_websocket_text">Перехід на WebSockets є рекомендованим способом підключення до вашого сервера, який може подовжити час автономної роботи, але може вимагати <a href="https://ntfy.sh/docs/config/#nginxapache2caddy">додаткової конфігурації вашого проксі</a>. Це можна вимкнути в налаштуваннях.</string>
|
||||
<string name="add_dialog_login_title">Необхідно ввійти</string>
|
||||
<string name="add_dialog_login_new_user">Новий користувач</string>
|
||||
<string name="detail_action_mode_menu_copy">Копія</string>
|
||||
<string name="add_dialog_button_login">Авторизуватися</string>
|
||||
<string name="add_dialog_error_connection_failed">Помилка підключення: %1$s</string>
|
||||
<string name="add_dialog_login_description">Ця тема потребує авторизації. Будь ласка, введіть ім\'я користувача та пароль.</string>
|
||||
<string name="add_dialog_login_error_not_authorized">Помилка логіну. Користувач %1$s не авторизований.</string>
|
||||
<string name="detail_how_to_link">Детальні інструкції доступні на ntfy.sh і в документах.</string>
|
||||
<string name="detail_clear_dialog_message">Видалити всі сповіщення в цій темі\?</string>
|
||||
<string name="detail_item_cannot_save">Неможливо зберегти вкладення: %1$s</string>
|
||||
<string name="detail_item_download_failed">Не вдалося завантажити вкладений файл: %1$s</string>
|
||||
<string name="detail_how_to_example">Приклад (з використанням curl):<br/><tt>$ curl -d \"Hi\" %1$s</tt></string>
|
||||
<string name="detail_item_download_info_not_downloaded_expires_x">не завантажено, закінчується %1$s</string>
|
||||
<string name="detail_test_message_error_too_large">Не вдається надіслати повідомлення: вкладення завелике.</string>
|
||||
<string name="detail_instant_delivery_enabled">Миттєва доставка включена</string>
|
||||
<string name="detail_item_tags">Теги: %1$s</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expired">не завантажено, термін дії посилання закінчився</string>
|
||||
<string name="detail_no_notifications_text">Ви ще не отримали сповіщень щодо цієї теми.</string>
|
||||
<string name="detail_how_to_intro">Щоб надіслати сповіщення до цієї теми, просто PUT або POST за URL-адресою теми.</string>
|
||||
<string name="detail_deep_link_subscribed_toast_message">Підписався на тему %1$s</string>
|
||||
<string name="detail_item_cannot_open">Неможливо відкрити вкладення: %1$s</string>
|
||||
<string name="detail_item_download_info_deleted_expires_x">видалено, посилання діє %1$s</string>
|
||||
<string name="notification_dialog_tomorrow">До завтра</string>
|
||||
<string name="detail_item_download_info_downloading_x_percent">%1$d%% завантажено</string>
|
||||
<string name="detail_item_download_info_deleted_expired">видалено, термін дії посилання закінчився</string>
|
||||
<string name="detail_action_mode_menu_delete">Видалити</string>
|
||||
<string name="detail_action_mode_delete_dialog_permanently_delete">Видалити остаточно</string>
|
||||
<string name="share_content_file_text">Вам надали доступ до файлу</string>
|
||||
<string name="notification_dialog_30min">30 хвилин</string>
|
||||
<string name="notification_popup_action_browse">Переглядати</string>
|
||||
<string name="notification_popup_file">%1$s
|
||||
\nФайл: %2$s</string>
|
||||
<string name="share_content_file_error">Неможливо прочитати інформацію про файл: %1$s</string>
|
||||
<string name="notification_dialog_8h">8 годин</string>
|
||||
<string name="notification_dialog_forever">До відновлення</string>
|
||||
<string name="settings_notifications_min_priority_summary_max">Показувати сповіщення, якщо пріоритет 5 (макс.)</string>
|
||||
<string name="settings_notifications_min_priority_min">Будь-який пріоритет</string>
|
||||
<string name="settings_notifications_min_priority_low">Низький пріоритет і вище</string>
|
||||
<string name="notification_popup_file_downloading">Завантаження %1$s, %2$d%%
|
||||
\n%3$s</string>
|
||||
<string name="settings_advanced_broadcast_summary_enabled">Програми можуть отримувати вхідні сповіщення як трансляції</string>
|
||||
<string name="settings_notifications_muted_until_title">Вимкнути сповіщення</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_many">Використовується темами %1$s</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_week">Автоматичне видалення сповіщень через тиждень</string>
|
||||
<string name="settings_notifications_priority_low">низький</string>
|
||||
<string name="settings_notifications_auto_download_10m">Якщо менше 10 Мб</string>
|
||||
<string name="settings_notifications_auto_delete_one_day">Через один день</string>
|
||||
<string name="settings_notifications_auto_download_50m">Якщо менше 50 Мб</string>
|
||||
<string name="settings_notifications_auto_delete_title">Видалити сповіщення</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_days">Автоматичне видалення сповіщень через 3 дні</string>
|
||||
<string name="settings_general_users_title">Керувати користувачами</string>
|
||||
<string name="settings_general_dark_mode_summary_system">Використання системи за замовчуванням</string>
|
||||
<string name="settings_general_dark_mode_summary_light">Світловий режим включений</string>
|
||||
<string name="settings_advanced_broadcast_title">Трансляція повідомлень</string>
|
||||
<string name="settings_general_users_summary">Додавання/видалення користувачів для захищених тем</string>
|
||||
<string name="settings_general_users_prefs_user_add_title">Додати нового користувача</string>
|
||||
<string name="settings_general_users_prefs_user_add_summary">Створіть нового користувача для нового сервера</string>
|
||||
<string name="settings_general_dark_mode_entry_dark">Темний режим</string>
|
||||
<string name="settings_backup_restore_restore_failed">Не вдалося відновити: %1$s</string>
|
||||
<string name="settings_backup_restore_backup_successful">Резервну копію створено</string>
|
||||
<string name="settings_backup_restore_restore_summary">Імпортуйте конфігурацію, сповіщення та користувачів</string>
|
||||
<string name="settings_backup_restore_restore_successful">Відновлено успішно</string>
|
||||
<string name="settings_advanced_export_logs_summary">Скопіюйте журнали в буфер обміну або завантажте на nopaste.net (належить автору ntfy). Імена хостів і теми можуть бути піддані цензурі, сповіщення – ніколи.</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_scrubbed">Копіювати в буфер обміну (цензуровано)</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_original">Копіювати в буфер обміну</string>
|
||||
<string name="settings_advanced_export_logs_uploading">Завантаження журналу…</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_text">Ці теми/імена хостів було замінено назвами фруктів, тож ви можете ділитися журналом без хвилювань:
|
||||
\n
|
||||
\n%1$s
|
||||
\n
|
||||
\nПаролі очищаються, але не відображаються тут.</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_original">Завантажте та скопіюйте посилання</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_scrubbed">Завантажити та скопіювати посилання (цензуровано)</string>
|
||||
<string name="settings_advanced_export_logs_copied_logs">Журнали скопійовано в буфер обміну</string>
|
||||
<string name="settings_advanced_clear_logs_summary">Видаліть раніше записані журнали та почніть спочатку</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Використовуйте WebSockets для підключення до сервера. Це рекомендований метод, але може знадобитися додаткова конфігурація вашого проксі.</string>
|
||||
<string name="user_dialog_button_save">Зберегти</string>
|
||||
<string name="detail_settings_appearance_icon_set_title">Значок підписки</string>
|
||||
<string name="detail_settings_notifications_instant_summary_on">Сповіщення надходять миттєво. Потрібна служба переднього плану та споживає більше акумулятора.</string>
|
||||
<string name="detail_settings_notifications_instant_summary_off">Сповіщення доставляються за допомогою Firebase. Доставка може бути відкладена, але споживає менше акумулятора.</string>
|
||||
<string name="detail_settings_about_topic_url_title">URL теми</string>
|
||||
<string name="user_dialog_username_hint">Ім\'я користувача</string>
|
||||
<string name="detail_settings_about_header">Про</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">Скопійовано в буфер обміну</string>
|
||||
<string name="user_dialog_description_edit">Ви можете змінити ім\'я користувача/пароль для вибраного користувача або видалити його.</string>
|
||||
<string name="user_dialog_button_add">Додати користувача</string>
|
||||
<string name="user_dialog_description_add">Ви можете додати користувача тут. Усі теми для даного сервера використовуватимуть цього користувача.</string>
|
||||
<string name="user_dialog_button_delete">Видалити користувача</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">Виберіть URL-адресу служби</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">Очистити URL-адресу служби</string>
|
||||
<string name="detail_clear_dialog_permanently_delete">Видалити остаточно</string>
|
||||
<string name="detail_delete_dialog_permanently_delete">Видалити остаточно</string>
|
||||
<string name="detail_test_title">Тест: Ви можете встановити назву, якщо хочете.</string>
|
||||
<string name="detail_test_message_error">Неможливо надіслати повідомлення: %1$s</string>
|
||||
<string name="detail_test_message_error_unauthorized_anon">Неможливо надіслати повідомлення: анонімна публікація заборонена.</string>
|
||||
<string name="detail_test_message_error_unauthorized_user">Неможливо надіслати повідомлення: користувач \"%1$s\" не авторизований.</string>
|
||||
<string name="detail_instant_delivery_disabled">Миттєва доставка вимкнена</string>
|
||||
<string name="detail_item_snack_deleted">Сповіщення видалено</string>
|
||||
<string name="detail_item_snack_undo">Скасувати</string>
|
||||
<string name="detail_item_menu_open">Відкрити файл</string>
|
||||
<string name="detail_item_menu_delete">Видалити файл</string>
|
||||
<string name="detail_item_menu_download">Завантажити файл</string>
|
||||
<string name="detail_item_menu_copy_url_copied">URL-адресу скопійовано в буфер обміну</string>
|
||||
<string name="detail_item_menu_copy_contents">Копіювати сповіщення</string>
|
||||
<string name="detail_item_menu_copy_contents_copied">Сповіщення скопійовано в буфер обміну</string>
|
||||
<string name="detail_item_saved_successfully">Збережено як \"%1$s\" у папці \"Завантаження\"</string>
|
||||
<string name="detail_item_cannot_download">Не вдається відкрити або завантажити вкладений файл. Термін дії посилання закінчився, і локальний файл не знайдено.</string>
|
||||
<string name="detail_item_cannot_open_not_found">Неможливо відкрити вкладення: файл, можливо, видалено, або жодна встановлена програма не може відкрити файл.</string>
|
||||
<string name="detail_item_cannot_delete">Неможливо видалити вкладення: %1$s</string>
|
||||
<string name="detail_item_download_info_not_downloaded">не завантажено</string>
|
||||
<string name="detail_item_download_info_download_failed">не вдалося завантажити</string>
|
||||
<string name="detail_item_download_info_download_failed_expired">не вдалося завантажити, термін дії посилання закінчився</string>
|
||||
<string name="detail_item_download_info_download_failed_expires_x">не вдалося завантажити, термін дії посилання закінчився %1$s</string>
|
||||
<string name="detail_menu_notifications_enabled">Сповіщення ввімкнено</string>
|
||||
<string name="detail_menu_notifications_disabled_forever">Сповіщення вимкнено</string>
|
||||
<string name="detail_menu_enable_instant">Увімкнути миттєву доставку</string>
|
||||
<string name="detail_menu_disable_instant">Вимкніть миттєву доставку</string>
|
||||
<string name="detail_menu_test">Надіслати тестове сповіщення</string>
|
||||
<string name="detail_menu_copy_url">Копіювати адресу теми</string>
|
||||
<string name="detail_menu_clear">Очистити всі сповіщення</string>
|
||||
<string name="detail_menu_settings">Налаштування підписки</string>
|
||||
<string name="detail_settings_title">Налаштування підписки</string>
|
||||
<string name="share_title">Поділіться</string>
|
||||
<string name="share_content_title">Попередній перегляд повідомлення</string>
|
||||
<string name="share_content_text_hint">Додайте вміст, щоб поділитися тут</string>
|
||||
<string name="share_content_image_text">З вами поділилися зображенням</string>
|
||||
<string name="share_content_image_error">Не вдається прочитати зображення: %1$s</string>
|
||||
<string name="share_suggested_topics">Пропоновані теми</string>
|
||||
<string name="share_successful">Повідомлення опубліковано</string>
|
||||
<string name="notification_dialog_title">Вимкнути сповіщення</string>
|
||||
<string name="notification_dialog_cancel">Скасувати</string>
|
||||
<string name="notification_dialog_save">Зберегти</string>
|
||||
<string name="notification_dialog_enabled_toast_message">Сповіщення відновлено</string>
|
||||
<string name="notification_dialog_muted_forever_toast_message">Сповіщення вимкнено</string>
|
||||
<string name="notification_dialog_muted_until_toast_message">Сповіщення вимкнено до %1$s</string>
|
||||
<string name="notification_dialog_1h">1 година</string>
|
||||
<string name="notification_dialog_2h">2 години</string>
|
||||
<string name="notification_popup_action_open">Відчинено</string>
|
||||
<string name="notification_popup_action_download">Завантажити</string>
|
||||
<string name="notification_popup_action_cancel">Скасувати</string>
|
||||
<string name="notification_popup_file_download_successful">%1$s
|
||||
\nФайл: %2$s, завантажено</string>
|
||||
<string name="settings_title">Налаштування</string>
|
||||
<string name="settings_notifications_muted_until_show_all">Показано всі сповіщення</string>
|
||||
<string name="settings_notifications_min_priority_title">Мінімальний пріоритет</string>
|
||||
<string name="settings_notifications_min_priority_summary_any">Показано всі сповіщення</string>
|
||||
<string name="settings_notifications_min_priority_summary_x_or_higher">Показувати сповіщення, якщо пріоритет %1$d (%2$s) або вище</string>
|
||||
<string name="settings_notifications_min_priority_default">Пріоритет за замовчуванням і вище</string>
|
||||
<string name="settings_notifications_min_priority_high">Високий пріоритет і вище</string>
|
||||
<string name="settings_notifications_min_priority_max">Тільки максимальний пріоритет</string>
|
||||
<string name="settings_notifications_priority_min">Мін</string>
|
||||
<string name="settings_notifications_priority_high">високій</string>
|
||||
<string name="settings_notifications_priority_max">макс</string>
|
||||
<string name="settings_notifications_auto_download_title">Завантажити вкладення</string>
|
||||
<string name="settings_notifications_auto_download_summary_always">Автоматичне завантаження всіх вкладень</string>
|
||||
<string name="settings_notifications_auto_download_summary_never">Ніколи не завантажуйте вкладені файли автоматично</string>
|
||||
<string name="settings_notifications_auto_download_always">Автоматичне завантаження всього</string>
|
||||
<string name="settings_notifications_auto_download_500k">Якщо менше 500 кБ</string>
|
||||
<string name="settings_notifications_auto_download_1m">Якщо менше 1 Мб</string>
|
||||
<string name="settings_notifications_auto_download_5m">Якщо менше 5 Мб</string>
|
||||
<string name="settings_notifications_auto_delete_summary_never">Ніколи автоматично не видаляйте сповіщення</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_day">Автоматичне видалення сповіщень через один день</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_months">Автоматичне видалення сповіщень через 3 місяці</string>
|
||||
<string name="settings_notifications_auto_delete_three_days">Через 3 дні</string>
|
||||
<string name="settings_notifications_auto_delete_one_week">Через тиждень</string>
|
||||
<string name="settings_notifications_auto_delete_one_month">Через місяць</string>
|
||||
<string name="settings_notifications_auto_delete_three_months">Через 3 міс</string>
|
||||
<string name="user_dialog_title_add">Додати користувача</string>
|
||||
<string name="settings_general_header">Загальний</string>
|
||||
<string name="settings_general_default_base_url_message">Введіть кореневу URL-адресу свого сервера, щоб використовувати свій власний сервер як стандартний під час підписки на нові теми та/або спільного доступу до тем.</string>
|
||||
<string name="settings_general_default_base_url_default_summary">%1$s (за умовчанням)</string>
|
||||
<string name="settings_general_users_prefs_title">Користувачі</string>
|
||||
<string name="settings_general_users_prefs_user_not_used">Не використовується жодною темою</string>
|
||||
<string name="settings_general_users_prefs_user_add">Додайте користувачів</string>
|
||||
<string name="settings_advanced_record_logs_summary_enabled">Реєстрація (до 1000 записів) на пристрої…</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">Увімкніть ведення журналів, щоб пізніше ви могли поділитися журналами для діагностики проблем.</string>
|
||||
<string name="settings_advanced_export_logs_copied_url">Журнали завантажено та URL-адресу скопійовано</string>
|
||||
<string name="settings_advanced_export_logs_error_uploading">Не вдалося завантажити журнали: %1$s</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_empty">Не було відредаговано жодної теми/імена хостів. Може у вас немає підписки\?</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_button_ok">ОК</string>
|
||||
<string name="settings_advanced_clear_logs_title">Очистити журнали</string>
|
||||
<string name="settings_advanced_clear_logs_deleted_toast">Журнали видалено</string>
|
||||
<string name="settings_advanced_connection_protocol_title">Протокол підключення</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_jsonhttp">Потік JSON через HTTP</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">WebSockets</string>
|
||||
<string name="settings_about_header">Про</string>
|
||||
<string name="settings_about_version_title">Версія</string>
|
||||
<string name="settings_about_version_format">ntfy %1$s (%2$s)</string>
|
||||
<string name="settings_about_version_copied_to_clipboard_message">Скопійовано в буфер обміну</string>
|
||||
<string name="detail_settings_notifications_instant_title">Миттєва доставка</string>
|
||||
<string name="detail_settings_appearance_header">Зовнішній вигляд</string>
|
||||
<string name="detail_settings_appearance_icon_set_summary">Установіть піктограму, яка відображатиметься в сповіщеннях</string>
|
||||
<string name="detail_settings_appearance_icon_remove_title">Значок підписки (натисніть, щоб видалити)</string>
|
||||
<string name="detail_settings_appearance_icon_remove_summary">Значок, який відображається в сповіщеннях для цієї теми</string>
|
||||
<string name="detail_settings_appearance_icon_error_saving">Не вдалося зберегти значок: %1$s</string>
|
||||
<string name="detail_settings_global_setting_title">Використовуйте глобальні налаштування</string>
|
||||
<string name="user_dialog_title_edit">Редагувати користувача</string>
|
||||
<string name="main_banner_websocket_button_remind_later">Запитайте пізніше</string>
|
||||
<string name="main_banner_websocket_button_dismiss">Відхилити</string>
|
||||
<string name="main_banner_websocket_button_enable_now">Увімкнути зараз</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Використовуйте потік JSON через HTTP для підключення до сервера. Цей метод перевірено в боях, але може споживати більше заряду батареї.</string>
|
||||
<string name="channel_notifications_group_default_name">За замовчуванням</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">Використання налаштувань за замовчуванням (звуки, \"Не турбувати\" тощо)</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">Перевизначення режиму \"Не турбувати\" (DND), звуки тощо.</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Продовжувати сповіщати</string>
|
||||
<string name="main_menu_donate_title">Пожертвувати 💸</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">Безперервне сповіщення для найвищого пріоритету</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">Сповіщення з максимальним пріоритетом безперервно сповіщають, доки не будуть закриті</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">Сповіщення з максимальним пріоритетом сповіщають лише один раз</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Користувацькі налаштування сповіщень</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">Використання користувацьких налаштувань для цієї підписки</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Налаштування параметрів сповіщень</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Сповіщати лише один раз</string>
|
||||
<string name="detail_item_cannot_open_apk">Додаток більше не можна встановити. Натомість завантажуйте через браузер. Подробиці читайте у проблемі #531.</string>
|
||||
<string name="settings_advanced_unifiedpush_title">Увімкнути UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy буде виступати в якості дистриб\'ютора UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfy не буде виступати в ролі дистриб\'ютора UnifiedPush</string>
|
||||
</resources>
|
|
@ -1,346 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_notifications_min_name">Minimal ustuvorlik</string>
|
||||
<string name="channel_notifications_low_name">Kam ustuvorlik</string>
|
||||
<string name="channel_notifications_default_name">Standart ustuvorlik</string>
|
||||
<string name="channel_notifications_high_name">Yuqori ustuvorlik</string>
|
||||
<string name="channel_notifications_max_name">Maksimal ustuvorlik</string>
|
||||
<string name="channel_notifications_group_default_name">Standart</string>
|
||||
<string name="channel_subscriber_service_name">Obuna xizmati</string>
|
||||
<string name="channel_subscriber_notification_title">Kiruvchi bildirishnomalar tinglanmoqda</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Darhol yuborish mavzulariga obuna bo‘ldik</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">Darhol yuborish mavzusiga obuna bo‘ldik</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">To\'rtta darhol yuborish mavzulariga obuna bo‘ldik</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">Beshta darhol yuborish mavzulariga obuna bo‘ldik</string>
|
||||
<string name="channel_subscriber_notification_instant_text_six">Oltita darhol yuborish mavzulariga obuna bo‘ldik</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">%1$d ta darhol yuborish mavzulariga obuna bo‘ldik</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">Mavzularga obuna bo‘ldik</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">Bitta mavzuga obuna bo‘ldik</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">Ikkita mavzuga obuna bo‘ldik</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">Uchta mavzuga obuna bo‘ldik</string>
|
||||
<string name="refresh_message_no_results">Hammasi yangilangan</string>
|
||||
<string name="refresh_message_error">%1$d ta obunani yangilab bo‘lmadi
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">%1$d ta mavzuga obuna bo‘ldik</string>
|
||||
<string name="refresh_message_error_one">Obunani yangilab bo‘lmadi: %1$s</string>
|
||||
<string name="main_action_bar_title">Obuna bo‘lgan mavzular</string>
|
||||
<string name="main_menu_notifications_enabled">Bildirishnomalar yoqilgan</string>
|
||||
<string name="main_menu_notifications_disabled_forever">Bildirishnomalar ovozi o‘chirilgan</string>
|
||||
<string name="main_menu_settings_title">Sozlamalar</string>
|
||||
<string name="main_menu_report_bug_title">Xatolik haqida xabar berish</string>
|
||||
<string name="main_menu_docs_title">Hujjatlarni o‘qish</string>
|
||||
<string name="main_menu_rate_title">Ilovani baholang ⭐</string>
|
||||
<string name="main_action_mode_menu_unsubscribe">Obunani bekor qilish</string>
|
||||
<string name="main_action_mode_delete_dialog_message">Tanlangan mavzu(lar)ga obunani bekor qilib barcha bildirishnomalarni butunlay o‘chirib tashlaysizmi?</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">Butunlay o‘chirish</string>
|
||||
<string name="main_item_status_text_one">%1$d ta bildirishnoma</string>
|
||||
<string name="main_item_status_text_not_one">%1$d ta bildirishnomalar</string>
|
||||
<string name="main_item_status_reconnecting">qayta ulanmoqda…</string>
|
||||
<string name="main_item_status_unified_push">%1$s (UnifiedPush)</string>
|
||||
<string name="main_item_date_yesterday">kecha</string>
|
||||
<string name="main_add_button_description">Obuna qo‘shish</string>
|
||||
<string name="main_no_subscriptions_text">Sizda hali obuna yo‘qga o‘xshaydi.</string>
|
||||
<string name="main_how_to_intro">Mavzu yaratish yoki unga obuna bo‘lish uchun + belgisini bosing. Shundan so‘ng siz PUT yoki POST orqali xabarlarni yuborishda qurilmangizga bildirishnomalarni olasiz.</string>
|
||||
<string name="main_how_to_link">Batafsil ko‘rsatmalar ntfy.sh saytida va hujjatlarda mavjud.</string>
|
||||
<string name="main_unified_push_toast">Bu obuna %1$s tomonidan UnifiedPush orqali boshqariladi</string>
|
||||
<string name="main_banner_battery_text">Bildirishnomalarni yetkazib berish bilan bog‘liq muammolarni oldini olish uchun ilovada batareya quvvatini optimallashtirish o‘chirilgan bo‘lishi kerak.</string>
|
||||
<string name="main_banner_battery_button_remind_later">Keyinroq so‘rang</string>
|
||||
<string name="main_banner_battery_button_dismiss">Rad etish</string>
|
||||
<string name="main_banner_battery_button_fix_now">Hozir tuzatish</string>
|
||||
<string name="main_banner_websocket_text">WebSocketlarga o‘tish serveringizga ulanishning tavsiya etilgan usuli bo‘lib, batareya quvvatini oshirishi mumkin, lekin bu <a href="https://ntfy.sh/docs/config/#nginxapache2caddy">proksi-serveringizda qo‘shimcha sozlash</a>larni talab qiladi. Sozlamalarda o‘zgartirish mumkin.</string>
|
||||
<string name="main_banner_websocket_button_remind_later">Keyinroq so\'rang</string>
|
||||
<string name="main_banner_websocket_button_dismiss">Rad etish</string>
|
||||
<string name="main_banner_websocket_button_enable_now">Hozir yoqish</string>
|
||||
<string name="add_dialog_title">Mavzuga obuna bo‘lish</string>
|
||||
<string name="add_dialog_description_below">Mavzular parol bilan himoyalanmagan bo‘lishi mumkin, shuning uchun taxmin qilish qiyin bo‘lgan nomni tanlang. Obuna bo‘lganingizdan so‘ng siz bildirishnomalarni PUT/POST qilishingiz mumkin.</string>
|
||||
<string name="add_dialog_topic_name_hint">Mavzu nomi, masalan, phils_alerts</string>
|
||||
<string name="add_dialog_use_another_server">Boshqa serverdan foydalanish</string>
|
||||
<string name="add_dialog_instant_delivery">Darhol yuborish doze rejimida</string>
|
||||
<string name="add_dialog_instant_delivery_description">Qurilma nofaol bo‘lsa ham, xabarlar darhol yetkazilishini ta’minlaydi.</string>
|
||||
<string name="add_dialog_foreground_description">Darhol yetkazish har doim %1$s dan boshqa hostlar uchun yoqilgan.</string>
|
||||
<string name="add_dialog_button_cancel">Bekor qilish</string>
|
||||
<string name="add_dialog_button_subscribe">Obuna bo‘lish</string>
|
||||
<string name="add_dialog_button_back">Orqaga</string>
|
||||
<string name="add_dialog_button_login">Tizimga kirish</string>
|
||||
<string name="add_dialog_error_connection_failed">Ulanish amalga oshmadi: %1$s</string>
|
||||
<string name="add_dialog_login_title">Tizimga kirish talab qilinadi</string>
|
||||
<string name="add_dialog_login_username_hint">Foydalanuvchi nomi</string>
|
||||
<string name="add_dialog_login_password_hint">Parol</string>
|
||||
<string name="add_dialog_login_new_user">Yangi foydalanuvchi</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">URL manzilini tanlang</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">URL manzilini tozalang</string>
|
||||
<string name="detail_how_to_intro">Ushbu mavzu bo‘yicha bildirishnomalarni yuborish uchun, mavzu URL manziliga PUT yoki POST so‘rov yuboring.</string>
|
||||
<string name="detail_how_to_example">Misol (curl yordamida):<br/><tt>$ curl -d \"Salom\" %1$s</tt></string>
|
||||
<string name="detail_how_to_link">Batafsil ko‘rsatmalar ntfy.sh saytida va hujjatlarda mavjud.</string>
|
||||
<string name="detail_clear_dialog_message">Ushbu mavzudagi barcha bildirishnomalar o‘chirilsinmi?</string>
|
||||
<string name="detail_clear_dialog_permanently_delete">Butunlay o‘chirish</string>
|
||||
<string name="detail_delete_dialog_message">Ushbu mavzuga obunani bekor qilib, barcha qabul qilingan bildirishnomalar o‘chirilsinmi?</string>
|
||||
<string name="detail_delete_dialog_cancel">Bekor qilish</string>
|
||||
<string name="detail_test_title">Test: Agar xohlasangiz, sarlavha o‘rnatishingiz mumkin.</string>
|
||||
<string name="detail_test_message">Bu ntfy Android ilovasining sinov bildirishnomasidir. U %1$d darajadagi ustuvorlikka ega. Agar siz boshqasini yuborsangiz, u boshqacha ko‘rinishi mumkin.</string>
|
||||
<string name="detail_test_message_error_too_large">Xabar yuborib bo‘lmadi: biriktirma juda katta.</string>
|
||||
<string name="detail_copied_to_clipboard_message">Xotiraga nusxa olindi</string>
|
||||
<string name="detail_instant_delivery_enabled">Darhol yuborish yoqilgan</string>
|
||||
<string name="detail_instant_delivery_disabled">Darhol yuborish o‘chirilgan</string>
|
||||
<string name="detail_deep_link_subscribed_toast_message">%1$s mavzusiga obuna bo‘lindi</string>
|
||||
<string name="detail_item_tags">Teglar: %1$s</string>
|
||||
<string name="detail_item_snack_deleted">Bildirishnoma o‘chirildi</string>
|
||||
<string name="detail_item_menu_open">Faylni ochish</string>
|
||||
<string name="detail_item_menu_delete">Faylni o‘chirish</string>
|
||||
<string name="detail_item_menu_download">Faylni yuklab olish</string>
|
||||
<string name="detail_item_menu_save_file">Faylni saqlash</string>
|
||||
<string name="detail_item_menu_copy_url">URL manzilini nusxalash</string>
|
||||
<string name="detail_item_menu_copy_url_copied">URL xotiraga nusxalandi</string>
|
||||
<string name="detail_item_menu_copy_contents">Bildirishnomani nusxalash</string>
|
||||
<string name="detail_item_saved_successfully">\"Yuklashlar\" jildida \"%1$s\" nomi bilan saqlandi</string>
|
||||
<string name="detail_item_cannot_download">Biriktirmani ochib yoki yuklab bo‘lmadi. Havola muddati eskirgan va fayl topilmadi.</string>
|
||||
<string name="detail_item_cannot_open">Biriktirmani ochib bo‘lmadi: %1$s</string>
|
||||
<string name="detail_item_cannot_open_not_found">Biriktirmani ochib bo‘lmadi: fayl o‘chirilgan bo‘lishi mumkin yoki hech bir o‘rnatilgan ilova faylni ocholmaydi.</string>
|
||||
<string name="detail_item_cannot_open_apk">Ilovalarni boshqa o‘rnatib bo‘lmaydi. Buning o‘rniga brauzer orqali yuklab oling. Tafsilotlar uchun #531 sonli muammoga qarang.</string>
|
||||
<string name="detail_item_cannot_save">Biriktirma saqlanmadi: %1$s</string>
|
||||
<string name="detail_item_cannot_delete">Biriktirmani o‘chirib bo‘lmadi: %1$s</string>
|
||||
<string name="detail_item_download_info_not_downloaded">yuklab olinmagan</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expired">yuklab olinmagan, havola eskirgan</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expires_x">yuklab olinmadi, muddati %1$s da tugaydi</string>
|
||||
<string name="detail_item_download_info_downloading_x_percent">%1$d%% yuklab olindi</string>
|
||||
<string name="detail_item_download_info_deleted">o‘chirildi</string>
|
||||
<string name="detail_item_download_info_deleted_expired">o‘chirildi, havola eskirgan</string>
|
||||
<string name="detail_item_download_info_deleted_expires_x">o‘chirildi, havola muddati %1$s da tugaydi</string>
|
||||
<string name="detail_item_download_info_download_failed_expired">yuklash amalga oshmadi, havola eskirgan</string>
|
||||
<string name="detail_item_download_info_download_failed_expires_x">yuklab olinmadi, havola muddati %1$s da tugaydi</string>
|
||||
<string name="detail_menu_notifications_disabled_forever">Bildirishnomalar ovozi o‘chirildi</string>
|
||||
<string name="detail_menu_notifications_disabled_until">Bildirishnomalar %1$s gacha o‘chirildi</string>
|
||||
<string name="detail_menu_enable_instant">Darhol yuborishni yoqish</string>
|
||||
<string name="detail_menu_disable_instant">Darhol yuborishni o‘chirish</string>
|
||||
<string name="detail_menu_test">Sinov bildirishnomasini yuborish</string>
|
||||
<string name="detail_menu_copy_url">Mavzu manzilini nusxalash</string>
|
||||
<string name="detail_menu_settings">Obuna sozlamalari</string>
|
||||
<string name="detail_menu_unsubscribe">Obunani bekor qilish</string>
|
||||
<string name="detail_action_mode_menu_copy">Nusxalash</string>
|
||||
<string name="detail_action_mode_menu_delete">O‘chirish</string>
|
||||
<string name="detail_action_mode_delete_dialog_message">Tanlangan bildirishnoma(lar) butunlay o‘chirilsinmi?</string>
|
||||
<string name="detail_action_mode_delete_dialog_permanently_delete">Butunlay o‘chirish</string>
|
||||
<string name="detail_action_mode_delete_dialog_cancel">Bekor qilish</string>
|
||||
<string name="detail_settings_title">Obuna sozlamalari</string>
|
||||
<string name="share_menu_send">Ulashish</string>
|
||||
<string name="share_content_title">Xabarni oldindan ko‘rish</string>
|
||||
<string name="share_content_text_hint">Ulashish uchun kontent qo‘shish</string>
|
||||
<string name="share_content_image_text">Sizga ulashilgan rasm</string>
|
||||
<string name="share_content_image_error">Rasmni o‘qib bo‘lmaydi: %1$s</string>
|
||||
<string name="share_content_file_text">Sizga ulashilgan fayl</string>
|
||||
<string name="share_content_file_error">Fayl ma’lumotlarini o‘qib bo‘lmadi: %1$s</string>
|
||||
<string name="share_suggested_topics">Taklif etilgan mavzular</string>
|
||||
<string name="notification_dialog_cancel">Bekor qilish</string>
|
||||
<string name="notification_dialog_save">Saqlash</string>
|
||||
<string name="notification_dialog_enabled_toast_message">Bildirishnomalar davom ettirildi</string>
|
||||
<string name="notification_dialog_1h">1 soat</string>
|
||||
<string name="notification_popup_action_open">Ochish</string>
|
||||
<string name="notification_popup_action_browse">Ko‘rib chiqish</string>
|
||||
<string name="notification_popup_action_download">Yuklash</string>
|
||||
<string name="notification_popup_action_cancel">Bekor qilish</string>
|
||||
<string name="notification_popup_file">%1$s
|
||||
\nFayl: %2$s</string>
|
||||
<string name="notification_popup_file_downloading">Yuklab olinmoqda %1$s, %2$d%%
|
||||
\n%3$s</string>
|
||||
<string name="notification_popup_user_action_failed">%1$s bajarilmadi: %2$s</string>
|
||||
<string name="settings_title">Sozlamalar</string>
|
||||
<string name="settings_notifications_header">Bildirishnomalar</string>
|
||||
<string name="settings_notifications_muted_until_title">Bildirishnomalarni o‘chirish</string>
|
||||
<string name="settings_notifications_muted_until_show_all">Barcha bildirishnomalar ko‘rsatilmoqda</string>
|
||||
<string name="settings_notifications_muted_until_forever">Davom etilgunga qadar bildirishnomalar o‘chirildi</string>
|
||||
<string name="settings_notifications_muted_until_x">Bildirishnomalar %1$s gacha o‘chirildi</string>
|
||||
<string name="settings_notifications_min_priority_summary_any">Barcha bildirishnomalar ko‘rsatilmoqda</string>
|
||||
<string name="settings_notifications_min_priority_summary_x_or_higher">Agar ustuvorlik %1$d (%2$s) yoki undan yuqori bo‘lsa, bildirishnomalarni ko‘rsatish</string>
|
||||
<string name="settings_notifications_min_priority_min">Har qanday ustuvorlik</string>
|
||||
<string name="settings_notifications_min_priority_low">Kam ustuvorlik va undan yuqori</string>
|
||||
<string name="settings_notifications_min_priority_high">Yuqori ustuvorlik va undan yuqori</string>
|
||||
<string name="settings_notifications_min_priority_max">Faqat maksimal ustuvorlik</string>
|
||||
<string name="settings_notifications_priority_min">min</string>
|
||||
<string name="settings_notifications_priority_low">past</string>
|
||||
<string name="settings_notifications_priority_default">standart</string>
|
||||
<string name="settings_notifications_priority_high">yuqori</string>
|
||||
<string name="settings_notifications_priority_max">maks</string>
|
||||
<string name="settings_notifications_channel_prefs_title">Kanal sozlamalari</string>
|
||||
<string name="settings_notifications_channel_prefs_summary">Bezovta qilinmasin (DND) rejimi, tovushlar va h.k.</string>
|
||||
<string name="settings_notifications_auto_download_summary_always">Barcha biriktirmalarni avtomatik yuklab olish</string>
|
||||
<string name="settings_notifications_auto_download_summary_never">Qo‘shimchalar hech qachon avtomatik yuklab olinmasin</string>
|
||||
<string name="settings_notifications_auto_download_summary_smaller_than_x">%1$s gacha bo‘lgan biriktirmalarni avtomatik yuklab olish</string>
|
||||
<string name="settings_notifications_auto_download_never">Hech qachon biror narsa avtomatik yuklab olinmasin</string>
|
||||
<string name="settings_notifications_auto_download_always">Hamma narsani avtomatik yuklab olish</string>
|
||||
<string name="settings_notifications_auto_download_100k">100 kB dan past bo‘lsa</string>
|
||||
<string name="settings_notifications_auto_download_1m">1 MB dan past bo‘lsa</string>
|
||||
<string name="settings_notifications_auto_download_5m">5 MB dan past bo‘lsa</string>
|
||||
<string name="settings_notifications_auto_download_10m">10 MB dan past bo‘lsa</string>
|
||||
<string name="settings_notifications_auto_download_50m">50 MB dan past bo‘lsa</string>
|
||||
<string name="settings_notifications_auto_delete_summary_never">Hech qachon bildirishnomalar avtomatik o‘chirib tashlanmasin</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_day">Bir kundan keyin bildirishnomalarni avtomatik o‘chirish</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_month">Bir oydan keyin bildirishnomalarni avtomatik o‘chirish</string>
|
||||
<string name="settings_notifications_auto_delete_never">Hech qachon</string>
|
||||
<string name="settings_notifications_auto_delete_one_day">Bir kundan keyin</string>
|
||||
<string name="settings_notifications_auto_delete_three_days">3 kundan keyin</string>
|
||||
<string name="settings_notifications_auto_delete_one_week">Bir haftadan keyin</string>
|
||||
<string name="settings_notifications_auto_delete_one_month">Bir oydan keyin</string>
|
||||
<string name="settings_notifications_auto_delete_three_months">3 oydan keyin</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">Yuqori ustuvorlik haqida ogohlantirish</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">Maksimal ustuvor bildirishnomalar yopilmaguncha doimiy ravishda ogohlantiriladi</string>
|
||||
<string name="settings_general_header">Umumiy</string>
|
||||
<string name="settings_general_default_base_url_title">Standart server</string>
|
||||
<string name="settings_general_default_base_url_message">Yangi mavzularga obuna bo‘lish va/yoki mavzularga ulashishda o‘z serveringizdan standart foydalanish uchun serveringizning asosiy URL manzilini kiriting.</string>
|
||||
<string name="settings_general_default_base_url_default_summary">%1$s (standart)</string>
|
||||
<string name="settings_general_users_title">Foydalanuvchilarni boshqarish</string>
|
||||
<string name="settings_general_users_summary">Himoyalangan mavzular uchun foydalanuvchilarni qo‘shish/o‘chirish</string>
|
||||
<string name="settings_general_users_prefs_user_not_used">Hech qanday mavzuda foydalanilmaydi</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_one">%1$s mavzusida foydalanilgan</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_many">%1$s mavzularida foydalaniladi</string>
|
||||
<string name="settings_general_users_prefs_user_add">Foydalanuvchilarni qo‘shish</string>
|
||||
<string name="settings_general_users_prefs_user_add_title">Yangi foydalanuvchi qo‘shish</string>
|
||||
<string name="settings_general_users_prefs_user_add_summary">Yangi server uchun yangi foydalanuvchi yaratish</string>
|
||||
<string name="settings_general_dark_mode_title">Qorong’i rejim</string>
|
||||
<string name="settings_general_dark_mode_summary_system">Standart tizimdan foydalanish</string>
|
||||
<string name="settings_general_dark_mode_summary_light">Kunduzgi rejim yoqilgan</string>
|
||||
<string name="settings_general_dark_mode_entry_light">Kunduzgi rejim</string>
|
||||
<string name="settings_general_dark_mode_entry_dark">Qorong’i rejim</string>
|
||||
<string name="settings_backup_restore_header">Zaxiralash va Tiklash</string>
|
||||
<string name="settings_backup_restore_backup_title">Faylga zaxiralash</string>
|
||||
<string name="settings_backup_restore_backup_summary">Konfiguratsiya, bildirishnomalar va foydalanuvchilarni eksport qilish</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything">Hamma narsa</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything_no_users">Foydalanuvchilardan tashqari hamma narsa</string>
|
||||
<string name="settings_backup_restore_restore_title">Fayldan tiklash</string>
|
||||
<string name="settings_backup_restore_restore_summary">Konfiguratsiya, bildirishnomalar va foydalanuvchilarni import qilish</string>
|
||||
<string name="settings_advanced_broadcast_title">Xabarlarni uzatish</string>
|
||||
<string name="settings_advanced_broadcast_summary_enabled">Ilovalar kiruvchi bildirishnomalarni translyatsiya sifatida qabul qilishi mumkin</string>
|
||||
<string name="settings_advanced_unifiedpush_title">UnifiedPush-ni yoqing</string>
|
||||
<string name="settings_advanced_export_logs_summary">Loglarni xotiraga nusxalash yoki nopaste.net saytiga yuklash (ntfy muallifiga tegishli). Xost nomlari va mavzular senzura qilinishi mumkin, bildirishnomalar hech qachon bo\'lmaydi.</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_original">Xotiraga nusxalash</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_scrubbed">Xotiraga nusxalash (senzura qilib)</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_original">Havolani yuklash va nusxalash</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_scrubbed">Havolani yuklash va nusxalash (senzura qilib)</string>
|
||||
<string name="settings_advanced_export_logs_copied_logs">Loglar xotiraga nusxalandi</string>
|
||||
<string name="settings_advanced_export_logs_uploading">Log yuklanmoqda…</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_button_ok">OK</string>
|
||||
<string name="settings_advanced_clear_logs_deleted_toast">Loglar o‘chirildi</string>
|
||||
<string name="settings_advanced_connection_protocol_title">Ulanish protokoli</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">Serverga ulanish uchun HTTP orqali JSON oqimidan foydalaning. Bu usul jangovar sinovdan o‘tgan, lekin ko‘proq batareyani iste’mol qilishi mumkin.</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">Serverga ulanish uchun WebSocketlardan foydalaning. Bu tavsiya etilgan usul, lekin proksi-serveringizda qo‘shimcha sozlash talab qilinishi mumkin.</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_jsonhttp">HTTP orqali JSON oqimi</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">WebSocketlar</string>
|
||||
<string name="settings_about_header">Haqida</string>
|
||||
<string name="settings_about_version_title">Talqin</string>
|
||||
<string name="settings_about_version_format">ntfy %1$s (%2$s)</string>
|
||||
<string name="settings_about_version_copied_to_clipboard_message">Nusxalandi</string>
|
||||
<string name="detail_settings_notifications_instant_title">Darhol yuborish</string>
|
||||
<string name="detail_settings_notifications_instant_summary_on">Bildirishnomalar darhol yetkaziladi. Oldindan xizmat ko‘rsatishni talab qiladi va ko‘proq batareya sarflaydi.</string>
|
||||
<string name="detail_settings_notifications_instant_summary_off">Bildirishnomalar Firebase yordamida yetkaziladi. Yetkazib berish kechikishi mumkin, lekin batareyani kamroq sarflaydi.</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Moslashtirilgan bildirishnoma sozlamalari</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">Standart sozlamalardan foydalanish (tovushlar, Bezovta qilinmasin rejimini bekor qilish va h.k.)</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Bildirishnoma sozlamalarini sozlash</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">Bezovta qilinmasin (DND) rejimi, tovushlar va h.k.</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Ogohlantirishni davom etish</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Faqat bir marta ogohlantirish</string>
|
||||
<string name="detail_settings_appearance_header">Tashqi ko‘rinish</string>
|
||||
<string name="detail_settings_appearance_icon_set_title">Obuna belgisi</string>
|
||||
<string name="detail_settings_appearance_icon_set_summary">Bildirishnomalarda ko‘rsatiladigan belgini o‘rnatish</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">To\'rtta mavzuga obuna bo‘ldik</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_six">Oltita mavzuga obuna bo‘ldik</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">Ikkita darhol yuborish mavzulariga obuna bo‘ldik</string>
|
||||
<string name="refresh_message_result">%1$d ta bildirishnoma qabul qilindi</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">Uchta darhol yuborish mavzulariga obuna bo‘ldik</string>
|
||||
<string name="main_menu_notifications_disabled_until">Bildirishnomalar %1$s gacha o‘chirilgan</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_five">Beshta mavzuga obuna bo‘ldik</string>
|
||||
<string name="main_menu_donate_title">Xayriya qiling 💸</string>
|
||||
<string name="main_action_mode_delete_dialog_cancel">Bekor qilish</string>
|
||||
<string name="add_dialog_use_another_server_description">Boshqa serverlardan mavzularga obuna bo‘lish uchun quyida URL manzillarini kiriting.</string>
|
||||
<string name="add_dialog_login_description">Ushbu mavzu tizimga kirishni talab qiladi. Iltimos, foydalanuvchi nomi va parolni kiriting.</string>
|
||||
<string name="add_dialog_login_error_not_authorized">Tizimga kirishda xatolik yuz berdi. %1$s foydalanuvchiga ruxsat berilmagan.</string>
|
||||
<string name="detail_no_notifications_text">Siz hali bu mavzu bo‘yicha hech qanday bildirishnoma olmagansiz.</string>
|
||||
<string name="detail_clear_dialog_cancel">Bekor qilish</string>
|
||||
<string name="detail_delete_dialog_permanently_delete">Butunlay o‘chirish</string>
|
||||
<string name="share_topic_title">Birovga ulashish</string>
|
||||
<string name="detail_item_snack_undo">Qaytarish</string>
|
||||
<string name="detail_item_menu_cancel">Yuklashni bekor qilish</string>
|
||||
<string name="detail_item_menu_copy_contents_copied">Bildirishnoma xotiraga nusxalandi</string>
|
||||
<string name="detail_item_download_failed">Biriktirma yuklab olinmadi: %1$s</string>
|
||||
<string name="detail_item_download_info_download_failed">yuklab bo‘lmadi</string>
|
||||
<string name="detail_menu_clear">Barcha bildirishnomalarni tozalash</string>
|
||||
<string name="share_title">Ulashish</string>
|
||||
<string name="detail_test_message_error">Xabar yuborib bo‘lmadi: %1$s</string>
|
||||
<string name="detail_menu_notifications_enabled">Bildirishnomalar yoqilgan</string>
|
||||
<string name="detail_test_message_error_unauthorized_anon">Xabar yuborib bo‘lmadi: Anonim nashrga ruxsat berilmaydi.</string>
|
||||
<string name="detail_test_message_error_unauthorized_user">Xabar yuborib bo‘lmadi: \"%1$s\" foydalanuvchisiga ruxsat berilmagan.</string>
|
||||
<string name="detail_item_cannot_open_url">URL manzilini ochib bo‘lmadi: %1$s</string>
|
||||
<string name="share_successful">Xabar yuborildi</string>
|
||||
<string name="notification_dialog_title">Bildirishnomalar ovozini o‘chirish</string>
|
||||
<string name="notification_dialog_muted_forever_toast_message">Bildirishnomalar ovozi o‘chirildi</string>
|
||||
<string name="notification_dialog_muted_until_toast_message">Bildirishnomalar %1$s gacha o‘chirildi</string>
|
||||
<string name="notification_dialog_show_all">Barcha bildirishnomalarni ko‘rsatish</string>
|
||||
<string name="notification_dialog_30min">30 daqiqa</string>
|
||||
<string name="notification_dialog_2h">2 soat</string>
|
||||
<string name="notification_dialog_8h">8 soat</string>
|
||||
<string name="notification_dialog_forever">Davom etgunga qadar</string>
|
||||
<string name="notification_dialog_tomorrow">Ertaga qadar</string>
|
||||
<string name="notification_popup_file_download_successful">%1$s
|
||||
\nFayl: %2$s, yuklab olindi</string>
|
||||
<string name="notification_popup_file_download_failed">%1$s
|
||||
\nFayl: %2$s, yuklab olinmadi</string>
|
||||
<string name="settings_notifications_min_priority_title">Minimum ustuvorlik</string>
|
||||
<string name="settings_notifications_min_priority_summary_max">Agar ustuvorlik 5 (maksimal) bo‘lsa, bildirishnomalarni ko‘rsatish</string>
|
||||
<string name="settings_notifications_min_priority_default">Standart ustuvorlik va undan yuqori</string>
|
||||
<string name="settings_notifications_auto_download_title">Biriktirmalarni yuklash</string>
|
||||
<string name="settings_notifications_auto_download_500k">500 kB dan past bo‘lsa</string>
|
||||
<string name="settings_notifications_auto_delete_title">Bildirishnomalarni o‘chirib tashlash</string>
|
||||
<string name="settings_backup_restore_backup_entry_settings_only">Faqat sozlamalar</string>
|
||||
<string name="settings_general_dark_mode_summary_dark">Tungi rejim yoqilgan. Siz vampirmisiz?</string>
|
||||
<string name="settings_general_dark_mode_entry_system">Tizim standartidan foydalanish</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_days">3 kundan keyin bildirishnomalarni avtomatik o‘chirish</string>
|
||||
<string name="settings_backup_restore_backup_successful">Zaxira yaratildi</string>
|
||||
<string name="settings_advanced_broadcast_summary_disabled">Ilovalar bildirishnomalarni translyatsiya sifatida qabul qila olmaydi</string>
|
||||
<string name="settings_advanced_record_logs_summary_enabled">Qurilmaga qayd qilinmoqda (1000 tagacha yozuvlar)…</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_week">Bir haftadan so‘ng bildirishnomalarni avtomatik o‘chirish</string>
|
||||
<string name="settings_backup_restore_backup_failed">Zaxiralash amalga oshmadi: %1$s</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_months">3 oydan keyin bildirishnomalarni avtomatik o‘chirish</string>
|
||||
<string name="settings_backup_restore_restore_successful">Qayta tiklash muvaffaqiyatli</string>
|
||||
<string name="settings_backup_restore_restore_failed">Qayta tiklash amalga oshmadi: %1$s</string>
|
||||
<string name="settings_advanced_header">Murakkab</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy UnifiedPush distribyutori sifatida ishlaydi</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">Maksimal ustuvor bildirishnomalar faqat bir marta ogohlantiriladi</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfy UnifiedPush distribyutori sifatida ishlamaydi</string>
|
||||
<string name="settings_general_users_prefs_title">Foydalanuvchilar</string>
|
||||
<string name="settings_advanced_record_logs_title">Loglarni yozib olish</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">Muammolarni aniqlash/ulashish uchun loggingni yoqish.</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">Ushbu obuna uchun maxsus sozlamalardan foydalanish</string>
|
||||
<string name="detail_settings_appearance_icon_remove_title">Obuna belgisi (olib tashlash uchun bosing)</string>
|
||||
<string name="detail_settings_appearance_icon_remove_summary">Ushbu mavzu bo‘yicha bildirishnomalarda ko‘rsatilgan belgi</string>
|
||||
<string name="detail_settings_appearance_icon_error_saving">Belgini saqlab bo‘lmadi: %1$s</string>
|
||||
<string name="detail_settings_appearance_display_name_message">Ushbu obuna uchun maxsus ko‘rsatiladigan nomni o‘rnating. Standart qoldirish uchun bo‘sh qoldiring (%1$s).</string>
|
||||
<string name="user_dialog_title_edit">Foydalanuvchini tahrirlash</string>
|
||||
<string name="user_dialog_description_add">Siz bu yerga foydalanuvchi qo‘shishingiz mumkin. Berilgan server uchun barcha mavzular ushbu foydalanuvchidan foydalanadi.</string>
|
||||
<string name="settings_advanced_export_logs_title">Loglarni nusxalash/yuklash</string>
|
||||
<string name="settings_advanced_export_logs_copied_url">Loglar yuklandi va URL manzilidan nusxa olindi</string>
|
||||
<string name="settings_advanced_export_logs_error_uploading">Loglarni yuklab bo‘lmadi: %1$s</string>
|
||||
<string name="settings_advanced_clear_logs_title">Loglarni tozalash</string>
|
||||
<string name="detail_settings_appearance_display_name_title">Ko‘rsatiladigan ism</string>
|
||||
<string name="user_dialog_description_edit">Tanlangan foydalanuvchi uchun foydalanuvchi nomi/parolni tahrirlashingiz yoki uni o‘chirishingiz mumkin.</string>
|
||||
<string name="user_dialog_base_url_hint">Xizmat URL manzili</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_text">Ushbu mavzular/xost nomlari meva nomlari bilan almashtirildi, shuning uchun siz logni tashvishlanmasdan baham ko‘rishingiz mumkin:
|
||||
\n
|
||||
\n%1$s
|
||||
\n
|
||||
\nParollar tozalangan, ammo bu erda ko‘rsatilmagan.</string>
|
||||
<string name="user_dialog_username_hint">Foydalanuvchi nomi</string>
|
||||
<string name="detail_settings_appearance_display_name_default_summary">%1$s (standart)</string>
|
||||
<string name="user_dialog_password_hint_add">Parol</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_empty">Hech qanday mavzu/xost nomlari tahrir qilinmadi. Balki sizda obuna yo‘qdir?</string>
|
||||
<string name="detail_settings_about_topic_url_title">Mavzu manzili</string>
|
||||
<string name="user_dialog_password_hint_edit">Parol (bo‘sh qoldirilgan bo\'lsa, o‘zgartirilmagan)</string>
|
||||
<string name="detail_settings_global_setting_title">Global sozlamalardan foydalanish</string>
|
||||
<string name="user_dialog_button_add">Foydalanuvchi qo‘shish</string>
|
||||
<string name="detail_settings_global_setting_suffix">global sozlamalardan foydalanilmoqda</string>
|
||||
<string name="user_dialog_button_cancel">Bekor qilish</string>
|
||||
<string name="settings_advanced_clear_logs_summary">Oldin yozilgan loglarni o‘chirib tashlang va qaytadan boshlang</string>
|
||||
<string name="detail_settings_about_header">Haqida</string>
|
||||
<string name="user_dialog_button_delete">Foydalanuvchini o‘chirish</string>
|
||||
<string name="user_dialog_title_add">Foydalanuvchi qo‘shish</string>
|
||||
<string name="user_dialog_button_save">Saqlash</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">Buferga nusxalandi</string>
|
||||
</resources>
|
|
@ -1,26 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_notifications_low_name">Ưu tiên thấp</string>
|
||||
<string name="add_dialog_login_password_hint">Mật khẩu</string>
|
||||
<string name="add_dialog_login_username_hint">Tên tài khoản</string>
|
||||
<string name="add_dialog_login_description">Chủ đề này cần đăng nhập để truy cập. Vui lòng nhập tên tài khoản và mật khẩu.</string>
|
||||
<string name="user_dialog_button_add">Thêm người dùng</string>
|
||||
<string name="add_dialog_login_error_not_authorized">Đăng nhập thất bại. Không xác thực được tài khoản %1$s.</string>
|
||||
<string name="user_dialog_description_edit">Bạn có thể chỉnh sửa tên tài khoản hoặc mật khẩu của người dùng này, hoặc xóa người dùng này khỏi hệ thống.</string>
|
||||
<string name="user_dialog_button_save">Lưu</string>
|
||||
<string name="user_dialog_password_hint_add">Mật khẩu</string>
|
||||
<string name="add_dialog_topic_name_hint">Tên chủ đề, ví dụ: phils_alerts</string>
|
||||
<string name="user_dialog_button_delete">Xóa người dùng</string>
|
||||
<string name="user_dialog_button_cancel">Hủy</string>
|
||||
<string name="add_dialog_use_another_server">Sử dụng máy chủ khác</string>
|
||||
<string name="user_dialog_password_hint_edit">Mật khẩu (không đổi nếu để trống)</string>
|
||||
<string name="add_dialog_title">Theo dõi chủ đề</string>
|
||||
<string name="user_dialog_username_hint">Tên tài khoản</string>
|
||||
<string name="channel_notifications_min_name">Ưu tiên thấp nhất</string>
|
||||
<string name="channel_notifications_max_name">Ưu tiên cao nhất</string>
|
||||
<string name="channel_notifications_group_default_name">Mặc định</string>
|
||||
<string name="channel_subscriber_service_name">Dịch vụ thông báo</string>
|
||||
<string name="channel_notifications_default_name">Mặc định</string>
|
||||
<string name="channel_notifications_high_name">Ưu tiên cao</string>
|
||||
<string name="channel_subscriber_notification_title">Chờ thông báo</string>
|
||||
</resources>
|
||||
<resources></resources>
|
|
@ -18,7 +18,7 @@
|
|||
<string name="main_action_mode_delete_dialog_cancel">取消</string>
|
||||
<string name="main_item_status_reconnecting">正在重新连接……</string>
|
||||
<string name="main_item_date_yesterday">昨天</string>
|
||||
<string name="main_item_status_unified_push">%1$s(統一推送)</string>
|
||||
<string name="main_item_status_unified_push">%1$s(统一推送)</string>
|
||||
<string name="main_how_to_link">详细的说明请见 ntfy.sh 和帮助文档。</string>
|
||||
<string name="main_unified_push_toast">此通知由 %1$s 通过 UnifiedPush 管理</string>
|
||||
<string name="main_banner_battery_text">请关闭对本应用的电量优化以避免通知推送问题。</string>
|
||||
|
@ -69,7 +69,7 @@
|
|||
<string name="detail_test_message_error">无法发送消息:%1$s</string>
|
||||
<string name="detail_test_message_error_unauthorized_anon">无法发送消息:主题禁止匿名发布。</string>
|
||||
<string name="detail_test_message_error_too_large">无法发送消息:附件体积过大。</string>
|
||||
<string name="detail_copied_to_clipboard_message">已复制到剪贴板</string>
|
||||
<string name="detail_copied_to_clipboard_message">复制到剪贴板</string>
|
||||
<string name="detail_instant_delivery_enabled">实时推送已开启</string>
|
||||
<string name="detail_instant_delivery_disabled">实时推送已关闭</string>
|
||||
<string name="detail_item_tags">标签:%1$s</string>
|
||||
|
@ -139,11 +139,11 @@
|
|||
<string name="notification_dialog_title">暂停通知</string>
|
||||
<string name="notification_dialog_muted_forever_toast_message">通知已暂停</string>
|
||||
<string name="notification_popup_action_download">下载</string>
|
||||
<string name="channel_notifications_min_name">最低优先级</string>
|
||||
<string name="channel_notifications_low_name">低优先级</string>
|
||||
<string name="channel_notifications_default_name">默认优先级</string>
|
||||
<string name="channel_notifications_high_name">高优先级</string>
|
||||
<string name="channel_notifications_max_name">最高优先级</string>
|
||||
<string name="channel_notifications_min_name">通知 (最低优先级)</string>
|
||||
<string name="channel_notifications_low_name">通知 (低优先级)</string>
|
||||
<string name="channel_notifications_default_name">通知 (默认优先级)</string>
|
||||
<string name="channel_notifications_high_name">通知 (高优先级)</string>
|
||||
<string name="channel_notifications_max_name">通知 (最高优先级)</string>
|
||||
<string name="channel_subscriber_service_name">订阅服务</string>
|
||||
<string name="channel_subscriber_notification_title">正在监听通知</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">已订阅主题</string>
|
||||
|
@ -219,7 +219,7 @@
|
|||
<string name="settings_general_users_prefs_user_add_title">添加新用户</string>
|
||||
<string name="settings_general_users_prefs_user_add_summary">为新服务器创建新用户</string>
|
||||
<string name="settings_general_dark_mode_title">暗色模式</string>
|
||||
<string name="settings_general_dark_mode_summary_system">使用系统默认</string>
|
||||
<string name="settings_general_dark_mode_summary_system">跟随系统默认</string>
|
||||
<string name="settings_general_dark_mode_entry_dark">暗色模式</string>
|
||||
<string name="settings_general_dark_mode_summary_light">亮色模式已启用</string>
|
||||
<string name="settings_backup_restore_backup_title">备份到文件</string>
|
||||
|
@ -258,7 +258,7 @@
|
|||
<string name="settings_general_dark_mode_entry_light">亮色模式</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_one">在主题 %1$s 使用</string>
|
||||
<string name="settings_general_dark_mode_summary_dark">暗色模式已启用。您是吸血鬼吗?</string>
|
||||
<string name="settings_general_dark_mode_entry_system">使用系统默认值</string>
|
||||
<string name="settings_general_dark_mode_entry_system">跟随系统默认</string>
|
||||
<string name="settings_advanced_clear_logs_summary">删除以前的日志并重新来过</string>
|
||||
<string name="user_dialog_title_add">添加用户</string>
|
||||
<string name="user_dialog_title_edit">编辑用户</string>
|
||||
|
@ -271,7 +271,7 @@
|
|||
<string name="settings_advanced_clear_logs_title">清除日志</string>
|
||||
<string name="settings_advanced_clear_logs_deleted_toast">日志已删除</string>
|
||||
<string name="settings_advanced_header">高级</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">记录日志以便稍后分享调试故障。</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">记录日志以便调试错误。</string>
|
||||
<string name="settings_advanced_export_logs_title">复制 / 上传日志</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_text">以下主题/域名已被替换为水果名称,您可以放心分享日志:
|
||||
\n
|
||||
|
@ -324,23 +324,4 @@
|
|||
<string name="detail_settings_appearance_display_name_default_summary">%1$s (默认)</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">清除服务 URL</string>
|
||||
<string name="main_banner_websocket_button_enable_now">马上开启</string>
|
||||
<string name="detail_settings_about_header">关于</string>
|
||||
<string name="detail_settings_about_topic_url_title">主题 URL</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">已复制到剪贴板</string>
|
||||
<string name="main_menu_donate_title">捐赠 💸</string>
|
||||
<string name="detail_item_cannot_open_apk">无法再安装应用。 请通过浏览器下载。 有关详细信息,请参阅问题 #531。</string>
|
||||
<string name="channel_notifications_group_default_name">默认</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">持续以最高优先级通知进行提醒,直至取消</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">对这个订阅使用自定义通知</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">使用默认设置(声音、“勿扰模式”绕过等)</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">“勿扰模式”绕过、声音等.</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">持续提醒</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">只提醒一次</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">自定义通知设置</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">持续以最高优先级提醒</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">最高优先级通知,但只提醒一次</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">配置通知设置</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfy 不再会作为 UnifiedPush 的一个分发器</string>
|
||||
<string name="settings_advanced_unifiedpush_title">启用 UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy 将作为 UnifiedPush 的一个分发器</string>
|
||||
</resources>
|
|
@ -1,23 +1,23 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="channel_subscriber_notification_noinstant_text_six">已訂閱 6 個主題</string>
|
||||
<string name="channel_notifications_default_name">預設優先</string>
|
||||
<string name="main_menu_report_bug_title">問題回報</string>
|
||||
<string name="channel_subscriber_notification_title">正在接收通知</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_six">已訂閱6個主題</string>
|
||||
<string name="channel_notifications_default_name">通知(預設優先)</string>
|
||||
<string name="main_menu_report_bug_title">回報bug</string>
|
||||
<string name="channel_subscriber_notification_title">監聽傳入通知</string>
|
||||
<string name="channel_subscriber_notification_instant_text">已訂閱即時推送主題</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">已訂閱 1 個即時推送主題</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">已訂閱 2 個即時推送主題</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">已訂閱 4 個即時推送主題</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">已訂閱 5 個即時推送主題</string>
|
||||
<string name="channel_subscriber_notification_instant_text_six">已訂閱 6 個即時推送主題</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">已訂閱 %1$d 個即時推送主題</string>
|
||||
<string name="channel_subscriber_notification_instant_text_one">已訂閱1個即時推送主題</string>
|
||||
<string name="channel_subscriber_notification_instant_text_two">已訂閱2個即時推送主題</string>
|
||||
<string name="channel_subscriber_notification_instant_text_four">已訂閱4個即時推送主題</string>
|
||||
<string name="channel_subscriber_notification_instant_text_five">已訂閱5個即時推送主題</string>
|
||||
<string name="channel_subscriber_notification_instant_text_six">已訂閱6個即時推送主題</string>
|
||||
<string name="channel_subscriber_notification_instant_text_more">已訂閱%1$d個即時推送主題</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text">已訂閱主題</string>
|
||||
<string name="refresh_message_result">收到 %1$d 個通知</string>
|
||||
<string name="refresh_message_result">收到%1$d個通知</string>
|
||||
<string name="refresh_message_no_results">已同步到最新</string>
|
||||
<string name="refresh_message_error">有 %1$d 個訂閱無法更新
|
||||
<string name="refresh_message_error">有%1$d個訂閱無法更新
|
||||
\n
|
||||
\n%2$s</string>
|
||||
<string name="refresh_message_error_one">訂閱無法更新: %1$s</string>
|
||||
<string name="refresh_message_error_one">訂閱無法更新:%1$s</string>
|
||||
<string name="main_action_bar_title">已訂閱主題</string>
|
||||
<string name="main_menu_notifications_enabled">通知已開啟</string>
|
||||
<string name="main_menu_notifications_disabled_forever">通知已靜音</string>
|
||||
|
@ -27,16 +27,16 @@
|
|||
<string name="main_action_mode_delete_dialog_message">取消訂閱已選取的主題且永久刪除所有通知?</string>
|
||||
<string name="main_action_mode_delete_dialog_permanently_delete">永久刪除</string>
|
||||
<string name="main_action_mode_delete_dialog_cancel">取消</string>
|
||||
<string name="main_item_status_text_one">%1$d 個通知</string>
|
||||
<string name="main_item_status_text_not_one">%1$d 個通知</string>
|
||||
<string name="main_item_status_text_one">%1$d個通知</string>
|
||||
<string name="main_item_status_text_not_one">%1$d個通知</string>
|
||||
<string name="main_item_date_yesterday">昨天</string>
|
||||
<string name="main_add_button_description">新增訂閱</string>
|
||||
<string name="main_no_subscriptions_text">看來你還沒有訂閱任何主題。</string>
|
||||
<string name="main_how_to_intro">點擊 + 來新增或訂閱一個主題。當透過 PUT 或 POST 來發送訊息你將會接收到通知。</string>
|
||||
<string name="main_how_to_link">更多資訊請上 ntfy.sh,docs會有更多說明。</string>
|
||||
<string name="main_unified_push_toast">此訂閱已由 %1$s 透過 UnifiedPush 管理</string>
|
||||
<string name="main_item_status_unified_push">%1$s(統一推送)</string>
|
||||
<string name="main_banner_battery_text">為了避免通知傳送問題,請務必關閉電池最佳化功能。</string>
|
||||
<string name="main_item_status_unified_push">%1$s (UnifiedPush)</string>
|
||||
<string name="main_banner_battery_text">為了避免通知傳送問題,電池最佳化必須關閉。</string>
|
||||
<string name="main_banner_battery_button_remind_later">稍後詢問我</string>
|
||||
<string name="main_banner_battery_button_dismiss">略過</string>
|
||||
<string name="main_banner_battery_button_fix_now">立即修正</string>
|
||||
|
@ -47,300 +47,21 @@
|
|||
<string name="add_dialog_description_below">因為主題不能受密碼保護,請盡量取一個難以猜測的主題名稱。在訂閱之後你就可以使用 PUT/POST 來發送通知。</string>
|
||||
<string name="add_dialog_use_another_server">使用其他伺服器</string>
|
||||
<string name="add_dialog_use_another_server_description">在下方輸入自訂的網址來訂閱主題。</string>
|
||||
<string name="channel_notifications_min_name">最低優先</string>
|
||||
<string name="channel_notifications_low_name">較低優先</string>
|
||||
<string name="channel_notifications_high_name">較高優先</string>
|
||||
<string name="channel_notifications_max_name">最高優先</string>
|
||||
<string name="channel_notifications_min_name">通知(最低優先)</string>
|
||||
<string name="channel_notifications_low_name">通知(低優先)</string>
|
||||
<string name="channel_notifications_high_name">通知(高優先)</string>
|
||||
<string name="channel_notifications_max_name">通知(最高優先)</string>
|
||||
<string name="channel_subscriber_service_name">訂閱服務</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">已訂閱 3 個即時推送主題</string>
|
||||
<string name="main_menu_docs_title">閱讀技術文件</string>
|
||||
<string name="main_banner_websocket_text">建議使用 WebSocket 來接收通知。這個連接方式能有效改善電池續航,但可能需要<a href="https://ntfy.sh/docs/config/#nginxapache2caddy">在伺服器端進行額外設定</a>。你可以在設定頁面更改不同的連接方式。</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">已訂閱 3 個主題</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">已訂閱 %1$d 個主題</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">已訂閱 1 個主題</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">已訂閱 2 個主題</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">已訂閱 4 個主題</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_five">已訂閱 5 個主題</string>
|
||||
<string name="main_item_status_reconnecting">重新連線中…</string>
|
||||
<string name="main_menu_notifications_disabled_until">通知靜音到 %1$s</string>
|
||||
<string name="add_dialog_topic_name_hint">主題名稱 (例如:phils_alerts)</string>
|
||||
<string name="add_dialog_button_cancel">取消</string>
|
||||
<string name="add_dialog_button_subscribe">訂閱</string>
|
||||
<string name="add_dialog_button_back">返回</string>
|
||||
<string name="add_dialog_error_connection_failed">連接失敗: %1$s</string>
|
||||
<string name="add_dialog_login_title">需要登入</string>
|
||||
<string name="add_dialog_login_username_hint">使用者名稱</string>
|
||||
<string name="add_dialog_login_password_hint">密碼</string>
|
||||
<string name="add_dialog_login_error_not_authorized">登入失敗,使用者 %1$s 並未授權訂閱這個主題。</string>
|
||||
<string name="add_dialog_login_new_user">建立新使用者</string>
|
||||
<string name="add_dialog_base_urls_dropdown_choose">選擇 ntfy 服務 URL</string>
|
||||
<string name="add_dialog_base_urls_dropdown_clear">清除 URL</string>
|
||||
<string name="detail_copied_to_clipboard_message">已複製到剪貼簿</string>
|
||||
<string name="add_dialog_button_login">登入</string>
|
||||
<string name="add_dialog_login_description">這個主題需要登入,請先輸入帳號密碼。</string>
|
||||
<string name="add_dialog_instant_delivery">在省電模式下依然接收即時通知</string>
|
||||
<string name="add_dialog_instant_delivery_description">確保通知能在未使用裝置時都能接收。</string>
|
||||
<string name="detail_clear_dialog_cancel">取消</string>
|
||||
<string name="detail_delete_dialog_cancel">取消</string>
|
||||
<string name="detail_action_mode_delete_dialog_cancel">取消</string>
|
||||
<string name="share_title">分享</string>
|
||||
<string name="share_topic_title">分享到</string>
|
||||
<string name="settings_notifications_priority_low">低</string>
|
||||
<string name="settings_notifications_priority_default">預設</string>
|
||||
<string name="settings_notifications_priority_high">高</string>
|
||||
<string name="settings_notifications_priority_max">最高</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_month">自動刪除 1 個月前的通知</string>
|
||||
<string name="settings_notifications_auto_delete_one_day">1 天後</string>
|
||||
<string name="settings_notifications_auto_delete_three_days">3 天後</string>
|
||||
<string name="settings_notifications_auto_delete_one_week">1 週後</string>
|
||||
<string name="settings_notifications_auto_delete_one_month">1 個月後</string>
|
||||
<string name="settings_notifications_auto_delete_three_months">3 個月後</string>
|
||||
<string name="settings_general_header">一般</string>
|
||||
<string name="settings_general_default_base_url_title">預設伺服器</string>
|
||||
<string name="settings_general_default_base_url_default_summary">%1$s (預設)</string>
|
||||
<string name="settings_general_users_title">管理使用者</string>
|
||||
<string name="settings_backup_restore_header">備份與還原</string>
|
||||
<string name="settings_about_version_copied_to_clipboard_message">已複製到剪貼簿</string>
|
||||
<string name="settings_about_header">關於</string>
|
||||
<string name="settings_about_version_title">版本號</string>
|
||||
<string name="settings_about_version_format">ntfy %1$s (%2$s)</string>
|
||||
<string name="detail_settings_appearance_header">主題</string>
|
||||
<string name="detail_settings_notifications_instant_title">即時通知</string>
|
||||
<string name="detail_settings_global_setting_suffix">使用全域設定</string>
|
||||
<string name="user_dialog_title_add">新增使用者</string>
|
||||
<string name="main_menu_donate_title">捐獻 💸</string>
|
||||
<string name="detail_item_snack_undo">復原</string>
|
||||
<string name="detail_item_download_info_downloading_x_percent">已下載 %1$d%%</string>
|
||||
<string name="detail_menu_enable_instant">啓用即時通知</string>
|
||||
<string name="detail_menu_disable_instant">關閉即時通知</string>
|
||||
<string name="detail_menu_clear">清除所有通知</string>
|
||||
<string name="detail_action_mode_menu_copy">複製</string>
|
||||
<string name="detail_action_mode_menu_delete">刪除</string>
|
||||
<string name="share_menu_send">傳送</string>
|
||||
<string name="share_content_title">預覽</string>
|
||||
<string name="notification_dialog_cancel">取消</string>
|
||||
<string name="notification_dialog_save">儲存</string>
|
||||
<string name="notification_dialog_30min">30 分鐘</string>
|
||||
<string name="notification_dialog_1h">1 小時</string>
|
||||
<string name="notification_dialog_2h">2 小時</string>
|
||||
<string name="notification_dialog_8h">8 小時</string>
|
||||
<string name="notification_dialog_tomorrow">直到明天</string>
|
||||
<string name="notification_dialog_forever">直到我解除為止</string>
|
||||
<string name="notification_popup_action_open">開啓</string>
|
||||
<string name="notification_popup_action_browse">瀏覽</string>
|
||||
<string name="notification_popup_action_download">下載</string>
|
||||
<string name="notification_popup_action_cancel">取消</string>
|
||||
<string name="notification_popup_file">%1$s
|
||||
\n檔案: %2$s</string>
|
||||
<string name="notification_popup_file_downloading">下載中 %1$s, %2$d%%
|
||||
\n%3$s</string>
|
||||
<string name="notification_popup_file_download_successful">%1$s
|
||||
\n檔案下載已完成: %2$s</string>
|
||||
<string name="notification_popup_file_download_failed">%1$s
|
||||
\n檔案下載失敗: %2$s</string>
|
||||
<string name="notification_popup_user_action_failed">%1$s 失敗: %2$s</string>
|
||||
<string name="settings_title">設定</string>
|
||||
<string name="settings_notifications_muted_until_show_all">顯示所有通知</string>
|
||||
<string name="settings_notifications_priority_min">最小</string>
|
||||
<string name="settings_notifications_auto_download_title">下載附件</string>
|
||||
<string name="settings_notifications_auto_download_summary_always">自動下載所有附件</string>
|
||||
<string name="settings_notifications_auto_download_summary_never">從不自動下載附件</string>
|
||||
<string name="settings_notifications_auto_download_summary_smaller_than_x">自動下載小於 %1$s 的附件</string>
|
||||
<string name="settings_notifications_auto_download_never">從不自動下載</string>
|
||||
<string name="settings_notifications_auto_download_always">自動下載所有東西</string>
|
||||
<string name="settings_notifications_auto_download_500k">小於 500 kB</string>
|
||||
<string name="settings_notifications_auto_download_100k">小於 100 kB</string>
|
||||
<string name="settings_notifications_auto_download_1m">小於 1 MB</string>
|
||||
<string name="settings_notifications_auto_download_5m">小於 5 MB</string>
|
||||
<string name="settings_notifications_auto_download_50m">小於 50 MB</string>
|
||||
<string name="settings_notifications_auto_delete_title">自動刪除通知</string>
|
||||
<string name="settings_notifications_auto_delete_summary_never">永不自動刪除通知</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_day">自動刪除 1 天前的通知</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_days">自動刪除 3 天前的通知</string>
|
||||
<string name="settings_notifications_auto_delete_summary_one_week">自動刪除 1 週前的通知</string>
|
||||
<string name="settings_notifications_auto_delete_summary_three_months">自動刪除 3 個月前的通知</string>
|
||||
<string name="settings_notifications_auto_delete_never">從不</string>
|
||||
<string name="settings_general_users_prefs_title">使用者</string>
|
||||
<string name="settings_general_users_prefs_user_add">新增使用者</string>
|
||||
<string name="settings_general_users_prefs_user_add_title">建立新使用者</string>
|
||||
<string name="settings_general_dark_mode_title">黑暗模式</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything">全部</string>
|
||||
<string name="settings_backup_restore_backup_entry_settings_only">僅備份設定</string>
|
||||
<string name="settings_backup_restore_backup_entry_everything_no_users">全部備份 (使用者檔案除外)</string>
|
||||
<string name="settings_backup_restore_backup_successful">已成功備份</string>
|
||||
<string name="settings_backup_restore_restore_successful">還原成功</string>
|
||||
<string name="settings_backup_restore_restore_failed">還原失敗: %1$s</string>
|
||||
<string name="settings_advanced_header">進階</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_button_ok">確定</string>
|
||||
<string name="settings_advanced_connection_protocol_title">連接方式</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_jsonhttp">透過 HTTP 連接伺服器來接收 JSON 串流,但可能會持續消耗較大電量。</string>
|
||||
<string name="settings_advanced_connection_protocol_summary_ws">(建議) 透過 WebSocket 連接伺服器,但伺服器可能需要額外設定來啓用這種連接方式。</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_jsonhttp">JSON 串流 (透過 HTTP 連接)</string>
|
||||
<string name="settings_advanced_connection_protocol_entry_ws">WebSocket</string>
|
||||
<string name="detail_settings_about_topic_url_title">主題 URL</string>
|
||||
<string name="detail_settings_about_topic_url_copied_to_clipboard_message">已複製到剪貼簿</string>
|
||||
<string name="user_dialog_password_hint_add">密碼</string>
|
||||
<string name="user_dialog_button_save">儲存</string>
|
||||
<string name="user_dialog_button_add">新增使用者</string>
|
||||
<string name="user_dialog_button_cancel">取消</string>
|
||||
<string name="user_dialog_username_hint">使用者名稱</string>
|
||||
<string name="settings_notifications_header">通知</string>
|
||||
<string name="detail_menu_test">發送測試訊息</string>
|
||||
<string name="settings_notifications_muted_until_title">暫停通知</string>
|
||||
<string name="settings_notifications_auto_download_10m">小於 10 MB</string>
|
||||
<string name="detail_settings_about_header">關於</string>
|
||||
<string name="settings_backup_restore_backup_failed">備份失敗: %1$s</string>
|
||||
<string name="add_dialog_foreground_description">除了 %1$s 以外伺服器有即時傳送。</string>
|
||||
<string name="detail_item_menu_copy_contents_copied">通知已複製至剪貼簿</string>
|
||||
<string name="channel_notifications_group_default_name">預設</string>
|
||||
<string name="detail_how_to_link">可以再說明書 (ntfy.sh) 找到詳細指示。</string>
|
||||
<string name="detail_clear_dialog_message">確定清除主題內的全部通訊?</string>
|
||||
<string name="detail_clear_dialog_permanently_delete">永久刪除</string>
|
||||
<string name="detail_delete_dialog_message">確定取消訂閱這個主題,並刪除所有通訊?</string>
|
||||
<string name="detail_delete_dialog_permanently_delete">確定永久刪除</string>
|
||||
<string name="detail_test_title">測試:你可以選一個你喜歡的標題。</string>
|
||||
<string name="detail_test_message">這是從 ntfy Android 應用程式發送的測試信息,優先是 %1$d。如果你傳送另一個訊息,它看起來可能會不一樣。</string>
|
||||
<string name="detail_test_message_error_unauthorized_anon">不能夠傳送訊息:匿名發布不受批准。</string>
|
||||
<string name="detail_test_message_error_too_large">不能夠傳送訊息:附件大小超出限制。</string>
|
||||
<string name="detail_instant_delivery_disabled">關閉即時傳送</string>
|
||||
<string name="detail_item_snack_deleted">已刪除通知</string>
|
||||
<string name="detail_item_menu_open">開啟檔案</string>
|
||||
<string name="detail_item_menu_delete">刪除檔案</string>
|
||||
<string name="detail_item_menu_cancel">取消下載</string>
|
||||
<string name="detail_item_menu_save_file">儲存檔案</string>
|
||||
<string name="detail_item_menu_copy_contents">複製通知</string>
|
||||
<string name="detail_item_cannot_open_url">無法開啟網址:%1$s</string>
|
||||
<string name="detail_item_saved_successfully">儲存為 \"Downloads\" 資料中的 \"%1$s\"</string>
|
||||
<string name="detail_test_message_error_unauthorized_user">不能夠發布信息:用戶 %1$s 不被授權。</string>
|
||||
<string name="detail_how_to_intro">PUT 或 POST 主題網址以傳送通訊。</string>
|
||||
<string name="detail_how_to_example">例如(使用 curl): <br/><tt>$ curl -d \"Hi\" %1$s</tt></string>
|
||||
<string name="detail_test_message_error">不能夠傳送訊息:%1$s</string>
|
||||
<string name="detail_item_tags">標籤:%1$s</string>
|
||||
<string name="detail_instant_delivery_enabled">啟動即時傳送</string>
|
||||
<string name="detail_item_menu_copy_url">複製網址</string>
|
||||
<string name="detail_item_menu_copy_url_copied">網址已複製至剪貼簿</string>
|
||||
<string name="detail_item_cannot_open">無法開啟附件:%1$s</string>
|
||||
<string name="detail_item_cannot_open_not_found">無法開啟附件:檔案可能已被刪除或檔案無法被任何軟件開啟。</string>
|
||||
<string name="detail_item_cannot_download">無法開啟或下載附件,網址無效而且找不到本地檔案。</string>
|
||||
<string name="detail_deep_link_subscribed_toast_message">訂閱主題 %1$s</string>
|
||||
<string name="detail_no_notifications_text">你未有在這個主題收到任何通訊。</string>
|
||||
<string name="detail_item_menu_download">下載檔案</string>
|
||||
<string name="detail_settings_title">訂閱設定</string>
|
||||
<string name="share_content_image_text">一張圖片已與您分享</string>
|
||||
<string name="share_content_text_hint">在此添加內容以進行分享</string>
|
||||
<string name="share_suggested_topics">建議的主題</string>
|
||||
<string name="share_content_file_error">無法圖取檔案資訊:%1$s</string>
|
||||
<string name="settings_general_default_base_url_message">輸入你的伺服器的 root URL,以便在訂閱新主題和/或分享到主題時,默認使用你自己的伺服器。</string>
|
||||
<string name="detail_item_cannot_save">無法儲存附件:%1$s</string>
|
||||
<string name="detail_item_download_failed">無法下載附件:%1$s</string>
|
||||
<string name="detail_item_cannot_open_apk">無法再安裝應用程式。請改為使用瀏覽器下載。詳見問題#531。</string>
|
||||
<string name="detail_item_download_info_not_downloaded">未下載</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expired">未下載,連結已過期</string>
|
||||
<string name="detail_item_download_info_deleted_expired">已刪除,連結已過期</string>
|
||||
<string name="detail_menu_notifications_disabled_forever">關閉通知</string>
|
||||
<string name="detail_action_mode_delete_dialog_message">是否永久刪除所選的通知?</string>
|
||||
<string name="detail_action_mode_delete_dialog_permanently_delete">永久刪除</string>
|
||||
<string name="share_content_image_error">無法讀取圖片:%1$s</string>
|
||||
<string name="share_content_file_text">一個檔案已與您分享</string>
|
||||
<string name="share_successful">推送訊息</string>
|
||||
<string name="notification_dialog_title">關閉通知</string>
|
||||
<string name="notification_dialog_enabled_toast_message">恢復通知</string>
|
||||
<string name="settings_notifications_min_priority_summary_max">如果優先級為 5 (最大值),顯示通知</string>
|
||||
<string name="settings_notifications_min_priority_min">任意優先級</string>
|
||||
<string name="settings_notifications_min_priority_max">僅最大優先級</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">保持高優先級的警報</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">最高優先級的通知持續警報,直到被關閉</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">最高優先級的通知僅警報一次</string>
|
||||
<string name="detail_item_cannot_delete">無法刪除附件:%1$s</string>
|
||||
<string name="detail_item_download_info_deleted">已刪除</string>
|
||||
<string name="detail_menu_notifications_enabled">開啟通知</string>
|
||||
<string name="detail_item_download_info_download_failed">下載失敗</string>
|
||||
<string name="detail_menu_notifications_disabled_until">關閉通知直到 %1$s</string>
|
||||
<string name="detail_menu_copy_url">複製主題網址</string>
|
||||
<string name="detail_menu_settings">訂閱設定</string>
|
||||
<string name="detail_menu_unsubscribe">取消訂閱</string>
|
||||
<string name="notification_dialog_muted_until_toast_message">關閉通知直到 %1$s</string>
|
||||
<string name="notification_dialog_show_all">顯示所有通知</string>
|
||||
<string name="notification_dialog_muted_forever_toast_message">關閉通知</string>
|
||||
<string name="settings_notifications_muted_until_forever">關閉通知直到恢復</string>
|
||||
<string name="settings_notifications_min_priority_title">最低優先級</string>
|
||||
<string name="settings_notifications_min_priority_summary_any">顯示所有通知</string>
|
||||
<string name="settings_notifications_muted_until_x">關閉通知直到 %1$s</string>
|
||||
<string name="settings_notifications_min_priority_default">預設優先級和以上</string>
|
||||
<string name="settings_notifications_min_priority_high">高優先級和以上</string>
|
||||
<string name="settings_notifications_min_priority_low">低優先級和以上</string>
|
||||
<string name="settings_notifications_channel_prefs_title">頻道設定</string>
|
||||
<string name="settings_notifications_channel_prefs_summary">請勿打擾(DND)覆寫、聲音等。</string>
|
||||
<string name="settings_notifications_min_priority_summary_x_or_higher">如果優先級為%1$d (%2$s) 或以上,顯示通知</string>
|
||||
<string name="detail_item_download_info_not_downloaded_expires_x">已刪除,連結將於 %1$s 失效</string>
|
||||
<string name="settings_general_dark_mode_summary_dark">暗色模式已啓用。您是吸血鬼嗎?</string>
|
||||
<string name="settings_general_dark_mode_entry_system">跟隨系統默認</string>
|
||||
<string name="settings_general_dark_mode_entry_light">亮色模式</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_original">複製到剪貼板</string>
|
||||
<string name="settings_advanced_export_logs_copied_logs">日誌已複製到剪貼板</string>
|
||||
<string name="detail_settings_appearance_icon_set_summary">設置要在通知中顯示的圖標</string>
|
||||
<string name="detail_item_download_info_deleted_expires_x">已刪除,鏈接將於 %1$s 失效</string>
|
||||
<string name="settings_advanced_broadcast_title">廣播消息</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">只提醒一次</string>
|
||||
<string name="user_dialog_description_add">您可以在此添加用戶。所有該服務器上的主題訂閱都將使用該用戶。</string>
|
||||
<string name="detail_settings_appearance_display_name_title">顯示名</string>
|
||||
<string name="detail_item_download_info_download_failed_expired">下載失敗,鏈接已失效</string>
|
||||
<string name="detail_item_download_info_download_failed_expires_x">下載失敗,鏈接將於 %1$s 失效</string>
|
||||
<string name="settings_general_users_summary">爲訪問受保護的主題添加或刪除用戶</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_one">在主題 %1$s 使用</string>
|
||||
<string name="settings_general_users_prefs_user_used_by_many">在主題 %1$s 使用</string>
|
||||
<string name="settings_general_users_prefs_user_not_used">未在任何主題使用</string>
|
||||
<string name="settings_general_dark_mode_summary_system">跟隨系統默認</string>
|
||||
<string name="settings_general_users_prefs_user_add_summary">爲新服務器創建新用戶</string>
|
||||
<string name="settings_general_dark_mode_summary_light">亮色模式已啓用</string>
|
||||
<string name="settings_backup_restore_restore_title">從文件恢復</string>
|
||||
<string name="settings_backup_restore_restore_summary">導入配置、通知和用戶</string>
|
||||
<string name="settings_advanced_broadcast_summary_enabled">允許應用以廣播的形式收到通知</string>
|
||||
<string name="settings_advanced_broadcast_summary_disabled">禁止應用以廣播的形式收到通知</string>
|
||||
<string name="settings_advanced_record_logs_title">記錄日誌</string>
|
||||
<string name="settings_advanced_record_logs_summary_enabled">正在記錄日誌 (最多 1000 個條目) 到設備 …</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">記錄日誌以便稍後分享調試故障。</string>
|
||||
<string name="settings_advanced_export_logs_title">複製 / 上傳日誌</string>
|
||||
<string name="settings_advanced_export_logs_error_uploading">無法上傳日誌:%1$s</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_text">以下主題/域名已被替換爲水果名稱,您可以放心分享日誌:
|
||||
\n
|
||||
\n%1$s
|
||||
\n
|
||||
\n密碼也已屏蔽,但不在此列出。</string>
|
||||
<string name="settings_advanced_clear_logs_summary">刪除以前的日誌並重新來過</string>
|
||||
<string name="settings_advanced_clear_logs_deleted_toast">日誌已刪除</string>
|
||||
<string name="detail_settings_appearance_display_name_default_summary">%1$s (默認)</string>
|
||||
<string name="user_dialog_title_edit">編輯用戶</string>
|
||||
<string name="user_dialog_base_url_hint">服務 URL</string>
|
||||
<string name="user_dialog_password_hint_edit">密碼 (留空不變)</string>
|
||||
<string name="settings_general_dark_mode_entry_dark">暗色模式</string>
|
||||
<string name="settings_backup_restore_backup_title">備份到文件</string>
|
||||
<string name="settings_backup_restore_backup_summary">導出配置、通知和用戶</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_scrubbed">上傳並複製鏈接 (屏蔽敏感信息)</string>
|
||||
<string name="settings_advanced_export_logs_uploading">正在上傳日誌…</string>
|
||||
<string name="settings_advanced_export_logs_copied_url">日誌已上傳,URL 已複製到剪貼板</string>
|
||||
<string name="settings_advanced_export_logs_scrub_dialog_empty">未找到任何主題/域名。您似乎沒有任何訂閱?</string>
|
||||
<string name="detail_settings_notifications_instant_summary_on">通知會立即發送。需要前臺服務,並消耗更多電池。</string>
|
||||
<string name="detail_settings_notifications_instant_summary_off">通知使用 Firebase 發送。投遞可能會延遲,但消耗的電池更少。</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">自定義通知設置</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">對這個訂閱使用自定義通知</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy 將作爲 UnifiedPush 的一個分發器</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfy 不再會作爲 UnifiedPush 的一個分發器</string>
|
||||
<string name="settings_advanced_export_logs_summary">複製日誌到剪貼板,或上傳到 nopaste.net (由 ntfy 作者所有)。域名和主題可以被屏蔽,但通知本身不會。</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_scrubbed">複製到剪貼板 (屏蔽敏感信息)</string>
|
||||
<string name="settings_advanced_export_logs_entry_upload_original">上傳並複製鏈接</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">使用默認設置(聲音、“勿擾模式”繞過等)</string>
|
||||
<string name="detail_settings_appearance_display_name_message">爲這個訂閱設置一個自定義的顯示名。若留空將使用默認值(%1$s)。</string>
|
||||
<string name="user_dialog_button_delete">刪除用戶</string>
|
||||
<string name="settings_advanced_unifiedpush_title">啓用 UnifiedPush</string>
|
||||
<string name="settings_advanced_clear_logs_title">清除日誌</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">配置通知設置</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">“勿擾模式”繞過、聲音等.</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">持續提醒</string>
|
||||
<string name="detail_settings_appearance_icon_set_title">訂閱圖標</string>
|
||||
<string name="detail_settings_appearance_icon_remove_title">訂閱圖標(點擊可刪除)</string>
|
||||
<string name="detail_settings_appearance_icon_remove_summary">此主題的通知中顯示的圖標</string>
|
||||
<string name="detail_settings_appearance_icon_error_saving">無法保存圖標:%1$s</string>
|
||||
<string name="detail_settings_global_setting_title">使用全局設置</string>
|
||||
<string name="user_dialog_description_edit">您可以編輯該用戶的用戶名和密碼,或刪除該用戶。</string>
|
||||
<string name="channel_subscriber_notification_instant_text_three">已訂閱3個即時推送主題</string>
|
||||
<string name="main_menu_docs_title">閱讀文件</string>
|
||||
<string name="main_banner_websocket_text">建議使用 WebSockets 來連線你的伺服器,此動作可以有效增加電池續航,但需要<a href="https://ntfy.sh/docs/config/#nginxapache2caddy">對proxy進行更多設定</a>。這個動作可以在設定中進行。</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_three">已訂閱3個主題</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_more">已訂閱%1$d個主題</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_one">已訂閱1個主題</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_two">已訂閱2個主題</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_four">已訂閱4個主題</string>
|
||||
<string name="channel_subscriber_notification_noinstant_text_five">已訂閱5個主題</string>
|
||||
<string name="main_item_status_reconnecting">重新連線中 …</string>
|
||||
<string name="main_menu_notifications_disabled_until">通知靜音到%1$s</string>
|
||||
<string name="add_dialog_topic_name_hint">主題名稱(例如:phils_alerts)</string>
|
||||
</resources>
|
|
@ -2,12 +2,11 @@
|
|||
tools:ignore="MissingTranslation">
|
||||
|
||||
<!-- Notification channels -->
|
||||
<string name="channel_notifications_min_name">Min priority</string>
|
||||
<string name="channel_notifications_low_name">Low priority</string>
|
||||
<string name="channel_notifications_default_name">Default priority</string>
|
||||
<string name="channel_notifications_high_name">High priority</string>
|
||||
<string name="channel_notifications_max_name">Max priority</string>
|
||||
<string name="channel_notifications_group_default_name">Default</string>
|
||||
<string name="channel_notifications_min_name">Notifications (min priority)</string>
|
||||
<string name="channel_notifications_low_name">Notifications (low priority)</string>
|
||||
<string name="channel_notifications_default_name">Notifications (default priority)</string>
|
||||
<string name="channel_notifications_high_name">Notifications (high priority)</string>
|
||||
<string name="channel_notifications_max_name">Notifications (max priority)</string>
|
||||
<string name="channel_subscriber_service_name">Subscription Service</string>
|
||||
<string name="channel_subscriber_notification_title">Listening for incoming notifications</string>
|
||||
<string name="channel_subscriber_notification_instant_text">Subscribed to instant delivery topics</string>
|
||||
|
@ -42,7 +41,6 @@
|
|||
<string name="main_menu_report_bug_title">Report a bug</string>
|
||||
<string name="main_menu_docs_title">Read the docs</string>
|
||||
<string name="main_menu_rate_title">Rate the app ⭐</string>
|
||||
<string name="main_menu_donate_title">Donate 💸</string>
|
||||
|
||||
<!-- Main activity: Action mode -->
|
||||
<string name="main_action_mode_menu_unsubscribe">Unsubscribe</string>
|
||||
|
@ -154,7 +152,6 @@
|
|||
<string name="detail_item_cannot_open">Cannot open attachment: %1$s</string>
|
||||
<string name="detail_item_cannot_open_not_found">Cannot open attachment: The file may have been deleted, or no installed app can open the file.</string>
|
||||
<string name="detail_item_cannot_open_url">Cannot open URL: %1$s</string>
|
||||
<string name="detail_item_cannot_open_apk">Apps cannot be installed anymore. Download via browser instead. See issue #531 for details.</string>
|
||||
<string name="detail_item_cannot_save">Cannot save attachment: %1$s</string>
|
||||
<string name="detail_item_cannot_delete">Cannot delete attachment: %1$s</string>
|
||||
<string name="detail_item_download_failed">Could not download attachment: %1$s</string>
|
||||
|
@ -281,9 +278,6 @@
|
|||
<string name="settings_notifications_auto_delete_one_week">After one week</string>
|
||||
<string name="settings_notifications_auto_delete_one_month">After one month</string>
|
||||
<string name="settings_notifications_auto_delete_three_months">After 3 months</string>
|
||||
<string name="settings_notifications_insistent_max_priority_title">Keep alerting for highest priority</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_enabled">Max priority notifications continuously alert until dismissed</string>
|
||||
<string name="settings_notifications_insistent_max_priority_summary_disabled">Max priority notifications only alert once</string>
|
||||
<string name="settings_general_header">General</string>
|
||||
<string name="settings_general_default_base_url_title">Default server</string>
|
||||
<string name="settings_general_default_base_url_message">Enter your server\'s root URL to use your own server as a default when subscribing to new topics and/or sharing to topics.</string>
|
||||
|
@ -320,12 +314,9 @@
|
|||
<string name="settings_advanced_broadcast_title">Broadcast messages</string>
|
||||
<string name="settings_advanced_broadcast_summary_enabled">Apps can receive incoming notifications as broadcasts</string>
|
||||
<string name="settings_advanced_broadcast_summary_disabled">Apps cannot receive notifications as broadcasts</string>
|
||||
<string name="settings_advanced_unifiedpush_title">Enable UnifiedPush</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_enabled">ntfy will act as a UnifiedPush distributor</string>
|
||||
<string name="settings_advanced_unifiedpush_summary_disabled">ntfy will not act as a UnifiedPush distributor</string>
|
||||
<string name="settings_advanced_record_logs_title">Record logs</string>
|
||||
<string name="settings_advanced_record_logs_summary_enabled">Logging (up to 1,000 entries) to device …</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">Turn on logging, so you can share logs later to diagnose issues.</string>
|
||||
<string name="settings_advanced_record_logs_summary_disabled">Turn on logging so you can share logs later to diagnose issues.</string>
|
||||
<string name="settings_advanced_export_logs_title">Copy/upload logs</string>
|
||||
<string name="settings_advanced_export_logs_summary">Copy logs to the clipboard, or upload to nopaste.net (owned by the ntfy author). Hostnames and topics can be censored, notifications will never be.</string>
|
||||
<string name="settings_advanced_export_logs_entry_copy_original">Copy to clipboard</string>
|
||||
|
@ -356,13 +347,8 @@
|
|||
<string name="detail_settings_notifications_instant_title">Instant delivery</string>
|
||||
<string name="detail_settings_notifications_instant_summary_on">Notifications are delivered instantly. Requires a foreground service and consumes more battery.</string>
|
||||
<string name="detail_settings_notifications_instant_summary_off">Notifications are delivered using Firebase. Delivery may be delayed, but consumes less battery.</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_title">Custom notification settings</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_on">Using custom settings for this subscription</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_summary_off">Using default settings (sounds, Do Not Disturb override, etc.)</string>
|
||||
<string name="detail_settings_notifications_open_channels_title">Configure notification settings</string>
|
||||
<string name="detail_settings_notifications_open_channels_summary">Do Not Disturb (DND) override, sounds, etc.</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_enabled">Keep alerting</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_list_item_disabled">Alert only once</string>
|
||||
<string name="detail_settings_notifications_password_title">Password</string>
|
||||
<string name="detail_settings_notifications_password_dialog_summary">Choose a password to use to decrypt incoming end-to-end encrypted notifications. The derived key will be stored locally. If the password is incorrect, messages will not decrypt correctly.</string>
|
||||
<string name="detail_settings_appearance_header">Appearance</string>
|
||||
<string name="detail_settings_appearance_icon_set_title">Subscription icon</string>
|
||||
<string name="detail_settings_appearance_icon_set_summary">Set an icon to be displayed in notifications</string>
|
||||
|
@ -391,10 +377,4 @@
|
|||
<string name="user_dialog_button_cancel">Cancel</string>
|
||||
<string name="user_dialog_button_delete">Delete user</string>
|
||||
<string name="user_dialog_button_save">Save</string>
|
||||
|
||||
<!-- /e/OS integration preferences -->
|
||||
<string name="eos_preference_key_is_enabled" translatable="false">isEnabled</string>
|
||||
<string name="eos_settings_title" translatable="false">UnifiedPush</string>
|
||||
<string name="eos_settings_enable_title" translatable="true">Enable the distributor</string>
|
||||
<string name="eos_settings_enable_description" translatable="true">It allows 3rd party applications to receive UnifiedPush notifications</string>
|
||||
</resources>
|
||||
|
|
|
@ -30,26 +30,4 @@
|
|||
<item name="cornerFamily">rounded</item>
|
||||
<item name="cornerSize">5dp</item>
|
||||
</style>
|
||||
|
||||
<style name="PreferenceTheme" parent="PreferenceTheme.Base"/>
|
||||
<style name="PreferenceTheme.Base" parent="Theme.Material3.DayNight.NoActionBar">
|
||||
<item name="colorPrimary">@color/e_action_bar</item>
|
||||
<item name="colorPrimaryDark">@color/e_action_bar</item>
|
||||
<item name="colorAccent">@color/e_accent</item>
|
||||
<item name="android:textColorPrimary">@color/e_primary_text_color</item>
|
||||
<item name="android:textColorSecondary">@color/e_secondary_text_color</item>
|
||||
<item name="android:textColorPrimaryInverse">@color/e_background</item>
|
||||
<item name="android:windowBackground">@color/e_background</item>
|
||||
<item name="colorControlActivated">@color/e_accent</item>
|
||||
<item name="colorButtonNormal">@color/e_icon_color</item>
|
||||
<item name="colorControlHighlight">@color/e_icon_color</item>
|
||||
<item name="homeAsUpIndicator">@drawable/e_ic_back</item>
|
||||
<item name="android:homeAsUpIndicator">@drawable/e_ic_back</item>
|
||||
<item name="android:popupBackground">@color/e_floating_background</item>
|
||||
<item name="android:divider">@color/e_divider_color</item>
|
||||
<item name="android:navigationBarColor">@android:color/transparent</item>
|
||||
<item name="android:statusBarColor">@color/e_background</item>
|
||||
<item name="switchStyle">@style/ETheme.Switch</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
<!-- Main activity -->
|
||||
<string name="main_menu_report_bug_url" translatable="false">https://github.com/binwiederhier/ntfy/issues</string>
|
||||
<string name="main_menu_docs_url" translatable="false">https://ntfy.sh/docs</string>
|
||||
<string name="main_menu_donate_url" translatable="false">https://github.com/sponsors/binwiederhier</string>
|
||||
|
||||
<!-- Settings constants -->
|
||||
<string name="settings_notifications_muted_until_key" translatable="false">MutedUntil</string>
|
||||
|
@ -18,14 +17,12 @@
|
|||
<string name="settings_notifications_channel_prefs_key" translatable="false">ChannelPrefs</string>
|
||||
<string name="settings_notifications_auto_download_key" translatable="false">AutoDownload</string>
|
||||
<string name="settings_notifications_auto_delete_key" translatable="false">AutoDelete</string>
|
||||
<string name="settings_notifications_insistent_max_priority_key" translatable="false">InsistentMaxPriority</string>
|
||||
<string name="settings_general_default_base_url_key" translatable="false">DefaultBaseURL</string>
|
||||
<string name="settings_general_users_key" translatable="false">ManageUsers</string>
|
||||
<string name="settings_general_dark_mode_key" translatable="false">DarkMode</string>
|
||||
<string name="settings_backup_restore_backup_key" translatable="false">Backup</string>
|
||||
<string name="settings_backup_restore_restore_key" translatable="false">Restore</string>
|
||||
<string name="settings_advanced_broadcast_key" translatable="false">BroadcastEnabled</string>
|
||||
<string name="settings_advanced_unifiedpush_key" translatable="false">UnifiedPushEnabled</string>
|
||||
<string name="settings_advanced_record_logs_key" translatable="false">RecordLogs</string>
|
||||
<string name="settings_advanced_export_logs_key" translatable="false">ExportLogs</string>
|
||||
<string name="settings_advanced_clear_logs_key" translatable="false">ClearLogs</string>
|
||||
|
@ -36,11 +33,9 @@
|
|||
<string name="detail_settings_notifications_header_key" translatable="false">SubscriptionNotifications</string>
|
||||
<string name="detail_settings_notifications_instant_key" translatable="false">SubscriptionInstant</string>
|
||||
<string name="detail_settings_notifications_muted_until_key" translatable="false">SubscriptionMutedUntil</string>
|
||||
<string name="detail_settings_notifications_dedicated_channels_key" translatable="false">SubscriptionDedicatedChannels</string>
|
||||
<string name="detail_settings_notifications_open_channels_key" translatable="false">SubscriptionOpenChannels</string>
|
||||
<string name="detail_settings_notifications_min_priority_key" translatable="false">SubscriptionMinPriority</string>
|
||||
<string name="detail_settings_notifications_auto_delete_key" translatable="false">SubscriptionAutoDelete</string>
|
||||
<string name="detail_settings_notifications_insistent_max_priority_key" translatable="false">SubscriptionInsistentMaxPriority</string>
|
||||
<string name="detail_settings_notifications_password_key" translatable="false">SubscriptionPassword</string>
|
||||
<string name="detail_settings_appearance_header_key" translatable="false">SubscriptionAppearance</string>
|
||||
<string name="detail_settings_appearance_icon_set_key" translatable="false">SubscriptionIconSet</string>
|
||||
<string name="detail_settings_appearance_icon_remove_key" translatable="false">SubscriptionIconRemove</string>
|
||||
|
@ -151,16 +146,6 @@
|
|||
<item>2592000</item>
|
||||
<item>7776000</item>
|
||||
</string-array>
|
||||
<string-array name="detail_settings_notifications_insistent_max_priority_entries">
|
||||
<item>@string/detail_settings_global_setting_title</item>
|
||||
<item>@string/detail_settings_notifications_insistent_max_priority_list_item_enabled</item>
|
||||
<item>@string/detail_settings_notifications_insistent_max_priority_list_item_disabled</item>
|
||||
</string-array>
|
||||
<string-array name="detail_settings_notifications_insistent_max_priority_values">
|
||||
<item>-1</item> <!-- Same as Repository.INSISTENT_MAX_PRIORITY_USE_GLOBAL -->
|
||||
<item>1</item>
|
||||
<item>0</item>
|
||||
</string-array>
|
||||
<string-array name="settings_advanced_connection_protocol_entries">
|
||||
<item>@string/settings_advanced_connection_protocol_entry_jsonhttp</item>
|
||||
<item>@string/settings_advanced_connection_protocol_entry_ws</item>
|
||||
|
|
|
@ -28,22 +28,11 @@
|
|||
app:entryValues="@array/detail_settings_notifications_auto_delete_values"
|
||||
app:defaultValue="-1"
|
||||
app:isPreferenceVisible="false"/> <!-- Same as Repository.AUTO_DELETE_USE_GLOBAL -->
|
||||
<ListPreference
|
||||
app:key="@string/detail_settings_notifications_insistent_max_priority_key"
|
||||
app:title="@string/settings_notifications_insistent_max_priority_title"
|
||||
app:entries="@array/detail_settings_notifications_insistent_max_priority_entries"
|
||||
app:entryValues="@array/detail_settings_notifications_insistent_max_priority_values"
|
||||
app:defaultValue="-1"
|
||||
app:isPreferenceVisible="false"/> <!-- Same as Repository.INSISTENT_MAX_PRIORITY_USE_GLOBAL -->
|
||||
<SwitchPreference
|
||||
app:key="@string/detail_settings_notifications_dedicated_channels_key"
|
||||
app:title="@string/detail_settings_notifications_dedicated_channels_title"
|
||||
app:isPreferenceVisible="false"/>
|
||||
<Preference
|
||||
app:key="@string/detail_settings_notifications_open_channels_key"
|
||||
app:title="@string/detail_settings_notifications_open_channels_title"
|
||||
app:summary="@string/detail_settings_notifications_open_channels_summary"
|
||||
app:isPreferenceVisible="false"/>
|
||||
<EditTextPreference
|
||||
app:key="@string/detail_settings_notifications_password_key"
|
||||
app:title="@string/detail_settings_notifications_password_title"
|
||||
app:dialogLayout="@layout/preference_dialog_editpass_edited"
|
||||
app:dialogMessage="@string/detail_settings_notifications_password_dialog_summary"/>
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory
|
||||
app:key="@string/detail_settings_appearance_header_key"
|
||||
|
|
|
@ -25,10 +25,6 @@
|
|||
app:entries="@array/settings_notifications_auto_delete_entries"
|
||||
app:entryValues="@array/settings_notifications_auto_delete_values"
|
||||
app:defaultValue="2592000"/>
|
||||
<SwitchPreference
|
||||
app:key="@string/settings_notifications_insistent_max_priority_key"
|
||||
app:title="@string/settings_notifications_insistent_max_priority_title"
|
||||
app:defaultValue="false"/>
|
||||
<Preference
|
||||
app:key="@string/settings_notifications_channel_prefs_key"
|
||||
app:title="@string/settings_notifications_channel_prefs_title"
|
||||
|
@ -76,10 +72,6 @@
|
|||
app:key="@string/settings_advanced_broadcast_key"
|
||||
app:title="@string/settings_advanced_broadcast_title"
|
||||
app:enabled="true"/>
|
||||
<SwitchPreference
|
||||
app:key="@string/settings_advanced_unifiedpush_key"
|
||||
app:title="@string/settings_advanced_unifiedpush_title"
|
||||
app:enabled="true"/>
|
||||
<SwitchPreference
|
||||
app:key="@string/settings_advanced_record_logs_key"
|
||||
app:title="@string/settings_advanced_record_logs_title"
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
<PreferenceScreen
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
app:icon="@drawable/ic_notification"
|
||||
app:key="@string/eos_preference_key_is_enabled"
|
||||
app:defaultValue="false"
|
||||
app:title="@string/eos_settings_enable_title"
|
||||
app:summary="@string/eos_settings_enable_description" />
|
||||
|
||||
</PreferenceScreen>
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue