mirror of
https://github.com/ArcaneChat/android.git
synced 2026-07-03 14:05:24 +02:00
Compare commits
166 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 052ada221e | |||
| 1d5e4cf2a9 | |||
| c46aef3ea0 | |||
| d30e141693 | |||
| 305940396e | |||
| 2ab567a9d3 | |||
| a9c488ff03 | |||
| 8817b50c95 | |||
| 84c3710a35 | |||
| be7be9bba4 | |||
| b50ae284fb | |||
| 97716d5c26 | |||
| e77253c843 | |||
| 6aed8d003f | |||
| 0083e60c49 | |||
| 0fc79fd845 | |||
| a7c3bc7ac5 | |||
| 83b16e5f4b | |||
| ee17c6d75e | |||
| c0525ac69c | |||
| e9d2a39098 | |||
| 4d6fd16767 | |||
| b398870823 | |||
| e68c50d614 | |||
| f6a27718a2 | |||
| f136fa3e3a | |||
| 8e55a3dbf3 | |||
| 923227a0e8 | |||
| 14ecafe0e2 | |||
| b93f8323ab | |||
| 77f43cde9a | |||
| e4d018393d | |||
| 9a816090de | |||
| 4b04aa65be | |||
| 489bb55788 | |||
| 9d244611bc | |||
| 3533916149 | |||
| 46bc3e7f72 | |||
| ed0f0107e3 | |||
| a855d7043a | |||
| 66fd795763 | |||
| 05da43484f | |||
| a58de2278b | |||
| 6743df23e9 | |||
| 35ec0d05e2 | |||
| 6ead7207ec | |||
| 0d5223036d | |||
| 640fc433b8 | |||
| 35d814c3f6 | |||
| f8b9d2b0d9 | |||
| 3390b865e0 | |||
| 883486da9c | |||
| d048203f45 | |||
| f9d70d1196 | |||
| 4413b7b4fb | |||
| 7a4f263a62 | |||
| 1a360d5282 | |||
| dc785fc116 | |||
| 009593f7cc | |||
| 884be3a93e | |||
| 9a25328787 | |||
| 2d8ec490b1 | |||
| 3b19ca99e1 | |||
| f751a48568 | |||
| 4549989a63 | |||
| 19e2c4e051 | |||
| 6f5e90be53 | |||
| 34fa0620ab | |||
| fe37af1a3f | |||
| 3459802d67 | |||
| b8bf847941 | |||
| 5b6024584a | |||
| 4833a44542 | |||
| eb93e2bb7e | |||
| 291700dfc7 | |||
| 7a4913b394 | |||
| 0dae71f4b7 | |||
| 08e4229533 | |||
| 101a31628d | |||
| 2a2ce883b4 | |||
| 5a0e26bdb5 | |||
| 0c9277dfd0 | |||
| 37886cf296 | |||
| df5ba2eced | |||
| 3c2ddb96b3 | |||
| e2a825dfb2 | |||
| 8d49c7e595 | |||
| 966d5dac24 | |||
| 7f684f4d2e | |||
| 1510f7f3a8 | |||
| 6916becf7f | |||
| ad5b496f5c | |||
| e647401db4 | |||
| 3113f9c3ab | |||
| a1e47865c5 | |||
| 3a5f9b3fed | |||
| 5ffbc19d03 | |||
| d9db4b818a | |||
| 693efdbd0f | |||
| 399b783437 | |||
| 4bc574dfbe | |||
| 294af0981d | |||
| e8c7014993 | |||
| 0edc8303c1 | |||
| 8c89c3e225 | |||
| a93c8ab055 | |||
| c5cb79d116 | |||
| b3c50b9571 | |||
| 41579de502 | |||
| e6f735b8bc | |||
| 70b6f2cdfa | |||
| c1e716d6a3 | |||
| dde59b4673 | |||
| 9d77920adf | |||
| 6f50ee0cfb | |||
| 4c86d6d49e | |||
| 963327dd64 | |||
| 5cba1ccd98 | |||
| de8e6b6852 | |||
| 811089f3b3 | |||
| e045a09d36 | |||
| a3a6919b08 | |||
| cbee839a43 | |||
| efdd92b6a1 | |||
| 75296e189a | |||
| 708a68119e | |||
| 1d5ab98892 | |||
| 07753e211d | |||
| 8135d96300 | |||
| d151e825da | |||
| d5289cc3df | |||
| af40a8b57e | |||
| 529139099e | |||
| b4aa18abae | |||
| a7cee63d1c | |||
| eda735925a | |||
| 46650c8cc3 | |||
| fbab156d22 | |||
| 539cb670f1 | |||
| 2a6aba110b | |||
| 0351a1e974 | |||
| d48ab128a0 | |||
| ef67585529 | |||
| 953e7c6da0 | |||
| ab5a9c9d60 | |||
| af91cf7413 | |||
| 6a618986d0 | |||
| 9eefcacbc1 | |||
| e245e29058 | |||
| 7d879f8d1f | |||
| f7963a56e9 | |||
| 0a73877c25 | |||
| 1b57880be3 | |||
| f54144e7e8 | |||
| b735759bd0 | |||
| a7199ecedf | |||
| 2cb529be32 | |||
| 235038027b | |||
| e8eb036594 | |||
| d531eb8b47 | |||
| a88a619099 | |||
| 00bc429f20 | |||
| 3f25d002e4 | |||
| 74c6f20c3e | |||
| 8728a0a39b | |||
| dcf5cf7f54 |
@@ -1 +1 @@
|
||||
blank_issues_enabled: true
|
||||
blank_issues_enabled: false
|
||||
|
||||
@@ -51,7 +51,7 @@ jobs:
|
||||
run: ./gradlew --no-daemon -PABI_FILTER=armeabi-v7a assembleFossDebug
|
||||
|
||||
- name: Upload APK
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: app-preview.apk
|
||||
path: 'build/outputs/apk/foss/debug/*.apk'
|
||||
|
||||
@@ -49,11 +49,12 @@ jobs:
|
||||
- name: Build APK
|
||||
run: |
|
||||
mkdir -p ~/.gradle
|
||||
echo -n ${{ secrets.SIGNING_KEY }} | base64 -d >> ~/app.keystore
|
||||
echo "DC_RELEASE_STORE_FILE=$HOME/app.keystore" >> ~/.gradle/gradle.properties
|
||||
echo "DC_RELEASE_STORE_PASSWORD=${{ secrets.KEY_STORE_PASSWORD }}" >> ~/.gradle/gradle.properties
|
||||
echo "DC_RELEASE_KEY_ALIAS=${{ secrets.ALIAS }}" >> ~/.gradle/gradle.properties
|
||||
echo "DC_RELEASE_KEY_PASSWORD=${{ secrets.KEY_PASSWORD }}" >> ~/.gradle/gradle.properties
|
||||
echo -n ${{ secrets.KEYSTORE_FILE }} | base64 -d >> ~/keystore.jks
|
||||
echo "DC_RELEASE_STORE_FILE=$HOME/keystore.jks" >> ~/.gradle/gradle.properties
|
||||
echo "DC_RELEASE_STORE_PASSWORD=${{ secrets.KEYSTORE_PASSWORD }}" >> ~/.gradle/gradle.properties
|
||||
echo "DC_RELEASE_KEY_ALIAS_FDROID=${{ secrets.ALIAS_FDROID }}" >> ~/.gradle/gradle.properties
|
||||
echo "DC_RELEASE_KEY_ALIAS_GPLAY=${{ secrets.ALIAS_GPLAY }}" >> ~/.gradle/gradle.properties
|
||||
echo "DC_RELEASE_KEY_PASSWORD=${{ secrets.KEYSTORE_PASSWORD }}" >> ~/.gradle/gradle.properties
|
||||
./gradlew assembleFossRelease
|
||||
rm build/outputs/apk/foss/release/*universal*
|
||||
./gradlew assembleGplayRelease
|
||||
|
||||
+44
-4
@@ -1,7 +1,44 @@
|
||||
# ArcaneChat Android Changelog
|
||||
|
||||
## v1.49.0
|
||||
2024-11
|
||||
## v1.50.5
|
||||
2025-01
|
||||
|
||||
* fix push-notifications handling for certain devices where it was not working correctly
|
||||
* update translations
|
||||
* using core 1.153.0
|
||||
|
||||
## v1.50.4
|
||||
2025-01
|
||||
|
||||
* properly send as animated stickers GIF files selected from keyboard
|
||||
* improve emoji picker in landscape mode and when changing from landscape to portrait
|
||||
* avoid crash when receiving push notifications if the user restricted the app from working in background
|
||||
* improve UI when attaching a file or image to easily recognize it is attached but not sent yet
|
||||
* avoid slow loading of in-chat apps in some devices when quickly re-opening an app after closing it
|
||||
* allow to select multiple images at once in the media picker via "Gallery" button
|
||||
* mark holiday notice messages as bot-generated
|
||||
* don't mark contacts as bot when receiving location-only and sync messages
|
||||
* prefer to encrypt even if peers have their preference to "no preference"
|
||||
* start ephemeral messages timers when the chat is archived or noticed
|
||||
* several bug fixes and updated translations
|
||||
* update to core 1.153.0
|
||||
|
||||
## v1.50.3
|
||||
2024-12
|
||||
|
||||
* Add in-chat apps picker to attachments options
|
||||
* Notify replies and reactions to your messages in muted chats (can be disabled in settings)
|
||||
* Cache HTTP GET requests (ex. when loading images from HTML messages)
|
||||
* update to core 1.152.0
|
||||
|
||||
## v1.50.2
|
||||
2024-12
|
||||
|
||||
* Encrypt notification tokens
|
||||
* update to core 1.151.5
|
||||
|
||||
## v1.50.0
|
||||
2024-12
|
||||
|
||||
* New emoji picker with support for more emojis
|
||||
* Webxdc apps can now trigger notifications
|
||||
@@ -16,7 +53,10 @@
|
||||
* Removed internal font scaling setting in favor of the better system settings
|
||||
* Use privacy-preserving webxdc addresses
|
||||
* Use Rustls for connections with strict TLS
|
||||
* fix: Trim whitespace from scanned QR codes.
|
||||
* QR codes for adding contacts and joining groups provide help when opened in a normal browser
|
||||
* Mark Saved Messages chat as protected
|
||||
* Allow the user to replace maps integration
|
||||
* fix: Trim whitespace from scanned QR codes
|
||||
* fix quotes: Line-before-quote may be up to 120 character long instead of 80
|
||||
* fix: Prevent accidental wrong-password-notifications
|
||||
* fix: Remove footers from "Show Full Message..."
|
||||
@@ -26,7 +66,7 @@
|
||||
* fix: Do not percent-encode dot when passing to autoconfig server (so, fix handling of some servers)
|
||||
* fix displaynames not being updated when intially scanned by a QR code
|
||||
* several bug fixes
|
||||
* update to core 1.151.2
|
||||
* update to core 1.151.3
|
||||
|
||||
## v1.48.3
|
||||
2024-10
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
## ArcaneChat Android Client
|
||||
|
||||
A [Delta Chat](https://delta.chat/) client for Android.
|
||||
A [Delta Chat](https://delta.chat/) client for Android. Learn more at: https://arcanechat.me
|
||||
|
||||
[<img src="store/get-it-on-fdroid.png" alt="Get it on F-Droid" height="48">](https://f-droid.org/packages/chat.delta.lite)
|
||||
[<img src="store/get-it-on-IzzyOnDroid.png" alt="Get it on IzzyOnDroid" height="48">](https://apt.izzysoft.de/fdroid/index/apk/chat.delta.lite)
|
||||
|
||||
+34
-23
@@ -1,5 +1,5 @@
|
||||
plugins {
|
||||
id 'com.android.application' version '8.1.4'
|
||||
id 'com.android.application' version '8.5.2'
|
||||
id 'com.google.gms.google-services' version '4.4.1'
|
||||
}
|
||||
|
||||
@@ -33,8 +33,8 @@ android {
|
||||
useLibrary 'org.apache.http.legacy'
|
||||
|
||||
defaultConfig {
|
||||
versionCode 30000698
|
||||
versionName "1.49.0"
|
||||
versionCode 30000705
|
||||
versionName "1.50.9"
|
||||
|
||||
applicationId "chat.delta.lite"
|
||||
multiDexEnabled true
|
||||
@@ -87,15 +87,37 @@ android {
|
||||
storeFile file(DC_DEBUG_STORE_FILE )
|
||||
}
|
||||
}
|
||||
release {
|
||||
releaseFdroid {
|
||||
// can be defined at `~/.gradle/gradle.properties` or at "Build/Generate signed APK"
|
||||
if(project.hasProperty("DC_RELEASE_STORE_FILE")) {
|
||||
storeFile file(DC_RELEASE_STORE_FILE)
|
||||
storePassword DC_RELEASE_STORE_PASSWORD
|
||||
keyAlias DC_RELEASE_KEY_ALIAS
|
||||
keyAlias DC_RELEASE_KEY_ALIAS_FDROID
|
||||
keyPassword DC_RELEASE_KEY_PASSWORD
|
||||
}
|
||||
}
|
||||
releaseGplay {
|
||||
// can be defined at `~/.gradle/gradle.properties` or at "Build/Generate signed APK"
|
||||
if(project.hasProperty("DC_RELEASE_STORE_FILE")) {
|
||||
storeFile file(DC_RELEASE_STORE_FILE)
|
||||
storePassword DC_RELEASE_STORE_PASSWORD
|
||||
keyAlias DC_RELEASE_KEY_ALIAS_GPLAY
|
||||
keyPassword DC_RELEASE_KEY_PASSWORD
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
productFlavors {
|
||||
foss {
|
||||
dimension "none"
|
||||
buildConfigField "boolean", "USE_PLAY_SERVICES", "false"
|
||||
}
|
||||
gplay {
|
||||
dimension "none"
|
||||
apply plugin: "com.google.gms.google-services"
|
||||
buildConfigField "boolean", "USE_PLAY_SERVICES", "true"
|
||||
applicationId "com.github.arcanechat"
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
@@ -114,23 +136,12 @@ android {
|
||||
// nb: it is highly recommended to use the same settings in debug+release -
|
||||
// otherwise problems might be noticed delayed only
|
||||
minifyEnabled true
|
||||
signingConfig signingConfigs.release
|
||||
productFlavors.foss.signingConfig signingConfigs.releaseFdroid
|
||||
productFlavors.gplay.signingConfig signingConfigs.releaseGplay
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
|
||||
productFlavors {
|
||||
foss {
|
||||
dimension "none"
|
||||
buildConfigField "boolean", "USE_PLAY_SERVICES", "false"
|
||||
}
|
||||
gplay {
|
||||
dimension "none"
|
||||
apply plugin: "com.google.gms.google-services"
|
||||
buildConfigField "boolean", "USE_PLAY_SERVICES", "true"
|
||||
}
|
||||
}
|
||||
|
||||
if(!project.hasProperty("ABI_FILTER")) {
|
||||
splits {
|
||||
abi {
|
||||
@@ -190,7 +201,7 @@ dependencies {
|
||||
implementation 'com.airbnb.android:lottie:4.2.2' // Lottie animations support.
|
||||
|
||||
implementation 'androidx.sharetarget:sharetarget:1.2.0'
|
||||
implementation 'androidx.webkit:webkit:1.11.0'
|
||||
implementation 'androidx.webkit:webkit:1.12.1'
|
||||
implementation 'androidx.multidex:multidex:2.0.1'
|
||||
implementation 'androidx.appcompat:appcompat:1.7.0'
|
||||
implementation 'com.google.android.material:material:1.12.0'
|
||||
@@ -210,7 +221,7 @@ dependencies {
|
||||
implementation 'com.google.guava:guava:31.1-android'
|
||||
implementation 'com.google.android.exoplayer:exoplayer-core:2.19.1' // plays video and audio
|
||||
implementation 'com.google.android.exoplayer:exoplayer-ui:2.19.1'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.2.0'
|
||||
implementation 'com.google.zxing:core:3.3.0' // fixed version to support SDK<24
|
||||
implementation ('com.journeyapps:zxing-android-embedded:4.3.0') { transitive = false } // QR Code scanner
|
||||
implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.1' // used as JSON library
|
||||
@@ -218,11 +229,11 @@ dependencies {
|
||||
implementation "me.leolin:ShortcutBadger:1.1.16" // display messagecount on the home screen icon.
|
||||
implementation 'com.jpardogo.materialtabstrip:library:1.0.9' // used in the emoji selector for the tab selection.
|
||||
implementation 'com.github.chrisbanes:PhotoView:2.1.3' // does the zooming on photos / media
|
||||
implementation 'com.github.penfeizhou.android.animation:glide-plugin:2.25.0' // APNG & animated webp support.
|
||||
implementation 'com.github.penfeizhou.android.animation:glide-plugin:3.0.2' // APNG & animated webp support.
|
||||
implementation 'com.caverock:androidsvg-aar:1.4' // SVG support.
|
||||
implementation 'com.github.bumptech.glide:glide:4.12.0'
|
||||
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
|
||||
annotationProcessor 'androidx.annotation:annotation:1.8.2'
|
||||
annotationProcessor 'androidx.annotation:annotation:1.9.1'
|
||||
implementation 'com.makeramen:roundedimageview:2.1.0' // crops the avatars to circles
|
||||
implementation 'com.pnikosis:materialish-progress:1.5' // used only in the "Progress Wheel" in Share Activity.
|
||||
implementation 'com.soundcloud.android:android-crop:1.0.1@aar' // used for profile and group avatar selection in Android SDK<19
|
||||
@@ -240,7 +251,7 @@ dependencies {
|
||||
// <https://github.com/cketti/SafeContentResolver>
|
||||
implementation 'de.cketti.safecontentresolver:safe-content-resolver-v14:1.0.0'
|
||||
|
||||
gplayImplementation('com.google.firebase:firebase-messaging:24.0.0') { // for PUSH notifications
|
||||
gplayImplementation('com.google.firebase:firebase-messaging:24.1.0') { // for PUSH notifications
|
||||
exclude group: 'com.google.firebase', module: 'firebase-core'
|
||||
exclude group: 'com.google.firebase', module: 'firebase-analytics'
|
||||
exclude group: 'com.google.firebase', module: 'firebase-measurement-connector'
|
||||
|
||||
@@ -17,19 +17,21 @@ ArcaneChat is a Delta Chat client and was created with a focus on usability, goo
|
||||
<b>Main differences with official Delta Chat client:</b>
|
||||
|
||||
<ul>
|
||||
<li>Basic markdown support (bold, italic, strike, etc.)</li>
|
||||
<li>Support for some markdown styles in text messages (bold, italic, strike, etc.)</li>
|
||||
<li>Support for displaying Telegram's animated stickers (.tgs files)</li>
|
||||
<li>Support for SVG images previews</li>
|
||||
<li>Multiple color themes/skins</li>
|
||||
<li>It is possible to disable accounts to completely disconnect them to save data/bandwidth</li>
|
||||
<li>It is possible to disable profiles to completely disconnect them saving data/bandwidth</li>
|
||||
<li>You can easily see the connection status of all your profiles in the profile switcher</li>
|
||||
<li>A videochat instance is set by default</li>
|
||||
<li>Replies to your messages in muted groups trigger notifications</li>
|
||||
<li>Location streaming feature enabled by default and extra option to share location for 12 hours</li>
|
||||
<li>Clicking on a message with a POI location, will open the POI on the map</li>
|
||||
<li>Last-seen status of contacts is shown in your contact list, like in WhatsApp, Telegram, etc.</li>
|
||||
<li>Videos are played in loop, useful for short GIF videos</li>
|
||||
<li>Verified icon is shown in the chat list for the "Device Messages" chat</li>
|
||||
<li>Voice messages have more aggressive compression in "worse quality" mode to save data plan</li>
|
||||
<li>Automatic download of messages limited to 640KB by default</li>
|
||||
<li>Account's display name is always shown in the app's title bar instead of the name of the app</li>
|
||||
<li>Profile's display name is always shown in the app's title bar instead of the name of the app</li>
|
||||
<li>Your avatar is visible to other users in Mailing Lists</li>
|
||||
<li>Can be selected as app to open .xdc files</li>
|
||||
<li>For mini-apps developers: there are some extra features in the WebXDC API, check https://github.com/ArcaneChat/android/#webxdc</li>
|
||||
|
||||
Generated
+26
-60
@@ -3,15 +3,15 @@
|
||||
"android": {
|
||||
"inputs": {
|
||||
"devshell": "devshell",
|
||||
"flake-utils": "flake-utils_2",
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1720988215,
|
||||
"narHash": "sha256-nQ0Zx0vAWJo0IOGNFjCOdIkDSgOpMa//GalR8tbTl3A=",
|
||||
"lastModified": 1733948466,
|
||||
"narHash": "sha256-o/uq/tU458Ykudi8Zk3sRga5iazkuSczt9wDOCUDOSU=",
|
||||
"owner": "tadfisher",
|
||||
"repo": "android-nixpkgs",
|
||||
"rev": "5a052c62cdb51b210bc0717177d5bd014cba3df1",
|
||||
"rev": "0bf99ffaea6a7c0948ae10cf2e40c2905e4e4d6b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -22,18 +22,17 @@
|
||||
},
|
||||
"devshell": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": [
|
||||
"android",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1717408969,
|
||||
"narHash": "sha256-Q0OEFqe35fZbbRPPRdrjTUUChKVhhWXz3T9ZSKmaoVY=",
|
||||
"lastModified": 1728330715,
|
||||
"narHash": "sha256-xRJ2nPOXb//u1jaBnDP56M7v5ldavjbtR6lfGqSvcKg=",
|
||||
"owner": "numtide",
|
||||
"repo": "devshell",
|
||||
"rev": "1ebbe68d57457c8cae98145410b164b5477761f4",
|
||||
"rev": "dd6b80932022cea34a019e2bb32f6fa9e494dfef",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -47,11 +46,11 @@
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1701680307,
|
||||
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -65,29 +64,11 @@
|
||||
"systems": "systems_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1710146030,
|
||||
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils_3": {
|
||||
"inputs": {
|
||||
"systems": "systems_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1710146030,
|
||||
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -98,11 +79,11 @@
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1720768451,
|
||||
"narHash": "sha256-EYekUHJE2gxeo2pM/zM9Wlqw1Uw2XTJXOSAO79ksc4Y=",
|
||||
"lastModified": 1733759999,
|
||||
"narHash": "sha256-463SNPWmz46iLzJKRzO3Q2b0Aurff3U1n0nYItxq7jU=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "7e7c39ea35c5cdd002cd4588b03a3fb9ece6fad9",
|
||||
"rev": "a73246e2eef4c6ed172979932bc80e1404ba2d56",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -114,11 +95,11 @@
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1723221148,
|
||||
"narHash": "sha256-7pjpeQlZUNQ4eeVntytU3jkw9dFK3k1Htgk2iuXjaD8=",
|
||||
"lastModified": 1733749988,
|
||||
"narHash": "sha256-+5qdtgXceqhK5ZR1YbP1fAUsweBIrhL38726oIEAtDs=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "154bcb95ad51bc257c2ce4043a725de6ca700ef6",
|
||||
"rev": "bc27f0fde01ce4e1bfec1ab122d72b7380278e68",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -130,11 +111,11 @@
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1718428119,
|
||||
"narHash": "sha256-WdWDpNaq6u1IPtxtYHHWpl5BmabtpmLnMAx0RdJ/vo8=",
|
||||
"lastModified": 1728538411,
|
||||
"narHash": "sha256-f0SBJz1eZ2yOuKUr5CA9BHULGXVSn6miBuUWdTyhUhU=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "e6cea36f83499eb4e9cd184c8a8e823296b50ad5",
|
||||
"rev": "b69de56fac8c2b6f8fd27f2eca01dcda8e0a4221",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -147,7 +128,7 @@
|
||||
"root": {
|
||||
"inputs": {
|
||||
"android": "android",
|
||||
"flake-utils": "flake-utils_3",
|
||||
"flake-utils": "flake-utils_2",
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"rust-overlay": "rust-overlay"
|
||||
}
|
||||
@@ -157,11 +138,11 @@
|
||||
"nixpkgs": "nixpkgs_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1723429325,
|
||||
"narHash": "sha256-4x/32xTCd+xCwFoI/kKSiCr5LQA2ZlyTRYXKEni5HR8=",
|
||||
"lastModified": 1733970833,
|
||||
"narHash": "sha256-sPEKtSaZk2CtfF9cdhtbY93S6qGq+d2PKI1fcoDfDaI=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "65e3dc0fe079fe8df087cd38f1fe6836a0373aad",
|
||||
"rev": "f7f4c59ccdf1bec3f1547d27398e9589aa94e3e8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -199,21 +180,6 @@
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems_3": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
with sdkPkgs; [
|
||||
build-tools-33-0-1
|
||||
cmdline-tools-latest
|
||||
ndk-bundle
|
||||
platform-tools
|
||||
platforms-android-34
|
||||
ndk-27-0-11902837
|
||||
|
||||
@@ -0,0 +1,205 @@
|
||||
# Privacy Policy ArcaneChat Apps
|
||||
|
||||
**This is the privacy policy for the ArcaneChat (Delta Chat client) apps.**
|
||||
|
||||
## Summary
|
||||
|
||||
ArcaneChat is an e-mail app that follows a strict privacy-by-design approach. All communication data remains on the end devices or on the e-mail servers selected by the user.
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Requirement</th>
|
||||
<th>Implementation</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Confidentiality</td>
|
||||
<td>
|
||||
<b>End-to-end encryption</b> by implementing <a href="https://autocrypt.org">Autocrypt</a> and <a href="https://securejoin.delta.chat/en/latest/new.html">Verified groups</a>. User-friendly end-to-end encryption means that the requirements of the GDPR are already implemented at the technical level, <b>Privacy by Design</b>.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Data minimization</td>
|
||||
<td><b>No upload</b> of contact lists from your phone.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Data avoidance</td>
|
||||
<td><b>No ArcaneChat servers</b>, no processing of personal data. All data remains with your e-mail provider.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Legal basis</td>
|
||||
<td>
|
||||
There is no need to obtain consent for address book matching, <a href="https://gdpr-info.eu/art-7-gdpr/">Art.7 GDPR</a>, as no address book data is transferred. Therefore, <b>no additional legal basis</b> is required.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Data to third parties</td>
|
||||
<td>We only receive the <b>token for the push notification</b> and forward it to the provider of your operating system. If you don't want to receive push notifications, we won't forward a token.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Data from third parties</td>
|
||||
<td>
|
||||
Easy implementation in companies: ArcaneChat does not process personal data on behalf of the controller and therefore <b>does not require any instruction or data processing agreement</b>. Easy connection with the own corporate e-mail server.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
DPIA
|
||||
</td>
|
||||
<td>
|
||||
No <b>data protection impact assessment</b> needs to be carried out for ArcaneChat <a href="https://gdpr-info.eu/art-35-gdpr/">Art.35 GDPR</a>, as no specific additional data is processed beyond the e-mail messenger process.
|
||||
|
||||
The risk to the rights and freedoms of natural persons is limited to the internal company data processing of the e-mail communication and that of the e-mail providers.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
Documentation
|
||||
</td>
|
||||
<td>
|
||||
Inclusion of the measures implemented by ArcaneChat in the <b>record of processing activities</b> may have a positive impact on possible evidence, <a href="https://gdpr-info.eu/art-30-gdpr/">Art.30 GDPR</a> as well as certification processes, <a href="https://gdpr-info.eu/art-25-gdpr/">Art.25 (4) GDPR</a>,<a href="https://gdpr-info.eu/art-42-gdpr/">Art.42 GDPR</a>.
|
||||
|
||||
The <b>documentation of processing activities</b> related to Messenger communication is omitted and shifts only to the record of processing activities of your e-mail provider, <a href="https://gdpr-info.eu/art-30-gdpr/">Art.30(2) GDPR</a>.
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## Detailed data protection information
|
||||
|
||||
### 1. Name and contact information of the data controller
|
||||
|
||||
Responsible for the processing of your personal data is
|
||||
```
|
||||
Asiel Diaz Benitez
|
||||
Reichsgrafen Str. 20
|
||||
79102 Freiburg
|
||||
Germany
|
||||
```
|
||||
E-mail: [adbenitez@duck.com](mailto:adbenitez@duck.com)
|
||||
|
||||
### 2. Processing when using the ArcaneChat e-mail messenger
|
||||
|
||||
All data is stored locally on your device or with your e-mail provider. Neither we nor ArcaneChat developers have any possibility to access the end user's data, as all communication and data processing takes place on the end user's device without ArcaneChat servers being involved. Only for the optional Push Notification (see 2.2) the Push Notification Token is processed by Delta Chat servers without them having any knowledge about the messages themselves, not even in encrypted form.
|
||||
|
||||
#### 2.1 Sign up with your e-mail provider
|
||||
|
||||
ArcaneChat communication works through your e-mail account. In order to establish the connection, the app needs the access data. These are only stored locally on your end device:
|
||||
|
||||
- e-mail address
|
||||
- your password
|
||||
|
||||
The legal basis for the processing is [Art.6 (1) lit.b GDPR](https://gdpr-info.eu/art-6-gdpr/), as you have a usage contract with us by using our services.
|
||||
|
||||
Security procedures are in place to protect the confidentiality of the data:
|
||||
Only the bare data needed to fulfil the user request of login are stored,
|
||||
encryption takes place as well as local sandboxing,
|
||||
see 2.3 for further details.
|
||||
|
||||
#### 2.2 Heartbeat push notification
|
||||
|
||||
Push notifications can be sent to the user's phone at regular intervals to enable receipt of messages while the ArcaneChat app is not currently active. Current messages can then be retrieved on the end device. The token is only created if the user wants reliable receipt of messages even when the app is not active.
|
||||
|
||||
In order to use push notifications, a unique identifier or token (Push Notification Token) is created after the app is downloaded and installed. This token allows Delta Chat servers to send notifications to the user's device. The token is generated and provided by the provider. The token is then stored on our systems and sent to the device at regular intervals to cause the app to retrieve new messages from the e-mail provider. Our systems have no knowledge of whether a message arrives or who may have sent a message.
|
||||
|
||||
The aforementioned data will only be processed with your consent, in accordance with [Art.6 (1) lit.a GDPR](https://gdpr-info.eu/art-6-gdpr/).
|
||||
|
||||
#### 2.3 Data in the app
|
||||
|
||||
The ArcaneChat app works in a data-saving way. All relevant data is stored exclusively on the respective end devices:
|
||||
|
||||
```
|
||||
- chat histories (text messages, voice messages, media, ...).
|
||||
- contacts
|
||||
- settings
|
||||
```
|
||||
ArcaneChat servers have no access to this data, not even in encrypted form, as data processing takes place only on the end devices.
|
||||
|
||||
#### 2.4 App permissions
|
||||
|
||||
Within the app, you can enter, manage, and edit various information, tasks, and activities. The app also requires the following permissions:
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Permission</th>
|
||||
<th>Reason</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Internet access</td>
|
||||
<td>This is needed to send the messages to the communication partner. </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Camera access</td>
|
||||
<td>
|
||||
This is needed for you to take photos and send them via the app. In addition, the camera access allows you to scan QR codes.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Microphone access (optional)</td>
|
||||
<td>
|
||||
This permission allows you to send voice messages.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Location access (optional)</td>
|
||||
<td>
|
||||
This is needed if you want to share your location with a communication partner.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Background location access (optional)</td>
|
||||
<td>
|
||||
This will be needed if you want to share your location over a certain period of time.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Contact access (optional)</td>
|
||||
<td>
|
||||
This allows you to load and save contacts from your phone book into the app. The contact data is stored locally in the app and not forwarded and stored on ArcaneChat server.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
Storage (optional)
|
||||
</td>
|
||||
<td>You can save images and files from the app to your device.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
The processing and use of the above permissions are performed to provide the service. The internet access is necessary for the use, therefore the legal basis of the processing is [Art.6 (1) lit.a GDPR](https://gdpr-info.eu/art-6-gdpr/), as you have a usage contract with us by using our services.
|
||||
|
||||
The optional permissions only take place based on your consent according to [Art.6 (1) lit.a GDPR](https://gdpr-info.eu/art-6-gdpr/) and can also be reduced to individual services, e.g. only internet usage to send messages without pictures or location data. ArcaneChat does not receive any access to this data.
|
||||
|
||||
### 3. Platform dependent processing
|
||||
|
||||
Certain information is already processed automatically as soon as you use the app. We have listed below which personal data is processed exactly:
|
||||
|
||||
When you download the app, certain required information is transmitted to the app store you use ( e.g. Google Play or Apple App Store), in particular the username, the email address, the customer number of your account, the time of the download, payment information as well as the individual device identification number may be processed. The processing of this data is carried out exclusively by the respective app store and is beyond our control.
|
||||
|
||||
For the rest, we refer to the data protection policies of the respective app store providers or responsible parties of the operating systems. We do not collect and/or process any other data.
|
||||
|
||||
Your personal data will not be transferred to third parties for purposes other than those listed below.
|
||||
|
||||
# 4. Rights of the data subject
|
||||
|
||||
As a data subject of a processing of personal data, you have the right to
|
||||
|
||||
1. request information about your personal data processed by us in accordance with [Art.15 GDPR](https://gdpr-info.eu/art-15-gdpr/). In particular, you can request information about the processing purposes, the category of personal data, the categories of recipients to whom your data have been or will be disclosed, the planned storage period, the existence of a right to rectification, erasure, restriction of processing or objection, the existence of a right of complaint, the origin of your data if it has not been collected by us, as well as the existence of automated decision-making including profiling and, if applicable, meaningful information about its details;
|
||||
2. in accordance with [Art.16 GDPR](https://gdpr-info.eu/art-16-gdpr/) of the GDPR, immediately request the correction of inaccurate or incomplete personal data stored by us;
|
||||
3. pursuant to [Art.17 GDPR](https://gdpr-info.eu/art-17-gdpr/) of the GDPR, to request the erasure of your personal data stored by us, unless the processing is necessary for the exercise of the right to freedom of expression and information, for compliance with a legal obligation, for reasons of public interest, or for the establishment, exercise or defence of legal claims;
|
||||
4. pursuant to [Art.18 GDPR](https://gdpr-info.eu/art-18-gdpr/), to request the restriction of the processing of your personal data, insofar as the accuracy of the data is disputed by you, the processing is unlawful, but you object to its erasure and we no longer require the data, but you need it for the assertion, exercise or defence of legal claims or you have objected to the processing pursuant to [Art.21 GDPR](https://gdpr-info.eu/art-21-gdpr/);
|
||||
5. pursuant to [Art.20 GDPR](https://gdpr-info.eu/art-20-gdpr/), to receive your personal data that you have provided to us in a structured, common and machine-readable format or to request that it be transferred to another controller;
|
||||
6. in accordance with [Art.7 (3) GDPR](https://gdpr-info.eu/art-7-gdpr/), to revoke your consent given to us at any time. This has the consequence that we may no longer continue the data processing based on this consent in the future; and
|
||||
7. complain to a supervisory authority in accordance with [Art.77 GDPR](https://gdpr-info.eu/art-77-gdpr/) of the GDPR. As a rule, you can contact the supervisory authority of your usual place of residence or workplace.
|
||||
|
||||
|
||||
# 5. Up-to-dateness and modification of this data protection declaration
|
||||
|
||||
This data protection declaration is valid as of January 2025. Due to the further development of our website and offers or due to changed legal or official requirements, it may become necessary to revise this data protection declaration from time to time.
|
||||
@@ -28,7 +28,7 @@
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:922391085500:android:6f54e2c4e49405673e2bb9",
|
||||
"android_client_info": {
|
||||
"package_name": "chat.delta.lite.beta"
|
||||
"package_name": "com.github.arcanechat.beta"
|
||||
}
|
||||
},
|
||||
"oauth_client": [],
|
||||
@@ -47,7 +47,7 @@
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:922391085500:android:aff82fbc40c8172e3e2bb9",
|
||||
"android_client_info": {
|
||||
"package_name": "chat.delta.lite"
|
||||
"package_name": "com.github.arcanechat"
|
||||
}
|
||||
},
|
||||
"oauth_client": [],
|
||||
@@ -66,7 +66,7 @@
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:922391085500:android:92b4cf12669cc2083e2bb9",
|
||||
"android_client_info": {
|
||||
"package_name": "com.github.arcanechat"
|
||||
"package_name": "chat.delta.lite"
|
||||
}
|
||||
},
|
||||
"oauth_client": [],
|
||||
@@ -85,7 +85,7 @@
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:922391085500:android:228a205b8aa2bacc3e2bb9",
|
||||
"android_client_info": {
|
||||
"package_name": "com.github.arcanechat.beta"
|
||||
"package_name": "chat.delta.lite.beta"
|
||||
}
|
||||
},
|
||||
"oauth_client": [],
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionSha256Sum=ff7bf6a86f09b9b2c40bb8f48b25fc19cf2b2664fd1d220cd7ab833ec758d0d7
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip
|
||||
distributionSha256Sum=544c35d6bd849ae8a5ed0bcea39ba677dc40f49df7d1835561582da2009b961d
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
|
||||
networkTimeout=10000
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
||||
+15
-18
@@ -702,12 +702,6 @@ JNIEXPORT jboolean Java_com_b44t_messenger_DcContext_resendMsgs(JNIEnv *env, job
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_DcContext_prepareMsg(JNIEnv *env, jobject obj, jint chat_id, jobject msg)
|
||||
{
|
||||
return dc_prepare_msg(get_dc_context(env, obj), chat_id, get_dc_msg(env, msg));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendMsg(JNIEnv *env, jobject obj, jint chat_id, jobject msg)
|
||||
{
|
||||
return dc_send_msg(get_dc_context(env, obj), chat_id, get_dc_msg(env, msg));
|
||||
@@ -1370,12 +1364,6 @@ JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getId(JNIEnv *env, jobject obj)
|
||||
return dc_msg_get_id(get_dc_msg(env, obj));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean Java_com_b44t_messenger_DcMsg_isOutgoing(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return (jboolean)(dc_msg_is_outgoing(get_dc_msg(env, obj))!=0);
|
||||
}
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getSenderColor(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return dc_msg_get_sender_color(get_dc_msg(env, obj));
|
||||
@@ -1588,12 +1576,6 @@ JNIEXPORT jboolean Java_com_b44t_messenger_DcMsg_isForwarded(JNIEnv *env, jobjec
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean Java_com_b44t_messenger_DcMsg_isIncreation(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return dc_msg_is_increation(get_dc_msg(env, obj))!=0;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean Java_com_b44t_messenger_DcMsg_isInfo(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return dc_msg_is_info(get_dc_msg(env, obj))!=0;
|
||||
@@ -1670,6 +1652,21 @@ JNIEXPORT void Java_com_b44t_messenger_DcMsg_setFile(JNIEnv *env, jobject obj, j
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcMsg_forceSticker(JNIEnv *env, jobject obj)
|
||||
{
|
||||
dc_msg_force_sticker(get_dc_msg(env, obj));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_DcMsg_getPOILocation(JNIEnv *env, jobject obj)
|
||||
{
|
||||
char* temp = dc_msg_get_poi_location(get_dc_msg(env, obj));
|
||||
jstring ret = JSTRING_NEW(temp);
|
||||
dc_str_unref(temp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcMsg_setDimension(JNIEnv *env, jobject obj, int width, int height)
|
||||
{
|
||||
dc_msg_set_dimension(get_dc_msg(env, obj), width, height);
|
||||
|
||||
+1
-1
Submodule jni/deltachat-core-rust updated: 405cd37550...42cb3fccb9
+7
-6
@@ -38,8 +38,6 @@
|
||||
#
|
||||
# If anything doesn't work, please open an issue!!
|
||||
|
||||
"$(dirname "$0")/rebrand.sh"
|
||||
|
||||
set -e
|
||||
echo "starting time: `date`"
|
||||
|
||||
@@ -128,7 +126,7 @@ if test -z $1 || test $1 = armeabi-v7a; then
|
||||
TARGET_CC="$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang" \
|
||||
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
|
||||
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
|
||||
cargo build $RELEASEFLAG --target armv7-linux-androideabi -p deltachat_ffi --features jsonrpc
|
||||
cargo build $RELEASEFLAG --target armv7-linux-androideabi -p deltachat_ffi
|
||||
cp $CARGO_TARGET_DIR/armv7-linux-androideabi/$RELEASE/libdeltachat.a $jnidir/armeabi-v7a
|
||||
fi
|
||||
|
||||
@@ -137,7 +135,7 @@ if test -z $1 || test $1 = arm64-v8a; then
|
||||
TARGET_CC="$TOOLCHAIN/bin/aarch64-linux-android21-clang" \
|
||||
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
|
||||
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
|
||||
cargo build $RELEASEFLAG --target aarch64-linux-android -p deltachat_ffi --features jsonrpc
|
||||
cargo build $RELEASEFLAG --target aarch64-linux-android -p deltachat_ffi
|
||||
cp $CARGO_TARGET_DIR/aarch64-linux-android/$RELEASE/libdeltachat.a $jnidir/arm64-v8a
|
||||
fi
|
||||
|
||||
@@ -146,7 +144,7 @@ if test -z $1 || test $1 = x86; then
|
||||
TARGET_CC="$TOOLCHAIN/bin/i686-linux-android21-clang" \
|
||||
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
|
||||
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
|
||||
cargo build $RELEASEFLAG --target i686-linux-android -p deltachat_ffi --features jsonrpc
|
||||
cargo build $RELEASEFLAG --target i686-linux-android -p deltachat_ffi
|
||||
cp $CARGO_TARGET_DIR/i686-linux-android/$RELEASE/libdeltachat.a $jnidir/x86
|
||||
fi
|
||||
|
||||
@@ -155,7 +153,7 @@ fi
|
||||
TARGET_CC="$TOOLCHAIN/bin/x86_64-linux-android21-clang" \
|
||||
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
|
||||
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
|
||||
cargo build $RELEASEFLAG --target x86_64-linux-android -p deltachat_ffi --features jsonrpc
|
||||
cargo build $RELEASEFLAG --target x86_64-linux-android -p deltachat_ffi
|
||||
cp $CARGO_TARGET_DIR/x86_64-linux-android/$RELEASE/libdeltachat.a $jnidir/x86_64
|
||||
fi
|
||||
|
||||
@@ -176,4 +174,7 @@ else
|
||||
rm -f ndkArch # Remove ndkArch, ignore if it doesn't exist
|
||||
fi
|
||||
|
||||
"$(dirname "$0")/rebrand.sh"
|
||||
|
||||
|
||||
echo "ending time: `date`"
|
||||
|
||||
@@ -1 +1 @@
|
||||
1.77.0
|
||||
1.83.0
|
||||
|
||||
@@ -4,3 +4,4 @@ find ./src/main/assets/help/ -type f -name '*.html' | xargs sed -i 's/github.com
|
||||
find ./src/main/assets/help/ -type f -name '*.html' | xargs sed -i 's/ArcaneChat/Delta Chat/g'
|
||||
find ./src/ -type f -name 'strings.xml' | xargs sed -i 's/github.com\/ArcaneChat/get.delta.chat/g'
|
||||
find ./src/ -type f -name 'strings.xml' | xargs sed -i 's/ArcaneChat/Delta Chat/g'
|
||||
sed -i 's/>Delta Chat</>ArcaneChat</g' ./src/main/res/values/strings.xml
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e # stop on all errors
|
||||
|
||||
git submodule update --init --recursive
|
||||
|
||||
@@ -30,7 +30,6 @@ echo ""
|
||||
echo "and now: here is Delta Chat $VERSION - choose your flavour and mind your backups:"
|
||||
echo "- 🍋 https://download.delta.chat/android/beta/deltachat-gplay-release-$VERSION.apk (google play candidate, overwrites existing installs, should keep data)"
|
||||
echo "- 🍉 https://download.delta.chat/android/beta/deltachat-foss-debug-$VERSION.apk (f-droid candidate, can be installed beside google play)"
|
||||
echo "- 🍏 https://testflight.apple.com/join/uEMc1NxS (ios, update to $VERSION may take a day or so)"
|
||||
echo ""
|
||||
echo "what to test: PLEASE_FILL_OUT"
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
VERSION=$1
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@ public class SharingTest {
|
||||
}
|
||||
}
|
||||
Uri uri = Uri.parse("content://" + BuildConfig.APPLICATION_ID + ".attachments/" + Uri.encode(pngImage));
|
||||
DcHelper.sharedFiles.put("/" + pngImage, 1);
|
||||
DcHelper.sharedFiles.put(pngImage, 1);
|
||||
|
||||
Intent i = new Intent(Intent.ACTION_SEND);
|
||||
i.setType("image/png");
|
||||
|
||||
@@ -389,6 +389,11 @@
|
||||
android:exported="true">
|
||||
</activity>
|
||||
|
||||
<activity android:name=".WebxdcStoreActivity"
|
||||
android:theme="@style/TextSecure.LightTheme"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize|uiMode">
|
||||
</activity>
|
||||
|
||||
<activity android:name=".FullMsgActivity"
|
||||
android:theme="@style/TextSecure.LightTheme"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize">
|
||||
|
||||
@@ -30,14 +30,14 @@
|
||||
<li><a href="#was-sind-push-benachrichtigungen-wie-kann-ich-nachrichten-sofort-erhalten">Was sind Push-Benachrichtigungen? Wie kann ich Nachrichten sofort erhalten?</a></li>
|
||||
<li><a href="#sind-push-benachrichtigungen-auf-ios-geräten-aktiviert-gibt-es-alternativen">Sind Push-Benachrichtigungen auf iOS-Geräten aktiviert? Gibt es Alternativen?</a></li>
|
||||
<li><a href="#android-push">Sind Push-Benachrichtigungen auf Android-Geräten aktiviert/erforderlich?</a></li>
|
||||
<li><a href="#privacy-notifications">Wie privat sind Delta Chat Push-Benachrichtigungen?</a></li>
|
||||
<li><a href="#privacy-notifications">Wie privat sind Delta-Chat-Push-Benachrichtigungen?</a></li>
|
||||
<li><a href="#warum-integriert-sich-delta-chat-in-zentralisierte-proprietäre-applegoogle-push-dienste">Warum integriert sich Delta Chat in zentralisierte, proprietäre Apple/Google-Push-Dienste?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#verschlüsselung-und-sicherheit">Verschlüsselung und Sicherheit</a>
|
||||
<ul>
|
||||
<li><a href="#welche-standards-werden-für-die-ende-zu-ende-verschlüsselung-verwendet">Welche Standards werden für die Ende-zu-Ende-Verschlüsselung verwendet?</a></li>
|
||||
<li><a href="#whene2e">Wie kann ich wissen, ob Nachrichten Ende-zu-Ende verschlüsselt sind?</a></li>
|
||||
<li><a href="#whene2e">Wie kann ich wissen, ob Nachrichten Ende-zu-Ende-verschlüsselt sind?</a></li>
|
||||
<li><a href="#howtoe2ee">Wie kann ich garantierte Ende-zu-Ende-Verschlüsselung und grüne Häkchen erhalten?</a></li>
|
||||
<li><a href="#e2eeguarantee">Was bedeuten das “Grüne Häkchen” und die “garantierte Ende-zu-Ende-Verschlüsselung”?</a></li>
|
||||
<li><a href="#nocryptanymore">Ein Kontakt hat eine Nachricht von einem anderen Gerät gesendet”, was kann ich tun?</a></li>
|
||||
@@ -65,10 +65,10 @@
|
||||
<li><a href="#kann-ich-delta-chat-auf-mehreren-geräten-zur-selben-zeit-verwenden">Kann ich Delta Chat auf mehreren Geräten zur selben Zeit verwenden?</a></li>
|
||||
<li><a href="#fehlersuche">Fehlersuche</a></li>
|
||||
<li><a href="#backup">Manueller Transfer</a></li>
|
||||
<li><a href="#gibt-es-pläne-für-eine-delta-chat-web-anwendung">Gibt es Pläne für eine Delta Chat Web-Anwendung?</a></li>
|
||||
<li><a href="#gibt-es-pläne-für-eine-delta-chat-web-anwendung">Gibt es Pläne für eine Delta-Chat-Web-Anwendung?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#webxdc">Webxdc Apps</a>
|
||||
<li><a href="#webxdc">Webxdc-Apps</a>
|
||||
<ul>
|
||||
<li><a href="#wie-privat-sind-webxdc-apps">Wie privat sind Webxdc Apps?</a></li>
|
||||
<li><a href="#wo-bekomme-ich-webxdc-apps">Wo bekomme ich Webxdc Apps?</a></li>
|
||||
@@ -153,7 +153,7 @@ auch wenn der Empfänger Delta Chat nicht benutzt.</p>
|
||||
die sofortige Push-Benachrichtigungen für iOS- und Android-Geräte bieten.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Durchgängige <a href="#multiple-accounts">Multi-Profil</a> und Multi-Geräte-Unterstützung auf allen Plattformen.</p>
|
||||
<p>Durchgängige <a href="#multiple-accounts">Multi-Profil-</a> und Multi-Geräte-Unterstützung auf allen Plattformen.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Interaktive <a href="https://webxdc.org/apps">Webanwendungen in Chats</a> für Spiele und für die Zusammenarbeit</p>
|
||||
@@ -304,7 +304,7 @@ unter dem Text Ihrer Nachrichten.</p>
|
||||
<li>entweder weil der Kontakt Ihnen direkt eine Nachricht gesendet hat,</li>
|
||||
<li>weil der Kontakt etwas an eine Gruppe geschrieben hat, in der sie beide Mitglied sind,</li>
|
||||
<li>weil der Kontakt Ihnen eine Lesebestätigung für eine von Ihnen geschriebene Nachricht gesendet hat</li>
|
||||
<li>oder weil der Kontakt Daten mithilfe einer <a href="#webxdc">Webxdc App</a> an Ihre Delta Chat-App gesendet hat.</li>
|
||||
<li>oder weil der Kontakt Daten mithilfe einer <a href="#webxdc">Webxdc-App</a> an Ihre Delta-Chat-App gesendet hat.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Dies ist also kein Echtzeit-Online-Status - und wenn jemand nicht sofort antwortet, obwohl er online zu sein scheint, machen Sie sich keine Sorgen und geben Sie ihm etwas Raum. ;-)</li>
|
||||
@@ -487,7 +487,7 @@ und Benachrichtigungen auf dem Telefon des Nutzers anzeigen kann.</p>
|
||||
<p>iOS-Geräten, durch die Integration mit den Apple-Push-Diensten.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Android-Geräten, durch die Integration des Google FCM Push-Dienste,
|
||||
<p>Android-Geräten, durch die Integration des Google-FCM-Push-Dienstes,
|
||||
auch auf Geräten, die <a href="https://microg.org">microG</a>
|
||||
anstelle von proprietärem Google-Code auf dem Telefon.</p>
|
||||
</li>
|
||||
@@ -518,7 +518,7 @@ keine Daten an Apple weitergibt, die Apple nicht bereits hat.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Wenn ein „Push-Service“ verfügbar ist, aktiviert Delta Chat Push-Benachrichtigungen
|
||||
<p>Wenn ein „Push-Service“ verfügbar ist, aktiviert Delta Chat Push-Benachrichtigungen,
|
||||
um eine sofortige Nachrichtenzustellung für alle Chatmail-Benutzer zu erreichen.
|
||||
Wenn Sie einen klassischen E-Mail-Anbieter anstelle von <a href="https://delta.chat/chatmail">chatmail</a> Servern verwenden,
|
||||
sind Push-Benachrichtigungen nicht verfügbar.</p>
|
||||
@@ -544,7 +544,7 @@ können sicher ausprobiert werden, wenn Sie feststellen, dass Nachrichten nur mi
|
||||
<h3 id="privacy-notifications">
|
||||
|
||||
|
||||
Wie privat sind Delta Chat Push-Benachrichtigungen? <a href="#privacy-notifications" class="anchor"></a>
|
||||
Wie privat sind Delta-Chat-Push-Benachrichtigungen? <a href="#privacy-notifications" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
@@ -561,7 +561,7 @@ an irgendein System, das an der Zustellung von Push-Benachrichtigungen beteiligt
|
||||
auf dem <a href="https://delta.chat/chatmail">Chatmail</a>-Server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Wenn ein <a href="https://delta.chat/chatmail">Chatmail</a>-Server eine E-Mail für einen Delta Chat-Benutzer erhält
|
||||
<p>Wenn ein <a href="https://delta.chat/chatmail">Chatmail</a>-Server eine E-Mail für einen Delta-Chat-Benutzer erhält
|
||||
erhält, leitet er den „Geräte-Token“ an den zentralen Delta-Chat-Benachrichtigungs-Proxy weiter.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -627,7 +627,7 @@ Willkommen bei der Macht des interoperablen und massiven Chatmail- und E-Mail-Sy
|
||||
<p><a href="https://autocrypt.org">Autocrypt</a> wird verwendet, um automatisch
|
||||
eine Ende-zu-Ende-Verschlüsselung mit Kontakten und Gruppenchats herzustellen.
|
||||
Autocrypt verwendet eine begrenzte und <a href="#openpgp-secure">sichere Untermenge des OpenPGP-Standards</a>.
|
||||
Ende-zu-Ende verschlüsselte Nachrichten sind mit einem Vorhängeschloss gekennzeichnet <img style="vertical-align:middle; width:1.2em; margin:1px" src="../lock-icon.png" alt="padlock" /></p>
|
||||
Ende-zu-Ende-verschlüsselte Nachrichten sind mit einem Vorhängeschloss gekennzeichnet <img style="vertical-align:middle; width:1.2em; margin:1px" src="../lock-icon.png" alt="padlock" /></p>
|
||||
|
||||
<p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join-Protokolle</a>
|
||||
werden für Chats mit garantierter Ende-zu-Ende-Verschlüsselung verwendet,
|
||||
@@ -639,7 +639,7 @@ garantieren Ende-zu-Ende-verschlüsselte Nachrichten.</p>
|
||||
<h3 id="whene2e">
|
||||
|
||||
|
||||
Wie kann ich wissen, ob Nachrichten Ende-zu-Ende verschlüsselt sind? <a href="#whene2e" class="anchor"></a>
|
||||
Wie kann ich wissen, ob Nachrichten Ende-zu-Ende-verschlüsselt sind? <a href="#whene2e" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
@@ -730,7 +730,7 @@ Das Einführen geschieht automatisch, wenn Sie Mitglieder zu Gruppen hinzufügen
|
||||
Wer einen Kontakt zu einer Gruppe mit grünem Häkchen hinzufügt, wird zum Einführenden
|
||||
für die Mitglieder, die noch nichts von dem hinzugefügten Kontakt wussten.
|
||||
In einem Kontaktprofil können Sie wiederholt auf den Text “Eingeführt von …” tippen
|
||||
bis du zu demjenigen gelangst, mit dem Sie einen direkten <a href="#howtoe2ee">QR-Scan</a> gemacht haben.</p>
|
||||
bis Sie zu demjenigen gelangen, mit dem Sie einen direkten <a href="#howtoe2ee">QR-Scan</a> gemacht haben.</p>
|
||||
|
||||
<p>Beachten Sie, dass Sie in einem Kontaktprofil unter Umständen Einführende sehen und antippen können, aber kein grünes Häkchen im Profiltitel vorhanden ist.
|
||||
Dies bedeutet normalerweise, dass der Kontakt <a href="#nocryptanymore">“eine Nachricht von einem anderen Gerät gesendet hat”</a>.</p>
|
||||
@@ -761,7 +761,7 @@ auch wenn der Kontakt dort Mitglied ist.</p>
|
||||
<p><strong>Ihr Kontakt verwendet Delta Chat auf einem zweiten Gerät (Smartphone oder Laptop)</strong></p>
|
||||
|
||||
<p>Wenn Ihr Kontakt ein weiteres Gerät mit Delta Chat eingerichtet hat,
|
||||
sollte das Konto von dem neuen Gerät entfernen werden und <a href="#multiclient">als zweites Gerät, wie hier beschrieben</a> erneut hinzugefügt werden.
|
||||
sollte das Konto von dem neuen Gerät entfernen werden und <a href="#multiclient">als zweites Gerät, wie hier beschrieben</a>, erneut hinzugefügt werden.
|
||||
Sobald sie sich danach schreiben, wird die Warnung verschwinden
|
||||
und die Verschlüsselung ist mit beiden Geräten Ihres Kontakts garantiert.</p>
|
||||
|
||||
@@ -883,7 +883,7 @@ wenn dieser falsch ist.</p>
|
||||
<p>Delta Chat war auch nie anfällig für den EFAIL-Angriff “Direct Exfiltration”,
|
||||
da nur <code class="language-plaintext highlighter-rouge">multipart/encrypted</code> Nachrichten entschlüsselt werden,
|
||||
die genau einen verschlüsselten und signierten Teil enthalten;
|
||||
so wie in der Autocrypt Level 1 Spezifikation definiert.</p>
|
||||
so wie in der Autocrypt-Level-1-Spezifikation definiert.</p>
|
||||
|
||||
<h3 id="tls">
|
||||
|
||||
@@ -949,7 +949,7 @@ Nachrichten an die Geräte der Empfänger weiterzuleiten und zuzustellen.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Sowohl zum Schutz vor E-Mail-Servern, die Metadaten sammeln
|
||||
<p>Sowohl zum Schutz vor E-Mail-Servern, die Metadaten sammeln,
|
||||
als auch gegen die Gefahr der Beschlagnahmung von Geräten
|
||||
empfehlen wir die Verwendung einer für Delta Chat optimierten <a href="https://delta.chat/serverguide">E-Mail-Server-Instanz</a>, um pseudonym-temporäre Konten durch Scannen von QR-Codes zu erstellen.
|
||||
Beachten Sie, dass Delta-Chat-Apps auf allen Plattformen mehrere Konten unterstützen.
|
||||
@@ -996,7 +996,7 @@ ohne Ende-zu-Ende-Unterstützung verwendet.</p>
|
||||
</h3>
|
||||
|
||||
<p>Wenn ein Kontakt keine Autocrypt-fähige App verwendet,
|
||||
werden alle Nachrichten, die diesen Kontakt betreffen (in Gruppen- oder Direkt-Chats)
|
||||
werden alle Nachrichten, die diesen Kontakt betreffen (in Gruppen- oder Direkt-Chats),
|
||||
nicht Ende-zu-Ende-verschlüsselt und zeigen daher kein “Vorhängeschloss”.
|
||||
Beachten Sie, auch Kontakte, die primär Delta Chat verwenden,
|
||||
können gleichzeitig auch nicht-Autocrypt-fähige Apps verwenden.
|
||||
@@ -1012,7 +1012,7 @@ um zu verhindern, dass unlesbare Nachrichten auf der Seite Ihrer Kontakte ankomm
|
||||
</h3>
|
||||
|
||||
<p>Wenn Sie einen sicheren Ende-zu-Ende-verschlüsselten Chat mit einem Kontakt benötigen,
|
||||
der sowohl Delta Chat als auch nicht-Autocrypt-Anwendungen nutzt,
|
||||
der sowohl Delta Chat als auch Nicht-Autocrypt-Anwendungen nutzt,
|
||||
können Sie eine <a href="#howtoe2ee">garantierte Ende-zu-Ende-Verschlüsselung</a> einrichten, mit einer Gruppe mit Ihnen beiden als Mitgliedern.
|
||||
In diesem Gruppenchat werden alle Nachrichten Ende-zu-Ende verschlüsselt werdejn,
|
||||
auch wenn im Direkt-Chat eine
|
||||
@@ -1026,10 +1026,10 @@ auch wenn im Direkt-Chat eine
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Der beste Weg, um sicherzustellen, dass alle Nachrichten Ende-zu-Ende verschlüsselt sind
|
||||
<p>Der beste Weg, um sicherzustellen, dass alle Nachrichten Ende-zu-Ende-verschlüsselt sind
|
||||
und Metadaten so schnell wie möglich gelöscht werden,
|
||||
ist <a href="#howtoe2ee">die Verwendung von Chats mit garantierter Ende-zu-Ende-Verschlüsselung</a>
|
||||
und die Aktivierung von <a href="#ephemeralmsgs">Verschwindende Nachrichten</a>.</p>
|
||||
und die Aktivierung von <a href="#ephemeralmsgs">verschwindenden Nachrichten</a>.</p>
|
||||
|
||||
<p>Garantierte Ende-zu-Ende-Verschlüsselung schützt vor <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM-Angriffen</a>
|
||||
und das Aktivieren von “Verschwindende Nachrichten” löscht die Nachrichten
|
||||
@@ -1046,7 +1046,7 @@ auf dem Server und Lokal nach einer vom Benutzer eingestellten Zeit.</p>
|
||||
</h3>
|
||||
|
||||
<p>Nein, Delta Chat unterstützt kein “Perfect Forward Secrecy” (PFS).
|
||||
Das bedeutet, dass wenn Ihr privater Delta-Chat-Schlüssel durchgesickert ist,
|
||||
Das bedeutet, wenn Ihr privater Delta-Chat-Schlüssel durchgesickert ist
|
||||
und jemand Ihre vorherigen In-Transit-Nachrichten gesammelt hat,
|
||||
können diese mit dem veröffentlichtem Schlüssel entschlüsselt werden.</p>
|
||||
|
||||
@@ -1057,7 +1057,7 @@ Die typische, reale Situation für durchgesickerte private Schlüssel, ist die <
|
||||
OpenPGP ist nur ein Container für verschlüsselte Nachrichten mit dem
|
||||
die Verwaltung der Schlüssel (und damit die Schlüsselrotation oder das Schlüssel-“Ratcheting”)
|
||||
auf flexible Weise organisiert werden kann.
|
||||
Siehe <a href="https://gitlab.com/sequoia-pgp/openpgp-dr">Seqouia’s PFS-Prototyp</a>
|
||||
Siehe <a href="https://gitlab.com/sequoia-pgp/openpgp-dr">Seqouias PFS-Prototyp</a>
|
||||
für bestehende Experimente in der OpenPGP-Community.</p>
|
||||
|
||||
<h3 id="ist-die-ende-zu-ende-verschlüsselung-von-delta-chat-genauso-sicher-wie-die-von-signal">
|
||||
@@ -1146,7 +1146,7 @@ Für andere Programme können Sie online eine Lösung finden.</p>
|
||||
Weitere Informationen finden Sie in unserem Blogbeitrag über <a href="https://delta.chat/en/2024-03-25-crypto-analysis-securejoin">Hardening Guaranteed End-to-End encryption</a> und in der hinterher publizierten <a href="https://eprint.iacr.org/2024/918.pdf">Kryptografischen Analyse von Delta Chat</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Im April 2023 haben wir Sicherheits- und Datenschutzprobleme mit den “In Chats geteilten Apps”-Feature behoben, die mit Fehlern beim Sandboxing, insbesondere mit Chromium zusammenhängen. Wir haben daraufhin eine unabhängige Sicherheitsprüfung von Cure53 durchführen lassen, und alle gefundenen Probleme wurden mit den im April 2023 veröffentlichten 1.36 Releases behoben. Siehe <a href="https://delta.chat/en/2023-05-22-webxdc-security">hier für die vollständige Hintergrundgeschichte</a>.</p>
|
||||
<p>Im April 2023 haben wir Sicherheits- und Datenschutzprobleme mit dem “In Chats geteilten Apps”-Feature behoben, die mit Fehlern beim Sandboxing, insbesondere mit Chromium zusammenhängen. Wir haben daraufhin eine unabhängige Sicherheitsprüfung von Cure53 durchführen lassen, und alle gefundenen Probleme wurden mit den im April 2023 veröffentlichten 1.36 Releases behoben. Siehe <a href="https://delta.chat/en/2023-05-22-webxdc-security">hier für die vollständige Hintergrundgeschichte</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Im März 2023 analysierte <a href="https://cure53.de">Cure53</a> sowohl die Transportverschlüsselung von Delta Chats Netzwerkverbindungen als auch das reproduzierbare Mailserver-Setup wie <a href="https://delta.chat/de/serverguide">auf dieser Seite empfohlen</a>. Sie können mehr über das Audit <a href="https://delta.chat/en/2023-03-27-third-independent-security-audit">in unserem Blog</a> lesen oder Sie lesen den <a href="https://delta.chat/assets/blog/MER-01-report.pdf">vollständigen Bericht hier</a>.</p>
|
||||
@@ -1156,7 +1156,7 @@ Weitere Informationen finden Sie in unserem Blogbeitrag über <a href="https://d
|
||||
Es wurden keine kritischen oder hochgradig gefährlichen Probleme gefunden. Der Bericht wies auf einige Schwachstellen mittlerer Schwere hin - sie stellen für sich genommen keine Bedrohung für Delta-Chat-Benutzer dar, da sie von der Umgebung abhängen, in der Delta Chat verwendet wird. Aus Gründen der Benutzerfreundlichkeit und der Kompatibilität können wir nicht alle Schwachstellen beseitigen und haben beschlossen, Sicherheitsempfehlungen für bedrohte Benutzer zu geben. Sie können den <a href="https://delta.chat/assets/blog/2020-second-security-review.pdf">vollständigen Bericht hier</a> lesen.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Im Jahr 2019 analysierte <a href="https://includesecurity.com">Include Security</a> die von Delta Chat verwendeten <a href="https://github.com/rpgp/rpgp">PGP</a> und <a href="https://github.com/RustCrypto/RSA">RSA</a> Bibliotheken.
|
||||
<p>Im Jahr 2019 analysierte <a href="https://includesecurity.com">Include Security</a> die von Delta Chat verwendeten <a href="https://github.com/rpgp/rpgp">PGP-</a> und <a href="https://github.com/RustCrypto/RSA">RSA-</a> Bibliotheken.
|
||||
Es wurden keine kritischen Probleme gefunden, aber zwei Probleme mit hohem Schweregrad, die wir anschließend behoben haben. Außerdem wurden ein mittelschweres und einige weniger schwerwiegende Probleme gefunden, aber es gab keine Möglichkeit, diese Schwachstellen in der Delta-Chat-Implementierung auszunutzen. Einige dieser Schwachstellen haben wir dennoch nach Abschluss des Audits behoben. Sie können den [vollständigen Bericht hier] lesen (../assets/blog/2019-first-security-review.pdf).</p>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -1260,32 +1260,32 @@ Verwenden Sie nach Möglichkeit ein Nicht-Gast-Netzwerk. Wenn Sie Zugriff auf de
|
||||
<li><strong>Wenn Sie iOS verwenden</strong> und auf Schwierigkeiten stoßen, hilft Ihnen vielleicht <a href="https://support.delta.chat/t/import-backup-to-ios/1628">diese Anleitung</a>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Sie sind nun synchronisiert und können beide Geräte zum Senden und Empfangen von Ende-zu-Ende verschlüsselten Nachrichten mit Ihren Kommunikationspartnern verwenden.</li>
|
||||
<li>Sie sind nun synchronisiert und können beide Geräte zum Senden und Empfangen von Ende-zu-Ende-verschlüsselten-Nachrichten mit Ihren Kommunikationspartnern verwenden.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="gibt-es-pläne-für-eine-delta-chat-web-anwendung">
|
||||
|
||||
|
||||
Gibt es Pläne für eine Delta Chat Web-Anwendung? <a href="#gibt-es-pläne-für-eine-delta-chat-web-anwendung" class="anchor"></a>
|
||||
Gibt es Pläne für eine Delta-Chat-Web-Anwendung? <a href="#gibt-es-pläne-für-eine-delta-chat-web-anwendung" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Es gibt keine direkten Pläne, aber einige vorläufige Gedanken.</li>
|
||||
<li>Es gibt 2-3 Möglichkeiten, einen Delta Chat Web-Client einzuführen, aber sie bedeuten alle immense Arbeit. Im Moment fokussieren wir uns darauf, stabile native Apps in den Appstores (Google Play/iOS/Windows/macOS/Linux repositories) anzubieten.</li>
|
||||
<li>Sollten Sie einen Web-Client benötigen, weil Sie auf Ihrem Arbeitsrechner keine Software installieren dürfen, können Sie den Windows Desktop-Client bzw. Applmage für Linux nutzen. Sie finden diese unter <a href="https://get.delta.chat">get.delta.chat</a>.</li>
|
||||
<li>Es gibt 2-3 Möglichkeiten, einen Delta-Chat-Web-Client einzuführen, aber sie bedeuten alle immense Arbeit. Im Moment fokussieren wir uns darauf, stabile native Apps in den Appstores (Google Play/iOS/Windows/macOS/Linux repositories) anzubieten.</li>
|
||||
<li>Sollten Sie einen Web-Client benötigen, weil Sie auf Ihrem Arbeitsrechner keine Software installieren dürfen, können Sie den Windows-Desktop-Client bzw. Applmage für Linux nutzen. Sie finden diese unter <a href="https://get.delta.chat">get.delta.chat</a>.</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="webxdc">
|
||||
|
||||
|
||||
Webxdc Apps <a href="#webxdc" class="anchor"></a>
|
||||
Webxdc-Apps <a href="#webxdc" class="anchor"></a>
|
||||
|
||||
|
||||
</h2>
|
||||
|
||||
<p>In Delta Chat können Sie <a href="https://webxdc.org">Webxdc Apps</a>, Anhänge mit der Dateierweiterung “.xdc” teilen. Sie können sehr unterschiedliche Dinge tun und machen Delta Chat zu einem wirklich erweiterbaren Messenger.</p>
|
||||
<p>In Delta Chat können Sie <a href="https://webxdc.org">Webxdc-Apps</a>, Anhänge mit der Dateierweiterung “.xdc” teilen. Sie können sehr unterschiedliche Dinge tun und machen Delta Chat zu einem wirklich erweiterbaren Messenger.</p>
|
||||
|
||||
<h3 id="wie-privat-sind-webxdc-apps">
|
||||
|
||||
@@ -1311,7 +1311,7 @@ Verwenden Sie nach Möglichkeit ein Nicht-Gast-Netzwerk. Wenn Sie Zugriff auf de
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Grundsätzlich kann jeder Webxdc Apps mit anderen ohne Einschränkungen teilen.</li>
|
||||
<li>Grundsätzlich kann jeder Webxdc-Apps mit anderen ohne Einschränkungen teilen.</li>
|
||||
<li>Von <a href="https://webxdc.org/apps/">webxdc.org/apps</a>.</li>
|
||||
<li>Sie können <a href="https://delta.chat/en/2023-08-11-xstore">‘hallo’ an xstore@testrun.org senden</a>
|
||||
um einen experimentellen Webxdc Appstore zu sehen.
|
||||
@@ -1330,7 +1330,7 @@ forum</a> veröffentlicht und diskutiert.</li>
|
||||
|
||||
<ul>
|
||||
<li>Webxdc Apps sind nur ZIP-Dateien, die HTML-, CSS- und JavaScript-Code enthalten.</li>
|
||||
<li>Sie können die <a href="https://github.com/webxdc/hello">Hello World-Beispiel-App</a> erweitern, um loszulegen.</li>
|
||||
<li>Sie können die <a href="https://github.com/webxdc/hello">Hello-World-Beispiel-App</a> erweitern, um loszulegen.</li>
|
||||
<li>Alles andere, was Sie wissen müssen, steht in der <a href="https://docs.webxdc.org/">Dokumentation</a>.</li>
|
||||
<li>Wenn Sie Fragen haben, können Sie andere mit Erfahrung im <a href="https://support.delta.chat/c/webxdc/20">Delta-Chat-Forum</a> fragen.</li>
|
||||
</ul>
|
||||
@@ -1643,7 +1643,7 @@ wenn Sie eine <a href="#signature">Signaturtext</a> einfügen.</p>
|
||||
<ul>
|
||||
<li>Ja und Nein.</li>
|
||||
<li>Nein, Sie können sich nicht mit Delta Chat in ein Protonmail-, Tutanota- oder Criptext-Konto einloggen, da diese keinen Standard-E-Mail-Empfang über IMAP anbieten.</li>
|
||||
<li>Ja, Sie können Delta Chat verwenden, um Nachrichten an Personen zu senden, die Protonmail, Tutanota oder Criptext verwenden. Diese Nachrichten werden jedoch nicht ende-zu-ende-verschlüsselt, da diese Anbieter keine mit dem <a href="https://autocrypt.org/">Autocrypt</a>-Standard kompatible Verschlüsselung verwenden.</li>
|
||||
<li>Ja, Sie können Delta Chat verwenden, um Nachrichten an Personen zu senden, die Protonmail, Tutanota oder Criptext verwenden. Diese Nachrichten werden jedoch nicht Ende-zu-Ende-verschlüsselt, da diese Anbieter keine mit dem <a href="https://autocrypt.org/">Autocrypt</a>-Standard kompatible Verschlüsselung verwenden.</li>
|
||||
<li>Delta Chat kann Ende-zu-Ende-Verschlüsselung über jeden E-Mail-Anbieter mit jeder
|
||||
<a href="https://autocrypt.org/dev-status.html">Autocrypt-fähige E-Mail-Anwendung</a> herstellen</li>
|
||||
</ul>
|
||||
@@ -1712,7 +1712,7 @@ Andernfalls könnten Sie unverschlüsselte Nachrichten aus diesen Gruppenchats e
|
||||
<p>Im <strong>Paketmanager</strong> Ihrer Linux-Distribution nachschauen</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Android APKs</strong> sind auch auf <a href="https://github.com/deltachat/deltachat-android/releases">https://github.com/deltachat/deltachat-android/releases</a> verfügbar.</p>
|
||||
<p><strong>Android-APKs</strong> sind auch auf <a href="https://github.com/deltachat/deltachat-android/releases">https://github.com/deltachat/deltachat-android/releases</a> verfügbar.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -1741,10 +1741,10 @@ Die zweite Förderung 2019/2020 (~$300K) half uns bei der Erstellung der iOS-Ve
|
||||
<p>Die <a href="https://nlnet.nl/">NLnet-Stiftung</a> bewilligte 2019/2020 46K EUR für die Fertigstellung von Rust-/Python-Bindungs und die Einrichtung eines Chat-Bot-Ökosystems.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Im Jahr 2021 erhielten wir weitere EU-Mittel für zwei “Next-Generation-Internet” Anträge, nämlich für <a href="https://dapsi.ngi.eu/hall-of-fame/eppd/">EPPD - E-Mail-Provider-Portabilitätsverzeichnis</a> (~97K EUR) und <a href="https://nlnet.nl/project/EmailPorting/">AEAP - E-Mail-Adressportierung</a> (~90K EUR). Ziel sind bessere Unterstützung von Mehrfachkonten, verbesserten QR-Code-Kontakt- und -Gruppen-Setups sowie Netzwerkverbesserungen auf allen Plattformen.</p>
|
||||
<p>Im Jahr 2021 erhielten wir weitere EU-Mittel für zwei “Next-Generation-Internet”-Anträge, nämlich für <a href="https://dapsi.ngi.eu/hall-of-fame/eppd/">EPPD - E-Mail-Provider-Portabilitätsverzeichnis</a> (~97K EUR) und <a href="https://nlnet.nl/project/EmailPorting/">AEAP - E-Mail-Adressportierung</a> (~90K EUR). Ziel sind bessere Unterstützung von Mehrfachkonten, verbesserten QR-Code-Kontakt- und -Gruppen-Setups sowie Netzwerkverbesserungen auf allen Plattformen.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Von Ende 2021 bis März 2023 erhielten wir eine <em>Internet Freedom</em> Finanzierung (500K USD) vom U.S. Bureau of Democracy, Human Rights and Labor (DRL). Diese Finanzierung unterstützte unsere langjährigen Ziele, Delta Chat benutzerfreundlicher und kompatibel mit einer breiten Palette von E-Mail-Servern weltweit zu machen, sowie widerstandsfähiger und sicherer an Orten, die häufig von Internetzensur und Abschaltungen betroffen sind.</p>
|
||||
<p>Von Ende 2021 bis März 2023 erhielten wir eine <em>Internet-Freedom</em>-Finanzierung (500K USD) vom U.S. Bureau of Democracy, Human Rights and Labor (DRL). Diese Finanzierung unterstützte unsere langjährigen Ziele, Delta Chat benutzerfreundlicher und kompatibel mit einer breiten Palette von E-Mail-Servern weltweit zu machen, sowie widerstandsfähiger und sicherer an Orten, die häufig von Internetzensur und Abschaltungen betroffen sind.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2023-2024 schlossen wir erfolgreich das vom OTF finanzierte
|
||||
@@ -1754,11 +1754,11 @@ das <a href="https://delta.chat/chatmail">Chatmail-Server-Netzwerk</a>
|
||||
und „Instant Onboarding“ allen ab April 2024 veröffentlichten Anwendungen hinzu.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2023 und 2024 wurden wir in das Next Generation Internet (NGI)
|
||||
Programm für unsere Arbeit an <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a> aufgenommen,
|
||||
<p>2023 und 2024 wurden wir in das Next-Generation-Internet-Programm (NGI)
|
||||
für unsere Arbeit an <a href="https://nlnet.nl/project/WebXDC-Push/">Webxdc-PUSH</a> aufgenommen,
|
||||
zusammen mit Kooperationspartnern, die an
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">Webxdc-Evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">Webxdc-XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> und
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
Alle diese Projekte sind teilweise abgeschlossen oder sollen Anfang 2025 abgeschlossen werden.</p>
|
||||
@@ -1776,7 +1776,7 @@ Der Erhalt von Spenden hilft uns auch, unabhängiger und langfristig lebensfähi
|
||||
|
||||
<p>Die oben aufgeführte finanzielle Förderung wird hauptsächlich von der merlinux GmbH in Freiburg (Deutschland) organisiert und an mehr als ein Dutzend Mitwirkende weltweit verteilt.</p>
|
||||
|
||||
<p>Möglichkeiten mitzuwirken finden Sie Auf der <a href="https://delta.chat/de/contribute">Delta Chat Seite “Mitwirken”</a>.</p>
|
||||
<p>Möglichkeiten mitzuwirken finden Sie Auf der <a href="https://delta.chat/de/contribute">Delta-Chat-Seite “Mitwirken”</a>.</p>
|
||||
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
@@ -86,7 +86,7 @@ public class DcContext {
|
||||
public final static int DC_CONNECTIVITY_CONNECTED = 4000;
|
||||
|
||||
private static final String CONFIG_ACCOUNT_ENABLED = "ui.enabled";
|
||||
private static final String CONFIG_MENTION_NOTIF_ENABLED = "ui.notify_mentions";
|
||||
private static final String CONFIG_MUTE_MENTIONS_IF_MUTED = "ui.mute_mentions_if_muted";
|
||||
|
||||
// when using DcAccounts, use DcAccounts.addAccount() instead
|
||||
public DcContext(String osName, String dbfile) {
|
||||
@@ -195,7 +195,6 @@ public class DcContext {
|
||||
public native void deleteMsgs (int msg_ids[]);
|
||||
public native void forwardMsgs (int msg_ids[], int chat_id);
|
||||
public native boolean resendMsgs (int msg_ids[]);
|
||||
public native int prepareMsg (int chat_id, DcMsg msg);
|
||||
public native int sendMsg (int chat_id, DcMsg msg);
|
||||
public native int sendTextMsg (int chat_id, String text);
|
||||
public native int sendVideochatInvitation(int chat_id);
|
||||
@@ -228,11 +227,11 @@ public class DcContext {
|
||||
}
|
||||
|
||||
public boolean isMentionsEnabled() {
|
||||
return !"0".equals(getConfig(CONFIG_MENTION_NOTIF_ENABLED));
|
||||
return getConfigInt(CONFIG_MUTE_MENTIONS_IF_MUTED) != 1;
|
||||
}
|
||||
|
||||
public void setMentionsEnabled(boolean enabled) {
|
||||
setConfigInt(CONFIG_MENTION_NOTIF_ENABLED, enabled? 1 : 0);
|
||||
setConfigInt(CONFIG_MUTE_MENTIONS_IF_MUTED, enabled? 0 : 1);
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
|
||||
@@ -156,19 +156,19 @@ public class DcMsg {
|
||||
public native String getSetupCodeBegin ();
|
||||
public native String getVideochatUrl ();
|
||||
public native int getVideochatType ();
|
||||
public native boolean isIncreation ();
|
||||
public native void setText (String text);
|
||||
public native void setSubject (String text);
|
||||
public native void setHtml (String text);
|
||||
public native void setFile (String file, String filemime);
|
||||
public native void forceSticker ();
|
||||
public native void setDimension (int width, int height);
|
||||
public native void setDuration (int duration);
|
||||
public native void setLocation (float latitude, float longitude);
|
||||
public native String getPOILocation ();
|
||||
public void setQuote (DcMsg quote) { setQuoteCPtr(quote.msgCPtr); }
|
||||
public native String getQuotedText ();
|
||||
public native String getError ();
|
||||
public native String getOverrideSenderName();
|
||||
public native boolean isOutgoing();
|
||||
public native int getSenderColor();
|
||||
|
||||
public String getSenderName(DcContact dcContact) {
|
||||
@@ -209,6 +209,10 @@ public class DcMsg {
|
||||
return ids;
|
||||
}
|
||||
|
||||
public boolean isOutgoing() {
|
||||
return getFromId() == DcContact.DC_CONTACT_ID_SELF;
|
||||
}
|
||||
|
||||
public String getDisplayBody() {
|
||||
return getText();
|
||||
}
|
||||
|
||||
@@ -79,23 +79,6 @@ public class Rpc {
|
||||
}
|
||||
}
|
||||
|
||||
public int addAccount() throws RpcException {
|
||||
return gson.fromJson(getResult("add_account"), int.class);
|
||||
}
|
||||
|
||||
public void startIO() throws RpcException {
|
||||
getResult("start_io_for_all_accounts");
|
||||
}
|
||||
|
||||
public void stopIO() throws RpcException {
|
||||
getResult("stop_io_for_all_accounts");
|
||||
}
|
||||
|
||||
public Map<String, String> getSystemInfo() throws RpcException {
|
||||
TypeToken<Map<String, String>> mapType = new TypeToken<Map<String, String>>(){};
|
||||
return gson.fromJson(getResult("get_system_info"), mapType.getType());
|
||||
}
|
||||
|
||||
public List<VcardContact> parseVcard(String path) throws RpcException {
|
||||
TypeToken<List<VcardContact>> listType = new TypeToken<List<VcardContact>>(){};
|
||||
return gson.fromJson(getResult("parse_vcard", path), listType.getType());
|
||||
|
||||
@@ -124,9 +124,6 @@ public class ApplicationContext extends MultiDexApplication {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
if ("deltafans@nine.testrun.org".equals(ac.getConfig("configured_addr")) && !ac.isCommunity()) {
|
||||
ac.setCommunityMode(true);
|
||||
}
|
||||
}
|
||||
if (allAccounts.length == 0) {
|
||||
dcAccounts.addAccount();
|
||||
@@ -232,11 +229,10 @@ public class ApplicationContext extends MultiDexApplication {
|
||||
TimeUnit.MILLISECONDS)
|
||||
.setConstraints(constraints)
|
||||
.build();
|
||||
try {
|
||||
// in Android 4 this throws exception due to R8/shrinking
|
||||
WorkManager.getInstance(this)
|
||||
.enqueueUniquePeriodicWork("FetchWorker", ExistingPeriodicWorkPolicy.KEEP, fetchWorkRequest);
|
||||
} catch (Throwable e) {}
|
||||
WorkManager.getInstance(this).enqueueUniquePeriodicWork(
|
||||
"FetchWorker",
|
||||
ExistingPeriodicWorkPolicy.KEEP,
|
||||
fetchWorkRequest);
|
||||
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
|
||||
|
||||
if (Prefs.isPushEnabled(this)) {
|
||||
|
||||
@@ -45,6 +45,7 @@ import android.text.TextWatcher;
|
||||
import android.util.Log;
|
||||
import android.util.Pair;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
@@ -53,6 +54,7 @@ import android.view.View.OnFocusChangeListener;
|
||||
import android.view.View.OnKeyListener;
|
||||
import android.view.WindowManager;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
@@ -117,7 +119,7 @@ import org.thoughtcrime.securesms.util.Util;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
import org.thoughtcrime.securesms.util.concurrent.AssertedSuccessListener;
|
||||
import org.thoughtcrime.securesms.util.guava.Optional;
|
||||
import org.thoughtcrime.securesms.util.views.Stub;
|
||||
import org.thoughtcrime.securesms.util.views.ProgressDialog;
|
||||
import org.thoughtcrime.securesms.video.recode.VideoRecoder;
|
||||
import org.thoughtcrime.securesms.videochat.VideochatUtil;
|
||||
|
||||
@@ -160,8 +162,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
private static final int GROUP_EDIT = 6;
|
||||
private static final int TAKE_PHOTO = 7;
|
||||
private static final int RECORD_VIDEO = 8;
|
||||
private static final int PICK_LOCATION = 9; // TODO: i think, this can be deleted
|
||||
private static final int SMS_DEFAULT = 11; // TODO: i think, this can be deleted
|
||||
private static final int PICK_WEBXDC = 9;
|
||||
|
||||
private GlideRequests glideRequests;
|
||||
protected ComposeText composeText;
|
||||
@@ -174,11 +175,13 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
private View composePanel;
|
||||
private ScaleStableImageView backgroundView;
|
||||
private MessageRequestsBottomView messageRequestBottomView;
|
||||
private ProgressDialog progressDialog;
|
||||
|
||||
private AttachmentTypeSelector attachmentTypeSelector;
|
||||
private AttachmentManager attachmentManager;
|
||||
private AudioRecorder audioRecorder;
|
||||
private Stub<MediaKeyboard> emojiDrawerStub;
|
||||
private FrameLayout emojiPickerContainer;
|
||||
private MediaKeyboard emojiPicker;
|
||||
protected HidingLinearLayout quickAttachmentToggle;
|
||||
private InputPanel inputPanel;
|
||||
|
||||
@@ -318,10 +321,11 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
super.onConfigurationChanged(newConfig);
|
||||
composeText.setTransport(sendButton.getSelectedTransport());
|
||||
|
||||
if (emojiDrawerStub.resolved() && container.getCurrentInput() == emojiDrawerStub.get()) {
|
||||
if (emojiPicker != null && container.getCurrentInput() == emojiPicker) {
|
||||
container.hideAttachedInput(true);
|
||||
}
|
||||
|
||||
emojiPicker = null; // force reloading next time onEmojiToggle() is called
|
||||
initializeBackground();
|
||||
}
|
||||
|
||||
@@ -335,8 +339,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
public void onActivityResult(final int reqCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(reqCode, resultCode, data);
|
||||
|
||||
if ((data == null && reqCode != TAKE_PHOTO && reqCode != RECORD_VIDEO && reqCode != SMS_DEFAULT) ||
|
||||
(resultCode != RESULT_OK && reqCode != SMS_DEFAULT))
|
||||
if (resultCode != RESULT_OK || (data == null && reqCode != TAKE_PHOTO && reqCode != RECORD_VIDEO))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -360,7 +363,11 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
for (int i = 0; i < uriCount; i++) {
|
||||
uriList.add(multipleUris.getItemAt(i).getUri());
|
||||
}
|
||||
askSendingFiles(uriList, () -> SendRelayedMessageUtil.sendMultipleMsgs(this, chatId, uriList, null));
|
||||
askSendingFiles(uriList, () -> {
|
||||
Util.runOnAnyBackgroundThread(() -> {
|
||||
SendRelayedMessageUtil.sendMultipleMsgs(this, chatId, uriList, null);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -372,6 +379,10 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
setMedia(data.getData(), docMediaType);
|
||||
break;
|
||||
|
||||
case PICK_WEBXDC:
|
||||
setMedia(data.getData(), MediaType.DOCUMENT);
|
||||
break;
|
||||
|
||||
case PICK_CONTACT:
|
||||
addAttachmentContactInfo(data.getIntExtra(AttachContactActivity.CONTACT_ID_EXTRA, 0));
|
||||
break;
|
||||
@@ -399,16 +410,9 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
}
|
||||
break;
|
||||
|
||||
case PICK_LOCATION:
|
||||
break;
|
||||
|
||||
case ScribbleActivity.SCRIBBLE_REQUEST_CODE:
|
||||
setMedia(data.getData(), MediaType.IMAGE);
|
||||
break;
|
||||
|
||||
case SMS_DEFAULT:
|
||||
initializeSecurity(isSecureText, isDefaultSms);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -735,8 +739,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
handleReplyMessage(quote);
|
||||
}
|
||||
|
||||
String filename = draft.getFile();
|
||||
if (filename.isEmpty() || !new File(filename).exists()) {
|
||||
String file = draft.getFile();
|
||||
if (file.isEmpty() || !new File(file).exists()) {
|
||||
future.set(!text.isEmpty());
|
||||
updateToggleButtonState();
|
||||
return future;
|
||||
@@ -756,26 +760,21 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
}
|
||||
};
|
||||
|
||||
File file = new File(filename);
|
||||
Uri uri = Uri.fromFile(file);
|
||||
switch (draft.getType()) {
|
||||
case DcMsg.DC_MSG_IMAGE:
|
||||
setMedia(uri, MediaType.IMAGE).addListener(listener);
|
||||
setMedia(draft, MediaType.IMAGE).addListener(listener);
|
||||
break;
|
||||
case DcMsg.DC_MSG_GIF:
|
||||
setMedia(uri, MediaType.GIF).addListener(listener);
|
||||
setMedia(draft, MediaType.GIF).addListener(listener);
|
||||
break;
|
||||
case DcMsg.DC_MSG_AUDIO:
|
||||
setMedia(uri, MediaType.AUDIO).addListener(listener);
|
||||
setMedia(draft, MediaType.AUDIO).addListener(listener);
|
||||
break;
|
||||
case DcMsg.DC_MSG_VIDEO:
|
||||
setMedia(uri, MediaType.VIDEO).addListener(listener);
|
||||
break;
|
||||
case DcMsg.DC_MSG_WEBXDC:
|
||||
setMedia(draft, MediaType.DOCUMENT).addListener(listener);
|
||||
setMedia(draft, MediaType.VIDEO).addListener(listener);
|
||||
break;
|
||||
default:
|
||||
setMedia(uri, MediaType.DOCUMENT).addListener(listener);
|
||||
setMedia(draft, MediaType.DOCUMENT).addListener(listener);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -809,7 +808,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
sendButton = ViewUtil.findById(this, R.id.send_button);
|
||||
attachButton = ViewUtil.findById(this, R.id.attach_button);
|
||||
composeText = ViewUtil.findById(this, R.id.embedded_text_editor);
|
||||
emojiDrawerStub = ViewUtil.findStubById(this, R.id.emoji_drawer_stub);
|
||||
emojiPickerContainer = ViewUtil.findById(this, R.id.emoji_picker_container);
|
||||
composePanel = ViewUtil.findById(this, R.id.bottom_panel);
|
||||
container = ViewUtil.findById(this, R.id.layout_container);
|
||||
quickAttachmentToggle = ViewUtil.findById(this, R.id.quick_attachment_toggle);
|
||||
@@ -931,6 +930,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
case AttachmentTypeSelector.RECORD_VIDEO:
|
||||
attachmentManager.captureVideo(this, RECORD_VIDEO);
|
||||
break;
|
||||
case AttachmentTypeSelector.ADD_WEBXDC:
|
||||
AttachmentManager.selectWebxdc(this, PICK_WEBXDC); break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -979,14 +980,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
protected static final int ACTION_SEND_OUT = 1;
|
||||
protected static final int ACTION_SAVE_DRAFT = 2;
|
||||
|
||||
private String getSelfReaction(int msgId) {
|
||||
try {
|
||||
final String [] selfReactions = rpc.getMsgReactions(dcContext.getAccountId(), msgId).getReactionsByContact().get(DcContact.DC_CONTACT_ID_SELF);
|
||||
if (selfReactions != null && selfReactions.length > 0) return selfReactions[0];
|
||||
} catch(Exception e) { e.printStackTrace(); }
|
||||
return null;
|
||||
}
|
||||
|
||||
protected ListenableFuture<Integer> processComposeControls(int action) {
|
||||
return processComposeControls(action, composeText.getTextTrimmed(),
|
||||
attachmentManager.isAttachmentPresent() ?
|
||||
@@ -1072,7 +1065,23 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
{
|
||||
boolean doSend = true;
|
||||
if (recompress==DcMsg.DC_MSG_VIDEO) {
|
||||
Util.runOnMain(() -> {
|
||||
progressDialog = ProgressDialog.show(
|
||||
ConversationActivity.this,
|
||||
"",
|
||||
getString(R.string.one_moment),
|
||||
true,
|
||||
false
|
||||
);
|
||||
});
|
||||
doSend = VideoRecoder.prepareVideo(ConversationActivity.this, dcChat.getId(), msg);
|
||||
Util.runOnMain(() -> {
|
||||
try {
|
||||
progressDialog.dismiss();
|
||||
} catch (final IllegalArgumentException e) {
|
||||
// The activity is finishing/destroyed, do nothing.
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (doSend) {
|
||||
@@ -1228,16 +1237,23 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
});
|
||||
}
|
||||
|
||||
private void reloadEmojiPicker() {
|
||||
emojiPickerContainer.removeAllViews();
|
||||
emojiPicker = (MediaKeyboard) LayoutInflater.from(this).inflate(R.layout.conversation_activity_emojidrawer_stub, emojiPickerContainer, false);
|
||||
emojiPickerContainer.addView(emojiPicker);
|
||||
inputPanel.setMediaKeyboard(emojiPicker);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEmojiToggle() {
|
||||
if (!emojiDrawerStub.resolved()) {
|
||||
inputPanel.setMediaKeyboard(emojiDrawerStub.get());
|
||||
if (emojiPicker == null) {
|
||||
reloadEmojiPicker();
|
||||
}
|
||||
|
||||
if (container.getCurrentInput() == emojiDrawerStub.get()) {
|
||||
if (container.getCurrentInput() == emojiPicker) {
|
||||
container.showSoftkey(composeText);
|
||||
} else {
|
||||
container.show(composeText, emojiDrawerStub.get());
|
||||
container.show(composeText, emojiPicker);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1266,6 +1282,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
msg.setQuote(quote.get().getQuotedMsg());
|
||||
}
|
||||
msg.setFile(path, null);
|
||||
msg.forceSticker();
|
||||
dcContext.sendMsg(chatId, msg);
|
||||
}
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ import android.content.Intent;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Bundle;
|
||||
import android.text.Editable;
|
||||
import android.text.TextUtils;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -210,7 +211,7 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
|
||||
dcContext.marknoticedChat((int) chatId);
|
||||
Util.runOnBackground(() -> dcContext.marknoticedChat((int) chatId));
|
||||
if (list.getAdapter() != null) {
|
||||
list.getAdapter().notifyDataSetChanged();
|
||||
}
|
||||
@@ -703,7 +704,7 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
index++;
|
||||
}
|
||||
}
|
||||
dcContext.markseenMsgs(ids);
|
||||
Util.runOnAnyBackgroundThread(() -> dcContext.markseenMsgs(ids));
|
||||
}
|
||||
|
||||
|
||||
@@ -811,6 +812,9 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
else if(messageRecord.getInfoType() == DcMsg.DC_INFO_WEBXDC_INFO_MESSAGE) {
|
||||
WebxdcActivity.openWebxdcActivity(getContext(), messageRecord.getParent(), messageRecord.getWebxdcHref());
|
||||
}
|
||||
else if (!TextUtils.isEmpty(messageRecord.getPOILocation()) && messageRecord.getType() == DcMsg.DC_MSG_TEXT && !messageRecord.hasHtml()) {
|
||||
WebxdcActivity.openMaps(getContext(), getListAdapter().getChat().getId(), "index.html#"+messageRecord.getPOILocation());
|
||||
}
|
||||
else {
|
||||
String self_mail = dcContext.getConfig("configured_mail_user");
|
||||
if (self_mail != null && !self_mail.isEmpty()
|
||||
|
||||
@@ -89,7 +89,6 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
public static final String CLEAR_NOTIFICATIONS = "clear_notifications";
|
||||
public static final String ACCOUNT_ID_EXTRA = "account_id";
|
||||
public static final String FROM_WELCOME = "from_welcome";
|
||||
public static final String WARN_CANNOT_ENCRYPT = "warn_cannot_encrypt";
|
||||
|
||||
private ConversationListFragment conversationListFragment;
|
||||
public TextView title;
|
||||
@@ -113,7 +112,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
// it is not needed to keep all past update messages, however, when deleted, also the strings should be deleted.
|
||||
try {
|
||||
DcContext dcContext = DcHelper.getContext(this);
|
||||
final String deviceMsgLabel = "update_1_46_0l_android";
|
||||
final String deviceMsgLabel = "update_1_50_0_android";
|
||||
if (!dcContext.wasDeviceMsgEverAdded(deviceMsgLabel)) {
|
||||
DcMsg msg = null;
|
||||
if (!getIntent().getBooleanExtra(FROM_WELCOME, false)) {
|
||||
@@ -124,7 +123,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
// Util.copy(inputStream, new FileOutputStream(outputFile));
|
||||
// msg.setFile(outputFile, "image/jpeg");
|
||||
|
||||
msg.setText(getString(R.string.update_1_46_android, "https://raw.githubusercontent.com/ArcaneChat/android/refs/heads/main/CHANGELOG.md"));
|
||||
msg.setText(getString(R.string.update_1_50_android, "https://raw.githubusercontent.com/ArcaneChat/android/refs/heads/main/CHANGELOG.md"));
|
||||
}
|
||||
dcContext.addDeviceMsg(deviceMsgLabel, msg);
|
||||
|
||||
@@ -257,6 +256,10 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
|
||||
@Override
|
||||
protected void onNewIntent(Intent intent) {
|
||||
if (isFinishing()) {
|
||||
Log.w(TAG, "Activity is finishing, aborting onNewIntent()");
|
||||
return;
|
||||
}
|
||||
super.onNewIntent(intent);
|
||||
setIntent(intent);
|
||||
refresh();
|
||||
@@ -274,11 +277,6 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
AccountManager.getInstance().switchAccountAndStartActivity(this, accountId);
|
||||
}
|
||||
|
||||
String warnAddr = getIntent().getStringExtra(WARN_CANNOT_ENCRYPT);
|
||||
if (!TextUtils.isEmpty(warnAddr)) {
|
||||
DcHelper.showEncryptionRequiredDialog(this, warnAddr);
|
||||
}
|
||||
|
||||
refreshAvatar();
|
||||
refreshUnreadIndicator();
|
||||
refreshTitle();
|
||||
@@ -458,9 +456,6 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
case R.id.menu_all_media:
|
||||
startActivity(new Intent(this, ProfileActivity.class));
|
||||
return true;
|
||||
case R.id.menu_webxdc_apps_store:
|
||||
handleShowBot("juegos@buzon.uy", "OPENPGP4FPR:d3d403a734be71fe9293a00311fef80dbe5dbc89#a=juegos%40buzon.uy&n=&i=WQZY-8FODS3&s=ZQBkaclFzao");
|
||||
return true;
|
||||
case R.id.menu_public_bots:
|
||||
handleShowBot("puente@buzon.uy", "OPENPGP4FPR:4B41E5AFAF78A0C71DB56138D5BEFED00A45F97A#a=puente%40buzon.uy&n=Public%20Bots&i=ZC_oaJtuvJP&s=5SE96rRovsK");
|
||||
return true;
|
||||
|
||||
@@ -56,6 +56,7 @@ import org.thoughtcrime.securesms.profiles.ProfileMediaConstraints;
|
||||
import org.thoughtcrime.securesms.proxy.ProxySettingsActivity;
|
||||
import org.thoughtcrime.securesms.qr.RegistrationQrActivity;
|
||||
import org.thoughtcrime.securesms.scribbles.ScribbleActivity;
|
||||
import org.thoughtcrime.securesms.util.IntentUtils;
|
||||
import org.thoughtcrime.securesms.util.Prefs;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
import org.thoughtcrime.securesms.util.views.ProgressDialog;
|
||||
@@ -333,14 +334,14 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
|
||||
|
||||
privacyPolicyBtn.setOnClickListener(view -> {
|
||||
if (!isDcLogin) {
|
||||
WebViewActivity.openUrlInBrowser(this, "https://" + providerHost + "/privacy.html");
|
||||
IntentUtils.showInBrowser(this, "https://" + providerHost + "/privacy.html");
|
||||
}
|
||||
});
|
||||
|
||||
signUpBtn.setOnClickListener(view -> createProfile());
|
||||
|
||||
findViewById(R.id.use_other_server).setOnClickListener((v) -> {
|
||||
WebViewActivity.openUrlInBrowser(this, INSTANCES_URL);
|
||||
IntentUtils.showInBrowser(this, INSTANCES_URL);
|
||||
});
|
||||
findViewById(R.id.login_button).setOnClickListener((v) -> {
|
||||
startRegistrationActivity();
|
||||
|
||||
@@ -207,7 +207,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
messageRecord = null;
|
||||
long date = getIntent().getLongExtra(DATE_EXTRA, 0);
|
||||
long size = getIntent().getLongExtra(SIZE_EXTRA, 0);
|
||||
initialMedia = new MediaItem(null, getIntent().getData(), getIntent().getType(),
|
||||
initialMedia = new MediaItem(null, getIntent().getData(), null, getIntent().getType(),
|
||||
DcMsg.DC_MSG_NO_ID, date, size, false);
|
||||
|
||||
if (address != null) {
|
||||
@@ -218,7 +218,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
} else {
|
||||
messageRecord = dcContext.getMsg(msgId);
|
||||
initialMedia = new MediaItem(Recipient.fromChat(context, msgId), Uri.fromFile(messageRecord.getFileAsFile()),
|
||||
messageRecord.getFilemime(), messageRecord.getId(), messageRecord.getDateReceived(),
|
||||
messageRecord.getFilename(), messageRecord.getFilemime(), messageRecord.getId(), messageRecord.getDateReceived(),
|
||||
messageRecord.getFilebytes(), messageRecord.isOutgoing());
|
||||
conversationRecipient = Recipient.fromChat(context, msgId);
|
||||
}
|
||||
@@ -232,12 +232,11 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
// if you search for the place where the media are loaded, go to 'onCreateLoader'.
|
||||
|
||||
Log.w(TAG, "Loading Part URI: " + initialMedia);
|
||||
|
||||
if (messageRecord != null) {
|
||||
getSupportLoaderManager().restartLoader(0, null, this);
|
||||
} else {
|
||||
mediaPager.setAdapter(new SingleItemPagerAdapter(this, GlideApp.with(this),
|
||||
getWindow(), initialMedia.uri, initialMedia.type, initialMedia.size));
|
||||
getWindow(), initialMedia.uri, initialMedia.name, initialMedia.type, initialMedia.size));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -313,7 +312,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
private void performSavetoDisk(@NonNull MediaItem mediaItem) {
|
||||
SaveAttachmentTask saveTask = new SaveAttachmentTask(MediaPreviewActivity.this);
|
||||
long saveDate = (mediaItem.date > 0) ? mediaItem.date : System.currentTimeMillis();
|
||||
saveTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new Attachment(mediaItem.uri, mediaItem.type, saveDate, null));
|
||||
saveTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new Attachment(mediaItem.uri, mediaItem.type, saveDate, mediaItem.name));
|
||||
}
|
||||
|
||||
private void showInChat() {
|
||||
@@ -473,9 +472,12 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
MediaItemAdapter adapter = (MediaItemAdapter)mediaPager.getAdapter();
|
||||
|
||||
if (adapter != null) {
|
||||
MediaItem item = adapter.getMediaItemFor(position);
|
||||
if (item.recipient != null) item.recipient.removeListener(MediaPreviewActivity.this);
|
||||
|
||||
try {
|
||||
MediaItem item = adapter.getMediaItemFor(position);
|
||||
if (item.recipient != null) item.recipient.removeListener(MediaPreviewActivity.this);
|
||||
} catch (IllegalArgumentException e) {
|
||||
Log.w(TAG, "Ignoring invalid position index");
|
||||
}
|
||||
adapter.pause(position);
|
||||
}
|
||||
}
|
||||
@@ -486,18 +488,20 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
private final GlideRequests glideRequests;
|
||||
private final Window window;
|
||||
private final Uri uri;
|
||||
private final String name;
|
||||
private final String mediaType;
|
||||
private final long size;
|
||||
|
||||
private final LayoutInflater inflater;
|
||||
|
||||
SingleItemPagerAdapter(@NonNull Context context, @NonNull GlideRequests glideRequests,
|
||||
@NonNull Window window, @NonNull Uri uri, @NonNull String mediaType,
|
||||
@NonNull Window window, @NonNull Uri uri, @Nullable String name, @NonNull String mediaType,
|
||||
long size)
|
||||
{
|
||||
this.glideRequests = glideRequests;
|
||||
this.window = window;
|
||||
this.uri = uri;
|
||||
this.name = name;
|
||||
this.mediaType = mediaType;
|
||||
this.size = size;
|
||||
this.inflater = LayoutInflater.from(context);
|
||||
@@ -519,7 +523,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
MediaView mediaView = itemView.findViewById(R.id.media_view);
|
||||
|
||||
try {
|
||||
mediaView.set(glideRequests, window, uri, mediaType, size, true);
|
||||
mediaView.set(glideRequests, window, uri, name, mediaType, size, true);
|
||||
} catch (IOException e) {
|
||||
Log.w(TAG, e);
|
||||
}
|
||||
@@ -539,7 +543,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
@Override
|
||||
public MediaItem getMediaItemFor(int position) {
|
||||
return new MediaItem(null, uri, mediaType, DcMsg.DC_MSG_NO_ID, -1, -1, true);
|
||||
return new MediaItem(null, uri, name, mediaType, DcMsg.DC_MSG_NO_ID, -1, -1, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -604,7 +608,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
try {
|
||||
//noinspection ConstantConditions
|
||||
mediaView.set(glideRequests, window, Uri.fromFile(msg.getFileAsFile()),
|
||||
mediaView.set(glideRequests, window, Uri.fromFile(msg.getFileAsFile()), msg.getFilename(),
|
||||
msg.getFilemime(), msg.getFilebytes(), autoplay);
|
||||
} catch (IOException e) {
|
||||
Log.w(TAG, e);
|
||||
@@ -633,6 +637,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
return new MediaItem(Recipient.fromChat(context, msg.getId()),
|
||||
Uri.fromFile(msg.getFileAsFile()),
|
||||
msg.getFilename(),
|
||||
msg.getFilemime(),
|
||||
msg.getId(),
|
||||
msg.getDateReceived(),
|
||||
@@ -655,6 +660,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
private static class MediaItem {
|
||||
private final @Nullable Recipient recipient;
|
||||
private final @NonNull Uri uri;
|
||||
private final @Nullable String name;
|
||||
private final @NonNull String type;
|
||||
private final int msgId;
|
||||
private final long date;
|
||||
@@ -663,6 +669,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
private MediaItem(@Nullable Recipient recipient,
|
||||
@NonNull Uri uri,
|
||||
@Nullable String name,
|
||||
@NonNull String type,
|
||||
int msgId,
|
||||
long date,
|
||||
@@ -671,6 +678,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
{
|
||||
this.recipient = recipient;
|
||||
this.uri = uri;
|
||||
this.name = name;
|
||||
this.type = type;
|
||||
this.msgId = msgId;
|
||||
this.date = date;
|
||||
|
||||
@@ -111,8 +111,6 @@ public class NewConversationActivity extends ContactSelectionActivity {
|
||||
int contactId = dcContext.lookupContactIdByAddr(addr);
|
||||
if (contactId!=0 && dcContext.getChatIdByContactId(contactId)!=0) {
|
||||
openConversation(dcContext.getChatIdByContactId(contactId));
|
||||
} else if (contactId == 0 && dcContext.isChatmail()) {
|
||||
DcHelper.showEncryptionRequiredDialog(this, addr);
|
||||
} else {
|
||||
String nameNAddr = contactId == 0 ? addr : dcContext.getContact(contactId).getNameNAddr();
|
||||
new AlertDialog.Builder(this)
|
||||
|
||||
@@ -16,7 +16,6 @@ import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_PROXY_ENABLED;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.getContext;
|
||||
import static org.thoughtcrime.securesms.service.IPCAddAccountsService.ACCOUNT_DATA;
|
||||
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Resources;
|
||||
@@ -438,7 +437,7 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
|
||||
.setPositiveButton(R.string.perm_continue, (dialog, which)-> {
|
||||
// pass control to browser, we'll be back in business at (**)
|
||||
activity.oauth2Requested = System.currentTimeMillis();
|
||||
IntentUtils.showBrowserIntent(activity, oauth2url);
|
||||
IntentUtils.showInBrowser(activity, oauth2url);
|
||||
oauth2started.set(true);
|
||||
})
|
||||
.setCancelable(false)
|
||||
@@ -493,11 +492,7 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
|
||||
if (provider!=null) {
|
||||
String url = provider.getOverviewPage();
|
||||
if(!url.isEmpty()) {
|
||||
try {
|
||||
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
||||
} catch (ActivityNotFoundException e) {
|
||||
Toast.makeText(this, R.string.no_browser_installed, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
IntentUtils.showInBrowser(this, url);
|
||||
} else {
|
||||
// this should normally not happen
|
||||
Toast.makeText(this, "ErrProviderWithoutUrl", Toast.LENGTH_LONG).show();
|
||||
|
||||
@@ -259,26 +259,18 @@ public class ShareActivity extends PassphraseRequiredActionBarActivity implement
|
||||
}
|
||||
*/
|
||||
|
||||
String addr = null;
|
||||
if(chatId == -1 && extraEmail != null && extraEmail.length > 0) {
|
||||
addr = extraEmail[0];
|
||||
final String addr = extraEmail[0];
|
||||
int contactId = dcContext.lookupContactIdByAddr(addr);
|
||||
|
||||
if(contactId != 0 || !dcContext.isChatmail()) {
|
||||
if(contactId == 0) {
|
||||
contactId = dcContext.createContact(null, addr);
|
||||
}
|
||||
|
||||
chatId = dcContext.createChatByContactId(contactId);
|
||||
addr = null;
|
||||
if(contactId == 0) {
|
||||
contactId = dcContext.createContact(null, addr);
|
||||
}
|
||||
|
||||
chatId = dcContext.createChatByContactId(contactId);
|
||||
}
|
||||
Intent composeIntent;
|
||||
if (addr != null) {
|
||||
composeIntent = new Intent(this, ConversationListActivity.class);
|
||||
composeIntent.putExtra(ConversationListActivity.WARN_CANNOT_ENCRYPT, addr);
|
||||
startActivity(composeIntent);
|
||||
} else if (chatId != -1) {
|
||||
if (chatId != -1) {
|
||||
composeIntent = getBaseShareIntent(ConversationActivity.class);
|
||||
composeIntent.putExtra(ConversationActivity.CHAT_ID_EXTRA, chatId);
|
||||
RelayUtil.setSharedType(composeIntent, msgType);
|
||||
|
||||
@@ -26,6 +26,7 @@ import androidx.webkit.ProxyController;
|
||||
import androidx.webkit.ProxyConfig;
|
||||
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
import org.thoughtcrime.securesms.util.IntentUtils;
|
||||
|
||||
public class WebViewActivity extends PassphraseRequiredActionBarActivity
|
||||
implements SearchView.OnQueryTextListener,
|
||||
@@ -278,16 +279,8 @@ public class WebViewActivity extends PassphraseRequiredActionBarActivity
|
||||
// onBackPressed() can be overwritten by derived classes as needed.
|
||||
// the default behavior (close the activity) is just fine eg. for Webxdc, Connectivity, HTML-mails
|
||||
|
||||
public static void openUrlInBrowser(Context context, String url) {
|
||||
try {
|
||||
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
||||
} catch (ActivityNotFoundException e) {
|
||||
Toast.makeText(context, R.string.no_browser_installed, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean openOnlineUrl(String url) {
|
||||
openUrlInBrowser(this, url);
|
||||
IntentUtils.showInBrowser(this, url);
|
||||
// returning `true` causes the WebView to abort loading
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@ import android.graphics.Bitmap;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Base64;
|
||||
@@ -46,6 +45,7 @@ import org.json.JSONObject;
|
||||
import org.thoughtcrime.securesms.connect.AccountManager;
|
||||
import org.thoughtcrime.securesms.connect.DcEventCenter;
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
import org.thoughtcrime.securesms.util.IntentUtils;
|
||||
import org.thoughtcrime.securesms.util.JsonUtils;
|
||||
import org.thoughtcrime.securesms.util.MediaUtil;
|
||||
import org.thoughtcrime.securesms.util.Prefs;
|
||||
@@ -68,6 +68,7 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE
|
||||
private static final String EXTRA_HIDE_ACTION_BAR = "hideActionBar";
|
||||
private static final String EXTRA_HREF = "href";
|
||||
private static final int REQUEST_CODE_FILE_PICKER = 51426;
|
||||
private static long lastOpenTime = 0;
|
||||
|
||||
private ValueCallback<Uri[]> filePathCallback;
|
||||
private DcContext dcContext;
|
||||
@@ -75,13 +76,23 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE
|
||||
private DcMsg dcAppMsg;
|
||||
private String baseURL;
|
||||
private String sourceCodeUrl = "";
|
||||
private String selfAddr = "";
|
||||
private String selfAddr;
|
||||
private int sendUpdateMaxSize;
|
||||
private int sendUpdateInterval;
|
||||
private boolean internetAccess = false;
|
||||
private boolean hideActionBar = false;
|
||||
|
||||
public static void openMaps(Context context, int chatId) {
|
||||
openMaps(context, chatId, "");
|
||||
}
|
||||
|
||||
public static void openMaps(Context context, int chatId, String href) {
|
||||
DcContext dcContext = DcHelper.getContext(context);
|
||||
int msgId = dcContext.initWebxdcIntegration(chatId);
|
||||
int msgId = 0;
|
||||
final int mapsVersion = 2;
|
||||
if (dcContext.getConfigInt("ui.maps_version") >= mapsVersion) {
|
||||
msgId = dcContext.initWebxdcIntegration(chatId);
|
||||
}
|
||||
if (msgId == 0) {
|
||||
try {
|
||||
InputStream inputStream = context.getResources().getAssets().open("webxdc/maps.xdc");
|
||||
@@ -96,8 +107,9 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE
|
||||
Toast.makeText(context, "Cannot get maps.xdc, see log for details.", Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
dcContext.setConfigInt("ui.maps_version", mapsVersion);
|
||||
}
|
||||
openWebxdcActivity(context, msgId, true, "");
|
||||
openWebxdcActivity(context, msgId, true, href);
|
||||
}
|
||||
|
||||
public static void openWebxdcActivity(Context context, DcMsg instance) {
|
||||
@@ -203,7 +215,9 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE
|
||||
// this is needed here because if the app is opened while already in landscape mode, onConfigurationChanged() is not triggered
|
||||
setScreenMode(getResources().getConfiguration());
|
||||
}
|
||||
selfAddr = JsonUtils.optString(info, "self_addr");
|
||||
selfAddr = info.optString("self_addr");
|
||||
sendUpdateMaxSize = info.optInt("send_update_max_size");
|
||||
sendUpdateInterval = info.optInt("send_update_interval");
|
||||
|
||||
toggleFakeProxy(!internetAccess);
|
||||
|
||||
@@ -220,7 +234,12 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE
|
||||
webView.setNetworkAvailable(internetAccess); // this does not block network but sets `window.navigator.isOnline` in js land
|
||||
webView.addJavascriptInterface(new InternalJSApi(), "InternalJSApi");
|
||||
|
||||
String href = b.getString(EXTRA_HREF, "");
|
||||
String extraHref = b.getString(EXTRA_HREF, "");
|
||||
if (TextUtils.isEmpty(extraHref)) {
|
||||
extraHref = "index.html";
|
||||
}
|
||||
|
||||
String href = baseURL + "/" + extraHref;
|
||||
String encodedHref = "";
|
||||
try {
|
||||
encodedHref = URLEncoder.encode(href, Charsets.UTF_8.name());
|
||||
@@ -252,6 +271,7 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
lastOpenTime = System.currentTimeMillis();
|
||||
DcHelper.getEventCenter(this.getApplicationContext()).removeObservers(this);
|
||||
leaveRealtimeChannel();
|
||||
super.onDestroy();
|
||||
@@ -274,7 +294,7 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE
|
||||
addToHomeScreen(this, dcAppMsg.getId());
|
||||
return true;
|
||||
case R.id.source_code:
|
||||
openUrlInBrowser(this, sourceCodeUrl);
|
||||
IntentUtils.showInBrowser(this, sourceCodeUrl);
|
||||
return true;
|
||||
case R.id.show_in_chat:
|
||||
showInChat();
|
||||
@@ -504,6 +524,16 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE
|
||||
return dcContext.isCommunity();
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public int sendUpdateMaxSize() {
|
||||
return WebxdcActivity.this.sendUpdateMaxSize;
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public int sendUpdateInterval() {
|
||||
return WebxdcActivity.this.sendUpdateInterval;
|
||||
}
|
||||
|
||||
@JavascriptInterface
|
||||
public String selfAddr() {
|
||||
if (dcContext.isCommunity() && !TextUtils.isEmpty(dcContext.getCommunityUser())) {
|
||||
|
||||
@@ -0,0 +1,140 @@
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.view.MenuItem;
|
||||
import android.webkit.WebResourceRequest;
|
||||
import android.webkit.WebResourceResponse;
|
||||
import android.webkit.WebSettings;
|
||||
import android.webkit.WebView;
|
||||
import android.webkit.WebViewClient;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
|
||||
import com.b44t.messenger.DcContext;
|
||||
import com.b44t.messenger.rpc.HttpResponse;
|
||||
import com.b44t.messenger.rpc.Rpc;
|
||||
import com.b44t.messenger.rpc.RpcException;
|
||||
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
import org.thoughtcrime.securesms.providers.PersistentBlobProvider;
|
||||
import org.thoughtcrime.securesms.util.IntentUtils;
|
||||
import org.thoughtcrime.securesms.util.MediaUtil;
|
||||
import org.thoughtcrime.securesms.util.Prefs;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class WebxdcStoreActivity extends PassphraseRequiredActionBarActivity {
|
||||
private static final String TAG = WebxdcStoreActivity.class.getSimpleName();
|
||||
|
||||
private DcContext dcContext;
|
||||
private Rpc rpc;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle state, boolean ready) {
|
||||
setContentView(R.layout.web_view_activity);
|
||||
rpc = DcHelper.getRpc(this);
|
||||
dcContext = DcHelper.getContext(this);
|
||||
WebView webView = findViewById(R.id.webview);
|
||||
|
||||
ActionBar actionBar = getSupportActionBar();
|
||||
if (actionBar != null) {
|
||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||
actionBar.setTitle(R.string.webxdc_apps);
|
||||
}
|
||||
|
||||
webView.setWebViewClient(new WebViewClient() {
|
||||
@Override
|
||||
public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
||||
String ext = MediaUtil.getFileExtensionFromUrl(Uri.parse(url).getPath());
|
||||
if ("xdc".equals(ext)) {
|
||||
Util.runOnAnyBackgroundThread(() -> {
|
||||
try {
|
||||
HttpResponse httpResponse = rpc.getHttpResponse(dcContext.getAccountId(), url);
|
||||
Uri uri = PersistentBlobProvider.getInstance().create(WebxdcStoreActivity.this, httpResponse.getBlob(), "application/octet-stream", "app.xdc");
|
||||
Intent intent = new Intent();
|
||||
intent.setData(uri);
|
||||
setResult(Activity.RESULT_OK, intent);
|
||||
finish();
|
||||
} catch (RpcException e) {
|
||||
e.printStackTrace();
|
||||
Util.runOnMain(() -> Toast.makeText(WebxdcStoreActivity.this, "Error: " + e.getMessage(), Toast.LENGTH_LONG).show());
|
||||
}
|
||||
});
|
||||
} else {
|
||||
IntentUtils.showInBrowser(WebxdcStoreActivity.this, url);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.N)
|
||||
@Override
|
||||
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
|
||||
return shouldOverrideUrlLoading(view, request.getUrl().toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
|
||||
return interceptRequest(request.getUrl().toString());
|
||||
}
|
||||
});
|
||||
|
||||
WebSettings webSettings = webView.getSettings();
|
||||
webSettings.setJavaScriptEnabled(true);
|
||||
webSettings.setAllowFileAccess(false);
|
||||
webSettings.setAllowContentAccess(false);
|
||||
webSettings.setGeolocationEnabled(false);
|
||||
webSettings.setAllowFileAccessFromFileURLs(false);
|
||||
webSettings.setAllowUniversalAccessFromFileURLs(false);
|
||||
webSettings.setDatabaseEnabled(true);
|
||||
webSettings.setDomStorageEnabled(true);
|
||||
webView.setNetworkAvailable(true); // this does not block network but sets `window.navigator.isOnline` in js land
|
||||
|
||||
webView.loadUrl(Prefs.getWebxdcStoreUrl(this));
|
||||
}
|
||||
|
||||
private WebResourceResponse interceptRequest(String url) {
|
||||
WebResourceResponse res = null;
|
||||
try {
|
||||
if (url == null) {
|
||||
throw new Exception("no url specified");
|
||||
}
|
||||
HttpResponse httpResponse = rpc.getHttpResponse(dcContext.getAccountId(), url);
|
||||
String mimeType = httpResponse.getMimetype();
|
||||
if (mimeType == null) {
|
||||
mimeType = "application/octet-stream";
|
||||
}
|
||||
|
||||
ByteArrayInputStream data = new ByteArrayInputStream(httpResponse.getBlob());
|
||||
res = new WebResourceResponse(mimeType, httpResponse.getEncoding(), data);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
ByteArrayInputStream data = new ByteArrayInputStream(("Could not load apps. Are you online?\n\n" + e.getMessage()).getBytes());
|
||||
res = new WebResourceResponse("text/plain", "UTF-8", data);
|
||||
}
|
||||
|
||||
HashMap<String, String> headers = new HashMap<>();
|
||||
headers.put("access-control-allow-origin", "*");
|
||||
res.setResponseHeaders(headers);
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
super.onOptionsItemSelected(item);
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home:
|
||||
finish();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -48,7 +48,7 @@ public class AudioRecorder {
|
||||
ParcelFileDescriptor fds[] = ParcelFileDescriptor.createPipe();
|
||||
|
||||
captureUri = blobProvider.create(context, new ParcelFileDescriptor.AutoCloseInputStream(fds[0]),
|
||||
MediaUtil.AUDIO_AAC, null, null);
|
||||
MediaUtil.AUDIO_AAC, "voice.aac", null);
|
||||
audioCodec = new AudioCodec(context);
|
||||
|
||||
audioCodec.start(new ParcelFileDescriptor.AutoCloseOutputStream(fds[1]));
|
||||
|
||||
@@ -87,11 +87,14 @@ public class AudioSlidePlayer {
|
||||
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
|
||||
if (playbackState == Player.STATE_READY) {
|
||||
Util.runOnMain(() -> {
|
||||
Log.d(TAG, "request duration " + durationCalculator.getDuration());
|
||||
getListener().onReceivedDuration(Long.valueOf(durationCalculator.getDuration()).intValue());
|
||||
durationCalculator.release();
|
||||
durationCalculator.removeListener(this);
|
||||
durationCalculator = null;
|
||||
synchronized (AudioSlidePlayer.this) {
|
||||
if (durationCalculator == null) return;
|
||||
Log.d(TAG, "request duration " + durationCalculator.getDuration());
|
||||
getListener().onReceivedDuration(Long.valueOf(durationCalculator.getDuration()).intValue());
|
||||
durationCalculator.release();
|
||||
durationCalculator.removeListener(this);
|
||||
durationCalculator = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,6 +41,7 @@ public class AttachmentTypeSelector extends PopupWindow {
|
||||
public static final int TAKE_PHOTO = 5;
|
||||
public static final int ADD_LOCATION = 6;
|
||||
public static final int RECORD_VIDEO = 7;
|
||||
public static final int ADD_WEBXDC = 8;
|
||||
|
||||
private static final int ANIMATION_DURATION = 300;
|
||||
|
||||
@@ -53,7 +54,7 @@ public class AttachmentTypeSelector extends PopupWindow {
|
||||
//private final @NonNull ImageView cameraButton;
|
||||
private final @NonNull ImageView videoButton;
|
||||
private final @NonNull ImageView locationButton;
|
||||
private final @NonNull ImageView closeButton;
|
||||
private final @NonNull ImageView webxdcButton;
|
||||
|
||||
private @Nullable View currentAnchor;
|
||||
private @Nullable AttachmentClickedListener listener;
|
||||
@@ -76,7 +77,7 @@ public class AttachmentTypeSelector extends PopupWindow {
|
||||
//this.cameraButton = ViewUtil.findById(layout, R.id.camera_button);
|
||||
this.videoButton = ViewUtil.findById(layout, R.id.record_video_button);
|
||||
this.locationButton = ViewUtil.findById(layout, R.id.location_button);
|
||||
this.closeButton = ViewUtil.findById(layout, R.id.close_button);
|
||||
this.webxdcButton = ViewUtil.findById(layout, R.id.webxdc_button);
|
||||
|
||||
this.imageButton.setOnClickListener(new PropagatingClickListener(ADD_GALLERY));
|
||||
this.videoChatButton.setOnClickListener(new PropagatingClickListener(INVITE_VIDEO_CHAT));
|
||||
@@ -85,7 +86,7 @@ public class AttachmentTypeSelector extends PopupWindow {
|
||||
//this.cameraButton.setOnClickListener(new PropagatingClickListener(TAKE_PHOTO));
|
||||
this.videoButton.setOnClickListener(new PropagatingClickListener(RECORD_VIDEO));
|
||||
this.locationButton.setOnClickListener(new PropagatingClickListener(ADD_LOCATION));
|
||||
this.closeButton.setOnClickListener(new CloseClickListener());
|
||||
this.webxdcButton.setOnClickListener(new PropagatingClickListener(ADD_WEBXDC));
|
||||
this.recentRail.setListener(new RecentPhotoSelectedListener());
|
||||
|
||||
if (!Prefs.isLocationStreamingEnabled(context)) {
|
||||
@@ -140,8 +141,8 @@ public class AttachmentTypeSelector extends PopupWindow {
|
||||
animateButtonIn(contactButton, ANIMATION_DURATION / 3);
|
||||
animateButtonIn(locationButton, ANIMATION_DURATION / 4);
|
||||
animateButtonIn(documentButton, ANIMATION_DURATION / 4);
|
||||
animateButtonIn(webxdcButton, 0);
|
||||
animateButtonIn(videoChatButton, 0);
|
||||
animateButtonIn(closeButton, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -289,13 +290,6 @@ public class AttachmentTypeSelector extends PopupWindow {
|
||||
|
||||
}
|
||||
|
||||
private class CloseClickListener implements View.OnClickListener {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
public interface AttachmentClickedListener {
|
||||
public void onClick(int type);
|
||||
public void onQuickAttachment(Uri uri);
|
||||
|
||||
@@ -3,10 +3,10 @@ package org.thoughtcrime.securesms.components;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
@@ -55,6 +55,7 @@ public class MediaView extends FrameLayout {
|
||||
public void set(@NonNull GlideRequests glideRequests,
|
||||
@NonNull Window window,
|
||||
@NonNull Uri source,
|
||||
@Nullable String fileName,
|
||||
@NonNull String mediaType,
|
||||
long size,
|
||||
boolean autoplay)
|
||||
@@ -68,7 +69,7 @@ public class MediaView extends FrameLayout {
|
||||
imageView.setVisibility(View.GONE);
|
||||
videoView.get().setVisibility(View.VISIBLE);
|
||||
videoView.get().setWindow(window);
|
||||
videoView.get().setVideoSource(new VideoSlide(getContext(), source, size), autoplay);
|
||||
videoView.get().setVideoSource(new VideoSlide(getContext(), source, fileName, size), autoplay);
|
||||
} else {
|
||||
throw new IOException("Unsupported media type: " + mediaType);
|
||||
}
|
||||
|
||||
@@ -29,7 +29,12 @@ public class AttachmentsContentProvider extends ContentProvider {
|
||||
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
|
||||
DcContext dcContext = DcHelper.getContext(getContext());
|
||||
|
||||
String path = uri.getPath();
|
||||
// `uri` originally comes from DcHelper.openForViewOrShare() and
|
||||
// looks like `content://chat.delta.attachments/ef39a39/text.txt`
|
||||
// where ef39a39 is the file in the blob directory
|
||||
// and text.txt is the original name of the file, as returned by `msg.getFilename()`.
|
||||
// `uri.getPathSegments()` returns ["ef39a39", "text.txt"] in this example.
|
||||
String path = uri.getPathSegments().get(0);
|
||||
if (!DcHelper.sharedFiles.containsKey(path)) {
|
||||
throw new FileNotFoundException("File was not shared before.");
|
||||
}
|
||||
|
||||
@@ -284,6 +284,7 @@ public class DcHelper {
|
||||
|
||||
DcMsg msg = dcContext.getMsg(msg_id);
|
||||
String path = msg.getFile();
|
||||
String filename = msg.getFilename();
|
||||
String mimeType = msg.getFilemime();
|
||||
try {
|
||||
File file = new File(path);
|
||||
@@ -294,8 +295,11 @@ public class DcHelper {
|
||||
|
||||
Uri uri;
|
||||
if (path.startsWith(dcContext.getBlobdir())) {
|
||||
uri = Uri.parse("content://" + BuildConfig.APPLICATION_ID + ".attachments/" + Uri.encode(file.getName()));
|
||||
sharedFiles.put("/" + file.getName(), 1); // as different Android version handle uris in putExtra differently, we also check them on our own
|
||||
// Build a Uri that will later be passed to AttachmentsContentProvider.openFile().
|
||||
// The last part needs to be `filename`, i.e. the original, user-visible name of the file,
|
||||
// so that the external apps show the name of the file correctly.
|
||||
uri = Uri.parse("content://" + BuildConfig.APPLICATION_ID + ".attachments/" + Uri.encode(file.getName()) + "/" + Uri.encode(filename));
|
||||
sharedFiles.put(file.getName(), 1); // as different Android version handle uris in putExtra differently, we also check them on our own
|
||||
} else {
|
||||
if (Build.VERSION.SDK_INT >= 24) {
|
||||
uri = FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + ".fileprovider", file);
|
||||
@@ -305,7 +309,7 @@ public class DcHelper {
|
||||
}
|
||||
|
||||
if (cmd.equals(Intent.ACTION_VIEW)) {
|
||||
mimeType = checkMime(path, mimeType);
|
||||
mimeType = checkMime(filename, mimeType);
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||
intent.setDataAndType(uri, mimeType);
|
||||
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||
@@ -494,16 +498,6 @@ public class DcHelper {
|
||||
.show();
|
||||
}
|
||||
|
||||
public static void showEncryptionRequiredDialog(Context context, String addr) {
|
||||
new AlertDialog.Builder(context)
|
||||
.setMessage(context.getString(R.string.encryption_required_for_new_contact, addr))
|
||||
.setNeutralButton(R.string.learn_more, (d, w) -> openHelp(context, "#howtoe2ee"))
|
||||
.setNegativeButton(R.string.qrscan_title, (d, w) -> context.startActivity(new Intent(context, QrActivity.class)))
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
.setCancelable(true)
|
||||
.show();
|
||||
}
|
||||
|
||||
public static void openWebxdc(Context context, DcMsg dcMsg) {
|
||||
JSONObject info = dcMsg.getWebxdcInfo();
|
||||
if (JsonUtils.optBoolean(info, "community")) {
|
||||
|
||||
@@ -16,6 +16,7 @@ import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.components.AvatarView;
|
||||
import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto;
|
||||
import org.thoughtcrime.securesms.mms.GlideRequests;
|
||||
import org.thoughtcrime.securesms.util.DateUtils;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientModifiedListener;
|
||||
import org.thoughtcrime.securesms.util.ThemeUtil;
|
||||
@@ -109,6 +110,19 @@ public class ContactSelectionListItem extends LinearLayout implements RecipientM
|
||||
this.nameView.setEnabled(true);
|
||||
this.nameView.setText(name==null? "#" : name);
|
||||
|
||||
if (contact != null) {
|
||||
if (contact.isBot()) {
|
||||
number = getContext().getString(R.string.bot);
|
||||
} else if (contact.wasSeenRecently()) {
|
||||
number = getContext().getString(R.string.online);
|
||||
} else {
|
||||
long timestamp = contact.getLastSeen();
|
||||
if (timestamp != 0) {
|
||||
number = getContext().getString(R.string.last_seen_at, DateUtils.getExtendedTimeSpanString(getContext(), timestamp));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(number!=null) {
|
||||
this.numberView.setText(number == null ? "" : number);
|
||||
this.labelView.setText(label==null? "" : label);
|
||||
|
||||
@@ -50,6 +50,7 @@ import org.thoughtcrime.securesms.ApplicationContext;
|
||||
import org.thoughtcrime.securesms.MediaPreviewActivity;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.ShareLocationDialog;
|
||||
import org.thoughtcrime.securesms.WebxdcStoreActivity;
|
||||
import org.thoughtcrime.securesms.attachments.Attachment;
|
||||
import org.thoughtcrime.securesms.attachments.UriAttachment;
|
||||
import org.thoughtcrime.securesms.audio.AudioSlidePlayer;
|
||||
@@ -124,11 +125,6 @@ public class AttachmentManager {
|
||||
removableMediaView.setRemoveClickListener(new RemoveButtonListener());
|
||||
removableMediaView.setEditClickListener(new EditButtonListener());
|
||||
thumbnail.setOnClickListener(new ThumbnailClickListener());
|
||||
int incomingBubbleColor = ThemeUtil.getThemedColor(context, R.attr.conversation_item_incoming_bubble_color);
|
||||
audioView.getBackground().setColorFilter(incomingBubbleColor, PorterDuff.Mode.MULTIPLY);
|
||||
documentView.getBackground().setColorFilter(incomingBubbleColor, PorterDuff.Mode.MULTIPLY);
|
||||
webxdcView.getBackground().setColorFilter(incomingBubbleColor, PorterDuff.Mode.MULTIPLY);
|
||||
vcardView.getBackground().setColorFilter(incomingBubbleColor, PorterDuff.Mode.MULTIPLY);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -260,11 +256,11 @@ public class AttachmentManager {
|
||||
return new DocumentSlide(context, msg);
|
||||
}
|
||||
else if (PartAuthority.isLocalUri(uri)) {
|
||||
return getManuallyCalculatedSlideInfo(uri, width, height);
|
||||
return getManuallyCalculatedSlideInfo(uri, width, height, msg);
|
||||
} else {
|
||||
Slide result = getContentResolverSlideInfo(uri, width, height, chatId);
|
||||
|
||||
if (result == null) return getManuallyCalculatedSlideInfo(uri, width, height);
|
||||
if (result == null) return getManuallyCalculatedSlideInfo(uri, width, height, msg);
|
||||
else return result;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
@@ -365,16 +361,21 @@ public class AttachmentManager {
|
||||
return null;
|
||||
}
|
||||
|
||||
private @NonNull Slide getManuallyCalculatedSlideInfo(Uri uri, int width, int height) throws IOException {
|
||||
private @NonNull Slide getManuallyCalculatedSlideInfo(Uri uri, int width, int height, @Nullable DcMsg msg) throws IOException {
|
||||
long start = System.currentTimeMillis();
|
||||
Long mediaSize = null;
|
||||
String fileName = null;
|
||||
String mimeType = null;
|
||||
|
||||
if (msg != null) {
|
||||
fileName = msg.getFilename();
|
||||
mimeType = msg.getFilemime();
|
||||
}
|
||||
|
||||
if (PartAuthority.isLocalUri(uri)) {
|
||||
mediaSize = PartAuthority.getAttachmentSize(context, uri);
|
||||
fileName = PartAuthority.getAttachmentFileName(context, uri);
|
||||
mimeType = PartAuthority.getAttachmentContentType(context, uri);
|
||||
if (fileName == null) fileName = PartAuthority.getAttachmentFileName(context, uri);
|
||||
if (mimeType == null) mimeType = PartAuthority.getAttachmentContentType(context, uri);
|
||||
}
|
||||
|
||||
if (mediaSize == null) {
|
||||
@@ -451,6 +452,11 @@ public class AttachmentManager {
|
||||
selectMediaType(activity, "*/*", null, requestCode);
|
||||
}
|
||||
|
||||
public static void selectWebxdc(Activity activity, int requestCode) {
|
||||
Intent intent = new Intent(activity, WebxdcStoreActivity.class);
|
||||
activity.startActivityForResult(intent, requestCode);
|
||||
}
|
||||
|
||||
public static void selectGallery(Activity activity, int requestCode) {
|
||||
// to enable camera roll,
|
||||
// we're asking for "gallery permissions" also on newer systems that do not strictly require that.
|
||||
@@ -674,10 +680,10 @@ public class AttachmentManager {
|
||||
}
|
||||
|
||||
switch (this) {
|
||||
case IMAGE: return new ImageSlide(context, uri, dataSize, width, height);
|
||||
case GIF: return new GifSlide(context, uri, dataSize, width, height);
|
||||
case IMAGE: return new ImageSlide(context, uri, fileName, dataSize, width, height);
|
||||
case GIF: return new GifSlide(context, uri, fileName, dataSize, width, height);
|
||||
case AUDIO: return new AudioSlide(context, uri, dataSize, false, fileName);
|
||||
case VIDEO: return new VideoSlide(context, uri, dataSize);
|
||||
case VIDEO: return new VideoSlide(context, uri, fileName, dataSize);
|
||||
case DOCUMENT:
|
||||
// We have to special-case Webxdc slides: The user can interact with them as soon as a draft
|
||||
// is set. Therefore we need to create a DcMsg already now.
|
||||
|
||||
@@ -14,8 +14,8 @@ public class GifSlide extends ImageSlide {
|
||||
super(context, dcMsg);
|
||||
}
|
||||
|
||||
public GifSlide(Context context, Uri uri, long size, int width, int height) {
|
||||
super(context, constructAttachmentFromUri(context, uri, MediaUtil.IMAGE_GIF, size, width, height, uri, null, false));
|
||||
public GifSlide(Context context, Uri uri, String fileName, long size, int width, int height) {
|
||||
super(context, constructAttachmentFromUri(context, uri, MediaUtil.IMAGE_GIF, size, width, height, uri, fileName, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -39,8 +39,8 @@ public class ImageSlide extends Slide {
|
||||
super(context, attachment);
|
||||
}
|
||||
|
||||
public ImageSlide(Context context, Uri uri, long size, int width, int height) {
|
||||
super(context, constructAttachmentFromUri(context, uri, MediaUtil.IMAGE_JPEG, size, width, height, uri, null, false));
|
||||
public ImageSlide(Context context, Uri uri, String fileName, long size, int width, int height) {
|
||||
super(context, constructAttachmentFromUri(context, uri, MediaUtil.IMAGE_JPEG, size, width, height, uri, fileName, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -15,8 +15,6 @@ import com.bumptech.glide.Registry;
|
||||
import com.bumptech.glide.annotation.GlideModule;
|
||||
import com.bumptech.glide.load.model.UnitModelLoader;
|
||||
import com.bumptech.glide.module.AppGlideModule;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
import com.github.penfeizhou.animation.glide.AnimationDecoderOption;
|
||||
|
||||
import com.caverock.androidsvg.SVG;
|
||||
|
||||
@@ -42,7 +40,6 @@ public class SignalGlideModule extends AppGlideModule {
|
||||
@Override
|
||||
public void applyOptions(Context context, GlideBuilder builder) {
|
||||
builder.setLogLevel(Log.ERROR);
|
||||
builder.setDefaultRequestOptions(new RequestOptions().set(AnimationDecoderOption.DISABLE_ANIMATION_APNG_DECODER, true));
|
||||
// builder.setDiskCache(new NoopDiskCacheFactory());
|
||||
}
|
||||
|
||||
|
||||
@@ -30,16 +30,16 @@ import java.io.File;
|
||||
|
||||
public class VideoSlide extends Slide {
|
||||
|
||||
private static Attachment constructVideoAttachment(Context context, Uri uri, long dataSize)
|
||||
private static Attachment constructVideoAttachment(Context context, Uri uri, String fileName, long dataSize)
|
||||
{
|
||||
Uri thumbnailUri = Uri.fromFile(new File(DcHelper.getBlobdirFile(DcHelper.getContext(context), "temp-preview.jpg")));
|
||||
MediaUtil.ThumbnailSize retWh = new MediaUtil.ThumbnailSize(0, 0);
|
||||
MediaUtil.createVideoThumbnailIfNeeded(context, uri, thumbnailUri, retWh);
|
||||
return constructAttachmentFromUri(context, uri, MediaUtil.VIDEO_UNSPECIFIED, dataSize, retWh.width, retWh.height, thumbnailUri, null, false);
|
||||
return constructAttachmentFromUri(context, uri, MediaUtil.VIDEO_UNSPECIFIED, dataSize, retWh.width, retWh.height, thumbnailUri, fileName, false);
|
||||
}
|
||||
|
||||
public VideoSlide(Context context, Uri uri, long dataSize) {
|
||||
super(context, constructVideoAttachment(context, uri, dataSize));
|
||||
public VideoSlide(Context context, Uri uri, String fileName, long dataSize) {
|
||||
super(context, constructVideoAttachment(context, uri, fileName, dataSize));
|
||||
}
|
||||
|
||||
public VideoSlide(Context context, DcMsg dcMsg) {
|
||||
|
||||
@@ -675,15 +675,11 @@ public class NotificationCenter {
|
||||
}
|
||||
|
||||
public void updateVisibleWebxdc(int accountId, int msgId) {
|
||||
Util.runOnAnyBackgroundThread(() -> {
|
||||
|
||||
if (accountId != 0 && msgId != 0) {
|
||||
visibleWebxdc = new Pair<>(accountId, msgId);
|
||||
} else {
|
||||
visibleWebxdc = null;
|
||||
}
|
||||
|
||||
});
|
||||
if (accountId != 0 && msgId != 0) {
|
||||
visibleWebxdc = new Pair<>(accountId, msgId);
|
||||
} else {
|
||||
visibleWebxdc = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void clearVisibleWebxdc() {
|
||||
|
||||
@@ -42,6 +42,7 @@ import org.thoughtcrime.securesms.connect.DcEventCenter;
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
import org.thoughtcrime.securesms.mms.AttachmentManager;
|
||||
import org.thoughtcrime.securesms.permissions.Permissions;
|
||||
import org.thoughtcrime.securesms.util.Prefs;
|
||||
import org.thoughtcrime.securesms.util.ScreenLockUtil;
|
||||
import org.thoughtcrime.securesms.util.StorageUtil;
|
||||
import org.thoughtcrime.securesms.util.StreamUtil;
|
||||
@@ -134,6 +135,10 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment
|
||||
webrtcInstance.setOnPreferenceClickListener(new WebrtcInstanceListener());
|
||||
updateWebrtcSummary();
|
||||
|
||||
Preference webxdcStore = this.findPreference(Prefs.WEBXDC_STORE_URL_PREF);
|
||||
webxdcStore.setOnPreferenceClickListener(new WebxdcStoreUrlListener());
|
||||
updateWebxdcStoreSummary();
|
||||
|
||||
Preference developerModeEnabled = this.findPreference("pref_developer_mode_enabled");
|
||||
developerModeEnabled.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
WebView.setWebContentsDebuggingEnabled((Boolean) newValue);
|
||||
@@ -280,6 +285,29 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment
|
||||
}
|
||||
}
|
||||
|
||||
private class WebxdcStoreUrlListener implements Preference.OnPreferenceClickListener {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
View gl = View.inflate(getActivity(), R.layout.single_line_input, null);
|
||||
EditText inputField = gl.findViewById(R.id.input_field);
|
||||
inputField.setHint(Prefs.DEFAULT_WEBXDC_STORE_URL);
|
||||
inputField.setText(Prefs.getWebxdcStoreUrl(getActivity()));
|
||||
inputField.setSelection(inputField.getText().length());
|
||||
inputField.setInputType(TYPE_TEXT_VARIATION_URI);
|
||||
new AlertDialog.Builder(getActivity())
|
||||
.setTitle(R.string.webxdc_store_url)
|
||||
.setMessage(R.string.webxdc_store_url_explain)
|
||||
.setView(gl)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.setPositiveButton(android.R.string.ok, (dlg, btn) -> {
|
||||
Prefs.setWebxdcStoreUrl(getActivity(), inputField.getText().toString());
|
||||
updateWebxdcStoreSummary();
|
||||
})
|
||||
.show();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private void updateWebrtcSummary() {
|
||||
Preference webrtcInstance = this.findPreference("pref_webrtc_instance");
|
||||
if (webrtcInstance != null) {
|
||||
@@ -288,6 +316,13 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment
|
||||
}
|
||||
}
|
||||
|
||||
private void updateWebxdcStoreSummary() {
|
||||
Preference preference = this.findPreference(Prefs.WEBXDC_STORE_URL_PREF);
|
||||
if (preference != null) {
|
||||
preference.setSummary(Prefs.getWebxdcStoreUrl(getActivity()));
|
||||
}
|
||||
}
|
||||
|
||||
private void openRegistrationActivity() {
|
||||
Intent intent = new Intent(getActivity(), RegistrationActivity.class);
|
||||
startActivity(intent);
|
||||
|
||||
@@ -72,6 +72,9 @@ public class PersistentBlobProvider {
|
||||
@Nullable String fileName)
|
||||
{
|
||||
final long id = System.currentTimeMillis();
|
||||
if (fileName == null) {
|
||||
fileName = "file." + MediaUtil.getExtensionFromMimeType(mimeType);
|
||||
}
|
||||
return create(context, new ByteArrayInputStream(blobBytes), id, mimeType, fileName, (long) blobBytes.length);
|
||||
}
|
||||
|
||||
@@ -81,6 +84,9 @@ public class PersistentBlobProvider {
|
||||
@Nullable String fileName,
|
||||
@Nullable Long fileSize)
|
||||
{
|
||||
if (fileName == null) {
|
||||
fileName = "file." + MediaUtil.getExtensionFromMimeType(mimeType);
|
||||
}
|
||||
return create(context, input, System.currentTimeMillis(), mimeType, fileName, fileSize);
|
||||
}
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ public class QrCodeHandler {
|
||||
showDoneToast(activity);
|
||||
});
|
||||
if (rawString.toLowerCase().startsWith("http")) {
|
||||
builder.setNeutralButton(R.string.open, (d, b) -> IntentUtils.showBrowserIntent(activity, rawString));
|
||||
builder.setNeutralButton(R.string.open, (d, b) -> IntentUtils.showInBrowser(activity, rawString));
|
||||
}
|
||||
builder.setNegativeButton(R.string.cancel, null);
|
||||
builder.setCancelable(false);
|
||||
@@ -182,7 +182,7 @@ public class QrCodeHandler {
|
||||
final String url = qrParsed.getText1();
|
||||
String msg = String.format(activity.getString(R.string.qrscan_contains_url), url);
|
||||
builder.setMessage(msg);
|
||||
builder.setPositiveButton(R.string.open, (dialog, which) -> IntentUtils.showBrowserIntent(activity, url));
|
||||
builder.setPositiveButton(R.string.open, (dialog, which) -> IntentUtils.showInBrowser(activity, url));
|
||||
builder.setNegativeButton(android.R.string.cancel, null);
|
||||
builder.setNeutralButton(R.string.menu_copy_to_clipboard, (dialog, which) -> {
|
||||
Util.writeTextToClipboard(activity, url);
|
||||
|
||||
@@ -16,6 +16,7 @@ import com.b44t.messenger.DcContext;
|
||||
import com.b44t.messenger.DcMsg;
|
||||
import com.b44t.messenger.rpc.Reactions;
|
||||
import com.b44t.messenger.rpc.Rpc;
|
||||
import com.b44t.messenger.rpc.RpcException;
|
||||
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
@@ -124,12 +125,14 @@ public class AddReactionView extends LinearLayout {
|
||||
String result = null;
|
||||
try {
|
||||
final Reactions reactions = rpc.getMsgReactions(dcContext.getAccountId(), msgToReactTo.getId());
|
||||
final Map<Integer, String[]> reactionsByContact = reactions.getReactionsByContact();
|
||||
final String [] selfReactions = reactionsByContact.get(DcContact.DC_CONTACT_ID_SELF);
|
||||
if (selfReactions != null && selfReactions.length > 0) {
|
||||
result = selfReactions[0];
|
||||
if (reactions != null) {
|
||||
final Map<Integer, String[]> reactionsByContact = reactions.getReactionsByContact();
|
||||
final String [] selfReactions = reactionsByContact.get(DcContact.DC_CONTACT_ID_SELF);
|
||||
if (selfReactions != null && selfReactions.length > 0) {
|
||||
result = selfReactions[0];
|
||||
}
|
||||
}
|
||||
} catch(Exception e) {
|
||||
} catch(RpcException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return result;
|
||||
|
||||
@@ -16,6 +16,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
import com.b44t.messenger.DcContact;
|
||||
import com.b44t.messenger.DcContext;
|
||||
import com.b44t.messenger.DcEvent;
|
||||
import com.b44t.messenger.rpc.Reactions;
|
||||
import com.b44t.messenger.rpc.RpcException;
|
||||
|
||||
import org.thoughtcrime.securesms.ProfileActivity;
|
||||
@@ -85,17 +86,20 @@ public class ReactionsDetailsFragment extends DialogFragment implements DcEventC
|
||||
|
||||
int accId = DcHelper.getContext(requireActivity()).getAccountId();
|
||||
try {
|
||||
Map<Integer, String[]> reactionsByContact = DcHelper.getRpc(requireActivity()).getMsgReactions(accId, msgId).getReactionsByContact();
|
||||
final Reactions reactions = DcHelper.getRpc(requireActivity()).getMsgReactions(accId, msgId);
|
||||
ArrayList<Pair<Integer, String>> contactsReactions = new ArrayList<>();
|
||||
String[] selfReactions = reactionsByContact.remove(DcContact.DC_CONTACT_ID_SELF);
|
||||
for (Integer contact: reactionsByContact.keySet()) {
|
||||
for (String reaction: reactionsByContact.get(contact)) {
|
||||
contactsReactions.add(new Pair<>(contact, reaction));
|
||||
if (reactions != null) {
|
||||
Map<Integer, String[]> reactionsByContact = reactions.getReactionsByContact();
|
||||
String[] selfReactions = reactionsByContact.remove(DcContact.DC_CONTACT_ID_SELF);
|
||||
for (Integer contact: reactionsByContact.keySet()) {
|
||||
for (String reaction: reactionsByContact.get(contact)) {
|
||||
contactsReactions.add(new Pair<>(contact, reaction));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (selfReactions != null) {
|
||||
for (String reaction: selfReactions) {
|
||||
contactsReactions.add(new Pair<>(DcContact.DC_CONTACT_ID_SELF, reaction));
|
||||
if (selfReactions != null) {
|
||||
for (String reaction: selfReactions) {
|
||||
contactsReactions.add(new Pair<>(DcContact.DC_CONTACT_ID_SELF, reaction));
|
||||
}
|
||||
}
|
||||
}
|
||||
adapter.changeData(contactsReactions);
|
||||
|
||||
@@ -21,6 +21,8 @@ import org.thoughtcrime.securesms.util.Util;
|
||||
public final class FetchForegroundService extends Service {
|
||||
private static final String TAG = FcmReceiveService.class.getSimpleName();
|
||||
private static final Object SERVICE_LOCK = new Object();
|
||||
private static final Object STOP_NOTIFIER = new Object();
|
||||
private static volatile boolean fetchingSynchronously = false;
|
||||
private static Intent service;
|
||||
|
||||
public static void start(Context context) {
|
||||
@@ -30,15 +32,44 @@ public final class FetchForegroundService extends Service {
|
||||
}
|
||||
|
||||
GenericForegroundService.createFgNotificationChannel(context);
|
||||
synchronized (SERVICE_LOCK) {
|
||||
if (service == null) {
|
||||
service = new Intent(context, FetchForegroundService.class);
|
||||
ContextCompat.startForegroundService(context, service);
|
||||
try {
|
||||
synchronized (SERVICE_LOCK) {
|
||||
if (service == null) {
|
||||
service = new Intent(context, FetchForegroundService.class);
|
||||
ContextCompat.startForegroundService(context, service);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.w(TAG, "Failed to start foreground service: " + e + ", fetching in background.");
|
||||
// According to the documentation https://firebase.google.com/docs/cloud-messaging/android/receive,
|
||||
// we need to handle the message within 20s, and the time window may be even shorter than 20s,
|
||||
// so, use 10s to be safe.
|
||||
fetchingSynchronously = true;
|
||||
if (ApplicationContext.dcAccounts.backgroundFetch(10)) {
|
||||
// The background fetch was successful, but we need to wait until all events were processed.
|
||||
// After all events were processed, we will get DC_EVENT_ACCOUNTS_BACKGROUND_FETCH_DONE,
|
||||
// and stop() will be called.
|
||||
synchronized (STOP_NOTIFIER) {
|
||||
while (fetchingSynchronously) {
|
||||
try {
|
||||
// The `wait()` needs to be enclosed in a while loop because there may be
|
||||
// "spurious wake-ups", i.e. `wait()` may return even though `notifyAll()` wasn't called.
|
||||
STOP_NOTIFIER.wait();
|
||||
} catch (InterruptedException ex) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void stop(Context context) {
|
||||
if (fetchingSynchronously) {
|
||||
fetchingSynchronously = false;
|
||||
synchronized (STOP_NOTIFIER) {
|
||||
STOP_NOTIFIER.notifyAll();
|
||||
}
|
||||
}
|
||||
|
||||
synchronized (SERVICE_LOCK) {
|
||||
if (service != null) {
|
||||
context.stopService(service);
|
||||
|
||||
@@ -2,14 +2,18 @@ package org.thoughtcrime.securesms.util;
|
||||
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.thoughtcrime.securesms.R;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class IntentUtils {
|
||||
@@ -19,9 +23,13 @@ public class IntentUtils {
|
||||
return resolveInfoList != null && resolveInfoList.size() > 1;
|
||||
}
|
||||
|
||||
public static void showBrowserIntent(Context context, String url) {
|
||||
public static void showInBrowser(Context context, String url) {
|
||||
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
|
||||
context.startActivity(browserIntent);
|
||||
try {
|
||||
context.startActivity(browserIntent);
|
||||
} catch (ActivityNotFoundException e) {
|
||||
Toast.makeText(context, R.string.no_browser_installed, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
|
||||
public static int FLAG_MUTABLE() {
|
||||
|
||||
@@ -58,18 +58,14 @@ public class LongClickCopySpan extends ClickableSpan {
|
||||
String addr = prepareUrl(url);
|
||||
Activity activity = (Activity) widget.getContext();
|
||||
DcContext dcContext = DcHelper.getContext(activity);
|
||||
int contactId = dcContext.lookupContactIdByAddr(addr);
|
||||
DcContact contact = (contactId != 0)? dcContext.getContact(contactId) : null;
|
||||
if (contact != null && !contact.isBlocked() && dcContext.getChatIdByContactId(contactId) != 0) {
|
||||
DcContact contact = dcContext.getContact(dcContext.createContact(null, addr));
|
||||
if (contact.getId() != 0 && !contact.isBlocked() && dcContext.getChatIdByContactId(contact.getId()) != 0) {
|
||||
openChat(activity, contact);
|
||||
} else if (contact == null && dcContext.isChatmail()) {
|
||||
DcHelper.showEncryptionRequiredDialog(activity, addr);
|
||||
} else {
|
||||
String nameNAddr = contact != null ? contact.getNameNAddr() : addr;
|
||||
new AlertDialog.Builder(activity)
|
||||
.setMessage(activity.getString(R.string.ask_start_chat_with, nameNAddr))
|
||||
.setMessage(activity.getString(R.string.ask_start_chat_with, contact.getNameNAddr()))
|
||||
.setPositiveButton(android.R.string.ok, (dialog, which) -> {
|
||||
openChat(activity, contact == null? dcContext.getContact(dcContext.createContact(null, addr)) : contact);
|
||||
openChat(activity, contact);
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.show();
|
||||
@@ -87,7 +83,7 @@ public class LongClickCopySpan extends ClickableSpan {
|
||||
QrCodeHandler qrCodeHandler = new QrCodeHandler(activity);
|
||||
qrCodeHandler.handleQrData(url);
|
||||
} else {
|
||||
IntentUtils.showBrowserIntent(widget.getContext(), url);
|
||||
IntentUtils.showInBrowser(widget.getContext(), url);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,6 +62,8 @@ public class Prefs {
|
||||
public static final boolean ALWAYS_LOAD_REMOTE_CONTENT_DEFAULT = false;
|
||||
|
||||
public static final String LAST_DEVICE_MSG_LABEL = "pref_last_device_msg_id";
|
||||
public static final String WEBXDC_STORE_URL_PREF = "pref_webxdc_store_url";
|
||||
public static final String DEFAULT_WEBXDC_STORE_URL = "https://webxdc.org/apps/";
|
||||
|
||||
public enum VibrateState {
|
||||
DEFAULT(0), ENABLED(1), DISABLED(2);
|
||||
@@ -144,6 +146,15 @@ public class Prefs {
|
||||
return getStringPreference(context, THEME_PREF, DynamicTheme.systemThemeAvailable() ? DynamicTheme.SYSTEM : DynamicTheme.LIGHT);
|
||||
}
|
||||
|
||||
public static String getWebxdcStoreUrl(Context context) {
|
||||
return getStringPreference(context, WEBXDC_STORE_URL_PREF, DEFAULT_WEBXDC_STORE_URL);
|
||||
}
|
||||
|
||||
public static void setWebxdcStoreUrl(Context context, String url) {
|
||||
if (url == null || url.trim().isEmpty() || DEFAULT_WEBXDC_STORE_URL.equals(url)) url = null;
|
||||
setStringPreference(context, WEBXDC_STORE_URL_PREF, url);
|
||||
}
|
||||
|
||||
public static void setPromptedDozeMsgId(Context context, int msg_id) {
|
||||
setIntegerPreference(context, PROMPTED_DOZE_MSG_ID_PREF, msg_id);
|
||||
}
|
||||
|
||||
@@ -110,6 +110,7 @@ public class SendRelayedMessageUtil {
|
||||
message = new DcMsg(dcContext, DcMsg.DC_MSG_TEXT);
|
||||
} else if ("sticker".equals(type)) {
|
||||
message = new DcMsg(dcContext, DcMsg.DC_MSG_STICKER);
|
||||
message.forceSticker();
|
||||
} else if ("image".equals(type) || MediaUtil.isImageType(mimeType)) {
|
||||
message = new DcMsg(dcContext, DcMsg.DC_MSG_IMAGE);
|
||||
} else if ("audio".equals(type) || MediaUtil.isAudioType(mimeType)) {
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.googlecode.mp4parser.util.Path;
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
import org.thoughtcrime.securesms.util.Prefs;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
import org.thoughtcrime.securesms.util.views.ProgressDialog;
|
||||
|
||||
import java.io.File;
|
||||
import java.nio.ByteBuffer;
|
||||
@@ -551,11 +552,9 @@ public class VideoRecoder {
|
||||
}
|
||||
|
||||
// prepareVideo() assumes the msg object is set up properly to being sent;
|
||||
// the function fills out missing information and also recodes the video as needed;
|
||||
// to get a responsive ui, DcChat.prepareMsg() may be called.
|
||||
// the function fills out missing information and also recodes the video as needed.
|
||||
// return: true=video might be prepared, can be sent, false=error
|
||||
public static boolean prepareVideo(Context context, int chatId, DcMsg msg) {
|
||||
|
||||
try {
|
||||
String inPath = msg.getFile();
|
||||
Log.i(TAG, "Preparing video: " + inPath);
|
||||
@@ -623,7 +622,6 @@ public class VideoRecoder {
|
||||
msg.setDimension(vei.resultWidth, vei.resultHeight);
|
||||
}
|
||||
msg.setDuration((int) resultDurationMs);
|
||||
DcHelper.getContext(context).prepareMsg(chatId, msg);
|
||||
|
||||
// calculate bytes
|
||||
vei.estimatedBytes = VideoRecoder.calculateEstimatedSize((float) resultDurationMs / vei.originalDurationMs,
|
||||
|
||||
@@ -35,7 +35,7 @@ public class VideochatUtil {
|
||||
DcContext dcContext = DcHelper.getContext(activity);
|
||||
DcMsg dcMsg = dcContext.getMsg(msgId);
|
||||
String videochatUrl = dcMsg.getVideochatUrl();
|
||||
IntentUtils.showBrowserIntent(activity, videochatUrl);
|
||||
IntentUtils.showInBrowser(activity, videochatUrl);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:top="2px"
|
||||
android:bottom="2px">
|
||||
<shape android:shape="rectangle">
|
||||
<stroke android:width="1dp" android:color="#55888888" />
|
||||
<corners
|
||||
android:topLeftRadius="@dimen/message_corner_radius"
|
||||
android:topRightRadius="@dimen/message_corner_radius"
|
||||
android:bottomRightRadius="@dimen/message_corner_radius" />
|
||||
<solid android:color="?attr/conversation_item_incoming_bubble_color" />
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
||||
@@ -0,0 +1,3 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#FFFFFF" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M4,8h4L8,4L4,4v4zM10,20h4v-4h-4v4zM4,20h4v-4L4,16v4zM4,14h4v-4L4,10v4zM10,14h4v-4h-4v4zM16,4v4h4L20,4h-4zM10,8h4L14,4h-4v4zM16,14h4v-4h-4v4zM16,20h4v-4h-4v4z"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:top="2px"
|
||||
android:bottom="2px">
|
||||
<shape android:shape="rectangle">
|
||||
<stroke android:width="1dp" android:color="#55888888" />
|
||||
<corners
|
||||
android:topLeftRadius="@dimen/message_corner_radius"
|
||||
android:topRightRadius="@dimen/message_corner_radius"
|
||||
android:bottomLeftRadius="@dimen/message_corner_radius" />
|
||||
<solid android:color="?attr/conversation_item_incoming_bubble_color" />
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
||||
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<org.thoughtcrime.securesms.components.emoji.MediaKeyboard
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/emoji_drawer"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone">
|
||||
|
||||
<androidx.emoji2.emojipicker.EmojiPickerView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/emoji_picker"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?emoji_drawer_background"
|
||||
app:emojiGridColumns="12"/>
|
||||
|
||||
</org.thoughtcrime.securesms.components.emoji.MediaKeyboard>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<androidx.emoji2.emojipicker.EmojiPickerView
|
||||
android:id="@+id/emoji_picker"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:emojiGridColumns="10"/>
|
||||
</RelativeLayout>
|
||||
@@ -78,58 +78,50 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout android:id="@+id/location_linear_layout"
|
||||
android:layout_width="match_parent"
|
||||
<LinearLayout android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<org.thoughtcrime.securesms.components.CircleColorImageView
|
||||
android:id="@+id/document_button"
|
||||
android:layout_width="53dp"
|
||||
android:layout_height="53dp"
|
||||
android:src="@drawable/ic_insert_drive_file_white_24dp"
|
||||
android:scaleType="center"
|
||||
android:contentDescription="@string/file"
|
||||
app:circleColor="@color/document_icon"/>
|
||||
|
||||
<TextView android:layout_marginTop="10dp"
|
||||
style="@style/AttachmentTypeLabel"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/file"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
<org.thoughtcrime.securesms.components.CircleColorImageView
|
||||
android:id="@+id/location_button"
|
||||
android:layout_width="53dp"
|
||||
android:layout_height="53dp"
|
||||
android:src="@drawable/ic_location_on_white_24dp"
|
||||
android:scaleType="center"
|
||||
android:visibility="visible"
|
||||
android:contentDescription="@string/location"
|
||||
app:circleColor="@color/location_icon"/>
|
||||
android:id="@+id/webxdc_button"
|
||||
android:layout_width="53dp"
|
||||
android:layout_height="53dp"
|
||||
android:src="@drawable/baseline_apps_24"
|
||||
android:scaleType="center"
|
||||
android:contentDescription="@string/webxdc_apps"
|
||||
app:circleColor="@color/apps_icon"
|
||||
/>
|
||||
|
||||
<TextView android:layout_marginTop="10dp"
|
||||
android:id="@+id/location_button_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="visible"
|
||||
style="@style/AttachmentTypeLabel"
|
||||
android:text="@string/location"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout android:id="@+id/apps_linear_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical"
|
||||
android:visibility="invisible">
|
||||
|
||||
<org.thoughtcrime.securesms.components.CircleColorImageView
|
||||
android:id="@+id/apps_button"
|
||||
android:layout_width="53dp"
|
||||
android:layout_height="53dp"
|
||||
android:src="@drawable/ic_location_on_white_24dp"
|
||||
android:scaleType="center"
|
||||
android:visibility="visible"
|
||||
android:contentDescription="@string/location"
|
||||
app:circleColor="@color/location_icon"/>
|
||||
|
||||
<TextView android:layout_marginTop="10dp"
|
||||
android:id="@+id/apps_button_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="visible"
|
||||
style="@style/AttachmentTypeLabel"
|
||||
android:text="@string/location"/>
|
||||
android:text="@string/webxdc_apps"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@@ -169,26 +161,30 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout android:layout_width="match_parent"
|
||||
<LinearLayout android:id="@+id/location_linear_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
<org.thoughtcrime.securesms.components.CircleColorImageView
|
||||
android:id="@+id/document_button"
|
||||
android:id="@+id/location_button"
|
||||
android:layout_width="53dp"
|
||||
android:layout_height="53dp"
|
||||
android:src="@drawable/ic_insert_drive_file_white_24dp"
|
||||
android:src="@drawable/ic_location_on_white_24dp"
|
||||
android:scaleType="center"
|
||||
android:contentDescription="@string/file"
|
||||
app:circleColor="@color/document_icon"/>
|
||||
android:visibility="visible"
|
||||
android:contentDescription="@string/location"
|
||||
app:circleColor="@color/location_icon"/>
|
||||
|
||||
<TextView android:layout_marginTop="10dp"
|
||||
style="@style/AttachmentTypeLabel"
|
||||
android:id="@+id/location_button_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/file"/>
|
||||
android:visibility="visible"
|
||||
style="@style/AttachmentTypeLabel"
|
||||
android:text="@string/location"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@@ -216,30 +212,14 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
<org.thoughtcrime.securesms.components.CircleColorImageView
|
||||
android:id="@+id/close_button"
|
||||
android:layout_width="53dp"
|
||||
android:layout_height="53dp"
|
||||
android:src="@drawable/ic_keyboard_arrow_down_white_24dp"
|
||||
android:scaleType="center"
|
||||
android:contentDescription="@string/cancel"
|
||||
app:circleColor="?attr/close_icon_color"/>
|
||||
|
||||
<TextView android:layout_marginTop="10dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/AttachmentTypeLabel"
|
||||
android:text=" "/>
|
||||
|
||||
<!-- fill the gap -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:visibility="invisible">
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@@ -51,12 +51,11 @@
|
||||
|
||||
<include layout="@layout/conversation_input_panel"/>
|
||||
|
||||
<ViewStub
|
||||
android:id="@+id/emoji_drawer_stub"
|
||||
<FrameLayout
|
||||
android:id="@+id/emoji_picker_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:inflatedId="@+id/emoji_drawer"
|
||||
android:layout="@layout/conversation_activity_emojidrawer_stub" />
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
</org.thoughtcrime.securesms.components.InputAwareLayout>
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
android:id="@+id/attachment_editor"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/input_panel_bg_color"
|
||||
android:gravity="center_horizontal"
|
||||
android:visibility="gone">
|
||||
|
||||
@@ -45,7 +46,7 @@
|
||||
android:layout_marginLeft="10dp"
|
||||
android:layout_marginRight="10dp"
|
||||
android:padding="8dp"
|
||||
android:background="@drawable/message_bubble_background_sent_alone"/>
|
||||
android:background="@drawable/message_bubble_background_sent_alone_with_border"/>
|
||||
|
||||
<org.thoughtcrime.securesms.components.DocumentView
|
||||
android:id="@+id/attachment_document"
|
||||
@@ -56,7 +57,7 @@
|
||||
android:layout_marginLeft="10dp"
|
||||
android:layout_marginRight="10dp"
|
||||
android:padding="8dp"
|
||||
android:background="@drawable/message_bubble_background_sent_alone"/>
|
||||
android:background="@drawable/message_bubble_background_sent_alone_with_border"/>
|
||||
|
||||
<org.thoughtcrime.securesms.components.WebxdcView
|
||||
android:id="@+id/attachment_webxdc"
|
||||
@@ -67,7 +68,7 @@
|
||||
android:layout_marginLeft="10dp"
|
||||
android:layout_marginRight="10dp"
|
||||
android:padding="8dp"
|
||||
android:background="@drawable/message_bubble_background_sent_alone"/>
|
||||
android:background="@drawable/message_bubble_background_sent_alone_with_border"/>
|
||||
|
||||
<org.thoughtcrime.securesms.components.VcardView
|
||||
android:id="@+id/attachment_vcard"
|
||||
@@ -78,7 +79,7 @@
|
||||
android:layout_marginLeft="10dp"
|
||||
android:layout_marginRight="10dp"
|
||||
android:padding="8dp"
|
||||
android:background="@drawable/message_bubble_background_sent_alone"/>
|
||||
android:background="@drawable/message_bubble_background_sent_alone_with_border"/>
|
||||
|
||||
</org.thoughtcrime.securesms.components.RemovableEditableMediaView>
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- WARNING: on modifications also update the layout-land folder. -->
|
||||
<org.thoughtcrime.securesms.components.emoji.MediaKeyboard
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/emoji_drawer"
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- WARNING: on modifications also update the layout-land folder. -->
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
android:layout_width="128dp"
|
||||
android:layout_height="128dp"
|
||||
android:scaleType="centerCrop"
|
||||
app:strokeColor="@null"
|
||||
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.App.CornerSize10Percent" />
|
||||
|
||||
<TextView android:id="@+id/webxdc_app_name"
|
||||
|
||||
@@ -30,8 +30,6 @@
|
||||
|
||||
<group android:id="@+id/extra_services" >
|
||||
|
||||
<item android:title="@string/webxdc_apps_store"
|
||||
android:id="@+id/menu_webxdc_apps_store" />
|
||||
<item android:title="@string/public_bots"
|
||||
android:id="@+id/menu_public_bots" />
|
||||
|
||||
|
||||
@@ -46,6 +46,9 @@ window.webxdc = (() => {
|
||||
deltalab: InternalJSApi.arcanechat(),
|
||||
|
||||
isCommunity: InternalJSApi.isCommunity(),
|
||||
sendUpdateMaxSize: InternalJSApi.sendUpdateMaxSize(),
|
||||
|
||||
sendUpdateInterval: InternalJSApi.sendUpdateInterval(),
|
||||
|
||||
selfAddr: InternalJSApi.selfAddr(),
|
||||
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
|
||||
const params = new URLSearchParams(document.location.search);
|
||||
const internetAccess = (params.get("i") || "0") === "1";
|
||||
let href = params.get("href") || "index.html";
|
||||
const href = params.get("href");
|
||||
|
||||
if (internetAccess) { // fill500 not needed, just load the frame
|
||||
fill500 = (href) => {
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">موافق</string>
|
||||
<string name="cancel">إلغاء</string>
|
||||
<string name="yes">نعم</string>
|
||||
<string name="yes">نعم</string>
|
||||
<string name="no">لا</string>
|
||||
<string name="on">يعمل</string>
|
||||
<string name="off">معطّل</string>
|
||||
@@ -194,13 +194,13 @@
|
||||
<string name="pref_app_access">دخول البرنامج</string>
|
||||
<string name="pref_chats">المحادثات</string>
|
||||
<string name="pref_in_chat_sounds">أصوات خلال الدردش</string>
|
||||
<string name="pref_message_text_size">حجم الخط في الرسائل</string>
|
||||
<string name="pref_other">أخرى</string>
|
||||
<!-- No need to translate "Wallpaper" literally. Chose what is common in your language for a "Wallpaper" or a "Background". Avoid adding the term "image" here, as the "Wallpaper" may also be just a single color. -->
|
||||
<string name="pref_background">الخلفية</string>
|
||||
<string name="pref_show_emails_all">كلها</string>
|
||||
<string name="autocrypt_continue_transfer_retry">أعد المحاولة</string>
|
||||
<string name="qrscan_fingerprint_label">البصمة</string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">رد</string>
|
||||
<string name="notify_new_message">رسالة جديدة</string>
|
||||
<string name="notify_priority_high">عالي</string>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Imtina</string>
|
||||
<string name="yes">Bəli</string>
|
||||
<string name="yes">Bəli</string>
|
||||
<string name="no">Xeyir</string>
|
||||
<string name="on">Açıq</string>
|
||||
<string name="off">Bağlı</string>
|
||||
@@ -332,7 +332,6 @@
|
||||
<string name="pref_app_access">Daxil oldu</string>
|
||||
<string name="pref_chats">Çatlar</string>
|
||||
<string name="pref_in_chat_sounds">Çatda olan səslər</string>
|
||||
<string name="pref_message_text_size">Mətnin ölçüsü</string>
|
||||
<string name="pref_view_log">Log-a bax</string>
|
||||
<string name="pref_saved_log">Loqi Yükləmələr qovluğuna saxlanıldı</string>
|
||||
<string name="pref_save_log_failed">Loqu saxlaya bilmədi</string>
|
||||
@@ -427,6 +426,7 @@
|
||||
<string name="contact_not_verified">%1$sDoğrula bilmir</string>
|
||||
<!-- translators: "setup" is the "encryption setup" here, as in "Autocrypt Setup Message" -->
|
||||
<string name="contact_setup_changed">%1$süçün quraşdırma dəyişdirildi</string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">Cavab ver</string>
|
||||
<string name="notify_new_message">Yeni mesaj</string>
|
||||
<string name="notify_background_connection_enabled">Arxa fon əlaqəsi aktivdir</string>
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Отказ</string>
|
||||
<!-- deprecated, the word "or" to separate blocks in the user interface that are mutually exclusive -->
|
||||
<string name="or_separator">или</string>
|
||||
<string name="clear_search">Изчистване на търсенето</string>
|
||||
<string name="yes">Да</string>
|
||||
<string name="no">Не</string>
|
||||
@@ -509,10 +507,6 @@
|
||||
<string name="multidevice_transfer_done_devicemsg">ℹ️ Акаунтът е прехвърлен на второто Ви устройство.</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="preparing_account">Акаунтът се подготвя...</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="waiting_for_receiver">Изчаква се свързване от получателя...</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="receiver_connected">Получателят е свързан...</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="transferring">Прехвърляне...</string>
|
||||
<string name="troubleshooting">Отстраняване на проблеми</string>
|
||||
@@ -690,7 +684,6 @@
|
||||
<string name="pref_app_access">Достъп до приложението</string>
|
||||
<string name="pref_chats">Чатове</string>
|
||||
<string name="pref_in_chat_sounds">Звуци в чата</string>
|
||||
<string name="pref_message_text_size">Размер на шрифта на съобщението</string>
|
||||
<string name="pref_view_log">Разглеждане на дневника</string>
|
||||
<string name="pref_saved_log">Дневникът е записан в папката \"Свалени\"</string>
|
||||
<string name="pref_save_log_failed">Неуспешен запис на дневника</string>
|
||||
@@ -973,8 +966,6 @@
|
||||
<string name="mailto_link_could_not_be_decoded">Неуспешно декодиране на mailto връзка: %1$s</string>
|
||||
|
||||
<!-- notifications -->
|
||||
<!-- deprecated, use mark_as_read or mark_as_read_short -->
|
||||
<string name="notify_dismiss">Затваряне</string>
|
||||
<string name="notify_reply_button">Отговор</string>
|
||||
<string name="notify_new_message">Ново съобщение</string>
|
||||
<string name="notify_background_connection_enabled">Връзката във фонов режим е разрешена</string>
|
||||
@@ -1105,9 +1096,6 @@
|
||||
<string name="last_check_at">Проверено на %1$s</string>
|
||||
<!-- iOS webxdc selector -->
|
||||
<string name="webxdc_selector_empty_hint">Приложенията, получени или изпратени в кой да е чат, ще се появяват тук. \"Файлове\" показва току-що свалените приложения.</string>
|
||||
<!-- iOS webxdc shortcut page -->
|
||||
<string name="shortcut_step1_tap_share_btn">Натиснете бутона \"Споделяне\"</string>
|
||||
<string name="shortcut_step2_tap_add_to_home_screen">Изберете \"Добавяне към началния екран\", за да добавите приложението към началния екран. </string>
|
||||
<!-- iOS permissions, copy from "deltachat-ios/Info.plist", which is used on missing translations in "deltachat-ios/LANG.lproj/InfoPlist.strings" -->
|
||||
<string name="InfoPlist_NSCameraUsageDescription">Delta Chat използва Вашата камера, за да прави и изпраща снимки и видеоклипове, както и да сканира QR кодове.</string>
|
||||
<string name="InfoPlist_NSContactsUsageDescription">Delta Chat използва Вашите контакти, за да показва списък на e-mail адресите, до които можете да пишете. Delta Chat няма собствен сървър, Вашите контакти не се пращат никъде.</string>
|
||||
@@ -1116,13 +1104,9 @@
|
||||
<string name="InfoPlist_NSMicrophoneUsageDescription">Delta Chat използва Вашия микрофон, за да записва и изпраща гласови съобщения и видеоклипове със звук.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryUsageDescription">Delta Chat ще Ви даде да изберете кои снимки от Вашата библотека да изпратите.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryAddUsageDescription">Delta Chat иска да запише изображения във Вашата библиотека със снимки.</string>
|
||||
|
||||
|
||||
<string name="pref_background_notifications_rationale">За да се поддържа връзката към Вашия сървър за електронна поща и да получавате съобщения във фонов режим, игнорирайте оптимизациите на батерията на следващата стъпка.\n\nDelta Chat използва малко ресурси и се грижи да не изтощава Вашата батерия.</string>
|
||||
<!-- disabling "Reliable service" will hide a the maybe annoying permanent-notification with the drawback that new-message-notifications get potentially unreliable -->
|
||||
<string name="perm_enable_bg_reminder_title">Докоснете тук, за да получавате съобщения, докато Delta Chat е във фонов режим.</string>
|
||||
<string name="perm_enable_bg_already_done">Вече разрешихте Delta Chat да получава съобщения във фонов режим.\n\nАко съобщенията все още не пристигат във фонов режим, моля проверете Вашите системни настройки.</string>
|
||||
|
||||
<!-- device messages for updates -->
|
||||
<string name="update_1_46_android">Нов начин за включване на нови потребители към приложението 🐣 и още:\n\n⚡️ Регистрирайте се в защитени бързи сървъри за чат поща (https://delta.chat/chatmail) или използвайте класически сървъри за електронна поща\n\n👉 PUSH уведомления за всякакъв вид сървър за чат поща\n\n👤 Свържете се с Вашите приятели по защитен начин чрез \"Прикачване на контакти\"\n\n🥰 Изразете реакция с произволно emoji\n\n📌 Забождайте чатове директно от търсенето … и ПОВЕЧЕ на %1$s</string>
|
||||
</resources>
|
||||
|
||||
+293
-295
@@ -4,379 +4,377 @@
|
||||
<string name="app_name">دلتا چت</string>
|
||||
<string name="ok">خا</string>
|
||||
<string name="cancel">رڌ</string>
|
||||
<!-- deprecated, the word "or" to separate blocks in the user interface that are mutually exclusive -->
|
||||
<string name="or_separator">یا</string>
|
||||
<string name="clear_search">روفتن پیتینیڌن</string>
|
||||
<string name="yes">هری</string>
|
||||
<string name="no">na</string>
|
||||
<string name="select">pêsand</string>
|
||||
<string name="on">rušên</string>
|
||||
<string name="off">kur</string>
|
||||
<string name="def">pîš farz</string>
|
||||
<string name="default_value">pîš farz (%1$s)</string>
|
||||
<string name="default_value_as_above">pîš farz (jurê ro\')</string>
|
||||
<string name="custom">sêfârêši</string>
|
||||
<string name="none">hičkoyêki</string>
|
||||
<string name="automatic">xotkār</string>
|
||||
<string name="strict">saxtger</string>
|
||||
<string name="open">gušiďên</string>
|
||||
<string name="download">dānlod</string>
|
||||
<string name="downloading">honêy dānlod êbu...</string>
|
||||
<string name="open_attachment">gušiďên zamima</string>
|
||||
<string name="join">avoďên</string>
|
||||
<string name="rejoin">zênu avoďên</string>
|
||||
<string name="delete">pāk kerdên</string>
|
||||
<string name="info">zêbār</string>
|
||||
<string name="update">vê ru kerdên</string>
|
||||
<string name="emoji">êmuji</string>
|
||||
<string name="attachment">zamima</string>
|
||||
<string name="back">vorgaštên</string>
|
||||
<string name="close">bastên</string>
|
||||
<string name="no">ن</string>
|
||||
<string name="select">پسند</string>
|
||||
<string name="on">رۊشن</string>
|
||||
<string name="off">کۊر</string>
|
||||
<string name="def">پؽش فرز</string>
|
||||
<string name="default_value">پؽش فرز (%1$s)</string>
|
||||
<string name="default_value_as_above">پؽش فرز (جۊر روء)</string>
|
||||
<string name="custom">سفارشی</string>
|
||||
<string name="none">هیچکویکی</string>
|
||||
<string name="automatic">خوتکار</string>
|
||||
<string name="strict">سختگر</string>
|
||||
<string name="open">گۊشیڌن</string>
|
||||
<string name="download">دانلود</string>
|
||||
<string name="downloading">هونی دانلود ابۊ...</string>
|
||||
<string name="open_attachment">گۊشیڌن زمینه</string>
|
||||
<string name="join">ٱووڌن</string>
|
||||
<string name="rejoin">ز نۊ ٱووڌن</string>
|
||||
<string name="delete">پاک کردن</string>
|
||||
<string name="info">زبار</string>
|
||||
<string name="update">ورۊ کردن</string>
|
||||
<string name="emoji">ایموجی</string>
|
||||
<string name="attachment">زمینه</string>
|
||||
<string name="back">وورگشتن</string>
|
||||
<string name="close">بستن</string>
|
||||
<!-- "Resend" means "Sending the selected message(s) again to the same chat". The string is used in a menu and should be as short as possible. Resending may be needed after failures or to repost old messages to new members. -->
|
||||
<string name="resend">zênu bêfêšn</string>
|
||||
<string name="resend">ز نۊ بفشن</string>
|
||||
<!-- Verb "to archive", as in "put a chat in the archive", not a noun "The Archive". -->
|
||||
<string name="archive">bāyêguvi</string>
|
||||
<string name="archive">بایگۊوی</string>
|
||||
<!-- Verb "to unarchive", as in "remove a chat from the archive", opposite of the previous string -->
|
||||
<string name="unarchive">bêdar zêyďên zê bāyêguvi</string>
|
||||
<string name="mute">bî dong</string>
|
||||
<string name="save">zaft</string>
|
||||
<string name="chat">goftoloft</string>
|
||||
<string name="media">vārasgar</string>
|
||||
<string name="profile">porofāyl</string>
|
||||
<string name="main_menu">balgê asli</string>
|
||||
<string name="start_chat">nāhāďên pā goftoloft</string>
|
||||
<string name="show_full_message">nêšow dāďên payomê kāmêl</string>
|
||||
<string name="unarchive">و در زیڌن ز بایگۊوی</string>
|
||||
<string name="mute">بؽ دونگ</string>
|
||||
<string name="save">زفت کردن</string>
|
||||
<string name="chat">گوفت ۉ لوفت</string>
|
||||
<string name="media">وارسگر</string>
|
||||
<string name="profile">پوروفایل</string>
|
||||
<string name="main_menu">نومگه ٱسلی</string>
|
||||
<string name="start_chat">ناڌن پا گوفت ۉ لوفت</string>
|
||||
<string name="show_full_message">نشۉ داڌن پیوم کامل...</string>
|
||||
<!-- Stay short here, say ~16 characters. The source string could also be "All Read", maybe that hint can make translations easier :) -->
|
||||
<string name="mark_all_as_read">poy nê xonde biďe bêza</string>
|
||||
<string name="mark_all_as_read">پوی ن خونده بیڌه بزݩ</string>
|
||||
<!-- Shortest text for "Mark as being read". In english, this could be "Read" (past tense of "to read"), in german, this could be "Gelesen". -->
|
||||
<string name="mark_as_read_short">xonde vâbiďa</string>
|
||||
<string name="mark_as_read_short">علامت و عونوان خونده بیڌه</string>
|
||||
<!-- Placeholder text when something is loading -->
|
||||
<string name="loading">honêy bār êvane...</string>
|
||||
<string name="hide">bîďār kerdên</string>
|
||||
<string name="activate">faāl kerdên</string>
|
||||
<string name="load_remote_content">bār vani šîvātā zê dar</string>
|
||||
<string name="always">hamiša</string>
|
||||
<string name="once">him ya kêrat</string>
|
||||
<string name="show_warning">nêšow dāďên hošdār</string>
|
||||
<string name="show_password">nêšow dāďên razm</string>
|
||||
<string name="hide_password">bîďār kerdên razm</string>
|
||||
<string name="not_now">sako na</string>
|
||||
<string name="never">hič</string>
|
||||
<string name="one_moment">yadamow...</string>
|
||||
<string name="done">anjom vâbi</string>
|
||||
<string name="offline">āflāyn</string>
|
||||
<string name="loading">هونی بار اونه...</string>
|
||||
<string name="hide">بؽڌار کردن</string>
|
||||
<string name="activate">فعال کردن</string>
|
||||
<string name="load_remote_content">بار ونی شؽواتا ز در</string>
|
||||
<string name="always">همیشه</string>
|
||||
<string name="once">هیم ی کرت</string>
|
||||
<string name="show_warning">نشۉ داڌن هوشدار</string>
|
||||
<string name="show_password">نشۉ داڌن رزم</string>
|
||||
<string name="hide_password">بؽڌار کردن رزم</string>
|
||||
<string name="not_now">سکو ن</string>
|
||||
<string name="never">هیچ</string>
|
||||
<string name="one_moment">ی دمۉ...</string>
|
||||
<string name="done">ٱنجوم وابی</string>
|
||||
<string name="offline">آفلاین</string>
|
||||
<!-- For the next view or as "continue". Should be as short as possible. -->
|
||||
<string name="next">niyâyi</string>
|
||||
<string name="error">xatā</string>
|
||||
<string name="error_x">xatā: %1$s</string>
|
||||
<string name="file_not_found">%1$s najost</string>
|
||||
<string name="copied_to_clipboard">mênê virga lefgiri vâbi.</string>
|
||||
<string name="contacts_headline">homdangal</string>
|
||||
<string name="email_address">nêšuvi imêyl</string>
|
||||
<string name="password">razm</string>
|
||||
<string name="existing_password">razmê mowjud</string>
|
||||
<string name="now">sako</string>
|
||||
<string name="next">نیایی</string>
|
||||
<string name="error">ختا</string>
|
||||
<string name="error_x">ختا: %1$s</string>
|
||||
<string name="file_not_found">%1$s ن نجوست.</string>
|
||||
<string name="copied_to_clipboard">من ویرگه لف گیری وابی.</string>
|
||||
<string name="contacts_headline">هومدنگۉݩ</string>
|
||||
<string name="email_address">نشۊوی ایمیل</string>
|
||||
<string name="password">رزم</string>
|
||||
<string name="existing_password">رزم مۉجۊڌ</string>
|
||||
<string name="now">سکو</string>
|
||||
<!-- Headline for destructive actions with no undo. Could also be "Caution" or "Warning". -->
|
||||
<string name="danger">bêpā</string>
|
||||
<string name="today">amru</string>
|
||||
<string name="yesterday">duš</string>
|
||||
<string name="this_week">i hafta</string>
|
||||
<string name="this_month">i mā</string>
|
||||
<string name="last_week">haftê zitari</string>
|
||||
<string name="last_month">mā zitari</string>
|
||||
<string name="danger">بپا</string>
|
||||
<string name="today">ٱمرۊ</string>
|
||||
<string name="yesterday">دۊش</string>
|
||||
<string name="this_week">ای هفته</string>
|
||||
<string name="this_month">ای ما</string>
|
||||
<string name="last_week">هفته زیتری</string>
|
||||
<string name="last_month">ما زیتری</string>
|
||||
<!-- Refers to the time a contact was last seen. Shown below contact name in the profile. The placeholder will be replaced by date or time, resulting in "Last seen at 12:13 AM" or "Last seen Nov 12" -->
|
||||
<string name="last_seen_at">ritorê dindâyi mênê %1$s</string>
|
||||
<string name="last_seen_at">ریتور دیندایی من %1$s</string>
|
||||
<!-- Refers to the time a contact was last seen. Shown below contact name in the profile. The placeholder will be replaced by a relative point in time as "3 minutes ago" (see https://momentjs.com for more examples and languages)-->
|
||||
<string name="last_seen_relative">ritorê dindâyi %1$s</string>
|
||||
<string name="last_seen_unknown">ritorê dindâyi: diyār nî</string>
|
||||
<string name="last_seen_relative">ریتور دیندایی %1$s</string>
|
||||
<string name="last_seen_unknown">ریتور دیندایی: دیار نؽ</string>
|
||||
<!-- Shown beside messages that are "N minutes old". Prefer short strings, or well-known abbreviations. -->
|
||||
<plurals name="n_minutes">
|
||||
<item quantity="one">%d dîqa</item>
|
||||
<item quantity="other">%d dîqa</item>
|
||||
<item quantity="one">%d دؽقه</item>
|
||||
<item quantity="other">%d دؽقه</item>
|
||||
</plurals>
|
||||
<!-- Shown beside messages that are "N hours old". Prefer short strings, or well-known abbreviations. -->
|
||||
<plurals name="n_hours">
|
||||
<item quantity="one">%d sāat</item>
|
||||
<item quantity="other">%d sāat</item>
|
||||
<item quantity="one">%d ساعت</item>
|
||||
<item quantity="other">%d ساعت</item>
|
||||
</plurals>
|
||||
<plurals name="n_chats">
|
||||
<item quantity="one">%d čat</item>
|
||||
<item quantity="other">%d čat</item>
|
||||
<item quantity="one">%d چت</item>
|
||||
<item quantity="other">%d چت</item>
|
||||
</plurals>
|
||||
<plurals name="n_contacts">
|
||||
<item quantity="one">%d homdang</item>
|
||||
<item quantity="other">%d homdang</item>
|
||||
<item quantity="one">%d هومدنگ</item>
|
||||
<item quantity="other">%d هومدنگ</item>
|
||||
</plurals>
|
||||
<plurals name="n_messages">
|
||||
<item quantity="one">%d payom</item>
|
||||
<item quantity="other">%d payom</item>
|
||||
<item quantity="one">%d پیوم</item>
|
||||
<item quantity="other">%d پیوم</item>
|
||||
</plurals>
|
||||
<plurals name="n_members">
|
||||
<item quantity="one">%d mėntor</item>
|
||||
<item quantity="other">%d mėntor</item>
|
||||
<item quantity="one">%d منتور</item>
|
||||
<item quantity="other">%d منتور</item>
|
||||
</plurals>
|
||||
<!-- Short form for "N Items Selected" -->
|
||||
<plurals name="n_selected">
|
||||
<item quantity="one">%d tā pêsand vâbi</item>
|
||||
<item quantity="other">%d tā pêsand vâbi</item>
|
||||
<item quantity="one">%d تا پسند وابی</item>
|
||||
<item quantity="other">%d تا پسند وابی</item>
|
||||
</plurals>
|
||||
|
||||
<string name="self">mo</string>
|
||||
<string name="draft">pîš hîl</string>
|
||||
<string name="image">šîvāt</string>
|
||||
<string name="self">مو</string>
|
||||
<string name="draft">پؽش هؽل</string>
|
||||
<string name="image">شؽوات</string>
|
||||
<!-- Used in summaries as "Draft: Reply", similar as "Draft: Image". Use a noun here, not a verb (not: "to reply") -->
|
||||
<string name="reply_noun">vêlom</string>
|
||||
<string name="gif">gif</string>
|
||||
<string name="reply_noun">ولوم</string>
|
||||
<string name="gif">گیف</string>
|
||||
<!-- "Stickers" as known from other messengers; in some languages, the English "Sticker" is fine. -->
|
||||
<string name="sticker">êstikêr</string>
|
||||
<string name="images">šîvātā</string>
|
||||
<string name="audio">dong</string>
|
||||
<string name="voice_message">payomê dong</string>
|
||||
<string name="video">film</string>
|
||||
<string name="documents">sanadā</string>
|
||||
<string name="contact">homdang</string>
|
||||
<string name="camera">šîvātgėr</string>
|
||||
<string name="sticker">استیکر</string>
|
||||
<string name="images">شؽواتا</string>
|
||||
<string name="audio">دونگ</string>
|
||||
<string name="voice_message">پیوم دونگ</string>
|
||||
<string name="video">فیلم</string>
|
||||
<string name="documents">سندا</string>
|
||||
<string name="contact">هومدنگ</string>
|
||||
<string name="camera">شؽواتگر</string>
|
||||
<!-- As in "start a video recording" or "take a photo"; eg. the description of the "shutter button" in cameras -->
|
||||
<string name="capture">gêrîďên</string>
|
||||
<string name="switch_camera">ālêštê šîvātgêr</string>
|
||||
<string name="toggle_fullscreen">ālêštê vaziyat poy balga</string>
|
||||
<string name="location">jāga</string>
|
||||
<string name="locations">jāgayal</string>
|
||||
<string name="gallery">šîvātmāl</string>
|
||||
<string name="images_and_videos">šîvātā vo filmā</string>
|
||||
<string name="file">fāyl</string>
|
||||
<string name="files">fāylā</string>
|
||||
<string name="capture">گرؽڌن</string>
|
||||
<string name="switch_camera">آلشت شؽواتگر</string>
|
||||
<string name="toggle_fullscreen">آلشت وزیت پوی بلگه</string>
|
||||
<string name="location">جاگه</string>
|
||||
<string name="locations">جاگه یل</string>
|
||||
<string name="gallery">شؽوات مال</string>
|
||||
<string name="images_and_videos">شؽواتا وو فیلما</string>
|
||||
<string name="file">فایل</string>
|
||||
<string name="files">فایلا</string>
|
||||
<!-- "App" is used to present "Webxdc App" (https://webxdc.org) in a user friendly way. Please stay close to the original term and keep it short (it is used in menus with few screen space). -->
|
||||
<string name="webxdc_app">barnoma</string>
|
||||
<string name="webxdc_app">برنومه</string>
|
||||
<!-- plural of "App"; used to present "Webxdc App" (https://webxdc.org) in a user friendly way. Please stay close to the original term and keep it short (it is used in menus with few screen space). -->
|
||||
<string name="webxdc_apps">barnomêyal</string>
|
||||
<string name="unknown">nāšênās</string>
|
||||
<string name="webxdc_apps">برنومه یل</string>
|
||||
<string name="unknown">ناشناس</string>
|
||||
|
||||
<string name="green">sawz</string>
|
||||
<string name="red">so\'r</string>
|
||||
<string name="blue">kêvu</string>
|
||||
<string name="purple">bênawš</string>
|
||||
<string name="white">êsbîď</string>
|
||||
<string name="green">سوز</string>
|
||||
<string name="red">سوئر</string>
|
||||
<string name="blue">کوۊ</string>
|
||||
<string name="purple">بنوش</string>
|
||||
<string name="white">اسبؽڌ</string>
|
||||
|
||||
<string name="zoom">gap kerdên</string>
|
||||
<string name="extra_small">qalêvê kučir</string>
|
||||
<string name="small">kučir</string>
|
||||
<string name="normal">âdi</string>
|
||||
<string name="large">gap</string>
|
||||
<string name="extra_large">qalêvê gap</string>
|
||||
<string name="zoom">گپ کردن</string>
|
||||
<string name="extra_small">قلوه کۊچیر</string>
|
||||
<string name="small">کۊچیر</string>
|
||||
<string name="normal">عادی</string>
|
||||
<string name="large">گپ</string>
|
||||
<string name="extra_large">قلوه گپ</string>
|
||||
|
||||
<string name="fast">zêl</string>
|
||||
<string name="slow">hovār</string>
|
||||
<string name="fast">زل</string>
|
||||
<string name="slow">هووار</string>
|
||||
|
||||
<!-- menu labels (or icon, buttons...) -->
|
||||
<string name="menu_new_contact">homdangê nu</string>
|
||||
<string name="menu_new_chat">goftoloftê nu</string>
|
||||
<string name="menu_new_group">jarga nu</string>
|
||||
<string name="menu_new_contact">هومدنگ نۊ</string>
|
||||
<string name="menu_new_chat">گوفت ۉ لوفت نۊ</string>
|
||||
<string name="menu_new_group">جرگه نۊ</string>
|
||||
<!-- consider keeping the term "broadcast" as in WhatsApp or Telegram -->
|
||||
<string name="broadcast_list">nomga Broadcast</string>
|
||||
<string name="broadcast_lists">nomgayal Broadcast</string>
|
||||
<string name="new_broadcast_list">nomga Broadcast nu</string>
|
||||
<string name="menu_send">fêšnāďên</string>
|
||||
<string name="menu_edit_group">ālêštê jarga</string>
|
||||
<string name="menu_group_name_and_image">nom vo šîvātê jarga</string>
|
||||
<string name="menu_archive_chat">bāyêguvi kerdên goftoloft</string>
|
||||
<string name="menu_unarchive_chat">bêdar zêyďên goftoloft zê bāyêguvi</string>
|
||||
<string name="menu_add_attachment">êzāf kerdên zamima</string>
|
||||
<string name="menu_leave_group">ra\'ďên zê jarga</string>
|
||||
<string name="menu_delete_chat">pāk kerdên poy goftoloft</string>
|
||||
<string name="broadcast_list">نومگه Broadcast</string>
|
||||
<string name="broadcast_lists">نومگه یل Broadcast</string>
|
||||
<string name="new_broadcast_list">نومگه Broadcast نۊ</string>
|
||||
<string name="menu_send">فشناڌن</string>
|
||||
<string name="menu_edit_group">آلشت جرگه</string>
|
||||
<string name="menu_group_name_and_image">نوم وو شؽوات جرگه</string>
|
||||
<string name="menu_archive_chat">بایگۊوی گوفت ۉ لوفت</string>
|
||||
<string name="menu_unarchive_chat">و در زیڌن گوفت ۉ لوفت ز بایگۊوی</string>
|
||||
<string name="menu_add_attachment">ازاف کردن زمینه</string>
|
||||
<string name="menu_leave_group">رئڌن ز جرگه</string>
|
||||
<string name="menu_delete_chat">پاک کردن گوفت ۉ لوفت</string>
|
||||
<!-- Command to delete all messages in a chat. The chat itself will not be deleted but will be empty afterwards, so make sure to be different from "Delete Chat" here. "Clear" is a verb here, "Empty Chat" would also be fine (eg. in German "Chat leeren") -->
|
||||
<string name="clear_chat">roftênê virgārê goftoloft</string>
|
||||
<string name="menu_delete_messages">pāk kerdên payomā</string>
|
||||
<string name="delete_contact">pāk kerdên homdang</string>
|
||||
<string name="menu_delete_location">i jāga pāk bu?</string>
|
||||
<string name="menu_copy_to_clipboard">lefgiri mênê virga</string>
|
||||
<string name="menu_copy_link_to_clipboard">lefgiri ling</string>
|
||||
<string name="menu_copy_text_to_clipboard">lefgiri hîl</string>
|
||||
<string name="menu_copy_image_to_clipboard">lefgiri šîvāt</string>
|
||||
<string name="menu_copy_email_to_clipboard">lefgiri imêyl</string>
|
||||
<string name="paste_from_clipboard">jā vandên zê virga</string>
|
||||
<string name="menu_reply">vêlom bê payom</string>
|
||||
<string name="menu_mute">bî dong kerdên vārasuviyā</string>
|
||||
<string name="menu_unmute">vā dong kerdên</string>
|
||||
<string name="menu_all_media">poy vārasgarā</string>
|
||||
<string name="clear_chat">روفتن ویرگار گوفت ۉ لوفت</string>
|
||||
<string name="menu_delete_messages">پاک کردن پیوما</string>
|
||||
<string name="delete_contact">پاک کردن هومدنگ</string>
|
||||
<string name="menu_delete_location">ای جاگه پاک بۊ؟</string>
|
||||
<string name="menu_copy_to_clipboard">لف گیری من ویرگه</string>
|
||||
<string name="menu_copy_link_to_clipboard">لف گیری لینک</string>
|
||||
<string name="menu_copy_text_to_clipboard">لف گیری هؽل</string>
|
||||
<string name="menu_copy_image_to_clipboard">لف گیری شؽوات</string>
|
||||
<string name="menu_copy_email_to_clipboard">لف گیری ایمیل</string>
|
||||
<string name="paste_from_clipboard">جا وندن ز ویرگه</string>
|
||||
<string name="menu_reply">ولوم ب پیوم</string>
|
||||
<string name="menu_mute">بؽ دونگ کردن وارسۊویا</string>
|
||||
<string name="menu_unmute">وا دونگ کردن</string>
|
||||
<string name="menu_all_media">پوی وارسگرا</string>
|
||||
<!-- Command to jump to the original message corresponding to a gallery image or document -->
|
||||
<string name="show_in_chat">nêšow dāďên mênê goftoloft</string>
|
||||
<string name="menu_share">yakrasuvi</string>
|
||||
<string name="accept">qêvul</string>
|
||||
<string name="menu_play">pêšk</string>
|
||||
<string name="menu_pause">vāstāďên</string>
|
||||
<string name="menu_scroll_to_bottom">ra\'ďên bê lam</string>
|
||||
<string name="menu_scroll_to_top">ra\'ďên bê ro\'</string>
|
||||
<string name="menu_help">hayâri</string>
|
||||
<string name="menu_select_all">pêsandê poy</string>
|
||||
<string name="select_chat">pêsandê goftoloft</string>
|
||||
<string name="select_more">pêsandê bištar</string>
|
||||
<string name="menu_edit_name">ālêštê nom</string>
|
||||
<string name="menu_settings">sāmovā</string>
|
||||
<string name="menu_advanced">pîš ra\'ďa</string>
|
||||
<string name="menu_view_profile">niyaštên porofāyl</string>
|
||||
<string name="menu_zoom_in">gap kerdên</string>
|
||||
<string name="menu_zoom_out">kučir kerdên</string>
|
||||
<string name="menu_save_log">zaft kerdên gozārêš</string>
|
||||
<string name="menu_more_options">guzinêyalê bištar</string>
|
||||
<string name="jump_to_message">ra\'ďên bê payom</string>
|
||||
<string name="device_talk">payomā dasgā</string>
|
||||
<string name="device_talk_subtitle">payomā mêni</string>
|
||||
<string name="edit_contact">ālêštê homdang</string>
|
||||
<string name="show_in_chat">نشۉ داڌن من گوفت ۉ لوفت</string>
|
||||
<string name="menu_share">یک رسۊوی</string>
|
||||
<string name="accept">قوۊل</string>
|
||||
<string name="menu_play">پشک</string>
|
||||
<string name="menu_pause">واڌاشتن</string>
|
||||
<string name="menu_scroll_to_bottom">رئڌن ب لم</string>
|
||||
<string name="menu_scroll_to_top">رئڌن ب روء</string>
|
||||
<string name="menu_help">هیاری</string>
|
||||
<string name="menu_select_all">پسند پوی</string>
|
||||
<string name="select_chat">پسند گوفت ۉ لوفت</string>
|
||||
<string name="select_more">پسند بیشتر</string>
|
||||
<string name="menu_edit_name">آلشت نوم</string>
|
||||
<string name="menu_settings">سامووا</string>
|
||||
<string name="menu_advanced">پؽش رئڌه</string>
|
||||
<string name="menu_view_profile">نیشتن پوروفایل</string>
|
||||
<string name="menu_zoom_in">گپ کردن</string>
|
||||
<string name="menu_zoom_out">کۊچیر کردن</string>
|
||||
<string name="menu_save_log">زفت کردن گوزارش</string>
|
||||
<string name="menu_more_options">گۊزینیل بیشتر</string>
|
||||
<string name="jump_to_message">رئڌن ب پیوم</string>
|
||||
<string name="device_talk">پیوما دسگا</string>
|
||||
<string name="device_talk_subtitle">پیوما منی</string>
|
||||
<string name="edit_contact">آلشت هومدنگ</string>
|
||||
<!-- Verb "to pin", making something sticky, not a noun or abbreviation for "pin number". -->
|
||||
<string name="pin_chat">disniďên goftoloft</string>
|
||||
<string name="pin_chat">دیسنیڌن گوفت ۉ لوفت</string>
|
||||
<!-- Verb "to pin", making something sticky, not a noun or abbreviation for "pin number". -->
|
||||
<string name="pin">disniďên</string>
|
||||
<string name="source_code">kodê bončak</string>
|
||||
<string name="mute_for_one_hour">bî dong kerdên si 1 sāat</string>
|
||||
<string name="mute_for_two_hours">bî dong kerdên si 2 sāat</string>
|
||||
<string name="mute_for_one_day">bî dong kerdên si 1 ru</string>
|
||||
<string name="mute_for_seven_days">bî dong kerdên si 7 ru</string>
|
||||
<string name="mute_forever">bî dong kerdên si hamiša</string>
|
||||
<string name="pin">دیسنیڌن</string>
|
||||
<string name="source_code">کود بونچک</string>
|
||||
<string name="mute_for_one_hour">بؽ دونگ کردن سی 1 ساعت</string>
|
||||
<string name="mute_for_two_hours">بؽ دونگ کردن سی 2 ساعت</string>
|
||||
<string name="mute_for_one_day">بؽ دونگ کردن سی 1 رۊ</string>
|
||||
<string name="mute_for_seven_days">بؽ دونگ کردن سی 7 رۊ</string>
|
||||
<string name="mute_forever">بؽ دونگ کردن سی همیشه</string>
|
||||
|
||||
<string name="share_location_for_5_minutes">si 5 dîqa</string>
|
||||
<string name="share_location_for_30_minutes">si 30 dîqa</string>
|
||||
<string name="share_location_for_one_hour">si 1 sāat</string>
|
||||
<string name="share_location_for_two_hours">si 2 sāat</string>
|
||||
<string name="share_location_for_six_hours">si 6 sāat</string>
|
||||
<string name="share_location_for_5_minutes">سی 5 دؽقه</string>
|
||||
<string name="share_location_for_30_minutes">سی 30 دؽقه</string>
|
||||
<string name="share_location_for_one_hour">سی 1 ساعت</string>
|
||||
<string name="share_location_for_two_hours">سی 2 ساعت</string>
|
||||
<string name="share_location_for_six_hours">سی 6 ساعت</string>
|
||||
|
||||
<string name="file_saved_to">fāyl mênê \"%1$s\" zaft vâbi.</string>
|
||||
<string name="file_saved_to">فایل من «%1$s» زفت وابی.</string>
|
||||
|
||||
<string name="videochat">goftoloftê vidiyoyi</string>
|
||||
<string name="videochat_invitation">mokêš bê goftoloft vidiyoyi</string>
|
||||
<string name="videochat">گوفت ۉ لوفت ویدیویی</string>
|
||||
<string name="videochat_invitation">موکش و گوفت ۉ لوفت ویدیویی</string>
|
||||
<plurals name="ask_delete_messages_simple">
|
||||
<item quantity="one">êxuy %d payom pāk bu?</item>
|
||||
<item quantity="other">êxuy %d payom pāk bu?</item>
|
||||
<item quantity="other">اخۊی %d پیوم پاک بۊ؟</item>
|
||||
</plurals>
|
||||
<string name="ask_start_chat_with">goftoloft vā %1$s?</string>
|
||||
<string name="ask_delete_value">pāk kerdên %s?</string>
|
||||
<string name="ask_start_chat_with">گوفت ۉ لوفت وا %1$s؟</string>
|
||||
<string name="ask_delete_value">پاک کردن %s؟</string>
|
||||
<!-- %1$s is replaced by a comma-separated list of names -->
|
||||
<string name="ask_remove_members">pāk kerdên %1$s zê jarga?</string>
|
||||
<string name="ask_remove_members">پاک کردن %1$s ز جرگه؟</string>
|
||||
<!-- %1$s is replaced by a comma-separated list of names -->
|
||||
<string name="ask_remove_from_broadcast">%1$s zê nomga Broadcast pāk bu?</string>
|
||||
<string name="open_url_confirmation">êxuy i lingê nê buguši?</string>
|
||||
<string name="ask_remove_from_broadcast">%1$s ز نومگه Broadcast پاک بۊ؟</string>
|
||||
<string name="open_url_confirmation">اخۊی ای لینگن بۊگۊشی؟</string>
|
||||
|
||||
|
||||
<!-- contact list -->
|
||||
<string name="contacts_title">homdangal</string>
|
||||
<string name="contacts_empty_hint">bî homdang.</string>
|
||||
<string name="contacts_title">هومدنگۉݩ</string>
|
||||
<string name="contacts_empty_hint">بؽ هومدنگ.</string>
|
||||
|
||||
|
||||
<string name="chat_please_enter_message">ya payom bêza</string>
|
||||
<string name="chat_please_enter_message">ی پیوم بزݩ.</string>
|
||||
<plurals name="chat_n_new_messages">
|
||||
<item quantity="one">%d payomê nu</item>
|
||||
<item quantity="other">%d payomê nu</item>
|
||||
<item quantity="one">%d پیوم نۊ</item>
|
||||
<item quantity="other">%d پیوم نۊ</item>
|
||||
</plurals>
|
||||
<string name="chat_record_slide_to_cancel">si raď kerdên bêkašês</string>
|
||||
<string name="chat_share_with_title">yakrasuvi vā</string>
|
||||
<string name="chat_input_placeholder">payom</string>
|
||||
<string name="chat_request_label">darxāst</string>
|
||||
<string name="chat_no_messages">payomi nî.</string>
|
||||
<string name="chat_self_talk_subtitle">payomāyî ke si xom fêšnāme.</string>
|
||||
<string name="saved_messages">payomā zaft biďa</string>
|
||||
<string name="chat_record_slide_to_cancel">سی رڌ کردن بکشس.</string>
|
||||
<string name="chat_share_with_title">یک رسۊوی وا</string>
|
||||
<string name="chat_input_placeholder">پیوم</string>
|
||||
<string name="chat_request_label">درخاست</string>
|
||||
<string name="chat_no_messages">پیومؽ نؽ.</string>
|
||||
<string name="chat_self_talk_subtitle">پیومایی ک سی خوم فشنام.</string>
|
||||
<string name="saved_messages">پیوما زفت بیڌه</string>
|
||||
<!-- Should match "Saved" from "Saved messages" -->
|
||||
<string name="saved">zaft vâbi</string>
|
||||
<string name="save_as">zaft vê onvān</string>
|
||||
<string name="retry_send">zênu si fêšnāďênê payom taqalā ko</string>
|
||||
<string name="saved">زفت وابی</string>
|
||||
<string name="save_as">زفت و عونوان</string>
|
||||
<string name="retry_send">ز نۊ سی فشناڌن پیوم تقلا کوݩ</string>
|
||||
<!-- mailing lists -->
|
||||
<string name="mailing_list">nomga posti</string>
|
||||
<string name="mailing_list">نومگه پوستی</string>
|
||||
<!-- title shown above a list of chats where one should be selected (eg. when sharing files from a webxdc). the placeholder will be replaced by a file name -->
|
||||
<string name="send_file_to">fêšnāďên \"%1$s\" vê...</string>
|
||||
<string name="send_file_to">فشناڌن \"%1$s\" و...</string>
|
||||
<!-- title shown above a list contacts where one should be selected (eg. when a webxdc attempts to send a message to a chat) -->
|
||||
<string name="send_message_to">fêšnāďên payom vê...</string>
|
||||
<string name="show_location_traces">nêšow dāďên jā pā</string>
|
||||
<string name="send_message_to">فشناڌن پیوم و...</string>
|
||||
<string name="show_location_traces">نشۉ داڌن جا پا</string>
|
||||
<!-- search -->
|
||||
<string name="search">pitiniďên</string>
|
||||
<string name="search">پیتینیڌن</string>
|
||||
<!-- create/edit groups, contact/group profile -->
|
||||
<string name="group_name">nomê jarga</string>
|
||||
<string name="group_avatar">šîvātê jarga</string>
|
||||
<string name="remove_group_image">pāk kerdên šîvātê jarga</string>
|
||||
<string name="change_group_image">ālêštê šîvātê jarga</string>
|
||||
<string name="group_create_button">vorkêlê jarga</string>
|
||||
<string name="group_add_members">avordênê mêntor</string>
|
||||
<string name="tab_contact">homdang</string>
|
||||
<string name="tab_group">jarga</string>
|
||||
<string name="tab_gallery">šîvātmāl</string>
|
||||
<string name="tab_docs">sanadā</string>
|
||||
<string name="tab_links">lingā</string>
|
||||
<string name="tab_map">naqša</string>
|
||||
<string name="media_preview">nêšow dāďên vārasgar</string>
|
||||
<string name="send_message">fêšnāďên payom</string>
|
||||
<string name="group_name">نوم جرگه</string>
|
||||
<string name="group_avatar">شؽوات جرگه</string>
|
||||
<string name="remove_group_image">پاک کردن شؽوات جرگه</string>
|
||||
<string name="change_group_image">آلشت شؽوات جرگه</string>
|
||||
<string name="group_create_button">وورکل جرگه</string>
|
||||
<string name="group_add_members">ٱووردن منتور</string>
|
||||
<string name="tab_contact">هومدنگ</string>
|
||||
<string name="tab_group">جرگه</string>
|
||||
<string name="tab_gallery">شؽوات مال</string>
|
||||
<string name="tab_docs">سندا</string>
|
||||
<string name="tab_links">لینگا</string>
|
||||
<string name="tab_map">نقشه</string>
|
||||
<string name="media_preview">نشۉ داڌن وارسگر</string>
|
||||
<string name="send_message">فشناڌن پیوم</string>
|
||||
<!-- Headline in the "Connectivity" view. Placeholder will be replaced by the domain of the configured email-address. -->
|
||||
<string name="storage_on_domain">zaft kerdên mênê %1$s</string>
|
||||
<string name="storage_on_domain">زفت کردن من %1$s</string>
|
||||
<!-- Shown in the title bar if the app is "Connecting"; prefer short strings. The ellipsis is a single character (…), not three (...) -->
|
||||
<string name="connectivity_connecting">honêy menpiz êbu...</string>
|
||||
<string name="connectivity_connecting">هونی منپیز ابۊ...</string>
|
||||
<!-- Shown in the title bar if the app is "Updating" (eg. getting new/old message, sync things); prefer short strings. The ellipsis is a single character (…), not three (...) -->
|
||||
<string name="connectivity_updating">honêy vê ru êbu...</string>
|
||||
<string name="connectivity_updating">هونی ورۊ ابۊ...</string>
|
||||
<!-- Shown in the setting if the app is "Connected" -->
|
||||
<string name="connectivity_connected">menpiz vâbi</string>
|
||||
<string name="sending">honêy fêšnāďe êbu...</string>
|
||||
<string name="connectivity_connected">منپیز وابی</string>
|
||||
<string name="sending">هونی افشنه...</string>
|
||||
<!-- Subtitle in quota context of "Connetivity" view. Should be be plural always, no number is prefixed. -->
|
||||
<string name="messages">payomā</string>
|
||||
<string name="sync_all">vê ru kerdên poy</string>
|
||||
<string name="pref_your_name">nomê to</string>
|
||||
<string name="pref_notifications_show">nêšow dāďên</string>
|
||||
<string name="pref_language">zow</string>
|
||||
<string name="pref_chats">goftoloftā</string>
|
||||
<string name="pref_message_text_size">hêndā hîlê payom</string>
|
||||
<string name="pref_log_header">gozārêš</string>
|
||||
<string name="pref_background_btn_gallery">pêsand zê šîvātmāl</string>
|
||||
<string name="pref_show_emails_all">poy</string>
|
||||
<string name="messages">پیوما</string>
|
||||
<string name="sync_all">ورۊ کردن پوی</string>
|
||||
<string name="pref_your_name">نوم ایسا</string>
|
||||
<string name="pref_notifications_show">نشۉ داڌن</string>
|
||||
<string name="pref_language">زۉݩ</string>
|
||||
<string name="pref_chats">گوفت ۉ لوفتا</string>
|
||||
<string name="pref_log_header">گوزارش</string>
|
||||
<string name="pref_background_btn_gallery">پسند ز شؽوات مال</string>
|
||||
<string name="pref_show_emails_all">پوی</string>
|
||||
<!-- %1$s will be replaced by a human-readable number of bytes, eg. 32 KiB, 1 MiB -->
|
||||
<string name="up_to_x">tā saqfe %1$s</string>
|
||||
<string name="up_to_x">تا سقف %1$s</string>
|
||||
<!-- %1$s will be replaced by a human-readable number of bytes, eg. 32 KiB, 1 MiB. Resulting string eg. "1 MiB message" -->
|
||||
<string name="n_bytes_message">payom %1$s</string>
|
||||
<string name="profile_image_select">pêsandê šîvātê porofāyl</string>
|
||||
<string name="profile_image_delete">pāk kerdên šîvātê porofāyl</string>
|
||||
<string name="pref_edit_profile">ālêštê porofāyl</string>
|
||||
<string name="n_bytes_message">پیوم %1$s</string>
|
||||
<string name="profile_image_select">پسند شؽوات پوروفایل</string>
|
||||
<string name="profile_image_delete">پاک کردن شؽوات پوروفایل</string>
|
||||
<string name="pref_edit_profile">آلشت پوروفایل</string>
|
||||
<!-- Emoji picker and categories -->
|
||||
<string name="emoji_search_results">natijêyalê pitiniďên</string>
|
||||
<string name="emoji_symbols">nemāďā</string>
|
||||
<string name="emoji_flags">bêyraqā</string>
|
||||
<string name="emoji_search_results">نتیجیل پیتینیڌن</string>
|
||||
<string name="emoji_symbols">نمادا</string>
|
||||
<string name="emoji_flags">بیرقا</string>
|
||||
|
||||
<!-- automatically delete message -->
|
||||
<string name="delete_old_messages">pāk kerdên payomā qaďimi</string>
|
||||
<string name="autodel_device_title">pāk kerdên payomā zê dasgā</string>
|
||||
<string name="autodel_server_title">pāk kerdên payomā zê sêrvêr</string>
|
||||
<string name="delete_old_messages">پاک کردن پیوما قڌیمی</string>
|
||||
<string name="autodel_device_title">پاک کردن پیوما ز دسگا</string>
|
||||
<string name="autodel_server_title">پاک کردن پیوما ز سرور</string>
|
||||
<!-- "At once" in the meaning of "Immediately", without any intervening time. -->
|
||||
<string name="autodel_at_once">ya kêrat</string>
|
||||
<string name="after_30_seconds">ba\'ďê 30 sâniya</string>
|
||||
<string name="after_1_minute">ba\'ďê 1 dîqa</string>
|
||||
<string name="after_5_minutes">ba\'ďê 5 dîqa</string>
|
||||
<string name="after_30_minutes">ba\'ďê 30 dîqa</string>
|
||||
<string name="autodel_after_1_hour">ba\'ďê 1 sāat</string>
|
||||
<string name="autodel_after_1_day">ba\'ďê 1 ru</string>
|
||||
<string name="autodel_after_1_week">ba\'ďê 1 hafta</string>
|
||||
<string name="after_5_weeks">ba\'ďê 5 hafta</string>
|
||||
<string name="autodel_after_1_year">ba\'ďê 1 sāl</string>
|
||||
<string name="autodel_at_once">ی کرت دیندا دانلود</string>
|
||||
<string name="after_30_seconds">دیندا 30 سانیه</string>
|
||||
<string name="after_1_minute">دیندا 1 دؽقه</string>
|
||||
<string name="after_5_minutes">دیندا 5 دؽقه</string>
|
||||
<string name="after_30_minutes">دیندا 30 دؽقه</string>
|
||||
<string name="autodel_after_1_hour">دیندا 1 ساعت</string>
|
||||
<string name="autodel_after_1_day">دیندا 1 رۊ</string>
|
||||
<string name="autodel_after_1_week">دیندا 1 هفته</string>
|
||||
<string name="after_5_weeks">دیندا 5 هفته</string>
|
||||
<string name="autodel_after_1_year">دیندا 1 سال</string>
|
||||
|
||||
<!-- "left" in the meaning of "exited"; %1$s will be replaced by name and address of the contact leaving the group -->
|
||||
<string name="group_left_by_other">%1$s zê jarga ra\'ď.</string>
|
||||
<string name="qrshow_x_joining">%1$s mêntor vâbi.</string>
|
||||
<string name="qrshow_x_verified">%1$s taiď vâbi.</string>
|
||||
<string name="contact_verified">%1$s taiď vâbi.</string>
|
||||
<string name="group_left_by_other">%1$s ز جرگه رئڌ.</string>
|
||||
<string name="qrshow_x_joining">%1$s ٱووڌ.</string>
|
||||
<string name="qrshow_x_verified">%1$s تاییڌ وابی.</string>
|
||||
<string name="contact_verified">%1$s تاییڌ وابی.</string>
|
||||
<!-- Shown in contact profile. The placeholder will be replaced by the name of the contact that introduced the contact. -->
|
||||
<string name="verified_by">taiď vâbiďa vê das %1$s</string>
|
||||
<string name="notify_reply_button">vėlom</string>
|
||||
<string name="notify_new_message">payomė nu</string>
|
||||
<string name="notify_name_and_message">nom vo payom</string>
|
||||
<string name="notify_name_only">têynā nom</string>
|
||||
<string name="notify_no_name_or_message">nom yā payomi nî</string>
|
||||
<string name="global_menu_preferences_language_desktop">zow</string>
|
||||
<string name="global_menu_file_desktop">fāyl</string>
|
||||
<string name="global_menu_file_quit_desktop">vê dar zêyďên</string>
|
||||
<string name="global_menu_edit_desktop">ālêšt</string>
|
||||
<string name="global_menu_edit_cut_desktop">jā goro kerdên</string>
|
||||
<string name="global_menu_edit_copy_desktop">lefgiri</string>
|
||||
<string name="global_menu_edit_paste_desktop">jā vandên</string>
|
||||
<string name="global_menu_file_open_desktop">gušiďênê dêltā čat</string>
|
||||
<string name="delete_message_desktop">pāk kerdên payom</string>
|
||||
<string name="remove_desktop">pāk kerdên</string>
|
||||
<string name="save_desktop">zaft</string>
|
||||
<string name="name_desktop">nom</string>
|
||||
<string name="select_group_image_desktop">pêsandê šîvātê jarga</string>
|
||||
<string name="message_detail_sent_desktop">fêšnāďe vâbi</string>
|
||||
<string name="message_detail_received_desktop">gêrîďe vâbi</string>
|
||||
<string name="show_window">nêšow dāďênê nimdari</string>
|
||||
<string name="open_settings">gušiďênê sāmovā</string>
|
||||
<string name="verified_by">تاییڌ وابیڌه و دس %1$s</string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">ولوم</string>
|
||||
<string name="notify_new_message">پیوم نۊ</string>
|
||||
<string name="notify_name_and_message">نوم وو پیوم</string>
|
||||
<string name="notify_name_only">تینا نوم</string>
|
||||
<string name="notify_no_name_or_message">بؽ نوم یا پیوم</string>
|
||||
<string name="global_menu_preferences_language_desktop">زۉݩ</string>
|
||||
<string name="global_menu_file_desktop">فایل</string>
|
||||
<string name="global_menu_file_quit_desktop">و در زیڌن</string>
|
||||
<string name="global_menu_edit_desktop">آلشت</string>
|
||||
<string name="global_menu_edit_cut_desktop">جا گورو</string>
|
||||
<string name="global_menu_edit_copy_desktop">لف گیری</string>
|
||||
<string name="global_menu_edit_paste_desktop">جا وندن</string>
|
||||
<string name="global_menu_file_open_desktop">گۊشیڌن دلتا چت</string>
|
||||
<string name="delete_message_desktop">پاک کردن پیوم</string>
|
||||
<string name="remove_desktop">پاک کردن</string>
|
||||
<string name="save_desktop">زفت</string>
|
||||
<string name="name_desktop">نوم</string>
|
||||
<string name="select_group_image_desktop">پسند شؽوات جرگه</string>
|
||||
<string name="message_detail_sent_desktop">فشناڌ</string>
|
||||
<string name="message_detail_received_desktop">گرؽڌه وابی</string>
|
||||
<string name="show_window">نشۉ داڌن نیمدری</string>
|
||||
<string name="open_settings">گۊشیڌن سامووا</string>
|
||||
</resources>
|
||||
|
||||
@@ -4,9 +4,11 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Cancel·la</string>
|
||||
<!-- deprecated, the word "or" to separate blocks in the user interface that are mutually exclusive -->
|
||||
<string name="or_separator">o</string>
|
||||
<string name="clear_search">Neteja la cerca</string>
|
||||
<!-- a noun, used on a button, short for "show link" -->
|
||||
<string name="link">Enllaç</string>
|
||||
<!-- "scan" in the meaning of "scan QR code" -->
|
||||
<string name="scan">Escaneja</string>
|
||||
<string name="yes">Si</string>
|
||||
<string name="no">No</string>
|
||||
<string name="select">Trieu</string>
|
||||
@@ -54,6 +56,7 @@
|
||||
<string name="show_full_message">Mostra el missatge sencer...</string>
|
||||
<!-- Stay short here, say ~16 characters. The source string could also be "All Read", maybe that hint can make translations easier :) -->
|
||||
<string name="mark_all_as_read">Marca-ho tot com a llegit</string>
|
||||
<string name="mark_as_read">Marca com a llegit</string>
|
||||
<!-- Shortest text for "Mark as being read". In english, this could be "Read" (past tense of "to read"), in german, this could be "Gelesen". -->
|
||||
<string name="mark_as_read_short">Llegit</string>
|
||||
<!-- Placeholder text when something is loading -->
|
||||
@@ -535,6 +538,8 @@
|
||||
<string name="pref_profile_info_headline">Informació del vostre perfil</string>
|
||||
<string name="pref_profile_photo">Fotografia de perfil</string>
|
||||
<string name="pref_blocked_contacts">Contactes bloquejats</string>
|
||||
<!-- for classic email, we use the classical term "Account" -->
|
||||
<string name="pref_password_and_account_settings">Contrasenya i compte</string>
|
||||
<string name="pref_who_can_see_profile_explain">La vostra imatge de perfil i el vostre nom es mostraran en els missatges que envieu als altres usuaris. La informació que ja s\'hagi enviat no es pot eliminar ni esborrar.</string>
|
||||
<string name="pref_your_name">El vostre nom</string>
|
||||
<!-- Translators: Visible only to recipients who DO NOT use Delta Chat, so it's the last line in an E-mail and not a "Status". -->
|
||||
@@ -566,13 +571,13 @@
|
||||
<string name="pref_incognito_keyboard_explain">Sol·licita al teclat que deshabiliti l\'aprenentatge personalitzat</string>
|
||||
<string name="pref_read_receipts">Confirmació de lectura</string>
|
||||
<string name="pref_read_receipts_explain">Si desactiveu la confirmació de lectura dels vostres missatges, tampoc no rebreu la dels altres usuaris.</string>
|
||||
<string name="pref_server">Servidor</string>
|
||||
<string name="pref_manage_keys">Gestioneu les claus</string>
|
||||
<string name="pref_use_system_emoji">Useu emojis de sistema</string>
|
||||
<string name="pref_use_system_emoji_explain">Deshabilita el suport de sèrie per emoticones a Delta Chat</string>
|
||||
<string name="pref_app_access">Accés a l\'aplicació</string>
|
||||
<string name="pref_chats">Xats</string>
|
||||
<string name="pref_in_chat_sounds">Sons d\'entrada</string>
|
||||
<string name="pref_message_text_size">Mida de la font del missatge</string>
|
||||
<string name="pref_view_log">Veure el registre</string>
|
||||
<string name="pref_other">Altres</string>
|
||||
<string name="pref_backup">Còpia de seguretat</string>
|
||||
@@ -600,6 +605,9 @@
|
||||
<string name="pref_show_emails_no">No, només xats</string>
|
||||
<string name="pref_show_emails_accepted_contacts">Per a contactes acceptats</string>
|
||||
<string name="pref_show_emails_all">Tot</string>
|
||||
<string name="send_stats_to_devs">Envia estadístiques als desenvolupadors del Delta Chat</string>
|
||||
|
||||
|
||||
<!-- autocrypt -->
|
||||
<string name="autocrypt_send_asm_title">Envia el missatge de configuració Autocrypt</string>
|
||||
<string name="autocrypt_send_asm_explain_before">Un \"missatge de configuració Autocrypt\" comparteix de forma segura la vostra configuració d\'extrem a extrem amb altres aplicacions compatibles amb Autocrypt.\n\nLa configuració es xifrarà amb un codi de configuració que es mostrarà aquí i que haureu d\'escriure a l’altre dispositiu.</string>
|
||||
@@ -661,6 +669,7 @@
|
||||
<string name="contact_not_verified">No es pot verificar%1$s</string>
|
||||
<!-- translators: "setup" is the "encryption setup" here, as in "Autocrypt Setup Message" -->
|
||||
<string name="contact_setup_changed">Configuració canviada per %1$s</string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">Respondre</string>
|
||||
<string name="notify_new_message">Missatge nou</string>
|
||||
<string name="notify_background_connection_enabled">Connexió habilitada en segon pla</string>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">دێڵتا چات</string>
|
||||
<string name="ok">باشە</string>
|
||||
<string name="cancel">وازبێنە</string>
|
||||
<string name="yes">بەڵێ</string>
|
||||
<string name="yes">بەڵێ</string>
|
||||
<string name="no">نا</string>
|
||||
<string name="select">هەڵبژاردن</string>
|
||||
<string name="on">چالاک</string>
|
||||
@@ -420,7 +420,6 @@
|
||||
<string name="pref_app_access">ڕێگەپێدان</string>
|
||||
<string name="pref_chats">وتووێژەکان</string>
|
||||
<string name="pref_in_chat_sounds">دەنگەکانی نێو-وتووێژی</string>
|
||||
<string name="pref_message_text_size">قەبارەی فۆنتی پەیامەکان</string>
|
||||
<string name="pref_other">کەسانی دی</string>
|
||||
<string name="pref_backup">یەدەک</string>
|
||||
<string name="pref_backup_explain">یەدەک گرتن لە وتووێژەکان و دانانی لەسەر بیرگەی دەرەکی</string>
|
||||
@@ -523,6 +522,7 @@
|
||||
<!-- translators: "setup" is the "encryption setup" here, as in "Autocrypt Setup Message" -->
|
||||
<string name="contact_setup_changed">ڕێکخستن بۆ %1$s گۆڕا.</string>
|
||||
<string name="copy_qr_data_success">ناونیشانی وێبی QRەکە ڕوونووس کرا.</string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">وەڵام دانەوە</string>
|
||||
<string name="notify_new_message">پەیامی نوێ</string>
|
||||
<string name="notify_background_connection_enabled">پەیوەندی پشتخان چالاک کرا</string>
|
||||
@@ -587,8 +587,6 @@
|
||||
<string name="InfoPlist_NSMicrophoneUsageDescription">دێڵتا چات بۆ تۆمار کردن و هەناردنی دەنگ و هەروەها ڤیدیۆی دەنگدار، مایکەکەت بەکاردەهێنێت.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryUsageDescription">دێڵتا چات ڕێگە دەدات خۆت هەڵیبژێری کە کام وێنە لە پیشانگاکەتەوە بنێردرێت.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryAddUsageDescription">دێڵتا چات دەیەوێت وێنە پاشەکەوت بکاتە نێو پیشانگاکەت.</string>
|
||||
|
||||
|
||||
<!-- disabling "Reliable service" will hide a the maybe annoying permanent-notification with the drawback that new-message-notifications get potentially unreliable -->
|
||||
<string name="perm_enable_bg_reminder_title">بۆ وەرگرتنی پەیامەکان لەو کاتانەدا کە دێڵتا چات لە پشتخانەوەیە، لێرە کرتە بکە.</string>
|
||||
<string name="perm_enable_bg_already_done">تۆ ئێستا ڕێگەت بە دێڵتا چات دا کە لە پشتخانەوە پەیامەکان وەربگرێت.\n\n ئەگەر هێشتا لە پشخاندا پەیامەکان نایەن، سەرنجێکیش لە ڕێکخستنەکانی سیستەم بدەوە.</string>
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">Souhlas</string>
|
||||
<string name="cancel">Zrušit</string>
|
||||
<!-- deprecated, the word "or" to separate blocks in the user interface that are mutually exclusive -->
|
||||
<string name="or_separator">nebo</string>
|
||||
<string name="clear_search">Vyčistit vyhledávání</string>
|
||||
<string name="yes">Ano</string>
|
||||
<string name="no">Ne</string>
|
||||
@@ -554,7 +552,6 @@
|
||||
<string name="pref_app_access">Přístup aplikace</string>
|
||||
<string name="pref_chats">Chaty</string>
|
||||
<string name="pref_in_chat_sounds">Zvuky v rámci chatu</string>
|
||||
<string name="pref_message_text_size">Velikost písma zprávy</string>
|
||||
<string name="pref_view_log">Zobrazit záznam běhu</string>
|
||||
<string name="pref_saved_log">Záznam běhu uložen do složky \"Downloads\"</string>
|
||||
<string name="pref_save_log_failed">Uložení záznamu běhu selhalo</string>
|
||||
@@ -749,6 +746,7 @@
|
||||
<string name="contact_setup_changed">Změněné nastavení pro %1$s.</string>
|
||||
<string name="copy_qr_data_success">URL z QR kódu zkopírováno do mezipaměti</string>
|
||||
<string name="mailto_dialog_header_select_chat">Vyberte chat, kterému chcete zprávu odeslat </string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">Odpověď</string>
|
||||
<string name="notify_new_message">Nová zpráva</string>
|
||||
<string name="notify_background_connection_enabled">Spojení na pozadí je zapnuto</string>
|
||||
@@ -839,8 +837,6 @@
|
||||
<string name="InfoPlist_NSMicrophoneUsageDescription">Delta Chat používá mikrofon k nahrávání hlasových zpráv a k filmování se zvukem.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryUsageDescription">Delta Chat tě nechá vybrat, které fotky z tvé galerie chceš poslat.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryAddUsageDescription">Delta Chat chce uložit obrázky do tvé galerie fotek.</string>
|
||||
|
||||
|
||||
<string name="pref_background_notifications_rationale">K udržení spojení s e-mailovým serverem a přijímání zpráv na pozadí vyber v následujícím kroce nedbání optimalizací baterie.\n\nDelta Chat používá jen málo zdroje a snaží se šetřit tvou baterii.</string>
|
||||
<!-- disabling "Reliable service" will hide a the maybe annoying permanent-notification with the drawback that new-message-notifications get potentially unreliable -->
|
||||
<string name="perm_enable_bg_reminder_title">Stiskni zde a přijímání zpráv bude probíhat při chodu Delta Chatu na pozadí.</string>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Annuller</string>
|
||||
<string name="clear_search">Ryd søgning</string>
|
||||
<string name="clear_search">Ryd søgning</string>
|
||||
<string name="yes">Ja</string>
|
||||
<string name="no">Nej</string>
|
||||
<string name="select">Vælg</string>
|
||||
@@ -488,7 +488,6 @@
|
||||
<string name="pref_app_access">Programadgang</string>
|
||||
<string name="pref_chats">Samtaler</string>
|
||||
<string name="pref_in_chat_sounds">In-chat-lyde</string>
|
||||
<string name="pref_message_text_size">Besked tekststørrelse</string>
|
||||
<string name="pref_view_log">Visningslog</string>
|
||||
<string name="pref_saved_log">Gem loggen til \"Downloads\" mappen</string>
|
||||
<string name="pref_save_log_failed">Forsøg på at gemme loggen mislykkedes</string>
|
||||
@@ -676,6 +675,7 @@
|
||||
<!-- translators: "setup" is the "encryption setup" here, as in "Autocrypt Setup Message" -->
|
||||
<string name="contact_setup_changed">Ændret opsætning for %1$s</string>
|
||||
<string name="copy_qr_data_success">Kopieret QR url til udklipsholder</string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">Svar</string>
|
||||
<string name="notify_new_message">Ny besked</string>
|
||||
<string name="notify_background_connection_enabled">Baggrundsforbindelse aktiveret</string>
|
||||
@@ -756,8 +756,6 @@
|
||||
<string name="InfoPlist_NSMicrophoneUsageDescription">Delta Chat bruger din mikrofon til at optage og sende talebeskeder og videoer med lyd.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryUsageDescription">Delta Chat vil lade dig vælge hvilke billeder fra dit bibliotek du vil sende.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryAddUsageDescription">Delta Chat vil gerne gemme billeder til dig billede-bibliotek</string>
|
||||
|
||||
|
||||
<string name="pref_background_notifications_rationale">Ignorer batterioptimeringer i næste skridt for at vedligeholde en forbindelse til din mail-server og modtage beskeder i baggrunden.\n\nDelta Chat bruger få ressourcer og passer på ikke at dræne dit batteri.</string>
|
||||
<!-- disabling "Reliable service" will hide a the maybe annoying permanent-notification with the drawback that new-message-notifications get potentially unreliable -->
|
||||
<string name="perm_enable_bg_reminder_title">Tryk her for at modtage beskeder når Delta Chat er i baggrunden.</string>
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Abbruch</string>
|
||||
<!-- deprecated, the word "or" to separate blocks in the user interface that are mutually exclusive -->
|
||||
<string name="or_separator">oder</string>
|
||||
<string name="clear_search">Suche löschen</string>
|
||||
<!-- a noun, used on a button, short for "show link" -->
|
||||
<string name="link">Link</string>
|
||||
@@ -39,6 +37,7 @@
|
||||
<string name="close_window">Fenster schließen</string>
|
||||
<string name="forward">Weiterleiten</string>
|
||||
<string name="create">Erstellen</string>
|
||||
<string name="reset">Zurücksetzen</string>
|
||||
<string name="later">Später</string>
|
||||
<!-- "Resend" means "Sending the selected message(s) again to the same chat". The string is used in a menu and should be as short as possible. Resending may be needed after failures or to repost old messages to new members. -->
|
||||
<string name="resend">Erneut senden</string>
|
||||
@@ -47,6 +46,7 @@
|
||||
<!-- Verb "to unarchive", as in "remove a chat from the archive", opposite of the previous string -->
|
||||
<string name="unarchive">Dearchivieren</string>
|
||||
<string name="mute">Stumm</string>
|
||||
<string name="muted">Stumm</string>
|
||||
<string name="ephemeral_messages">Verschwindende Nachrichten</string>
|
||||
<string name="ephemeral_messages_hint">Gilt für alle Gruppenmitglieder, die Delta Chat verwenden. Nachrichten können kopiert, gespeichert und weitergeleitet werden oder es können andere E-Mail-Clients verwendet werden.</string>
|
||||
<string name="save">Speichern</string>
|
||||
@@ -184,6 +184,14 @@
|
||||
<string name="webxdc_app">App</string>
|
||||
<!-- plural of "App"; used to present "Webxdc App" (https://webxdc.org) in a user friendly way. Please stay close to the original term and keep it short (it is used in menus with few screen space). -->
|
||||
<string name="webxdc_apps">Apps</string>
|
||||
<string name="webxdc_store_url">App-Picker-URL</string>
|
||||
<string name="webxdc_store_url_explain">Wenn gesetzt, wird diese URL als App-Picker anstelle der Voreinstellung verwendet.</string>
|
||||
<string name="home">Start</string>
|
||||
<string name="games">Spiele</string>
|
||||
<string name="tools">Tools</string>
|
||||
<string name="app_size">Größe</string>
|
||||
<string name="app_date_published">Veröffentlicht</string>
|
||||
<string name="add_to_chat">Zum Chat hinzufügen</string>
|
||||
<string name="unknown">Unbekannt</string>
|
||||
|
||||
<string name="green">Grün</string>
|
||||
@@ -536,10 +544,6 @@
|
||||
<string name="multidevice_transfer_done_devicemsg">ℹ️ Profil wurde auf Ihr Zweitgerät übertragen.</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="preparing_account">Profil vorbereiten…</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="waiting_for_receiver">Warte auf Empfänger…</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="receiver_connected">Empfänger verbunden…</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="transferring">Transfer…</string>
|
||||
<string name="troubleshooting">Fehlersuche</string>
|
||||
@@ -586,7 +590,7 @@
|
||||
<string name="instant_onboarding_create">Einverstanden & Profil erstellen</string>
|
||||
<!-- Secondary, link-like button to open a page with other possible instances -->
|
||||
<string name="instant_onboarding_show_more_instances">Anderen Server verwenden</string>
|
||||
<string name="instant_onboarding_other_server">Chatmail-Servers anzeigen</string>
|
||||
<string name="instant_onboarding_other_server">Chatmail-Server anzeigen</string>
|
||||
<!-- Hint about what happens when "Create Profile" button in pressed; the placeholder will be replaced by the group name -->
|
||||
<string name="instant_onboarding_group_info">Erstelle ein Profil, um der Gruppe \"%1$s\" beizutreten.</string>
|
||||
<!-- Hint about what happens when "Create Profile" button in pressed; the placeholder will be replaced by contact name and/or address -->
|
||||
@@ -656,8 +660,10 @@
|
||||
<string name="switch_account">Profil wechseln</string>
|
||||
<string name="add_account">Profil hinzufügen</string>
|
||||
<string name="profile_tag">Private Bezeichnung</string>
|
||||
<string name="profile_tag_hint">Familie, Arbeit, Freunde</string>
|
||||
<string name="profile_tag_hint">z.B. Familie, Arbeit, Freunde</string>
|
||||
<string name="profile_tag_explain">Die Bezeichnung ist nur für Sie sichtbar um zwischen Profilen zu unterscheiden.</string>
|
||||
<!-- Menu entry to sort an item to the beginning of a list. Only "To Top" may do as well in some translations, if that helps to stay shorter. -->
|
||||
<string name="move_to_top">Nach oben</string>
|
||||
<string name="delete_account">Profil löschen</string>
|
||||
<string name="delete_account_ask">Möchten Sie das Profil und alle Daten wirklich von diesem Gerät löschen?</string>
|
||||
<string name="delete_account_explain_with_name">Alle Daten des Profils \"%s\" werden von diesem Gerät gelöscht, dies schließt Ihre Ende-zu-Ende Autocrypt-Einstellungen, Kontakte, Chats, Nachrichten und Medien mit ein. Diese Aktion kann nicht rückgängig gemacht werden.</string>
|
||||
@@ -703,6 +709,8 @@
|
||||
<string name="pref_screen_security_explain">Aufforderung zum Sperren von Screenshots in der kürzlich erstellten Liste und in der App</string>
|
||||
<string name="pref_screen_security_please_restart_hint">Um die Bildschirmsicherheitseinstellungen anzuwenden, bitte App neu starten.</string>
|
||||
<string name="pref_notifications">Benachrichtigungen</string>
|
||||
<string name="pref_mention_notifications">Erwähnungen</string>
|
||||
<string name="pref_mention_notifications_explain">In stummgeschalteten Gruppen, über an Sie gerichtete Nachrichten, wie Antworten oder Reaktionen, benachrichtigen</string>
|
||||
<string name="pref_notifications_show">Anzeigen</string>
|
||||
<string name="pref_notifications_priority">Priorität</string>
|
||||
<string name="pref_notifications_explain">System-Benachrichtigungen bei neuen Nachrichten aktivieren</string>
|
||||
@@ -720,6 +728,7 @@
|
||||
<string name="pref_appearance">Darstellung</string>
|
||||
<string name="pref_theme">Design</string>
|
||||
<string name="pref_language">Sprache</string>
|
||||
<string name="pref_use_system_ui_font">Systemschrift verwenden</string>
|
||||
<string name="pref_incognito_keyboard">Inkognito-Tastatur</string>
|
||||
<!-- Translators: Must indicate that there is no guarantee as the system may not honor our request. -->
|
||||
<string name="pref_incognito_keyboard_explain">Deaktivierung des personalisierten Lernens der Tastatur anfordern.</string>
|
||||
@@ -737,7 +746,6 @@
|
||||
<string name="pref_app_access">App-Zugriff</string>
|
||||
<string name="pref_chats">Chats</string>
|
||||
<string name="pref_in_chat_sounds">In-Chat-Klänge</string>
|
||||
<string name="pref_message_text_size">Schriftgröße</string>
|
||||
<string name="pref_view_log">Protokoll anzeigen</string>
|
||||
<string name="pref_saved_log">Die Logdatei wurde im Downloads Ordner gespeichert.</string>
|
||||
<string name="pref_save_log_failed">Logdatei konnte nicht gespeichert werden.</string>
|
||||
@@ -1023,8 +1031,6 @@
|
||||
<string name="mailto_link_could_not_be_decoded">Mailto-Link konnte nicht dekodiert werden: %1$s</string>
|
||||
|
||||
<!-- notifications -->
|
||||
<!-- deprecated, use mark_as_read or mark_as_read_short -->
|
||||
<string name="notify_dismiss">Verwerfen</string>
|
||||
<string name="notify_reply_button">Antworten</string>
|
||||
<string name="notify_new_message">Neue Nachricht</string>
|
||||
<string name="notify_background_connection_enabled">Hintergrundverbindung aktiviert</string>
|
||||
@@ -1094,6 +1100,8 @@
|
||||
<string name="timestamp_format_m_desktop">D MMM</string>
|
||||
<string name="remove_desktop">Entfernen</string>
|
||||
<string name="save_desktop">Speichern</string>
|
||||
<!-- Opposite of "Save". Undo a "Save" action. Similar to "Unmute", "Unpin". Could also be worded as "Save no longer" or so. -->
|
||||
<string name="unsave">Nicht mehr speichern</string>
|
||||
<string name="name_desktop">Name</string>
|
||||
<string name="select_group_image_desktop">Gruppenbild auswählen</string>
|
||||
<string name="export_backup_desktop">Backup exportieren</string>
|
||||
@@ -1153,11 +1161,20 @@
|
||||
<string name="notifications_avg_minutes">Im Mittel alle %1$d Minuten</string>
|
||||
<string name="notifications_avg_hours">Im Mittel alle %1$d Stunden</string>
|
||||
<string name="last_check_at">Überprüft um %1$s</string>
|
||||
<string name="system_settings">Systemeinstellungen</string>
|
||||
<!-- shown below the button "System Settings" on the notification screen. this is a hint about what can be edited on System Settings' Notification page - eg. the notification type (banner, lock screen, notification centre), sound, badges and so on. no need to be exhaustive here, it is only to give the user an idea. -->
|
||||
<string name="system_settings_notify_explain_ios">Töne, Vorschau, Stil und mehr bearbeiten</string>
|
||||
<!-- iOS webxdc selector -->
|
||||
<string name="webxdc_selector_empty_hint">Empfangene oder gesendete Apps werden hier angezeigt. Unter \"Dateien\" können Sie auf heruntergeladene Apps zugreifen.</string>
|
||||
<!-- iOS webxdc shortcut page -->
|
||||
<string name="shortcut_step1_tap_share_btn">\"Teilen\" anklicken</string>
|
||||
<string name="shortcut_step2_tap_add_to_home_screen">\"Zum Home-Bildschirm\" auswählen, um die App zum Startbildschirm hinzuzufügen</string>
|
||||
<!-- iOS shortcut widget -->
|
||||
<!-- use the same translation for "Shortcuts" as the system is using, often the term "Shortcut" stays untranslated; check eg. how the "Shortcuts" system app is called in your locale -->
|
||||
<string name="shortcuts_widget_title">Shortcuts</string>
|
||||
<!-- use the same translation for "Widget" as the system is using; often the term "Widget" stays untranslated -->
|
||||
<string name="shortcuts_widget_description">Delta Chat\'s \"Zum Widget hinzufügen\" fügt Chats hinzu</string>
|
||||
<!-- use the same translation for "Widget" as the system is using; often the term "Widget" stays untranslated -->
|
||||
<string name="remove_from_widget">Aus Widget entfernen</string>
|
||||
<!-- use the same translation for "Widget" as the system is using; often the term "Widget" stays untranslated -->
|
||||
<string name="add_to_widget">Zum Widget hinzufügen</string>
|
||||
<!-- iOS permissions, copy from "deltachat-ios/Info.plist", which is used on missing translations in "deltachat-ios/LANG.lproj/InfoPlist.strings" -->
|
||||
<string name="InfoPlist_NSCameraUsageDescription">Delta Chat verwendet die Kamera, um Fotos aufzunehmen und zu versenden und um QR-Codes zu scannen.</string>
|
||||
<string name="InfoPlist_NSContactsUsageDescription">Delta Chat verwendet die Kontakte, um eine Liste von E-Mail-Adressen anzuzeigen, an die Sie schreiben können. Delta Chat hat keine Server; das Adressbuch wird nicht versandt.</string>
|
||||
@@ -1166,6 +1183,7 @@
|
||||
<string name="InfoPlist_NSMicrophoneUsageDescription">Delta Chat verwendet das Mikrofon, um Sprachnachrichten und Videos mit Sound aufzunehmen und zu versenden.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryUsageDescription">Delta Chat verwendet die Fotos, um Ihnen die Möglichkeit zu geben, diese auszuwählen und zu versenden.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryAddUsageDescription">Delta Chat möchte Bilder in Ihrer Fotobibliothek speichern.</string>
|
||||
<string name="InfoPlist_NSFaceIDUsageDescription">Delta Chat kann Face-ID verwenden, um Ihr lokales Profil, Backups und die Einrichtung eines zweiten Geräts zu schützen.</string>
|
||||
|
||||
|
||||
<!-- android specific strings, developers: please take care to remove strings that are no longer used! -->
|
||||
@@ -1181,7 +1199,7 @@
|
||||
<string name="perm_enable_bg_already_done">Sie haben Delta Chat bereits erlaubt, Nachrichten im Hintergrund zu empfangen.\n\nFalls keine Nachrichten eingehen, überprüfen Sie bitte auch Ihre Systemeinstellungen.</string>
|
||||
|
||||
<!-- device messages for updates -->
|
||||
<string name="update_1_46_android">Neuer Startbildschirm 🐣 und mehr:\n\n⚡️ Melden Sie sich bei sicheren, schnellen Chatmail-Servern (https://delta.chat/chatmail) an oder nutzen Sie klassische E-Mail-Server\n\n👉 PUSH-Benachrichtigungen auf allen Chatmail-Server\n\n👤 Bringen Sie Ihre Freunde über „Kontakte anhängen“ sicher in Kontakt\n\n🥰 Mit beliebigen Emojis reagieren\n\n📌 Pinnen von Chats direkt aus der Suche ... und MEHR auf %1$s</string>
|
||||
<string name="update_1_50_android">Was ist neu?\n\n❤️🔥 Neuer Emoji-icker mit mehr Emojis\n\n🎮 In-Chat-App Verbesserungen: Benachrichtigungen erhalten und Apps im Kontext öffnen, z.B. einen hinzugefügten Kalendereintrag direkt anzeigen\n\n👍 Lassen Sie sich über Reaktionen auf Ihre Nachrichten benachrichtigen\n\n... 🛠️ FIXES und NOCH MEHR unter %1$s</string>
|
||||
<string name="update_1_46_ios">Neuer Startbildschirm 🐣 und mehr:\n\n⚡️ Melden Sie sich bei sicheren, schnellen Chatmail-Servern (https://delta.chat/chatmail) an oder nutzen Sie klassische E-Mail-Server\n\n👉 PUSH-Benachrichtigungen auf allen Chatmail-Server\n\n👤 Empfangen Sie „Angehängte Kontakte“ von Ihren Freunden\n\n🥰 Direktere Auswahl von Reaktionen ... und MEHR auf %1$s</string>
|
||||
<string name="update_switch_profile_placement">ℹ️ \"Profil wechseln\" verschoben: Tippen Sie auf Ihr Profilbild in der oberen Ecke des Hauptbildschirms, um Profile hinzuzufügen oder zu wechseln 💡.</string>
|
||||
</resources>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">Εντάξει</string>
|
||||
<string name="cancel">Ακύρωση</string>
|
||||
<string name="clear_search">Αναζήτηση</string>
|
||||
<string name="clear_search">Αναζήτηση</string>
|
||||
<string name="yes">Ναι</string>
|
||||
<string name="no">Όχι</string>
|
||||
<string name="select">Επιλογή</string>
|
||||
@@ -584,7 +584,6 @@
|
||||
<string name="pref_app_access">Πρόσβαση εφαρμογής</string>
|
||||
<string name="pref_chats">Συνομιλίες</string>
|
||||
<string name="pref_in_chat_sounds">Ήχοι μέσα στη συνομιλία</string>
|
||||
<string name="pref_message_text_size">Μέγεθος γραμματοσειράς μηνύματος</string>
|
||||
<string name="pref_view_log">Προβολή Αρχείου Καταγραφής</string>
|
||||
<string name="pref_saved_log">ΤΟ αρχείο καταγραφής αποθηκεύτηκε στο φάκελο \"Λήψεις\".</string>
|
||||
<string name="pref_save_log_failed">Αποτυχία αποθήκευσης του αρχείου καταγραφής</string>
|
||||
@@ -827,8 +826,6 @@
|
||||
<string name="mailto_link_could_not_be_decoded">Αδυναμία αποκωδικοποίησης του συνδέσμου mailto: %1$s</string>
|
||||
|
||||
<!-- notifications -->
|
||||
<!-- deprecated, use mark_as_read or mark_as_read_short -->
|
||||
<string name="notify_dismiss">Απόρριψη</string>
|
||||
<string name="notify_reply_button">Απάντηση</string>
|
||||
<string name="notify_new_message">Νέο μήνυμα</string>
|
||||
<string name="notify_background_connection_enabled">Η σύνδεση στο παρασκήνιο ενεργοποιήθηκε</string>
|
||||
@@ -950,9 +947,6 @@
|
||||
<string name="last_check_at">Έλεγχος στις %1$s</string>
|
||||
<!-- iOS webxdc selector -->
|
||||
<string name="webxdc_selector_empty_hint">Οι ιδιωτικές εφαρμογές που λαμβάνονται ή αποστέλλονται σε οποιαδήποτε συνομιλία θα εμφανίζονται εδώ. Το \"Αρχεία\" εμφανίζει ιδιωτικές εφαρμογές που μόλις κατεβάσατε.</string>
|
||||
<!-- iOS webxdc shortcut page -->
|
||||
<string name="shortcut_step1_tap_share_btn">Κάντε κλικ στο κουμπί κοινής χρήσης</string>
|
||||
<string name="shortcut_step2_tap_add_to_home_screen">Επιλέξτε \"Προσθήκη στην αρχική οθόνη\" για να προσθέσετε την εφαρμογή στην αρχική σας οθόνη.</string>
|
||||
<!-- iOS permissions, copy from "deltachat-ios/Info.plist", which is used on missing translations in "deltachat-ios/LANG.lproj/InfoPlist.strings" -->
|
||||
<string name="InfoPlist_NSCameraUsageDescription">Το Delta Chat χρησιμοποιεί την κάμερά σας για λήψη και αποστολή φωτογραφιών και βίντεο και για σάρωση κωδικών QR.</string>
|
||||
<string name="InfoPlist_NSContactsUsageDescription">Το Delta Chat χρησιμοποιεί τις επαφές σας για να εμφανίσει μια λίστα με διευθύνσεις e-mail στις οποίες μπορείτε να γράψετε. Το Delta Chat δεν έχει διακομιστή, οι επαφές σας δεν αποστέλλονται πουθενά.</string>
|
||||
@@ -961,8 +955,6 @@
|
||||
<string name="InfoPlist_NSMicrophoneUsageDescription">Το Delta Chat χρησιμοποιεί το μικρόφωνό σας για εγγραφή και αποστολή φωνητικών μηνυμάτων και βίντεο με ήχο.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryUsageDescription">Το Delta Chat θα σας επιτρέψει να επιλέξετε ποιες φωτογραφίες από τη βιβλιοθήκη σας θα στείλετε.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryAddUsageDescription">Το Delta Chat θέλει να αποθηκεύσει εικόνες στη συλλογή φωτογραφιών σας.</string>
|
||||
|
||||
|
||||
<string name="pref_background_notifications_rationale">Για να διατηρήσετε τη σύνδεση με τον διακομιστή e-mail σας και να λαμβάνετε μηνύματα στο παρασκήνιο, αγνοήστε τις βελτιστοποιήσεις μπαταρίας στο επόμενο βήμα.\n\nΤο Delta Chat χρησιμοποιεί λίγους πόρους και φροντίζει να μην εξαντλήσει την μπαταρία σας.</string>
|
||||
<!-- disabling "Reliable service" will hide a the maybe annoying permanent-notification with the drawback that new-message-notifications get potentially unreliable -->
|
||||
<string name="perm_enable_bg_reminder_title">Πατήστε εδώ για να λαμβάνετε μηνύματα ενώ το Delta Chat είναι στο παρασκήνιο.</string>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">Bone</string>
|
||||
<string name="cancel">Nuligi</string>
|
||||
<string name="clear_search">Forviŝi Serĉon</string>
|
||||
<string name="clear_search">Forviŝi Serĉon</string>
|
||||
<string name="yes">Jes</string>
|
||||
<string name="no">Ne</string>
|
||||
<string name="select">Elekti</string>
|
||||
@@ -422,7 +422,6 @@
|
||||
<string name="pref_app_access">Aliro al aplikaĵo</string>
|
||||
<string name="pref_chats">Interparoloj</string>
|
||||
<string name="pref_in_chat_sounds">Sonoj dum interparolado</string>
|
||||
<string name="pref_message_text_size">Mesaĝa tipargrando</string>
|
||||
<string name="pref_view_log">Vidi protokolon</string>
|
||||
<string name="pref_saved_log">Konservis protokolon al la elŝuta dosierujo</string>
|
||||
<string name="pref_save_log_failed">Malsukcesis konservi protokolon</string>
|
||||
@@ -445,6 +444,7 @@
|
||||
<string name="pref_send_copy_to_self">Sendi kopion al mi mem</string>
|
||||
<string name="pref_show_emails_all">Ĉiuj</string>
|
||||
<string name="autocrypt_prefer_e2ee">Preferi tutvojan ĉifradon</string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">Respondi</string>
|
||||
<string name="notify_new_message">Nova mesaĝo</string>
|
||||
<string name="notify_priority_high">Alta</string>
|
||||
|
||||
@@ -8,9 +8,11 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Cancelar</string>
|
||||
<!-- deprecated, the word "or" to separate blocks in the user interface that are mutually exclusive -->
|
||||
<string name="or_separator">o</string>
|
||||
<string name="clear_search">Borrar búsqueda</string>
|
||||
<!-- a noun, used on a button, short for "show link" -->
|
||||
<string name="link">Enlace</string>
|
||||
<!-- "scan" in the meaning of "scan QR code" -->
|
||||
<string name="scan">Escanear</string>
|
||||
<string name="yes">Sí</string>
|
||||
<string name="no">No</string>
|
||||
<string name="select">Seleccionar</string>
|
||||
@@ -135,6 +137,11 @@
|
||||
<item quantity="many">%d mensajes</item>
|
||||
<item quantity="other">%d mensajes</item>
|
||||
</plurals>
|
||||
<plurals name="n_reactions">
|
||||
<item quantity="one">%d reacción</item>
|
||||
<item quantity="many">%d reacciones</item>
|
||||
<item quantity="other">%d reacciones</item>
|
||||
</plurals>
|
||||
<plurals name="n_members">
|
||||
<item quantity="one">%d miembro</item>
|
||||
<item quantity="many">%d miembros</item>
|
||||
@@ -173,7 +180,7 @@
|
||||
<string name="video">Video</string>
|
||||
<string name="documents">Documentos</string>
|
||||
<string name="contact">Contacto</string>
|
||||
<string name="bot">Bot</string>
|
||||
<string name="bot">bot</string>
|
||||
<string name="camera">Cámara</string>
|
||||
<!-- As in "start a video recording" or "take a photo"; eg. the description of the "shutter button" in cameras -->
|
||||
<string name="capture">Capturar</string>
|
||||
@@ -245,6 +252,7 @@
|
||||
<string name="menu_message_details">Detalles del mensaje</string>
|
||||
<string name="menu_copy_to_clipboard">Copiar al portapapeles</string>
|
||||
<string name="share_invite_link">Compartir enlace de invitación</string>
|
||||
<string name="share_invite_link_explain">Cualquier persona que tenga este enlace podrá ver tu perfil y comenzar a chatear contigo. Compártelo solo con personas en las que confíes.</string>
|
||||
<string name="invite_friends">Invitar amigos</string>
|
||||
<!-- %1$s is replaced by the user's invitation link ("https://i.delta.chat/...") -->
|
||||
<string name="invite_friends_text">Contáctame en Delta Chat:\n%1$s</string>
|
||||
@@ -454,7 +462,6 @@
|
||||
<string name="mailing_list_profile_info">Los cambios en el nombre y la imagen de la lista de correo solo se aplican a este dispositivo.</string>
|
||||
|
||||
<!-- extra services -->
|
||||
<string name="webxdc_apps_store">🎮 Tienda de mini-apps</string>
|
||||
<string name="public_bots">🤖 Bots Públicos</string>
|
||||
|
||||
<!-- webxdc -->
|
||||
@@ -466,6 +473,9 @@
|
||||
<string name="send_file_to">Enviar \"%1$s\" a…</string>
|
||||
<!-- title shown above a list contacts where one should be selected (eg. when a webxdc attempts to send a message to a chat) -->
|
||||
<string name="send_message_to">Enviar mensaje a…</string>
|
||||
<string name="enable_realtime">Aplicaciones en tiempo real</string>
|
||||
<string name="enable_realtime_explain">Habilite las conexiones en tiempo real para las aplicaciones compartidas en los chats. Si esta opción está habilitada, los participantes del chat podrán descubrir su dirección IP cuando inicie una aplicación.</string>
|
||||
|
||||
<!-- map -->
|
||||
<string name="filter_map_on_time">Mostrar ubicaciones en el marco de tiempo</string>
|
||||
<string name="show_location_traces">Mostrar trazas</string>
|
||||
@@ -492,6 +502,10 @@
|
||||
<string name="search_files">Buscar archivos</string>
|
||||
<string name="search_explain">Buscar chats, contactos, y mensajes</string>
|
||||
<string name="search_no_result_for_x">No se encontraron resultados para \"%s\"</string>
|
||||
<!-- Adjective, as in "Show Unread Messages" -->
|
||||
<string name="search_unread">No leído</string>
|
||||
|
||||
|
||||
<!-- create/edit groups, contact/group profile -->
|
||||
<string name="group_name">Nombre del grupo</string>
|
||||
<string name="group_avatar">Imagen del grupo</string>
|
||||
@@ -550,10 +564,6 @@
|
||||
<string name="multidevice_transfer_done_devicemsg">ℹ️ Cuenta transferida a tu otro dispositivo.</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="preparing_account">Preparando cuenta…</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="waiting_for_receiver">Esperando por receptor…</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="receiver_connected">Receptor conectado…</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="transferring">Transfiriendo…</string>
|
||||
<string name="troubleshooting">Solución de problemas</string>
|
||||
@@ -631,6 +641,20 @@
|
||||
<string name="login_smtp_port">Puerto SMTP</string>
|
||||
<string name="login_smtp_security">Seguridad SMTP</string>
|
||||
<string name="login_auth_method">Método de autorización</string>
|
||||
<!-- the word "Proxy" might be left untranslated unless the destination language has a well-known term for a "Proxy Server", acting intermediary between the app and the chatmail or email server -->
|
||||
<string name="proxy_settings">Proxy</string>
|
||||
<string name="proxy_use_proxy">Usar proxy</string>
|
||||
<string name="proxy_add">Añadir proxy</string>
|
||||
<string name="proxy_add_explain">Tipos de proxy admitidos: HTTP(S), SOCKS5 y Shadowsocks.</string>
|
||||
<string name="proxy_add_url_hint">Introduzca el enlace del proxy aquí</string>
|
||||
<string name="proxy_invalid">Proxy no válido o no compatible</string>
|
||||
<string name="proxy_list_header">Proxies guardados</string>
|
||||
<string name="proxy_delete">Eliminar proxy</string>
|
||||
<string name="proxy_delete_explain">¿Seguro que quieres eliminar \"%1$s\"?</string>
|
||||
<string name="proxy_use_proxy_confirm">¿Quieres utilizar el proxy \"%1$s\"?</string>
|
||||
<string name="proxy_share_explain">Tus amigos pueden agregar este proxy escaneando el código QR.</string>
|
||||
<string name="proxy_share_link">Compartir enlace</string>
|
||||
|
||||
<!-- deprecated -->
|
||||
<string name="login_socks5">SOCKS5</string>
|
||||
<string name="login_socks5_use_socks5">Usar SOCKS5</string>
|
||||
@@ -655,6 +679,9 @@
|
||||
<string name="accept_invalid_certificates">Aceptar certificados no válidos</string>
|
||||
<string name="switch_account">Cambiar cuenta</string>
|
||||
<string name="add_account">Agregar cuenta</string>
|
||||
<string name="profile_tag">Etiqueta privada</string>
|
||||
<string name="profile_tag_hint">ej. Trabajo, Familia</string>
|
||||
<string name="profile_tag_explain">Etiqueta que es visible sólo para ti; útil para diferenciar tus perfiles.</string>
|
||||
<string name="delete_account">Eliminar cuenta</string>
|
||||
<string name="delete_account_ask">¿Estás seguro de que quieres eliminar los datos de tu cuenta?</string>
|
||||
<string name="delete_account_explain_with_name">Todos los datos de la cuenta de \"%s\" este dispositivo serán eliminados. Incluyendo la configuración de encriptado punto a punto, contactos, chats, mensajes y multimedia. Esta acción no puede ser deshecha.</string>
|
||||
@@ -668,7 +695,10 @@
|
||||
<!-- share and forward messages -->
|
||||
<!-- Translators: shown above a chat/contact list when selecting recipients to forward messages -->
|
||||
<string name="forward_to">Reenviar a…</string>
|
||||
<!-- first placeholder is replaced by the number of files (always 2 or more); second placeholder is replaced by a chat name -->
|
||||
<string name="ask_send_files_to_chat">¿Enviar %1$d archivos a \"%2$s\"?</string>
|
||||
<string name="ask_send_files_to_selected_chats">¿Enviar %1$d archivo(s) a %2$d chats?</string>
|
||||
<string name="videos_sent_without_recoding">(Los videos se enviarán en su tamaño original. Para enviar videos como archivos más pequeños, adjúntelos por separado)</string>
|
||||
<string name="share_text_multiple_chats">¿Enviar este texto a %1$d chats?\n\n\"%2$s\"</string>
|
||||
<string name="share_abort">Intercambio abortado debido a la falta de permisos.</string>
|
||||
|
||||
@@ -697,6 +727,8 @@
|
||||
<string name="pref_screen_security_explain">Solicitar bloqueo de capturas de pantalla en la lista de recientes y dentro de la aplicación</string>
|
||||
<string name="pref_screen_security_please_restart_hint">Para aplicar la configuración de seguridad de la pantalla, reinicie la aplicación.</string>
|
||||
<string name="pref_notifications">Notificaciones </string>
|
||||
<string name="pref_mention_notifications">Notificar menciones</string>
|
||||
<string name="pref_mention_notifications_explain">Notificar mensajes en chats silenciados si están dirigidos a ti, como en respuestas o reacciones a tus mensajes</string>
|
||||
<string name="pref_notifications_show">Mostrar</string>
|
||||
<string name="pref_notifications_priority">Prioridad</string>
|
||||
<string name="pref_notifications_explain">Habilitar las notificaciones del sistema para nuevos mensajes</string>
|
||||
@@ -731,7 +763,6 @@
|
||||
<string name="pref_app_access">Acceso a la aplicación</string>
|
||||
<string name="pref_chats">Chats</string>
|
||||
<string name="pref_in_chat_sounds">Sonidos en el chat</string>
|
||||
<string name="pref_message_text_size">Tamaño de texto del mensaje</string>
|
||||
<string name="pref_view_log">Ver log</string>
|
||||
<string name="pref_saved_log">El log fue guardado en la carpeta de Descargas</string>
|
||||
<string name="pref_save_log_failed">No se pudo guardar el log</string>
|
||||
@@ -1018,8 +1049,6 @@
|
||||
<string name="mailto_link_could_not_be_decoded">El enlace mailto no se pudo decodificar: %1$s</string>
|
||||
|
||||
<!-- notifications -->
|
||||
<!-- deprecated, use mark_as_read or mark_as_read_short -->
|
||||
<string name="notify_dismiss">Descartar</string>
|
||||
<string name="notify_reply_button">Responder</string>
|
||||
<string name="notify_new_message">Nuevo mensaje</string>
|
||||
<string name="notify_background_connection_enabled">Conexión en segundo plano habilitada</string>
|
||||
@@ -1149,10 +1178,7 @@
|
||||
<string name="notifications_avg_hours">Promedio cada %1$d horas</string>
|
||||
<string name="last_check_at">Comprobado en %1$s</string>
|
||||
<!-- iOS webxdc selector -->
|
||||
<string name="webxdc_selector_empty_hint">Apps recibidas o enviadas en cualquier chat aparecerán aquí. \"Archivos\" muestra apps descargadas.</string>
|
||||
<!-- iOS webxdc shortcut page -->
|
||||
<string name="shortcut_step1_tap_share_btn">Presiona el botón de compartir</string>
|
||||
<string name="shortcut_step2_tap_add_to_home_screen">Selecciona \"Añadir a la pantalla principal\" para añadir la aplicación a tu pantaña principal.</string>
|
||||
<string name="webxdc_selector_empty_hint">Aplicaciones privadas recibidas o enviadas en cualquier chat aparecerán aquí. \"Archivos\" muestra aplicaciones privadas descargadas. </string>
|
||||
<!-- iOS permissions, copy from "deltachat-ios/Info.plist", which is used on missing translations in "deltachat-ios/LANG.lproj/InfoPlist.strings" -->
|
||||
<string name="InfoPlist_NSCameraUsageDescription">Al permitir el acceso a la cámara podrás tomar fotos y videos.</string>
|
||||
<string name="InfoPlist_NSContactsUsageDescription">Al permitir acceder a tu libreta de direcciones podrás chatear con los contactos de tu dispositivo.</string>
|
||||
@@ -1161,8 +1187,6 @@
|
||||
<string name="InfoPlist_NSMicrophoneUsageDescription">Al permitir el acceso al micrófono podrás grabar audio.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryUsageDescription">Al permitir el acceso a la galería de fotos podrás subir tus imágenes desde allí.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryAddUsageDescription">Delta Chat quiere guardar imágenes en tu galería</string>
|
||||
|
||||
|
||||
<!-- android specific strings, developers: please take care to remove strings that are no longer used! -->
|
||||
<string name="pref_instant_delivery">Entrega inmediata</string>
|
||||
<string name="pref_background_notifications">Usar conexión en segundo plano</string>
|
||||
@@ -1176,7 +1200,7 @@
|
||||
<string name="perm_enable_bg_already_done">Ya has permitido que Delta Chat reciba mensajes en segundo plano.\n\nSi los mensajes aún no llegan en segundo plano, compruebe también la configuración de su sistema.</string>
|
||||
|
||||
<!-- device messages for updates -->
|
||||
<string name="update_1_46_android">Nueva pantalla de bienvenida 🐣 y más:\n\n⚡️ Regístrese en servidores de chatmail rápidos y seguros (https://delta.chat/chatmail) o use servidores de correo electrónico clásicos\n\n👉 Notificaciones PUSH para cualquier servidor de chatmail\n\n👤 Presenta un amigo a otro de forma segura usando \"Adjuntar Contacto\"\n\n🥰 Reacciona con cualquier emoji\n\n📌 Ancla chats directamente desde los resultados de la búsqueda... y MUCHO más en %1$s</string>
|
||||
<string name="update_1_50_android">¿Qué hay de nuevo?\n\n❤️🔥 Nuevo selector de emojis con más emojis\n\n🎮 Aplicaciones de chat mejoradas: recibe notificaciones y abre aplicaciones en contexto, por ejemplo, abre una entrada de calendario agregada directamente\n\n👍 Recibe notificaciones sobre las reacciones a tus mensajes\n\n... 🛠️ CORRECCIONES y AÚN MÁS en %1$s</string>
|
||||
<string name="update_1_46_ios">Nueva pantalla inicial 🐣 y más:\n\n⚡️ Regístrese en servidores de chatmail rápidos y seguros (https://delta.chat/chatmail) o use servidores de correo electrónico clásicos\n\n👉 Notificaciones PUSH para cualquier servidor de chatmail\n\n👤 Reciba \"Contactos adjuntos\" y conéctese con sus amigos\n\n🥰 Selección de reacción más rápida... y MÁS en %1$s</string>
|
||||
<string name="update_switch_profile_placement">ℹ️ Se movió la opción \"Cambiar perfil\": toca tu imagen de perfil en la esquina superior de la pantalla principal para agregar o cambiar perfiles 💡</string>
|
||||
</resources>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">Ados</string>
|
||||
<string name="cancel">Utzi</string>
|
||||
<string name="yes">Bai</string>
|
||||
<string name="yes">Bai</string>
|
||||
<string name="no">Ez</string>
|
||||
<string name="on">Bai</string>
|
||||
<string name="off">Ez</string>
|
||||
@@ -365,7 +365,6 @@
|
||||
<string name="pref_app_access">Aplikazio sarbidea</string>
|
||||
<string name="pref_chats">Txatak</string>
|
||||
<string name="pref_in_chat_sounds">Txat bitarteko soinuak</string>
|
||||
<string name="pref_message_text_size">Mezuen letra tamaina</string>
|
||||
<string name="pref_view_log">Ikusi egunkaria</string>
|
||||
<string name="pref_saved_log">Egunkaria deskargen karpetan gorde da</string>
|
||||
<string name="pref_save_log_failed">Huts egin du egunkaria gordetzean</string>
|
||||
@@ -481,6 +480,7 @@
|
||||
<string name="contact_not_verified">Ezin da %1$s egiaztatu</string>
|
||||
<!-- translators: "setup" is the "encryption setup" here, as in "Autocrypt Setup Message" -->
|
||||
<string name="contact_setup_changed">Aldatu %1$s(r)en ezarpena</string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">Erantzun</string>
|
||||
<string name="notify_new_message">Mezu berria</string>
|
||||
<string name="notify_background_connection_enabled">Bigarren planoko konexioa gaituta</string>
|
||||
|
||||
@@ -4,9 +4,11 @@
|
||||
<string name="app_name">دلتاچت</string>
|
||||
<string name="ok">تأیید</string>
|
||||
<string name="cancel">لغو</string>
|
||||
<!-- deprecated, the word "or" to separate blocks in the user interface that are mutually exclusive -->
|
||||
<string name="or_separator">یا</string>
|
||||
<string name="clear_search">پاک کردن جستوجو</string>
|
||||
<!-- a noun, used on a button, short for "show link" -->
|
||||
<string name="link">پیوند</string>
|
||||
<!-- "scan" in the meaning of "scan QR code" -->
|
||||
<string name="scan">اسکن</string>
|
||||
<string name="yes">بله</string>
|
||||
<string name="no">خیر</string>
|
||||
<string name="select">انتخاب</string>
|
||||
@@ -56,7 +58,7 @@
|
||||
<string name="mark_all_as_read">همه را خوانده شده بزن</string>
|
||||
<string name="mark_as_read">علامت زدن به عنوان خوانده شده</string>
|
||||
<!-- Shortest text for "Mark as being read". In english, this could be "Read" (past tense of "to read"), in german, this could be "Gelesen". -->
|
||||
<string name="mark_as_read_short">خوانده شد</string>
|
||||
<string name="mark_as_read_short">علامت زدن به عنوان خوانده شده</string>
|
||||
<!-- Placeholder text when something is loading -->
|
||||
<string name="loading">در حال بارگیری...</string>
|
||||
<string name="hide">مخفی کردن</string>
|
||||
@@ -125,6 +127,10 @@
|
||||
<item quantity="one">%d پیام</item>
|
||||
<item quantity="other">%d پیام</item>
|
||||
</plurals>
|
||||
<plurals name="n_reactions">
|
||||
<item quantity="one">%dواکنش</item>
|
||||
<item quantity="other">%dواکنش</item>
|
||||
</plurals>
|
||||
<plurals name="n_members">
|
||||
<item quantity="one">%d عضو</item>
|
||||
<item quantity="other">%d عضو</item>
|
||||
@@ -148,6 +154,7 @@
|
||||
<!-- "Stickers" as known from other messengers; in some languages, the English "Sticker" is fine. -->
|
||||
<string name="sticker">استیکر</string>
|
||||
<string name="add_to_sticker_collection">افزودن به مجموعه استیکر</string>
|
||||
<string name="add_stickers_instructions">برای اضافه کردن برچسب روی «بازکردن پوشهٔ برچسب» بزنید، یک زیرپوشه برای دستهٔ برچسب خود درست کنید و برچسبها را به آنجا بکشید</string>
|
||||
<string name="open_sticker_folder">بازکردن پوشه استیکر</string>
|
||||
<string name="images">تصاویر</string>
|
||||
<string name="audio">صدا</string>
|
||||
@@ -159,6 +166,7 @@
|
||||
<string name="video">فیلم</string>
|
||||
<string name="documents">اسناد</string>
|
||||
<string name="contact">مخاطب</string>
|
||||
<string name="bot">ربات</string>
|
||||
<string name="camera">دوربین</string>
|
||||
<!-- As in "start a video recording" or "take a photo"; eg. the description of the "shutter button" in cameras -->
|
||||
<string name="capture">گرفتن</string>
|
||||
@@ -202,11 +210,15 @@
|
||||
استفاده شوند و رمزگذاری سراسری برای آنها تضمین نمیشود.</string>
|
||||
<string name="menu_new_chat">گپ جدید</string>
|
||||
<string name="menu_new_group">گروه جدید</string>
|
||||
<string name="clone_chat">درست کردن گپ جدید از این گپ</string>
|
||||
<!-- consider keeping the term "broadcast" as in WhatsApp or Telegram -->
|
||||
<string name="broadcast_list">لیست Broadcast</string>
|
||||
<string name="broadcast_lists">لیستهای Broadcast</string>
|
||||
<string name="new_broadcast_list">لیست Broadcast جدید</string>
|
||||
<string name="add_recipients">افزودن گیرنده</string>
|
||||
<string name="edit_broadcast_list">ویرایش فهرست Broadcast</string>
|
||||
<string name="broadcast_list_name">نام فهرست BroadCast</string>
|
||||
<string name="please_enter_broadcast_list_name">وارد کردن نام برای فهرست Broadcast.</string>
|
||||
<string name="menu_send">ارسال</string>
|
||||
<string name="menu_toggle_keyboard">تعییر صفحه کلید شکلکها</string>
|
||||
<string name="menu_edit_group">ویرایش گروه</string>
|
||||
@@ -224,6 +236,12 @@
|
||||
<string name="menu_delete_location">حذف این موقعیت مکانی؟</string>
|
||||
<string name="menu_message_details">جزئیات پیام</string>
|
||||
<string name="menu_copy_to_clipboard">رونوشتبرداری در حافظه</string>
|
||||
<string name="share_invite_link">اشتراک پیوند دعوت</string>
|
||||
<string name="share_invite_link_explain">هرکس با استفاده از این پیوند میتواند نمایهٔ شما را ببییند و یک گپ را با شما شروع کند. این را تنها به کسانی که اعتماد دارید بدهید.</string>
|
||||
<string name="invite_friends">دعوت دوستان</string>
|
||||
<!-- %1$s is replaced by the user's invitation link ("https://i.delta.chat/...") -->
|
||||
<string name="invite_friends_text">تماس گرفتن با من در دلتاچت:\n
|
||||
%1$s</string>
|
||||
<string name="menu_copy_selection_to_clipboard">رونوشت برداری از انتخاب شده</string>
|
||||
<string name="menu_copy_link_to_clipboard">رونوشت برداری از لینک</string>
|
||||
<string name="menu_copy_text_to_clipboard">رونوشت گرفتن از متن</string>
|
||||
@@ -258,6 +276,10 @@
|
||||
<string name="select_chat">انتخاب چت</string>
|
||||
<string name="select_more">انتخاب بیشتر</string>
|
||||
<string name="menu_edit_name">ویرایش نام</string>
|
||||
<!-- The placeholder will be replaced by the name the contact gave themself (if any) or by an e-mail address. -->
|
||||
<string name="edit_name_explain">به شما یک نام مستعار به جای «%1$s» نمایش میدهد. برای نمایش نام انتخابی خود مخاطب، این را خالی بگذارید.</string>
|
||||
<!-- The placeholder will be replaced by the name the contact gave themself (if any) or by an e-mail address. -->
|
||||
<string name="edit_name_placeholder">نام مستعار برای «%1$s»</string>
|
||||
<string name="menu_settings">تنظیمها</string>
|
||||
<string name="menu_advanced">پیشرفته</string>
|
||||
<string name="menu_view_profile">نمایش نمایه</string>
|
||||
@@ -274,6 +296,8 @@
|
||||
<string name="device_talk">پیامهای دستگاه</string>
|
||||
<string name="device_talk_subtitle">پیامهای داخلی</string>
|
||||
<string name="device_talk_explain">پیامها در این گپ به صورت داخلی و توسط نرمافزار دلتاچت تولید شدهاند. سازندهها از این محل برای اعلان به روزرسانیها و مشکلات پیش آمده حین کار استفاده میکنند. </string>
|
||||
<string name="device_talk_welcome_message2">برقراری مکالمه!\n\n
|
||||
روی «کد QR» در صفحهٔ اصلی هر دو دستگاه بزنید. روی یکی از دستگاهها «اسکن کد QR» را انتخاب کنید و با آن روی دستگاه دیگر بگیرید\n\nاگر در یک مکان نیستید، از طریق تماس تصویری اسکن کنید یا اینکه یک پیوند دعوت از «اسکن کد QR» به اشتراک بگذارید.\n\n.سپس از تجربه کردن پیامرسان بر روی بزرگترین شبکهٔ نامتمرکزی که تا به حال وجود داشته یعنی رایانامه لذت ببرید. در مقایسه با دیگر پیامرسانهای محبوب، دلتاچت هیچ کنترل مرکزیای ندارد. و شما، دوستهایتان، همکارهایتان یا خانوادههایتان را ردیابی نمیکند یا اینکه به سازمانهای بزرگ نمیفروشد.</string>
|
||||
<string name="edit_contact">ویرایش مخاطب</string>
|
||||
<!-- Verb "to pin", making something sticky, not a noun or abbreviation for "pin number". -->
|
||||
<string name="pin_chat">سنجاق کردن گپ</string>
|
||||
@@ -333,7 +357,7 @@ https://meet.jit.si/$ROOM
|
||||
<item quantity="one">پاک کردن %d گپ؟ دیگر در لیست گپها نشان داده نخواهد شد ولی پیامها در سرور باقی میمانند. </item>
|
||||
<item quantity="other">پاک کردن %d گپ؟ دیگر در فهرست گپها نشان داده نخواهند شد؛ ولی پیامها در کارساز باقی میمانند. </item>
|
||||
</plurals>
|
||||
<string name="ask_delete_named_chat">اطمینان دارید میخواهید \"%1$s\" را پاک کنید؟</string>
|
||||
<string name="ask_delete_named_chat">اطمینان دارید میخواهید «%1$s» را پاک کنید؟</string>
|
||||
<string name="ask_delete_message">مطمئن هستید میخواهید این پیام را پاک کنید؟</string>
|
||||
<plurals name="ask_delete_messages">
|
||||
<item quantity="one">پاک کردن %d گپ از اینجا و سرور؟</item>
|
||||
@@ -386,6 +410,7 @@ https://meet.jit.si/$ROOM
|
||||
</plurals>
|
||||
<!-- The placeholder will be replaced by the name of the recipient in a one-to-one chat. -->
|
||||
<string name="chat_new_one_to_one_hint">ارسال پیام. مشکلی نیست اگر %1$s از دلتاچت استفاده نمیکند.</string>
|
||||
<string name="chat_new_broadcast_hint">در یک فهرست Broadcast گیرندهها در یک گپ فقط خواندنی با شما، پیامها را دریافت میکنند.</string>
|
||||
<string name="chat_new_group_hint">نوشتن اولین پیام به دیگران امکان میدهد در این گروه پاسخ دهند. \n\n• مشکلی نیست اگر همه اعضا از دلتاچت استفاده نکنند\n\n• دریافت اولین پیام ممکن است به زمان بیشتری نیاز داشته باشد. </string>
|
||||
<string name="chat_record_slide_to_cancel">برای لغو بکشید.</string>
|
||||
<string name="chat_record_explain">برای ضبط پیام صوتی فشار داده و نگهدارید، برای ارسال رها کنید. </string>
|
||||
@@ -425,6 +450,9 @@ https://meet.jit.si/$ROOM
|
||||
<string name="send_file_to">ارسال \"%1$s\" به...</string>
|
||||
<!-- title shown above a list contacts where one should be selected (eg. when a webxdc attempts to send a message to a chat) -->
|
||||
<string name="send_message_to">ارسال پیام به...</string>
|
||||
<string name="enable_realtime">برنامههای بلادرنگ</string>
|
||||
<string name="enable_realtime_explain">فعالسازی اتصالهای بلادرنگ برای برنامههای به اشتراک گذاشتهشده در گپها. در صورت فعالسازی، زمانی که برنامه را باز میکنید، دیگر اعضای گپ ممکن است بتوانند نشانی اینترنتی شما را شناسایی کنند.</string>
|
||||
|
||||
<!-- map -->
|
||||
<string name="filter_map_on_time">نمایش موقعیتهای مکانی در چارچوب زمان</string>
|
||||
<string name="show_location_traces">نمایش ردپاها</string>
|
||||
@@ -451,6 +479,10 @@ https://meet.jit.si/$ROOM
|
||||
<string name="search_files">جستجوی پروندهها</string>
|
||||
<string name="search_explain">جستوجو برای گپها، مخاطبان و پیامها</string>
|
||||
<string name="search_no_result_for_x">نتیجهای برای \"%s\" پیدا نشد</string>
|
||||
<!-- Adjective, as in "Show Unread Messages" -->
|
||||
<string name="search_unread">خوانده نشده</string>
|
||||
|
||||
|
||||
<!-- create/edit groups, contact/group profile -->
|
||||
<string name="group_name">نام گروه</string>
|
||||
<string name="group_avatar">تصویر گروه</string>
|
||||
@@ -477,6 +509,10 @@ https://meet.jit.si/$ROOM
|
||||
<string name="tab_webxdc_empty_hint">برنامههایی که در این چت به اشتراک گذاشته شدهاند، اینجا نمایش داده خواهند شد.</string>
|
||||
<string name="tab_all_media_empty_hint">رسانههای به اشتراک گذاشته شده همه چتها در اینجا ظاهر میشود.</string>
|
||||
<string name="media_preview">نمایش رسانه</string>
|
||||
<!-- option to show images in the gallery with the correct width/height aspect (instead of square); other gallery apps may be a source of inspiration for translation :) -->
|
||||
<string name="aspect_ratio_grid">حفظ مقیاس تصویر</string>
|
||||
<!-- option to show images in the gallery as square (instead of using correct width/height) -->
|
||||
<string name="square_grid">جدول مربعی</string>
|
||||
<string name="send_message">ارسال پیام</string>
|
||||
<!-- Placeholder %1$s will be replaced by the name of the contact changing their address. Placeholders %2$s and %3$s will be replaced by old/new email addresses. -->
|
||||
<string name="aeap_addr_changed">مخاطب %1$s نشانی خود را از %2$s به %3$s تغییر داده است. </string>
|
||||
@@ -503,10 +539,6 @@ https://meet.jit.si/$ROOM
|
||||
<string name="multidevice_transfer_done_devicemsg">ℹ️ حساب به دستگاه دوم شما منتقل شد.</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="preparing_account">در حال آماده سازی حساب…</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="waiting_for_receiver">در انتظار گیرنده…</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="receiver_connected">گیرنده متصل شد…</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="transferring">در حال انتقال…</string>
|
||||
<string name="troubleshooting">عیبیابی</string>
|
||||
@@ -545,11 +577,24 @@ https://meet.jit.si/$ROOM
|
||||
<string name="manual_account_setup_option">ساخت حساب کاربری با حساب رایانامه معمولی</string>
|
||||
<!-- Instant onboarding title (there is not more to do than to set name and avatar) -->
|
||||
<string name="instant_onboarding_title">نمایه شما</string>
|
||||
<!-- The placeholder will be replaced by the default onboarding server -->
|
||||
<string name="instant_onboarding_agree_default2">سیاست حریم خصوصی برای %1$s</string>
|
||||
<!-- The placeholder will be replaced by instance name, the whole text will link to the instance page -->
|
||||
<string name="instant_onboarding_agree_instance">دربارهٔ نمایهها در %1$s</string>
|
||||
<!-- Confirmation button on the instant onboarding screen -->
|
||||
<string name="instant_onboarding_create">قبول کردن و ایجاد نمایه</string>
|
||||
<!-- Secondary, link-like button to open a page with other possible instances -->
|
||||
<string name="instant_onboarding_show_more_instances">استفاده از یک کارساز دیگر</string>
|
||||
<string name="instant_onboarding_other_server">فهرست کارسازهای Chatmail</string>
|
||||
<!-- Hint about what happens when "Create Profile" button in pressed; the placeholder will be replaced by the group name -->
|
||||
<string name="instant_onboarding_group_info">ایجاد نمایه برای وارد شدن به گپ «%1$s».</string>
|
||||
<!-- Hint about what happens when "Create Profile" button in pressed; the placeholder will be replaced by contact name and/or address -->
|
||||
<string name="instant_onboarding_contact_info">برای گفتگو با %1$s یک حساب کاربری ایجاد کنید.</string>
|
||||
<!-- Question shown when another user's QR code is scanned from onboarding screen -->
|
||||
<string name="instant_onboarding_confirm_contact">میخواهید یک نمایهٔ جدید درست کنید و با %1$sشروع به گپ زدن کنید؟</string>
|
||||
<!-- Question shown when group's QR code is scanned from onboarding screen -->
|
||||
<string name="instant_onboarding_confirm_group">میخواهید یک نمایهٔ جدید درست کنید و به گروه «%1$s» ملحق شوید؟</string>
|
||||
|
||||
<string name="welcome_chat_over_email">گفتگو غیرمتمرکز و ایمن</string>
|
||||
<string name="scan_invitation_code">اسکن کردن کد دعوت</string>
|
||||
<string name="login_title">ورود</string>
|
||||
@@ -571,6 +616,20 @@ https://meet.jit.si/$ROOM
|
||||
<string name="login_smtp_port">SMTP Port</string>
|
||||
<string name="login_smtp_security">SMTP Security</string>
|
||||
<string name="login_auth_method">Authorization Method</string>
|
||||
<!-- the word "Proxy" might be left untranslated unless the destination language has a well-known term for a "Proxy Server", acting intermediary between the app and the chatmail or email server -->
|
||||
<string name="proxy_settings">پروکسی</string>
|
||||
<string name="proxy_use_proxy">استفاده از پروکسی</string>
|
||||
<string name="proxy_add">اضافه کردن پروکسی</string>
|
||||
<string name="proxy_add_explain">پشتیبانی از پروکسیهای: HTTP، HTTPS، SOCKS5 و Shadowsocks</string>
|
||||
<string name="proxy_add_url_hint">ویرایش پیوند پروکسی</string>
|
||||
<string name="proxy_invalid">پروکسی نامعتبر است یا پشتیبانی از پروکسی وجود ندارد</string>
|
||||
<string name="proxy_list_header">پروکسیهای ذخیره شده</string>
|
||||
<string name="proxy_delete">حذف پروکسی</string>
|
||||
<string name="proxy_delete_explain">مطمئنید میخواهید «%1$s» را حذف کنید؟</string>
|
||||
<string name="proxy_use_proxy_confirm">میخواهید از پروکسی «%1$s» استفاده کنید؟</string>
|
||||
<string name="proxy_share_explain">دوستهایتان میتوانند با اسکن کردن کد QR این پروکسی را اضافه کنند.</string>
|
||||
<string name="proxy_share_link">اشتراک گذاشتن پیوند</string>
|
||||
|
||||
<!-- deprecated -->
|
||||
<string name="login_socks5">SOCKS5</string>
|
||||
<string name="login_socks5_use_socks5">استفاده از SOCKS5</string>
|
||||
@@ -597,6 +656,9 @@ https://meet.jit.si/$ROOM
|
||||
<string name="accept_invalid_certificates">پذیرش گواهینامههای نامعتبر</string>
|
||||
<string name="switch_account">تغییر حساب کاربری</string>
|
||||
<string name="add_account">افزودن حساب کاربری</string>
|
||||
<string name="profile_tag">پرچسب شخصی</string>
|
||||
<string name="profile_tag_hint">مثل «کار» یا «خانواده»</string>
|
||||
<string name="profile_tag_explain">این برچسب تنها به شما نمایش داده میشود تا برای تشخیص دادن نمایهها از یک دیگر کمک کند.</string>
|
||||
<string name="delete_account">حذف حساب کاربری</string>
|
||||
<string name="delete_account_ask">آیا از حذف حساب کاربری اطمینان دارید؟</string>
|
||||
<string name="delete_account_explain_with_name">همه اطلاعات حساب مربوط به «%s» روی این دستگاه پاک میشود. این شامل تنظیمهای رمزگذاری سراسری، مخاطبین، گفتگوها، پیامها و رسانهها میشود. این عمل قابل بازگردانی نیست.</string>
|
||||
@@ -610,7 +672,10 @@ https://meet.jit.si/$ROOM
|
||||
<!-- share and forward messages -->
|
||||
<!-- Translators: shown above a chat/contact list when selecting recipients to forward messages -->
|
||||
<string name="forward_to">هدایت به...</string>
|
||||
<!-- first placeholder is replaced by the number of files (always 2 or more); second placeholder is replaced by a chat name -->
|
||||
<string name="ask_send_files_to_chat">ارسال %1$dپرونده به «%2$s»؟</string>
|
||||
<string name="ask_send_files_to_selected_chats">ارسال %1$dپرونده به %2$d گپ؟</string>
|
||||
<string name="videos_sent_without_recoding">(فیلمها به صورت پروندههای بزرگ بدون تغییر ارسال میشوند. برای ارسال فیلمها به عنوان پروندههای کوچکتر، آنها را به صورت جدا پیوست کنید)</string>
|
||||
<string name="share_text_multiple_chats">ارسال این متن به %1$d گپ؟n/n/«%2$s»</string>
|
||||
<string name="share_abort">اشتراک گذاری به دلیل نبود مجوزها متوقف شد.</string>
|
||||
|
||||
@@ -668,10 +733,10 @@ https://meet.jit.si/$ROOM
|
||||
<string name="pref_use_system_emoji_explain">غیرفعال کردن شکلکهای داخلی دلتاچت</string>
|
||||
<string name="pref_use_inapp_camera">استفاده از دوربین درونبرنامه</string>
|
||||
<string name="pref_use_inapp_camera_explain">دوربین درونبرنامه معمولا امکانات کمتری نسبت به دوربین سیستم دارد</string>
|
||||
<string name="pref_show_system_contacts">خواندن دفترچه آدرس دستگاه</string>
|
||||
<string name="pref_app_access">دسترسی نرمافزار</string>
|
||||
<string name="pref_chats">گپها</string>
|
||||
<string name="pref_in_chat_sounds">صداهای درونگپی</string>
|
||||
<string name="pref_message_text_size">اندازه نوشتههای پیام</string>
|
||||
<string name="pref_view_log">نمایش گزارش</string>
|
||||
<string name="pref_saved_log">گزارش را در پوشه\"دانلودها\" ذخیره کن </string>
|
||||
<string name="pref_save_log_failed">ذخیره گزارش ناموفق بود</string>
|
||||
@@ -735,6 +800,7 @@ https://meet.jit.si/$ROOM
|
||||
<string name="profile_image_delete">حذف تصویر نمایه</string>
|
||||
<string name="pref_show_tray_icon">نمایش نمادک در زیر صفحه</string>
|
||||
<string name="pref_edit_profile">ویرایش نمایه</string>
|
||||
<string name="disable_imap_idle">غیر فعالسازی IMAP IDLE</string>
|
||||
<string name="send_stats_to_devs">ارسال آمار برای توسعهدهندگان دلتاچت</string>
|
||||
|
||||
|
||||
@@ -874,6 +940,8 @@ https://meet.jit.si/$ROOM
|
||||
<string name="chat_protection_enabled_tap_to_learn_more">رمزنگاری سرتاسر پیام ها از این به بعد تضمین می شود. برای اطلاعات بیشتر ضربه بزنید.</string>
|
||||
<string name="chat_protection_enabled_explanation">رمزنگاری سراسری پیامهای این گفتگو اکنون تضمین میشود. رمزنگاری سراسری باعث میشود پیامهایتان بین شما و مخاطبین شما محرمانه بماند. حتی ارائهدهنده رایانامه شما هم نمیتواند آنها را بخواند.</string>
|
||||
<string name="chat_protection_broken_tap_to_learn_more">%1$s پیامی را از دستگاه دیگری ارسال کرد. برای اطلاعات بیشتر ضربه بزنید.</string>
|
||||
<string name="invalid_unencrypted_tap_to_learn_more">⚠️ %1$s به رمزنگاری سراسری نیاز دارد که هنوز برای این گپ پیکرهبندی نشده است. برای یادگیری بیشتر اینجا بزنید.</string>
|
||||
<string name="encryption_required_for_new_contact">رمزنگاری سراسری لازم است اما برای %1$s هنوز پیکرهبندی نشده است.\n\nمیتوانید پیوند دعوت خود را به مخاطبتان بدهید یا اینکه به صورت حضوری کد QR مخاطب را اسکن کنید.</string>
|
||||
<string name="learn_more">بیشتر بدانید</string>
|
||||
|
||||
<string name="devicemsg_self_deleted">شما گپ «پیامهای ذخیره شده» را پاک کردید.\n\nℹ️ برای استفادهٔ دوباره از «پیامهای ذخیره شده» کافی است یک گپ جدید با خودتان درست کنید. </string>
|
||||
@@ -946,6 +1014,7 @@ https://meet.jit.si/$ROOM
|
||||
<string name="verified_by_you">تأیید شده توسط من</string>
|
||||
<!-- translators: "setup" is the "encryption setup" here, as in "Autocrypt Setup Message" -->
|
||||
<string name="contact_setup_changed">تنظیمها برای %1$s تغییر کرد. </string>
|
||||
<string name="verified_contact_required_explain">برای تضمین رمزنگاری سراسری شما تنها میتوانید مخاطبهایی که یک تیک سبز دارند به این گروه اضافه کنید.\n\nمیتوانید با مخاطبهایتان حضوری ملاقات کنید و برای معرفی، کد QR آنها را اسکن کنید.</string>
|
||||
<string name="copy_qr_data_success">آدرس کیوآر در حافظه ذخیر شد</string>
|
||||
<string name="mailto_dialog_header_select_chat">گپ را برای ارسال پیام انتخاب کنید</string>
|
||||
<!-- first placeholder is the name of the chat -->
|
||||
@@ -953,8 +1022,6 @@ https://meet.jit.si/$ROOM
|
||||
<string name="mailto_link_could_not_be_decoded">امکان کدگشایی پیوند mailto وجود ندارد: %1$s</string>
|
||||
|
||||
<!-- notifications -->
|
||||
<!-- deprecated, use mark_as_read or mark_as_read_short -->
|
||||
<string name="notify_dismiss">صرف نظر</string>
|
||||
<string name="notify_reply_button">پاسخ</string>
|
||||
<string name="notify_new_message">پیام جدید</string>
|
||||
<string name="notify_background_connection_enabled">اتصالها پیش زمینه فعال شد</string>
|
||||
@@ -989,6 +1056,8 @@ https://meet.jit.si/$ROOM
|
||||
گزینه
|
||||
«موقعیت مکانی»
|
||||
را فعال نمایید.</string>
|
||||
<string name="perm_explain_access_to_notifications_denied">برای دریافت اعلانها به «تنظیمات دستگاه > برنامهها > دلتاچت» بروید و «اعلانها» را فعال کنید.</string>
|
||||
|
||||
<!-- ImageEditorHud -->
|
||||
<string name="ImageEditorHud_draw_anywhere_to_blur">هر کجا مایلید شروع به رسم کردن کنید تا مات شود.</string>
|
||||
<string name="ImageEditorHud_add_text">افزودن متن</string>
|
||||
@@ -1099,9 +1168,6 @@ GNU GPL ورژن ۳
|
||||
<string name="last_check_at">بررسی شده در %1$s</string>
|
||||
<!-- iOS webxdc selector -->
|
||||
<string name="webxdc_selector_empty_hint">برنامههای دریافتشده یا ارسالشده از همه چتها در اینجا نمایش داده میشود. «پروندهها» تنها برنامههای اخیرا دریافتشده را نمایش میدهد.</string>
|
||||
<!-- iOS webxdc shortcut page -->
|
||||
<string name="shortcut_step1_tap_share_btn">روی دکمه اشتراک کلیک کنید</string>
|
||||
<string name="shortcut_step2_tap_add_to_home_screen">برای افزودن برنامه به صفحه اصلی خود، «افزودن به صفحه اصلی» را انتخاب کنید.</string>
|
||||
<!-- iOS permissions, copy from "deltachat-ios/Info.plist", which is used on missing translations in "deltachat-ios/LANG.lproj/InfoPlist.strings" -->
|
||||
<string name="InfoPlist_NSCameraUsageDescription">دلتاچت برای گرفتن و ارسال عکس و فیلم و برای اسکن کردن کیوآر کد از دوربین شما استفاده میکند. </string>
|
||||
<string name="InfoPlist_NSContactsUsageDescription">دلتاچت از مخاطبین شما برای نمایش فهرست رایانامههایی که میتوانید برایشان پیام ارسال کنید استفاده میکند. دلتاچت کارساز ندارد، مخاطبین شما به جایی ارسال نمیشوند. </string>
|
||||
@@ -1110,9 +1176,10 @@ GNU GPL ورژن ۳
|
||||
<string name="InfoPlist_NSMicrophoneUsageDescription">دلتاچت از میکروفون برای ذخیره و ارسال پیام صوتی یا فیلم دارای صدا استفاده میکند.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryUsageDescription">دلتاچت به شما اجازه می دهد تصویر موردنظر برای ارسال را انتخاب کنید.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryAddUsageDescription">دلتاچت میخواهد تصاویر را در آلبوم شما ذخیره کند.</string>
|
||||
|
||||
|
||||
<!-- android specific strings, developers: please take care to remove strings that are no longer used! -->
|
||||
<string name="pref_instant_delivery">تحویل آنی</string>
|
||||
<string name="pref_background_notifications">استفاده از اتصال پسزمینه</string>
|
||||
<string name="pref_background_notifications_explain">برای استفاده باید «نادیده گرفتن بهینهسازیهای باتری» فعال باشد. اگر اعلانها به موقع نمیرسند، این را فعال کنید.</string>
|
||||
<string name="pref_reliable_service">اجبار کردن اتصال پسزمینه</string>
|
||||
<string name="pref_reliable_service_explain">اعلانی دائمی نشان میدهد</string>
|
||||
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Peruuta</string>
|
||||
<!-- deprecated, the word "or" to separate blocks in the user interface that are mutually exclusive -->
|
||||
<string name="or_separator">tai</string>
|
||||
<string name="clear_search">Tyhjennä haku</string>
|
||||
<string name="yes">Kyllä</string>
|
||||
<string name="no">Ei</string>
|
||||
@@ -509,10 +507,6 @@
|
||||
<string name="multidevice_transfer_done_devicemsg">ℹ️ Profiili siirretty toiselle laitteellesi.</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="preparing_account">Valmistellaan profiilia...</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="waiting_for_receiver">Odotetaan vastaanottajaa...</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="receiver_connected">Vastaanottaja yhdistetty...</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="transferring">Siirretään...</string>
|
||||
<string name="troubleshooting">Vianetsintä</string>
|
||||
@@ -690,7 +684,6 @@
|
||||
<string name="pref_app_access">Sovelluksen pääsy</string>
|
||||
<string name="pref_chats">Keskustelut</string>
|
||||
<string name="pref_in_chat_sounds">Keskustelunaikaiset äänet</string>
|
||||
<string name="pref_message_text_size">Viestin fonttikoko</string>
|
||||
<string name="pref_view_log">Näytä loki</string>
|
||||
<string name="pref_saved_log">Tallenna loki \"Lataukset\" -kansioon</string>
|
||||
<string name="pref_save_log_failed">Lokin tallennus epäonnistui</string>
|
||||
@@ -973,8 +966,6 @@
|
||||
<string name="mailto_link_could_not_be_decoded">mailto-linkkiä ei voitu selvittää: %1$s</string>
|
||||
|
||||
<!-- notifications -->
|
||||
<!-- deprecated, use mark_as_read or mark_as_read_short -->
|
||||
<string name="notify_dismiss">Hylkää</string>
|
||||
<string name="notify_reply_button">Vastaa</string>
|
||||
<string name="notify_new_message">Uusi viesti</string>
|
||||
<string name="notify_background_connection_enabled">Yhteys käynnissä taustalla</string>
|
||||
@@ -1105,9 +1096,6 @@
|
||||
<string name="last_check_at">Tarkistettu %1$s</string>
|
||||
<!-- iOS webxdc selector -->
|
||||
<string name="webxdc_selector_empty_hint">Kaikissa keskusteluissa jaetut yksityiset sovellukset näkyvät tässä. \"Tiedostot\" näyttää ladatut yksityiset sovellukset.</string>
|
||||
<!-- iOS webxdc shortcut page -->
|
||||
<string name="shortcut_step1_tap_share_btn">Napauta jakamispainiketta.</string>
|
||||
<string name="shortcut_step2_tap_add_to_home_screen">Valitse \"Lisää aloitusnäytölle\" lisätäksesi sovelluksen puhelimesi aloitusnäytölle.</string>
|
||||
<!-- iOS permissions, copy from "deltachat-ios/Info.plist", which is used on missing translations in "deltachat-ios/LANG.lproj/InfoPlist.strings" -->
|
||||
<string name="InfoPlist_NSCameraUsageDescription">Delta Chat käyttää kameraa kuvien ja videoiden kuvaamiseen ja lähettämiseen sekä QR-koodien skannaamiseen.</string>
|
||||
<string name="InfoPlist_NSContactsUsageDescription">Delta Chat käyttää yhteystietojasi näyttämään listan sähköpostiosoitteista, joihin voit kirjoittaa. Delta Chatilla ei ole palvelimia, eikä yhteystietojasi lähetetä mihinkään.</string>
|
||||
@@ -1116,8 +1104,6 @@
|
||||
<string name="InfoPlist_NSMicrophoneUsageDescription">Delta Chat käyttää mikrofonia ääniviestien ja äänellisten videoiden tallentamiseen ja lähettämiseen.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryUsageDescription">Delta Chat antaa sinun valita, mitkä kuvat kirjastostasi haluat lähettää.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryAddUsageDescription">Delta Chat haluaa tallentaa kuvia kirjastoosi.</string>
|
||||
|
||||
|
||||
<!-- android specific strings, developers: please take care to remove strings that are no longer used! -->
|
||||
<string name="pref_instant_delivery">Välitön toimitus</string>
|
||||
<string name="pref_background_notifications">Käytä taustayhteyttä</string>
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Annuler</string>
|
||||
<!-- deprecated, the word "or" to separate blocks in the user interface that are mutually exclusive -->
|
||||
<string name="or_separator">ou</string>
|
||||
<string name="clear_search">Effacer la recherche</string>
|
||||
<string name="yes">Oui</string>
|
||||
<string name="no">Non</string>
|
||||
@@ -525,10 +523,6 @@
|
||||
<string name="multidevice_transfer_done_devicemsg">ℹ️ Compte transféré sur votre deuxième appareil.</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="preparing_account">Préparation du compte...</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="waiting_for_receiver">En attente de l\'appareil...</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="receiver_connected">Appareil connecté...</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="transferring">Transfert...</string>
|
||||
<string name="troubleshooting">Dépannage</string>
|
||||
@@ -695,7 +689,6 @@
|
||||
<string name="pref_app_access">Accès à l\'application</string>
|
||||
<string name="pref_chats">Discussions</string>
|
||||
<string name="pref_in_chat_sounds">Sons de messages entrants</string>
|
||||
<string name="pref_message_text_size">Taille de police des messages</string>
|
||||
<string name="pref_view_log">Voir le journal</string>
|
||||
<string name="pref_saved_log">Journal enregistré dans le dossier \"Téléchargements\"</string>
|
||||
<string name="pref_save_log_failed">Enregistrement du journal échoué</string>
|
||||
@@ -967,8 +960,6 @@
|
||||
<string name="mailto_link_could_not_be_decoded">Le lien mailto n\'a pas pu être décodé: %1$s</string>
|
||||
|
||||
<!-- notifications -->
|
||||
<!-- deprecated, use mark_as_read or mark_as_read_short -->
|
||||
<string name="notify_dismiss">Rejeter</string>
|
||||
<string name="notify_reply_button">Répondre</string>
|
||||
<string name="notify_new_message">Nouveau message</string>
|
||||
<string name="notify_background_connection_enabled">Connexion en arrière-plan activée</string>
|
||||
@@ -1099,9 +1090,6 @@
|
||||
<string name="last_check_at">Dernièrement vu à %1$s</string>
|
||||
<!-- iOS webxdc selector -->
|
||||
<string name="webxdc_selector_empty_hint">Les applications envoyées ou reçues dans une discussion apparaissent ici. « Fichiers » affiche les applis que vous venez de télécharger.</string>
|
||||
<!-- iOS webxdc shortcut page -->
|
||||
<string name="shortcut_step1_tap_share_btn">Cliquer sur le bouton « Partager ».</string>
|
||||
<string name="shortcut_step2_tap_add_to_home_screen">Sélectionner « Ajouter à l\'écran d\'accueil » pour ajouter l\'appli à votre écran d\'accueil.</string>
|
||||
<!-- iOS permissions, copy from "deltachat-ios/Info.plist", which is used on missing translations in "deltachat-ios/LANG.lproj/InfoPlist.strings" -->
|
||||
<string name="InfoPlist_NSCameraUsageDescription">Delta Chat utilise votre appareil photo pour prendre des photos et des vidéos et les envoyer, ainsi que pour scanner des QR codes.</string>
|
||||
<string name="InfoPlist_NSContactsUsageDescription">Delta Chat utilise vos contacts pour montrer une liste d\'adresses de courriel auxquels vous pouvez écrire. Delta Chat n\'a pas de serveur, vos contacts ne sont envoyés nulle part.</string>
|
||||
@@ -1110,8 +1098,6 @@
|
||||
<string name="InfoPlist_NSMicrophoneUsageDescription">Delta Chat utilise votre micro pour enregistrer et envoyer des messages vocaux et des vidéos avec bande son.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryUsageDescription">Delta Chat vous laisse choisir quelles photos envoyer de votre photothèque. </string>
|
||||
<string name="InfoPlist_NSPhotoLibraryAddUsageDescription">Delta Chat veut enregistrer les images dans votre bibliothèque photo.</string>
|
||||
|
||||
|
||||
<!-- android specific strings, developers: please take care to remove strings that are no longer used! -->
|
||||
<string name="pref_instant_delivery">Envoi Immédiat</string>
|
||||
<string name="pref_background_notifications">Utiliser une connexion en arrière plan</string>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Cancelar</string>
|
||||
<string name="clear_search">Eliminar busca</string>
|
||||
<string name="clear_search">Eliminar busca</string>
|
||||
<string name="yes">Si</string>
|
||||
<string name="no">Non</string>
|
||||
<string name="select">Seleccionar</string>
|
||||
@@ -591,7 +591,6 @@
|
||||
<string name="pref_app_access">Acceso a app</string>
|
||||
<string name="pref_chats">Conversas</string>
|
||||
<string name="pref_in_chat_sounds">Sons na conversa</string>
|
||||
<string name="pref_message_text_size">Tamaño da letra na mensaxe</string>
|
||||
<string name="pref_view_log">Ver rexistro</string>
|
||||
<string name="pref_saved_log">Gardouse o rexistro no cartafol \"Descargas\"</string>
|
||||
<string name="pref_save_log_failed">Non se puido gardar o rexistro</string>
|
||||
@@ -803,8 +802,6 @@
|
||||
<string name="mailto_link_could_not_be_decoded">a ligazón mailto non se puido descodificar: %1$s</string>
|
||||
|
||||
<!-- notifications -->
|
||||
<!-- deprecated, use mark_as_read or mark_as_read_short -->
|
||||
<string name="notify_dismiss">Desbotar</string>
|
||||
<string name="notify_reply_button">Responder</string>
|
||||
<string name="notify_new_message">Nova mensaxe</string>
|
||||
<string name="notify_background_connection_enabled">Conexión en segundo plano establecida</string>
|
||||
@@ -932,8 +929,6 @@
|
||||
<string name="InfoPlist_NSMicrophoneUsageDescription">Permitindo o acceso ao micrófono poderás gravar audio.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryUsageDescription">Permitindo o acceso a galería de fotos poderás subir imaxes desde ela.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryAddUsageDescription">Delta Chat quere gardar imaxes na galería de fotos.</string>
|
||||
|
||||
|
||||
<string name="pref_background_notifications_rationale">Para manter a conexión co servidor de correo e recibir mensaxes en segundo plano, ignora as optimizacións de batería no seguinte paso.\n\nDelta Chat utiliza moi poucos recursos e preocúpase de non esgotar a batería.</string>
|
||||
<!-- disabling "Reliable service" will hide a the maybe annoying permanent-notification with the drawback that new-message-notifications get potentially unreliable -->
|
||||
<string name="perm_enable_bg_reminder_title">Toca aquí para recibir mensaxes mentras Delta Chat está en segundo plano.</string>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Otkaži</string>
|
||||
<string name="yes">Da</string>
|
||||
<string name="yes">Da</string>
|
||||
<string name="no">Ne</string>
|
||||
<string name="on">Uključeno</string>
|
||||
<string name="off">Isključeno</string>
|
||||
@@ -211,7 +211,6 @@
|
||||
<string name="pref_app_access">Pristup aplikaciji</string>
|
||||
<string name="pref_chats">Razgovori</string>
|
||||
<string name="pref_in_chat_sounds">Zvuk unutar razgovora</string>
|
||||
<string name="pref_message_text_size">Veličina fonta poruke</string>
|
||||
<string name="pref_other">Ostalo</string>
|
||||
<string name="pref_backup">Sigurnosna kopija</string>
|
||||
<!-- No need to translate "Wallpaper" literally. Chose what is common in your language for a "Wallpaper" or a "Background". Avoid adding the term "image" here, as the "Wallpaper" may also be just a single color. -->
|
||||
@@ -223,6 +222,7 @@
|
||||
<!-- qr code stuff -->
|
||||
<string name="qr_code">QR kod</string>
|
||||
<string name="qrscan_fingerprint_label">Otisak prsta</string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">Odgovori</string>
|
||||
<string name="notify_new_message">Nova poruka</string>
|
||||
<string name="notify_priority_high">Visoko</string>
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Mégse</string>
|
||||
<!-- deprecated, the word "or" to separate blocks in the user interface that are mutually exclusive -->
|
||||
<string name="or_separator">vagy</string>
|
||||
<string name="clear_search">Keresés kiürítése</string>
|
||||
<!-- a noun, used on a button, short for "show link" -->
|
||||
<string name="link">Hivatkozás</string>
|
||||
@@ -18,7 +16,7 @@
|
||||
<string name="off">Kikapcsolva</string>
|
||||
<string name="def">Alapértelmezett</string>
|
||||
<string name="default_value">Alapértelmezett (%1$s)</string>
|
||||
<string name="default_value_as_above">Alapértelmezett (ugyanaz, mint fent)</string>
|
||||
<string name="default_value_as_above">Alapértelmezett (ugyanaz, mint fentebb)</string>
|
||||
<string name="custom">Egyéni</string>
|
||||
<string name="none">Egyik sem</string>
|
||||
<string name="automatic">Automatikus</string>
|
||||
@@ -32,13 +30,14 @@
|
||||
<string name="delete">Törlés</string>
|
||||
<string name="info">Infó</string>
|
||||
<string name="update">Frissítés</string>
|
||||
<string name="emoji">Hangulatjel</string>
|
||||
<string name="emoji">Emodzsi</string>
|
||||
<string name="attachment">Csatolmány</string>
|
||||
<string name="back">Vissza</string>
|
||||
<string name="close">Bezárás</string>
|
||||
<string name="close_window">Ablak bezárása</string>
|
||||
<string name="forward">Továbbítás</string>
|
||||
<string name="create">Létrehozás</string>
|
||||
<string name="reset">Visszaállítás</string>
|
||||
<string name="later">Később</string>
|
||||
<!-- "Resend" means "Sending the selected message(s) again to the same chat". The string is used in a menu and should be as short as possible. Resending may be needed after failures or to repost old messages to new members. -->
|
||||
<string name="resend">Újraküldés</string>
|
||||
@@ -47,6 +46,7 @@
|
||||
<!-- Verb "to unarchive", as in "remove a chat from the archive", opposite of the previous string -->
|
||||
<string name="unarchive">Archiválás visszavonása</string>
|
||||
<string name="mute">Némítás</string>
|
||||
<string name="muted">Némított</string>
|
||||
<string name="ephemeral_messages">Eltűnő üzenetek</string>
|
||||
<string name="ephemeral_messages_hint">A csevegés összes tagjára vonatkozik, ha a Delta Chatet használják; az üzeneteket továbbra is másolhatják, menthetik és továbbíthatják, vagy más e-mail klienseket használhatnak.</string>
|
||||
<string name="save">Mentés</string>
|
||||
@@ -184,6 +184,14 @@
|
||||
<string name="webxdc_app">Alkalmazás</string>
|
||||
<!-- plural of "App"; used to present "Webxdc App" (https://webxdc.org) in a user friendly way. Please stay close to the original term and keep it short (it is used in menus with few screen space). -->
|
||||
<string name="webxdc_apps">Alkalmazások</string>
|
||||
<string name="webxdc_store_url">Alkalmazás-választó-webcím</string>
|
||||
<string name="webxdc_store_url_explain">Ha be van állítva, akkor a webcím lesz használva mint alkalmazás-választó az alapértelmezett helyett</string>
|
||||
<string name="home">Főoldal</string>
|
||||
<string name="games">Játékok</string>
|
||||
<string name="tools">Eszközök</string>
|
||||
<string name="app_size">Méret</string>
|
||||
<string name="app_date_published">Közzétéve</string>
|
||||
<string name="add_to_chat">Hozzáadás csevegéshez</string>
|
||||
<string name="unknown">Ismeretlen</string>
|
||||
|
||||
<string name="green">Zöld</string>
|
||||
@@ -221,7 +229,7 @@
|
||||
<string name="broadcast_list_name">Adáslista neve</string>
|
||||
<string name="please_enter_broadcast_list_name">Adjon meg egy nevet az adáslistának</string>
|
||||
<string name="menu_send">Küldés</string>
|
||||
<string name="menu_toggle_keyboard">Váltás hangulatjel-billentyűzetre</string>
|
||||
<string name="menu_toggle_keyboard">Váltás emodzsi-billentyűzetre</string>
|
||||
<string name="menu_edit_group">Csoport szerkesztése</string>
|
||||
<string name="menu_group_name_and_image">Csoportnév és -kép</string>
|
||||
<string name="menu_show_global_map">Az összes helyszín megjelenítése</string>
|
||||
@@ -274,7 +282,7 @@
|
||||
<string name="privacy_policy">Adatvédelmi irányelvek</string>
|
||||
<string name="menu_select_all">Összes kiválasztása</string>
|
||||
<string name="select_chat">Csevegés kiválasztása</string>
|
||||
<string name="select_more">Több kiválasztása</string>
|
||||
<string name="select_more">Továbbiak kiválasztása</string>
|
||||
<string name="menu_edit_name">Név szerkesztése</string>
|
||||
<!-- The placeholder will be replaced by the name the contact gave themself (if any) or by an e-mail address. -->
|
||||
<string name="edit_name_explain">Állítson be egy becenevet a(z) „%1$s” nevű ismerősének. Hagyja üresen az ismerőse által választott név megjelenítéséhez.</string>
|
||||
@@ -461,7 +469,7 @@
|
||||
|
||||
<!-- punycode warning / labeled links -->
|
||||
<!-- placeholder is domain/hostname that should be trusted -->
|
||||
<string name="open_external_url_trust_domain">Ne kérdezzen rá újra erre: %1$s</string>
|
||||
<string name="open_external_url_trust_domain">Ne kérdezzen rá újra a következőre: %1$s</string>
|
||||
<string name="puny_code_warning_header">Gyanús hivatkozás észlelve</string>
|
||||
<!-- placeholder contains the hostname converted to ascii -->
|
||||
<string name="puny_code_warning_question">Biztosan meglátogatja a következőt: %1$s?</string>
|
||||
@@ -511,9 +519,9 @@
|
||||
<string name="square_grid">Négyzetrács</string>
|
||||
<string name="send_message">Üzenet küldése</string>
|
||||
<!-- Placeholder %1$s will be replaced by the name of the contact changing their address. Placeholders %2$s and %3$s will be replaced by old/new email addresses. -->
|
||||
<string name="aeap_addr_changed">%1$s megváltoztatta a címét erről: %2$s, erre: %3$s </string>
|
||||
<string name="aeap_addr_changed">%1$s megváltoztatta a címét következőről: %2$s, erre: %3$s </string>
|
||||
<!-- the explanation is shown (1) as a modal dialog with the buttons "Cancel" and "Continue" as well as (2) as a device message -->
|
||||
<string name="aeap_explanation">Ön megváltoztatta a saját e-mail-címét erről: %1$s erre: %2$s.\n\nHa most üzenetet küld egy hitelesített csoportba, az ottani ismerősei automatikusan lecserélik az Ön régi címét az új címére.\n\nEzért nagyon ajánlott beállítani, hogy a régi e-mail szolgáltatója továbbítsa-e az összes e-mailt e-mail-címére. Ellenkező esetben lemaradhat azoknak az ismerőseinek az üzeneteiről, akik még nem kapták meg az új címét.</string>
|
||||
<string name="aeap_explanation">Ön megváltoztatta a saját e-mail-címét a következőről: %1$s erre: %2$s.\n\nHa most üzenetet küld egy hitelesített csoportba, az ottani ismerősei automatikusan lecserélik az Ön régi címét az új címére.\n\nEzért nagyon ajánlott beállítani, hogy a régi e-mail szolgáltatója továbbítsa-e az összes e-mailt e-mail-címére. Ellenkező esetben lemaradhat azoknak az ismerőseinek az üzeneteiről, akik még nem kapták meg az új címét.</string>
|
||||
|
||||
|
||||
<!-- Multi Device -->
|
||||
@@ -535,10 +543,6 @@
|
||||
<string name="multidevice_transfer_done_devicemsg">ℹ️ A profil átkerül az Ön második eszközére.</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="preparing_account">Profil készítése…</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="waiting_for_receiver">Várakozás a vevőeszközre…</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="receiver_connected">Vevőeszköz kapcsolódott…</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="transferring">Átvitel…</string>
|
||||
<string name="troubleshooting">Hibaelhárítás</string>
|
||||
@@ -657,6 +661,8 @@
|
||||
<string name="profile_tag">Privát címke</string>
|
||||
<string name="profile_tag_hint">Például: „Munka”, „Család”</string>
|
||||
<string name="profile_tag_explain">A címke csak az Ön számára jelenik meg; segít megkülönböztetni a profiljait.</string>
|
||||
<!-- Menu entry to sort an item to the beginning of a list. Only "To Top" may do as well in some translations, if that helps to stay shorter. -->
|
||||
<string name="move_to_top">Felülre helyezés</string>
|
||||
<string name="delete_account">Profil törlése</string>
|
||||
<string name="delete_account_ask">Biztosan törölni szeretné a profiladatait?</string>
|
||||
<string name="delete_account_explain_with_name">A(z) „%s” nevű profilhoz tartozó mindet adat ezen az eszközön törölve lesz, beleértve a végpontok közötti titkosítás beállításait, a névjegyeket, a csevegéseket, az üzeneteket és a médiát. Ez a művelet nem vonható vissza. </string>
|
||||
@@ -702,6 +708,8 @@
|
||||
<string name="pref_screen_security_explain">Képernyőképek készítésének megakadályozása a futó alkalmazások listájában és az alkalmazáson belül</string>
|
||||
<string name="pref_screen_security_please_restart_hint">A képernyő biztonsági beállításának alkalmazásához indítsa újra az alkalmazást.</string>
|
||||
<string name="pref_notifications">Értesítések</string>
|
||||
<string name="pref_mention_notifications">Megemlítések</string>
|
||||
<string name="pref_mention_notifications_explain">A némított csoportokban csak az Önnek címzett üzenetek, (például válaszok vagy reakciók) esetén küld értesítést.</string>
|
||||
<string name="pref_notifications_show">Megjelenítés</string>
|
||||
<string name="pref_notifications_priority">Prioritás</string>
|
||||
<string name="pref_notifications_explain">Rendszerértesítések engedélyezése az új üzenetekről</string>
|
||||
@@ -719,6 +727,7 @@
|
||||
<string name="pref_appearance">Megjelenés</string>
|
||||
<string name="pref_theme">Téma</string>
|
||||
<string name="pref_language">Nyelv</string>
|
||||
<string name="pref_use_system_ui_font">Rendszer betűtípusának használata</string>
|
||||
<string name="pref_incognito_keyboard">Inkognitó-billentyűzet</string>
|
||||
<!-- Translators: Must indicate that there is no guarantee as the system may not honor our request. -->
|
||||
<string name="pref_incognito_keyboard_explain">Tanulás letiltásának kérése a billentyűzettől</string>
|
||||
@@ -727,8 +736,8 @@
|
||||
<string name="pref_server">Kiszolgáló</string>
|
||||
<string name="pref_encryption">Titkosítás</string>
|
||||
<string name="pref_manage_keys">Privát kulcsok kezelése</string>
|
||||
<string name="pref_use_system_emoji">Rendszer hangulatjeleinek használata</string>
|
||||
<string name="pref_use_system_emoji_explain">A Delta Chat beépített hangulatjel-támogatásának letiltása</string>
|
||||
<string name="pref_use_system_emoji">Rendszeremodzsik használata</string>
|
||||
<string name="pref_use_system_emoji_explain">A Delta Chat beépített emodzsi-támogatásának letiltása</string>
|
||||
<string name="pref_use_inapp_camera">Alkalmazás kamerájának használata</string>
|
||||
<string name="pref_use_inapp_camera_explain">Az alkalmazáson belüli kamera általában kevesebb funkcióval rendelkezik, mint a rendszer kamerája.</string>
|
||||
<string name="pref_show_system_contacts">A rendszer névjegyzékének olvasása</string>
|
||||
@@ -736,9 +745,8 @@
|
||||
<string name="pref_app_access">Alkalmazás-hozzáférés</string>
|
||||
<string name="pref_chats">Csevegések</string>
|
||||
<string name="pref_in_chat_sounds">Csevegésen belüli hangok</string>
|
||||
<string name="pref_message_text_size">Üzenetek betűmérete</string>
|
||||
<string name="pref_view_log">Naplófájl megtekintése</string>
|
||||
<string name="pref_saved_log">A naplófájl elmentve a „Letöltések” mappába</string>
|
||||
<string name="pref_saved_log">A naplófájl elmentve a „Letöltések” nevű mappába</string>
|
||||
<string name="pref_save_log_failed">Nem sikerült elmenteni a naplófájlt</string>
|
||||
<string name="pref_log_header">Naplófájl</string>
|
||||
<string name="pref_other">Egyéb</string>
|
||||
@@ -768,10 +776,10 @@
|
||||
<string name="pref_send_copy_to_self">Másolat küldése Önmagának</string>
|
||||
<!-- for classic email, we use the classical term "Account" -->
|
||||
<string name="pref_send_copy_to_self_explain">Szükséges, ha ezt a fiókot több eszközön is használja.</string>
|
||||
<string name="pref_auto_folder_moves">Automatikus áthelyezés a DeltaChat mappába</string>
|
||||
<string name="pref_auto_folder_moves">Automatikus áthelyezés a DeltaChat nevű mappába</string>
|
||||
<string name="pref_auto_folder_moves_explain">A csevegések áthelyezésre kerülnek, hogy elkerüljék a bejövő üzenetek mappa zűrzavarát.</string>
|
||||
<string name="pref_only_fetch_mvbox_title">Csak a DeltaChat-mappából történjen lekérdezés</string>
|
||||
<string name="pref_only_fetch_mvbox_explain">Más mappák figyelmen kívül hagyása. A kiszolgálónak a DeltaChat mappába kell áthelyeznie a csevegőüzeneteket.</string>
|
||||
<string name="pref_only_fetch_mvbox_title">Csak a DeltaChat nevű mappából történjen lekérdezés</string>
|
||||
<string name="pref_only_fetch_mvbox_explain">Más mappák figyelmen kívül hagyása. A kiszolgálónak a DeltaChat nevű mappába kell áthelyeznie a csevegőüzeneteket.</string>
|
||||
<string name="pref_show_emails">Klasszikus e-mailek megjelenítése</string>
|
||||
<string name="pref_show_emails_no">Nem, csak csevegések</string>
|
||||
<string name="pref_show_emails_accepted_contacts">Elfogadott ismerősök számára</string>
|
||||
@@ -807,7 +815,7 @@
|
||||
|
||||
<!-- Emoji picker and categories -->
|
||||
<string name="emoji_search_results">Keresési eredmények</string>
|
||||
<string name="emoji_not_found">Nem található hangulatjel</string>
|
||||
<string name="emoji_not_found">Nem található emodzsi</string>
|
||||
<string name="emoji_recent">Nemrég használt</string>
|
||||
<string name="emoji_people">Emberek és test</string>
|
||||
<string name="emoji_nature">Állatok és természet</string>
|
||||
@@ -823,9 +831,9 @@
|
||||
<!-- Verb, the action of adding a "Reaction" to a message. Used eg. in context menus, similar to "Reply" or "Forward" -->
|
||||
<string name="react">Reakció</string>
|
||||
<!-- %1$s will be replaced by an emoji. %2$s will be replaced by message summary (the summary is often long and whole string gets truncated; words after %2$s will often not being visible). Eg. 'You reacted 👍 to "Found my suitcase"'. Use less than 20 characters, otherwise the string will be truncated too soon and too few information are shown. Do not try to translate "reacted to" too strict. Depending on the language, "added 👍 to" or "gave 👍 to" or just "👍 to" may be shorter and/or clearer and work as well. -->
|
||||
<string name="reaction_by_you">Ön ezzel reagált: %1$s, erre: „%2$s”</string>
|
||||
<string name="reaction_by_you">Ön a következővel reagált: %1$s, erre: „%2$s”</string>
|
||||
<!-- %1$s will be replaced a name. %2$s will be replaced by an emoji. %3$s will be replaced by message summary (the summary is often long and whole string gets truncated; words after %3$s will often not being visible). Eg. 'Alice reacted 👍 to "Nice photos"'. Use less than 20 characters, otherwise the string will be truncated too soon and too few information are shown. Do not try to translate "reacted to" too strict. Depending on the language, "added 👍 to" or "gave 👍 to" or just "👍 to" may be shorter and/or clearer work as well. -->
|
||||
<string name="reaction_by_other">%1$s ezzel reagált: %2$s, erre: „%3$s”</string>
|
||||
<string name="reaction_by_other">%1$s a következővel reagált: %2$s, erre: „%3$s”</string>
|
||||
|
||||
<!-- automatically delete message -->
|
||||
<string name="delete_old_messages">Régi üzenetek törlése</string>
|
||||
@@ -878,9 +886,9 @@
|
||||
<string name="systemmsg_subject_for_new_contact">Üzenet tőle: %1$s</string>
|
||||
<string name="systemmsg_failed_sending_to">Nem sikerült elküldeni az üzenetet „%1$s” számára.</string>
|
||||
<!-- %1$s will be replaced by the old group name, %2$s will be replaced by the new group name -->
|
||||
<string name="group_name_changed_by_you">Ön megváltoztatta a csoport nevét erről: „%1$s”, erre: „%2$s”.</string>
|
||||
<string name="group_name_changed_by_you">Ön megváltoztatta a csoport nevét a következőről: „%1$s”, erre: „%2$s”.</string>
|
||||
<!-- %1$s will be replaced by the old group name, %2$s will be replaced by the new group name, %3$s will be replaced by name and address of the contact who did the action. -->
|
||||
<string name="group_name_changed_by_other">%3$s megváltoztatta a csoport nevét erről: „%1$s”, erre: „%2$s”.</string>
|
||||
<string name="group_name_changed_by_other">%3$s megváltoztatta a csoport nevét a következőről: „%1$s”, erre: „%2$s”.</string>
|
||||
<string name="group_image_changed_by_you">Ön megváltoztatta a csoport profilképét.</string>
|
||||
<!-- %1$s will be replaced by name and address of the contact who did the action -->
|
||||
<string name="group_image_changed_by_other">%1$s megváltoztatta a csoport profilképét.</string>
|
||||
@@ -1022,8 +1030,6 @@
|
||||
<string name="mailto_link_could_not_be_decoded">Nem sikerült dekódolni a mailto-hivatkozást: %1$s</string>
|
||||
|
||||
<!-- notifications -->
|
||||
<!-- deprecated, use mark_as_read or mark_as_read_short -->
|
||||
<string name="notify_dismiss">Elvetés</string>
|
||||
<string name="notify_reply_button">Válasz</string>
|
||||
<string name="notify_new_message">Új üzenet</string>
|
||||
<string name="notify_background_connection_enabled">Háttérkapcsolat engedélyezve</string>
|
||||
@@ -1100,7 +1106,7 @@
|
||||
<string name="forget_login_confirmation_desktop">Törli ezt a profilt? Az összes adata törlődni fog, beleértve a végpontok közötti titkosítási beállításokat, névjegyeket, csevegéseket, üzeneteket és médiát. Ez a művelet nem vonható vissza.</string>
|
||||
<string name="message_detail_sent_desktop">elküldött</string>
|
||||
<string name="message_detail_received_desktop">érkezett</string>
|
||||
<string name="menu.view.developer.open.log.folder">Naplófájlok könyvtárának megnyitása</string>
|
||||
<string name="menu.view.developer.open.log.folder">Naplófájlok mappájának megnyitása</string>
|
||||
<string name="menu.view.developer.open.current.log.file">Jelenlegi naplófájl megnyitása</string>
|
||||
<string name="explain_desktop_minimized_disabled_tray_pref" tools:ignore="TypographyDashes">A tálca ikonja nem kapcsolható ki, mivel a Delta Chat a --minimized kapcsolóval indult.</string>
|
||||
<string name="no_spellcheck_suggestions_found">Nem találhatók helyesírási javaslatok.</string>
|
||||
@@ -1152,11 +1158,20 @@
|
||||
<string name="notifications_avg_minutes">Átlagosan %1$d percenként</string>
|
||||
<string name="notifications_avg_hours">Átlagosan %1$d óránként</string>
|
||||
<string name="last_check_at">Ellenőrizve ekkor: %1$s</string>
|
||||
<string name="system_settings">Rendszer-beállítások</string>
|
||||
<!-- shown below the button "System Settings" on the notification screen. this is a hint about what can be edited on System Settings' Notification page - eg. the notification type (banner, lock screen, notification centre), sound, badges and so on. no need to be exhaustive here, it is only to give the user an idea. -->
|
||||
<string name="system_settings_notify_explain_ios">Típus-, kitűzők-, előnézet- és egyebek szerkesztése</string>
|
||||
<!-- iOS webxdc selector -->
|
||||
<string name="webxdc_selector_empty_hint">A bármelyik csevegésben kapott vagy küldött alkalmazások itt fognak megjelenni. A „Fájlok” az éppen letöltött alkalmazásokat jeleníti meg.</string>
|
||||
<!-- iOS webxdc shortcut page -->
|
||||
<string name="shortcut_step1_tap_share_btn">Kattintson a megosztás gombra</string>
|
||||
<string name="shortcut_step2_tap_add_to_home_screen">Válassza a „Hozzáadás a kezdőképernyőhöz” lehetőséget, hogy az alkalmazást hozzáadja a kezdőképernyőhöz.</string>
|
||||
<!-- iOS shortcut widget -->
|
||||
<!-- use the same translation for "Shortcuts" as the system is using, often the term "Shortcut" stays untranslated; check eg. how the "Shortcuts" system app is called in your locale -->
|
||||
<string name="shortcuts_widget_title">Parancsikonok</string>
|
||||
<!-- use the same translation for "Widget" as the system is using; often the term "Widget" stays untranslated -->
|
||||
<string name="shortcuts_widget_description">Használja a Delta Chat „Hozzáadás modulhoz” funkcióját az elemek hozzáadásához</string>
|
||||
<!-- use the same translation for "Widget" as the system is using; often the term "Widget" stays untranslated -->
|
||||
<string name="remove_from_widget">Eltávolítás a modulból</string>
|
||||
<!-- use the same translation for "Widget" as the system is using; often the term "Widget" stays untranslated -->
|
||||
<string name="add_to_widget">Hozzáadás modulhoz</string>
|
||||
<!-- iOS permissions, copy from "deltachat-ios/Info.plist", which is used on missing translations in "deltachat-ios/LANG.lproj/InfoPlist.strings" -->
|
||||
<string name="InfoPlist_NSCameraUsageDescription">A Delta Chat az eszköze kameráját használja fényképek és videók készítésére és küldésére, valamint QR-kódok beolvasására.</string>
|
||||
<string name="InfoPlist_NSContactsUsageDescription">A Delta Chat a névjegyek segítségével megjeleníti azon e-mail-címek listáját, amelyekkel cseveghet. A Delta Chatnek nincs központi kiszolgálója, a névjegyeit nem küldjük el sehova.</string>
|
||||
@@ -1165,6 +1180,7 @@
|
||||
<string name="InfoPlist_NSMicrophoneUsageDescription">A Delta Chat az eszköze mikrofonját használja a hangüzenetek és a hangos videók rögzítésére, valamint küldésére.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryUsageDescription">A Delta Chat segítségével kiválaszthatja, hogy mely fényképeket szeretné elküldeni a könyvtárából.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryAddUsageDescription">A Delta Chat el akarja menteni a képeket az eszköze fotótárába.</string>
|
||||
<string name="InfoPlist_NSFaceIDUsageDescription">A Delta Chat használhatja az arcfelimerést az Ön helyi profiljának biztonsági mentésének létrehozásához és a második eszköz biztonságos beállításához.</string>
|
||||
|
||||
|
||||
<!-- android specific strings, developers: please take care to remove strings that are no longer used! -->
|
||||
@@ -1180,7 +1196,7 @@
|
||||
<string name="perm_enable_bg_already_done">Már engedélyezve van a Delta Chat számára, hogy a háttérben üzeneteket fogadjon.\n\nHa az üzenetek még mindig nem érkeznek meg a háttérben, ellenőrizze a rendszerbeállításokat is.</string>
|
||||
|
||||
<!-- device messages for updates -->
|
||||
<string name="update_1_46_android">Új szolgáltatások 🐣 és további tudnivalók:\n\n⚡️ Regisztráljon biztonságos, gyors chatmail-kiszolgálókra (https://delta.chat/chatmail) vagy használja a klasszikus e-mail-kiszolgálókat\n\n👉 PUSH értesítések bármely chatmail-kiszolgálóra\n\n👤 Kapcsolja össze ismerőseit biztonságosan a „Névjegyek csatolásával”\n\n🥰 Reagáljon bármilyen hangulatjellel\n\n📌 Tűzze ki a csevegéseket közvetlenül a keresésből … tudjon meg többet itt: %1$s</string>
|
||||
<string name="update_1_50_android">Mik az újdonságok?\n\n❤️🔥 Új emodzsi-választó még több emodzsival\n\n🎮 Továbbfejlesztett, a csevegésben használható alkalmazások: Értesítéseket kaphat és megnyithatja az azokat támogató alkalmazásokban, azaz közvetlenül megnyithat egy hozzáadott naptárbejegyzést\n\n👍 Értesítést kaphat az üzeneteire adott reakciókról\n\n… 🛠️ Egyéb javítások, tudjon meg többet itt: %1$s</string>
|
||||
<string name="update_1_46_ios">Új szolgáltatások 🐣 és további tudnivalók:\n\n⚡️ Regisztráljon biztonságos, gyors chatmail-kiszolgálókra (https://delta.chat/chatmail) vagy használja a klasszikus e-mail-kiszolgálókat\n\n👉 PUSH értesítések bármely chatmail-kiszolgálóra\n\n👤 Fogadjon „Csatolt névjegyeket\" és csatlakozzon az ismerőseihez\n\n🥰 Gyorsabb üzenetreakció kiválasztás … tudjon meg többet itt: %1$s</string>
|
||||
<string name="update_switch_profile_placement">ℹ️ A „Profilváltás” beállítás át lett helyezve:
|
||||
Érintse meg a főképernyő felső sarkában lévő profilképet a profilok hozzáadásához vagy váltásához 💡</string>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Batalkan</string>
|
||||
<string name="clear_search">Hapus pencarian</string>
|
||||
<string name="clear_search">Hapus pencarian</string>
|
||||
<string name="yes">Ya</string>
|
||||
<string name="no">Tidak</string>
|
||||
<string name="select">Pilih</string>
|
||||
@@ -471,7 +471,6 @@
|
||||
<string name="pref_app_access">Akes Aplikasi</string>
|
||||
<string name="pref_chats">Obrolan</string>
|
||||
<string name="pref_in_chat_sounds">Suara dalam obrolan</string>
|
||||
<string name="pref_message_text_size">Ukuran huruf pesan</string>
|
||||
<string name="pref_view_log">Lihat catatan</string>
|
||||
<string name="pref_saved_log">Menyimpan log ke folder \"Unduhan\"</string>
|
||||
<string name="pref_save_log_failed">Gagal menyimpan log</string>
|
||||
@@ -601,6 +600,7 @@
|
||||
<!-- translators: "setup" is the "encryption setup" here, as in "Autocrypt Setup Message" -->
|
||||
<string name="contact_setup_changed">Ubah pengaturan untuk %1$s.</string>
|
||||
<string name="copy_qr_data_success">Salin QR url ke papan klip</string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">Balasan</string>
|
||||
<string name="notify_new_message">Pesan baru</string>
|
||||
<string name="notify_background_connection_enabled">Koneksi latar diaktifkan</string>
|
||||
@@ -669,6 +669,4 @@
|
||||
<string name="a11y_background_preview_label">Pratampil latar belakang</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryUsageDescription">Delta Chat akan memungkinkan Anda memilih foto dari perpustakaan Anda untuk dikirim.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryAddUsageDescription">Delta Chat ingin menyimpan gambar ke kumpulan foto anda.</string>
|
||||
|
||||
|
||||
</resources>
|
||||
|
||||
+292
-276
File diff suppressed because it is too large
Load Diff
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">了承</string>
|
||||
<string name="cancel">取消</string>
|
||||
<string name="clear_search">検索履歴を消す</string>
|
||||
<string name="clear_search">検索履歴を消す</string>
|
||||
<string name="yes">はい</string>
|
||||
<string name="no">いいえ</string>
|
||||
<string name="select">選択</string>
|
||||
@@ -459,7 +459,6 @@
|
||||
<string name="pref_app_access">アプリのアクセス</string>
|
||||
<string name="pref_chats">チャット</string>
|
||||
<string name="pref_in_chat_sounds">着信音</string>
|
||||
<string name="pref_message_text_size">文字の大きさ</string>
|
||||
<string name="pref_view_log">ログの表示</string>
|
||||
<string name="pref_saved_log">ログはダウンロードフォルダに保存されました。</string>
|
||||
<string name="pref_save_log_failed">ログの保存に失敗しました</string>
|
||||
@@ -621,6 +620,7 @@
|
||||
<string name="contact_not_verified">%1$sを確認できません。</string>
|
||||
<!-- translators: "setup" is the "encryption setup" here, as in "Autocrypt Setup Message" -->
|
||||
<string name="contact_setup_changed">設定が%1$sに変わりました。</string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">返信</string>
|
||||
<string name="notify_new_message">新規メッセージ</string>
|
||||
<string name="notify_priority_high">高</string>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user