2
0
mirror of https://github.com/KDE/kdeconnect-android synced 2025-08-31 14:15:14 +00:00

Compare commits

..

142 Commits

Author SHA1 Message Date
Albert Vaca Cintora
e37aa08dac Release 1.13.6 2020-01-05 22:34:07 +01:00
Erik Duisters
ad801f1db8 Make FindMyPhone plugin work on Android 10 2020-01-05 17:40:54 +00:00
Rishabh Sharma
d4f35d8bd6 added dark navigation bar for dark mode 2020-01-05 16:02:25 +01:00
l10n daemon script
5cf11c0e75 GIT_SILENT made messages (after extraction) 2019-12-23 02:41:01 +01:00
Erik Duisters
ef55d6d783 Certificate generation fails when locale is set to Arabic 2019-12-22 18:57:36 +00:00
l10n daemon script
f66263d05c GIT_SILENT made messages (after extraction) 2019-12-19 02:38:47 +01:00
l10n daemon script
c292639d36 GIT_SILENT made messages (after extraction) 2019-12-17 02:42:25 +01:00
l10n daemon script
01a8b84087 GIT_SILENT made messages (after extraction) 2019-12-04 02:39:45 +01:00
l10n daemon script
ffea85c740 GIT_SILENT made messages (after extraction) 2019-11-30 02:50:50 +01:00
Albert Vaca Cintora
f6df98d648 Fix NPE 2019-11-25 14:38:38 +01:00
Albert Vaca Cintora
5e37ffe7cd Release 1.13.5 2019-11-24 22:53:49 +01:00
Albert Vaca Cintora
5907517d91 Fix NPE
Apparently removeLink can be called when there are no links already
2019-11-24 22:52:47 +01:00
Albert Vaca Cintora
63d452908f Restrict this to even more version
Anyway, it only seems to be used since Android 10
2019-11-24 22:48:59 +01:00
Albert Vaca
ccda9d468b v1.13.4 2019-11-21 21:38:35 +01:00
Albert Vaca
c3d02adaa4 Fix IllegalArgumentException crashes 2019-11-21 21:38:25 +01:00
Albert Vaca Cintora
733dd604ba Release 1.13.3 2019-11-20 11:50:39 +01:00
Albert Vaca Cintora
f93a0e366f Bump gradle plugin version 2019-11-20 11:40:47 +01:00
Simon Redman
aa735c22b2 Remove Samsung compatibility mode 2019-11-18 22:42:57 -08:00
Ankit Bhardwaj
c78077a416 Fixed snackbar background color when darkmode is off 2019-11-17 23:06:50 +00:00
l10n daemon script
da074f9413 GIT_SILENT made messages (after extraction) 2019-11-14 02:43:15 +01:00
Krzysztof Dziembała
4a0c53610f Fix reading SMS/MMS on devices with no sub_id
Some (Xiaomi) devices running >= Android Lollipop (SDK 22+) don't
support `Telephony.Sms.SUBSCRIPTION_ID`.
This commit adds a verification step to ensure that only devices with
`"sub_id"` column include it in query.

* Address review comments

Check was moved to a separate helper function (boolean), it's
performed only on SDK 22+ and `Telephony.Sms.SUBSCRIPTION_ID`
is used in query (instead of null), so no NullPointerException
is thrown.

Also parseInt shouldn't now fail if `Message.SUBSCRIPTION_ID` key
exists in messageInfo, but value is null

* Return false if cursor is null

* Return true without checking column

If we got the cursor, the query won't fail when executed again, and the "sim_id" column must exist (because an exception wasn't thrown).
2019-11-09 11:27:54 -08:00
l10n daemon script
aa25372e91 GIT_SILENT made messages (after extraction) 2019-11-08 02:47:27 +01:00
Albert Vaca Cintora
125dd14b18 Remove redundant .create() 2019-10-27 23:43:42 +01:00
Simon Redman
6f81c67632 Refactor contacts-getting code to be either "everything" or "one"
Fixes bug from mailing list conversation dated 12 October 2019
2019-10-27 21:23:52 +00:00
Albert Vaca Cintora
1d5c280401 Update gradle plugin 2019-10-27 20:39:49 +01:00
Albert Vaca Cintora
432294c64c Broacast when we open the app but ratelimit broadcasts
Reviewed-by: Aleix Pol
2019-10-25 21:22:10 +02:00
Albert Vaca Cintora
d16293cca5 Add missing setEnabled(true)
The second time we entered the screen pull-to-refresh wasn't working

Reviewed-by: Aleix Pol
2019-10-25 20:18:46 +02:00
Albert Vaca Cintora
dd5fb954bc Don't use sender if not there
Reviewed-by: Aleix Pol
2019-10-25 20:09:26 +02:00
Simon Redman
b1c6df405c Delete broken getVCardsFast
This method does not work because the API doesn't provide the information we need.

If we decide to ressurect it, we can look this commit up later.

#TIMECAPSULE
2019-10-19 09:01:10 -07:00
Albert Vaca
418e1841f3 Actually read the "open" boolean
After sending a file, sending more was broken.
2019-10-13 21:41:31 +02:00
Albert Vaca Cintora
f2064aaef8 Honour FLAG_ONLY_ALERT_ONCE
Reviewed by Aleix Pol
2019-10-12 19:15:37 +02:00
Łukasz Patron
d1b892f368 Support ACTION_SEEK_TO in mpris media session 2019-10-12 14:55:50 +02:00
l10n daemon script
b5a1424206 GIT_SILENT made messages (after extraction) 2019-10-12 02:42:34 +02:00
l10n daemon script
b367e5d38e GIT_SILENT made messages (after extraction) 2019-10-10 02:43:06 +02:00
Simon Redman
a2ccafbdf8 Add information for bug reporting to README 2019-10-08 20:21:01 -07:00
l10n daemon script
da55b11c22 GIT_SILENT made messages (after extraction) 2019-10-06 02:38:36 +02:00
l10n daemon script
cf968a70ea GIT_SILENT made messages (after extraction) 2019-10-03 02:35:29 +02:00
l10n daemon script
7b78a4c78a GIT_SILENT made messages (after extraction) 2019-09-29 02:39:19 +02:00
l10n daemon script
9fcda1ec6f GIT_SILENT made messages (after extraction) 2019-09-27 02:37:00 +02:00
l10n daemon script
e359d59bdd GIT_SILENT made messages (after extraction) 2019-09-25 02:37:07 +02:00
l10n daemon script
ce7105ef89 GIT_SILENT made messages (after extraction) 2019-09-24 02:41:47 +02:00
Albert Vaca
540c0a4a24 Fix crash and release 1.13.2 2019-09-23 19:38:59 +02:00
l10n daemon script
c28dd3606e GIT_SILENT made messages (after extraction) 2019-09-23 02:35:55 +02:00
l10n daemon script
bc2bb0cc7e GIT_SILENT made messages (after extraction) 2019-09-22 02:41:45 +02:00
l10n daemon script
0ae7055711 GIT_SILENT made messages (after extraction) 2019-09-20 02:41:00 +02:00
Albert Vaca Cintora
e70419e9d3 Release 1.13.1 2019-09-20 00:57:23 +02:00
Albert Vaca Cintora
2ea3ecbdba Fix inconsistent state if adding a new storage when in action mode 2019-09-20 00:54:11 +02:00
Albert Vaca Cintora
d8cbc38532 Fix Sftp preferences not working
In version 1.1.0 of androidx, preferences do nothing on click if they are
not selectable. Added a new property "inSelectionMode" that we can use
instead of the built-in "selectable".
2019-09-20 00:49:32 +02:00
l10n daemon script
caeb59eb3d GIT_SILENT made messages (after extraction) 2019-09-19 02:37:28 +02:00
Nicolas Fella
4f8e62958a Fix build 2019-09-18 11:29:25 +02:00
Nicolas Fella
e3e4fc6552 Don't sync notification on connection 2019-09-17 09:43:03 +00:00
Tom Watson
bec3a0c147 add missing apostrophe to string 2019-09-17 11:39:22 +02:00
l10n daemon script
80b572761b GIT_SILENT made messages (after extraction) 2019-09-16 02:41:10 +02:00
l10n daemon script
3d56a22e03 GIT_SILENT made messages (after extraction) 2019-09-10 02:34:05 +02:00
l10n daemon script
0be3c1601b GIT_SILENT made messages (after extraction) 2019-09-09 02:36:06 +02:00
Albert Vaca Cintora
ea15a4eecd Check-in a new debug keystore
This way, when installing a development version built on a different
environment, it will be signed with the same key and Android won't make
you wipe your data.
2019-09-07 14:31:55 +02:00
Albert Vaca Cintora
96679dfb0c Bump deps 2019-09-07 14:28:42 +02:00
Albert Vaca Cintora
cff67ba806 Release 1.13 2019-09-07 12:50:43 +02:00
Albert Vaca Cintora
1000453081 Merge branch 'philipc/kdeconnect-android-philipc/file-transfer-docs' 2019-09-07 12:48:51 +02:00
Albert Vaca Cintora
2e4b4fc52b Merge branch 'eduisters/kdeconnect-android-duplicate_contact_ids' 2019-09-07 12:46:45 +02:00
l10n daemon script
cd3d52ed39 GIT_SILENT made messages (after extraction) 2019-09-02 02:42:11 +02:00
Erik Duisters
779d5e625a Do not return duplicate contact uIDs because it will crash kdeconnectd 2019-08-31 11:11:58 +02:00
l10n daemon script
1981a4aeb1 GIT_SILENT made messages (after extraction) 2019-08-30 02:36:52 +02:00
Simon Redman
86258a51a3 Ignore case when checking manufacturer for Samsung mode 2019-08-28 22:38:59 -07:00
Simon Redman
6a6b41db49 Correct error for tagging multi-target messages 2019-08-18 11:27:33 -07:00
l10n daemon script
26335464f1 GIT_SILENT made messages (after extraction) 2019-08-17 02:43:21 +02:00
l10n daemon script
a7391c47cc GIT_SILENT made messages (after extraction) 2019-08-16 02:39:05 +02:00
l10n daemon script
df913ae13c GIT_SILENT made messages (after extraction) 2019-08-11 02:35:14 +02:00
l10n daemon script
aadaf00f1d GIT_SILENT made messages (after extraction) 2019-08-09 02:47:01 +02:00
l10n daemon script
229ca1bb0e GIT_SILENT made messages (after extraction) 2019-08-08 02:34:17 +02:00
l10n daemon script
d8d049103f GIT_SILENT made messages (after extraction) 2019-08-06 02:35:42 +02:00
l10n daemon script
0e2af51e1f GIT_SILENT made messages (after extraction) 2019-08-04 02:38:00 +02:00
l10n daemon script
074b37cd74 GIT_SILENT made messages (after extraction) 2019-08-01 02:37:13 +02:00
l10n daemon script
5147bb5507 GIT_SILENT made messages (after extraction) 2019-07-31 02:41:53 +02:00
l10n daemon script
2afd390b6a GIT_SILENT made messages (after extraction) 2019-07-29 02:29:05 +02:00
l10n daemon script
a51288f01a GIT_SILENT made messages (after extraction) 2019-07-28 02:35:05 +02:00
l10n daemon script
6fea429fab GIT_SILENT made messages (after extraction) 2019-07-25 02:31:35 +02:00
l10n daemon script
a61032cdc7 GIT_SILENT made messages (after extraction) 2019-07-24 02:38:36 +02:00
Colin Redman
5dc65ee909 Clipboard sync on new connections
Summary: Timestamp on changes to clipboards so that when a new device connects it can sync both clipboards to the most recent updated clipboard.

Reviewers: #kde_connect, albertvaka

Reviewed By: #kde_connect, albertvaka

Subscribers: albertvaka, sredman, kdeconnect

Tags: #kde_connect

Differential Revision: https://phabricator.kde.org/D22585
2019-07-23 16:22:16 +02:00
Albert Vaca
4be5800b8b Disable google backups of the app
This was causing problems when a restored app remembered the list of
storage locations it had access to, but it no longer could access them.

In the past, this also caused problems when a restored app would carry
with it a certificate that was no longer valid on the new device because
the device id had changed.

BUG: 406707
2019-07-23 14:58:52 +02:00
l10n daemon script
d98378b54b GIT_SILENT made messages (after extraction) 2019-07-23 02:36:23 +02:00
Matthijs Tijink
7f283d8995 Tell the user that no Wi-Fi is connected and click to fix it 2019-07-22 20:35:57 +00:00
l10n daemon script
4d10dca624 GIT_SILENT made messages (after extraction) 2019-07-22 02:38:18 +02:00
Philip Cohn-Cort
265828aeee Try to make the BackgroundJob subclasses javadocs a little easier to understand 2019-07-21 12:02:29 -04:00
Philip Cohn-Cort
79e4f62605 Document (in brief) SharePlugin.java, Device.java and BackgroundJobHandler.java 2019-07-21 11:32:07 -04:00
Philip Cohn-Cort
83e084a712 Document part of each of the two BackgroundJob subclasses 2019-07-21 11:31:26 -04:00
Philip Cohn-Cort
9937be4791 Add threading annotations to various ::sendPacket methods
Summary:
The methods in Device.java can be used from any thread, while
the methods in BaseLink (and its subclasses) should only run
on a background thread. These annotations are picked up by Lint
to show warnings and have no effect at runtime.
2019-07-21 07:09:28 -04:00
Albert Vaca Cintora
d84f312694 Optimize imports 2019-07-21 12:29:27 +02:00
Albert Vaca Cintora
0fdd20c343 Merge branch 'pointer-delta' 2019-07-21 12:27:02 +02:00
Albert Vaca Cintora
01cb738165 Lower sensitivity 2019-07-21 12:26:52 +02:00
Matthijs Tijink
16362ae8f6 Send a stop pointer message so we don't need to wait for timeout 2019-07-21 10:18:21 +02:00
Albert Vaca Cintora
377d2ddcd1 Fix delta 2019-07-21 10:06:56 +02:00
l10n daemon script
4ed2d4f47d GIT_SILENT made messages (after extraction) 2019-07-21 02:41:32 +02:00
Albert Vaca Cintora
7c3a297bca Pointer plugin: send delta and not abs value 2019-07-21 00:14:16 +02:00
Matthijs Tijink
2604bc9595 Use the packet-in-queue removing in the presenter plugin pointer 2019-07-20 21:09:28 +00:00
Matthijs Tijink
d5b697f2c4 Don't remove packets from the queue without adding a replacing one 2019-07-20 22:28:54 +02:00
Matthijs Tijink
66aa6696cc Use a queue of unsent packets instead of threads
This also allows "unsending" packets (if they're still in the queue).
This patch does that for mouse move packets, so they get accumulated
together (sending less stuff over a congested link).
2019-07-20 20:21:44 +00:00
Nicolas Fella
6da339028d [plugins/photo] Send cancel packet when user aborts camera 2019-07-20 14:04:34 +00:00
Albert Vaca Cintora
ea72327abe Merge branch 'albertvaka/human-name-lib' 2019-07-20 13:38:07 +02:00
Albert Vaca Cintora
7c56aa9ce1 Error handling 2019-07-20 13:32:58 +02:00
Matthijs Tijink
720914dd59 Use connection multiplexer in bluetooth link provider 2019-07-20 12:04:25 +02:00
Matthijs Tijink
bfd8ea92b8 Add connection multiplexer 2019-07-20 12:02:47 +02:00
Nicolas Fella
8d2e2fa698 Remove unused strings 2019-07-19 21:42:00 +00:00
Albert Vaca Cintora
ffe722b23a Make pointer go back immediately after pushing against a screen edge 2019-07-19 23:34:29 +02:00
Albert Vaca Cintora
bdcefe4a2b Merge branch 'albertvaka/presenter-pointer'
# Conflicts:
#	res/values/strings.xml
#	src/org/kde/kdeconnect/Plugins/PresenterPlugin/PresenterActivity.java
2019-07-19 23:02:39 +02:00
Albert Vaca Cintora
2595d97fad Use capabilities to enable presenter pointer 2019-07-19 22:58:59 +02:00
Matthijs Tijink
a1905bd031 Control the volume of Android media players 2019-07-19 20:31:52 +00:00
Simon Redman
abcb6cbf33 [SMS App] Export all addresses of multitarget messages
## Summary
Export the complete list of remote addresses of a multitarget message

Note that this changes format of the returned Message object, replacing the string "address" field with a string list "addresses" field, so it is not backwards-compatible with old desktop applications

## Test Plan
See Test Plan of the desktop-side patch: https://invent.kde.org/kde/kdeconnect-kde/merge_requests/101
2019-07-19 17:46:54 +00:00
Simon Redman
1db4327370 Fix build
Move translator comments to a comment in strings.xml

Android doesn't build if there is a non-.xml file in the res/values/ folder
2019-07-19 16:00:07 +02:00
l10n daemon script
489c6af1a1 GIT_SILENT made messages (after extraction) 2019-07-19 02:47:04 +02:00
l10n daemon script
3bf624e2cf GIT_SILENT made messages (after extraction) 2019-07-18 02:42:46 +02:00
Simon Redman
70cf9e1bac Update in-repository documentation
- Update README with new links
- Add a section pointing potential translators to the localization team
- Add a quick text file to the strings folder to again point potential translators to the localization team
2019-07-15 15:33:13 +00:00
Pino Toscano
67f10ab694 i18n: drop obsolete messages before merging
Babel (used by android2po) does not support them, warning when trying
to parse them. Since they are not really useful, drop them before
invoking a2po.
2019-07-15 08:03:50 +02:00
Pino Toscano
c1006d87e1 i18n: prune @-langs earlier on translation import
As Android does not support languages with @, remove their po files
before invoking a2po instead of removing their results afterwards.
2019-07-15 07:36:59 +02:00
l10n daemon script
7c26d30ce5 GIT_SILENT made messages (after extraction) 2019-07-15 02:38:43 +02:00
l10n daemon script
f8953057b9 GIT_SILENT made messages (after extraction) 2019-07-14 02:44:15 +02:00
l10n daemon script
689be496cd GIT_SILENT made messages (after extraction) 2019-07-12 02:46:45 +02:00
l10n daemon script
6f987507b4 GIT_SILENT made messages (after extraction) 2019-07-11 02:40:23 +02:00
l10n daemon script
9b20ab38df GIT_SILENT made messages (after extraction) 2019-07-10 02:45:23 +02:00
Simon Redman
ffbceb9b8e Reorder the Samsung special case to take effect before the case handling all other devices
BUG: 401677
2019-07-09 11:15:44 +02:00
l10n daemon script
c4983ae0ef GIT_SILENT made messages (after extraction) 2019-07-08 02:40:11 +02:00
l10n daemon script
001a694f71 GIT_SILENT made messages (after extraction) 2019-07-07 02:44:51 +02:00
l10n daemon script
4c5e66f00d GIT_SILENT made messages (after extraction) 2019-07-06 02:48:36 +02:00
Albert Vaca Cintora
f2c0f02226 Make service name translatable
BUG: 409511
2019-07-05 21:55:00 +02:00
Albert Vaca Cintora
044e56184a Bump version to release 2019-07-05 21:34:47 +02:00
Albert Vaca
f923ce198f Merge branch 'albertvaka/sms-lock-fix' 2019-07-05 14:59:40 +02:00
Albert Vaca
a9508a7f46 Lock before first access as per CR 2019-07-05 14:57:50 +02:00
Dmitriy Bogdanov
cbbec32beb Fix text extraction from notifications
Summary:
Fixes an error of extracting SpannableString as String (which resulted in notification text being null).
Fixes group conversation text extraction on API <28.
Also includes some minor refactoring.

Reviewers: nicolasfella

Reviewed By: nicolasfella

Subscribers: kdeconnect

Tags: #kde_connect

Differential Revision: https://phabricator.kde.org/D22140
2019-07-05 11:09:19 +02:00
l10n daemon script
cf247b4d18 GIT_SILENT made messages (after extraction) 2019-07-05 02:41:14 +02:00
Albert Vaca Cintora
98c366ee6a Simplify enabling the pointer 2019-07-04 23:20:25 +02:00
Albert Vaca Cintora
bfadb84b9f Fix potential race condition caused by early unlocking
The lock should be kept between the point we read and the point we write

Also, no need to pass SMSPlugin as a parameter, since enclossed classes
already have access to its parent by default.
2019-07-04 21:01:12 +02:00
Albert Vaca Cintora
7db40ee20a Fix potential race condition
lastState was updated long after it was read
2019-07-04 20:57:04 +02:00
Pino Toscano
5609c8ebcc i18n: use https for bugs.kde.org
bump also the date of the template, to indicate "it was changed"
2019-06-30 11:39:47 +02:00
l10n daemon script
1d1618d8ed GIT_SILENT made messages (after extraction) 2019-06-28 02:44:15 +02:00
Albert Vaca
47c2483d53 Remove gui counters logic
It had bugs and was never used. I've left in the Discovery Mode logic
because we might want to expose that somehow like GSConnect does.
2019-06-27 10:48:33 -04:00
Albert Vaca
38caa1831f WIP Pointer feature in presenter plugin 2019-06-27 10:15:28 -04:00
Albert Vaca
4ea7618828 Use a library to get the human-friendly device name
We had a list of names before, but it was outdated. Using a library gives
us an up-to-date list plus a fallback that fetches the name from the
internet if not in the list.
2019-06-27 10:12:51 -04:00
l10n daemon script
5659812428 GIT_SILENT made messages (after extraction) 2019-06-24 02:43:41 +02:00
Simon Redman
418e1a813e Potentially fix SMS/MMS access on Samsung devices
According to some information I stumbled across while working on a different issue, Samsung devices do not support the content provider I was using to populate the list of SMS conversations. This is very annoying, but nevertheless there appears to be a workaround.

BUG: 401677

Many users with Samsung devices have reported problems using the SMS plugin.

Hopefully this will fix the SMS plugin on Samsung devices.
2019-06-21 18:49:13 -06:00
Simon Redman
50f395bdef Potentially fix SMS/MMS access on Samsung devices 2019-06-21 18:48:11 -06:00
l10n daemon script
9695e5a49e GIT_SILENT made messages (after extraction) 2019-06-22 02:45:07 +02:00
l10n daemon script
e36b80aa0c GIT_SILENT made messages (after extraction) 2019-06-19 02:51:31 +02:00
106 changed files with 3649 additions and 2419 deletions

1
.gitignore vendored
View File

@@ -10,5 +10,6 @@ classes/
gradle
*.iml
*.keystore
!debug.keystore
.directory
GPUCache/

View File

@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="org.kde.kdeconnect_tp"
android:versionCode="11292"
android:versionName="1.12.9">
android:versionCode="11360"
android:versionName="1.13.6">
<supports-screens
android:anyDensity="true"
@@ -33,19 +34,22 @@
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<application
android:icon="@drawable/icon"
android:label="KDE Connect"
android:supportsRtl="true"
android:allowBackup="false"
android:networkSecurityConfig="@xml/network_security_config"
android:theme="@style/KdeConnectTheme">
android:theme="@style/KdeConnectTheme"
android:name="org.kde.kdeconnect.MyApplication">
<service
android:name="org.kde.kdeconnect.BackgroundService"
android:enabled="true" />
<service
android:name="org.kde.kdeconnect.Plugins.RemoteKeyboardPlugin.RemoteKeyboardService"
android:label="KDE Connect Remote Keyboard"
android:label="@string/remote_keyboard_service"
android:permission="android.permission.BIND_INPUT_METHOD">
<intent-filter>
<action android:name="android.view.InputMethod" />
@@ -118,6 +122,12 @@
android:label="@string/findmyphone_title"
android:launchMode="singleInstance" />
<receiver android:name="org.kde.kdeconnect.Plugins.FindMyPhonePlugin.FindMyPhoneReceiver">
<intent-filter>
<action android:name="org.kde.kdeconnect.Plugins.FindMyPhonePlugin.foundIt" />
</intent-filter>
</receiver>
<!-- Plugin-related activities and services -->
<activity

View File

@@ -21,7 +21,15 @@ You can install this app from the [Play Store](https://play.google.com/store/app
## Contributing
To contribute patches, use [KDE Connect's Phabricator](https://phabricator.kde.org/project/profile/159/). There you can also find a task list with stuff to do, and links to other relevant resources. It is a good idea to also subscribe to the [KDE Connect mailing list](https://mail.kde.org/mailman/listinfo/kdeconnect).
A lot of useful information, including how to get started working on KDE Connect and how to connect with the current developers, is on our [KDE Community Wiki page](https://community.kde.org/KDEConnect)
For bug reporting, please use [KDE's Bugzilla](https://bugs.kde.org). Please do not use the issue tracker in GitLab since we want to keep everything in one place.
To contribute patches, use [KDE Connect's Gitlab](https://invent.kde.org/kde/kdeconnect-android/).
On Gitlab (as well as on our [old Phabricator](https://phabricator.kde.org/tag/kde_connect/)) you can find a task list with stuff to do and links to other relevant resources.
It is a good idea to also subscribe to the [KDE Connect mailing list](https://mail.kde.org/mailman/listinfo/kdeconnect).
Please know that all translations for all KDE apps are handled by the [localization team](https://l10n.kde.org/). If you would like to submit a translation, that should be done by working with the proper team for that language.
## License
[GNU GPL v2](https://www.gnu.org/licenses/gpl-2.0.html) and [GNU GPL v3](https://www.gnu.org/licenses/gpl-3.0.html)

View File

@@ -15,9 +15,13 @@ function export_pot_file # First parameter will be the path of the pot file we h
function import_po_files # First parameter will be a path that will contain several .po files with the format LANG.po
{
podir=$1
# Android doesn't support languages with an @
find "$podir" -type f -name "*@*.po" -delete
# drop obsolete messages, as Babel cannot parse them -- see:
# https://github.com/python-babel/babel/issues/206
# https://github.com/python-babel/babel/issues/566
find "$podir" -name '*.po' -exec msgattrib --no-obsolete -o {} {} \;
ANSI_COLORS_DISABLED=1 a2po import --ignore-fuzzy --android res/ --gettext $podir
#Android doesn't support languages with an @
rm -r res/values-*@*
}

View File

@@ -6,7 +6,7 @@ buildscript {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.1'
classpath 'com.android.tools.build:gradle:3.5.3'
}
}
@@ -44,10 +44,19 @@ android {
abortOnError false
checkReleaseBuilds false
}
signingConfigs {
debug {
storeFile file("debug.keystore")
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
}
buildTypes {
debug {
minifyEnabled false
useProguard false
signingConfig signingConfigs.debug
}
release { //keep on 'release' for faster builds, set to 'all' when testing to make sure proguard is not deleting important stuff
minifyEnabled true
@@ -69,15 +78,19 @@ dependencies {
*/
}
implementation 'androidx.media:media:1.0.1'
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.preference:preference:1.0.0'
implementation 'androidx.media:media:1.1.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.preference:preference:1.1.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'androidx.lifecycle:lifecycle-runtime:2.1.0'
implementation "androidx.lifecycle:lifecycle-extensions:2.0.0"
implementation 'androidx.lifecycle:lifecycle-common-java8:2.1.0'
implementation 'com.google.android.material:material:1.0.0'
implementation 'com.jakewharton:disklrucache:2.0.2' //For caching album art bitmaps
implementation 'com.jaredrummler:android-device-names:1.1.9' //To get a human-friendly device name
implementation 'org.apache.sshd:sshd-core:0.14.0'
implementation 'org.apache.mina:mina-core:2.0.19' //For some reason, makes sshd-core:0.14.0 work without NIO, which isn't available until Android 8+
implementation 'org.apache.mina:mina-core:2.0.19' //For some reason, makes sshd-core:0.14.0 work without NIO, which isn't available until Android 8 (api 26)
//implementation('com.github.bright:slf4android:0.1.6') { transitive = true } // For org.apache.sshd debugging
implementation 'com.madgag.spongycastle:bcpkix-jdk15on:1.58.0.0' //For SSL certificate generation

BIN
debug.keystore Normal file

Binary file not shown.

View File

@@ -1,6 +1,6 @@
#Wed May 01 14:24:13 CEST 2019
#Sun Oct 27 20:27:45 CET 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip

9
res/drawable/ic_wifi.xml Normal file
View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M1,9l2,2c4.97,-4.97 13.03,-4.97 18,0l2,-2C16.93,2.93 7.08,2.93 1,9zM9,17l3,3 3,-3c-1.65,-1.66 -4.34,-1.66 -6,0zM5,13l2,2c2.76,-2.76 7.24,-2.76 10,0l2,-2C15.14,9.14 8.87,9.14 5,13z"/>
</vector>

View File

@@ -99,15 +99,6 @@
android:text="@string/unreachable_description"
android:textAppearance="?android:attr/textAppearanceMedium"
android:visibility="gone" />
<TextView
android:id="@+id/on_data_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="@string/on_data_message"
android:textAppearance="?android:attr/textAppearanceMedium"
android:visibility="gone"/>
</LinearLayout>

View File

@@ -1,31 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mpris_control_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:padding="12dp"
android:orientation="vertical">
<Space
<TextView
style="@android:style/TextAppearance.Medium"
android:id="@+id/textView"
android:layout_weight="0"
android:layout_marginBottom="6dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/top_space"/>
android:text="@string/presenter_lock_tip" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="6dp"
android:orientation="horizontal"
android:layout_below="@id/top_space"
android:layout_above="@id/textView">
android:layout_weight="1">
<ImageButton
android:id="@+id/previous_button"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_weight="0.25"
android:contentDescription="@string/mpris_rew"
android:layout_weight="0.25"
android:layout_marginRight="3dp"
android:layout_marginEnd="3dp"
android:src="@drawable/ic_previous_black"
android:theme="@style/DisableableButton" />
@@ -33,6 +39,8 @@
android:id="@+id/next_button"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_marginLeft="3dp"
android:layout_marginStart="3dp"
android:layout_weight="0.25"
android:contentDescription="@string/mpris_ff"
android:src="@drawable/ic_next_black"
@@ -40,13 +48,16 @@
</LinearLayout>
<TextView
style="@android:style/TextAppearance.Medium"
android:padding="12dip"
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="@string/presenter_lock_tip" />
</RelativeLayout>
<Button
android:id="@+id/pointer_button"
android:layout_width="match_parent"
android:layout_marginBottom="6dp"
android:layout_height="wrap_content"
android:layout_weight="0.30"
android:visibility="gone"
android:text="@string/presenter_pointer"
android:theme="@style/DisableableButton" />
</LinearLayout>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:paddingBottom="12dp"
android:text="@string/pairing_description"
android:clickable="false"
android:background="@android:color/transparent"
>
</TextView>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:drawablePadding="8dp"
android:paddingTop="16dp"
android:paddingBottom="12dp"
android:text="@string/no_wifi"
android:drawableLeft="@drawable/ic_wifi"
android:drawableTint="?attr/colorControlNormal"
android:clickable="true"
>
</TextView>

View File

@@ -21,7 +21,6 @@
<string name="pref_plugin_receive_notifications_desc">استقبل الإخطارات من الجهاز الآخر واعرضها على أندرويد</string>
<string name="pref_plugin_sharereceiver">شارك واستقبل</string>
<string name="pref_plugin_sharereceiver_desc">شارك الملفّات والعناوين بين الجهازين</string>
<string name="plugin_not_available">هذه الميزة غير متوفّرة في إصدار أندرويد لديك</string>
<string name="device_list_empty">لا أجهزة</string>
<string name="ok">حسنًا</string>
<string name="cancel">ألغِ</string>
@@ -59,28 +58,22 @@
<string name="category_remembered_devices">الأجهزة المتذكَّرة</string>
<string name="device_menu_plugins">إعدادات الملحقة</string>
<string name="device_menu_unpair">ألغِ الاقتران</string>
<string name="device_not_reachable">الجهاز المقترن غير قابل الوصول</string>
<string name="pair_new_device">اقرن جهازًا جديدًا</string>
<string name="unknown_device">جهاز مجهول</string>
<string name="error_not_reachable">الجهاز غير قابل الوصول</string>
<string name="error_already_requested">طُلب الاقتران بالفعل</string>
<string name="error_already_paired">الجهاز مقترن بالفعل</string>
<string name="error_could_not_send_package">تعذّر إرسال الحزمة</string>
<string name="error_timed_out">انتهت المهلة</string>
<string name="error_canceled_by_user">ألغاه المستخدم</string>
<string name="error_canceled_by_other_peer">ألغاه ندّ آخر</string>
<string name="error_invalid_key">استُقبل مفتاح غير صالح</string>
<string name="encryption_info_title">معلومات التّعمية</string>
<string name="encryption_info_msg_no_ssl">لا يستخدم الجهاز الآخر إصدارة حديثة من «كدي المتّصل»، ستُستخدم طريقة التّعمية القديمة.</string>
<string name="my_device_fingerprint">بصمة SHA1 لشهادة جهازك هي:</string>
<string name="remote_device_fingerprint">بصمة SHA1 لشهادة الجهاز البعيد هي:</string>
<string name="pair_requested">طُلب الاقتران</string>
<string name="pairing_request_from">طلب اقتران من %1s</string>
<string name="received_url_title">استُلمت وصلة من %1s</string>
<string name="received_url_text">المس لفتح \'%1s\'</string>
<string name="received_file_text">المس لفتح \'%1s\'</string>
<string name="tap_to_answer">المس للإجابة</string>
<string name="reconnect">أعد الاتّصال</string>
<string name="right_click">أرسل نقرة باليمين</string>
<string name="middle_click">أرسل نقرة بالوسط</string>
<string name="show_keyboard">أظهر لوحة المفاتيح</string>
@@ -88,15 +81,12 @@
<string name="request_pairing">اطلب الاقتران</string>
<string name="pairing_accept">اقبل</string>
<string name="pairing_reject">ارفض</string>
<string name="device">الجهاز</string>
<string name="pair_device">اقرن الجهاز</string>
<string name="mpris_play">شغّل</string>
<string name="mpris_previous">السّابق</string>
<string name="mpris_rew">رجوع</string>
<string name="mpris_ff">تقدّم سريع</string>
<string name="mpris_next">التّالي</string>
<string name="mpris_volume">المستوى</string>
<string name="mpris_settings">إعدادات الوسائط المتعدّدة</string>
<string name="mpris_time_settings_title">زرّا التّقدّم والإرجاع</string>
<string-array name="mpris_time_entries">
<item>10 ثوان</item>
@@ -105,35 +95,24 @@
<item>دقيقة واحدة</item>
<item>دقيقتان</item>
</string-array>
<string name="protocol_version_older">يستخدم هذا الجهاز إصدار ميفاق أقدم</string>
<string name="protocol_version_newer">يستخدم هذا الجهاز إصدار ميفاق أحدث</string>
<string name="general_settings">إعدادات عامّة</string>
<string name="plugin_settings">إعدادات</string>
<string name="plugin_settings_with_name">إعدادات %s</string>
<string name="device_name">اسم الجهاز</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">اسم جهاز غير صالح</string>
<string name="shareplugin_text_saved">استُقبل نصّ، حُفظ إلى الحافظة</string>
<string name="custom_devices_settings">قائمة أجهزة مخصّصة</string>
<string name="pair_device_action">اقرن جهازًا جديدًا</string>
<string name="unpair_device_action">ألغِ اقتران %s</string>
<string name="custom_device_list">أضف أجهزة بميفاق الإنترنت م​إ</string>
<string name="share_notification_preference">إخطارات مزعجة</string>
<string name="share_notification_preference_summary">اهتزّ وشغّل صوتًا عند استقبال ملفّ</string>
<string name="title_activity_notification_filter">مرشّح الإخطارات</string>
<string name="filter_apps_info">ستُزامن الإخطارات من التّطبيقات المحدّدة.</string>
<string name="sftp_internal_storage">التّخزين الدّاخليّ</string>
<string name="sftp_sdcard_num">بطاقة SD %d</string>
<string name="sftp_sdcard">بطاقة SD</string>
<string name="sftp_readonly">(للقراءة فقط)</string>
<string name="sftp_camera">صور الكاميرا</string>
<string name="add_host">أضف مضيفًا/م​إ</string>
<string name="no_players_connected">لم يُعثر على مشغّلات</string>
<string name="mpris_player_on_device">%1$s على %2$s</string>
<string name="send_files">أرسل ملفّات</string>
<string name="pairing_title">أجهزة «كدي المتّصل»</string>
<string name="pairing_description">الأجهزة الأخرى التي تشغّل «كدي المتّصل» وعلى نفس الشّبكة ستظهر هنا.</string>
<string name="device_paired">اقتُرن الجهاز</string>
<string name="device_rename_title">أعد تسمية الجهاز</string>
<string name="device_rename_confirm">أعد التّسمية</string>
<string name="refresh">أنعش</string>
@@ -141,7 +120,6 @@
<string name="no_file_browser">لا متصفّحات ملفّات مثبّتة.</string>
<string name="pref_plugin_telepathy">أرسل SMS</string>
<string name="pref_plugin_telepathy_desc">أرسل رسائل نصّيّة من سطح المكتب</string>
<string name="plugin_not_supported">لا يدعم جهازك هذه الملحقة</string>
<string name="findmyphone_title">جِد جهازي</string>
<string name="findmyphone_title_tablet">جِد جهازي اللوحيّ</string>
<string name="findmyphone_description">يرّن هذا الجهاز لتجده</string>

View File

@@ -1,23 +1,45 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="kde_connect">KDE Connect</string>
<string name="foreground_notification_no_devices">Nun se coneutó con dengún preséu</string>
<string name="foreground_notification_devices">Coneutóse con %s</string>
<string name="pref_plugin_telephony">Avisador telefónicu</string>
<string name="pref_plugin_telephony_desc">Unvia avisos de les llamaes entrantes</string>
<string name="pref_plugin_battery">Informe de la batería</string>
<string name="pref_plugin_battery_desc">Informa davezu del estáu de la batería</string>
<string name="pref_plugin_sftp">Sistema de ficheros en remoto</string>
<string name="pref_plugin_sftp_desc">Permite restolar remotamente\'l sistema de ficheros d\'esti preséu</string>
<string name="pref_plugin_clipboard">Sincronización del cartafueyu</string>
<string name="pref_plugin_clipboard_desc">Comparte\'l conteníu del cartafueyu</string>
<string name="pref_plugin_mousepad">Entrada remota</string>
<string name="pref_plugin_mousepad_desc">Usa\'l preséu como panel táutil y tecláu</string>
<string name="pref_plugin_remotekeyboard">Receición de calcos de tecles remotos</string>
<string name="pref_plugin_mpris">Controles multimedia</string>
<string name="pref_plugin_runcommand">Execución de comandos</string>
<string name="pref_plugin_runcommand_desc">Aiciona comandos remotos dende\'l preséu</string>
<string name="pref_plugin_contacts">Sincronizador de contautos</string>
<string name="pref_plugin_contacts_desc">Permite la sincronización de la llista telefónica del teléfonu</string>
<string name="pref_plugin_ping_desc">Unviu y receición de pings</string>
<string name="pref_plugin_notifications">Sincronización d\'avisos</string>
<string name="pref_plugin_notifications_desc">Accede a los avisos n\'otros preseos</string>
<string name="pref_plugin_receive_notifications">Receición d\'avisos</string>
<string name="pref_plugin_receive_notifications_desc">Recibe los avisos d\'otros preseos y amúesalos n\'Android</string>
<string name="pref_plugin_sharereceiver">Compartición y receición</string>
<string name="pref_plugin_sharereceiver_desc">Comparte ficheros y URLs ente preseos</string>
<string name="device_list_empty">Nun hai preseos</string>
<string name="ok">Aceutar</string>
<string name="cancel">Encaboxar</string>
<string name="open_mpris_controls">Control multimedia</string>
<string name="no_permission_mprisreceiver">Pa ser a controlar reproductores multimedia precises conceder l\'accesu a los avisos</string>
<string name="no_permissions_remotekeyboard">Pa recibir calcos de tecles precises activar el tecláu remotu de KDE Connect</string>
<string name="send_ping">Unviar un ping</string>
<string name="open_mpris_controls">Mandu multimedia</string>
<string name="remotekeyboard_editing_only_title">Remanar les tecles remotes namái al editar</string>
<string name="open_mousepad">Entrada remota</string>
<string name="mousepad_info">Movi un deu pela pantalla pa mover el mur. Con un toque faes un clic esquierdu y teniendo primío faes l\'aición d\'arrastrar y soltar, col toque de dos deos simules un clic drechu y col toque de tres simules un clic col botón d\'en mediu del mur. Esliza dos deos pela pantalla pa desplazate.</string>
<string name="mousepad_double_tap_settings_title">Aición al tocar con dos deos</string>
<string name="mousepad_triple_tap_settings_title">Aición al tocar con tres deos</string>
<string name="mousepad_sensitivity_settings_title">Sensibilidá del panel táutil</string>
<string name="mousepad_scroll_direction_title">Direición de desplazamientu inversa</string>
<string-array name="mousepad_tap_entries">
<item>Clic drechu</item>
<item>Clic d\'en mediu</item>
@@ -26,7 +48,7 @@
<string-array name="mousepad_sensitivity_entries">
<item>Perlenta</item>
<item>Lenta</item>
<item>Default</item>
<item>Por defeutu</item>
<item>Rápida</item>
<item>Perrápida</item>
</string-array>
@@ -41,8 +63,17 @@
<string name="category_connected_devices">Preseos coneutaos</string>
<string name="category_not_paired_devices">Preseos disponibles</string>
<string name="category_remembered_devices">Preseos recordaos</string>
<string name="device_menu_plugins">Axustes de plugins</string>
<string name="device_menu_unpair">Desempareyar</string>
<string name="pair_new_device">Empareya un preséu nuevu</string>
<string name="pair_new_device">Empareyar un preséu nuevu</string>
<string name="error_could_not_send_package">Nun pudo unviase\'l paquete</string>
<string name="error_timed_out">Escosó\'l tiempu d\'espera</string>
<string name="encryption_info_title">Información del cifráu</string>
<string name="encryption_info_msg_no_ssl">L\'otru preséu nun executa una versión recién de KDE Connect y usa\'l métodu heredáu de cifráu.</string>
<string name="my_device_fingerprint">La buelga SHA1 d\'esti preséu ye:</string>
<string name="remote_device_fingerprint">La buelga SHA1 del preséu remotu ye:</string>
<string name="pair_requested">Solicitóse l\'empareyamientu</string>
<string name="pairing_request_from">Solicitú d\'empareyamientu de %1s</string>
<plurals name="incoming_file_title">
<item quantity="one">Recibiendo %1$d ficheru de %2$s</item>
<item quantity="other">Recibiendo %1$d ficheros de %2$s</item>
@@ -59,22 +90,36 @@
<item quantity="one">Ficheru: %1$s</item>
<item quantity="other">(Ficheru %2$d de %3$d): %1$s</item>
</plurals>
<plurals name="received_files_title">
<item quantity="one">Recibióse 1 ficheru de %1$s</item>
<item quantity="other">Recibiéronse %2$d ficheros de %1$s</item>
</plurals>
<plurals name="received_files_fail_title">
<item quantity="one">Fallu al recibir el ficheru de %1$s</item>
<item quantity="other">Fallu al recibir %2$d de los %3$d ficheros de %1$s</item>
</plurals>
<plurals name="send_files_fail_title">
<item quantity="one">Fallu al unviar el ficheru de %1$s</item>
<item quantity="other">Fallu al unviar %2$d de los %3$d ficheros de %1$s</item>
<plurals name="sent_files_title">
<item quantity="one">Unvióse\'l ficheru a %1$s</item>
<item quantity="other">Unviáronse %2$d ficheros a %1$s</item>
</plurals>
<plurals name="send_files_fail_title">
<item quantity="one">Fallu al unviar el ficheru a %1$s</item>
<item quantity="other">Fallu al unviar %2$d de los %3$d ficheros a %1$s</item>
</plurals>
<string name="received_file_text">Toca p\'abrir «%1s»</string>
<string name="cannot_create_file">Nun pue crease\'l ficheru %s</string>
<string name="tap_to_answer">Toca pa responder</string>
<string name="right_click">Unviar un clic drechu</string>
<string name="middle_click">Unviar un clic d\'en mediu</string>
<string name="show_keyboard">Amosar el tecláu</string>
<string name="device_not_paired">Nun s\'empareyó\'l preséu</string>
<string name="request_pairing">Solicitar l\'empareyamientu</string>
<string name="device">Preséu</string>
<string name="pairing_accept">Aceutar</string>
<string name="pairing_reject">Refugar</string>
<string name="settings">Axustes</string>
<string name="mpris_volume">Volume</string>
<string name="mpris_time_settings_title">Botones d\'avanzar/rebobinar</string>
<string name="mpris_time_settings_summary">Axusta\'l tiempu d\'avance/rebobináu al primir</string>
<string-array name="mpris_time_entries">
<item>10 segundos</item>
<item>20 segundos</item>
@@ -82,46 +127,92 @@
<item>1 minutu</item>
<item>2 minutos</item>
</string-array>
<string name="protocol_version_older">Esti preséu una una versión vieya del protocolu</string>
<string name="protocol_version_newer">Esti preséu una una versión nueva del protocolu</string>
<string name="general_settings">Axustes xenerales</string>
<string name="plugin_settings">Axustes</string>
<string name="device_name_preference_summary">%s</string>
<string name="custom_devices_settings">Llista de preseos personalizaos</string>
<string name="mpris_notification_settings_summary">Permite\'l control de reproductores multimedia ensin abrir KDE Connect</string>
<string name="share_to">Compartir con...</string>
<string name="protocol_version_newer">Esti preséu una versión nueva del protocolu</string>
<string name="plugin_settings_with_name">%s</string>
<string name="custom_devices_settings">Llista de preseos personalizada</string>
<string name="custom_device_list">Amestar preseos pola IP</string>
<string name="custom_device_deleted">Desanicióse\'l preséu personalizáu</string>
<string name="custom_device_list_help">Si\'l preséu nun se deteuta automáticamente, pues amestar la so direición IP o nome d\'agospiu calcando nel botón flotante d\'aición</string>
<string name="undo">Desfacer</string>
<string name="share_notification_preference">Avisos sonoros</string>
<string name="share_notification_preference_summary">Vibra y reproduz un soníu al recibir un ficheru</string>
<string name="share_notification_preference_summary">Fai que\'l teléfonu vibre y reproduza un soníu al recibir un ficheru</string>
<string name="share_destination_customize">Personalizar el direutoriu de destín</string>
<string name="share_destination_customize_summary_disabled">Los ficheros recibíos van apaecer en Descargues</string>
<string name="share_destination_customize_summary_enabled">Los ficheros van atroxase nel direutoriu d\'embaxo</string>
<string name="share_destination_folder_preference">Direutoriu de destín</string>
<string name="title_activity_notification_filter">Peñera d\'avisos</string>
<string name="filter_apps_info">Van sincronizase los avisos de les aplicaciones esbillaes.</string>
<string name="sftp_sdcard">Tarxeta SD</string>
<string name="add_device_dialog_title">Amiestu d\'un preséu</string>
<string name="add_device_hint">Nome d\'agopiu o direición IP</string>
<string name="add_device_hint">Nome d\'agospiu o direición IP</string>
<string name="sftp_preference_configured_storage_locations">Allugamientos d\'almacenamientu configuraos</string>
<string name="sftp_preference_add_storage_location_title">Allugamientu d\'almacenamientu adicional</string>
<string name="sftp_preference_edit_storage_location">Edición del allugamientu d\'almacenamientu</string>
<string name="sftp_storage_preference_storage_location">Allugamientu d\'almacenamientu</string>
<string name="sftp_storage_preference_storage_location_already_configured">Esti allugamientu yá se configuró</string>
<string name="sftp_storage_preference_click_to_select">calca pa esbillar</string>
<string name="sftp_storage_preference_display_name">Nome</string>
<string name="sftp_storage_preference_display_name_already_used">Esti nome yá ta usándose</string>
<string name="sftp_storage_preference_display_name_cannot_be_empty">El nome nun pue tar baleru</string>
<string name="sftp_action_mode_menu_delete">Desaniciar</string>
<string name="sftp_no_storage_locations_configured">Nun se configuraron allugamientos d\'almacenamientu</string>
<string name="sftp_saf_permission_explanation">P\'acceder remotamente a los ficheros tienes de configurar allugamientos d\'almacenamientu</string>
<string name="no_players_connected">Nun s\'alcontraron reproductores</string>
<string name="send_files">Unviar ficheros</string>
<string name="pairing_description">Equí deberíen apaecer los demás preseos que tean na mesma rede y executando KDE Connect.</string>
<string name="pairing_title">Preseos con KDE Connect</string>
<string name="pairing_description">Equí deberíen apaecer los demás preseos que tean executando KDE Connect na mesma rede.</string>
<string name="device_rename_title">Renomáu del preséu</string>
<string name="device_rename_confirm">Renomar</string>
<string name="refresh">Refrescar</string>
<string name="unreachable_description">Esti preséu empareyáu nun ye algamable. Asegúrate de que ta coneutáu a la mesma rede que tu.</string>
<string name="no_wifi">Nun tas coneutáu a una rede Wi-Fi polo que nun vas ser a ver dengún preséu. Calca equí p\'activar el Wi-Fi.</string>
<string name="no_file_browser">Nun hai dengún restolador de ficheros instaláu.</string>
<string name="pref_plugin_telepathy">Unviu de SMS</string>
<string name="pref_plugin_telepathy_desc">Unvia SMS dende l\'ordenador</string>
<string name="findmyphone_description">Fai qu\'esti preséu suene pa que pueas alcontralu</string>
<string name="findmyphone_found">Alcontrélu</string>
<string name="plugins_need_permission">Dalgunos plugins precisen permisos pa funcionar (tócalos pa más información):</string>
<string name="permission_explanation">Esti plugin precisa permisos pa funcionar</string>
<string name="optional_permission_explanation">Precises conceder permisos adicionales p\'activar toles funciones</string>
<string name="plugins_need_optional_permission">Dalgunos plugins tienen carauterísiques desactivaes pola falta de permisos (tócalos pa más información):</string>
<string name="select_ringtone">Timbre</string>
<string name="telephony_pref_blocked_title">Númberos bloquiaos</string>
<string name="presenter_fullscreen">Pantalla completa</string>
<string name="presenter_exit">Colar de la presentación</string>
<string name="addcommand_explanation">Nun hai comandos rexistraos.</string>
<string name="add_command_description">Pues amestar más comandos nel escritoriu</string>
<string name="dark_theme">Estilu escuru</string>
<string name="addcommand_explanation2">Pues amestar más nos axustes de KDE Connect del ordenador</string>
<string name="add_command_description">Pues amestar más comandos nel ordenador</string>
<string name="pref_plugin_mprisreceiver">Mandu pa reproductores multimedia</string>
<string name="pref_plugin_mprisreceiver_desc">Controla los reproductores multimedia d\'esti preséu dende otru</string>
<string name="notification_channel_default">Otros avisos</string>
<string name="notification_channel_persistent">Indicador permanente</string>
<string name="notification_channel_media_control">Mandu multimedia</string>
<string name="notification_channel_filetransfer">Tresferencia de ficheros</string>
<string name="copy_url_to_clipboard">Copiar la URL al cartafueyu</string>
<string name="clipboard_toast">Copióse al cartafueyu</string>
<string name="runcommand_noruncommandplugin">Esti preséu nun tien activáu\'l plugin Execución de comandos</string>
<string name="pref_plugin_findremotedevice_desc">Fai que\'l preséu remotu suene</string>
<string name="ring">Facer sonar</string>
<string name="pref_plugin_systemvolume">Volume del sistema</string>
<string name="pref_plugin_systemvolume_desc">Controla\'l volume del sistema del preséu remotu</string>
<string name="all">Too</string>
<string name="devices">Preseos</string>
<string name="settings_rename">Nome del preséu</string>
<string name="settings_dark_mode">Estilu escuru</string>
<string name="settings_more_settings_title">Más axustes</string>
<string name="setting_persistent_notification">Amosar un avisu permanente</string>
<string name="setting_persistent_notification_oreo">Avisu permanente</string>
<string name="setting_persistent_notification_description">Toca pa des/activalu n\'Avisos</string>
<string name="extra_options">Opciones adicionales</string>
<string name="new_notification">Avisu nuevu</string>
<string name="privacy_options">Opciones de la privacidá</string>
<string name="set_privacy_options">Afita les opciones de la privacidá</string>
<string name="block_contents">Bloquiar el conteníu de los avisos</string>
<string name="block_images">Bloquiar les imáxenes de los avisos</string>
<string name="notification_channel_receivenotification">Avisos d\'otros preseos</string>
<string name="plugin_photo_desc">Llanza l\'aplicación de la cámarra p\'acenciellar la fechura y tresferencia de semeyes</string>
<string name="take_picture">Llanzamientu de la cámara</string>
<string name="plugin_photo_desc">Llanza l\'aplicación de la cámara p\'acenciellar la fechura y tresferencia de semeyes</string>
<string name="no_app_for_opening">Nun alcontró denguna aplicación afayadiza p\'abrir esti ficheru.</string>
<string name="remote_keyboard_service">Tecláu remotu de KDE Connect</string>
</resources>

View File

@@ -10,7 +10,6 @@
<string name="pref_plugin_ping_desc">Изпращане и получаване на пинг</string>
<string name="pref_plugin_notifications">Синхронизиране на уведомленията</string>
<string name="pref_plugin_notifications_desc">Достъп до уведомленията от други устройства</string>
<string name="plugin_not_available">Тази функция не е налична във вашата версия на Андроид</string>
<string name="device_list_empty">Няма устройства</string>
<string name="ok">Добре</string>
<string name="cancel">Отказ</string>
@@ -42,23 +41,18 @@
<string name="device_menu_unpair">Разкачване</string>
<string name="unknown_device">Неизвестно устройство</string>
<string name="error_not_reachable">Устройството е недостъпно</string>
<string name="error_already_requested">Вече е заявено сдвояване</string>
<string name="error_already_paired">Устройството вече е сдвоено</string>
<string name="error_could_not_send_package">Пакетът не може да бъде изпратен</string>
<string name="error_timed_out">Просрочка</string>
<string name="error_canceled_by_user">Отхвърлена от потребителя</string>
<string name="error_canceled_by_other_peer">Отказана от другата страна</string>
<string name="error_invalid_key">Получен е неправилен ключ</string>
<string name="pair_requested">Заявено е сдвояване</string>
<string name="pairing_request_from">Заявено е сдвояване от %1s</string>
<string name="tap_to_answer">Докоснете за да отговорите</string>
<string name="reconnect">Ново свързване</string>
<string name="device_not_paired">Устройството не е сдвоено</string>
<string name="request_pairing">Заявка за сдвояване</string>
<string name="pairing_accept">Приемане</string>
<string name="pairing_reject">Отхвърляне</string>
<string name="device">Устройство</string>
<string name="pair_device">Сдвояване с устройството</string>
<string name="mpris_play">Възпроизвеждане</string>
<string name="mpris_previous">Предишен</string>
<string name="mpris_rew">Превъртане назад</string>
@@ -72,10 +66,6 @@
<item>1 minute</item>
<item>2 minutes</item>
</string-array>
<string name="protocol_version_older">Това устройство използва стара версия на протокола</string>
<string name="protocol_version_newer">Това устройство използва по-нова версия на протокола</string>
<string name="general_settings">Общи настройки</string>
<string name="device_name">Име на устройството</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Невалидно име на устройство</string>
</resources>

View File

@@ -11,7 +11,6 @@
<string name="pref_plugin_ping_desc">Šalji i primaj ping-ove</string>
<string name="pref_plugin_notifications">Sinhronizovano obavještenje</string>
<string name="pref_plugin_notifications_desc">Pristupite vašim notifikacijama sa drugog uređaja</string>
<string name="plugin_not_available">Ovo svojstvo nije dostupno i vašoj Android verziji</string>
<string name="device_list_empty">Nema uređaja</string>
<string name="ok">OK</string>
<string name="cancel">Prekini</string>
@@ -45,23 +44,17 @@
<string name="category_remembered_devices">Zapamćeni uređaji</string>
<string name="device_menu_plugins">Postavke dodatka</string>
<string name="device_menu_unpair">Razdvoji</string>
<string name="device_not_reachable">Upareni uređaj nije dostupan</string>
<string name="unknown_device">Nepoznat uređaj</string>
<string name="error_not_reachable">Uređaj nije dostupan</string>
<string name="error_already_requested">Uparivanje već zatraženo</string>
<string name="error_already_paired">Uređaj već uparen</string>
<string name="error_could_not_send_package">Nije moguće poslati paket</string>
<string name="error_timed_out">Isteklo</string>
<string name="error_canceled_by_user">Prekinuo korisnik</string>
<string name="error_canceled_by_other_peer">Prekinuo drugi korisnik</string>
<string name="error_invalid_key">Primljen pogrešan ključ</string>
<string name="pair_requested">Uparivanje zatraženo</string>
<string name="pairing_request_from">Uparivanje zatraženo od %1s</string>
<string name="received_url_title">Primljena veza od %1s</string>
<string name="received_url_text">Kucni za otvaranje \'%1s\'</string>
<string name="received_file_text">Kucni za otvaranje \'%1s\'</string>
<string name="tap_to_answer">Kucni za odgovor</string>
<string name="reconnect">Ponovo uspostavi vezu</string>
<string name="right_click">Pošalji Desni Klik</string>
<string name="middle_click">Pošalji Srednji Klik</string>
<string name="show_keyboard">Pokaži Tastaturu</string>
@@ -69,15 +62,12 @@
<string name="request_pairing">Zatraži uparivanje</string>
<string name="pairing_accept">Prihvati</string>
<string name="pairing_reject">Odbij</string>
<string name="device">Uređaj</string>
<string name="pair_device">Upari uređaj</string>
<string name="mpris_play">Reprodukuj</string>
<string name="mpris_previous">Prethodni</string>
<string name="mpris_rew">Premotaj</string>
<string name="mpris_ff">Ubrzano</string>
<string name="mpris_next">Sljedeći</string>
<string name="mpris_volume">Glasnoća</string>
<string name="mpris_settings">Postavke multimedije</string>
<string name="mpris_time_settings_title">Dugmad za naprijed/premotavanje</string>
<string-array name="mpris_time_entries">
<item>10 sekundi</item>
@@ -86,13 +76,8 @@
<item>1 minuta</item>
<item>2 minute</item>
</string-array>
<string name="protocol_version_older">Ovaj uređaj koristi staru verziju protokola</string>
<string name="protocol_version_newer">Ovaj uređaj koristi noviju verziju protokola</string>
<string name="general_settings">Opšte postavke</string>
<string name="plugin_settings">Postavke</string>
<string name="plugin_settings_with_name">%s Postavke</string>
<string name="device_name">Naziv uređaja</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Pogrešnan naziv uređaja</string>
<string name="shareplugin_text_saved">Primljeni tekst, spašen u ormarić</string>
<string name="custom_devices_settings">Lista vlastitih uređaja</string>
@@ -101,12 +86,9 @@
<string name="share_notification_preference_summary">Vibriraj i reprodukuj zvuk kad se prima datoteka</string>
<string name="title_activity_notification_filter">Filter napomena</string>
<string name="filter_apps_info">Notifikacije će biti sinhronizovane s izabranim aplikacijama.</string>
<string name="sftp_internal_storage">Unutrašnji smještaj</string>
<string name="sftp_sdcard_num">SD kartica %d</string>
<string name="sftp_sdcard">SD kartica</string>
<string name="sftp_readonly">(samo za čitanje)</string>
<string name="sftp_camera">Slike sa kamere</string>
<string name="add_host">Dodaj host/IP</string>
<string name="no_players_connected">Nema nađenih igrača</string>
<string name="mpris_player_on_device">%1$s na %2$s</string>
</resources>

View File

@@ -31,7 +31,6 @@
<string name="pref_plugin_receive_notifications_desc">Rep notificacions des d\'altres dispositius i mostrar-los a l\'Android</string>
<string name="pref_plugin_sharereceiver">Comparteix i rep</string>
<string name="pref_plugin_sharereceiver_desc">Comparteix els fitxers i els URL entre els dispositius</string>
<string name="plugin_not_available">Aquesta característica no està disponible en la vostra versió d\'Android</string>
<string name="device_list_empty">No hi ha cap dispositiu</string>
<string name="ok">D\'acord</string>
<string name="cancel">Cancel·la</string>
@@ -77,25 +76,20 @@
<string name="category_remembered_devices">Dispositius recordats</string>
<string name="device_menu_plugins">Arranjament del connector</string>
<string name="device_menu_unpair">Desparella</string>
<string name="device_not_reachable">No s\'ha pogut accedir al dispositiu parell</string>
<string name="pair_new_device">Aparella amb un dispositiu nou</string>
<string name="unknown_device">Dispositiu desconegut</string>
<string name="error_not_reachable">No es pot accedir al dispositiu</string>
<string name="error_already_requested">Ja s\'ha demanat aparellar</string>
<string name="error_already_paired">El dispositiu ja està aparellat</string>
<string name="error_could_not_send_package">No s\'ha pogut enviar el paquet</string>
<string name="error_timed_out">Ha excedit el temps</string>
<string name="error_canceled_by_user">Cancel·lat per l\'usuari</string>
<string name="error_canceled_by_other_peer">Cancel·lat per l\'altre parell</string>
<string name="error_invalid_key">S\'ha rebut una clau no vàlida</string>
<string name="encryption_info_title">Informació de l\'encriptatge</string>
<string name="encryption_info_msg_no_ssl">L\'altre dispositiu no usa una versió recent del KDE Connect, s\'utilitzarà el mètode d\'encriptatge antic.</string>
<string name="my_device_fingerprint">L\'empremta digital SHA1 del certificat del vostre dispositiu és:</string>
<string name="remote_device_fingerprint">L\'empremta digital SHA1 del certificat del dispositiu remot és:</string>
<string name="pair_requested">S\'ha demanat aparellar</string>
<string name="pairing_request_from">S\'ha demanat aparellar des de %1s</string>
<string name="received_url_title">S\'ha rebut un vincle des de %1s</string>
<string name="received_url_text">Puntegeu per obrir «%1s»</string>
<plurals name="incoming_file_title">
<item quantity="one">S\'està rebent %1$d fitxer des de %2$s</item>
<item quantity="other">S\'estan rebent %1$d fitxers des de %2$s</item>
@@ -131,7 +125,6 @@
<string name="received_file_text">Puntegeu per obrir «%1s»</string>
<string name="cannot_create_file">No s\'ha pogut crear el fitxer %s</string>
<string name="tap_to_answer">Puntegeu per a respondre</string>
<string name="reconnect">Reconnecta</string>
<string name="right_click">Envia un clic del botó dret</string>
<string name="middle_click">Envia un clic del botó del mig</string>
<string name="show_keyboard">Mostra el teclat</string>
@@ -139,8 +132,6 @@
<string name="request_pairing">Demana aparellar</string>
<string name="pairing_accept">Accepta</string>
<string name="pairing_reject">Rebutja</string>
<string name="device">Dispositiu</string>
<string name="pair_device">Dispositiu parell</string>
<string name="settings">Arranjament</string>
<string name="mpris_play">Reprodueix</string>
<string name="mpris_pause">Pausa</string>
@@ -149,7 +140,6 @@
<string name="mpris_ff">Avanç ràpid</string>
<string name="mpris_next">Següent</string>
<string name="mpris_volume">Volum</string>
<string name="mpris_settings">Arranjament multimèdia</string>
<string name="mpris_time_settings_title">Botons per avançar o rebobinar</string>
<string name="mpris_time_settings_summary">Ajusta el temps per avançar o rebobinar quan es toca</string>
<string-array name="mpris_time_entries">
@@ -162,20 +152,12 @@
<string name="mpris_notification_settings_title">Mostra les notificacions dels reproductors</string>
<string name="mpris_notification_settings_summary">Permet controlar els reproductors multimèdia sense obrir el KDE Connect</string>
<string name="share_to">Comparteix amb...</string>
<string name="protocol_version_older">Aquest dispositiu usa una versió antiga del protocol</string>
<string name="protocol_version_newer">Aquest dispositiu usa una versió nova del protocol</string>
<string name="general_settings">Arranjament general</string>
<string name="plugin_settings">Arranjament</string>
<string name="plugin_settings_with_name">Ajustaments del %s</string>
<string name="device_name">Nom del dispositiu</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">El nom del dispositiu no és vàlid</string>
<string name="shareplugin_text_saved">S\'ha rebut text i s\'ha desat al porta-retalls</string>
<string name="custom_devices_settings">Llista personalitzada de dispositius</string>
<string name="pair_device_action">Aparella amb un dispositiu nou</string>
<string name="unpair_device_action">Desparella %s</string>
<string name="custom_device_list">Afegeix dispositius per la IP</string>
<string name="delete_custom_device">Suprimeixo %s?</string>
<string name="custom_device_deleted">S\'ha suprimit un dispositiu personalitzat</string>
<string name="custom_device_list_help">Si el dispositiu no es detecta automàticament, podeu afegir la seva adreça IP o el nom de la màquina fent clic al botó flotant d\'acció</string>
<string name="custom_device_fab_hint">Afegeix un dispositiu</string>
@@ -190,7 +172,6 @@
<string name="share_received_file">Comparteix «%s»</string>
<string name="title_activity_notification_filter">Filtre per a les notificacions</string>
<string name="filter_apps_info">Les notificacions se sincronitzaran per a les aplicacions seleccionades.</string>
<string name="sftp_internal_storage">Emmagatzematge intern</string>
<string name="sftp_sdcard_num">Targeta SD %d</string>
<string name="sftp_sdcard">Targeta SD</string>
<string name="sftp_readonly">(només de lectura)</string>
@@ -215,23 +196,18 @@
<string name="sftp_no_sdcard_detected">No s\'ha detectat cap targeta SD</string>
<string name="sftp_no_storage_locations_configured">No s\'ha configurat cap ubicació d\'emmagatzematge</string>
<string name="sftp_saf_permission_explanation">Per accedir remotament als fitxer cal configurar les ubicacions d\'emmagatzematge</string>
<string name="add_host">Afegeix una màquina/IP</string>
<string name="add_host_hint">Nom de la màquina o IP</string>
<string name="no_players_connected">No s\'ha trobat cap reproductor</string>
<string name="mpris_player_on_device">%1$s sobre el %2$s</string>
<string name="send_files">Envia els fitxers</string>
<string name="pairing_title">Dispositius del KDE Connect</string>
<string name="pairing_description">Els altres dispositius que executin el KDE Connect a la mateixa xarxa han d\'aparèixer aquí.</string>
<string name="device_paired">Dispositiu aparellat</string>
<string name="device_rename_title">Reanomena el dispositiu</string>
<string name="device_rename_confirm">Reanomena</string>
<string name="refresh">Refresca</string>
<string name="unreachable_description">Aquest dispositiu aparellat no és accessible. Assegureu-vos que està connectat a la mateixa xarxa.</string>
<string name="on_data_message">Sembla que esteu amb una connexió de dades mòbils. El KDE Connect només funciona amb xarxes locals.</string>
<string name="no_wifi">No esteu connectat a una xarxa Wi-Fi, per tant, no podreu veure cap dispositiu. Feu clic aquí per activar la Wi-Fi.</string>
<string name="no_file_browser">No hi ha instal·lat cap explorador de fitxers.</string>
<string name="pref_plugin_telepathy">Envia un SMS</string>
<string name="pref_plugin_telepathy_desc">Envia missatges de text des de l\'escriptori</string>
<string name="plugin_not_supported">Aquest connector no és admès pel dispositiu</string>
<string name="findmyphone_title">Troba el meu telèfon</string>
<string name="findmyphone_title_tablet">Troba la meva tauleta</string>
<string name="findmyphone_title_tv">Troba la meva TV</string>
@@ -239,7 +215,6 @@
<string name="findmyphone_found">L\'he trobat</string>
<string name="open">Obre</string>
<string name="close">Tanca</string>
<string name="no_permissions_storage">Us caldrà concedir permís per accedir a l\'emmagatzematge</string>
<string name="plugins_need_permission">Alguns connectors necessiten permisos per a funcionar (puntegeu per a més informació):</string>
<string name="permission_explanation">Aquest connector necessita permisos per a funcionar</string>
<string name="optional_permission_explanation">Us caldrà concedir permisos extres per accedir a totes les característiques</string>
@@ -263,8 +238,7 @@
<string name="addcommand_explanation2">Podeu afegir ordres noves a l\'Arranjament del sistema del KDE Connect</string>
<string name="add_command_description">Podeu afegir ordres per a l\'escriptori</string>
<string name="pref_plugin_mprisreceiver">Control del reproductor multimèdia</string>
<string name="pref_plugin_mprisreceiver_desc">Controla els reproductors multimèdia dels telèfons des d\'un altre dispositiu</string>
<string name="dark_theme">Tema fosc</string>
<string name="pref_plugin_mprisreceiver_desc">Controla els reproductors multimèdia del telèfon des d\'un altre dispositiu</string>
<string name="notification_channel_default">Altres notificacions</string>
<string name="notification_channel_persistent">Indicador de persistent</string>
<string name="notification_channel_media_control">Control multimèdia</string>
@@ -294,11 +268,12 @@
<string name="extra_options">Opcions extres</string>
<string name="privacy_options">Opcions de privadesa</string>
<string name="set_privacy_options">Establiu les opcions de privadesa</string>
<string name="new_notification">Notificació nova</string>
<string name="block_contents">Bloca el contingut de les notificacions</string>
<string name="block_images">Bloca les imatges a les notificacions</string>
<string name="notification_channel_receivenotification">Notificacions des d\'altres dispositius</string>
<string name="take_picture">Llança la càmera</string>
<string name="plugin_photo_desc">Llança l\'aplicació de la càmera per facilitar la presa i la transferència de fotografies</string>
<string name="no_app_for_opening">No s\'ha trobat cap aplicació adequada per obrir aquest fitxer</string>
<string name="remote_keyboard_service">Teclat remot del KDE Connect</string>
<string name="presenter_pointer">Apuntador</string>
</resources>

View File

@@ -13,6 +13,7 @@
<string name="pref_plugin_clipboard_desc">Sdílet obsah schránky</string>
<string name="pref_plugin_mousepad">Vzdálený vstup</string>
<string name="pref_plugin_mousepad_desc">Používejte svůj telefon nebo tablet jako touchpad a klávesnici</string>
<string name="pref_plugin_presenter">Ovladač promítání</string>
<string name="pref_plugin_presenter_desc">Použijte své zařízení pro přepínání snímků prezentace</string>
<string name="pref_plugin_remotekeyboard">Přijímat stisky kláves se vzdálených zařízení</string>
<string name="pref_plugin_remotekeyboard_desc">Přijímat události stisku kláves ze vzdálených zařízení</string>
@@ -26,17 +27,17 @@
<string name="pref_plugin_ping_desc">Posílat a přijímat ping</string>
<string name="pref_plugin_notifications">Synchronizace upozornění</string>
<string name="pref_plugin_notifications_desc">Zpřístupněte si upozornění z jiných zařízení</string>
<string name="pref_plugin_receive_notifications">Přijímat oznáme</string>
<string name="pref_plugin_receive_notifications_desc">Přijímat oznámení z jiného zařízení a zobrazovat je v Androidu</string>
<string name="pref_plugin_receive_notifications">Přijímat upozorně</string>
<string name="pref_plugin_receive_notifications_desc">Přijímat upozornění z jiného zařízení a zobrazovat je v Androidu</string>
<string name="pref_plugin_sharereceiver">Sdílet a přijmout</string>
<string name="pref_plugin_sharereceiver_desc">Sdílet soubory a odkazy mezi zařízeními</string>
<string name="plugin_not_available">Tato vlastnost není pro vaši verzi Androidu platná</string>
<string name="device_list_empty">Žádná zařízení</string>
<string name="ok">OK</string>
<string name="cancel">Zrušit</string>
<string name="open_settings">Otevřít nastavení</string>
<string name="no_permissions">Pro zpřístupnění upozornění potřebujete oprávnění</string>
<string name="no_permission_mprisreceiver">Abyste byli schopni ovládat vaše přehrávače médií, musíte udělit přístup k oznámením</string>
<string name="no_permission_mprisreceiver">Abyste byli schopni ovládat vaše přehrávače médií, musíte udělit přístup k upozorněním</string>
<string name="no_permissions_remotekeyboard">Pro zachytávání stisků kláves je potřeba aktivovat vzdálenou klávesnici KDE Connect</string>
<string name="send_ping">Poslat ping</string>
<string name="open_mpris_controls">Ovládání multimédií</string>
<string name="remotekeyboard_editing_only_title">Ovládat vzdálené klávesy při editaci</string>
@@ -75,25 +76,20 @@
<string name="category_remembered_devices">Zapamatovaná zařízení</string>
<string name="device_menu_plugins">Nastavení modulů</string>
<string name="device_menu_unpair">Zrušit párování</string>
<string name="device_not_reachable">Spárované zařízení je nedostupné</string>
<string name="pair_new_device">Spárovat nové zařízení</string>
<string name="unknown_device">Neznámé zařízení</string>
<string name="error_not_reachable">Zařízení je nedostupné</string>
<string name="error_already_requested">Párování již bylo vyžádáno</string>
<string name="error_already_paired">Zařízení je již spárováno</string>
<string name="error_could_not_send_package">Balíček nelze poslat</string>
<string name="error_timed_out">Čas vypršel</string>
<string name="error_canceled_by_user">Přerušeno uživatelem</string>
<string name="error_canceled_by_other_peer">Přerušeno druhým uživatelem</string>
<string name="error_invalid_key">Byl přijat neplatný klíč</string>
<string name="encryption_info_title">Informace o šifrování</string>
<string name="encryption_info_msg_no_ssl">Druhé zařízení nepoužívá poslední verzi KDE connect. Bude použita stará metoda šifrování.</string>
<string name="my_device_fingerprint">Otisk SHA1 certifikátu vašeho zařízení je:</string>
<string name="remote_device_fingerprint">Otisk SHA1 certifikátu vzdáleného zařízení je:</string>
<string name="pair_requested">Bylo vyžádáno párování</string>
<string name="pairing_request_from">Požadavek o párování z %1s</string>
<string name="received_url_title">Přijat odkaz od %1s</string>
<string name="received_url_text">Ťukněte pro otevření \'%1s\'</string>
<plurals name="incoming_file_title">
<item quantity="one">Přijímám %1$d soubor z %2$s</item>
<item quantity="few">Přijímám %1$d soubory z %2$s</item>
@@ -106,6 +102,18 @@
<item quantity="many">(Soubor %2$d of %3$d) : %1$s</item>
<item quantity="other"/>
</plurals>
<plurals name="outgoing_file_title">
<item quantity="one">Odesílám %1$d soubor do %2$s</item>
<item quantity="few">Odesílám %1$d soubory do %2$s</item>
<item quantity="many">Odesílám %1$d souborů do %2$s</item>
<item quantity="other"/>
</plurals>
<plurals name="outgoing_files_text">
<item quantity="one">Soubor: %1$s</item>
<item quantity="few">(Soubor %2$d z %3$d) : %1$s</item>
<item quantity="many">(Soubor %2$d z %3$d) : %1$s</item>
<item quantity="other"/>
</plurals>
<plurals name="received_files_title">
<item quantity="one">Přijat soubor z %1$s</item>
<item quantity="few">Přijaty %2$d soubory z %1$s</item>
@@ -118,10 +126,21 @@
<item quantity="many">Selhalo přijímání %2$d ze %3$d souborů z %1$s</item>
<item quantity="other"/>
</plurals>
<plurals name="sent_files_title">
<item quantity="one">Soubor byl odeslán do %1$s</item>
<item quantity="few">" %2$d soubory byly odeslány do %1$s"</item>
<item quantity="many">" %2$d souborů bylo odesláno do %1$s"</item>
<item quantity="other"/>
</plurals>
<plurals name="send_files_fail_title">
<item quantity="one">Odesílání souboru na %1$s selhalo</item>
<item quantity="few">Odesílání %2$d souborů z %3$d na %1$s selhalo</item>
<item quantity="many">Odesílání %2$d souborů z %3$d na %1$s selhalo</item>
<item quantity="other"/>
</plurals>
<string name="received_file_text">Ťukněte pro otevření \'%1s\'</string>
<string name="cannot_create_file">Nelze vytvořit soubor %s</string>
<string name="tap_to_answer">Ťukněte pro odpovězení</string>
<string name="reconnect">Znovu připojit</string>
<string name="right_click">Poslat kliknutí pravým tlačítkem</string>
<string name="middle_click">Poslat kliknutí prostředním tlačítkem</string>
<string name="show_keyboard">Zobrazit klávesnici</string>
@@ -129,8 +148,6 @@
<string name="request_pairing">Vyžádat párování</string>
<string name="pairing_accept">Přijmout</string>
<string name="pairing_reject">Odmítnout</string>
<string name="device">Zařízení</string>
<string name="pair_device">Spárovat zařízení</string>
<string name="settings">Nastavení</string>
<string name="mpris_play">Přehrát</string>
<string name="mpris_pause">Pozastavit</string>
@@ -139,7 +156,6 @@
<string name="mpris_ff">Rychle vpřed</string>
<string name="mpris_next">Následující</string>
<string name="mpris_volume">Hlasitost</string>
<string name="mpris_settings">Nastavení multimédií</string>
<string name="mpris_time_settings_title">Tlačítka vpřed/přetočit</string>
<string name="mpris_time_settings_summary">Upravit čas pro rychlý posun/přetočení při stisku</string>
<string-array name="mpris_time_entries">
@@ -152,20 +168,16 @@
<string name="mpris_notification_settings_title">Obrazit upozornění pro ovládání médií</string>
<string name="mpris_notification_settings_summary">Umožnit ovládání přehrávače médií bez otevření KDE Connect</string>
<string name="share_to">Sdílet s...</string>
<string name="protocol_version_older">Toto zařízení používá starou verzi protokolu</string>
<string name="protocol_version_newer">Toto zařízení používá novější verzi protokolu</string>
<string name="general_settings">Obecná nastavení</string>
<string name="plugin_settings">Nastavení</string>
<string name="plugin_settings_with_name">Nastavení %s</string>
<string name="device_name">Název zařízení</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Neplatný název zařízení</string>
<string name="shareplugin_text_saved">Přijatý text byl uložen do schránky</string>
<string name="custom_devices_settings">Seznam vlastních zařízení</string>
<string name="pair_device_action">Spárovat nové zařízení</string>
<string name="unpair_device_action">Zrušit párování %s</string>
<string name="custom_device_list">Přidat zařízení podle IP</string>
<string name="delete_custom_device">Smazat %s?</string>
<string name="custom_device_deleted">Vlastní zařízení bylo smazáno</string>
<string name="custom_device_list_help">Pokud vaše zařízení není automaticky detekováno, můžete přidat jeho adresu IP nebo hostname kliknutím na tlačítko pro plovoucí činnosti</string>
<string name="custom_device_fab_hint">Přidat zařízení</string>
<string name="undo">Zpět</string>
<string name="share_notification_preference">Hlasitá upozornění</string>
<string name="share_notification_preference_summary">Vibrovat a přehrát melodii při přijímání souboru</string>
<string name="share_destination_customize">Přizpůsobte si cílový adresář</string>
@@ -176,28 +188,42 @@
<string name="share_received_file">Sdílet \"%s\"</string>
<string name="title_activity_notification_filter">Filtr upozornění</string>
<string name="filter_apps_info">Upozorňování mezi vybranými aplikacemi bude synchronizováno.</string>
<string name="sftp_internal_storage">Interní úložiště</string>
<string name="sftp_sdcard_num">SD karta %d</string>
<string name="sftp_sdcard">SD karta</string>
<string name="sftp_readonly">(pouze ke čtení)</string>
<string name="sftp_camera">Obrázky z fotoaparátu</string>
<string name="add_host">Přidat stroj/IP</string>
<string name="add_host_hint">Název hostitele nebo IP</string>
<string name="add_device_dialog_title">Přidat zařízení</string>
<string name="add_device_hint">Název hostitele nebo IP adresa</string>
<string name="sftp_preference_detected_sdcards">Nalezené karty SD</string>
<string name="sftp_preference_edit_sdcard_title">Upravit kartu SD</string>
<string name="sftp_preference_configured_storage_locations">Nastavená umístění úložiště</string>
<string name="sftp_preference_add_storage_location_title">Přidejte umístění úložiště</string>
<string name="sftp_preference_edit_storage_location">Upravit umístění úložiště</string>
<string name="sftp_preference_add_camera_shortcut">Přidat zkratku na složku fotoaparátu</string>
<string name="sftp_preference_add_camera_shortcut_summary_on">Přidat zkratku na složku fotoaparátu</string>
<string name="sftp_preference_add_camera_shortcut_summary_off">Nepřidávat zkratku na složku fotoaparátu</string>
<string name="sftp_storage_preference_storage_location">Umístění úložiště</string>
<string name="sftp_storage_preference_storage_location_already_configured">´Operace již byla zrušena</string>
<string name="sftp_storage_preference_click_to_select">klikněte pro výběr</string>
<string name="sftp_storage_preference_display_name">Název obrazovky</string>
<string name="sftp_storage_preference_display_name_already_used">Tento název obrazovky je již použit</string>
<string name="sftp_storage_preference_display_name_cannot_be_empty">Název obrazovky nesmí být prázdný</string>
<string name="sftp_action_mode_menu_delete">Smazat</string>
<string name="sftp_no_sdcard_detected">Nebyla zjištěna žádná karta SD</string>
<string name="sftp_no_storage_locations_configured">Nebyla nastavena umístění úložiště.</string>
<string name="sftp_saf_permission_explanation">Pro vzdálený přístup k souborům musíte nastavit umístění úložišť</string>
<string name="no_players_connected">Přehrávač nenalezen</string>
<string name="mpris_player_on_device">%1$s na %2$s</string>
<string name="send_files">Odeslat soubory</string>
<string name="pairing_title">Zařízení KDE Connect</string>
<string name="pairing_description">Zde by se měla zobrazit další zařízení, na kterých běží KDE Connect ve stejné síti.</string>
<string name="device_paired">Zařízení je spárováno</string>
<string name="device_rename_title">Přejmenovat zařízení</string>
<string name="device_rename_confirm">Přejmenovat</string>
<string name="refresh">Obnovit</string>
<string name="unreachable_description">Toto spárované zařízení je nedosažitelné. Ujistěte se, že běží ve stejné síti.</string>
<string name="on_data_message">Vypadá to, že jste na mobilním internetovém připojení. KDE Connect funguje pouze na lokální síti.</string>
<string name="no_wifi">Nejste připojeni k síti WiFi, takže nemůžete vidět žádná zařízení. Pro zapnutí WiFi klikněte zde.</string>
<string name="no_file_browser">Není nainstalován žádný prohlížeč souborů.</string>
<string name="pref_plugin_telepathy">Poslat SMS</string>
<string name="pref_plugin_telepathy_desc">Posílejte zprávy ze své pracovní plochy</string>
<string name="plugin_not_supported">Tento modul zařízení nepodporuje</string>
<string name="findmyphone_title">Najít můj telefon</string>
<string name="findmyphone_title_tablet">Najít můj tablet</string>
<string name="findmyphone_title_tv">Najít mou TV</string>
@@ -205,13 +231,13 @@
<string name="findmyphone_found">Nalezeno</string>
<string name="open">Otevřít</string>
<string name="close">Zavřít</string>
<string name="no_permissions_storage">Je potřeba povolit přístup k úložišti</string>
<string name="plugins_need_permission">Některé moduly potřebují pro práci povolení (ťukněte pro více informací):</string>
<string name="permission_explanation">Tento modul potřebuje pro práci povolení</string>
<string name="optional_permission_explanation">Pro zpřístupnění všech funkcí potřebujete další oprávnění</string>
<string name="plugins_need_optional_permission">Některé moduly mají vypnuté vlastnosti, kvůli nedostatečným oprávněním (ťukněte pro více informací):</string>
<string name="share_optional_permission_explanation">Pro sdílení souborů mezi telefonem a počítačem potřebujete udělit oprávnění k úložišti telefonu</string>
<string name="telepathy_permission_explanation">Pro čtení a psaní SMS z počítače musíte udělit oprávnění k SMS</string>
<string name="telephony_permission_explanation">Pro zobrazení telefonátů v počítači musíte udělit oprávnění k záznamům telefonování a stavu telefonu</string>
<string name="telephony_optional_permission_explanation">Pro zobrazení jména kontaktu u telefonního čísla je potřeba udělit oprávnění ke kontaktům v telefonu</string>
<string name="contacts_permission_explanation">Pro sdílení knihy kontaktů s pracovním prostředím, musíte udělit přístup ke kontaktům</string>
<string name="select_ringtone">Vybrat vyzváněcí tón</string>
@@ -222,14 +248,14 @@
<string name="settings_icon_description">Ikona nastavení</string>
<string name="presenter_fullscreen">Celá obrazovka</string>
<string name="presenter_exit">Ukončit prezentaci</string>
<string name="presenter_lock_tip">Můžete zamknout zařízení a použít klávesy pro ovládání hlasitosti pro posun na předchozí/další snímek</string>
<string name="add_command">Přidat příkaz</string>
<string name="addcommand_explanation">Nejsou registrovány žádné příkazy</string>
<string name="addcommand_explanation2">Nové příkazy můžete přidat v nastavení systému KDE Connect</string>
<string name="add_command_description">V pracovním prostředí můžete přidat příkazy</string>
<string name="pref_plugin_mprisreceiver">Ovládání přehrávače médií</string>
<string name="pref_plugin_mprisreceiver_desc">Ovládejte přehrávače médií na vašem telefonu z jiného zařízení</string>
<string name="dark_theme">Tmavý motiv</string>
<string name="notification_channel_default">Ostatní oznámení</string>
<string name="notification_channel_default">Ostatní upozornění</string>
<string name="notification_channel_persistent">Stálý ukazatel</string>
<string name="notification_channel_media_control">Ovládání médií</string>
<string name="notification_channel_filetransfer">Přenos souboru</string>
@@ -258,8 +284,12 @@
<string name="extra_options">Další možnosti</string>
<string name="privacy_options">Možnosti soukromí</string>
<string name="set_privacy_options">Nastavte své možnosti soukromí</string>
<string name="new_notification">Nové oznáme</string>
<string name="block_contents">Blokovat obsah oznámení</string>
<string name="block_contents">Blokovat obsah upozorně</string>
<string name="block_images">Blokovat obrázky z upozornění</string>
<string name="notification_channel_receivenotification">Oznamování z ostatních zařízení</string>
<string name="notification_channel_receivenotification">Upozornění z ostatních zařízení</string>
<string name="take_picture">Spustit fotoaparát</string>
<string name="plugin_photo_desc">Spusťte aplikaci fotoaparátu pro snadné zachytávání s přenos obrázků</string>
<string name="no_app_for_opening">Pro otevření tohoto souboru nebyla nalezena vhodná aplikace</string>
<string name="remote_keyboard_service">Vzdálená klávesnice pro KDE Connect</string>
<string name="presenter_pointer">Ukazatel</string>
</resources>

View File

@@ -23,7 +23,6 @@
<string name="pref_plugin_receive_notifications_desc">Modtag bekendtgørelser fra den anden enhed og vis dem på Android</string>
<string name="pref_plugin_sharereceiver">Del og modtag</string>
<string name="pref_plugin_sharereceiver_desc">Del filer og URL\'er mellem enheder</string>
<string name="plugin_not_available">Denne funktion er ikke tilgængelig i din Android-version</string>
<string name="device_list_empty">Ingen enheder</string>
<string name="ok">OK</string>
<string name="cancel">Annullér</string>
@@ -65,28 +64,22 @@
<string name="category_remembered_devices">Huskede enheder</string>
<string name="device_menu_plugins">Plugin-indstillinger</string>
<string name="device_menu_unpair">Fjern parring</string>
<string name="device_not_reachable">Den parrede enhed kan ikke tilgås</string>
<string name="pair_new_device">Par med ny enhed</string>
<string name="unknown_device">Ukendt enhed</string>
<string name="error_not_reachable">Enheden kan ikke nås</string>
<string name="error_already_requested">Allerede anmodet om parring</string>
<string name="error_already_paired">Enhed allerede parret</string>
<string name="error_could_not_send_package">Kunne ikke sende pakke</string>
<string name="error_timed_out">Tidsudløb</string>
<string name="error_canceled_by_user">Annulleret af brugeren</string>
<string name="error_canceled_by_other_peer">Annulleret af modpart</string>
<string name="error_invalid_key">Ugyldige nøgle modtaget</string>
<string name="encryption_info_title">Krypteringsinfo</string>
<string name="encryption_info_msg_no_ssl">Den anden enhed bruger ikke en nylig version af KDE Connect, og bruger dermed den forældede krypteringsmetode.</string>
<string name="my_device_fingerprint">SHA1-fingeraftrykket for dit enhedscertifikat er:</string>
<string name="remote_device_fingerprint">SHA1-fingeraftrykket for det eksterne enhedscertifikat er:</string>
<string name="pair_requested">Anmodet om parring</string>
<string name="pairing_request_from">Parringsanmodning fra %1s</string>
<string name="received_url_title">Modtog link fra %1s</string>
<string name="received_url_text">Tap for at åbne \"%1s\"</string>
<string name="received_file_text">Tap for at åbne \"%1s\"</string>
<string name="tap_to_answer">Tap for at svare</string>
<string name="reconnect">Forbind igen</string>
<string name="right_click">Send højreklik</string>
<string name="middle_click">Send midterklik</string>
<string name="show_keyboard">Vis tastatur</string>
@@ -94,15 +87,12 @@
<string name="request_pairing">Anmod om parring</string>
<string name="pairing_accept">Acceptér</string>
<string name="pairing_reject">Afvis</string>
<string name="device">Enhed</string>
<string name="pair_device">Par med enhed</string>
<string name="mpris_play">Afspil</string>
<string name="mpris_previous">Forrige</string>
<string name="mpris_rew">Spol tilbage</string>
<string name="mpris_ff">Spol frem</string>
<string name="mpris_next">Næste</string>
<string name="mpris_volume">Lydstyrke</string>
<string name="mpris_settings">Multimedieindstillinger</string>
<string name="mpris_time_settings_title">Spol frem/tilbage-knapper</string>
<string-array name="mpris_time_entries">
<item>10 sekunder</item>
@@ -111,18 +101,11 @@
<item>1 minut</item>
<item>2 minutter</item>
</string-array>
<string name="protocol_version_older">Denne enhed bruger en gammel protokolversion</string>
<string name="protocol_version_newer">Denne enhed bruger en nyere protokolversion</string>
<string name="general_settings">Generelle indstillinger</string>
<string name="plugin_settings">Indstillinger</string>
<string name="plugin_settings_with_name">Indstilling af %s</string>
<string name="device_name">Enhedsnavn</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Ugyldigt enhedsnavn</string>
<string name="shareplugin_text_saved">Modtog tekst, gemt til udklipsholder</string>
<string name="custom_devices_settings">Brugertilpasset liste over enheder</string>
<string name="pair_device_action">Par med en ny enhed</string>
<string name="unpair_device_action">Fjern parring med %s</string>
<string name="custom_device_list">Tilføj enheder via IP</string>
<string name="share_notification_preference">Støjende bekendtgørelser</string>
<string name="share_notification_preference_summary">Vibrér og afspil en lyd når en fil modtages</string>
@@ -132,34 +115,27 @@
<string name="share_destination_folder_preference">Destinationsmappe</string>
<string name="title_activity_notification_filter">Bekendtgørelsesfilter</string>
<string name="filter_apps_info">Bekendtgørelser vil blive synkroniseret for de valgte apps.</string>
<string name="sftp_internal_storage">Intern lagring</string>
<string name="sftp_sdcard_num">SD-kort %d</string>
<string name="sftp_sdcard">SD-kort</string>
<string name="sftp_readonly">(skrivebeskyttet)</string>
<string name="sftp_camera">Kamerabilleder</string>
<string name="add_host">Tilføj vært/IP</string>
<string name="no_players_connected">Ingen afspillere fundet</string>
<string name="mpris_player_on_device">%1$s på %2$s</string>
<string name="send_files">Send filer</string>
<string name="pairing_title">KDE Connect-enheder</string>
<string name="pairing_description">Andre enheder som kører KDE Connect i samme netværk som dig, bør dukke op her.</string>
<string name="device_paired">Enhed parret</string>
<string name="device_rename_title">Omdøb enhed</string>
<string name="device_rename_confirm">Omdøb</string>
<string name="refresh">Genopfrisk</string>
<string name="unreachable_description">Denne parrede enhed kan ikke nås. Sørg for at den er forbundet til samme netværk som dig.</string>
<string name="on_data_message">Det lader til at du er på en mobil dataforbindelse. KDE Connect virker kun på lokale netværk.</string>
<string name="no_file_browser">Der er ingen filhåndtering installeret.</string>
<string name="pref_plugin_telepathy">Send SMS</string>
<string name="pref_plugin_telepathy_desc">Send SMS-beskeder fra din desktop</string>
<string name="plugin_not_supported">Dette plugin er ikke understøttet af enheden</string>
<string name="findmyphone_title">Find min telefon</string>
<string name="findmyphone_title_tablet">Find min tablet</string>
<string name="findmyphone_description">Ringer til denne enhed, så du kan finde den.</string>
<string name="findmyphone_found">Fundet</string>
<string name="open">Åbn</string>
<string name="close">Luk</string>
<string name="no_permissions_storage">Du skal give tilladelse for at tilgå datalagret</string>
<string name="plugins_need_permission">Nogle plugins kræver tilladelser for at virke (tap for mere info):</string>
<string name="permission_explanation">Dette plugin kræver tilladelser for at virke</string>
<string name="optional_permission_explanation">Du skal give ekstra tilladelser for at aktivere alle funktioner</string>

View File

@@ -1,40 +1,51 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="kde_connect">KDE-Connect</string>
<string name="foreground_notification_no_devices">Keine Verbindung zu einem Gerät</string>
<string name="foreground_notification_no_devices">Keine bestehenden Verbindungen</string>
<string name="foreground_notification_devices">Verbunden mit %s</string>
<string name="pref_plugin_telephony">Telefon-Benachrichtigung</string>
<string name="pref_plugin_telephony_desc">Benachrichtigungen über eingehende Anrufe senden</string>
<string name="pref_plugin_telephony">Telefon-Integration</string>
<string name="pref_plugin_telephony_desc">Verbundene Geräte bei eingehenden Anrufen benachrichtigen</string>
<string name="pref_plugin_battery">Akkubericht</string>
<string name="pref_plugin_battery_desc">Akkustatus periodisch berichten</string>
<string name="pref_plugin_sftp">Dateisystem zeigen</string>
<string name="pref_plugin_sftp_desc">Erlaubt das Browsen des Dateisystems auf diesem Gerät aus der Ferne</string>
<string name="pref_plugin_battery_desc">Den Akkustand periodisch berichten</string>
<string name="pref_plugin_sftp">Dateisystem-Freigabe</string>
<string name="pref_plugin_sftp_desc">Das Durchsuchen des Dateisystems auf verbundenen Geräten erlauben</string>
<string name="pref_plugin_clipboard">Abgleich der Zwischenablage</string>
<string name="pref_plugin_clipboard_desc">Inhalt der Zwischenablage freigeben</string>
<string name="pref_plugin_clipboard_desc">Den Inhalt der Zwischenablage mit verbundenen Geräten teilen</string>
<string name="pref_plugin_mousepad">Ferneingabe</string>
<string name="pref_plugin_mousepad_desc">Verwendet Ihr Handy als Tablet, Touchpad und Tastatur</string>
<string name="pref_plugin_mpris">Multimedia-Bedienung</string>
<string name="pref_plugin_mpris_desc">Eine Fernbedienung für Ihre Medienwiedergabe</string>
<string name="pref_plugin_mousepad_desc">Das Gerät als Touchpad und/oder Tastatur verwenden</string>
<string name="pref_plugin_presenter">Fernbedienung für Präsentationen</string>
<string name="pref_plugin_presenter_desc">Das Gerät zum Wechseln der Folien einer Präsentation verwenden</string>
<string name="pref_plugin_remotekeyboard">Empfänger für Tastatureingaben</string>
<string name="pref_plugin_remotekeyboard_desc">Tastatureingaben entfernter Geräte empfangen</string>
<string name="pref_plugin_mpris">Medienkontrolle</string>
<string name="pref_plugin_mpris_desc">Die Medienwiedergabe verbundener Geräte steuern</string>
<string name="pref_plugin_runcommand">Befehl ausführen</string>
<string name="pref_plugin_runcommand_desc">Von Ihrem Telefon oder Tablett Befehle auf anderen Geräten ausführen</string>
<string name="pref_plugin_runcommand_desc">Konsolen-Befehle auf verbundenen Geräten ausführen</string>
<string name="pref_plugin_contacts">Kontakte-Abgleich</string>
<string name="pref_plugin_contacts_desc">Die lokal gespeicherten Kontakte mit verbundenen Geräten teilen</string>
<string name="pref_plugin_ping">Ping</string>
<string name="pref_plugin_ping_desc">Senden und Empfangen von Pings</string>
<string name="pref_plugin_ping_desc">Pings senden und empfangen</string>
<string name="pref_plugin_notifications">Benachrichtigungs-Abgleich</string>
<string name="pref_plugin_notifications_desc">Zugriff auf Ihre Benachrichtigungen von anderen Geräten</string>
<string name="pref_plugin_notifications_desc">Benachrichtigungen an verbundene Geräte weiterleiten und dort anzeigen</string>
<string name="pref_plugin_receive_notifications">Benachrichtigungen empfangen</string>
<string name="pref_plugin_receive_notifications_desc">Empfangen und Anzeigen von Benachrichtigungen des anderen Geräts</string>
<string name="pref_plugin_receive_notifications_desc">Benachrichtigungen verbundener Geräte empfangen und anzeigen</string>
<string name="pref_plugin_sharereceiver">Veröffentlichen und Empfangen</string>
<string name="pref_plugin_sharereceiver_desc">Dateien und Adressen (URLs) zwischen Geräten teilen</string>
<string name="plugin_not_available">Diese Funktion ist in Ihrer Android-Version nicht verfügbar</string>
<string name="pref_plugin_sharereceiver_desc">Dateien und Adressen (URLs) mit verbundenen Geräten teilen</string>
<string name="device_list_empty">Keine Geräte</string>
<string name="ok">OK</string>
<string name="cancel">Abbrechen</string>
<string name="open_settings">Einstellungen öffnen</string>
<string name="no_permissions">Sie müssen die Erlaubnis zum Zugriff auf Benachrichtigungen erteilen</string>
<string name="no_permissions">Sie müssen die Erlaubnis zum Zugriff auf die Benachrichtigungen erteilen</string>
<string name="no_permission_mprisreceiver">Um die Medienwiedergabe zu steuern, muss der Zugriff auf die Benachrichtigungen gewährt werden</string>
<string name="no_permissions_remotekeyboard">Um Tastatureingaben empfangen zu können, muss die KDE-Connect-Tastatur aktiviert werden</string>
<string name="send_ping">Ping senden</string>
<string name="open_mpris_controls">Multimedia-Bedienung</string>
<string name="open_mpris_controls">Medienkontrolle</string>
<string name="remotekeyboard_editing_only_title">Tastatureingaben nur empfangen wenn ein Textfeld ausgewählt ist</string>
<string name="remotekeyboard_not_connected">Es besteht keine Verbindung zu einer entfernten Tastatur. Bitte richten Sie diese zunächst auf ihrem verbundenen Gerät ein</string>
<string name="remotekeyboard_connected">Verbindung zu entfernter Tastatur ist aktiv</string>
<string name="remotekeyboard_multiple_connections">Es besteht mehr als eine Verbindungen zu einer entfernten Tastatur. Um Ihre Konfiguration anzupassen, wählen Sie bitte ein Gerät aus</string>
<string name="open_mousepad">Ferneingabe</string>
<string name="mousepad_info">Bewegen Sie Ihren Finger über den Bildschirm um den Mauszeiger zu bewegen. Tippen Sie auf den Bildschirm, um einen Klick zu simulieren und benutzen Sie entsprechend zwei/drei Finger für einen Rechts-/Mittelklick. Verwenden Sie zwei Finger, um zu Scrollen und einen langen Druck um Objekte zu verschieben</string>
<string name="mousepad_double_tap_settings_title">Aktionsausführung bei Berührung mit zwei Fingern einstellen</string>
<string name="mousepad_triple_tap_settings_title">Aktionsausführung bei Berührung mit drei Fingern einstellen</string>
<string name="mousepad_sensitivity_settings_title">Empfindlichkeit des Touchpads einstellen</string>
@@ -54,48 +65,73 @@
</string-array>
<string-array name="mousepad_acceleration_profile_entries">
<item>Keine Beschleunigung</item>
<item>Weakest</item>
<item>Weaker</item>
<item>Mittel</item>
<item>Stronger</item>
<item>Strongest</item>
<item>Schwächste</item>
<item>Schwach</item>
<item>Normal</item>
<item>Stark</item>
<item>Stärkste</item>
</string-array>
<string name="category_connected_devices">Verbundene Geräte</string>
<string name="category_not_paired_devices">Verfügbare Geräte</string>
<string name="category_remembered_devices">Gemerkte Geräte</string>
<string name="device_menu_plugins">Modul-Einstellungen</string>
<string name="device_menu_unpair">Verbindung trennen</string>
<string name="device_not_reachable">Das angegeben Gerät ist nicht erreichbar</string>
<string name="pair_new_device">Ein neues Gerät verbinden</string>
<string name="unknown_device">Unbekanntes Gerät</string>
<string name="error_not_reachable">Das Gerät ist nicht erreichbar</string>
<string name="error_already_requested">Die Verbindung wurde bereits angefragt</string>
<string name="error_already_paired">Das Gerät ist bereits verbunden</string>
<string name="error_could_not_send_package">Das Paket kann nicht gesendet werden</string>
<string name="error_timed_out">Zeitüberschreitung</string>
<string name="error_canceled_by_user">Abbruch durch Benutzer</string>
<string name="error_canceled_by_other_peer">Abbruch durch Gegenstelle</string>
<string name="error_invalid_key">Ungültiger Schlüssel empfangen</string>
<string name="encryption_info_title">Verschlüsselungsinformationen</string>
<string name="encryption_info_msg_no_ssl">Das andere Gerät verwendet eine ältere Version von KDE-Connect, eine veraltete Verschlüsselungsmethode wird verwendet.</string>
<string name="encryption_info_msg_no_ssl">Das andere Gerät verwendet eine ältere Version von KDE-Connect. Daher muss eine veraltete Verschlüsselungsmethode verwendet werden</string>
<string name="my_device_fingerprint">Der SHA1-Fingerabdruck Ihres Gerätezertifikats lautet:</string>
<string name="remote_device_fingerprint">Der SHA1-Fingerabdruck des Gerätezertifikats der Gegenstelle lautet:</string>
<string name="pair_requested">Verbindung angefordert</string>
<string name="pairing_request_from">Verbindungsanfrage von %1s</string>
<string name="received_url_title">Verknüpfung von %1s erhalten</string>
<string name="received_url_text">Tippen um „%1s“ zu öffnen</string>
<string name="pairing_request_from">Kopplungsanfrage von %1s</string>
<plurals name="incoming_file_title">
<item quantity="one">%1$d Datei von %2$s wird empfangen</item>
<item quantity="other">%1$d Dateien von %2$s werden empfangen</item>
</plurals>
<plurals name="incoming_files_text">
<item quantity="one">Datei: %1s</item>
<item quantity="other">(Datei %2$d von %3$d) : %1$s</item>
</plurals>
<plurals name="outgoing_file_title">
<item quantity="one">%1$d Datei wird an %2$s gesendet</item>
<item quantity="other">%1$d Dateien werden an %2$s gesendet</item>
</plurals>
<plurals name="outgoing_files_text">
<item quantity="one">Datei: %1$s</item>
<item quantity="other">(Datei %2$d von %3$d) : %1$s</item>
</plurals>
<plurals name="received_files_title">
<item quantity="one">Datei von %1$s empfangen</item>
<item quantity="other">%2$d Dateien von %1$s empfangen</item>
</plurals>
<plurals name="received_files_fail_title">
<item quantity="one">Die Datei von %1$s wurde nicht empfangen</item>
<item quantity="other">%2$d der %3$d Dateien von %1$s wurden nicht empfangen</item>
</plurals>
<plurals name="sent_files_title">
<item quantity="one">Datei wurde an %1$s gesendet</item>
<item quantity="other">%2$d Dateien wurden an %1$s gesendet</item>
</plurals>
<plurals name="send_files_fail_title">
<item quantity="one">Die Datei kann nicht an %1$s gesendet werden</item>
<item quantity="other">%2$d der %3$d Dateien können nicht an %1$s gesendet werden</item>
</plurals>
<string name="received_file_text">Tippen um „%1s“ zu öffnen</string>
<string name="tap_to_answer">Tippen zum Antworten</string>
<string name="reconnect">Erneut verbinden</string>
<string name="cannot_create_file">Die Datei %s kann nicht erstellt werden</string>
<string name="tap_to_answer">Zum Antworten tippen</string>
<string name="right_click">Rechtsklick senden</string>
<string name="middle_click">Mittelklick senden</string>
<string name="show_keyboard">Tastatur anzeigen</string>
<string name="device_not_paired">Das Gerät ist nicht verbunden</string>
<string name="request_pairing">Verbindung anfordern</string>
<string name="request_pairing">Kopplung anfordern</string>
<string name="pairing_accept">Annehmen</string>
<string name="pairing_reject">Ablehnen</string>
<string name="device">Gerät</string>
<string name="pair_device">Gerät verbinden</string>
<string name="settings">Einstellungen</string>
<string name="mpris_play">Wiedergabe</string>
<string name="mpris_pause">Anhalten</string>
@@ -104,7 +140,6 @@
<string name="mpris_ff">Vorlauf</string>
<string name="mpris_next">Weiter</string>
<string name="mpris_volume">Lautstärke</string>
<string name="mpris_settings">Multimedia-Einstellungen</string>
<string name="mpris_time_settings_title">Knöpfe Vorwärts/Rückwärts</string>
<string name="mpris_time_settings_summary">Sprungweite für Vorlauf/Rücklauf anpassen</string>
<string-array name="mpris_time_entries">
@@ -114,92 +149,131 @@
<item>1 Minute</item>
<item>2 Minuten</item>
</string-array>
<string name="mpris_notification_settings_title">Benachrichtigung zur Medienkontrolle anzeigen</string>
<string name="mpris_notification_settings_summary">Die Steuerung der Medienwiedergabe auch dann erlauben wenn KDE-Connect nicht geöffnet ist</string>
<string name="share_to">Freigeben für ...</string>
<string name="protocol_version_older">Dieses Gerät verwendet ein alte Protokollversion</string>
<string name="protocol_version_newer">Dieses Gerät verwendet ein neuere Protokollversion</string>
<string name="general_settings">Allgemeine Einstellungen</string>
<string name="plugin_settings">Einstellungen</string>
<string name="protocol_version_newer">Dieses Gerät verwendet eine neuere Protokollversion</string>
<string name="plugin_settings_with_name">%s-Einstellungen</string>
<string name="device_name">Gerätename</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Ungültiger Gerätename</string>
<string name="shareplugin_text_saved">Text empfangen und in der Zwischenablage gespeichert</string>
<string name="shareplugin_text_saved">Text empfangen und in die Zwischenablage kopiert</string>
<string name="custom_devices_settings">Benutzerdefinierte Geräteliste</string>
<string name="pair_device_action">Ein neues Gerät verbinden</string>
<string name="unpair_device_action">Verbindung %s trennen</string>
<string name="custom_device_list">Geräte nach IP-Adresse hinzufügen</string>
<string name="delete_custom_device">%s löschen?</string>
<string name="custom_device_deleted">Benutzerdefinierte Geräte gelöscht</string>
<string name="custom_device_list_help">Falls Ihr Gerät nicht automatisch erkannt wird, können Sie es über die IP-Adresse oder den Gerätenamen hinzufügen. Klicken Sie dafür auf den schwebenden Aktionsknopf</string>
<string name="custom_device_fab_hint">Ein Gerät hinzufügen</string>
<string name="undo">Rückgängig machen</string>
<string name="share_notification_preference">Ausführliche Benachrichtigungen</string>
<string name="share_notification_preference_summary">Beim Empfang einer Datei vibrieren und einen Sound abspielen</string>
<string name="share_destination_customize">Zielverzeichnis anpassen</string>
<string name="share_destination_customize_summary_disabled">Empfangene Dateien werden in Downloads gespeichert</string>
<string name="share_destination_customize_summary_disabled">Empfangene Dateien werden im Ordner Downloads gespeichert</string>
<string name="share_destination_customize_summary_enabled">Dateien werden im folgenden Verzeichnis gespeichert</string>
<string name="share_destination_folder_preference">Zielverzeichnis</string>
<string name="share">Freigeben</string>
<string name="share_received_file">%s freigeben</string>
<string name="title_activity_notification_filter">Benachrichtigungs-Filter</string>
<string name="filter_apps_info">Benachrichtigungen werden zwischen den ausgewählten Anwendungen abgeglichen.</string>
<string name="sftp_internal_storage">Interner Speicher</string>
<string name="filter_apps_info">Benachrichtigungen werden zwischen den ausgewählten Anwendungen abgeglichen</string>
<string name="sftp_sdcard_num">SD-Karte %d</string>
<string name="sftp_sdcard">SD-Karte</string>
<string name="sftp_readonly">(Nur lesen)</string>
<string name="sftp_camera">Kamerabilder</string>
<string name="add_host">Rechner/IP-Adresse hinzufügen</string>
<string name="add_device_dialog_title">Gerät hinzufügen</string>
<string name="add_device_hint">Rechnername oder IP-Adresse</string>
<string name="sftp_preference_detected_sdcards">SD-Karte erkannt</string>
<string name="sftp_preference_edit_sdcard_title">SD-Karte bearbeiten</string>
<string name="sftp_preference_configured_storage_locations">Vorhandene Speicherort</string>
<string name="sftp_preference_add_storage_location_title">Speicherort hinzufügen</string>
<string name="sftp_preference_edit_storage_location">Speicherort bearbeiten</string>
<string name="sftp_preference_add_camera_shortcut">Verknüpfung zum Kamera-Ordner erstellen</string>
<string name="sftp_preference_add_camera_shortcut_summary_on">Verknüpfung zum Kamera-Ordner erstellen</string>
<string name="sftp_preference_add_camera_shortcut_summary_off">Keine Verknüpfung zum Kamera-Ordner erstellen</string>
<string name="sftp_storage_preference_storage_location">Speicherort</string>
<string name="sftp_storage_preference_storage_location_already_configured">Dieser Ort wurde bereits konfiguriert</string>
<string name="sftp_storage_preference_click_to_select">Zum Auswählen klicken</string>
<string name="sftp_storage_preference_display_name">Anzeigename</string>
<string name="sftp_storage_preference_display_name_already_used">Dieser Anzeigename wird bereits verwendet</string>
<string name="sftp_storage_preference_display_name_cannot_be_empty">Der Anzeigename darf nicht leer sein</string>
<string name="sftp_action_mode_menu_delete">Löschen</string>
<string name="sftp_no_sdcard_detected">Keine SD-Karte erkannt</string>
<string name="sftp_no_storage_locations_configured">Keine Speicherorte ausgewählt</string>
<string name="sftp_saf_permission_explanation">Um von außerhalb auf Ihre Dateien zugreifen zu können, muss mindestens ein Speicherort vorhanden sein</string>
<string name="no_players_connected">Keine Medienspieler gefunden</string>
<string name="mpris_player_on_device">%1$s auf %2$s</string>
<string name="send_files">Dateien senden</string>
<string name="pairing_title">KDE-Connect-Geräte</string>
<string name="pairing_description">Andere Geräte im selben Netzwerk, auf denen KDE-Connect läuft, sollten hier angezeigt werden.</string>
<string name="device_paired">Gerät verbunden</string>
<string name="pairing_description">Andere Geräte im selben Netzwerk, auf denen KDE-Connect läuft, sollten hier angezeigt werden</string>
<string name="device_rename_title">Geräte umbenennen</string>
<string name="device_rename_confirm">Umbenennen</string>
<string name="refresh">Aktualisieren</string>
<string name="unreachable_description">Das verbundene Gerät ist nicht erreichbar. Stellen Sie sicher, dass es mit demselben Netzwerk verbunden ist.</string>
<string name="on_data_message">Sie benutzen anscheinend eine mobile Datenverbindung. KDE-Connect funktioniert nur in lokalen Netzwerken.</string>
<string name="no_file_browser">Es sind keine Dateiverwaltungsprogramme installiert.</string>
<string name="unreachable_description">Das verbundene Gerät ist nicht erreichbar. Stellen Sie sicher, dass es mit demselben Netzwerk verbunden ist</string>
<string name="no_wifi">Sie sind nicht mit einem WLAN-Netzwerk verbunden, weshalb womöglich keine anderen Geräte angezeigt werden können. Klicken Sie hier um Ihr WLAN zu aktivieren</string>
<string name="no_file_browser">Es sind keine Dateiverwaltungsprogramme installiert</string>
<string name="pref_plugin_telepathy">SMS senden</string>
<string name="pref_plugin_telepathy_desc">Text-Nachrichten von Ihrer Arbeitsfläche senden</string>
<string name="plugin_not_supported">Dieses Modul wird durch das Gerät nicht unterstützt</string>
<string name="pref_plugin_telepathy_desc">SMS von Ihrer Arbeitsfläche senden</string>
<string name="findmyphone_title">Mein Telefon suchen</string>
<string name="findmyphone_title_tablet">Mein Tablet suchen</string>
<string name="findmyphone_title_tv">Mein TV suchen</string>
<string name="findmyphone_description">Ruft dieses Gerät an, damit sie es finden können</string>
<string name="findmyphone_title_tv">Meinen Fernseher suchen</string>
<string name="findmyphone_description">Ruft dieses Gerät an, damit Sie es finden können</string>
<string name="findmyphone_found">Gefunden</string>
<string name="open">Öffnen</string>
<string name="close">Schließen</string>
<string name="no_permissions_storage">Sie müssen die Berechtigung zum Zugriff auf Speicher erteilen</string>
<string name="plugins_need_permission">Einige Module benötigen zusätzliche Berechtigungen, tippen Sie für weitere Details:</string>
<string name="permission_explanation">Dieses Modul benötigt zusätzliche Berechtigungen</string>
<string name="optional_permission_explanation">Es müssen weitere Berechtigungen erteilt werden, um alle Funktionen nutzen zu können</string>
<string name="plugins_need_optional_permission">Einige Module haben eingeschränkte Funktionen wegen fehlender Berechtigungen, tippen Sie für weitere Informationen:</string>
<string name="share_optional_permission_explanation">m Dateien zwischen Rechner und Telefon auszutauschen, muss der Zugriff auf den Telefonspeicher gewährt werden</string>
<string name="share_optional_permission_explanation">Um Dateien zwischen Rechner und Telefon auszutauschen, muss der Zugriff auf den Telefonspeicher gewährt werden</string>
<string name="telepathy_permission_explanation">Um SMS vom Rechner aus zu lesen und zu versenden, muss der Zugriff auf die SMS-Funktion gewährt werden</string>
<string name="telephony_optional_permission_explanation">Um einen Namen anstelle einer Telefonnummer zu sehen, muss der Zugriff auf das Adressbuch gewährt werden</string>
<string name="telephony_permission_explanation">Um eingehende Anrufe auf der Arbeitsfläche anzuzeigen, muss der Zugriff auf die Anrufliste und den Telefonstatus gewährt werden</string>
<string name="telephony_optional_permission_explanation">Um einen Namen anstelle der Telefonnummer anzuzeigen, muss der Zugriff auf das Adressbuch gewährt werden</string>
<string name="contacts_permission_explanation">Um Ihre Kontakte mit der Arbeitsfläche zu teilen, muss der Zugriff auf die Kontakte gewährt werden</string>
<string name="select_ringtone">Einen Klingelton auswählen</string>
<string name="telephony_pref_blocked_title">Unterdrückte Nummern</string>
<string name="telephony_pref_blocked_dialog_desc">keine Anrufe und SMS von diesen Telefonnummern anzeigen. Geben Sie eine Nummer pro Zeile ein</string>
<string name="telephony_pref_blocked_dialog_desc">Keine Anrufe und SMS von diesen Telefonnummern anzeigen (Bitte geben Sie eine Nummer pro Zeile ein)</string>
<string name="mpris_coverart_description">Cover des aktuellen Mediums</string>
<string name="device_icon_description">Gerätesymbol</string>
<string name="settings_icon_description">Einstellungssymbol</string>
<string name="presenter_fullscreen">Vollbild</string>
<string name="presenter_exit">Präsentation beenden</string>
<string name="presenter_lock_tip">Sie können Ihr Gerät sperren und mit Hilfe der Lauter-/Leiser-Taste zur vorherigen/nächsten Folie wechseln</string>
<string name="add_command">Einen Befehl hinzufügen</string>
<string name="addcommand_explanation">Es sind keine Befehle registriert.</string>
<string name="addcommand_explanation2">Sie können neue Befehle in den Systemeinstellungen für KDE-Connect hinzufügen.</string>
<string name="add_command_description">Sie können Befehle auf der Arbeitsfläche hinzufügen</string>
<string name="pref_plugin_mprisreceiver">Steuerung r Medienwiedergabe</string>
<string name="dark_theme">Dunkles Design</string>
<string name="addcommand_explanation">Es sind keine Befehle vorhanden</string>
<string name="addcommand_explanation2">Sie können neue Befehle in den Systemeinstellungen für KDE-Connect hinzufügen</string>
<string name="add_command_description">Sie können neue Befehle auf der Arbeitsfläche hinzufügen</string>
<string name="pref_plugin_mprisreceiver">Steuerung der Medienwiedergabe</string>
<string name="pref_plugin_mprisreceiver_desc">Ein verbundenes Gerät zum Steuern der lokalen Medienwiedergabe verwenden</string>
<string name="notification_channel_default">Andere Benachrichtigungen</string>
<string name="notification_channel_persistent">Dauerhafte Benachrichtigung</string>
<string name="notification_channel_media_control">Medienkontrolle</string>
<string name="notification_channel_filetransfer">Dateiübertragung</string>
<string name="mpris_stop">Die aktuelle Medienwiedergabe beenden</string>
<string name="copy_url_to_clipboard">Adresse in die Zwischenablage kopieren</string>
<string name="clipboard_toast">In die Zwischenablage kopiert</string>
<string name="runcommand_notreachable">Das Gerät ist nicht erreichbar</string>
<string name="runcommand_notpaired">Das Gerät ist nicht verbunden</string>
<string name="runcommand_nosuchdevice">Ein solches Gerät existiert nicht</string>
<string name="runcommand_noruncommandplugin">Dieses Gerät hat das Modul zum Ausführen von Befehlen nicht aktiviert</string>
<string name="pref_plugin_findremotedevice">Entferntes Gerät finden</string>
<string name="pref_plugin_findremotedevice_desc">Entferntes Gerät anklingeln</string>
<string name="ring">Klingeln</string>
<string name="pref_plugin_systemvolume">Systemlaustärke ändern</string>
<string name="pref_plugin_systemvolume_desc">Die Systemlautstärke verbundener Geräte ändern</string>
<string name="mute">Stummschalten</string>
<string name="all">Alle</string>
<string name="devices">Geräte</string>
<string name="settings_rename">Gerätename</string>
<string name="settings_dark_mode">Dunkles Design</string>
<string name="settings_more_settings_title">Weitere Einstellungen</string>
<string name="settings_more_settings_text">Zusätzliche Einstellungen für die verbundenen Geräte können über den Menüpunkt „Modul-Einstellungen“ abgerufen werden</string>
<string name="setting_persistent_notification">Dauerhafte Benachrichtigung anzeigen</string>
<string name="setting_persistent_notification_oreo">Dauerhafte Benachrichtigung</string>
<string name="setting_persistent_notification_description">Klicken um die Benachrichtigungseinstellungen zu aktivieren/deaktivieren</string>
<string name="extra_options">Weitere Einstellungen</string>
<string name="privacy_options">Einstellungen zur Privatsphäre</string>
<string name="set_privacy_options">Einstellungen zur Privatsphäre ändern</string>
<string name="block_contents">Inhalt von Benachrichtigungen blockieren</string>
<string name="block_images">Bilder in Benachrichtigungen blockieren</string>
<string name="notification_channel_receivenotification">Benachrichtigungen verbundener Geräte</string>
<string name="take_picture">Kamera starten</string>
<string name="plugin_photo_desc">Die Kamera starten um das Erstellen und Übertragen von Bildern zu vereinfachen</string>
<string name="no_app_for_opening">Es wurde keine passende App zum Öffnen dieser Datei gefunden</string>
<string name="remote_keyboard_service">Entfernte Tastatur für KDE-Connect</string>
<string name="presenter_pointer">Laserpointer</string>
</resources>

View File

@@ -23,7 +23,6 @@
<string name="pref_plugin_receive_notifications_desc">Λήψη ειδοποιήσεων από την άλλη συσκευή και προβολή τους στο Android</string>
<string name="pref_plugin_sharereceiver">Διαμοιρασμός και λήψη</string>
<string name="pref_plugin_sharereceiver_desc">Διαμοιρασμός αρχείων και URL μεταξύ συσκευών</string>
<string name="plugin_not_available">Αυτή η λειτουργία δεν είναι διαθέσιμη στην τρέχουσα έκδοση του Android</string>
<string name="device_list_empty">Χωρίς συσκευές</string>
<string name="ok">Εντάξει</string>
<string name="cancel">Ακύρωση</string>
@@ -65,28 +64,22 @@
<string name="category_remembered_devices">Συσκευές στη μνήμη</string>
<string name="device_menu_plugins">Ρυθμίσεις προσθέτων</string>
<string name="device_menu_unpair">Διαχωρισμός</string>
<string name="device_not_reachable">Η συζευγμένη συσκευή δεν είναι προσβάσιμη</string>
<string name="pair_new_device">Σύζευξη νέας συσκευής</string>
<string name="unknown_device">Άγνωστη συσκευή</string>
<string name="error_not_reachable">Η συσκευή δεν είναι προσβάσιμη</string>
<string name="error_already_requested">Η σύζευξη ήδη ζητήθηκε</string>
<string name="error_already_paired">Η συσκευή ήδη συζεύχθηκε</string>
<string name="error_could_not_send_package">Αδυναμία αποστολής πακέτου</string>
<string name="error_timed_out">Τέλος χρονικού ορίου</string>
<string name="error_canceled_by_user">Ακυρώθηκε από τον χρήστη</string>
<string name="error_canceled_by_other_peer">Ακυρώθηκε από άλλον χρήστη</string>
<string name="error_invalid_key">Ελήφθη μη έγκυρο κλειδί</string>
<string name="encryption_info_title">Πληροφορίες κρυπτογράφησης</string>
<string name="encryption_info_msg_no_ssl">Η άλλη συσκευή δεν χρησιμοποιεί μια πρόσφατη έκδοση του KDE Connect, θα χρησιμοποιηθεί η παλαιά μέθοδος κρυπτογράφησης.</string>
<string name="my_device_fingerprint">Το ίχνος SHA1 του πιστοποιητικού της συσκευής σας είναι:</string>
<string name="remote_device_fingerprint">Το ίχνος SHA1 του πιστοποιητικού της απομακρυσμένης συσκευής είναι:</string>
<string name="pair_requested">Ζητήθηκε σύζευξη</string>
<string name="pairing_request_from">Αίτημα σύζευξης από %1s</string>
<string name="received_url_title">Ελήφθη σύνδεσμος από %1s</string>
<string name="received_url_text">Χτυπήστε για άνοιγμα \'%1s\'</string>
<string name="received_file_text">Χτυπήστε για άνοιγμα \'%1s\'</string>
<string name="tap_to_answer">Χτυπήστε για να απαντήσετε</string>
<string name="reconnect">Επανασύνδεση</string>
<string name="right_click">Αποστολή δεξιού κλικ</string>
<string name="middle_click">Αποστολή μεσαίου κλικ</string>
<string name="show_keyboard">Εμφάνιση πληκτρολογίου</string>
@@ -94,15 +87,12 @@
<string name="request_pairing">Αίτημα σύζευξης</string>
<string name="pairing_accept">Αποδοχή</string>
<string name="pairing_reject">Απόρριψη</string>
<string name="device">Συσκευή</string>
<string name="pair_device">Σύζευξη συσκευής</string>
<string name="mpris_play">Αναπαραγωγή</string>
<string name="mpris_previous">Προηγούμενο</string>
<string name="mpris_rew">Ταχεία ώθηση όπισθεν</string>
<string name="mpris_ff">Ταχεία προώθηση</string>
<string name="mpris_next">Επόμενο</string>
<string name="mpris_volume">Τόμος</string>
<string name="mpris_settings">Ρυθμίσεις πολυμέσων</string>
<string name="mpris_time_settings_title">Κουμπιά ταχείας ώθησης</string>
<string-array name="mpris_time_entries">
<item>10 seconds</item>
@@ -111,18 +101,11 @@
<item>1 λεπτό</item>
<item>2 λεπτά</item>
</string-array>
<string name="protocol_version_older">Η συσκευή αυτή χρησιμοποιεί παλαιά έκδοση πρωτοκόλλου</string>
<string name="protocol_version_newer">Η συσκευή αυτή χρησιμοποιεί νεότερη έκδοση πρωτοκόλλου</string>
<string name="general_settings">Γενικές ρυθμίσεις</string>
<string name="plugin_settings">Ρυθμίσεις</string>
<string name="plugin_settings_with_name">%s ρυθμίσεις</string>
<string name="device_name">Όνομα συσκευής</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Μη έγκυρο όνομα συσκευής</string>
<string name="shareplugin_text_saved">Ελήφθη κείμενο, αποθηκεύτηκε στο πρόχειρο</string>
<string name="custom_devices_settings">Προσαρμοσμένη λίστα συσκευών</string>
<string name="pair_device_action">Σύζευξη νέας συσκευής</string>
<string name="unpair_device_action">Διαχωρισμός %s</string>
<string name="custom_device_list">Προσθήκη συσκευών ανά IP</string>
<string name="share_notification_preference">Θορυβώδεις ειδοποιήσεις</string>
<string name="share_notification_preference_summary">Δόνηση και ηχητική ένδειξη με τη λήψη αρχείου</string>
@@ -132,34 +115,27 @@
<string name="share_destination_folder_preference">Κατάλογος προορισμού</string>
<string name="title_activity_notification_filter">Φιλτράρισμα ειδοποιήσεων</string>
<string name="filter_apps_info">Οι ειδοποιήσεις θα συγχρονίζονται για επιλεγμένες εφαρμογές.</string>
<string name="sftp_internal_storage">Εσωτερικός αποθηκευτικός χώρος</string>
<string name="sftp_sdcard_num">SD card %d</string>
<string name="sftp_sdcard">SD card</string>
<string name="sftp_readonly">(ανάγνωση μόνο)</string>
<string name="sftp_camera">Φωτογραφίες</string>
<string name="add_host">Προσθήκη υπολογιστή/IP</string>
<string name="no_players_connected">Δεν βρέθηκαν συσκευές αναπαραγωγής</string>
<string name="mpris_player_on_device">%1$s σε %2$s</string>
<string name="send_files">Αποστολή αρχείων</string>
<string name="pairing_title">Συσκευές KDE Connect</string>
<string name="pairing_description">Άλλες συσκευές με KDE Connect στο ίδιο δίκτυο θα εμφανίζονται εδώ.</string>
<string name="device_paired">Η συσκευή συζεύχθηκε</string>
<string name="device_rename_title">Μετονομασία συσκευής</string>
<string name="device_rename_confirm">Μετονομασία</string>
<string name="refresh">Ανανέωση</string>
<string name="unreachable_description">Αυτή η συζευγμένη συσκευή δεν είναι προσβάσιμη. Βεβαιωθείτε ότι είναι συνδεδεμένη στο δίκτυό σας.</string>
<string name="on_data_message">Φαίνεται ότι είστε σε σύνδεση δεδομένων από κινητό. Το KDE Connect λειτουργεί μόνο σε τοπικά δίκτυα.</string>
<string name="no_file_browser">Δεν υπάρχουν εγκατεστημένοι περιηγητές αρχείων.</string>
<string name="pref_plugin_telepathy">Αποστολή SMS</string>
<string name="pref_plugin_telepathy_desc">Αποστολή μηνυμάτων κειμένου από τον υπολογιστή σας</string>
<string name="plugin_not_supported">Αυτό το πρόσθετο δεν υποστηρίζεται από τη συσκευή</string>
<string name="findmyphone_title">Αναζήτηση του κινητού μου</string>
<string name="findmyphone_title_tablet">Εύρεση της ταμπλέτας μου</string>
<string name="findmyphone_description">Καλεί αυτή τη συσκευή ώστε να την εντοπίσετε</string>
<string name="findmyphone_found">Βρέθηκε</string>
<string name="open">Άνοιγμα</string>
<string name="close">Κλείσιμο</string>
<string name="no_permissions_storage">Απαιτείται παραχώρηση δικαιωμάτων για την πρόσβαση στον αποθηκευτικό χώρο</string>
<string name="plugins_need_permission">Κάποια πρόσθετα απαιτούν δικαιώματα για να λειτουργήσουν (χτυπήστε για περισσότερες πληροφορίες):</string>
<string name="permission_explanation">Αυτό το πρόσθετο χρειάζεται δικαιώματα για να λειτουργήσει</string>
<string name="optional_permission_explanation">Απαιτείται παραχώρηση επιπλέον δικαιωμάτων για την ενεργοποίηση όλων των λειτουργιών</string>

View File

@@ -31,7 +31,6 @@
<string name="pref_plugin_receive_notifications_desc">Receive notifications from the other device and display them on Android</string>
<string name="pref_plugin_sharereceiver">Share and receive</string>
<string name="pref_plugin_sharereceiver_desc">Share files and URLs between devices</string>
<string name="plugin_not_available">This feature is not available in your Android version</string>
<string name="device_list_empty">No devices</string>
<string name="ok">OK</string>
<string name="cancel">Cancel</string>
@@ -77,25 +76,20 @@
<string name="category_remembered_devices">Remembered devices</string>
<string name="device_menu_plugins">Plugin settings</string>
<string name="device_menu_unpair">Unpair</string>
<string name="device_not_reachable">Paired device not reachable</string>
<string name="pair_new_device">Pair new device</string>
<string name="unknown_device">Unknown device</string>
<string name="error_not_reachable">Device not reachable</string>
<string name="error_already_requested">Pairing already requested</string>
<string name="error_already_paired">Device already paired</string>
<string name="error_could_not_send_package">Could not send package</string>
<string name="error_timed_out">Timed out</string>
<string name="error_canceled_by_user">Cancelled by user</string>
<string name="error_canceled_by_other_peer">Cancelled by other peer</string>
<string name="error_invalid_key">Invalid key received</string>
<string name="encryption_info_title">Encryption Info</string>
<string name="encryption_info_msg_no_ssl">The other device doesn\'t use a recent version of KDE Connect, using the legacy encryption method.</string>
<string name="my_device_fingerprint">SHA1 fingerprint of your device certificate is:</string>
<string name="remote_device_fingerprint">SHA1 fingerprint of remote device certificate is:</string>
<string name="pair_requested">Pair requested</string>
<string name="pairing_request_from">Pairing request from %1s</string>
<string name="received_url_title">Received link from %1s</string>
<string name="received_url_text">Tap to open \'%1s\'</string>
<plurals name="incoming_file_title">
<item quantity="one">Receiving %1$d file from %2$s</item>
<item quantity="other">Receiving %1$d files from %2$s</item>
@@ -131,7 +125,6 @@
<string name="received_file_text">Tap to open \'%1s\'</string>
<string name="cannot_create_file">Cannot create file %s</string>
<string name="tap_to_answer">Tap to answer</string>
<string name="reconnect">Reconnect</string>
<string name="right_click">Send Right Click</string>
<string name="middle_click">Send Middle Click</string>
<string name="show_keyboard">Show Keyboard</string>
@@ -139,8 +132,6 @@
<string name="request_pairing">Request pairing</string>
<string name="pairing_accept">Accept</string>
<string name="pairing_reject">Reject</string>
<string name="device">Device</string>
<string name="pair_device">Pair device</string>
<string name="settings">Settings</string>
<string name="mpris_play">Play</string>
<string name="mpris_pause">Pause</string>
@@ -149,7 +140,6 @@
<string name="mpris_ff">Fast-forward</string>
<string name="mpris_next">Next</string>
<string name="mpris_volume">Volume</string>
<string name="mpris_settings">Multimedia Settings</string>
<string name="mpris_time_settings_title">Forward/rewind buttons</string>
<string name="mpris_time_settings_summary">Adjust the time to fast forward/rewind when pressed</string>
<string-array name="mpris_time_entries">
@@ -162,20 +152,12 @@
<string name="mpris_notification_settings_title">Show media control notification</string>
<string name="mpris_notification_settings_summary">Allow controlling your media players without opening KDE Connect</string>
<string name="share_to">Share To…</string>
<string name="protocol_version_older">This device uses an old protocol version</string>
<string name="protocol_version_newer">This device uses a newer protocol version</string>
<string name="general_settings">General Settings</string>
<string name="plugin_settings">Settings</string>
<string name="plugin_settings_with_name">%s settings</string>
<string name="device_name">Device name</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Invalid device name</string>
<string name="shareplugin_text_saved">Received text, saved to clipboard</string>
<string name="custom_devices_settings">Custom device list</string>
<string name="pair_device_action">Pair a new device</string>
<string name="unpair_device_action">Unpair %s</string>
<string name="custom_device_list">Add devices by IP</string>
<string name="delete_custom_device">Delete %s?</string>
<string name="custom_device_deleted">Custom device deleted</string>
<string name="custom_device_list_help">If your device is not automatically detected you can add its IP address or hostname by clicking on the Floating Action Button</string>
<string name="custom_device_fab_hint">Add a device</string>
@@ -190,7 +172,6 @@
<string name="share_received_file">Share \"%s\"</string>
<string name="title_activity_notification_filter">Notification filter</string>
<string name="filter_apps_info">Notifications will be synchronised for the selected apps.</string>
<string name="sftp_internal_storage">Internal storage</string>
<string name="sftp_sdcard_num">SD card %d</string>
<string name="sftp_sdcard">SD card</string>
<string name="sftp_readonly">(read only)</string>
@@ -215,23 +196,18 @@
<string name="sftp_no_sdcard_detected">No SD card detected</string>
<string name="sftp_no_storage_locations_configured">No storage locations configured</string>
<string name="sftp_saf_permission_explanation">To access files remotely you have to configure storage locations</string>
<string name="add_host">Add host/IP</string>
<string name="add_host_hint">Hostname or IP</string>
<string name="no_players_connected">No players found</string>
<string name="mpris_player_on_device">%1$s on %2$s</string>
<string name="send_files">Send files</string>
<string name="pairing_title">KDE Connect Devices</string>
<string name="pairing_description">Other devices running KDE Connect in your same network should appear here.</string>
<string name="device_paired">Device paired</string>
<string name="device_rename_title">Rename device</string>
<string name="device_rename_confirm">Rename</string>
<string name="refresh">Refresh</string>
<string name="unreachable_description">This paired device is not reachable. Make sure it is connected to your same network.</string>
<string name="on_data_message">It looks like you are on a mobile data connection. KDE Connect only works on local networks.</string>
<string name="no_wifi">You\'re not connected to a Wi-Fi network, so you may not be able to see any devices. Click here to enable Wi-Fi.</string>
<string name="no_file_browser">There are no file browsers installed.</string>
<string name="pref_plugin_telepathy">Send SMS</string>
<string name="pref_plugin_telepathy_desc">Send text messages from your desktop</string>
<string name="plugin_not_supported">This plugin is not supported by the device</string>
<string name="findmyphone_title">Find my phone</string>
<string name="findmyphone_title_tablet">Find my tablet</string>
<string name="findmyphone_title_tv">Find my TV</string>
@@ -239,7 +215,6 @@
<string name="findmyphone_found">Found</string>
<string name="open">Open</string>
<string name="close">Close</string>
<string name="no_permissions_storage">You need to grant permissions to access the storage</string>
<string name="plugins_need_permission">Some Plugins need permissions to work (tap for more info):</string>
<string name="permission_explanation">This plugin needs permissions to work</string>
<string name="optional_permission_explanation">You need to grant extra permissions to enable all functions</string>
@@ -263,8 +238,7 @@
<string name="addcommand_explanation2">You can add new commands in the KDE Connect System Settings</string>
<string name="add_command_description">You can add commands on the desktop</string>
<string name="pref_plugin_mprisreceiver">Media Player Control</string>
<string name="pref_plugin_mprisreceiver_desc">Control your phones media players from another device</string>
<string name="dark_theme">Dark theme</string>
<string name="pref_plugin_mprisreceiver_desc">Control your phone\'s media players from another device</string>
<string name="notification_channel_default">Other notifications</string>
<string name="notification_channel_persistent">Persistent indicator</string>
<string name="notification_channel_media_control">Media control</string>
@@ -294,11 +268,12 @@
<string name="extra_options">Extra options</string>
<string name="privacy_options">Privacy options</string>
<string name="set_privacy_options">Set your privacy options</string>
<string name="new_notification">New notification</string>
<string name="block_contents">Block contents of notifications</string>
<string name="block_images">Block images in notifications</string>
<string name="notification_channel_receivenotification">Notifications from other devices</string>
<string name="take_picture">Launch camera</string>
<string name="plugin_photo_desc">Launch the camera app to ease taking and transferring pictures</string>
<string name="no_app_for_opening">No suitable app found to open this file</string>
<string name="remote_keyboard_service">KDE Connect Remote Keyboard</string>
<string name="presenter_pointer">Pointer</string>
</resources>

View File

@@ -31,7 +31,6 @@
<string name="pref_plugin_receive_notifications_desc">Recibir notificaciones desde el otro dispositivo y mostrarlas en Android</string>
<string name="pref_plugin_sharereceiver">Compartir y recibir</string>
<string name="pref_plugin_sharereceiver_desc">Compartir archivos y URL entre dispositivos</string>
<string name="plugin_not_available">Esta funcionalidad no está disponible en su versión de Android</string>
<string name="device_list_empty">Ningún dispositivo</string>
<string name="ok">Aceptar</string>
<string name="cancel">Cancelar</string>
@@ -77,25 +76,20 @@
<string name="category_remembered_devices">Dispositivos recordados</string>
<string name="device_menu_plugins">Preferencias del complemento</string>
<string name="device_menu_unpair">Desvincular</string>
<string name="device_not_reachable">No se encuentra el dispositivo aparejado</string>
<string name="pair_new_device">Vincular nuevo dispositivo</string>
<string name="unknown_device">Dispositivo desconocido</string>
<string name="error_not_reachable">No se encuentra el dispositivo</string>
<string name="error_already_requested">Ya ha solicitado vincularse</string>
<string name="error_already_paired">Dispositivo ya vinculado</string>
<string name="error_could_not_send_package">No se puede enviar el paquete</string>
<string name="error_timed_out">Se ha agotado el tiempo</string>
<string name="error_canceled_by_user">Cancelado por el usuario</string>
<string name="error_canceled_by_other_peer">Cancelado por la otra parte</string>
<string name="error_invalid_key">Se ha recibido una clave no valida</string>
<string name="encryption_info_title">Información de cifrado</string>
<string name="encryption_info_msg_no_ssl">El otro dispositivo no dispone de una versión reciente de KDE Connect, se usará un método de cifrado antiguo.</string>
<string name="my_device_fingerprint">La huella digital SHA1 del certificado de su dispositivo es:</string>
<string name="remote_device_fingerprint">La huella digital SHA1 del certificado del dispositivo remoto es:</string>
<string name="pair_requested">Vinculación solicitada</string>
<string name="pairing_request_from">Solicitud de vinculación de %1s</string>
<string name="received_url_title">Enlace recibido desde %1s</string>
<string name="received_url_text">Pulse para abrir «%1s»</string>
<plurals name="incoming_file_title">
<item quantity="one">Recibiendo %1$d archivo desde %2$s</item>
<item quantity="other">Recibiendo %1$d archivos desde %2$s</item>
@@ -131,7 +125,6 @@
<string name="received_file_text">Pulse para abrir «%1s»</string>
<string name="cannot_create_file">No se pudo crear el archivo %s</string>
<string name="tap_to_answer">Pulse para responder</string>
<string name="reconnect">Reconectar</string>
<string name="right_click">Enviar clic derecho</string>
<string name="middle_click">Enviar clic del botón central</string>
<string name="show_keyboard">Mostrar teclado</string>
@@ -139,8 +132,6 @@
<string name="request_pairing">Solicitar vinculación</string>
<string name="pairing_accept">Aceptar</string>
<string name="pairing_reject">Rechazar</string>
<string name="device">Dispositivo</string>
<string name="pair_device">Vincular dispositivo</string>
<string name="settings">Preferencias</string>
<string name="mpris_play">Reproducir</string>
<string name="mpris_pause">Pausar</string>
@@ -149,7 +140,6 @@
<string name="mpris_ff">Avance rápido</string>
<string name="mpris_next">Siguiente</string>
<string name="mpris_volume">Volumen</string>
<string name="mpris_settings">Preferencias multimedia</string>
<string name="mpris_time_settings_title">Botones de avance/rebobinado</string>
<string name="mpris_time_settings_summary">Ajustar el tiempo a avanzar o rebobinar rápidamente al pulsar</string>
<string-array name="mpris_time_entries">
@@ -162,20 +152,12 @@
<string name="mpris_notification_settings_title">Mostrar notificación del control de medios</string>
<string name="mpris_notification_settings_summary">Permite controlar sus reproductores de medios sin abrir KDE Connect</string>
<string name="share_to">Compartir con...</string>
<string name="protocol_version_older">Este dispositivo usa una versión antigua del protocolo</string>
<string name="protocol_version_newer">Este dispositivo usa una versión más reciente del protocolo</string>
<string name="general_settings">Preferencias generales</string>
<string name="plugin_settings">Preferencias</string>
<string name="plugin_settings_with_name">Preferencias de %s</string>
<string name="device_name">Nombre de dispositivo</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Nombre de dispositivo no válido</string>
<string name="shareplugin_text_saved">Texto recibido y guardado en el portapapeles</string>
<string name="custom_devices_settings">Lista de dispositivos personalizada</string>
<string name="pair_device_action">Vincular un nuevo dispositivo</string>
<string name="unpair_device_action">Desvincular %s</string>
<string name="custom_device_list">Añadir dispositivos por IP</string>
<string name="delete_custom_device">¿Borrar %s?</string>
<string name="custom_device_deleted">Dispositivo personalizado borrado</string>
<string name="custom_device_list_help">Si su dispositivo no es detectado automáticamente puede añadir su dirección IP o nombre pulsando el botón de acción flotante</string>
<string name="custom_device_fab_hint">Añadir un dispositivo</string>
@@ -190,7 +172,6 @@
<string name="share_received_file">Compartir «%s»</string>
<string name="title_activity_notification_filter">Filtro de notificaciones</string>
<string name="filter_apps_info">Las notificaciones se sincronizarán en las aplicaciones seleccionadas.</string>
<string name="sftp_internal_storage">Almacenamiento interno</string>
<string name="sftp_sdcard_num">Tarjeta SD %d</string>
<string name="sftp_sdcard">Tarjeta SD</string>
<string name="sftp_readonly">(solo lectura)</string>
@@ -215,23 +196,18 @@
<string name="sftp_no_sdcard_detected">No se ha detectado ninguna tarjeta SD</string>
<string name="sftp_no_storage_locations_configured">No hay configurada ninguna localización de almacenamiento</string>
<string name="sftp_saf_permission_explanation">Para acceder a los archivos remotamente debe configurar las localizaciones de almacenamiento</string>
<string name="add_host">Añadir servidor/IP</string>
<string name="add_host_hint">Nombre o IP</string>
<string name="no_players_connected">Ningún reproductor encontrado</string>
<string name="mpris_player_on_device">%1$s en %2$s</string>
<string name="send_files">Enviar archivos</string>
<string name="pairing_title">Dispositivos de KDE Connect</string>
<string name="pairing_description">Cualquier otro dispositivo ejecutando KDE Connect en su misma red debería aparecer aquí.</string>
<string name="device_paired">Dispositivo vinculado</string>
<string name="device_rename_title">Renombrar dispositivo</string>
<string name="device_rename_confirm">Renombrar</string>
<string name="refresh">Actualizar</string>
<string name="unreachable_description">Este dispositivo vinculado no está disponible. Asegúrese que está conectado a su misma red.</string>
<string name="on_data_message">Parece que se encuentra en una conexión de datos móviles. KDE Connect solo funciona en redes locales.</string>
<string name="no_wifi">No está conectado a una red Wi-Fi, por lo que puede que no vea ningún dispositivo. Pulse aquí para activar el Wi-Fi.</string>
<string name="no_file_browser">No hay navegadores de archivos instalados.</string>
<string name="pref_plugin_telepathy">Enviar SMS</string>
<string name="pref_plugin_telepathy_desc">Enviar mensajes de texto desde su escritorio</string>
<string name="plugin_not_supported">Este complemento no está permitido por el dispositivo</string>
<string name="findmyphone_title">Encontrar mi teléfono</string>
<string name="findmyphone_title_tablet">Encontrar mi tableta</string>
<string name="findmyphone_title_tv">Encontrar mi TV</string>
@@ -239,7 +215,6 @@
<string name="findmyphone_found">Encontrado</string>
<string name="open">Abrir</string>
<string name="close">Cerrar</string>
<string name="no_permissions_storage">Debe otorgar permisos para acceder al almacenamiento</string>
<string name="plugins_need_permission">Algunos complementos necesitan permisos para funcionar (pulse para más información):</string>
<string name="permission_explanation">Este complemento necesita permisos para funcionar</string>
<string name="optional_permission_explanation">Debe otorgar permisos extra para activar todas las funciones</string>
@@ -263,8 +238,7 @@
<string name="addcommand_explanation2">Puede añadir nuevas órdenes en las preferencias del sistema de KDE Connect</string>
<string name="add_command_description">Puede añadir órdenes en su escritorio</string>
<string name="pref_plugin_mprisreceiver">Control del reproductor de medios</string>
<string name="pref_plugin_mprisreceiver_desc">Controle los reproductores de medios de sus teléfonos desde otro dispositivo</string>
<string name="dark_theme">Tema oscuro</string>
<string name="pref_plugin_mprisreceiver_desc">Controle los reproductores de medios de su teléfono desde otro dispositivo</string>
<string name="notification_channel_default">Otras notificaciones</string>
<string name="notification_channel_persistent">Indicador persistente</string>
<string name="notification_channel_media_control">Control multimedia</string>
@@ -294,11 +268,12 @@
<string name="extra_options">Opciones adicionales</string>
<string name="privacy_options">Opciones de privacidad</string>
<string name="set_privacy_options">Establezca sus opciones de privacidad</string>
<string name="new_notification">Nueva notificación</string>
<string name="block_contents">Bloquear el contenido de las notificaciones</string>
<string name="block_images">Bloquear las imágenes en las notificaciones</string>
<string name="notification_channel_receivenotification">Notificaciones desde otros dispositivos</string>
<string name="take_picture">Lanzar cámara</string>
<string name="plugin_photo_desc">Lanzar la aplicación de la cámara para facilitar tomar y transferir imágenes</string>
<string name="no_app_for_opening">No se encontró ninguna aplicación adecuada para abrir este archivo</string>
<string name="remote_keyboard_service">Teclado remoto de KDE Connect</string>
<string name="presenter_pointer">Puntero</string>
</resources>

View File

@@ -1,6 +1,10 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="kde_connect">KDE Connect</string>
<string name="foreground_notification_no_devices">Pole ühendatud ühegi seadmega</string>
<string name="foreground_notification_devices">Ühendatud seadmega: %s</string>
<string name="pref_plugin_telephony">Telefoni märguanded</string>
<string name="pref_plugin_telephony_desc">Sisenevate kõnede märguannete saatmine</string>
<string name="pref_plugin_battery">Aku aruanne</string>
<string name="pref_plugin_battery_desc">Perioodiline aku olekust teavitamine</string>
<string name="pref_plugin_sftp">Failisüsteemi sirvimine</string>
@@ -9,10 +13,16 @@
<string name="pref_plugin_clipboard_desc">Lõikepuhvri sisu jagamine</string>
<string name="pref_plugin_mousepad">Kaugsisestus</string>
<string name="pref_plugin_mousepad_desc">Telefoni või tahvli kasutamine puuteplaadi ja klaviatuurina</string>
<string name="pref_plugin_presenter">Kaugslaidiseanss</string>
<string name="pref_plugin_presenter_desc">Seadme kasutamine esitluse slaidide vahetamiseks</string>
<string name="pref_plugin_remotekeyboard">Kaugklahvivajutuste vastuvõtmine</string>
<string name="pref_plugin_remotekeyboard_desc">Kaugseadmete klahvivajutuste vastuvõtmine</string>
<string name="pref_plugin_mpris">Multimeedia juhtimine</string>
<string name="pref_plugin_mpris_desc">Meediamängija kaugjuhtimise võimaldamine</string>
<string name="pref_plugin_runcommand">Käsu käivitamine</string>
<string name="pref_plugin_runcommand_desc">Telefonist või tahvlist kaugkäskude käivitamine</string>
<string name="pref_plugin_contacts">Kontaktide sünkroonimine</string>
<string name="pref_plugin_contacts_desc">Võimaldab sünkroonida seadme kontaktiloendit</string>
<string name="pref_plugin_ping">Ping</string>
<string name="pref_plugin_ping_desc">Pingide saatmine ja vastuvõtmine</string>
<string name="pref_plugin_notifications">Märguannete sünkroonimine</string>
@@ -21,18 +31,25 @@
<string name="pref_plugin_receive_notifications_desc">Märguannete vastuvõtmine teisest seadmest ja nende näitamine Androidis</string>
<string name="pref_plugin_sharereceiver">Jagamine ja vastuvõtmine</string>
<string name="pref_plugin_sharereceiver_desc">Failide ja URL-ide jagamine seadmete vahel</string>
<string name="plugin_not_available">See omadus ei ole sinu Androidi versioonis veel saadaval</string>
<string name="device_list_empty">Seadmed puuduvad</string>
<string name="ok">OK</string>
<string name="cancel">Loobu</string>
<string name="open_settings">Ava seadistused</string>
<string name="no_permissions">Märguannete nägemiseks tuleb anda vastavad õigused</string>
<string name="no_permission_mprisreceiver">Meediamängija juhtimiseks tuleb lubada juurdepääs märguannetele</string>
<string name="no_permissions_remotekeyboard">Klahvivajutuste vastuvõtmiseks tuleb aktiveerida KDE Connecti kaugklaviatuur</string>
<string name="send_ping">Saada ping</string>
<string name="open_mpris_controls">Multimeedia juhtimine</string>
<string name="remotekeyboard_editing_only_title">Kaugklahvide käitlemine ainult redigeerimisel</string>
<string name="remotekeyboard_not_connected">Aktiivne kaugklaviatuuri ühendus puudub, pane see paika KDE Connectis</string>
<string name="remotekeyboard_connected">Kaugklaviatuuri ühendus on aktiivne</string>
<string name="remotekeyboard_multiple_connections">Kaugklaviatuuri ühendusi on üle ühe, palun vali seade, mida seadistada</string>
<string name="open_mousepad">Kaugsisestus</string>
<string name="mousepad_info">Hiirekursori liigutamiseks liiguta sõrme ekraanil. Koputa klõpsamiseks ja kasuta kaht või kolme sõrme parema ja keskmise nupu jaoks. Kahe sõrmega saab kerida. Pika vajutusega saab lohistada.</string>
<string name="mousepad_double_tap_settings_title">Kahe sõrmega koputamise toimingu määramine</string>
<string name="mousepad_triple_tap_settings_title">Kolme sõrmega koputamise toimingu määramine</string>
<string name="mousepad_sensitivity_settings_title">Puutepadja tundlikkuse määramine</string>
<string name="mousepad_acceleration_profile_settings_title">Osutusseadme kiirenduse määramine</string>
<string name="mousepad_scroll_direction_title">Vastupidi kerimise suund</string>
<string-array name="mousepad_tap_entries">
<item>Paremklõps</item>
@@ -47,40 +64,67 @@
<item>Kõige kiirem</item>
</string-array>
<string-array name="mousepad_acceleration_profile_entries">
<item>No Acceleration</item>
<item>Weakest</item>
<item>Weaker</item>
<item>Medium</item>
<item>Stronger</item>
<item>Strongest</item>
<item>Kiirendus puudub</item>
<item>Kõige nõrgem</item>
<item>Nõrgem</item>
<item>Keskmine</item>
<item>Tugev</item>
<item>Kõige tugevam</item>
</string-array>
<string name="category_connected_devices">Ühendatud seadmed</string>
<string name="category_not_paired_devices">Saadaolevad seadmed</string>
<string name="category_remembered_devices">Meeldejäetud seadmed</string>
<string name="device_menu_plugins">Plugina seadistused</string>
<string name="device_menu_unpair">Eemalda paardumine</string>
<string name="device_not_reachable">Paardunud seade pole saadaval</string>
<string name="pair_new_device">Paarita uus seade</string>
<string name="unknown_device">Tundmatu seade</string>
<string name="error_not_reachable">Seade pole saadaval</string>
<string name="error_already_requested">Paardumist on juba soovitud</string>
<string name="error_already_paired">Seade on juba paaritatud</string>
<string name="error_could_not_send_package">Paketi saatmine nurjus</string>
<string name="error_timed_out">Ajaületus</string>
<string name="error_canceled_by_user">Kasutaja katkestas</string>
<string name="error_canceled_by_other_peer">Teine pool katkestas</string>
<string name="error_invalid_key">Saadi vigane võti</string>
<string name="encryption_info_title">Krüptimise teave</string>
<string name="encryption_info_msg_no_ssl">Teine seade ei kasuta KDE Connecti uusimat versiooni ja tarvitab krüptimisel pärandmeetodit.</string>
<string name="my_device_fingerprint">Sinu seadme sertifikaadi SHA1 sõrmejälg on:</string>
<string name="remote_device_fingerprint">Kaugseadme sertifikaadi SHA1 sõrmejälg on:</string>
<string name="pair_requested">Paardumise soov</string>
<string name="pairing_request_from">Paardumise soov seadmest %1s</string>
<string name="received_url_title">Lingi saamine seadmest %1s</string>
<string name="received_url_text">Koputa \"%1s\" avamiseks</string>
<plurals name="incoming_file_title">
<item quantity="one">Saadi %1$d fail seadmest %2$s</item>
<item quantity="other">Saadi %1$d faili seadmest %2$s</item>
</plurals>
<plurals name="incoming_files_text">
<item quantity="one">File: %1s</item>
<item quantity="other">(Fail %2$d / %3$d) : %1$s</item>
</plurals>
<plurals name="outgoing_file_title">
<item quantity="one">Saadeti %1$d fail seadmesse %2$s</item>
<item quantity="other">Saadeti %1$d faili seadmesse %2$s</item>
</plurals>
<plurals name="outgoing_files_text">
<item quantity="one">Fail: %1$s</item>
<item quantity="other">(Fail %2$d / %3$d) : %1$s</item>
</plurals>
<plurals name="received_files_title">
<item quantity="one">Saadi fail %1$s</item>
<item quantity="other">Saadi %2$d faili seadmest %1$s</item>
</plurals>
<plurals name="received_files_fail_title">
<item quantity="one">Faili saamine seadmest %1$s nurjus</item>
<item quantity="other">%2$d faili saamine %3$d failist seadmest %1$s nurjus</item>
</plurals>
<plurals name="sent_files_title">
<item quantity="one">Fail saadeti seadmesse %1$s</item>
<item quantity="other">%2$d faili saadeti seadmesse %1$s</item>
</plurals>
<plurals name="send_files_fail_title">
<item quantity="one">Faili saatmine seadmesse %1$s nurjus</item>
<item quantity="other">%2$d faili saamine %3$d failist seadmesse %1$s nurjus</item>
</plurals>
<string name="received_file_text">Koputa \"%1s\" avamiseks</string>
<string name="cannot_create_file">Faili %s loomine nurjus</string>
<string name="tap_to_answer">Koputa vastamiseks</string>
<string name="reconnect">Ühenda uuesti</string>
<string name="right_click">Saada paremklõps</string>
<string name="middle_click">Saada keskklõps</string>
<string name="show_keyboard">Näita klaviatuuri</string>
@@ -88,16 +132,16 @@
<string name="request_pairing">Soovi paardumist</string>
<string name="pairing_accept">Nõustu</string>
<string name="pairing_reject">Keeldu</string>
<string name="device">Seade</string>
<string name="pair_device">Paarita seade</string>
<string name="settings">Seadistused</string>
<string name="mpris_play">Esita</string>
<string name="mpris_pause">Paus</string>
<string name="mpris_previous">Eelmine</string>
<string name="mpris_rew">Keri tagasi</string>
<string name="mpris_ff">Kiiresti edasi</string>
<string name="mpris_next">Järgmine</string>
<string name="mpris_volume">Helitugevus</string>
<string name="mpris_settings">Multimeedia seadistused</string>
<string name="mpris_time_settings_title">Edasi-tagasikerimise nupud</string>
<string name="mpris_time_settings_summary">Kiire edasi-tagasikerimise aja kohandamine vajutamisel</string>
<string-array name="mpris_time_entries">
<item>10 sekundit</item>
<item>20 sekundit</item>
@@ -105,51 +149,131 @@
<item>1 minut</item>
<item>2 minutit</item>
</string-array>
<string name="protocol_version_older">See seade kasutab vana protokolli versiooni</string>
<string name="mpris_notification_settings_title">Meedia juhtimise märguannete näitamine</string>
<string name="mpris_notification_settings_summary">Meediamängija juhtimise võimaldamine ilma KDE Connecti avamata</string>
<string name="share_to">Jaga ...</string>
<string name="protocol_version_newer">See seade kasutab uuemat protokolli versiooni</string>
<string name="general_settings">Üldised seadistused</string>
<string name="plugin_settings">Seadistused</string>
<string name="plugin_settings_with_name">%s seadistused</string>
<string name="device_name">Seadme nimi</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Vigane seadme nimi</string>
<string name="shareplugin_text_saved">Saadi tekst, salvestati lõikepuhvrisse</string>
<string name="custom_devices_settings">Kohandatud seadmete loend</string>
<string name="pair_device_action">Paarita uus seade</string>
<string name="unpair_device_action">Eemalda %s paardumine</string>
<string name="custom_device_list">Lisa seadmeid IP järgi</string>
<string name="custom_device_deleted">Kohandatud seade kustutati</string>
<string name="custom_device_list_help">Kui sinu seadet automaatselt ei tuvastatud, võib lisada selle IP-aadressi või masinanime nupule klõpsates</string>
<string name="custom_device_fab_hint">Lisa seade</string>
<string name="undo">Võta tagasi</string>
<string name="share_notification_preference">Mürarikkad märguanded</string>
<string name="share_notification_preference_summary">Vibreerimine ja heli esitamine faili saamisel</string>
<string name="share_destination_customize">Sihtkataloogi kohandamine</string>
<string name="share_destination_customize_summary_disabled">Saadud failid salvestatakse kataloogi Allalaaditud</string>
<string name="share_destination_customize_summary_enabled">Failid salvestatakse allmääratud kataloogi</string>
<string name="share_destination_folder_preference">Sihtkataloog</string>
<string name="share">Jaga</string>
<string name="share_received_file">Jaga \"%s\"</string>
<string name="title_activity_notification_filter">Märguannete filter</string>
<string name="filter_apps_info">Valitud rakenduste märguanded sünkroonitakse</string>
<string name="sftp_internal_storage">Sisemine salvesti</string>
<string name="sftp_sdcard_num">SD-kaart %d</string>
<string name="sftp_sdcard">SD-kaart</string>
<string name="sftp_readonly">(kirjutuskaitstud)</string>
<string name="sftp_camera">Kaamera pildid</string>
<string name="add_host">Lisa masin/IP</string>
<string name="add_device_dialog_title">Seadme lisamine</string>
<string name="add_device_hint">Masinanimi või IP-aadress</string>
<string name="sftp_preference_detected_sdcards">Tuvastatud SD-kaardid</string>
<string name="sftp_preference_edit_sdcard_title">SD-kaardi muutmine</string>
<string name="sftp_preference_configured_storage_locations">Seadistatud salvestuskohad</string>
<string name="sftp_preference_add_storage_location_title">Salvestuskoha lisamine</string>
<string name="sftp_preference_edit_storage_location">Salvestuskoha muutmine</string>
<string name="sftp_preference_add_camera_shortcut">Lisa kaamerakausta kiirviit</string>
<string name="sftp_preference_add_camera_shortcut_summary_on">Kaamerakausta kiirviida lisamine</string>
<string name="sftp_preference_add_camera_shortcut_summary_off">Kaamerakausta kiirviita ei lisata</string>
<string name="sftp_storage_preference_storage_location">Salvestuskoht</string>
<string name="sftp_storage_preference_storage_location_already_configured">See asukoht on juba seadistatud</string>
<string name="sftp_storage_preference_click_to_select">"klõpsa valimiseks "</string>
<string name="sftp_storage_preference_display_name">Näidatav nimi</string>
<string name="sftp_storage_preference_display_name_already_used">See nimi on juba kasutusel</string>
<string name="sftp_storage_preference_display_name_cannot_be_empty">Näidatav nimi ei tohi olla andmata</string>
<string name="sftp_action_mode_menu_delete">Kustuta</string>
<string name="sftp_no_sdcard_detected">Ühtegi SD-kaarti ei leitud</string>
<string name="sftp_no_storage_locations_configured">Ühtegi salvestuskohta pole seadistatud</string>
<string name="sftp_saf_permission_explanation">Ligipääsuks failidele eemalt tuleb seadistada salvestuskohad</string>
<string name="no_players_connected">Ühtegi mängijat ei leitud</string>
<string name="mpris_player_on_device">%1$s seadmes %2$s</string>
<string name="send_files">Saada faile</string>
<string name="pairing_title">KDE Connecti seadmed</string>
<string name="pairing_description">Siin näeb teisi seadmeid samas võrgus, kus töötab KDE Connect</string>
<string name="device_paired">Seade on paaritatud</string>
<string name="device_rename_title">Muuda seadme nime</string>
<string name="device_rename_confirm">Muuda nime</string>
<string name="device_rename_title">Seadme nime muutmine</string>
<string name="device_rename_confirm">Nime muutmine</string>
<string name="refresh">Värskenda</string>
<string name="unreachable_description">See paardunud seade pole saadaval. Kontrolli, kas see on ikka ühendatud sinuga samasse võrku.</string>
<string name="no_wifi">Sul puudub ühendus Wi-Fi võrguga, mistõttu sa ei näe ühtegi seadet. Klõpsa siia Wi-Fi sisselülitamiseks.</string>
<string name="no_file_browser">Ühtegi failisirvijat pole paigaldatud</string>
<string name="pref_plugin_telepathy">Saada SMS</string>
<string name="pref_plugin_telepathy_desc">Tekstisõnumite saatmine oma töölaualt</string>
<string name="plugin_not_supported">Seade ei toeta seda pluginat</string>
<string name="findmyphone_title">Leia mu telefon</string>
<string name="findmyphone_title_tablet">Leia mu tahvel</string>
<string name="findmyphone_title_tv">Leia mu teler</string>
<string name="findmyphone_description">Seadmele helistamine, et see üles leida</string>
<string name="findmyphone_found">Leitud</string>
<string name="open">Ava</string>
<string name="close">Sulge</string>
<string name="plugins_need_permission">Mõned pluginad vajavad töötamiseks õigusi (koputa rohkema teabe saamiseks);</string>
<string name="permission_explanation">See plugin vajab töötamiseks õigusi</string>
<string name="optional_permission_explanation">Kõigi funktsioonide lubamiseks tuleb sul anda lisaõigusi</string>
<string name="plugins_need_optional_permission">Mõne plugina osa omadusi on keelatud õiguste puudumise tõttu (koputa rohkema teabe saamiseks):</string>
<string name="share_optional_permission_explanation">Failide jagamiseks telefoni ja töölau vahel tuleb anda telefonile ligipääs</string>
<string name="telepathy_permission_explanation">SMS-ide lugemiseks ja kirjutamiseks töölaual tuleb anda õigused SMS-ile</string>
<string name="telephony_permission_explanation">Kõnede nägemiseks töölaual tuleb anda õigused telefonikõnede logile ja telefoni olekule</string>
<string name="telephony_optional_permission_explanation">Telefoninumbri asemel kontakti nime nägemiseks tuleb anda õigused telefoni kontaktidele</string>
<string name="contacts_permission_explanation">Oma kontaktide jagamiseks töölauaga tuleb anda õigused kontaktidele</string>
<string name="select_ringtone">Vali helin</string>
<string name="telephony_pref_blocked_title">Blokitud numbrid</string>
<string name="telephony_pref_blocked_dialog_desc">Neilt numbritelt tulevaid kõnesid ja SMS-e ei näidata. Palun pane iga number kirja eraldi reale</string>
<string name="mpris_coverart_description">Aktiivse meedia kaanepilt</string>
<string name="device_icon_description">Seadme ikoon</string>
<string name="settings_icon_description">Seadistuste ikoon</string>
<string name="presenter_fullscreen">Täisekraan</string>
<string name="presenter_exit">Välju esitlusest</string>
<string name="presenter_lock_tip">Seade on võimalik lukku panna ning liikuda eelmisele/järgmisele slaidile helitugevuse klahvidega</string>
<string name="add_command">Lisa käsk</string>
<string name="addcommand_explanation">Ühtegi käsku pole registreeritud</string>
<string name="addcommand_explanation2">Uusi käske saab lisada Süsteemi seadistustes KDE Connecti all</string>
<string name="add_command_description">Käske saab lisada töölaual</string>
<string name="pref_plugin_mprisreceiver">Meediafailide mängija juhtimine</string>
<string name="pref_plugin_mprisreceiver_desc">Telefoni meediamängijate juhtimine teisest seadmest</string>
<string name="notification_channel_default">Muud märguanded</string>
<string name="notification_channel_persistent">Püsiindikaator</string>
<string name="notification_channel_media_control">Meedia juhtimine</string>
<string name="notification_channel_filetransfer">Failiülekanne</string>
<string name="mpris_stop">Peata aktiivne mängija</string>
<string name="copy_url_to_clipboard">Kopeeri URL lõikepuhvrisse</string>
<string name="clipboard_toast">Kopeeriti lõikepuhvrisse</string>
<string name="runcommand_notreachable">Seade pole saadaval</string>
<string name="runcommand_notpaired">Seade pole paaritatud</string>
<string name="runcommand_nosuchdevice">Sellist seadet ei ole</string>
<string name="runcommand_noruncommandplugin">Sel seadmel ei ole käsu käivitamise plugin sisse lülitatud</string>
<string name="pref_plugin_findremotedevice">Kaugseadme leidmine</string>
<string name="pref_plugin_findremotedevice_desc">Helistamine kaugseadmesse</string>
<string name="ring">Helista</string>
<string name="pref_plugin_systemvolume">Süsteemi helitugevus</string>
<string name="pref_plugin_systemvolume_desc">Kaugseadme helitugevuse juhtimine</string>
<string name="mute">Tumm</string>
<string name="all">Kõik</string>
<string name="devices">Seadmed</string>
<string name="settings_rename">Seadme nimi</string>
<string name="settings_dark_mode">Tume teema</string>
<string name="settings_more_settings_title">Rohkem seadistusi</string>
<string name="settings_more_settings_text">Seadmekaupa seadistusi leiab seadme \"Pluginate seadistuste \" all.</string>
<string name="setting_persistent_notification">Püsimärguannete näitamine</string>
<string name="setting_persistent_notification_oreo">Püsimärguanded</string>
<string name="setting_persistent_notification_description">Koputa märguannete seadistuste lubamiseks/keelamiseks</string>
<string name="extra_options">Erivalikud</string>
<string name="privacy_options">Privaatsuse valikud</string>
<string name="set_privacy_options">Privaatsusvalikute määramine</string>
<string name="block_contents">Märguannete sisu blokkimine</string>
<string name="block_images">Märguannete piltide blokkimine</string>
<string name="notification_channel_receivenotification">Märguanded teistest seadmetest</string>
<string name="take_picture">Käivita kaamera</string>
<string name="plugin_photo_desc">Kaamerarakenduse käivitamine piltide tegemiseks ja ülekandmiseks</string>
<string name="no_app_for_opening">Selle faili avamiseks ei leitud sobivat rakendust</string>
<string name="remote_keyboard_service">KDE Connecti kaugklaviatuur</string>
<string name="presenter_pointer">Osutusseade</string>
</resources>

View File

@@ -11,13 +11,14 @@
<string name="pref_plugin_sftp_desc">Gailu honen fitxategi-sistema urrunetik arakatzea ahalbidetzen du</string>
<string name="pref_plugin_clipboard">Arbelaren sinkronizazioa</string>
<string name="pref_plugin_clipboard_desc">Partekatu arbelaren edukia</string>
<string name="pref_plugin_mousepad">Urruneko sarrera</string>
<string name="pref_plugin_mousepad">Urrutiko sarrera</string>
<string name="pref_plugin_mousepad_desc">Erabili zure telefonoa edo tableta ukimen-sagu eta teklatu gisa</string>
<string name="pref_plugin_presenter">Diapositiba emanaldietarako telekomandoa</string>
<string name="pref_plugin_presenter_desc">Erabili zure gailua aurkezpen bateko diapositibak aldatzeko</string>
<string name="pref_plugin_remotekeyboard">Jaso urruneko tekla-sakatzeak</string>
<string name="pref_plugin_remotekeyboard_desc">Jaso tekla-sakatze gertaerak urruneko gailuetatik</string>
<string name="pref_plugin_mpris">Multimedia kontrolak</string>
<string name="pref_plugin_mpris_desc">Zure media jotzailearen urruneko kontrola ematen dizu</string>
<string name="pref_plugin_mpris_desc">Zure euskarri-jotzailearen urruneko kontrola ematen dizu</string>
<string name="pref_plugin_runcommand">Exekutatu agindua</string>
<string name="pref_plugin_runcommand_desc">Abiarazi urruneko aginduak zure telefono edo tabletatik</string>
<string name="pref_plugin_contacts">Kontaktuen sinkronizatzailea</string>
@@ -30,13 +31,13 @@
<string name="pref_plugin_receive_notifications_desc">Jaso jakinarazpenak beste gailutik eta bistaratu Androiden</string>
<string name="pref_plugin_sharereceiver">Partekatu eta jaso</string>
<string name="pref_plugin_sharereceiver_desc">Partekatu fitxategiak eta URLak gailuen artean</string>
<string name="plugin_not_available">Ezaugarri hau ez dago erabilgarri zure Android bertsioan</string>
<string name="device_list_empty">Gailurik ez</string>
<string name="ok">Ados</string>
<string name="cancel">Utzi</string>
<string name="open_settings">Ireki ezarpenak</string>
<string name="no_permissions">Jakinarazpenak atzitzeko baimena eman behar duzu</string>
<string name="no_permission_mprisreceiver">Zure euskarri-jotzaileak kontrolatu ahal izateko jakinarazpenetara atzipena eman behar diozu</string>
<string name="no_permissions_remotekeyboard">Sakatzeak jasotzeko KDE Connecten urruneko teklatua aktibatu behar duzu</string>
<string name="send_ping">Bidali ping</string>
<string name="open_mpris_controls">Multimedia kontrola</string>
<string name="remotekeyboard_editing_only_title">Erabili urruneko teklak editatzean besterik ez</string>
@@ -75,25 +76,20 @@
<string name="category_remembered_devices">Gogoratutako gailuak</string>
<string name="device_menu_plugins">Pluginen ezarpenak</string>
<string name="device_menu_unpair">Desparekatu</string>
<string name="device_not_reachable">Parekatu gailua ez dago eskuragarri</string>
<string name="pair_new_device">Parekatu gailu berria</string>
<string name="unknown_device">Gailu ezezaguna</string>
<string name="error_not_reachable">Gailua ez dago eskuragarri</string>
<string name="error_already_requested">Parekatzea dagoeneko eskatu da</string>
<string name="error_already_paired">Gailua dagoeneko parekatuta</string>
<string name="error_could_not_send_package">Ezin izan da paketea bidali</string>
<string name="error_timed_out">Denbora-muga agortu da</string>
<string name="error_canceled_by_user">Erabiltzaileak utzita</string>
<string name="error_canceled_by_other_peer">Beste kideak utzita</string>
<string name="error_invalid_key">Baliogabeko gakoa jaso da</string>
<string name="encryption_info_title">Zifratze informazioa</string>
<string name="encryption_info_msg_no_ssl">Beste gailuak ez du oraintsuko KDE Connect bertsio bat erabiltzen, erabili aurreko bertsioetako metodoa.</string>
<string name="my_device_fingerprint">Zure gailuaren ziurtagiriaren SHA1 hatz-marka hau da:</string>
<string name="remote_device_fingerprint">Urruneko gailuaren ziurtagiriaren SHA1 hatz-marka hau da:</string>
<string name="pair_requested">Parekatzea eskatu da</string>
<string name="pairing_request_from">Parekatzeko eskaria %1s-tik</string>
<string name="received_url_title">Esteka jaso da %1s-tik</string>
<string name="received_url_text">Tak egin \'%1s\' irekitzeko</string>
<plurals name="incoming_file_title">
<item quantity="one">%2$s(e)tik fitxategi %1$d jasotzen</item>
<item quantity="other">%2$s(e)tik %1$d fitxategi jasotzen</item>
@@ -102,6 +98,14 @@
<item quantity="one">Fitxategia: %1s</item>
<item quantity="other">(%3$d(e)tik %2$d fitxategia) : %1$s</item>
</plurals>
<plurals name="outgoing_file_title">
<item quantity="one">"%2$s(r)i %1$d fitxategi bidaltzea"</item>
<item quantity="other">"%2$s(r)i %1$d fitxategi bidaltzea"</item>
</plurals>
<plurals name="outgoing_files_text">
<item quantity="one">Fitxategia: %1$s</item>
<item quantity="other">(%3$d(e)tik %2$d. fitxategia) : %1$s</item>
</plurals>
<plurals name="received_files_title">
<item quantity="one">Fitxategi bat jaso da %1$s-tik</item>
<item quantity="other">%2$d fitxategi jaso dira %1$s-tik</item>
@@ -110,10 +114,17 @@
<item quantity="one">Huts egin du fitxategi bat %1$s-tik jasotzeak</item>
<item quantity="other">Huts egin du %2$d/%3$d fitxategi %1$s-tik jasotzeak</item>
</plurals>
<plurals name="sent_files_title">
<item quantity="one">Fitxategia %1$s(e)ra bidali da</item>
<item quantity="other">%2$d fitxategi %1$s(e)ra bidali dira</item>
</plurals>
<plurals name="send_files_fail_title">
<item quantity="one">Huts egin du fitxategia %1$s(e)ra bidaltzea</item>
<item quantity="other">"Huts egin du %3$d(e)tik %2$d fitxategi %1$s(e)ra bidaltzea"</item>
</plurals>
<string name="received_file_text">Tak egin \'%1s\' irekitzeko</string>
<string name="cannot_create_file">Ezin da sortu %s fitxategia</string>
<string name="tap_to_answer">Tak egin erantzuteko</string>
<string name="reconnect">Birkonektatu</string>
<string name="right_click">Bidali eskumako klik</string>
<string name="middle_click">Bidali erdiko klik</string>
<string name="show_keyboard">Erakutsi teklatua</string>
@@ -121,8 +132,6 @@
<string name="request_pairing">Eskatu parekatzea</string>
<string name="pairing_accept">Onartu</string>
<string name="pairing_reject">Ukatu</string>
<string name="device">Gailua</string>
<string name="pair_device">Parekatu gailua</string>
<string name="settings">Ezarpenak</string>
<string name="mpris_play">Jo</string>
<string name="mpris_pause">Eten</string>
@@ -131,7 +140,6 @@
<string name="mpris_ff">Aurrera eraman</string>
<string name="mpris_next">Hurrengoa</string>
<string name="mpris_volume">Bolumena</string>
<string name="mpris_settings">Multimedia ezarpenak</string>
<string name="mpris_time_settings_title">Atzera eraman / Aurrera eraman botoiak</string>
<string name="mpris_time_settings_summary">Doitu sakatzean aurrera/atzera azkar egin beharreko denbora</string>
<string-array name="mpris_time_entries">
@@ -144,20 +152,16 @@
<string name="mpris_notification_settings_title">Erakutsi euskarri kontrolaren jakinarazpena</string>
<string name="mpris_notification_settings_summary">Utzi zure euskarri-jotzaileak kontrolatzen KDE Connect ireki gabe</string>
<string name="share_to">Partekatu honi...</string>
<string name="protocol_version_older">Gailu honek protokoloaren bertsio zahar bat erabiltzen du</string>
<string name="protocol_version_newer">Gailu honek protokoloaren bertsio berriago bat erabiltzen du</string>
<string name="general_settings">Ezarpen orokorrak</string>
<string name="plugin_settings">Ezarpenak</string>
<string name="plugin_settings_with_name">%s ezarpenak</string>
<string name="device_name">Gailuaren izena</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Gailuaren izen baliogabea</string>
<string name="shareplugin_text_saved">Testua jaso da, arbelean kopiatu da</string>
<string name="custom_devices_settings">Gailuen zerrenda pertsonalizatua</string>
<string name="pair_device_action">Parekatu gailu berria</string>
<string name="unpair_device_action">Desparekatu %s</string>
<string name="custom_device_list">Gehitu gailuak IP bidez</string>
<string name="delete_custom_device">Ezabatu %s?</string>
<string name="custom_device_deleted">Norberak finkatutako gailua ezabatu da</string>
<string name="custom_device_list_help">Zure gailua ez bada automatikoki detektatzen bere IP helbidea edo ostalari-izena gehitu dezakezu ekintza botoi mugikorrean klik eginez</string>
<string name="custom_device_fab_hint">Gehitu gailu bat</string>
<string name="undo">Desegin</string>
<string name="share_notification_preference">Jakinarazpen zaratatsuak</string>
<string name="share_notification_preference_summary">Bibratu eta jo soinua fitxategia jasotzean</string>
<string name="share_destination_customize">Pertsonalizatu direktorio xedea</string>
@@ -168,27 +172,42 @@
<string name="share_received_file">Partekatu \"%s\"</string>
<string name="title_activity_notification_filter">Jakinarazpenen iragazkia</string>
<string name="filter_apps_info">Aukeratutako aplikazioen jakinarazpenak sinkronizatuko dira</string>
<string name="sftp_internal_storage">Barne biltegiratzea</string>
<string name="sftp_sdcard_num">%d SD txartela</string>
<string name="sftp_sdcard">SD txartela</string>
<string name="sftp_readonly">(irakurri soilik)</string>
<string name="sftp_camera">Kamerako irudiak</string>
<string name="add_host">Gehitu ostalaria/IP</string>
<string name="no_players_connected">Ez da jokalaririk aurkitu</string>
<string name="mpris_player_on_device">%1$s - %2$s</string>
<string name="add_device_dialog_title">Gehitu gailua</string>
<string name="add_device_hint">Ostalari-izena edo IP helbidea</string>
<string name="sftp_preference_detected_sdcards">Detektatutako SD txartelak</string>
<string name="sftp_preference_edit_sdcard_title">Editatu SD txartela</string>
<string name="sftp_preference_configured_storage_locations">Konfiguratutako biltegiratze kokalekuak</string>
<string name="sftp_preference_add_storage_location_title">Gehitu biltegiratze kokalekua</string>
<string name="sftp_preference_edit_storage_location">Editatu biltegiratze kokalekua</string>
<string name="sftp_preference_add_camera_shortcut">Gehitu kamera karpetaren lasterbidea</string>
<string name="sftp_preference_add_camera_shortcut_summary_on">Gehitu lasterbide bat kamera karpetara</string>
<string name="sftp_preference_add_camera_shortcut_summary_off">Ez gehitu lasterbide bat kamera karpetara</string>
<string name="sftp_storage_preference_storage_location">Biltegiratze kokalekua</string>
<string name="sftp_storage_preference_storage_location_already_configured">Kokaleku hau jada konfiguratuta dago</string>
<string name="sftp_storage_preference_click_to_select">klik egin aukeratzeko</string>
<string name="sftp_storage_preference_display_name">Azaltzeko izena</string>
<string name="sftp_storage_preference_display_name_already_used">Azaltzeko izen hau jada erabilita dago</string>
<string name="sftp_storage_preference_display_name_cannot_be_empty">Azaltzeko izena ezin da hutsik egon</string>
<string name="sftp_action_mode_menu_delete">Ezabatu</string>
<string name="sftp_no_sdcard_detected">Ez da SD txartelik detektatu</string>
<string name="sftp_no_storage_locations_configured">Ez da biltegiratze kokalekurik konfiguratu</string>
<string name="sftp_saf_permission_explanation">Fitxategiak urrunetik atzitzeko biltegiratze kokalekuak konfiguratu behar dituzu</string>
<string name="no_players_connected">Ez da jotzailerik aurkitu</string>
<string name="send_files">Bidali fitxategiak</string>
<string name="pairing_title">KDE Connect gailuak</string>
<string name="pairing_description">KDE Connect darabilten sareko beste gailuak hemen agertu beharko lirateke.</string>
<string name="device_paired">Gailu parekatua</string>
<string name="device_rename_title">Aldatu izena gailuari</string>
<string name="device_rename_confirm">Aldatu izena</string>
<string name="refresh">Freskatu</string>
<string name="unreachable_description">Parekatutako gailu hau ez dago eskuragarri. Egiaztatu sare berera konektatuta dagoela.</string>
<string name="on_data_message">Badirudi datu mugikorrak erabiliz konektatu zarela. KDE Connect sare lokalen bitartez besterik ez dabil.</string>
<string name="no_wifi">Ez zaude Wi-Fi sare batera konektatuta, baliteke gailurik ez ikustea. Egin klik hemen Wi-Fia gaitzeko.</string>
<string name="no_file_browser">Ez dago fitxategi arakatzailerik instalatuta.</string>
<string name="pref_plugin_telepathy">Bidali SMSa</string>
<string name="pref_plugin_telepathy_desc">Bidali testu-mezuak zure mahaigainetik</string>
<string name="plugin_not_supported">Gailu honek ez du plugin honentzako euskarririk</string>
<string name="findmyphone_title">Bilatu nire telefonoa</string>
<string name="findmyphone_title_tablet">Bilatu nire tableta</string>
<string name="findmyphone_title_tv">Aurkitu nire TB</string>
@@ -196,13 +215,13 @@
<string name="findmyphone_found">Aurkituta</string>
<string name="open">Ireki</string>
<string name="close">Itxi</string>
<string name="no_permissions_storage">Biltegiratzea atzitzeko baimena eman behar duzu</string>
<string name="plugins_need_permission">Plugin batzuek jarduteko baimenak behar dituzte (tak egin informazio gehiagorako):</string>
<string name="permission_explanation">Plugin honek baimena behar du funtzionatzeko</string>
<string name="optional_permission_explanation">Baimen gehiago eman behar dituzu funtzio guztiak gaitzeko</string>
<string name="plugins_need_optional_permission">Plugin batzuek desgaitutako eginbideak dituzte baimenak faltan dituztelako (tak egin informazio gehiagorako):</string>
<string name="share_optional_permission_explanation">Zure telefonoa eta mahaigainaren artean fitxategiak partekatzeko telefonoaren biltegiratzea atzitzeko baimena eman behar duzu</string>
<string name="telepathy_permission_explanation">SMSak zure mahaigainetik bidali ahal izateko, SMSak erabiltzeko baimena eman behar duzu</string>
<string name="telephony_permission_explanation">Telefono deiak zure mahaigainetik ikusteko, telefono deien egunkarira eta telefonoaren egoerara baimena eman behar duzu</string>
<string name="telephony_optional_permission_explanation">Telefono zenbakiaren ordez kontaktuaren izena ikusteko telefonoko kontaktuak atzitzeko baimena eman behar duzu</string>
<string name="contacts_permission_explanation">Zure kontaktuen liburuak mahaigainarekin partekatzeko, kontaktuetara baimena eman behar duzu</string>
<string name="select_ringtone">Hautatu dei-tonu bat</string>
@@ -213,13 +232,13 @@
<string name="settings_icon_description">Ezarpenen ikonoa</string>
<string name="presenter_fullscreen">Pantaila-betea</string>
<string name="presenter_exit">Irten aurkezpenetik</string>
<string name="presenter_lock_tip">Zure gailua giltzatu dezakezu eta bolumen teklak botoi gisa erabili aurreko/hurrengo diapositibara joateko</string>
<string name="add_command">Gehitu komando bat</string>
<string name="addcommand_explanation">Ez dago komandorik erregistraturik</string>
<string name="addcommand_explanation2">Komando berriak gehitu ditzakezu KDE Connect sistemaren ezarpenetan</string>
<string name="add_command_description">Komandoak gehitu ditzakezu mahaigainean</string>
<string name="pref_plugin_mprisreceiver">Euskarri-jotzailearen kontrola</string>
<string name="pref_plugin_mprisreceiver_desc">Kontrolatu zure telefonoen euskarri-jotzailea beste gailu batetik</string>
<string name="dark_theme">Gai iluna</string>
<string name="pref_plugin_mprisreceiver_desc">Kontrolatu zure telefonoaren euskarri-jotzaileak beste gailu batetik</string>
<string name="notification_channel_default">Beste jakinarazpen batzuk</string>
<string name="notification_channel_persistent">Adierazle iraunkorra</string>
<string name="notification_channel_media_control">Euskarrien kontrola</string>
@@ -244,11 +263,17 @@
<string name="settings_more_settings_title">Ezarpen gehiago</string>
<string name="settings_more_settings_text">Gailu-bakoitzeko ezarpenak aurki daitezke \'Pluginen ezarpenak\' barruan.</string>
<string name="setting_persistent_notification">Erakutsi jakinarazpen iraunkorra</string>
<string name="setting_persistent_notification_oreo">Jakinarazpen iraunkorra</string>
<string name="setting_persistent_notification_description">Sakatu gaitzeko/desgaitzeko jakinarazpen ezarpenetan</string>
<string name="extra_options">Aukera gehigarriak</string>
<string name="privacy_options">Pribatutasun aukerak</string>
<string name="set_privacy_options">Ezarri zure pribatutasun aukerak</string>
<string name="new_notification">Jakinarazpen berria</string>
<string name="block_contents">Oztopatu jakinarazpenen edukiak</string>
<string name="block_images">Oztopatu jakinarazpenen irudiak</string>
<string name="notification_channel_receivenotification">Beste gailu batzuen jakinarazpenak</string>
<string name="take_picture">Abiarazi kamera</string>
<string name="plugin_photo_desc">Abiarazi kamerako aplikazioa argazkiak hartzeko eta transferitzeko</string>
<string name="no_app_for_opening">Ez da fitxategi hau irekitzeko aplikazio egokirik aurkitu</string>
<string name="remote_keyboard_service">KDE Connect urruneko teklatua</string>
<string name="presenter_pointer">Erakuslea</string>
</resources>

View File

@@ -31,7 +31,6 @@
<string name="pref_plugin_receive_notifications_desc">Vastaanota ilmoituksia toiselta laitteelta ja näytä ne Androidissa</string>
<string name="pref_plugin_sharereceiver">Jako ja vastaanottaminen</string>
<string name="pref_plugin_sharereceiver_desc">Jaa tiedostoja ja osoitteita laitteiden välillä</string>
<string name="plugin_not_available">Ominaisuus ei ole käytettävissä Android-versiossasi</string>
<string name="device_list_empty">Ei laitteita</string>
<string name="ok">OK</string>
<string name="cancel">Peru</string>
@@ -77,25 +76,20 @@
<string name="category_remembered_devices">Muistetut laitteet</string>
<string name="device_menu_plugins">Liitännäisten asetukset</string>
<string name="device_menu_unpair">Poista laitepari</string>
<string name="device_not_reachable">Laitepari tavoittamattomissa</string>
<string name="pair_new_device">Kytke uusi laite pariksi</string>
<string name="unknown_device">Tuntematon laite</string>
<string name="error_not_reachable">Laite tavoittamattomissa</string>
<string name="error_already_requested">Pariksi kytkemistä on jo pyydetty</string>
<string name="error_already_paired">Laite on jo kytketty pariksi</string>
<string name="error_could_not_send_package">Ei voitu lähettää pakettia</string>
<string name="error_timed_out">Aikakatkaisu</string>
<string name="error_canceled_by_user">Käyttäjä perui</string>
<string name="error_canceled_by_other_peer">Vertaiskäyttäjä perui</string>
<string name="error_invalid_key">Vastaanotettiin väärä avain</string>
<string name="encryption_info_title">Salaustiedot</string>
<string name="encryption_info_msg_no_ssl">Toinen laite ei käytä KDE Connectin uudehkoa versiota, joten käytetään vanhaa salausmenetelmää.</string>
<string name="my_device_fingerprint">Laitteen varmenteen SHA1-sormenjälki on:</string>
<string name="remote_device_fingerprint">Etälaitteen varmenteen SHA1-sormenjälki on:</string>
<string name="pair_requested">Paripyyntö</string>
<string name="pairing_request_from">Paripyyntö laitteesta %1s</string>
<string name="received_url_title">Vastaanotettiin linkki lähettäjältä %1s</string>
<string name="received_url_text">Avaa ”%1s” napauttamalla</string>
<plurals name="incoming_file_title">
<item quantity="one">Vastaanotetaan %1$d tiedosto lähettäjältä %2$s</item>
<item quantity="other">Vastaanotetaan %1$d tiedostoa lähettäjältä %2$s</item>
@@ -131,7 +125,6 @@
<string name="received_file_text">Avaa ”%1s” napauttamalla</string>
<string name="cannot_create_file">Ei voida luoda tiedostoa %s</string>
<string name="tap_to_answer">Vastaa napauttamalla</string>
<string name="reconnect">Yhdistä uudelleen</string>
<string name="right_click">Lähetä oikean painikkeen napsautus</string>
<string name="middle_click">Lähetä keskipainikkeen napsautus</string>
<string name="show_keyboard">Näytä näppäimistö</string>
@@ -139,8 +132,6 @@
<string name="request_pairing">Pyydä pariksi kytkemistä</string>
<string name="pairing_accept">Hyväksy</string>
<string name="pairing_reject">Hylkää</string>
<string name="device">Laite</string>
<string name="pair_device">Kytke laite pariksi</string>
<string name="settings">Asetukset</string>
<string name="mpris_play">Toista</string>
<string name="mpris_pause">Tauko</string>
@@ -149,7 +140,6 @@
<string name="mpris_ff">Pikakelaa</string>
<string name="mpris_next">Seuraava</string>
<string name="mpris_volume">Äänenvoimakkuus</string>
<string name="mpris_settings">Multimedia-asetukset</string>
<string name="mpris_time_settings_title">Kelauspainikkeet</string>
<string name="mpris_time_settings_summary">Säädä painettaessa tapahtuvan kelauksen kestoa</string>
<string-array name="mpris_time_entries">
@@ -162,20 +152,12 @@
<string name="mpris_notification_settings_title">Näytä mediasäädinilmoitukset</string>
<string name="mpris_notification_settings_summary">Sallii mediasoitintesi hallinnan KDE Connectia avaamatta</string>
<string name="share_to">Jaa…</string>
<string name="protocol_version_older">Laite käyttää vanha yhteyskäytäntöversiota</string>
<string name="protocol_version_newer">Laite käyttää uudempaa yhteyskäytäntöversiota</string>
<string name="general_settings">Yleisasetukset</string>
<string name="plugin_settings">Asetukset</string>
<string name="plugin_settings_with_name">%s-asetukset</string>
<string name="device_name">Laitenimi</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Virheellinen laitenimi</string>
<string name="shareplugin_text_saved">Vastaanotettiin tekstiä, tallennettiin leikepöydälle</string>
<string name="custom_devices_settings">Omien laitteiden luettelo</string>
<string name="pair_device_action">Kytke uusi laite pariksi</string>
<string name="unpair_device_action">Poista laitepari %s</string>
<string name="custom_device_list">Lisää laitteita IP:llä</string>
<string name="delete_custom_device">Poistetaanko %s?</string>
<string name="custom_device_deleted">Poistettiin mukautettu laite</string>
<string name="custom_device_list_help">Ellei laitetta tunnisteta automaattisesti, sen IP-osoitteen tai konenimen voi lisätä napsauttamalla kelluvaa toimintopainiketta</string>
<string name="custom_device_fab_hint">Lisää laite</string>
@@ -190,7 +172,6 @@
<string name="share_received_file">Jaa ”%s”</string>
<string name="title_activity_notification_filter">Ilmoitussuodatin</string>
<string name="filter_apps_info">Valittujen sovellusten ilmoitukset synkronoidaan.</string>
<string name="sftp_internal_storage">Sisäinen muisti</string>
<string name="sftp_sdcard_num">SD-kortti %d</string>
<string name="sftp_sdcard">SD-kortti</string>
<string name="sftp_readonly">(vain luku)</string>
@@ -215,23 +196,17 @@
<string name="sftp_no_sdcard_detected">SD-kortteja ei havaittu</string>
<string name="sftp_no_storage_locations_configured">Tallennustiloja ei ole asetettu</string>
<string name="sftp_saf_permission_explanation">Tallennustilat on asetettava etätiedostojen käyttämiseksi</string>
<string name="add_host">Lisää kone/IP</string>
<string name="add_host_hint">Konenimi tai IP</string>
<string name="no_players_connected">Soittimia ei löytynyt</string>
<string name="mpris_player_on_device">%1$s laitteella %2$s</string>
<string name="send_files">Lähetä tiedostoja</string>
<string name="pairing_title">KDE Connect -laitteet</string>
<string name="pairing_description">Muiden samassa verkossa olevien KDE Connectia käyttävien laitteiden pitäisi ilmestyä tähän.</string>
<string name="device_paired">Laite kytketty pariksi</string>
<string name="device_rename_title">Muuta laitteen nimeä</string>
<string name="device_rename_confirm">Muuta nimi</string>
<string name="refresh">Päivitä</string>
<string name="unreachable_description">Tämä pariksi kytketty laite ei ole tavoitettavissa. Tarkista, että se on yhteydessä samaan verkkoon.</string>
<string name="on_data_message">Näyttää siltä, että olet mobiilidatayhteydessä. KDE Connect toimii vain paikallisverkoissa.</string>
<string name="no_file_browser">Tiedostoselaimia ei asennettu.</string>
<string name="pref_plugin_telepathy">Lähetä tekstiviesti</string>
<string name="pref_plugin_telepathy_desc">Lähetä tekstiviestejä työpöydältäsi</string>
<string name="plugin_not_supported">Laite ei tue tätä liitännäistä</string>
<string name="findmyphone_title">Löydä puhelimeni</string>
<string name="findmyphone_title_tablet">Löydä tablettini</string>
<string name="findmyphone_title_tv">Etsi televeisioni</string>
@@ -239,7 +214,6 @@
<string name="findmyphone_found">Löytyi</string>
<string name="open">Avaa</string>
<string name="close">Sulje</string>
<string name="no_permissions_storage">Käyttääksesi tallennustilaa sinun on annettava siihen käyttöoikeus</string>
<string name="plugins_need_permission">Jotkin liitännäiset vaativat toimiakseen lisäkäyttöoikeuksia (lisätietoa napsauttamalla):</string>
<string name="permission_explanation">Liitännäinen tarvitsee toimiakseen lisäkäyttöoikeuksia</string>
<string name="optional_permission_explanation">Kaikkien toimintojen käyttämiseksi sinun on annettava lisäkäyttöoikeuksia</string>
@@ -263,8 +237,6 @@
<string name="addcommand_explanation2">Voit lisätä uusia komentoja KDE Connectin järjestelmäasetuksissa</string>
<string name="add_command_description">Voit lisätä komentoja työpöydälle</string>
<string name="pref_plugin_mprisreceiver">Mediasoittimen hallinta</string>
<string name="pref_plugin_mprisreceiver_desc">Hallitse puhelimesi mediasoittimia toiselta laitteelta</string>
<string name="dark_theme">Tumma teema</string>
<string name="notification_channel_default">Muut ilmoitukset</string>
<string name="notification_channel_persistent">Pysyvä ilmaisin</string>
<string name="notification_channel_media_control">Mediaohjaimet</string>
@@ -293,7 +265,6 @@
<string name="extra_options">Lisäasetukset</string>
<string name="privacy_options">Yksityisyysasetukset</string>
<string name="set_privacy_options">Aseta yksityisyysasetukset</string>
<string name="new_notification">Uusi ilmoitus</string>
<string name="block_contents">Estä ilmoitusten sisältö</string>
<string name="block_images">Estä ilmoitusten kuvat</string>
<string name="notification_channel_receivenotification">Muiden laitteiden ilmoitukset</string>

View File

@@ -31,7 +31,6 @@
<string name="pref_plugin_receive_notifications_desc">Recevoir les notifications du périphérique et les afficher dans Android</string>
<string name="pref_plugin_sharereceiver">Partager et recevoir</string>
<string name="pref_plugin_sharereceiver_desc">Partagez des URLs et des fichiers entre périphériques</string>
<string name="plugin_not_available">Cette fonctionnalité n\'est pas disponible dans votre version de Android</string>
<string name="device_list_empty">Pas de périphériques</string>
<string name="ok">Ok</string>
<string name="cancel">Annuler</string>
@@ -77,25 +76,20 @@
<string name="category_remembered_devices">Périphériques mémorisés</string>
<string name="device_menu_plugins">Paramètres des modules externes</string>
<string name="device_menu_unpair">Dissocier</string>
<string name="device_not_reachable">Périphérique inaccessible</string>
<string name="pair_new_device">Associer un nouveau périphérique</string>
<string name="unknown_device">Périphérique inconnu</string>
<string name="error_not_reachable">Périphérique inaccessible</string>
<string name="error_already_requested">L\'association a déjà été demandée</string>
<string name="error_already_paired">Périphérique déjà associé</string>
<string name="error_could_not_send_package">Il est impossible d\'envoyer un paquet</string>
<string name="error_timed_out">Délai expiré</string>
<string name="error_canceled_by_user">Annulé par l\'utilisateur</string>
<string name="error_canceled_by_other_peer">Annulé par un autre homologue</string>
<string name="error_invalid_key">Clé reçue non valable</string>
<string name="encryption_info_title">Informations de chiffrement</string>
<string name="encryption_info_msg_no_ssl">Ce périphérique n\'utilise pas une version récente de KDE Connect qui utilise l\'ancienne méthode de chiffrement.</string>
<string name="my_device_fingerprint">L\'empreinte SHA1 du certificat de votre appareil est :</string>
<string name="remote_device_fingerprint">L\'empreinte SHA1 du certificat du périphérique distant est :</string>
<string name="pair_requested">Paire demandée</string>
<string name="pairing_request_from">Demande d\'association provenant de %1s</string>
<string name="received_url_title">Lien reçu de %1s</string>
<string name="received_url_text">Appuyez pour ouvrir %1s</string>
<plurals name="incoming_file_title">
<item quantity="one">%1$d fichier reçu de %2$s</item>
<item quantity="other">%1$d fichiers reçus de %2$s</item>
@@ -104,6 +98,14 @@
<item quantity="one">Fichier : %1s</item>
<item quantity="other">(Fichier %2$d sur %3$d) : %1$s</item>
</plurals>
<plurals name="outgoing_file_title">
<item quantity="one">Envoi de %1$d fichier à %2$s</item>
<item quantity="other">Envoi de %1$d fichiers à %2$s</item>
</plurals>
<plurals name="outgoing_files_text">
<item quantity="one">Fichier : %1$s</item>
<item quantity="other">(Fichier %2$d sur %3$d) : %1$s</item>
</plurals>
<plurals name="received_files_title">
<item quantity="one">Fichier reçu de %1$s</item>
<item quantity="other">%2$d fichiers reçus de %1$s</item>
@@ -112,10 +114,17 @@
<item quantity="one">Impossible de recevoir le fichier depuis %1$s</item>
<item quantity="other">Impossible de recevoir %2$d fichiers sur %3$d depuis %1$s</item>
</plurals>
<plurals name="sent_files_title">
<item quantity="one">Fichier envoyé à %1$s</item>
<item quantity="other">%2$d fichiers envoyés à %1$s</item>
</plurals>
<plurals name="send_files_fail_title">
<item quantity="one">Impossible d\'envoyer le fichier à %1$s</item>
<item quantity="other">Impossible d\'envoyer %2$d fichiers sur %3$d à %1$s</item>
</plurals>
<string name="received_file_text">Appuyez pour ouvrir %1s</string>
<string name="cannot_create_file">Impossible de créer le fichier %s</string>
<string name="tap_to_answer">Cliquer pour répondre</string>
<string name="reconnect">Reconnecter</string>
<string name="right_click">Envoyer un clic droit</string>
<string name="middle_click">Envoyer un clic central</string>
<string name="show_keyboard">Afficher le clavier</string>
@@ -123,8 +132,6 @@
<string name="request_pairing">Demande d\'association</string>
<string name="pairing_accept">Accepter</string>
<string name="pairing_reject">Rejeter</string>
<string name="device">Périphérique</string>
<string name="pair_device">Associer un périphérique</string>
<string name="settings">Configuration</string>
<string name="mpris_play">Lire</string>
<string name="mpris_pause">Pause</string>
@@ -133,7 +140,6 @@
<string name="mpris_ff">Avance rapide</string>
<string name="mpris_next">Suivant</string>
<string name="mpris_volume">Volume</string>
<string name="mpris_settings">Configuration multimédia</string>
<string name="mpris_time_settings_title">Boutons avance / retour rapide.</string>
<string name="mpris_time_settings_summary">Ajustez le temps pour l\'avance ou retour rapide.</string>
<string-array name="mpris_time_entries">
@@ -146,20 +152,12 @@
<string name="mpris_notification_settings_title">Afficher la notification de contrôle du lecteur multimédia</string>
<string name="mpris_notification_settings_summary">Vous permet de contrôler vos lecteurs multimédia sans ouvrir KDE Connect.</string>
<string name="share_to">Partager vers…</string>
<string name="protocol_version_older">Le périphérique utilise une version ancienne du protocole</string>
<string name="protocol_version_newer">Le périphérique utilise une version plus récente du protocole</string>
<string name="general_settings">Paramètres généraux</string>
<string name="plugin_settings">Configuration</string>
<string name="plugin_settings_with_name">Configuration %s</string>
<string name="device_name">Nom du périphérique</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Nom de périphérique non valable</string>
<string name="shareplugin_text_saved">Texte reçu et enregistré dans le presse-papiers</string>
<string name="custom_devices_settings">Liste personnalisée de périphériques</string>
<string name="pair_device_action">Associer un nouveau périphérique</string>
<string name="unpair_device_action">Dissocier %s</string>
<string name="custom_device_list">Ajouter des périphériques par IP</string>
<string name="delete_custom_device">Supprimer %s ?</string>
<string name="custom_device_deleted">Périphérique personnalisé supprimé</string>
<string name="custom_device_list_help">Si votre périphérique n\'est pas détecté automatiquement, vous pouvez ajouter son adresse IP ou son nom d\'hôte en cliquant sur le bouton d\'action flottant</string>
<string name="custom_device_fab_hint">Ajouter un périphérique</string>
@@ -174,7 +172,6 @@
<string name="share_received_file">Partager « %s »</string>
<string name="title_activity_notification_filter">Filtre des notifications</string>
<string name="filter_apps_info">Les notifications seront synchronisées pour les applications sélectionnées.</string>
<string name="sftp_internal_storage">Stockage interne</string>
<string name="sftp_sdcard_num">Carte SD %d</string>
<string name="sftp_sdcard">Carte SD</string>
<string name="sftp_readonly">(lecture seule)</string>
@@ -199,23 +196,18 @@
<string name="sftp_no_sdcard_detected">Aucune carte SD détectée</string>
<string name="sftp_no_storage_locations_configured">Aucun emplacement stockage n\'est configuré</string>
<string name="sftp_saf_permission_explanation">Vous devez configurer des emplacements de stockage pour accéder aux fichiers à distance</string>
<string name="add_host">Ajouter hôte/IP</string>
<string name="add_host_hint">"Nom d\'hôte ou adresse IP "</string>
<string name="no_players_connected">Aucun lecteur trouvé</string>
<string name="mpris_player_on_device">%1$s sur %2$s</string>
<string name="send_files">Envoyer des fichiers</string>
<string name="pairing_title">Périphériques KDE Connect</string>
<string name="pairing_description">Les autres périphériques utilisant KDE Connect dans votre réseau apparaissent ici.</string>
<string name="device_paired">Périphérique associé</string>
<string name="device_rename_title">Renommer le périphérique</string>
<string name="device_rename_confirm">Renommer</string>
<string name="refresh">Mettre à jour</string>
<string name="unreachable_description">Ce périphérique associé n\'est pas accessible. Assurez-vous qu\'il est bien connecté au même réseau.</string>
<string name="on_data_message">Il semble que vous utilisiez une connexion de données mobile. KDE Connect fonctionne uniquement sur un réseau local.</string>
<string name="no_wifi">Vous n\'êtes connecté à aucun réseau Wi-Fi, il est possible que vous ne puissiez afficher aucun appareil. Cliquez ici pour activer le Wi-Fi.</string>
<string name="no_file_browser">Aucun navigateur de fichiers installé.</string>
<string name="pref_plugin_telepathy">Envoyer un SMS</string>
<string name="pref_plugin_telepathy_desc">Envoyer des SMS depuis votre bureau</string>
<string name="plugin_not_supported">Ce module externe n\'est pas géré par le périphérique</string>
<string name="findmyphone_title">Trouver mon téléphone</string>
<string name="findmyphone_title_tablet">Trouver ma tablette</string>
<string name="findmyphone_title_tv">Trouver ma télévision</string>
@@ -223,13 +215,13 @@
<string name="findmyphone_found">Trouvé</string>
<string name="open">Ouvrir</string>
<string name="close">Fermer</string>
<string name="no_permissions_storage">Vous devez accorder la permission d\'accéder à l\'espace de stockage</string>
<string name="plugins_need_permission">Certains modules externes nécessitent des permissions pour fonctionner (tapez pour plus d\'informations) :</string>
<string name="permission_explanation">Ce module externe nécessite des permissions pour fonctionner</string>
<string name="optional_permission_explanation">Vous devez accorder des permissions supplémentaires pour activer toutes les fonctionnalités</string>
<string name="plugins_need_optional_permission">Certaines fonctionnalités de modules externes sont désactivées faute de permissions suffisantes (tapez pour plus d\'informations) :</string>
<string name="share_optional_permission_explanation">Pour partager des fichiers entre votre téléphone et votre ordinateur, veuillez permettre l\'accès à la mémoire de stockage du téléphone</string>
<string name="telepathy_permission_explanation">Pour lire et écrire des SMS depuis votre ordinateur, veuillez permettre l\'accès aux SMS</string>
<string name="telephony_permission_explanation">Pour voir les appels depuis votre ordinateur, veuillez permettre l\'accès au journal des appels et à l\'état du téléphone</string>
<string name="telephony_optional_permission_explanation">Pour voir le nom du contact au lieu du numéro de téléphone, veuillez permettre l\'accès aux contacts du téléphone</string>
<string name="contacts_permission_explanation">Pour partager votre carnet de contacts avec votre ordinateur, veuillez permettre l\'accès aux contacts du téléphone</string>
<string name="select_ringtone">Sélectionnez une sonnerie</string>
@@ -246,8 +238,7 @@
<string name="addcommand_explanation2">Vous pouvez ajouter de nouvelles commandes dans la configuration système de KDE Connect</string>
<string name="add_command_description">Vous pouvez ajouter des commandes sur votre ordinateur</string>
<string name="pref_plugin_mprisreceiver">Contrôle du lecteur multimédia</string>
<string name="pref_plugin_mprisreceiver_desc">Contrôlez les lecteurs multimédia de vos téléphones depuis un autre appareil</string>
<string name="dark_theme">Thème sombre</string>
<string name="pref_plugin_mprisreceiver_desc">Contrôlez les lecteurs multimédia de votre téléphone depuis un autre appareil</string>
<string name="notification_channel_default">Autres notifications</string>
<string name="notification_channel_persistent">Indicateur persistant</string>
<string name="notification_channel_media_control">Contrôle multimédia</string>
@@ -277,11 +268,12 @@
<string name="extra_options">Options supplémentaires</string>
<string name="privacy_options">Options de confidentialité</string>
<string name="set_privacy_options">Configurez vos options de confidentialité</string>
<string name="new_notification">Nouvelle notification</string>
<string name="block_contents">Bloquer les contenus des notifications</string>
<string name="block_images">Bloquer les images des notifications</string>
<string name="notification_channel_receivenotification">Notifications provenant d\'autres périphériques</string>
<string name="take_picture">Lancer l\'appareil photo</string>
<string name="plugin_photo_desc">Lancer l\'application appareil photo pour prendre et transférer des photos</string>
<string name="no_app_for_opening">Aucune application adaptée trouvée pour ouvrir ce fichier.</string>
<string name="remote_keyboard_service">Clavier à distance KDE Connect</string>
<string name="presenter_pointer">Pointeur</string>
</resources>

View File

@@ -31,7 +31,6 @@
<string name="pref_plugin_receive_notifications_desc">Recibir notificacións do outro dispositivo e mostralas en Android</string>
<string name="pref_plugin_sharereceiver">Compartir e recibir</string>
<string name="pref_plugin_sharereceiver_desc">Comparta ficheiros e enderezos URL entre dispositivos</string>
<string name="plugin_not_available">Esta funcionalidade non está dispoñíbel para a súa versión de Android</string>
<string name="device_list_empty">Non hai dispositivos.</string>
<string name="ok">Aceptar</string>
<string name="cancel">Cancelar</string>
@@ -77,25 +76,20 @@
<string name="category_remembered_devices">Dispositivos coñecidos</string>
<string name="device_menu_plugins">Configuración do complemento</string>
<string name="device_menu_unpair">Desemparellarse</string>
<string name="device_not_reachable">O dispositivo emparellado está fóra do alcance.</string>
<string name="pair_new_device">Emparellar cun novo dispositivo</string>
<string name="unknown_device">Dispositivo descoñecido</string>
<string name="error_not_reachable">Dispositivo fóra do alcance</string>
<string name="error_already_requested">Xa solicitou emparellarse.</string>
<string name="error_already_paired">O dispositivo xa está emparellado.</string>
<string name="error_could_not_send_package">Non se puido enviar o paquete.</string>
<string name="error_timed_out">Esgotouse o tempo límite</string>
<string name="error_canceled_by_user">Cancelouno o usuario.</string>
<string name="error_canceled_by_other_peer">Cancelouse remotamente</string>
<string name="error_invalid_key">Recibiuse unha clave incorrecta.</string>
<string name="encryption_info_title">Información do cifrado</string>
<string name="encryption_info_msg_no_ssl">O outro dispositivo non usa unha versión recente de KDE Connect, usarase un método obsoleto de cifrado.</string>
<string name="my_device_fingerprint">A pegada SHA1 do certificado do seu dispositivo é:</string>
<string name="remote_device_fingerprint">A pegada SHA1 do certificado do dispositivo remoto é:</string>
<string name="pair_requested">Solicitude de emparellamento</string>
<string name="pairing_request_from">Solicitude de emparellamento de %1s.</string>
<string name="received_url_title">Recibiuse unha ligazón de %1s</string>
<string name="received_url_text">Toque para abrir «%1s».</string>
<plurals name="incoming_file_title">
<item quantity="one">Recibindo %1$d ficheiro de %2$s</item>
<item quantity="other">Recibindo %1$d ficheiros de %2$s</item>
@@ -131,7 +125,6 @@
<string name="received_file_text">Toque para abrir «%1s».</string>
<string name="cannot_create_file">Non se pode crear o ficheiro %s</string>
<string name="tap_to_answer">Toque para contestar</string>
<string name="reconnect">Conectar de novo</string>
<string name="right_click">Enviar un clic secundario</string>
<string name="middle_click">Enviar un clic central</string>
<string name="show_keyboard">Mostrar o teclado</string>
@@ -139,8 +132,6 @@
<string name="request_pairing">Solicitar emparellarse</string>
<string name="pairing_accept">Aceptar</string>
<string name="pairing_reject">Rexeitar</string>
<string name="device">Dispositivo</string>
<string name="pair_device">Emparellar o dispositivo</string>
<string name="settings">Configuración</string>
<string name="mpris_play">Reproducir</string>
<string name="mpris_pause">Deter</string>
@@ -149,7 +140,6 @@
<string name="mpris_ff">Cara a adiante</string>
<string name="mpris_next">Seguinte</string>
<string name="mpris_volume">Volume</string>
<string name="mpris_settings">Configuración de son e vídeo</string>
<string name="mpris_time_settings_title">Botóns de avanzar e retroceder</string>
<string name="mpris_time_settings_summary">Axuste o tempo que avanzar ou retroceder ao premer</string>
<string-array name="mpris_time_entries">
@@ -162,20 +152,12 @@
<string name="mpris_notification_settings_title">Mostrar a notificación de control de reprodución.</string>
<string name="mpris_notification_settings_summary">Permitir controlar os reprodutores sen abrir KDE Connect</string>
<string name="share_to">Compartir con…</string>
<string name="protocol_version_older">Este dispositivo usa unha versión vella do protocolo.</string>
<string name="protocol_version_newer">Este dispositivo usa unha versión máis nova do protocolo.</string>
<string name="general_settings">Configuración xeral</string>
<string name="plugin_settings">Configuración</string>
<string name="plugin_settings_with_name">Configuración de %s</string>
<string name="device_name">Nome do dispositivo</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Nome de dispositivo incorrecto</string>
<string name="shareplugin_text_saved">Recibiuse un texto e gardouse no portapapeis</string>
<string name="custom_devices_settings">Lista de dispositivos personalizada</string>
<string name="pair_device_action">Emparellar cun novo dispositivo</string>
<string name="unpair_device_action">Desemparellarse de %s</string>
<string name="custom_device_list">Engadir dispositivos por IP</string>
<string name="delete_custom_device">Eliminar %s?</string>
<string name="custom_device_deleted">Eliminouse o dispositivo personalizado</string>
<string name="custom_device_list_help">Se o seu dispositivo non se detecta automaticamente pode engadir o seu enderezo IP ou nome de máquina premendo o botón flotante de acción</string>
<string name="custom_device_fab_hint">Engadir un dispositivo</string>
@@ -190,7 +172,6 @@
<string name="share_received_file">Compartir «%s»</string>
<string name="title_activity_notification_filter">Filtro de notificacións</string>
<string name="filter_apps_info">As notificacións sincronizaranse para os seguintes aplicativos.</string>
<string name="sftp_internal_storage">Almacenamento interno</string>
<string name="sftp_sdcard_num">Tarxeta SD %d</string>
<string name="sftp_sdcard">Tarxeta SD</string>
<string name="sftp_readonly">(só lectura)</string>
@@ -215,23 +196,18 @@
<string name="sftp_no_sdcard_detected">Non se detectaron tarxetas SD</string>
<string name="sftp_no_storage_locations_configured">Non se configuraron localizacións de almacenamento</string>
<string name="sftp_saf_permission_explanation">Para acceder a ficheiro remotamente ten que configurar lugares de almacenamento</string>
<string name="add_host">Engadir unha nome ou IP</string>
<string name="add_host_hint">Nome de máquina ou IP</string>
<string name="no_players_connected">Non se atoparon reprodutores.</string>
<string name="mpris_player_on_device">%1$s en %2$s</string>
<string name="send_files">Enviar ficheiros</string>
<string name="pairing_title">Dispositivos con KDE Connect</string>
<string name="pairing_description">Outros dispositivos que estean a executar KDE Connect na mesma rede deberían aparecer aquí.</string>
<string name="device_paired">Emparellouse co dispositivo</string>
<string name="device_rename_title">Renomear o dispositivo</string>
<string name="device_rename_confirm">Renomear</string>
<string name="refresh">Actualizar</string>
<string name="unreachable_description">Este dispositivo emparellado está fóra do alcance. Asegúrese de que está conectado á mesma rede.</string>
<string name="on_data_message">Parece que está usando unha conexión de datos de móbil. KDE Connect só funciona en redes locais.</string>
<string name="no_wifi">Non ten conexión a unha rede Wi-Fi así que pode que non vexa ningún dispositivo. Prema aquí para activar a Wi-Fi.</string>
<string name="no_file_browser">Non hai navegadores de ficheiros instalados.</string>
<string name="pref_plugin_telepathy">Enviar unha mensaxe de texto</string>
<string name="pref_plugin_telepathy_desc">Enviar mensaxes de texto desde o seu escritorio</string>
<string name="plugin_not_supported">O dispositivo non é compatíbel con este complemento.</string>
<string name="findmyphone_title">Atopar o móbil</string>
<string name="findmyphone_title_tablet">Atopar a tableta</string>
<string name="findmyphone_title_tv">Atopar o meu televisor</string>
@@ -239,7 +215,6 @@
<string name="findmyphone_found">Atopado</string>
<string name="open">Abrir</string>
<string name="close">Pechar</string>
<string name="no_permissions_storage">Debe conceder permisos para acceder ao almacenamento.</string>
<string name="plugins_need_permission">Algúns complementos necesitan permisos para funcionar (toque para máis información):</string>
<string name="permission_explanation">Este complemento necesita permisos para funcionar.</string>
<string name="optional_permission_explanation">Ten que conceder permisos adicionais para activar todas as funcións.</string>
@@ -263,8 +238,7 @@
<string name="addcommand_explanation2">Pode engadir novas ordes desde a configuración do sistema de KDE Connect.</string>
<string name="add_command_description">Pode engadir ordes no escritorio.</string>
<string name="pref_plugin_mprisreceiver">Control do reprodutor de multimedia</string>
<string name="pref_plugin_mprisreceiver_desc">Controlar os reprodutores do seu móbil desde outro dispositivo.</string>
<string name="dark_theme">Tema escuro</string>
<string name="pref_plugin_mprisreceiver_desc">Controlar os reprodutores do seu móbil desde outro dispositivo</string>
<string name="notification_channel_default">Outras notificacións</string>
<string name="notification_channel_persistent">Indicador persistente</string>
<string name="notification_channel_media_control">Control de reprodución</string>
@@ -294,11 +268,12 @@
<string name="extra_options">Opcións adicionais</string>
<string name="privacy_options">Opcións de intimidade</string>
<string name="set_privacy_options">Definir as súas opcións de protección da intimidade</string>
<string name="new_notification">Nova notificación</string>
<string name="block_contents">Bloquear o contido das notificacións</string>
<string name="block_images">Bloquear as imaxes nas notificacións</string>
<string name="notification_channel_receivenotification">Notificacións desde outros dispositivos</string>
<string name="take_picture">Iniciar a cámara</string>
<string name="plugin_photo_desc">Iniciar o aplicativo da cámara para facilitar sacar e transferir imaxes</string>
<string name="no_app_for_opening">Non se atopou ningún aplicativo axeitado para abrir este ficheiro</string>
<string name="remote_keyboard_service">Teclado remoto de KDE Connect</string>
<string name="presenter_pointer">Punteiro</string>
</resources>

View File

@@ -23,7 +23,6 @@
<string name="pref_plugin_receive_notifications_desc">קבל התראות מהתקן אחר והצג אותם במכשיר שלך</string>
<string name="pref_plugin_sharereceiver">שתף וקבל קבצים וכתובות</string>
<string name="pref_plugin_sharereceiver_desc">שתף וקבל קבצים וכתובת אינטרנט בין התקנים</string>
<string name="plugin_not_available">אפשרות זו אינה זמינה בגרסת האנדרואיד שלך</string>
<string name="device_list_empty">אין התקנים</string>
<string name="ok">אישור</string>
<string name="cancel">בטל</string>
@@ -65,28 +64,22 @@
<string name="category_remembered_devices">התקנים זכורים</string>
<string name="device_menu_plugins">הגדרות תוספים</string>
<string name="device_menu_unpair">בטל התאמה</string>
<string name="device_not_reachable">ההתקן המותאם לא זמין</string>
<string name="pair_new_device">התאם התקן חדש</string>
<string name="unknown_device">התקן לא ידוע</string>
<string name="error_not_reachable">ההתקן לא זמין</string>
<string name="error_already_requested">כבר בוקשה התאמה</string>
<string name="error_already_paired">ההתקן כבר מותאם</string>
<string name="error_could_not_send_package">לא יכול לשלוח חבילה</string>
<string name="error_timed_out">נגמר הזמן</string>
<string name="error_canceled_by_user">בוטל על ידי המשתמש</string>
<string name="error_canceled_by_other_peer">בוטל על ידי מישהו אחר</string>
<string name="error_invalid_key">התקבל מפתח לא תקין</string>
<string name="encryption_info_title">פרטי הצפנה</string>
<string name="encryption_info_msg_no_ssl">ההתקן השני אינו משתמש בגרסה האחרונה של KDE Connect, משתמש בשיטת ההצפנה הישנה.</string>
<string name="my_device_fingerprint">טביעת האצבע SHA1 של ההתקן היא:</string>
<string name="remote_device_fingerprint">"טביעת האצבע SHA1 של ההתקן המרוחק היא: "</string>
<string name="pair_requested">בקשת התאמה</string>
<string name="pairing_request_from">בוקשה התאמה מ־%1s</string>
<string name="received_url_title">התקבל קישור מ־%1s</string>
<string name="received_url_text">לחץ כדי לפתוח את \"%1s\"</string>
<string name="received_file_text">לחץ כדי לפתוח את \"%1s\"</string>
<string name="tap_to_answer">לחץ כדי לענות</string>
<string name="reconnect">התחבר מחדש</string>
<string name="right_click">שלח לחיצה ימנית</string>
<string name="middle_click">שלח לחיצה אמצעית (גלגלת)</string>
<string name="show_keyboard">הראה מקלדת</string>
@@ -94,15 +87,12 @@
<string name="request_pairing">בקש התאמה</string>
<string name="pairing_accept">אשר</string>
<string name="pairing_reject">דחה</string>
<string name="device">התקן</string>
<string name="pair_device">התאם התקן</string>
<string name="mpris_play">נגן</string>
<string name="mpris_previous">הקודם</string>
<string name="mpris_rew">דילוג אחורה</string>
<string name="mpris_ff">דילוג קדימה</string>
<string name="mpris_next">הבא</string>
<string name="mpris_volume">עוצמה</string>
<string name="mpris_settings">הגדרות מדיה</string>
<string name="mpris_time_settings_title">כפתור דילוג קדימה או אחורה</string>
<string-array name="mpris_time_entries">
<item>10 שניות</item>
@@ -111,18 +101,11 @@
<item>דקה</item>
<item>שתי דקות</item>
</string-array>
<string name="protocol_version_older">ההתקן משתמש בגרסה ישנה יותר</string>
<string name="protocol_version_newer">ההתקן משתמש בגרסה חדשה יותר</string>
<string name="general_settings">הגדרות כלליות</string>
<string name="plugin_settings">הגדרות</string>
<string name="plugin_settings_with_name">הגדרות %s</string>
<string name="device_name">שם ההתקן</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">שם ההתקן לא תקין</string>
<string name="shareplugin_text_saved">התקבל טקסט, נשמר ללוח העתקה</string>
<string name="custom_devices_settings">רשימת התקנים מותאמת אישית</string>
<string name="pair_device_action">התאם התקן חדש</string>
<string name="unpair_device_action">בטל את ההתאמה עם %s</string>
<string name="custom_device_list">הוסף התקן על ידי כתובת IP</string>
<string name="share_notification_preference">התראות רועשות</string>
<string name="share_notification_preference_summary">רטוט ונגן צליל בעת קבלת קובץ</string>
@@ -132,27 +115,21 @@
<string name="share_destination_folder_preference">תיקית יעד</string>
<string name="title_activity_notification_filter">סנן התראות</string>
<string name="filter_apps_info">התראות יסונכרנו רק לאפליקציות נבחרות</string>
<string name="sftp_internal_storage">זיכרון פנימי</string>
<string name="sftp_sdcard_num">כרטיס זיכרון %d</string>
<string name="sftp_sdcard">כרטיס זיכרון</string>
<string name="sftp_readonly">(לקריאה בלבד)</string>
<string name="sftp_camera">תמונות מצלמה</string>
<string name="add_host">הוסף כתובת או IP</string>
<string name="no_players_connected">לא נמצא נגן</string>
<string name="mpris_player_on_device">%1$s אצל %2$s</string>
<string name="send_files">שלח קובץ</string>
<string name="pairing_title">מכשירי KDE Connect</string>
<string name="pairing_description">התקנים אחרים המריצים KDE Connect ברשת הנוכחית צריכים להופיע פה.</string>
<string name="device_paired">התקן מתואם</string>
<string name="device_rename_title">שנה שם התקן</string>
<string name="device_rename_confirm">שנה שם</string>
<string name="refresh">רענן</string>
<string name="unreachable_description">ההתקן המתואם לא זמין, וודא שהוא מחובר לאותה רשת אליה אתה מחובר.</string>
<string name="on_data_message">נראה שאתה מחובר דרך הרשת הסלולרית. KDE Connect עובד רק עם רשתות מקומיות.</string>
<string name="no_file_browser">לא נמצאו מנהלי קבצים מותקנים במכשיר זה.</string>
<string name="pref_plugin_telepathy">שליחת הודעת SMS</string>
<string name="pref_plugin_telepathy_desc">שלח הודעות מהמחשב שלך</string>
<string name="plugin_not_supported">תוסף הזה לא נתמך על ידי המכשיר שלך</string>
<string name="findmyphone_title">מצא את הפלאפון שלי</string>
<string name="findmyphone_title_tablet">מצא את הטבלט שלי</string>
<string name="findmyphone_description">מפעיל רעש במכשיר כדי שתוכל למצוא אותו.</string>

View File

@@ -10,7 +10,6 @@
<string name="pref_plugin_ping_desc">Pingek küldése és fogadása</string>
<string name="pref_plugin_notifications">Értesítés szinkronizáció</string>
<string name="pref_plugin_notifications_desc">Hozzáférés az értesítésekhez más eszközökről</string>
<string name="plugin_not_available">Ez a funkció nem érhető el az ön Android verziójában</string>
<string name="device_list_empty">Nincsenek eszközök</string>
<string name="ok">OK</string>
<string name="cancel">Mégse</string>
@@ -40,31 +39,23 @@
<string name="category_connected_devices">Csatlakoztatott eszközök</string>
<string name="category_remembered_devices">Megjegyzett eszközök</string>
<string name="device_menu_unpair">Leválasztás</string>
<string name="device_not_reachable">A párosított eszköz nem érhető el</string>
<string name="unknown_device">Ismeretlen eszköz</string>
<string name="error_not_reachable">Az eszköz nem érhető el</string>
<string name="error_already_requested">A párosítás már kérve lett</string>
<string name="error_already_paired">Az eszköz már párosítva van</string>
<string name="error_could_not_send_package">Nem sikerült elküldeni a csomagot</string>
<string name="error_timed_out">Időtúllépés</string>
<string name="error_canceled_by_user">Megszakítva a felhasználó által</string>
<string name="error_canceled_by_other_peer">A másik partner megszakította</string>
<string name="error_invalid_key">Érvénytelen kulcs érkezett</string>
<string name="pair_requested">Párosítás kérve</string>
<string name="pairing_request_from">Párosítási kérés innen: %1s</string>
<string name="received_url_title">Hivatkozás érkezett innen: %1s</string>
<string name="received_url_text">Koppintson „%1s” megnyitásához</string>
<string name="received_file_text">Koppintson „%1s” megnyitásához</string>
<string name="tap_to_answer">Érintse meg a válaszhoz</string>
<string name="reconnect">Újracsatlakozás</string>
<string name="right_click">Jobb kattintás küldése</string>
<string name="middle_click">Középső kattintás küldése</string>
<string name="device_not_paired">Az eszköz nincs párosítva</string>
<string name="request_pairing">Párosítás kérése</string>
<string name="pairing_accept">Elfogadás</string>
<string name="pairing_reject">Elutasítás</string>
<string name="device">Eszköz</string>
<string name="pair_device">Eszköz párosítása</string>
<string name="mpris_play">Lejátszás</string>
<string name="mpris_previous">Előző</string>
<string name="mpris_rew">Visszatekerés</string>
@@ -78,11 +69,7 @@
<item>1 minute</item>
<item>2 minutes</item>
</string-array>
<string name="protocol_version_older">Ez az eszköz egy régi protokollverziót használ</string>
<string name="protocol_version_newer">Ez az eszköz egy újabb protokollverziót használ</string>
<string name="general_settings">Általános beállítások</string>
<string name="device_name">Eszköznév</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Érvénytelen eszköznév</string>
<string name="shareplugin_text_saved">Szöveg érkezett, elmentve a vágólapra</string>
</resources>

View File

@@ -3,23 +3,23 @@
<string name="kde_connect">KDE Connect</string>
<string name="foreground_notification_no_devices">Belum terkoneksi ke perangkat apa pun</string>
<string name="foreground_notification_devices">Terkoneksi ke: %s</string>
<string name="pref_plugin_telephony">Penotifikasi telepon</string>
<string name="pref_plugin_telephony">Penotifikasi ponsel</string>
<string name="pref_plugin_telephony_desc">Kirim notifikasi untuk panggilan yang masuk</string>
<string name="pref_plugin_battery">Laporan baterai</string>
<string name="pref_plugin_battery_desc">Status baterai laporkan secara berkala</string>
<string name="pref_plugin_sftp">Menyingkap sistem file</string>
<string name="pref_plugin_sftp_desc">Membolehkan menelusuri sistem file perangkat ini secara jarak jauh</string>
<string name="pref_plugin_clipboard">Sinkron clipboard</string>
<string name="pref_plugin_clipboard_desc">Berbagi konten clipboard</string>
<string name="pref_plugin_clipboard_desc">Berbagi konten papan-klip</string>
<string name="pref_plugin_mousepad">Input jarak jauh</string>
<string name="pref_plugin_mousepad_desc">Gunakan telepon atau tabletmu sebagai touchpad dan keyboard</string>
<string name="pref_plugin_mousepad_desc">Gunakan ponsel atau tabletmu sebagai touchpad dan keyboard</string>
<string name="pref_plugin_presenter_desc">Gunakan perangkatmu untuk mengubah slide dalam sebuah presentasi</string>
<string name="pref_plugin_remotekeyboard">Terima penekanan tuts jarak jauh</string>
<string name="pref_plugin_remotekeyboard_desc">Terima peristiwa tekan-tuts dari perangkat jarak jauh</string>
<string name="pref_plugin_mpris">Kendalikan multimedia</string>
<string name="pref_plugin_mpris_desc">Menyediakan sebuah kendali jarak jauh untuk player mediamu</string>
<string name="pref_plugin_mpris_desc">Menyediakan sebuah kendali jarak jauh untuk pemutar mediamu</string>
<string name="pref_plugin_runcommand">Jalankan Perintah</string>
<string name="pref_plugin_runcommand_desc">Pemicu perintah jarak jauh dari telepon dan tablet-mu</string>
<string name="pref_plugin_runcommand_desc">Pemicu perintah jarak jauh dari ponsel dan tablet-mu</string>
<string name="pref_plugin_contacts">Penyinkron Kontak</string>
<string name="pref_plugin_contacts_desc">Bolehkan menyinkronkan buku kontak pada perangkat</string>
<string name="pref_plugin_ping">Ping</string>
@@ -30,13 +30,12 @@
<string name="pref_plugin_receive_notifications_desc">Terima notifikasi dari perangkat lain dan menampilkannya pada Android</string>
<string name="pref_plugin_sharereceiver">Kirim dan terima</string>
<string name="pref_plugin_sharereceiver_desc">Berbagi file-file dan URL-URL antara perangkat</string>
<string name="plugin_not_available">Fitur ini tidak tersedia dalam versi Android-mu</string>
<string name="device_list_empty">Tidak ada perangkat</string>
<string name="ok">Oke</string>
<string name="cancel">Batal</string>
<string name="open_settings">Buka setelan</string>
<string name="open_settings">Buka pengaturan</string>
<string name="no_permissions">Kamu perlu mengabulkan perizinan untuk mengakses notifikasi</string>
<string name="no_permission_mprisreceiver">Untuk dapat mengendalikan player mediamu kamu perlu mengabulkan akses ke notifikasi</string>
<string name="no_permission_mprisreceiver">Untuk dapat mengendalikan pemutar mediamu kamu perlu mengabulkan akses ke notifikasi</string>
<string name="send_ping">Kirim ping</string>
<string name="open_mpris_controls">Kendali multimedia</string>
<string name="remotekeyboard_editing_only_title">Menangani tuts jarak jauh hanya ketika mengedit</string>
@@ -45,9 +44,9 @@
<string name="remotekeyboard_multiple_connections">Ada lebih dari satu koneksi keyboard jarak jauh, pilihlah perangkat untuk mengkonfigurasi</string>
<string name="open_mousepad">Input jarak jauh</string>
<string name="mousepad_info">Pindah jari pada layar untuk memindah kursor mouse. Ketuk untuk klik, dan gunakan dua/tiga jari untuk tombol kanan dan tengah. Gunakan 2 jari untuk menggulir. Gunakan tekan lama untuk seret dan taruh.</string>
<string name="mousepad_double_tap_settings_title">Setel aksi ketuk dua jari</string>
<string name="mousepad_triple_tap_settings_title">Setel aksi ketuk tiga jari</string>
<string name="mousepad_sensitivity_settings_title">Setel kepekaan touchpad</string>
<string name="mousepad_double_tap_settings_title">Set aksi ketuk dua jari</string>
<string name="mousepad_triple_tap_settings_title">Set aksi ketuk tiga jari</string>
<string name="mousepad_sensitivity_settings_title">Set kepekaan touchpad</string>
<string name="mousepad_scroll_direction_title">Arah Menggulir Terbalik</string>
<string-array name="mousepad_tap_entries">
<item>Klik kanan</item>
@@ -72,27 +71,22 @@
<string name="category_connected_devices">Perangkat terkoneksi</string>
<string name="category_not_paired_devices">Perangkat tersedia</string>
<string name="category_remembered_devices">Perangkat teringat</string>
<string name="device_menu_plugins">Setelan plugin</string>
<string name="device_menu_plugins">Pengesetan plugin</string>
<string name="device_menu_unpair">Leraikan</string>
<string name="device_not_reachable">Menyandingkan perangkat tidak dapat dicapai</string>
<string name="pair_new_device">Sandingkan perangkat baru</string>
<string name="unknown_device">Perangkat tak diketahui</string>
<string name="error_not_reachable">Perangkat tidak dapat dicapai</string>
<string name="error_already_requested">Penyandingan sudah diminta</string>
<string name="error_already_paired">Perangkat sudah disandingkan</string>
<string name="error_could_not_send_package">Tidak dapat mengirim paket</string>
<string name="error_timed_out">Waktu habis</string>
<string name="error_canceled_by_user">Dibatalkan oleh pengguna</string>
<string name="error_canceled_by_other_peer">Dibatalkan oleh kawan lain</string>
<string name="error_invalid_key">Diterima kunci yang tak absah</string>
<string name="encryption_info_title">Info Enkripsi</string>
<string name="encryption_info_msg_no_ssl">Perangkat lain tidaklah menggunakan KDE Connect yang berversi saat ini, menggunakan metode enkripsi kuno.</string>
<string name="my_device_fingerprint">Sidik jari SHA1 pada sertifikat perangkatmu adalah:</string>
<string name="remote_device_fingerprint">Sidik jari SHA1 pada sertifikat perangkat jarak jauh adalah:</string>
<string name="pair_requested">Meminta sanding</string>
<string name="pairing_request_from">Minta penyandingan dari %1s</string>
<string name="received_url_title">Tautan diterima dari %1s</string>
<string name="received_url_text">Ketuk untuk membuka \'%1s\'</string>
<plurals name="incoming_file_title">
<item quantity="other">Menerima %1$d file dari %2$s</item>
</plurals>
@@ -108,7 +102,6 @@
<string name="received_file_text">Ketuk untuk membuka \'%1s\'</string>
<string name="cannot_create_file">Gak bisa menciptakan file %s</string>
<string name="tap_to_answer">Ketuk untuk menjawab</string>
<string name="reconnect">Sambung-ulang</string>
<string name="right_click">Kirim Klik Kanan</string>
<string name="middle_click">Kirim Klik Tengah</string>
<string name="show_keyboard">Tampilkan Keyboard</string>
@@ -116,19 +109,16 @@
<string name="request_pairing">Minta penyandingan</string>
<string name="pairing_accept">Setujui</string>
<string name="pairing_reject">Apkir</string>
<string name="device">Perangkat</string>
<string name="pair_device">Sandingkan perangkat</string>
<string name="settings">Setelan</string>
<string name="mpris_play">Mainkan</string>
<string name="settings">Pengaturan</string>
<string name="mpris_play">Putarkan</string>
<string name="mpris_pause">Jeda</string>
<string name="mpris_previous">Sebelumnya</string>
<string name="mpris_rew">Mundur-cepat</string>
<string name="mpris_ff">Maju-capat</string>
<string name="mpris_next">Selanjutnya</string>
<string name="mpris_volume">Volume</string>
<string name="mpris_settings">Setelan Multimedia</string>
<string name="mpris_time_settings_title">Tombol mundur-cepat/maju-cepat</string>
<string name="mpris_time_settings_summary">Setel waktu untuk mempercepat mundur/maju ketika ditekan</string>
<string name="mpris_time_settings_summary">Sesuaikan waktu untuk mempercepat mundur/maju ketika ditekan</string>
<string-array name="mpris_time_entries">
<item>10 detik</item>
<item>20 detik</item>
@@ -137,23 +127,16 @@
<item>2 menit</item>
</string-array>
<string name="mpris_notification_settings_title">Tampilkan notifikasi kendali media</string>
<string name="mpris_notification_settings_summary">Memungkinkan pengendalian player media-mu tanpa membuka KDE Connect</string>
<string name="mpris_notification_settings_summary">Memungkinkan pengendalian pemutar media-mu tanpa membuka KDE Connect</string>
<string name="share_to">Berbagi Ke...</string>
<string name="protocol_version_older">Perangkat ini menggunakan sebuah versi protokol lawas</string>
<string name="protocol_version_newer">Perangkat ini menggunakan sebuah versi protokol baru</string>
<string name="general_settings">Setelan Umum</string>
<string name="plugin_settings">Setelan</string>
<string name="plugin_settings_with_name">Setelan %s</string>
<string name="device_name">Nama perangkat</string>
<string name="device_name_preference_summary">%s</string>
<string name="plugin_settings_with_name">Pengesetan %s</string>
<string name="invalid_device_name">Nama perangkat tak absah</string>
<string name="shareplugin_text_saved">Teks diterima, tersimpan ke clipboard</string>
<string name="shareplugin_text_saved">Teks diterima, tersimpan ke papan-klip</string>
<string name="custom_devices_settings">Kustom daftar perangkat</string>
<string name="pair_device_action">Sandingkan sebuah perangkat baru</string>
<string name="unpair_device_action">Leraikan %s</string>
<string name="custom_device_list">Tambahkan perangkat dengan IP</string>
<string name="share_notification_preference">Notifikasi bising</string>
<string name="share_notification_preference_summary">Getar dan mainkan suar ketika menerima sebuah file</string>
<string name="share_notification_preference_summary">Getar dan putarkan suara ketika menerima sebuah file</string>
<string name="share_destination_customize">Menyesuaikan tujuan direktori</string>
<string name="share_destination_customize_summary_disabled">File yang diterima akan muncul di Unduhan</string>
<string name="share_destination_customize_summary_enabled">File akan disimpan di dalam direktori di bawah ini</string>
@@ -162,54 +145,51 @@
<string name="share_received_file">Bagikan \"%s\"</string>
<string name="title_activity_notification_filter">Filter notifikasi</string>
<string name="filter_apps_info">Notifikasi akan disinkronkan terhadap apl terpilih.</string>
<string name="sftp_internal_storage">Penyimpanan internal</string>
<string name="sftp_sdcard_num">Kartu SD %d</string>
<string name="sftp_sdcard">Kartu SD</string>
<string name="sftp_readonly">(hanya baca)</string>
<string name="sftp_camera">Gambar kamera</string>
<string name="add_host">Tambahkan host/IP</string>
<string name="no_players_connected">Tidak ada player yang ditemukan</string>
<string name="mpris_player_on_device">%1$s pada %2$s</string>
<string name="no_players_connected">Tidak ada pemutar yang ditemukan</string>
<string name="send_files">Kirim file</string>
<string name="pairing_title">Perangkat KDE Connect</string>
<string name="pairing_description">Perangkat lain menjalankan KDE Connect dalam jaringanmu yang sama yang seharusnya muncul di sini.</string>
<string name="device_paired">Perangkat disandingkan</string>
<string name="device_rename_title">Ubah nama perangkat</string>
<string name="device_rename_confirm">Ubah Nama</string>
<string name="refresh">Segarkan</string>
<string name="unreachable_description">Perangkat yang disandingkan ini tidak dapat dicapai. Pastikan ia terkoneksi ke jaringanmu yang sama.</string>
<string name="on_data_message">Nampaknya kamu berada pada koneksi data seluler. KDE Connect hanya bekerja pada jaringan lokal.</string>
<string name="no_file_browser">Tidak adanya penelusur file yang terinstal.</string>
<string name="pref_plugin_telepathy">Kirim SMS</string>
<string name="pref_plugin_telepathy_desc">Kirim teks perpesanan dari desktopmu</string>
<string name="plugin_not_supported">Plugin ini tidaklah didukung oleh perangkat</string>
<string name="findmyphone_title">Temukan teleponku</string>
<string name="findmyphone_title">Temukan ponselku</string>
<string name="findmyphone_title_tablet">Temukan tabletku</string>
<string name="findmyphone_title_tv">Temukan TV-ku</string>
<string name="findmyphone_description">Deringkan perangkat ini sehingga kamu bisa menemukannya</string>
<string name="findmyphone_found">Ketemu</string>
<string name="open">Buka</string>
<string name="close">Tutup</string>
<string name="no_permissions_storage">Kamu perlu mengabulkan perizinan untuk mengakses penyimpanan</string>
<string name="plugins_need_permission">Beberapa plugin perlu perizinan untuk kerja (ketuk untuk info selebihnya):</string>
<string name="permission_explanation">Plugin ini perlu perizinan untuk kerja</string>
<string name="optional_permission_explanation">Kamu perlu mengabulkan perizinan extra untuk memfungsikan semua fungsian</string>
<string name="plugins_need_optional_permission">Beberapa plugin yang memiliki fitur dinonfungsikan karena kurangnya perizinan (ketuk untuk info selebihnya):</string>
<string name="share_optional_permission_explanation">Untuk membagikan file antara teleponmu dan desktopmu kamu harus memberikan akses ke penyimpanan teleponmu</string>
<string name="telepathy_permission_explanation">Untuk membaca dan menulis SMS dari desktopmu kamu harus memberikan perizinan untuk SMS</string>
<string name="telephony_optional_permission_explanation">Untuk melihat nama kontak alih-alih nomor telepon, kamu harus memberikan akses ke kontak telepon</string>
<string name="telephony_permission_explanation">Untuk melihat panggilan ponsel pada desktop kamu harus memberikan perizinan untuk log panggilan ponsel dan keadaan ponsel</string>
<string name="telephony_optional_permission_explanation">Untuk melihat nama kontak alih-alih nomor ponsel, kamu harus memberikan akses ke kontak ponsel</string>
<string name="contacts_permission_explanation">Untuk membagikan buku kontak dengan desktopmu, kamu harus memberikan perizinan kontak</string>
<string name="select_ringtone">Pilih sebuah ringtone</string>
<string name="telephony_pref_blocked_title">Nomor yang diblokir</string>
<string name="telephony_pref_blocked_dialog_desc">Jangan tampilkan panggilan dan SMS dari nomor tersebut. Silakan tentukan satu nomor tiap baris</string>
<string name="mpris_coverart_description">Seni sampul media saat ini</string>
<string name="device_icon_description">Ikon perangkat</string>
<string name="settings_icon_description">Ikon setelan</string>
<string name="settings_icon_description">Ikon pengaturan</string>
<string name="add_command">Tambahkan sebuah perintah</string>
<string name="addcommand_explanation">Tidak ada perintah yang diregister</string>
<string name="addcommand_explanation2">"Kamu bisa menambahkan perintah baru dalam System Settings KDE Connect "</string>
<string name="add_command_description">Kamu bisa menambahkan perintah pada desktop</string>
<string name="pref_plugin_mprisreceiver">Kendali Player Media</string>
<string name="pref_plugin_mprisreceiver_desc">Kendalikan player media teleponmu dari perangkat lainnya</string>
<string name="dark_theme">Tema gelap</string>
<string name="pref_plugin_mprisreceiver">Kendali Pemutar Media</string>
<string name="pref_plugin_mprisreceiver_desc">Kendalikan pemutar media ponselmu dari perangkat lainnya</string>
<string name="devices">Perangkat</string>
<string name="settings_rename">Nama perangkat</string>
<string name="settings_dark_mode">Tema gelap</string>
<string name="settings_more_settings_title">Pengaturan selebihnya</string>
</resources>

View File

@@ -31,7 +31,6 @@
<string name="pref_plugin_receive_notifications_desc">Ricevi notifiche da altri dispositivi e le visualizza su Android</string>
<string name="pref_plugin_sharereceiver">Condividi e ricevi</string>
<string name="pref_plugin_sharereceiver_desc">Condividi file e URL tra i dispositivi</string>
<string name="plugin_not_available">Questa funzionalità non è disponibile sulla tua versione di Android</string>
<string name="device_list_empty">Nessun dispositivo</string>
<string name="ok">OK</string>
<string name="cancel">Annulla</string>
@@ -77,25 +76,20 @@
<string name="category_remembered_devices">Dispositivi memorizzati</string>
<string name="device_menu_plugins">Impostazioni estensioni</string>
<string name="device_menu_unpair">Disassocia</string>
<string name="device_not_reachable">Dispositivo associato non raggiungibile</string>
<string name="pair_new_device">Associa nuovo dispositivo</string>
<string name="unknown_device">Dispositivo sconosciuto</string>
<string name="error_not_reachable">Dispositivo fuori portata</string>
<string name="error_already_requested">Richiesta già inviata</string>
<string name="error_already_paired">Dispositivo già associato</string>
<string name="error_could_not_send_package">Impossibile inviare i dati</string>
<string name="error_timed_out">Richiesta scaduta</string>
<string name="error_canceled_by_user">Annullata dall\'utente</string>
<string name="error_canceled_by_other_peer">Annullata dal dispositivo remoto</string>
<string name="error_invalid_key">Ricevuta chiave non valida</string>
<string name="encryption_info_title">Informazioni di cifratura</string>
<string name="encryption_info_msg_no_ssl">L\'altro dispositivo non utilizza una versione recente di KDE Connect, utilizzando il metodo di cifratura precedente.</string>
<string name="my_device_fingerprint">L\'impronta digitale SHA1 del certificato di dispositivo è:</string>
<string name="remote_device_fingerprint">L\'impronta digitale SHA1 del certificato di dispositivo remoto è:</string>
<string name="pair_requested">Richiesta di associazione</string>
<string name="pairing_request_from">Richiesta associazione da %1s</string>
<string name="received_url_title">Collegamento ricevuto da %1s</string>
<string name="received_url_text">Tocca per aprire «%1s»</string>
<plurals name="incoming_file_title">
<item quantity="one">Ricezione di %1$d file da %2$s</item>
<item quantity="other">Ricezione di %1$d file da %2$s</item>
@@ -131,7 +125,6 @@
<string name="received_file_text">Tocca per aprire «%1s»</string>
<string name="cannot_create_file">Impossibile creare il file %s</string>
<string name="tap_to_answer">Tocca per rispondere</string>
<string name="reconnect">Riconnetti</string>
<string name="right_click">Invia clic tasto destro</string>
<string name="middle_click">Invia clic tasto centrale</string>
<string name="show_keyboard">Mostra tastiera</string>
@@ -139,8 +132,6 @@
<string name="request_pairing">Richiedi associazione</string>
<string name="pairing_accept">Accetta</string>
<string name="pairing_reject">Rifiuta</string>
<string name="device">Dispositivo</string>
<string name="pair_device">Associa dispositivo</string>
<string name="settings">Impostazioni</string>
<string name="mpris_play">Riproduci</string>
<string name="mpris_pause">Pausa</string>
@@ -149,7 +140,6 @@
<string name="mpris_ff">Avanti veloce</string>
<string name="mpris_next">Successivo</string>
<string name="mpris_volume">Volume</string>
<string name="mpris_settings">Impostazioni multimediali</string>
<string name="mpris_time_settings_title">Pulsanti di avanzamento/riavvolgimento</string>
<string name="mpris_time_settings_summary">Regola l\'ora per avanzare rapidamente o riavvolgere in caso di pressione</string>
<string-array name="mpris_time_entries">
@@ -162,20 +152,12 @@
<string name="mpris_notification_settings_title">Mostra la notifica del controllo multimediale</string>
<string name="mpris_notification_settings_summary">Consenti di controllare i lettori multimediali senza aprire KDE Connect</string>
<string name="share_to">Condividi con…</string>
<string name="protocol_version_older">Questo dispositivo usa una vecchia versione del protocollo di rete</string>
<string name="protocol_version_newer">Questo dispositivo usa una nuova versione del protocollo di rete</string>
<string name="general_settings">Impostazioni generali</string>
<string name="plugin_settings">Impostazioni</string>
<string name="plugin_settings_with_name">Impostazioni di %s</string>
<string name="device_name">Nome dispositivo</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Nome dispositivo non valido</string>
<string name="shareplugin_text_saved">Testo ricevuto, salvato negli appunti</string>
<string name="custom_devices_settings">Elenco dispositivi personalizzati</string>
<string name="pair_device_action">Associa un nuovo dispositivo</string>
<string name="unpair_device_action">Disassocia %s</string>
<string name="custom_device_list">Aggiungi dispositivi per IP</string>
<string name="delete_custom_device">Vuoi eliminare %s?</string>
<string name="custom_device_deleted">Dispositivo personalizzato eliminato</string>
<string name="custom_device_list_help">Se il tuo dispositivo non è rilevato automaticamente, puoi aggiungere il suo indirizzo IP o il nome host facendo clic sul pulsante Azione</string>
<string name="custom_device_fab_hint">Aggiungi un dispositivo</string>
@@ -190,7 +172,6 @@
<string name="share_received_file">Condividi «%s»</string>
<string name="title_activity_notification_filter">Filtro delle notifiche</string>
<string name="filter_apps_info">Le notifiche saranno sincronizzate per le applicazioni selezionate.</string>
<string name="sftp_internal_storage">Archiviazione interna</string>
<string name="sftp_sdcard_num">Scheda SD %d</string>
<string name="sftp_sdcard">Scheda SD</string>
<string name="sftp_readonly">(sola lettura)</string>
@@ -215,23 +196,18 @@
<string name="sftp_no_sdcard_detected">Nessuna scheda SD rilevata</string>
<string name="sftp_no_storage_locations_configured">Nessuna posizione di archiviazione configurata</string>
<string name="sftp_saf_permission_explanation">Per accedere da remoto ai file, devi configurare posizioni di archiviazione</string>
<string name="add_host">Aggiungi host/IP</string>
<string name="add_host_hint">Nome host o IP</string>
<string name="no_players_connected">Nessun lettore trovato</string>
<string name="mpris_player_on_device">%1$s su %2$s</string>
<string name="send_files">Invia file</string>
<string name="pairing_title">Dispositivi KDE Connect</string>
<string name="pairing_description">Altri dispositivi che eseguono KDE Connect nella tua stessa rete dovrebbero apparire qui.</string>
<string name="device_paired">Dispositivo associato</string>
<string name="device_rename_title">Rinomina dispositivo</string>
<string name="device_rename_confirm">Rinomina</string>
<string name="refresh">Aggiorna</string>
<string name="unreachable_description">Questo dispositivo associato non è raggiungibile. Assicurati che sia connesso alla tua stessa rete.</string>
<string name="on_data_message">Sembra che tu stia utilizzando una connessione dati mobile. KDE Connect funziona solo su reti locali.</string>
<string name="no_wifi">Non sei connesso a una rete Wi-Fi, per cui non sarai in grado di vedere alcun dispositivo. Fai clic qui per abilitare il Wi-Fi.</string>
<string name="no_file_browser">Non ci sono navigatori di file installati.</string>
<string name="pref_plugin_telepathy">Invia SMS</string>
<string name="pref_plugin_telepathy_desc">Invia messaggi di testo dal tuo desktop</string>
<string name="plugin_not_supported">Questa estensione non è supportata dal dispositivo</string>
<string name="findmyphone_title">Trova il mio telefono</string>
<string name="findmyphone_title_tablet">Trova il mio tablet</string>
<string name="findmyphone_title_tv">Trova il mio televisore</string>
@@ -239,7 +215,6 @@
<string name="findmyphone_found">Trovato</string>
<string name="open">Apri</string>
<string name="close">Chiudi</string>
<string name="no_permissions_storage">Devi concedere i permessi per l\'accesso all\'archiviazione</string>
<string name="plugins_need_permission">Alcune estensioni hanno bisogno di permessi per funzionare (tocca per maggiori informazioni):</string>
<string name="permission_explanation">Questa estensione ha bisogno di permessi per funzionare</string>
<string name="optional_permission_explanation">Devi concedere permessi aggiuntivi per abilitare tutte le funzioni</string>
@@ -264,7 +239,6 @@
<string name="add_command_description">Puoi aggiungere comandi sul desktop</string>
<string name="pref_plugin_mprisreceiver">Controllo lettore multimediale</string>
<string name="pref_plugin_mprisreceiver_desc">Controlla i lettori multimediali del tuo telefono da un altro dispositivo</string>
<string name="dark_theme">Tema scuro</string>
<string name="notification_channel_default">Altre notifiche</string>
<string name="notification_channel_persistent">Indicatore persistente</string>
<string name="notification_channel_media_control">Controllo multimediale</string>
@@ -294,11 +268,12 @@
<string name="extra_options">Opzioni aggiuntive</string>
<string name="privacy_options">Opzioni di riservatezza</string>
<string name="set_privacy_options">Imposta le tue opzioni di riservatezza</string>
<string name="new_notification">Nuova notifica</string>
<string name="block_contents">Blocca i contenuti delle notifiche</string>
<string name="block_images">Blocca le immagini nelle notifiche</string>
<string name="notification_channel_receivenotification">Notifiche da altri dispositivi</string>
<string name="take_picture">Avvia fotocamera</string>
<string name="plugin_photo_desc">Avvia l\'applicazione della fotocamera per scattare e trasferire foto con facilità</string>
<string name="no_app_for_opening">Nessuna applicazione appropriata trovata per aprire questo file</string>
<string name="remote_keyboard_service">Tastiera remota di KDE Connect</string>
<string name="presenter_pointer">Puntatore</string>
</resources>

View File

@@ -1,5 +1,6 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="kde_connect">KDE Connect</string>
<string name="foreground_notification_no_devices">デバイスに接続されていません</string>
<string name="foreground_notification_devices">接続済み: %s</string>
<string name="pref_plugin_telephony">電話通知</string>
@@ -15,11 +16,14 @@
<string name="pref_plugin_presenter">リモートスライドショー</string>
<string name="pref_plugin_presenter_desc">あなたのデバイスを使ってプレゼンテーションのスライドを変更</string>
<string name="pref_plugin_remotekeyboard">リモートからキー入力を受信</string>
<string name="pref_plugin_remotekeyboard_desc">リモートデバイスからキーイベントを受信</string>
<string name="pref_plugin_mpris">マルチメディアの操作</string>
<string name="pref_plugin_mpris_desc">あなたのメディアプレーヤーへのリモート操作を提供します</string>
<string name="pref_plugin_runcommand">コマンドを実行</string>
<string name="pref_plugin_runcommand_desc">スマートフォンやタブレットからリモートコマンドを実行</string>
<string name="pref_plugin_contacts">連絡先の同期</string>
<string name="pref_plugin_contacts_desc">デバイスの連絡先の同期を許可</string>
<string name="pref_plugin_ping">Ping</string>
<string name="pref_plugin_ping_desc">Ping を送受信</string>
<string name="pref_plugin_notifications">通知の同期</string>
<string name="pref_plugin_notifications_desc">他のデバイスから通知にアクセス</string>
@@ -27,15 +31,19 @@
<string name="pref_plugin_receive_notifications_desc">他のデバイスから通知を受信し、Android に表示します</string>
<string name="pref_plugin_sharereceiver">共有と受信</string>
<string name="pref_plugin_sharereceiver_desc">デバイス間でファイルと URL を共有</string>
<string name="plugin_not_available">この機能はあなたの Android バージョンでは利用できません</string>
<string name="device_list_empty">デバイスなし</string>
<string name="ok">OK</string>
<string name="cancel">キャンセル</string>
<string name="open_settings">設定を開く</string>
<string name="no_permissions">通知にアクセスするには権限を許可する必要があります</string>
<string name="no_permission_mprisreceiver">メディアプレーヤーを操作するためには、通知へのアクセスを許可する必要があります</string>
<string name="no_permissions_remotekeyboard">キー入力を受信するには KDE Connect リモートキーボードをアクティブ化する必要があります</string>
<string name="send_ping">Ping を送信</string>
<string name="open_mpris_controls">マルチメディアの操作</string>
<string name="remotekeyboard_editing_only_title">編集中にのみリモートキーを取り扱う</string>
<string name="remotekeyboard_not_connected">有効なリモートキーボード接続がありません。KDE Connect で確立してください</string>
<string name="remotekeyboard_connected">リモートキーボード接続はアクティブです</string>
<string name="remotekeyboard_multiple_connections">一つ以上のリモートキーボード接続があります。設定するデバイスを選択してください</string>
<string name="open_mousepad">リモート入力</string>
<string name="mousepad_info">スクリーン上で指を動かしてマウスカーソルを移動します。タップはクリックとなり、2/3本指で右クリック、中クリックとなります。2本指を使ってスクロールが可能です。長押しすることでドラッグ&amp;ドロップできます。</string>
<string name="mousepad_double_tap_settings_title">2本指タップのアクションを設定</string>
@@ -49,11 +57,11 @@
<item>なし</item>
</string-array>
<string-array name="mousepad_sensitivity_entries">
<item>Slowest</item>
<item>Above Slowest</item>
<item>最も遅く</item>
<item>遅め</item>
<item>デフォルト</item>
<item>Above Default</item>
<item>Fastest</item>
<item>デフォルト以上</item>
<item>高速</item>
</string-array>
<string-array name="mousepad_acceleration_profile_entries">
<item>加速なし</item>
@@ -65,24 +73,23 @@
</string-array>
<string name="category_connected_devices">接続済みのデバイス</string>
<string name="category_not_paired_devices">利用可能なデバイス</string>
<string name="category_remembered_devices">ペアリング済みのデバイス</string>
<string name="device_menu_plugins">プラグイン設定</string>
<string name="device_menu_unpair">ペアリング解除</string>
<string name="device_not_reachable">ペアリング済みのデバイスに到達できません</string>
<string name="pair_new_device">新しいデバイスをペアリング</string>
<string name="unknown_device">不明なデバイス</string>
<string name="error_not_reachable">デバイス到達不可です</string>
<string name="error_already_requested">ペアリングは既に要求済みです</string>
<string name="error_not_reachable">デバイス到達できません</string>
<string name="error_already_paired">デバイスは既にペアリング済みです</string>
<string name="error_could_not_send_package">パッケージを送信できませんでした</string>
<string name="error_timed_out">タイムアウト</string>
<string name="error_canceled_by_user">ユーザにキャンセルされました</string>
<string name="error_canceled_by_other_peer">他のピアにキャンセルされました</string>
<string name="error_invalid_key">不正なキーを受信しました</string>
<string name="encryption_info_title">暗号化情報</string>
<string name="encryption_info_msg_no_ssl">他のデバイスは最近のバージョンの KDE Connect を利用していません。古い暗号化方式を使用しています</string>
<string name="my_device_fingerprint">このデバイスの証明書の SHA1 フィンガープリント:</string>
<string name="remote_device_fingerprint">リモートデバイスの証明書の SHA1 フィンガープリント:</string>
<string name="pair_requested">ペアリング要求済み</string>
<string name="pairing_request_from">%1s からペアリングを要求されました</string>
<string name="received_url_title">%1s からリンクを受信</string>
<string name="received_url_text">タップして \'%1s\' を開く</string>
<plurals name="incoming_file_title">
<item quantity="other">%1$d ファイルを %2$s から受信しています</item>
</plurals>
@@ -104,9 +111,12 @@
<plurals name="sent_files_title">
<item quantity="other">%1$s にファイルを送信済み</item>
</plurals>
<plurals name="send_files_fail_title">
<item quantity="other">%1$s へのファイル送信に失敗</item>
</plurals>
<string name="received_file_text">タップして \'%1s\' を開く</string>
<string name="cannot_create_file">ファイル %s を作成できません</string>
<string name="tap_to_answer">タップして応答</string>
<string name="reconnect">再接続</string>
<string name="right_click">右クリックを送信</string>
<string name="middle_click">中クリックを送信</string>
<string name="show_keyboard">キーボードを表示</string>
@@ -114,16 +124,14 @@
<string name="request_pairing">ペアリングを要求</string>
<string name="pairing_accept">許可</string>
<string name="pairing_reject">拒否</string>
<string name="device">デバイス</string>
<string name="pair_device">デバイスをペアリング</string>
<string name="settings">設定</string>
<string name="mpris_play">再生</string>
<string name="mpris_pause">一時停止</string>
<string name="mpris_previous">前へ</string>
<string name="mpris_rew">巻き戻し</string>
<string name="mpris_ff">早送り</string>
<string name="mpris_next">次へ</string>
<string name="mpris_volume">音量</string>
<string name="mpris_settings">マルチメディアの設定</string>
<string name="mpris_time_settings_title">早送り/巻き戻しボタン</string>
<string name="mpris_time_settings_summary">押した時に早送り/巻き戻しする時間を調整</string>
<string-array name="mpris_time_entries">
@@ -136,17 +144,14 @@
<string name="mpris_notification_settings_title">メディア操作の通知を表示</string>
<string name="mpris_notification_settings_summary">KDE Connect を開かずにメディアプレーヤーをコントロール可能にします</string>
<string name="share_to">共有先...</string>
<string name="protocol_version_older">このデバイスは古いプロトコルバージョンを使用しています</string>
<string name="protocol_version_newer">このデバイスはより新しいプロトコルバージョンを使用しています</string>
<string name="general_settings">全般設定</string>
<string name="plugin_settings">設定</string>
<string name="plugin_settings_with_name">%s 設定</string>
<string name="device_name">デバイス名</string>
<string name="invalid_device_name">不正なデバイス名</string>
<string name="pair_device_action">新しいデバイスをペアリング</string>
<string name="unpair_device_action">%s をペアリング解除</string>
<string name="shareplugin_text_saved">テキストを受信し、クリップボードに保存しました</string>
<string name="custom_devices_settings">カスタムデバイスリスト</string>
<string name="custom_device_list">IP アドレスでデバイスを追加</string>
<string name="delete_custom_device">%s を削除しますか?</string>
<string name="custom_device_deleted">カスタムデバイスが削除されました</string>
<string name="custom_device_list_help">もしデバイスが自動的に検出されない場合、フローティングアクションボタンを押して手動で IP アドレスやホストネームを追加できます</string>
<string name="custom_device_fab_hint">デバイスを追加</string>
<string name="undo">元に戻す</string>
<string name="share_notification_preference">うるさい通知</string>
@@ -159,16 +164,20 @@
<string name="share_received_file">\"%s\" を共有</string>
<string name="title_activity_notification_filter">通知フィルタ</string>
<string name="filter_apps_info">選択されたアプリケーションの通知が同期されます。</string>
<string name="sftp_internal_storage">内部ストレージ</string>
<string name="sftp_sdcard_num">SD カード %d</string>
<string name="sftp_sdcard">SD カード</string>
<string name="sftp_readonly">(読み取り専用)</string>
<string name="sftp_camera">カメラ画像</string>
<string name="add_device_dialog_title">デバイスを追加</string>
<string name="add_device_hint">ホスト名/IPアドレス</string>
<string name="sftp_preference_detected_sdcards">検出された SD カード</string>
<string name="sftp_preference_edit_sdcard_title">SD カードを編集</string>
<string name="sftp_preference_configured_storage_locations">設定されたストレージの場所</string>
<string name="sftp_preference_add_storage_location_title">ストレージの場所を追加</string>
<string name="sftp_preference_edit_storage_location">ストレージの場所を編集</string>
<string name="sftp_preference_add_camera_shortcut">カメラフォルダのショートカットを追加</string>
<string name="sftp_preference_add_camera_shortcut_summary_on">カメラフォルダへのショートカットを追加</string>
<string name="sftp_preference_add_camera_shortcut_summary_off">カメラフォルダのショートカットを追加しない</string>
<string name="sftp_storage_preference_storage_location">ストレージの場所</string>
<string name="sftp_storage_preference_storage_location_already_configured">この場所は既に設定されています</string>
<string name="sftp_storage_preference_click_to_select">クリックして選択</string>
@@ -179,21 +188,18 @@
<string name="sftp_no_sdcard_detected">SD カードが検出されません</string>
<string name="sftp_no_storage_locations_configured">ストレージの場所が設定されていません</string>
<string name="sftp_saf_permission_explanation">リモートからファイルにアクセスするには、ストレージの場所を設定する必要があります</string>
<string name="add_host_hint">ホスト名かIPアドレス</string>
<string name="no_players_connected">プレーヤーが見つかりませんでした</string>
<string name="send_files">ファイルを送信</string>
<string name="pairing_title">KDE Connect デバイス</string>
<string name="pairing_description">同じネットワーク内で KDE Connect を実行しているデバイスがここに表示されます</string>
<string name="device_paired">デバイス ペアリング済み</string>
<string name="device_rename_title">デバイス名を変更</string>
<string name="device_rename_confirm">名前変更</string>
<string name="refresh">更新</string>
<string name="unreachable_description">このペアリング済みデバイス到達不可です。同一のネットワーク内に 接続されていることを確認してください</string>
<string name="on_data_message">モバイルデータ接続を使用しているようです。KDE Connect はローカルネットワークでしか機能しません</string>
<string name="unreachable_description">このペアリング済みデバイス到達できません。同一のネットワーク内に 接続されていることを確認してください</string>
<string name="no_wifi">Wi-Fi ネットワークに接続していないため、デバイスが一つも表示されない可能性があります。ここをクリックして Wi-Fi を有効化</string>
<string name="no_file_browser">ファイルブラウザがインストールされていません</string>
<string name="pref_plugin_telepathy">SMS を送信</string>
<string name="pref_plugin_telepathy_desc">デスクトップからテキストメッセージを送信</string>
<string name="plugin_not_supported">このプラグインはデバイスにサポートされていません</string>
<string name="findmyphone_title">スマートフォンを捜索</string>
<string name="findmyphone_title_tablet">タブレットを捜索</string>
<string name="findmyphone_title_tv">TV を捜索</string>
@@ -201,13 +207,13 @@
<string name="findmyphone_found">発見</string>
<string name="open">開く</string>
<string name="close">閉じる</string>
<string name="no_permissions_storage">ストレージにアクセスするには権限を許可する必要があります</string>
<string name="plugins_need_permission">いくつかのプラグインが機能するには権限が必要です (タップして詳細情報を表示):</string>
<string name="permission_explanation">このプラグインが機能するには権限が必要です</string>
<string name="optional_permission_explanation">すべての機能を有効にするには、追加の権限を許可する必要があります</string>
<string name="plugins_need_optional_permission">権限が不足しているため、いくつかのプラグインの機能は無効化されています (タップして詳細情報を表示):</string>
<string name="share_optional_permission_explanation">スマートフォンとデスクトップ間でファイルを共有するには、端末のストレージへのアクセスを許可する必要があります</string>
<string name="telepathy_permission_explanation">デスクトップから SMS を送受信するには SMS の権限を付与する必要があります</string>
<string name="telephony_permission_explanation">デスクトップで通話を表示するために、電話の状態と通話履歴の権限を許可する必要があります</string>
<string name="telephony_optional_permission_explanation">電話番号ではなく連絡先名を見るには、端末の連絡先へのアクセスを許可する必要があります</string>
<string name="contacts_permission_explanation">連絡先をデスクトップと共有するために、連絡先の権限が必要です</string>
<string name="select_ringtone">着信音を選択</string>
@@ -224,8 +230,6 @@
<string name="addcommand_explanation2">KDE Connect のシステム設定で新しいコマンドを追加できます</string>
<string name="add_command_description">デスクトップから新しいコマンドを追加できます</string>
<string name="pref_plugin_mprisreceiver">メディアプレーヤーの操作</string>
<string name="pref_plugin_mprisreceiver_desc">他のデバイスからスマートフォンのメディアプレーヤーを操作</string>
<string name="dark_theme">ダーク テーマ</string>
<string name="notification_channel_default">他の通知</string>
<string name="notification_channel_persistent">永続的なインジケータ</string>
<string name="notification_channel_media_control">メディアの操作</string>
@@ -233,11 +237,13 @@
<string name="mpris_stop">現在のプレーヤーを停止</string>
<string name="copy_url_to_clipboard">URL をクリップボードにコピー</string>
<string name="clipboard_toast">クリップボードにコピーしました</string>
<string name="runcommand_notreachable">デバイス到達不可です</string>
<string name="runcommand_notreachable">デバイス到達できません</string>
<string name="runcommand_notpaired">デバイスはペアリングされていません</string>
<string name="runcommand_nosuchdevice">そのようなデバイスはありません</string>
<string name="runcommand_noruncommandplugin">このデバイスは \'コマンドを実行\' プラグインを有効にしていません</string>
<string name="pref_plugin_findremotedevice">リモートデバイスを捜索</string>
<string name="pref_plugin_findremotedevice_desc">リモートデバイスを捜索</string>
<string name="ring">鳴らす</string>
<string name="pref_plugin_systemvolume">システム音量</string>
<string name="pref_plugin_systemvolume_desc">リモートデバイスのシステム音量を操作</string>
<string name="mute">ミュート</string>
@@ -253,7 +259,12 @@
<string name="extra_options">追加オプション</string>
<string name="privacy_options">プライバシーオプション</string>
<string name="set_privacy_options">プライバシーオプションを設定</string>
<string name="new_notification">新しい通知</string>
<string name="block_contents">通知の内容をブロック</string>
<string name="block_images">通知の画像をブロック</string>
<string name="notification_channel_receivenotification">他のデバイスからの通知</string>
<string name="take_picture">カメラを起動</string>
<string name="plugin_photo_desc">素早く写真を撮り、転送するためにカメラを起動</string>
<string name="no_app_for_opening">このファイルを開くのに適切なアプリが見つかりません</string>
<string name="remote_keyboard_service">KDE Connect リモートキーボード</string>
<string name="presenter_pointer">ポインタ</string>
</resources>

View File

@@ -31,7 +31,6 @@
<string name="pref_plugin_receive_notifications_desc">다른 장치의 알림을 받아서 안드로이드 알림에 표시</string>
<string name="pref_plugin_sharereceiver">공유하고 받기</string>
<string name="pref_plugin_sharereceiver_desc">장치끼리 파일과 URL 공유</string>
<string name="plugin_not_available">현재 안드로이드 버전에서 사용할 수 없습니다</string>
<string name="device_list_empty">장치 없음</string>
<string name="ok">확인</string>
<string name="cancel">취소</string>
@@ -77,25 +76,20 @@
<string name="category_remembered_devices">기억하는 장치</string>
<string name="device_menu_plugins">플러그인 설정</string>
<string name="device_menu_unpair">연결 해제</string>
<string name="device_not_reachable">연결된 장치에 도달할 수 없음</string>
<string name="pair_new_device">새 장치 연결</string>
<string name="unknown_device">알 수 없는 장치</string>
<string name="error_not_reachable">장치에 접근할 수 없음</string>
<string name="error_already_requested">연결이 이미 요청됨</string>
<string name="error_already_paired">장치가 이미 연결됨</string>
<string name="error_could_not_send_package">패키지를 보낼 수 없음</string>
<string name="error_timed_out">시간 초과됨</string>
<string name="error_canceled_by_user">사용자가 취소함</string>
<string name="error_canceled_by_other_peer">다른 쪽에서 취소함</string>
<string name="error_invalid_key">잘못된 키 받음</string>
<string name="encryption_info_title">암호화 정보</string>
<string name="encryption_info_msg_no_ssl">다른 장치에서 KDE Connect의 최근 버전을 실행하고 있지 않아서 레거시 암호화를 사용합니다.</string>
<string name="my_device_fingerprint">내 장치 인증서의 SHA1 지문:</string>
<string name="remote_device_fingerprint">원격 장치 인증서의 SHA1 지문:</string>
<string name="pair_requested">연결 요청됨</string>
<string name="pairing_request_from">%1s에서 연결 요청</string>
<string name="received_url_title">%1s에서 링크 받음</string>
<string name="received_url_text">\'%1s\'을(를) 열려면 누르십시오</string>
<plurals name="incoming_file_title">
<item quantity="other">%2$s에서 보낸 파일 %1$d개 받음</item>
</plurals>
@@ -123,7 +117,6 @@
<string name="received_file_text">\'%1s\'을(를) 열려면 누르십시오</string>
<string name="cannot_create_file">파일 %s을(를) 만들 수 없음</string>
<string name="tap_to_answer">눌러서 응답하기</string>
<string name="reconnect">다시 연결</string>
<string name="right_click">오른쪽 단추 누름 신호 보내기</string>
<string name="middle_click">가운데 단추 누름 신호 보내기</string>
<string name="show_keyboard">키보드 보이기</string>
@@ -131,8 +124,6 @@
<string name="request_pairing">연결 요청</string>
<string name="pairing_accept">수락</string>
<string name="pairing_reject">거부</string>
<string name="device">장치</string>
<string name="pair_device">장치 연결</string>
<string name="settings">설정</string>
<string name="mpris_play">재생</string>
<string name="mpris_pause">일시 정지</string>
@@ -141,7 +132,6 @@
<string name="mpris_ff">빨리 감기</string>
<string name="mpris_next">다음</string>
<string name="mpris_volume">음량</string>
<string name="mpris_settings">멀티미디어 설정</string>
<string name="mpris_time_settings_title">되감기/빨리감기 단추</string>
<string name="mpris_time_settings_summary">눌렀을 때 되감거나 빨리 감을 시간 조정</string>
<string-array name="mpris_time_entries">
@@ -154,20 +144,12 @@
<string name="mpris_notification_settings_title">미디어 제어 알림 보이기</string>
<string name="mpris_notification_settings_summary">KDE Connect를 열지 않고 미디어 재생기 제어</string>
<string name="share_to">다음으로 공유…</string>
<string name="protocol_version_older">이 장치의 프로토콜 버전이 오래되었습니다</string>
<string name="protocol_version_newer">이 장치의 프로토콜 버전이 더 새롭습니다</string>
<string name="general_settings">일반 설정</string>
<string name="plugin_settings">설정</string>
<string name="plugin_settings_with_name">%s 설정</string>
<string name="device_name">장치 이름</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">잘못된 장치 이름</string>
<string name="shareplugin_text_saved">텍스트 수신, 클립보드로 복사됨</string>
<string name="custom_devices_settings">사용자 정의 장치 목록</string>
<string name="pair_device_action">새 장치 연결</string>
<string name="unpair_device_action">%s 연결 해제</string>
<string name="custom_device_list">IP로 장치 추가</string>
<string name="delete_custom_device">%s을(를) 삭제하시겠습니까?</string>
<string name="custom_device_deleted">사용자 정의 장치 삭제됨</string>
<string name="custom_device_list_help">장치가 자동으로 감지되지 않았다면 떠 다니는 동작 단추를 눌러서 IP 주소나 호스트 이름으로 장치를 수동으로 추가할 수 있습니다</string>
<string name="custom_device_fab_hint">장치 추가</string>
@@ -182,7 +164,6 @@
<string name="share_received_file">\"%s\" 공유</string>
<string name="title_activity_notification_filter">알림 필터</string>
<string name="filter_apps_info">선택한 앱의 알림을 동기화합니다.</string>
<string name="sftp_internal_storage">내부 저장소</string>
<string name="sftp_sdcard_num">SD 카드 %d</string>
<string name="sftp_sdcard">SD 카드</string>
<string name="sftp_readonly">(읽기 전용)</string>
@@ -207,23 +188,18 @@
<string name="sftp_no_sdcard_detected">SD 카드가 감지되지 않았음</string>
<string name="sftp_no_storage_locations_configured">저장소 위치가 설정되지 않았음</string>
<string name="sftp_saf_permission_explanation">원격으로 파일에 접근하려면 저장소 위치를 설정해야 함</string>
<string name="add_host">호스트/IP 주소 추가</string>
<string name="add_host_hint">호스트 이름이나 IP</string>
<string name="no_players_connected">재생기를 찾을 수 없음</string>
<string name="mpris_player_on_device">%2$s의 %1$s</string>
<string name="send_files">파일 보내기</string>
<string name="pairing_title">KDE Connect 장치</string>
<string name="pairing_description">같은 네트워크에서 KDE Connect를 실행하는 다른 장치가 여기에 표시됩니다.</string>
<string name="device_paired">장치 연결됨</string>
<string name="device_rename_title">장치 이름 바꾸기</string>
<string name="device_rename_confirm">이름 바꾸기</string>
<string name="refresh">새로 고침</string>
<string name="unreachable_description">이 연결된 장치에 접근할 수 없습니다. 같은 네트워크에 있는 지 확인하십시오.</string>
<string name="on_data_message">모바일 데이터 연결을 사용하고 있는 것 같습니다. KDE Connect는 로컬 네트워크에서만 작동합니다.</string>
<string name="unreachable_description">이 연결된 장치에 접근할 수 없습니다. 같은 네트워크에 있는지 확인하십시오.</string>
<string name="no_wifi">Wi-Fi 네트워크에 연결된 것 같지 않습니다. 다른 장치를 볼 수 없습니다. 여기를 누르면 Wi-Fi를 활성화합니다.</string>
<string name="no_file_browser">설치된 파일 탐색기가 없습니다.</string>
<string name="pref_plugin_telepathy">SMS 보내기</string>
<string name="pref_plugin_telepathy_desc">데스크톱에서 문자 메시지 보내기</string>
<string name="plugin_not_supported">장치에서 이 플러그인을 지원하지 않습니다</string>
<string name="findmyphone_title">내 휴대폰 찾기</string>
<string name="findmyphone_title_tablet">내 태블릿 찾기</string>
<string name="findmyphone_title_tv">내 TV 찾기</string>
@@ -231,7 +207,6 @@
<string name="findmyphone_found">찾았음</string>
<string name="open">열기</string>
<string name="close">닫기</string>
<string name="no_permissions_storage">저장소 접근 권한이 필요합니다</string>
<string name="plugins_need_permission">권한이 필요한 플러그인(정보를 보려면 누르기):</string>
<string name="permission_explanation">이 플러그인을 사용하려면 권한이 필요합니다</string>
<string name="optional_permission_explanation">모든 기능을 사용하려면 추가 권한이 필요합니다</string>
@@ -255,8 +230,7 @@
<string name="addcommand_explanation2">시스템 설정의 KDE Connect에서 새로운 명령을 추가할 수 있습니다</string>
<string name="add_command_description">데스크톱에서 명령을 추가할 수 있습니다</string>
<string name="pref_plugin_mprisreceiver">미디어 재생기 제어</string>
<string name="pref_plugin_mprisreceiver_desc">다른 장치에서 휴대폰 미디어 재생기 제어</string>
<string name="dark_theme">어두운 테마</string>
<string name="pref_plugin_mprisreceiver_desc">다른 장치에서 휴대폰 미디어 재생기 제어</string>
<string name="notification_channel_default">기타 알림</string>
<string name="notification_channel_persistent">항상 표시된 표시기</string>
<string name="notification_channel_media_control">미디어 제어</string>
@@ -286,11 +260,12 @@
<string name="extra_options">추가 설정</string>
<string name="privacy_options">프라이버시 설정</string>
<string name="set_privacy_options">프라이버시 설정 변경</string>
<string name="new_notification">새 알림</string>
<string name="block_contents">알림 내용 숨기기</string>
<string name="block_images">알림 이미지 숨기기</string>
<string name="notification_channel_receivenotification">다른 장치의 알림</string>
<string name="take_picture">카메라 실행</string>
<string name="plugin_photo_desc">카메라 앱을 실행하여 쉽게 사진을 찍고 전송</string>
<string name="no_app_for_opening">이 파일을 열 수 있는 앱을 찾을 수 없음</string>
<string name="remote_keyboard_service">KDE Connect 원격 키보드</string>
<string name="presenter_pointer">포인터</string>
</resources>

View File

@@ -1,75 +1,163 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="pref_plugin_telephony">Telefono žinutės ir skambučiai</string>
<string name="kde_connect">KDE Connect</string>
<string name="foreground_notification_no_devices">Neprisijungta prie jokio įrenginio</string>
<string name="foreground_notification_devices">Prisijungta prie: %s</string>
<string name="pref_plugin_telephony">Telefonijos pranešiklis</string>
<string name="pref_plugin_telephony_desc">Siųsti gaunamųjų skambučių pranešimus</string>
<string name="pref_plugin_battery">Akumuliatoriaus ataskaita</string>
<string name="pref_plugin_battery_desc">Periodiškai pranešti apie akumuliatoriaus būseną</string>
<string name="pref_plugin_sftp">Failų sistemos naršymas</string>
<string name="pref_plugin_sftp_desc">Leidžia nuotoliniu būdu naršyti šio įrenginio failų sistemą</string>
<string name="pref_plugin_clipboard">Iškarpinės sinchronizavimas</string>
<string name="pref_plugin_clipboard_desc">Bendrinti iškarpinės turinį</string>
<string name="pref_plugin_mousepad">Nuotolinis įvedimas</string>
<string name="pref_plugin_mousepad_desc">Naudoti savo telefoną ar planšetę kaip jutiklinį kilimėlį ir klaviatūrą</string>
<string name="pref_plugin_presenter">Nuotolinis skaidrių rodymas</string>
<string name="pref_plugin_presenter_desc">Naudoti savo įrenginį pateikties skaidrių keitimui</string>
<string name="pref_plugin_remotekeyboard">Gauti nuotolinius klavišų paspaudimus</string>
<string name="pref_plugin_remotekeyboard_desc">Gauti klavišų paspaudimo įvykius iš nuotolinių įrenginių</string>
<string name="pref_plugin_mpris">Įvairialypės terpės valdikliai</string>
<string name="pref_plugin_mpris_desc">Pateikia jūsų medijos leistuvės nuotolinį valdymą</string>
<string name="pref_plugin_runcommand">Vykdyti komandą</string>
<string name="pref_plugin_runcommand_desc">Paleisti nuotolines komandas iš savo telefono ar planšetės</string>
<string name="pref_plugin_contacts">Adresatų sinchronizavimas</string>
<string name="pref_plugin_contacts_desc">Leisti sinchronizuoti įrenginio adresatų knygą</string>
<string name="pref_plugin_ping">Ryšio patikrinimas</string>
<string name="pref_plugin_ping_desc">Siųsti ir gauti ryšio patikrinimus</string>
<string name="pref_plugin_notifications">Pranešimų sinchronizavimas</string>
<string name="pref_plugin_sharereceiver">Dalintis ir gauti</string>
<string name="device_list_empty">Įrenginių nerasta</string>
<string name="pref_plugin_notifications_desc">Gauti prieigą prie savo pranešimų iš kitų įrenginių</string>
<string name="pref_plugin_receive_notifications">Gauti pranešimus</string>
<string name="pref_plugin_receive_notifications_desc">Gauti pranešimus iš kito įrenginio ir rodyti juos Android įrenginyje</string>
<string name="pref_plugin_sharereceiver">Bendrinti ir gauti</string>
<string name="pref_plugin_sharereceiver_desc">Bendrinti failus ir URL adresus tarp įrenginių</string>
<string name="device_list_empty">Jokių įrenginių</string>
<string name="ok">Gerai</string>
<string name="cancel">Atšaukti</string>
<string name="open_settings">Atverti nuostatas</string>
<string name="cancel">Atsisakyti</string>
<string name="open_settings">Atverti nustatymus</string>
<string name="no_permissions">Norėdami gauti prieigą prie pranešimų, turite suteikti leidimą</string>
<string name="no_permission_mprisreceiver">Norėdami valdyti savo medijos leistuves, turite suteikti prieigą prie pranešimų</string>
<string name="no_permissions_remotekeyboard">Norėdami gauti klavišų paspaudimus, turite aktyvuoti KDE Connect nuotolinę klaviatūrą</string>
<string name="send_ping">Tikrinti ryšį</string>
<string name="open_mpris_controls">Garso ir vaizdo kūrinių grojimo valdymas</string>
<string name="open_mpris_controls">Įvairialypės terpės valdymas</string>
<string name="remotekeyboard_editing_only_title">Apdoroti nuotolinius klavišus tik redaguojant</string>
<string name="remotekeyboard_not_connected">Nėra jokio aktyvaus nuotolinės klaviatūros ryšio, užmegzkite jį naudodami kdeconnect</string>
<string name="remotekeyboard_connected">Nuotolinės klaviatūros ryšys yra aktyvus</string>
<string name="remotekeyboard_multiple_connections">Yra daugiau nei vienas nuotolinės klaviatūros ryšys, pasirinkite kurį įrenginį konfigūruoti</string>
<string name="open_mousepad">Nuotolinis įvedimas</string>
<string name="mousepad_info">Norėdami judinti pelės žymeklį, judinkite pirštu po ekraną. Bakstelėkite vienkartiniam spustelėjimui ir naudokite du/tris pirštus dešiniajam ir viduriniajam mygtukui. Naudokite 2 pirštus, norėdami slinkti. Naudokite ilgą paspaudimą, norėdami tempti.</string>
<string name="mousepad_double_tap_settings_title">Nustatyti bakstelėjimo dviem pirštais veiksmą</string>
<string name="mousepad_triple_tap_settings_title">Nustatyti bakstelėjimo trimis pirštais veiksmą</string>
<string name="mousepad_sensitivity_settings_title">Nustatyti jutiklinio kilimėlio jautrumą</string>
<string name="mousepad_acceleration_profile_settings_title">Nustatyti rodyklės pagreitį</string>
<string name="mousepad_scroll_direction_title">Apversti slinkimo kryptį</string>
<string-array name="mousepad_tap_entries">
<item>Right click</item>
<item>Middle click</item>
<item>Dešinysis spustelėjimas</item>
<item>Vidurinysis spustelėjimas</item>
<item>Nieko</item>
</string-array>
<string-array name="mousepad_sensitivity_entries">
<item>Slowest</item>
<item>Above Slowest</item>
<item>Default</item>
<item>Above Default</item>
<item>Fastest</item>
<item>Lėčiausias</item>
<item>Virš lėčiausio</item>
<item>Numatytasis</item>
<item>Virš numatytojo</item>
<item>Greičiausias</item>
</string-array>
<string-array name="mousepad_acceleration_profile_entries">
<item>No Acceleration</item>
<item>Weakest</item>
<item>Weaker</item>
<item>Medium</item>
<item>Stronger</item>
<item>Strongest</item>
<item>Jokio pagreičio</item>
<item>Silpniausias</item>
<item>Silpnesnis</item>
<item>Vidutinis</item>
<item>Stipresnis</item>
<item>Stipriausias</item>
</string-array>
<string name="category_connected_devices">Prijungti įrenginiai</string>
<string name="category_not_paired_devices">Pasiekiami įrenginiai</string>
<string name="category_remembered_devices">Įsimintieji įrenginiai</string>
<string name="device_menu_plugins">Papildinio nuostatos</string>
<string name="device_menu_unpair">Atrišti</string>
<string name="device_not_reachable">Nepavyksta pasiekti suporuoto įrenginio</string>
<string name="category_not_paired_devices">Prieinami įrenginiai</string>
<string name="category_remembered_devices">Įsiminti įrenginiai</string>
<string name="device_menu_plugins">Priedo nuostatos</string>
<string name="device_menu_unpair">Panaikinti suporavimą</string>
<string name="pair_new_device">Suporuoti naują įrenginį</string>
<string name="unknown_device">Nežinomas įrenginys</string>
<string name="error_not_reachable">Įrenginys nepasiekiamas</string>
<string name="error_already_requested">Jau paprašyta suporuoti</string>
<string name="error_already_paired">Įrenginys jau suporuotas</string>
<string name="error_could_not_send_package">Nepavyksta išsiųsti paketo</string>
<string name="error_timed_out">Skirtasis laikas baigėsi</string>
<string name="error_canceled_by_user">Naudotojas atšaukė užduotį</string>
<string name="error_canceled_by_other_peer">Porininkas atšaukė užduotį</string>
<string name="error_invalid_key">Gautas netinkamas raktas</string>
<string name="pair_requested">Paprašyta suporuoti</string>
<string name="tap_to_answer">Norėdami atsakyti, palieskite</string>
<string name="reconnect">Prisijungti iš naujo</string>
<string name="error_could_not_send_package">Nepavyko išsiųsti paketo</string>
<string name="error_timed_out">Pasibaigė skirtas laikas</string>
<string name="error_canceled_by_user">Naudotojas atsisakė</string>
<string name="error_canceled_by_other_peer">Lygiarangis atsisakė</string>
<string name="encryption_info_title">Šifravimo informacija</string>
<string name="encryption_info_msg_no_ssl">Kitas įrenginys nenaudoja paskiausios KDE Connect versijos, naudojamas pasenęs šifravimo metodas.</string>
<string name="my_device_fingerprint">Jūsų įrenginio liudijimo SHA1 kontrolinis kodas yra:</string>
<string name="remote_device_fingerprint">Nuotolinio įrenginio liudijimo SHA1 kontrolinis kodas yra:</string>
<string name="pair_requested">Užklaustas suporavimas</string>
<string name="pairing_request_from">Suporavimo užklausa iš %1s</string>
<plurals name="incoming_file_title">
<item quantity="one">Gaunamas %1$d failas iš %2$s</item>
<item quantity="few">Gaunami %1$d failai iš %2$s</item>
<item quantity="many">Gaunama %1$d failų iš %2$s</item>
<item quantity="other">Gaunamas %1$d failas iš %2$s</item>
</plurals>
<plurals name="incoming_files_text">
<item quantity="one">Failas: %1s</item>
<item quantity="few">(Failas %2$d iš %3$d) : %1$s</item>
<item quantity="many">(Failas %2$d iš %3$d) : %1$s</item>
<item quantity="other">(Failas %2$d iš %3$d) : %1$s</item>
</plurals>
<plurals name="outgoing_file_title">
<item quantity="one">Siunčiamas %1$d failas į %2$s</item>
<item quantity="few">Siunčiami %1$d failai į %2$s</item>
<item quantity="many">Siunčiama %1$d failų į %2$s</item>
<item quantity="other">Siunčiamas %1$d failas į %2$s</item>
</plurals>
<plurals name="outgoing_files_text">
<item quantity="one">Failas: %1$s</item>
<item quantity="few">(Failas %2$d iš %3$d) : %1$s</item>
<item quantity="many">(Failas %2$d iš %3$d) : %1$s</item>
<item quantity="other">(Failas %2$d iš %3$d) : %1$s</item>
</plurals>
<plurals name="received_files_title">
<item quantity="one">Gautas failas iš %1$s</item>
<item quantity="few">Gauti %2$d failai iš %1$s</item>
<item quantity="many">Gauta %2$d failų iš %1$s</item>
<item quantity="other">Gautas %2$d failas iš %1$s</item>
</plurals>
<plurals name="received_files_fail_title">
<item quantity="one">Nepavyko gauti failo iš %1$s</item>
<item quantity="few">Nepavyko gauti %2$d iš %3$d failų iš %1$s</item>
<item quantity="many">Nepavyko gauti %2$d iš %3$d failų iš %1$s</item>
<item quantity="other">Nepavyko gauti %2$d iš %3$d failo iš %1$s</item>
</plurals>
<plurals name="sent_files_title">
<item quantity="one">Failas išsiųstas į %1$s</item>
<item quantity="few">Išsiųsti %2$d failai į %1$s</item>
<item quantity="many">Išsiųsta %2$d failų į %1$s</item>
<item quantity="other">Išsiųstas %2$d failas į %1$s</item>
</plurals>
<plurals name="send_files_fail_title">
<item quantity="one">Nepavyko išsiųsti failo į %1$s</item>
<item quantity="few">Nepavyko išsiųsti %2$d iš %3$d failų į %1$s</item>
<item quantity="many">Nepavyko išsiųsti %2$d iš %3$d failų į %1$s</item>
<item quantity="other">Nepavyko išsiųsti %2$d iš %3$d failo į %1$s</item>
</plurals>
<string name="received_file_text">Bakstelėkite,norėdami atverti \"%1s\"</string>
<string name="cannot_create_file">Nepavyksta sukurti failo %s</string>
<string name="tap_to_answer">Bakstelėkite norėdami atsakyti</string>
<string name="right_click">Siųsti dešinįjį spustelėjimą</string>
<string name="middle_click">Siųsti vidurinįjį spustelėjimą</string>
<string name="show_keyboard">Rodyti klaviatūrą</string>
<string name="device_not_paired">Įrenginys nesuporuotas</string>
<string name="request_pairing">Bandyti suporuoti</string>
<string name="request_pairing">Užklausti suporuoti</string>
<string name="pairing_accept">Priimti</string>
<string name="pairing_reject">Atmesti</string>
<string name="device">Įrenginys</string>
<string name="pair_device">Suporuoti įrenginį</string>
<string name="mpris_play">Groti</string>
<string name="settings">Nustatyti</string>
<string name="mpris_play">Atkurti</string>
<string name="mpris_pause">Pristabdyti</string>
<string name="mpris_previous">Ankstesnis</string>
<string name="mpris_rew">Atsukti</string>
<string name="mpris_ff">Prasukti</string>
<string name="mpris_next">Tolesnis</string>
<string name="mpris_rew">Persukti atgal</string>
<string name="mpris_ff">Persukti pirmyn</string>
<string name="mpris_next">Kitas</string>
<string name="mpris_volume">Garsumas</string>
<string name="mpris_settings">Įvairialypės terpės nuostatos</string>
<string name="mpris_time_settings_title">Prasukimo ir atsukimo mygtukai</string>
<string name="mpris_time_settings_title">Persukimo pirmyn/atgal mygtukai</string>
<string name="mpris_time_settings_summary">Reguliuoti persukimo pirmyn/atgal laiką, spustelėjus</string>
<string-array name="mpris_time_entries">
<item>10 sekundžių</item>
<item>20 sekundžių</item>
@@ -77,33 +165,131 @@
<item>1 minutė</item>
<item>2 minutės</item>
</string-array>
<string name="general_settings">Bendrosios nuostatos</string>
<string name="plugin_settings">Nuostatos</string>
<string name="mpris_notification_settings_title">Rodyti įvairialypės terpės valdymo pranešimus</string>
<string name="mpris_notification_settings_summary">Leisti valdyti medijos leistuves neatveriant KDE Connect</string>
<string name="share_to">Bendrinti su…</string>
<string name="protocol_version_newer">Šis įrenginys naudoja naujesnę protokolo versiją</string>
<string name="plugin_settings_with_name">%s nuostatos</string>
<string name="device_name">Įrenginio pavadinimas</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Netinkamas įrenginio pavadinimas</string>
<string name="custom_devices_settings">Savitas įrenginių sąrašas</string>
<string name="pair_device_action">Suporuoti naują įrenginį</string>
<string name="unpair_device_action">Atrišti %s</string>
<string name="custom_device_list">Pridėti įrenginį pagal IP</string>
<string name="shareplugin_text_saved">Gautas tekstas, įrašytas į iškarpinę</string>
<string name="custom_devices_settings">Tinkintų įrenginių sąrašas</string>
<string name="custom_device_list">Pridėti įrenginius pagal IP</string>
<string name="custom_device_deleted">Tinkintas įrenginys ištrintas</string>
<string name="custom_device_list_help">Jeigu jūsų įrenginys nėra automatiškai aptinkamas, galite pridėti jo IP adresą arba mazgo pavadinimą, spusteldami ant slankiojančio veiksmo mygtuko</string>
<string name="custom_device_fab_hint">Pridėti įrenginį</string>
<string name="undo">Atšaukti</string>
<string name="share_notification_preference">Triukšmingi pranešimai</string>
<string name="share_notification_preference_summary">Gaunant failą, vibruoti ir atkurti garsą</string>
<string name="share_destination_customize">Tinkinti paskirties katalogą</string>
<string name="share_destination_customize_summary_disabled">Gauti failai atsiras Atsiuntimų aplanke</string>
<string name="share_destination_customize_summary_enabled">Failai bus saugomi žemiau esančiame kataloge</string>
<string name="share_destination_folder_preference">Paskirties katalogas</string>
<string name="share">Bendrinti</string>
<string name="share_received_file">Bendrinti \"%s\"</string>
<string name="title_activity_notification_filter">Pranešimų filtras</string>
<string name="filter_apps_info">Pranešimai bus sinchronizuojami pasirinktoms programėlėms.</string>
<string name="sftp_sdcard_num">SD kortelė %d</string>
<string name="sftp_sdcard">SD kortelė</string>
<string name="sftp_readonly">(tik skaitymui)</string>
<string name="sftp_camera">Nuotraukos</string>
<string name="add_host">Pridėti kompiuterį / IP</string>
<string name="mpris_player_on_device">%1$s - %2$s</string>
<string name="sftp_camera">Kameros nuotraukos</string>
<string name="add_device_dialog_title">Pridėti įrenginį</string>
<string name="add_device_hint">Mazgo pavadinimas arba IP adresas</string>
<string name="sftp_preference_detected_sdcards">Aptiktos SD kortelės</string>
<string name="sftp_preference_edit_sdcard_title">Taisyti SD kortelė</string>
<string name="sftp_preference_configured_storage_locations">Sukonfigūruotos saugyklų vietos</string>
<string name="sftp_preference_add_storage_location_title">Pridėti saugyklos vietą</string>
<string name="sftp_preference_edit_storage_location">Taisyti saugyklos vietą</string>
<string name="sftp_preference_add_camera_shortcut">Pridėti kameros aplanko trumpinį</string>
<string name="sftp_preference_add_camera_shortcut_summary_on">Pridėti šaukinį į kameros aplanką</string>
<string name="sftp_preference_add_camera_shortcut_summary_off">Nepridėti šaukinio į kameros aplanką</string>
<string name="sftp_storage_preference_storage_location">Saugyklos vieta</string>
<string name="sftp_storage_preference_storage_location_already_configured">Ši vieta jau yra sukonfigūruota</string>
<string name="sftp_storage_preference_click_to_select">spustelėkite norėdami pasirinkti</string>
<string name="sftp_storage_preference_display_name">Rodomas pavadinimas</string>
<string name="sftp_storage_preference_display_name_already_used">Šis rodomas pavadinimas jau yra naudojamas</string>
<string name="sftp_storage_preference_display_name_cannot_be_empty">Rodomas pavadinimas negali būti tuščias</string>
<string name="sftp_action_mode_menu_delete">Ištrinti</string>
<string name="sftp_no_sdcard_detected">Neaptikta jokios SD kortelės</string>
<string name="sftp_no_storage_locations_configured">Nėra sukonfigūruota jokių saugyklos vietų</string>
<string name="sftp_saf_permission_explanation">Norėdami gauti nuotolinę prieigą prie failų, turite sukonfigūruoti saugyklos vietas</string>
<string name="no_players_connected">Nerasta jokių leistuvių</string>
<string name="send_files">Siųsti failus</string>
<string name="pairing_title">KDE Connect įrenginiai</string>
<string name="pairing_description">Čia turėtų pasirodyti to kiti paties tinklo įrenginiai, kuriuose veikia „KDE Connect</string>
<string name="device_paired">Įrenginys suporuotas</string>
<string name="pairing_title">KDE Connect įrenginiai</string>
<string name="pairing_description">Čia turėtų atsirasti kiti to paties tinklo įrenginiai, naudojantys KDE Connect.</string>
<string name="device_rename_title">Pervadinti įrenginį</string>
<string name="device_rename_confirm">Pervadinti</string>
<string name="refresh">Atnaujinti</string>
<string name="unreachable_description">Šis suporuotas įrenginys nepasiekiamas. Patikrinkite, ar jis prisijungęs prie to paties tinklo.</string>
<string name="pref_plugin_telepathy">Siųsti SMS</string>
<string name="plugin_not_supported">Telefonas nepalaiko šio papildinio</string>
<string name="findmyphone_found">Radau</string>
<string name="refresh">Įkelti iš naujo</string>
<string name="unreachable_description">Šis suporuotas įrenginys nepasiekiamas. Įsitikinkite, kad jis yra prijungtas prie to paties tinklo.</string>
<string name="no_wifi">Nesate prisijungę prie belaidžio (Wi-Fi) tinklo, taigi, galite nematyti jokių įrenginių. Spustelėkite čia, norėdami įjungti belaidį (Wi-Fi).</string>
<string name="no_file_browser">Nėra įdiegta jokių failų tvarkytuvių.</string>
<string name="pref_plugin_telepathy">Siųsti SMS žinutę</string>
<string name="pref_plugin_telepathy_desc">Siųsti tekstines žinutes iš savo darbalaukio</string>
<string name="findmyphone_title">Rasti telefoną</string>
<string name="findmyphone_title_tablet">Rasti planšetę</string>
<string name="findmyphone_title_tv">Rasti televizorių</string>
<string name="findmyphone_description">Skambina į šį įrenginį, kad galėtumėte jį rasti</string>
<string name="findmyphone_found">Rastas</string>
<string name="open">Atverti</string>
<string name="close">Užverti</string>
<string name="plugins_need_permission">Kai kurie priedai tam, kad veiktų, reikalauja leidimų (bakstelėkite išsamesnei informacijai):</string>
<string name="permission_explanation">Šis priedas tam, kad veiktų, reikalauja leidimų</string>
<string name="optional_permission_explanation">Norėdami įjungti visas funkcijas, turite suteikti papildomus leidimus</string>
<string name="plugins_need_optional_permission">Kai kurių priedų ypatybės, dėl leidimų trūkumo, buvo išjungtos (bakstelėkite išsamesnei informacijai):</string>
<string name="share_optional_permission_explanation">Norėdami bendrinti failus tarp savo telefono ir savo darbalaukio, turite suteikti prieigą prie telefono saugyklos</string>
<string name="telepathy_permission_explanation">Norėdami skaityti ir rašyti SMS žinutes iš savo darbalaukio, turite suteikti prieigą prie SMS žinučių</string>
<string name="telephony_permission_explanation">Norėdami matyti telefono skambučius darbalaukyje, turite suteikti prieigą prie telefono skambučių žurnalo ir telefono būsenos</string>
<string name="telephony_optional_permission_explanation">Norėdami vietoj adresato numerio matyti adresato vardą, turite suteikti priegą prie telefono adresatų</string>
<string name="contacts_permission_explanation">Norėdami bendrinti savo adresatų knygą su darbalaukiu, turite suteikti adresatų leidimą</string>
<string name="select_ringtone">Pasirinkti skambučio melodiją</string>
<string name="telephony_pref_blocked_title">Užblokuoti numeriai</string>
<string name="telephony_pref_blocked_dialog_desc">Nerodyti skambučių ir SMS žinučių iš šių numerių. Nurodykite kiekvienoje eilutėje po vieną</string>
<string name="mpris_coverart_description">Dabartinės įvairialypės terpės iliustracija</string>
<string name="device_icon_description">Įrenginio ženkliukas</string>
<string name="settings_icon_description">Nustatymų ženkliukas</string>
<string name="presenter_fullscreen">Visas ekranas</string>
<string name="presenter_exit">Išeiti iš pristatymo</string>
<string name="presenter_lock_tip">Galite užrakinti savo įrenginį ir perėjimui prie kitos/ankstesnės skaidrės naudoti garsumo mygtukus</string>
<string name="add_command">Pridėti komandą</string>
<string name="addcommand_explanation">Nėra registruota jokių komandų</string>
<string name="addcommand_explanation2">Galite pridėti naujas komandas KDE Connect sistemos nustatymuose</string>
<string name="add_command_description">Galite pridėti komandas darbalaukyje</string>
<string name="pref_plugin_mprisreceiver">Medijos leistuvės valdymas</string>
<string name="pref_plugin_mprisreceiver_desc">Valdyti savo telefono medijos leistuves iš kito įrenginio</string>
<string name="notification_channel_default">Kiti pranešimai</string>
<string name="notification_channel_persistent">Pastovus indikatorius</string>
<string name="notification_channel_media_control">Įvairialypės terpės valdymas</string>
<string name="notification_channel_filetransfer">Failų persiuntimas</string>
<string name="mpris_stop">Stabdyti dabartinę leistuvę</string>
<string name="copy_url_to_clipboard">Kopijuoti URL į iškarpinę</string>
<string name="clipboard_toast">Nukopijuota į iškarpinę</string>
<string name="runcommand_notreachable">Device is not reachable</string>
<string name="runcommand_notpaired">Device is not paired</string>
<string name="runcommand_nosuchdevice">Nėra tokio įrenginio</string>
<string name="runcommand_noruncommandplugin">Šis įrenginys neturi įjungto priedo Vykdyti komandą</string>
<string name="pref_plugin_findremotedevice">Rasti nuotolinį įrenginį</string>
<string name="pref_plugin_findremotedevice_desc">Skambinti į nuotolinį įrenginį</string>
<string name="ring">Skambinti</string>
<string name="pref_plugin_systemvolume">Sistemos garsumas</string>
<string name="pref_plugin_systemvolume_desc">Valdyti nuotolinio įrenginio sistemos garsumą</string>
<string name="mute">Nutildyti</string>
<string name="all">Visi</string>
<string name="devices">Įrenginiai</string>
<string name="settings_rename">Įrenginio pavadinimas</string>
<string name="settings_dark_mode">Tamsus apipavidalinimas</string>
<string name="settings_more_settings_title">Daugiau nustatymų</string>
<string name="settings_more_settings_text">Nustatymus kiekvienam atskiram įrenginiui galima rasti įrenginyje \"Priedo nustatymuose\".</string>
<string name="setting_persistent_notification">Rodyti pastovų pranešimą</string>
<string name="setting_persistent_notification_oreo">Pastovus pranešimas</string>
<string name="setting_persistent_notification_description">Bakstelėkite, norėdami įjungti/išjungti Pranešimų nustatymuose</string>
<string name="extra_options">Papildomos parinktys</string>
<string name="privacy_options">Privatumo parinktys</string>
<string name="set_privacy_options">Nustatyti savo privatumo parinktis</string>
<string name="block_contents">Blokuoti pranešimų turinį</string>
<string name="block_images">Blokuoti pranešimuose paveiksliukus</string>
<string name="notification_channel_receivenotification">Pranešimai iš kitų įrenginių</string>
<string name="take_picture">Paleisti kamerą</string>
<string name="plugin_photo_desc">Paleisti kameros programėlę, kad būtų palengvintas nuotraukų darymas ir persiuntimas</string>
<string name="no_app_for_opening">Šio failo atvėrimui nerasta jokios tinkamos programėlės</string>
<string name="remote_keyboard_service">KDE Connect nuotolinė klaviatūra</string>
<string name="presenter_pointer">Rodyklė</string>
</resources>

View File

@@ -31,7 +31,6 @@
<string name="pref_plugin_receive_notifications_desc">Meldingen van het andere apparaat ontvangen en tonen op Android</string>
<string name="pref_plugin_sharereceiver">Delen en Ontvangen</string>
<string name="pref_plugin_sharereceiver_desc">Bestanden en URL\'s delen tussen apparaten</string>
<string name="plugin_not_available">Deze functie is niet beschikbaar in uw versie van Android</string>
<string name="device_list_empty">Geen apparaten</string>
<string name="ok">OK</string>
<string name="cancel">Annuleren</string>
@@ -77,25 +76,20 @@
<string name="category_remembered_devices">Onthouden apparaten</string>
<string name="device_menu_plugins">Plugin-instellingen</string>
<string name="device_menu_unpair">Paar uit elkaar halen</string>
<string name="device_not_reachable">Gepaard apparaat niet bereikbaar</string>
<string name="pair_new_device">Nieuw apparaat paren</string>
<string name="unknown_device">Onbekend apparaat</string>
<string name="error_not_reachable">Apparaat niet bereikbaar</string>
<string name="error_already_requested">Paarvorming is al gevraagd</string>
<string name="error_already_paired">Apparaat is al gepaard</string>
<string name="error_could_not_send_package">Kon pakket niet verzenden</string>
<string name="error_timed_out">Tijdslimiet overschreden</string>
<string name="error_canceled_by_user">Geannuleerd door gebruiker</string>
<string name="error_canceled_by_other_peer">Geannuleerd door andere kant</string>
<string name="error_invalid_key">Ongeldige sleutel ontvangen</string>
<string name="encryption_info_title">Versleutelde informatie</string>
<string name="encryption_info_msg_no_ssl">Het andere apparaat gebruikt geen recente versie van KDE Connect, de verouderde versleutelingsmethode zal worden gebruikt.</string>
<string name="my_device_fingerprint">De SHA1 vingerafdruk van het certificaat van uw apparaat is:</string>
<string name="remote_device_fingerprint">De SHA1 vingerafdruk van het certificaat van het apparaat op afstand is:</string>
<string name="pair_requested">Paarvorming gevraagd</string>
<string name="pairing_request_from">Verzoek om een paar te maken van %1s</string>
<string name="received_url_title">Ontvangen koppeling van %1s</string>
<string name="received_url_text">Tap om \'%1s\' te openen</string>
<plurals name="incoming_file_title">
<item quantity="one">%1$d bestand wordt ontvangen vanaf %2$s</item>
<item quantity="other">%1$d bestanden worden ontvangen vanaf %2$s</item>
@@ -131,7 +125,6 @@
<string name="received_file_text">Tap om \'%1s\' te openen</string>
<string name="cannot_create_file">Kan bestand %s niet aanmaken</string>
<string name="tap_to_answer">Tap om te antwoorden</string>
<string name="reconnect">Opnieuw verbinden</string>
<string name="right_click">Verstuur een rechter muisklik</string>
<string name="middle_click">Verstuur een middelste muisklik</string>
<string name="show_keyboard">Toetsenbord tonen</string>
@@ -139,8 +132,6 @@
<string name="request_pairing">Verzoek voor maken van paar</string>
<string name="pairing_accept">Accepteren</string>
<string name="pairing_reject">Afwijzen</string>
<string name="device">Apparaat</string>
<string name="pair_device">Apparaat voor paar</string>
<string name="settings">Instellingen</string>
<string name="mpris_play">Afspelen</string>
<string name="mpris_pause">Pauzeren</string>
@@ -149,7 +140,6 @@
<string name="mpris_ff">Snel vooruit</string>
<string name="mpris_next">Volgende</string>
<string name="mpris_volume">Volume</string>
<string name="mpris_settings">Instellingen voor multimedia</string>
<string name="mpris_time_settings_title">Knoppen vooruit/terug</string>
<string name="mpris_time_settings_summary">Pas de tijd aan om snel voorwaarts/terug te gaan bij indrukken</string>
<string-array name="mpris_time_entries">
@@ -162,20 +152,12 @@
<string name="mpris_notification_settings_title">Mediabesturingsmelding tonen</string>
<string name="mpris_notification_settings_summary">Staat besturing van uw mediaspelers toe zonder KDE Connect te openen</string>
<string name="share_to">Delen met...</string>
<string name="protocol_version_older">Dit apparaat gebruikt een oude protocolversie</string>
<string name="protocol_version_newer">Dit apparaat gebruikt een nieuwere protocolversie</string>
<string name="general_settings">Algemene instellingen</string>
<string name="plugin_settings">Instellingen</string>
<string name="plugin_settings_with_name">Instellingen van %s</string>
<string name="device_name">Apparaatnaam</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Ongeldige apparaatnaam</string>
<string name="shareplugin_text_saved">Oontvangen tekst, opgeslagen op klembord</string>
<string name="custom_devices_settings">Aangepaste lijst apparaten</string>
<string name="pair_device_action">Een paar maken met een nieuw apparaat</string>
<string name="unpair_device_action">Paar %s uit elkaar halen</string>
<string name="custom_device_list">Voeg apparaten toe per IP-adres</string>
<string name="delete_custom_device">%s verwijderen?</string>
<string name="custom_device_deleted">Aangepaste apparaat verwijderd</string>
<string name="custom_device_list_help">Als uw apparaat niet automatisch wordt gedetecteerd kunt u zijn IP-adres of hostnaam toevoegen door te klikken op de knop Zwevende actie</string>
<string name="custom_device_fab_hint">Een apparaat toevoegen</string>
@@ -190,7 +172,6 @@
<string name="share_received_file">\"%s\" delen</string>
<string name="title_activity_notification_filter">Filter voor meldingen</string>
<string name="filter_apps_info">Meldingen zullen gesynchroniseerd worden voor de geselecteerde apps.</string>
<string name="sftp_internal_storage">Interne opslag</string>
<string name="sftp_sdcard_num">SD-kaartje %d</string>
<string name="sftp_sdcard">SD-kaartje</string>
<string name="sftp_readonly">(alleen-lezen)</string>
@@ -215,23 +196,18 @@
<string name="sftp_no_sdcard_detected">Geen SD-kaart gedetecteerd</string>
<string name="sftp_no_storage_locations_configured">Geen opslaglocaties geconfigureerd</string>
<string name="sftp_saf_permission_explanation">Om toegang te hebben tot bestanden op afstand moet u opslaglocaties configureren</string>
<string name="add_host">Host/IP-adres toevoegen</string>
<string name="add_host_hint">Hostnaam of IP-adres</string>
<string name="no_players_connected">Geen spelers gevonden</string>
<string name="mpris_player_on_device">%1$s op %2$s</string>
<string name="send_files">Bestanden verzenden</string>
<string name="pairing_title">Apparaten van KDE Connect</string>
<string name="pairing_description">Andere apparaten met KDE Connect in uw zelfde netwerk zouden hier moeten verschijnen.</string>
<string name="device_paired">Gepaard apparaat</string>
<string name="device_rename_title">Apparaat hernoemen</string>
<string name="device_rename_confirm">Hernoemen</string>
<string name="refresh">Vernieuwen</string>
<string name="unreachable_description">Dit gepaarde apparaat is niet bereikbaar. Ga na dat het is verbonden met uw zelfde netwerk.</string>
<string name="on_data_message">Het lijkt of op een mobiele gegevensverbinding zit. KDE Connect werkt alleen op locale netwerken.</string>
<string name="no_wifi">U bent niet verbonden met een Wi-Fi-netwerk, u zou dus niet in staat kunnen zijn om apparaten te zien. Klik hier om Wi-Fi in te schakelen.</string>
<string name="no_file_browser">Er zijn geen bestandsbrowsers geïnstalleerd.</string>
<string name="pref_plugin_telepathy">SMS verzenden</string>
<string name="pref_plugin_telepathy_desc">Stuur tekstberichten van uw bureaublad</string>
<string name="plugin_not_supported">Deze plug-in wordt niet ondersteund door het apparaat</string>
<string name="findmyphone_title">Zoek mijn telefoon</string>
<string name="findmyphone_title_tablet">Zoek mijn tablet</string>
<string name="findmyphone_title_tv">Zoek mijn tv</string>
@@ -239,7 +215,6 @@
<string name="findmyphone_found">Gevonden</string>
<string name="open">Openen</string>
<string name="close">Sluiten</string>
<string name="no_permissions_storage">U moet toestemming geven voor toegang tot de opslag</string>
<string name="plugins_need_permission">Sommige plug-ins hebben toestemming nodig om te werken (tik voor meer informatie):</string>
<string name="permission_explanation">Deze plug-in heeft toestemming nodig om te werken</string>
<string name="optional_permission_explanation">U moet toestemming geven om alle functies in te schakelen</string>
@@ -264,7 +239,6 @@
<string name="add_command_description">U kunt commando\'s toevoegen op het bureaublad</string>
<string name="pref_plugin_mprisreceiver">Besturing van mediaspeler</string>
<string name="pref_plugin_mprisreceiver_desc">Uw mediaspelers op uw telefoon besturen vanaf een andere apparaat</string>
<string name="dark_theme">Donker themea</string>
<string name="notification_channel_default">Overige meldingen</string>
<string name="notification_channel_persistent">Blijvende indicator</string>
<string name="notification_channel_media_control">Besturing van media</string>
@@ -285,7 +259,7 @@
<string name="all">Alles</string>
<string name="devices">Apparaten</string>
<string name="settings_rename">Apparaatnaam</string>
<string name="settings_dark_mode">Donker themea</string>
<string name="settings_dark_mode">Donker thema</string>
<string name="settings_more_settings_title">Meer instellingen</string>
<string name="settings_more_settings_text">Instellingen per apparaat kunnen gevonden worden onder \'Plug-in-instellingen\' vanuit een apparaat.</string>
<string name="setting_persistent_notification">Blijvende melding tonen</string>
@@ -294,11 +268,12 @@
<string name="extra_options">Extra opties</string>
<string name="privacy_options">Privacyopties</string>
<string name="set_privacy_options">Stel uw privacyopties in</string>
<string name="new_notification">Nieuwe melding</string>
<string name="block_contents">Inhoud van meldingen blokkeren</string>
<string name="block_images">Afbeeldingen in meldingen blokkeren</string>
<string name="notification_channel_receivenotification">Meldingen van andere apparaten</string>
<string name="take_picture">Start camera</string>
<string name="plugin_photo_desc">Start de camera-app om nemen en overdragen van afbeeldingen te vergemakkelijken</string>
<string name="no_app_for_opening">Geen geschikte toepassing gevonden om dit bestand te openen</string>
<string name="remote_keyboard_service">KDE Connect Toetsenbord op afstand</string>
<string name="presenter_pointer">Aanwijzer</string>
</resources>

View File

@@ -31,7 +31,6 @@
<string name="pref_plugin_receive_notifications_desc">Ta imot varslingar frå den andre eininga og vis dei i Android</string>
<string name="pref_plugin_sharereceiver">Del og ta imot</string>
<string name="pref_plugin_sharereceiver_desc">Del filer og nettadresser mellom einingar</string>
<string name="plugin_not_available">Denne funksjonen er ikkje tilgjengeleg i din Android-versjon</string>
<string name="device_list_empty">Ingen einingar</string>
<string name="ok">OK</string>
<string name="cancel">Avbryt</string>
@@ -77,25 +76,20 @@
<string name="category_remembered_devices">Hugsa einingar</string>
<string name="device_menu_plugins">Programtillegg-oppsett</string>
<string name="device_menu_unpair">Løys paring</string>
<string name="device_not_reachable">Får ikkje kontakt med para eining</string>
<string name="pair_new_device">Par ny eining</string>
<string name="unknown_device">Ukjend eining</string>
<string name="error_not_reachable">Får ikkje kontakt med eininga</string>
<string name="error_already_requested">Paringsførespurnad er alt send</string>
<string name="error_already_paired">Eininga er alt para</string>
<string name="error_could_not_send_package">Klarte ikkje senda pakke</string>
<string name="error_timed_out">Tidsavbrot</string>
<string name="error_canceled_by_user">Avbroten av brukar</string>
<string name="error_canceled_by_other_peer">Avbroten av den andre eininga</string>
<string name="error_invalid_key">Fekk ugyldig nøkkel</string>
<string name="encryption_info_title">Krypteringsinfo</string>
<string name="encryption_info_msg_no_ssl">Den andre eininga brukar ein gammal versjon av KDE Connect, med ein utdatert krypteringsmetode.</string>
<string name="my_device_fingerprint">SHA-fingeravtrykket til einingssertifikatet er:</string>
<string name="remote_device_fingerprint">SHA-fingeravtrykket fjerneiningssertifikatet er:</string>
<string name="pair_requested">Paringsførespurnad</string>
<string name="pairing_request_from">Paringsførespurnad frå %1s</string>
<string name="received_url_title">Fekk lenkje frå %1s</string>
<string name="received_url_text">Trykk for å opna «%1s»</string>
<plurals name="incoming_file_title">
<item quantity="one">Fekk %1$d fil frå %2$s</item>
<item quantity="other">Fekk %1$d filer frå %2$s</item>
@@ -131,7 +125,6 @@
<string name="received_file_text">Trykk for å opna «%1s»</string>
<string name="cannot_create_file">Klarte ikkje oppretta fila %s</string>
<string name="tap_to_answer">Trykk for å svara</string>
<string name="reconnect">Kopla til på nytt</string>
<string name="right_click">Send høgreklikk</string>
<string name="middle_click">Send midtklikk</string>
<string name="show_keyboard">Vis tastatur</string>
@@ -139,8 +132,6 @@
<string name="request_pairing">Be om paring</string>
<string name="pairing_accept">Godta</string>
<string name="pairing_reject">Avvis</string>
<string name="device">Eining</string>
<string name="pair_device">Par ny eining</string>
<string name="settings">Innstillingar</string>
<string name="mpris_play">Spel</string>
<string name="mpris_pause">Pause</string>
@@ -149,7 +140,6 @@
<string name="mpris_ff">Spol fram</string>
<string name="mpris_next">Neste</string>
<string name="mpris_volume">Lydstyrke</string>
<string name="mpris_settings">Medieinnstillingar</string>
<string name="mpris_time_settings_title">Spoleknappar</string>
<string name="mpris_time_settings_summary">Juster kor langt spoleknappane skal spola</string>
<string-array name="mpris_time_entries">
@@ -162,20 +152,12 @@
<string name="mpris_notification_settings_title">Vis varsling med avspelingskontrollar</string>
<string name="mpris_notification_settings_summary">Tillat å kontrollera mediespelarar utan å opna KDE Connect</string>
<string name="share_to">Del til </string>
<string name="protocol_version_older">Denne eininga brukar ein gammal protokollversjon</string>
<string name="protocol_version_newer">Denne eininga brukar ein nyare protokollversjon</string>
<string name="general_settings">Generelle innstillingar</string>
<string name="plugin_settings">Innstillingar</string>
<string name="plugin_settings_with_name">%s-innstillingar</string>
<string name="device_name">Einingsnamn</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Ugyldig einingsnamn</string>
<string name="shareplugin_text_saved">Fekk tekst, som vart lagra på utklippstavla</string>
<string name="custom_devices_settings">Tilpassa einingsliste</string>
<string name="pair_device_action">Par ny eining</string>
<string name="unpair_device_action">Løys paring for %s</string>
<string name="custom_device_list">Legg til eining basert på IP</string>
<string name="delete_custom_device">Vil du sletta %s?</string>
<string name="custom_device_deleted">Tilpassa eining er sletta</string>
<string name="custom_device_list_help">Viss eininga ikkje vert funnen automatisk, kan du leggja til IP-adressa eller vertsnamnet til eininga ved å trykka på handlingsknappen</string>
<string name="custom_device_fab_hint">Legg til eining</string>
@@ -190,7 +172,6 @@
<string name="share_received_file">Del «%s»</string>
<string name="title_activity_notification_filter">Varslingsfilter</string>
<string name="filter_apps_info">Varslingar vert synkroniserte for dei valde appane.</string>
<string name="sftp_internal_storage">Intern lagring</string>
<string name="sftp_sdcard_num">SD-kort %d</string>
<string name="sftp_sdcard">SD-kort</string>
<string name="sftp_readonly">(skriveverna)</string>
@@ -214,24 +195,19 @@
<string name="sftp_action_mode_menu_delete">Slett</string>
<string name="sftp_no_sdcard_detected">Fann ikkje noko SD-kort</string>
<string name="sftp_no_storage_locations_configured">Ingen lagringsområde er sette opp</string>
<string name="sftp_saf_permission_explanation">For å få tilgang til over nettet må du setja opp lagringsområde</string>
<string name="add_host">Legg til vert/IP</string>
<string name="add_host_hint">Vertsnamn/IP-adresse</string>
<string name="sftp_saf_permission_explanation">For å få tilgang til filer over nettet må du setja opp lagringsområde.</string>
<string name="no_players_connected">Fann ingen spelarar</string>
<string name="mpris_player_on_device">%1$s på %2$s</string>
<string name="send_files">Send filer</string>
<string name="pairing_title">KDE Connect-einingar</string>
<string name="pairing_description">Andre einingar i nettverket som køyrer KDE Connect, vil dukka opp her.</string>
<string name="device_paired">Eininga er para</string>
<string name="device_rename_title">Endra namn på eining</string>
<string name="device_rename_confirm">Endra namn</string>
<string name="refresh">Oppdater</string>
<string name="unreachable_description">Får ikkje kontakt med den para eininga. Sjå til at ho er kopla til same nettverk.</string>
<string name="on_data_message">Det ser ut til at er kopla til eit mobilt samband. KDE Connect verkar berre på lokale nettverk.</string>
<string name="no_wifi">Du er ikkje kopla til eit Wi-Fi-nettverk, så du vil ikkje kunna sjå nokon einingar. Trykk her for å slå på Wi-Fi.</string>
<string name="no_file_browser">Ingen filhandsamarar er installerte.</string>
<string name="pref_plugin_telepathy">Send SMS</string>
<string name="pref_plugin_telepathy_desc">Send tekstmeldingar frå datamaskina</string>
<string name="plugin_not_supported">Dette tillegget er ikkje støtta av eininga</string>
<string name="findmyphone_title">Finn telefonen min</string>
<string name="findmyphone_title_tablet">Finn nettbrettet mitt</string>
<string name="findmyphone_title_tv">Finn TV-en min</string>
@@ -239,7 +215,6 @@
<string name="findmyphone_found">Funnen</string>
<string name="open">Opna</string>
<string name="close">Lukk</string>
<string name="no_permissions_storage">Du må gje KDE Connect løyve til å få tilgang til lagringsområdet</string>
<string name="plugins_need_permission">Nokre av tillegga treng utvida løyva for å fungera (trykk på dei for meir informasjon):</string>
<string name="permission_explanation">Dette tillegget treng utvida løyve for å fungera</string>
<string name="optional_permission_explanation">Du må gje utvida løyve for at alle funksjonane skal fungera</string>
@@ -264,7 +239,6 @@
<string name="add_command_description">Du kan leggja til kommandoar på skrivebordet</string>
<string name="pref_plugin_mprisreceiver">Mediespelarkontrollar</string>
<string name="pref_plugin_mprisreceiver_desc">Kontroller mediespelarar på telefonen din frå ei anna eining</string>
<string name="dark_theme">Mørkt tema</string>
<string name="notification_channel_default">Andre varslingar</string>
<string name="notification_channel_persistent">Evigvarande varslingar</string>
<string name="notification_channel_media_control">Mediestyring</string>
@@ -294,11 +268,12 @@
<string name="extra_options">Tilleggsval</string>
<string name="privacy_options">Personverninstillingar</string>
<string name="set_privacy_options">Vel personverninnstillingar</string>
<string name="new_notification">Ny varsling</string>
<string name="block_contents">Blokker varslingsinnhald</string>
<string name="block_images">Blokker bilete i varslingar</string>
<string name="notification_channel_receivenotification">Varslingar frå andre einingar</string>
<string name="take_picture">Opna kamera</string>
<string name="plugin_photo_desc">Opna kamera-appen for å gjera det lettare å ta og overføra bilete</string>
<string name="no_app_for_opening">Fann ikkje nokon app som kan opna denne fila</string>
<string name="remote_keyboard_service">KDE Connect fjerntastatur</string>
<string name="presenter_pointer">Peikar</string>
</resources>

View File

@@ -6,37 +6,38 @@
<string name="pref_plugin_telephony">Powiadomienia telefonu</string>
<string name="pref_plugin_telephony_desc">Wysyła powiadomienia o rozmowach przychodzących</string>
<string name="pref_plugin_battery">Stan baterii</string>
<string name="pref_plugin_battery_desc">Okresowo zgłasza stan baterii</string>
<string name="pref_plugin_sftp">Udostępnienie systemu plików</string>
<string name="pref_plugin_sftp_desc">Zezwala na zdalne przeglądanie systemu plików tego urządzenia</string>
<string name="pref_plugin_battery_desc">Okresowo powiadamia o stanie baterii</string>
<string name="pref_plugin_sftp">Udostępnianie systemu plików</string>
<string name="pref_plugin_sftp_desc">Daje dostęp do plików innemu urządzeniu</string>
<string name="pref_plugin_clipboard">Synchronizacja schowka</string>
<string name="pref_plugin_clipboard_desc">Udostępnia zawartość schowka</string>
<string name="pref_plugin_mousepad">Zdalne sterowanie</string>
<string name="pref_plugin_mousepad_desc">Umożliwia wykorzystanie telefonu lub tabletu jako myszy i klawiatury</string>
<string name="pref_plugin_presenter_desc">Umożliwia zmianę slajdów w prezentacji telefonem</string>
<string name="pref_plugin_remotekeyboard">Odbiera zdalne naciśnięcia klawiszy</string>
<string name="pref_plugin_remotekeyboard_desc">Odbiera naciśnięcia klawiszy od urządzeń zdalnych</string>
<string name="pref_plugin_mousepad">Sterowanie z urządzenia przenośnego</string>
<string name="pref_plugin_mousepad_desc">Telefon lub tablet służy jako gładzik i klawiatura</string>
<string name="pref_plugin_presenter">Sterowanie pokazem przeźroczy</string>
<string name="pref_plugin_presenter_desc">Przełącza przeźrocza przy użyciu telefonu</string>
<string name="pref_plugin_remotekeyboard">Odbieranie zdalnych naciśnięć klawiszy</string>
<string name="pref_plugin_remotekeyboard_desc">Odbiera naciśnięcia klawiszy z innego urządzenia</string>
<string name="pref_plugin_mpris">Sterowanie multimediami</string>
<string name="pref_plugin_mpris_desc">Umożliwia zdalne sterowanie odtwarzaczem multimedialnym</string>
<string name="pref_plugin_mpris_desc">Steruje odtwarzaczem multimedialnym</string>
<string name="pref_plugin_runcommand">Wykonywanie poleceń</string>
<string name="pref_plugin_runcommand_desc">Umożliwia wykonywanie zdalnych poleceń z telefonu lub tabletu</string>
<string name="pref_plugin_runcommand_desc">Wykonuje zdalne polecenia z telefonu lub tabletu</string>
<string name="pref_plugin_contacts">Synchronizacja kontaktów</string>
<string name="pref_plugin_contacts_desc">Umożliwia synchronizację książki kontaktów urządzenia</string>
<string name="pref_plugin_contacts_desc">Synchronizuje książkę kontaktów urządzenia</string>
<string name="pref_plugin_ping">Ping</string>
<string name="pref_plugin_ping_desc">Wysyła i odbiera pingi</string>
<string name="pref_plugin_notifications">Powiadomienia synchronizacji</string>
<string name="pref_plugin_notifications_desc">Udostępnianie powiadomień telefonu innym urządzeniom</string>
<string name="pref_plugin_receive_notifications">Otrzymywanie powiadomień</string>
<string name="pref_plugin_receive_notifications_desc">Odbiera powiadomienia z innych urządzeń i wyświetla je na Androidzie</string>
<string name="pref_plugin_sharereceiver">Udostępnianie i odbieranie</string>
<string name="pref_plugin_sharereceiver_desc">Współdzielenie plików i adresów URL pomiędzy urządzeniami</string>
<string name="plugin_not_available">Funkcja ta nie jest dostępna w twojej wersji Androida</string>
<string name="pref_plugin_notifications">Synchronizacja powiadomień</string>
<string name="pref_plugin_notifications_desc">Wysyła powiadomienia na inne urządzenia</string>
<string name="pref_plugin_receive_notifications">Odbieranie powiadomień</string>
<string name="pref_plugin_receive_notifications_desc">Odbiera powiadomienia z innych urządzeń</string>
<string name="pref_plugin_sharereceiver">Udostępnianie i pobieranie</string>
<string name="pref_plugin_sharereceiver_desc">Udostępnia pliki i adresy URL pomiędzy urządzeniami</string>
<string name="device_list_empty">Brak urządzeń</string>
<string name="ok">OK</string>
<string name="cancel">Zaniechaj</string>
<string name="open_settings">Otwórz ustawienia</string>
<string name="no_permissions">Musisz przydzielić uprawnienia, aby uzyskać dostęp do powiadomień</string>
<string name="no_permission_mprisreceiver">Aby móc sterować odtwarzaczami multimedialnymi musisz udzielić dostępu powiadomieniom</string>
<string name="no_permissions">Aby uzyskać dostęp do powiadomień, należy przydzielić uprawnienia</string>
<string name="no_permission_mprisreceiver">Aby móc sterować odtwarzaczami multimedialnymi, należy udzielić dostępu powiadomieniom</string>
<string name="no_permissions_remotekeyboard">Aby otrzymywać naciśnięcia klawiszy, należy włączyć zdalną klawiaturę KDE Connect</string>
<string name="send_ping">Wyślij ping</string>
<string name="open_mpris_controls">Sterowanie multimediami</string>
<string name="remotekeyboard_editing_only_title">Obsługuj zdalne naciśnięcia klawiszy tylko podczas edycji</string>
@@ -44,7 +45,7 @@
<string name="remotekeyboard_connected">Połączenie zdalnej klawiatury jest nawiązane</string>
<string name="remotekeyboard_multiple_connections">Nawiązano więcej niż jedno połączenie zdalnej klawiatury, wybierz urządzenie do ustawienia</string>
<string name="open_mousepad">Zdalne sterowanie</string>
<string name="mousepad_info">Przesuń palcem po ekranie, aby przesunąć wskaźnik myszy. Stuknij, aby wywołać naciśniecie lewym przyciskiem myszy i użyj dwóch/trzech palców, aby wywołać naciśniecie prawym i środkowym przyciskiem myszy. Przewijaj przy użyciu dwóch palców. Przyciśnij na dłużej, aby przeciągnąć i upuścić.</string>
<string name="mousepad_info">Przesuwanie palcem po ekranie przesuwa wskaźnik myszy. Stuknięcie jednym, dwoma i trzema palcami wywołuje odpowiednio naciśnięcie lewym, prawym i środkowym przyciskiem myszy. Dwa palce przewijają. Długie naciśnięcie rozpoczyna czynność przeciągania i upuszczania.</string>
<string name="mousepad_double_tap_settings_title">Ustaw działanie po dwukrotnym stuknięciu palcem</string>
<string name="mousepad_triple_tap_settings_title">Ustaw działanie po trzykrotnym stuknięciu palcem</string>
<string name="mousepad_sensitivity_settings_title">Ustaw czułość gładzika</string>
@@ -73,31 +74,26 @@
<string name="category_connected_devices">Podłączone urządzenia</string>
<string name="category_not_paired_devices">Dostępne urządzenia</string>
<string name="category_remembered_devices">Zapamiętane urządzenia</string>
<string name="device_menu_plugins">Ustawienia wtyczki</string>
<string name="device_menu_plugins">Ustawienia wtyczek</string>
<string name="device_menu_unpair">Odparuj</string>
<string name="device_not_reachable">Sparowane urządzenie nieosiągalne</string>
<string name="pair_new_device">Sparuj nowe urządzenie</string>
<string name="unknown_device">Nieznane urządzenie</string>
<string name="error_not_reachable">Urządzenie nieosiągalne</string>
<string name="error_already_requested">Już zażądano parowania</string>
<string name="error_already_paired">Urządzenie już sparowano</string>
<string name="error_could_not_send_package">Nie można wysłać pakietu</string>
<string name="error_timed_out">Przekroczono czasu odpowiedzi</string>
<string name="error_canceled_by_user">Anulowane przez użytkownika</string>
<string name="error_canceled_by_other_peer">Anulowane przez innego partnera</string>
<string name="error_invalid_key">Otrzymano nieprawidłowy klucz</string>
<string name="encryption_info_title">Zaszyfrowane informacje</string>
<string name="error_timed_out">Upłynął czas na odpowiedź</string>
<string name="error_canceled_by_user">Użytkownik zaniechał</string>
<string name="error_canceled_by_other_peer">Inny uczestnik zaniechał</string>
<string name="encryption_info_title">Dane o szyfrowaniu</string>
<string name="encryption_info_msg_no_ssl">Drugie urządzenie nie używa ostatniej wersji KDE Connect, użyto przestarzałego szyfrowania.</string>
<string name="my_device_fingerprint">Odcisk palca SHA1 certyfikatu twojego urządzenia to:</string>
<string name="remote_device_fingerprint">Odcisk palca SHA1 certyfikatu twojego zdalnego urządzenia to:</string>
<string name="pair_requested">Zażądano parowania</string>
<string name="pairing_request_from">Żądanie parowania z %1s</string>
<string name="received_url_title">Odebrano odsyłacz od %1s</string>
<string name="received_url_text">Znacznik do otwarcia \'%1s\'</string>
<plurals name="incoming_file_title">
<item quantity="one">Odebrano %1$d plik z %2$s</item>
<item quantity="few">Odebrano %1$d pliki z %2$s</item>
<item quantity="many">Odebrano %1$d plików z %2$s</item>
<item quantity="one">Odbieranie %1$d pliku od %2$s</item>
<item quantity="few">Odbieranie %1$d plików od %2$s</item>
<item quantity="many">Odbieranie %1$d plików od %2$s</item>
<item quantity="other"/>
</plurals>
<plurals name="incoming_files_text">
@@ -106,6 +102,18 @@
<item quantity="many">(Plik %2$d z %3$d) : %1$s</item>
<item quantity="other"/>
</plurals>
<plurals name="outgoing_file_title">
<item quantity="one">Wysyłanie %1$d pliku do %2$s</item>
<item quantity="few">Wysyłanie %1$d plików do %2$s</item>
<item quantity="many">Wysyłanie %1$d plików do %2$s</item>
<item quantity="other"/>
</plurals>
<plurals name="outgoing_files_text">
<item quantity="one">Plik: %1$s</item>
<item quantity="few">(Plik %2$d z %3$d) : %1$s</item>
<item quantity="many">(Plik %2$d z %3$d) : %1$s</item>
<item quantity="other"/>
</plurals>
<plurals name="received_files_title">
<item quantity="one">Odebrano plik od %1$s</item>
<item quantity="few">Odebrano %2$d pliki od %1$s</item>
@@ -118,10 +126,21 @@
<item quantity="many">Nie udało się odebrać %2$d z %3$d plików od %1$s</item>
<item quantity="other"/>
</plurals>
<plurals name="sent_files_title">
<item quantity="one">Wysłano plik do %1$s</item>
<item quantity="few">Wysłano %2$d pliki do %1$s</item>
<item quantity="many">Wysłano %2$d plików do %1$s</item>
<item quantity="other"/>
</plurals>
<plurals name="send_files_fail_title">
<item quantity="one">Nie udało się wysłać pliku do %1$s</item>
<item quantity="few">Nie udało się wysłać %2$d z %3$d plików do %1$s</item>
<item quantity="many">Nie udało się wysłać %2$d z %3$d plików do %1$s</item>
<item quantity="other"/>
</plurals>
<string name="received_file_text">Stuknij, aby otworzyć \'%1s\'</string>
<string name="cannot_create_file">Nie można utworzyć pliku %s</string>
<string name="tap_to_answer">Stuknij, aby odpowiedzieć</string>
<string name="reconnect">Połącz ponownie</string>
<string name="right_click">Wyślij naciskając prawym</string>
<string name="middle_click">Wyślij naciskając środkowym</string>
<string name="show_keyboard">Pokaż klawiaturę</string>
@@ -129,8 +148,6 @@
<string name="request_pairing">Zażądaj sparowania</string>
<string name="pairing_accept">Przyjmij</string>
<string name="pairing_reject">Odrzuć</string>
<string name="device">Urządzenie</string>
<string name="pair_device">Sparuj urządzenie</string>
<string name="settings">Ustawienia</string>
<string name="mpris_play">Odtwórz</string>
<string name="mpris_pause">Wstrzymaj</string>
@@ -139,7 +156,6 @@
<string name="mpris_ff">Przewiń do przodu</string>
<string name="mpris_next">Następny</string>
<string name="mpris_volume">Głośność</string>
<string name="mpris_settings">Ustawienia multimediów</string>
<string name="mpris_time_settings_title">Przyciski naprzód/wstecz</string>
<string name="mpris_time_settings_summary">Dostosuj czas do przewijania wprzód lub wstecz po naciśnięciu</string>
<string-array name="mpris_time_entries">
@@ -150,22 +166,18 @@
<item>2 minuty</item>
</string-array>
<string name="mpris_notification_settings_title">Pokaż powiadomienia sterowania mediami</string>
<string name="mpris_notification_settings_summary">Umożliwia sterowanie odtwarzaczami bez otwierania KDE Connect</string>
<string name="mpris_notification_settings_summary">Steruje odtwarzaczami bez otwierania KDE Connect</string>
<string name="share_to">Współdziel z...</string>
<string name="protocol_version_older">Urządzenie to używa starej wersji protokołu</string>
<string name="protocol_version_newer">Urządzenie to używa nowszej wersji protokołu</string>
<string name="general_settings">Ustawienia ogólne</string>
<string name="plugin_settings">Ustawienia</string>
<string name="plugin_settings_with_name">Ustawienia %s</string>
<string name="device_name">Nazwa urządzenia</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Nieprawidłowa nazwa urządzenia</string>
<string name="shareplugin_text_saved">Otrzymano tekst, zapisano do schowka</string>
<string name="custom_devices_settings">Lista własnych urządzeń</string>
<string name="pair_device_action">Sparuj nowe urządzenie</string>
<string name="unpair_device_action">Rozparuj %s</string>
<string name="custom_device_list">Dodaj urządzenia po numerze IP</string>
<string name="delete_custom_device">Usunąć %s?</string>
<string name="custom_device_deleted">Usunięto własne urządzenie</string>
<string name="custom_device_list_help">Jeśli twoje urządzenie nie zostało samo wykryte, to możesz dodać jego adres IP lub nazwę gospodarza klikając na pływającym przycisku działania</string>
<string name="custom_device_fab_hint">Dodaj urządzenie</string>
<string name="undo">Cofnij</string>
<string name="share_notification_preference">Hałaśliwe powiadomienia</string>
<string name="share_notification_preference_summary">Zadrżyj i odegraj dźwięk przy odebraniu pliku</string>
<string name="share_destination_customize">Własny katalog docelowy</string>
@@ -176,42 +188,57 @@
<string name="share_received_file">Udostępnij \"%s\"</string>
<string name="title_activity_notification_filter">Filtr powiadomień</string>
<string name="filter_apps_info">Powiadomienia zostaną zsynchronizowane z wybranymi aplikacjami.</string>
<string name="sftp_internal_storage">"Pamięć wewnętrzna "</string>
<string name="sftp_sdcard_num">Karta SD %d</string>
<string name="sftp_sdcard">Karta SD</string>
<string name="sftp_readonly">(tylko do odczytu)</string>
<string name="sftp_camera">Zdjęcia z aparatu</string>
<string name="add_host">Dodaj gospodarza/IP</string>
<string name="add_device_dialog_title">Dodaj urządzenie</string>
<string name="add_device_hint">Nazwa gospodarza lub adres IP</string>
<string name="sftp_preference_detected_sdcards">Wykryte karty SD</string>
<string name="sftp_preference_edit_sdcard_title">Edytuj kartę SD</string>
<string name="sftp_preference_configured_storage_locations">Wybrane miejsca w pamięci</string>
<string name="sftp_preference_add_storage_location_title">Dodawanie miejsca w pamięci</string>
<string name="sftp_preference_edit_storage_location">Edytowanie miejsca w pamięci</string>
<string name="sftp_preference_add_camera_shortcut">Dodaj skrót katalogu aparatu</string>
<string name="sftp_preference_add_camera_shortcut_summary_on">Dodaj skrót do katalogu aparatu</string>
<string name="sftp_preference_add_camera_shortcut_summary_off">Nie dodawaj skrótu do katalogu aparatu</string>
<string name="sftp_storage_preference_storage_location">Miejsce w pamięci</string>
<string name="sftp_storage_preference_storage_location_already_configured">To miejsce było już ustawione</string>
<string name="sftp_storage_preference_click_to_select">kliknij, aby wybrać</string>
<string name="sftp_storage_preference_display_name">Nazwa do wyświetlania</string>
<string name="sftp_storage_preference_display_name_already_used">Nazwa do wyświetlania jest już używana</string>
<string name="sftp_storage_preference_display_name_cannot_be_empty">Nazwa do wyświetlania nie może być pusta</string>
<string name="sftp_action_mode_menu_delete">Usuń</string>
<string name="sftp_no_sdcard_detected">Nie wykryto żadnej karty SD</string>
<string name="sftp_no_storage_locations_configured">Nie ustawiono miejsc w pamięci</string>
<string name="sftp_saf_permission_explanation">Aby przeglądać pliki zdalnie, należy ustawić miejsca w pamięci</string>
<string name="no_players_connected">Nie znaleziono żadnego odtwarzacza</string>
<string name="mpris_player_on_device">%1$s na %2$s</string>
<string name="send_files">Wyślij pliki</string>
<string name="send_files">Wysyłanie plików</string>
<string name="pairing_title">Urządzenia KDE Connect</string>
<string name="pairing_description">Tutaj powinny pojawić się inne urządzenia uruchmione z KDE Connect w twojej sieci.</string>
<string name="device_paired">Urządzenie sparowane</string>
<string name="pairing_description">Tu powinny pojawić się urządzenia podłączone do tej samej sieci i które także mają uruchomione KDE Connect.</string>
<string name="device_rename_title">Zmień nazwę urządzenia</string>
<string name="device_rename_confirm">Zmień nazwę</string>
<string name="refresh">Odśwież</string>
<string name="unreachable_description">To sparowane urządzenie jest nieosiągalne. Upewnij się, że jest podłączone do tej samej sieci.</string>
<string name="on_data_message">Wygląda na to, że korzystasz z internetu mobilnego. KDE Connect działa tylko na lokalnych sieciach.</string>
<string name="no_wifi">Brak połączenia z siecią Wi-Fi, więc może nie być widać urządzeń. Naciśnij tutaj, aby włączyć Wi-Fi.</string>
<string name="no_file_browser">Nie wgrano żadnych przeglądarek plików.</string>
<string name="pref_plugin_telepathy">Wyślij SMS-a</string>
<string name="pref_plugin_telepathy_desc">Wyślij wiadomość tekstową z komputera</string>
<string name="plugin_not_supported">Ta wtyczka nie jest obsługiwana przez to urządzenie</string>
<string name="findmyphone_title">Znajdź mój telefon</string>
<string name="findmyphone_title_tablet">Znajdź mój tablet</string>
<string name="findmyphone_title_tv">Znajdź mój telewizor</string>
<string name="findmyphone_description">Dzwoni na dane urządzenie, tak abyś mógł je znaleźć.</string>
<string name="pref_plugin_telepathy">Wysyłanie SMSów</string>
<string name="pref_plugin_telepathy_desc">Wysyła wiadomości tekstowe z komputera</string>
<string name="findmyphone_title">Poszukiwania telefonu</string>
<string name="findmyphone_title_tablet">Poszukiwania tabletu</string>
<string name="findmyphone_title_tv">Poszukiwania telewizora</string>
<string name="findmyphone_description">Dzwoni na dane urządzenie, aby można je odnaleźć.</string>
<string name="findmyphone_found">Znaleziony</string>
<string name="open">Otwórz</string>
<string name="close">Zamknij</string>
<string name="no_permissions_storage">Musisz nadać uprawnienia, aby uzyskać dostęp do pamięci masowej</string>
<string name="plugins_need_permission">Niektóre z wtyczek wymagają uprawnień do działania (stuknij po więcej informacji)</string>
<string name="plugins_need_permission">Niektóre wtyczki wymagają uprawnień do swojego działania (stuknij, aby dowiedzieć się więcej)</string>
<string name="permission_explanation">Ta wtyczka wymaga uprawnień do działania</string>
<string name="optional_permission_explanation">Musisz przydzielić dodatkowe uprawnienia, aby włączyć wszystkie funkcje</string>
<string name="plugins_need_optional_permission">Niektóre z wtyczek mają ograniczone możliwości ze względu na ograniczone uprawnienia (stuknij po więcej informacji)</string>
<string name="share_optional_permission_explanation">Aby udostępniać pliki z twojego telefonu na twoim komputerze musisz pozowolić na dostęp do pamięci telefonu</string>
<string name="telepathy_permission_explanation">Aby odczytywać i pisać SMSy z twojego komputera musisz nadać uprawnienia do SMSów</string>
<string name="telephony_optional_permission_explanation">Aby widzieć nazwę kontaktu zamiast numeru telefonu musisz pozwolić na dostęp do kontaktów telefonu</string>
<string name="plugins_need_optional_permission">Niektóre wtyczki mają ograniczone możliwości ze względu na ograniczone uprawnienia (stuknij, aby dowiedzieć się więcej)</string>
<string name="share_optional_permission_explanation">Aby udostępniać pliki z twojego telefonu na twoim komputerze, należy zezwolić na dostęp do pamięci telefonu</string>
<string name="telepathy_permission_explanation">Aby odbierać i wysyłać esemesy z pulpitu, należy nadać uprawnienia do esemesów</string>
<string name="telephony_permission_explanation">Aby widzieć rozmowy telefoniczne na pulpicie, należy nadać uprawnienia do dziennika rozmów i stanu telefonu</string>
<string name="telephony_optional_permission_explanation">Aby widzieć nazwę kontaktu zamiast numeru telefonu, należy zezwolić na dostęp do kontaktów telefonu</string>
<string name="contacts_permission_explanation">Aby współdzielić swoją książkę adresową z komputerem musisz udzielić uprawnień do kontaktów</string>
<string name="select_ringtone">Wybierz dzwonek</string>
<string name="telephony_pref_blocked_title">Zablokowane numery</string>
@@ -221,13 +248,13 @@
<string name="settings_icon_description">Ikona ustawień</string>
<string name="presenter_fullscreen">Pełny ekran</string>
<string name="presenter_exit">Zakończ prezentację</string>
<string name="presenter_lock_tip">Możesz zablokować swoje urządzenie i używać przycisków głośności, aby przejść do kolejnego/poprzedniego przeźrocza</string>
<string name="add_command">Dodaj polecenie</string>
<string name="addcommand_explanation">Nie zarejestrowano żadnych poleceń</string>
<string name="addcommand_explanation2">Nowe polecenia można dodawać w ustawieniach systemowych KDE Connect</string>
<string name="addcommand_explanation2">Nowe polecenie można dodać w ustawieniach systemowych KDE Connect</string>
<string name="add_command_description">Możesz dodawać polecenia na pulpicie</string>
<string name="pref_plugin_mprisreceiver">Sterowanie odtwarzaczem mediów</string>
<string name="pref_plugin_mprisreceiver_desc">Sterowanie odtwarzaczami multimedialnymi z innego urządzenia</string>
<string name="dark_theme">Ciemny wygląd</string>
<string name="notification_channel_default">Inne powiadomienia</string>
<string name="notification_channel_persistent">Nieznikający wskaźnik</string>
<string name="notification_channel_media_control">Sterowanie multimediami</string>
@@ -239,8 +266,8 @@
<string name="runcommand_notpaired">Urządzenie jest niesparowane</string>
<string name="runcommand_nosuchdevice">Nie ma takiego urządzenia</string>
<string name="runcommand_noruncommandplugin">To urządzenie nie ma włączonej wtyczki wykonywania poleceń</string>
<string name="pref_plugin_findremotedevice">Znajdź swoje urządzenie zdalne</string>
<string name="pref_plugin_findremotedevice_desc">Zadzwoń na urządzenie zdalne</string>
<string name="pref_plugin_findremotedevice">Poszukiwania urządzenia przenośnego</string>
<string name="pref_plugin_findremotedevice_desc">Dzwoni na urządzenie przenośne</string>
<string name="ring">Zadzwoń</string>
<string name="pref_plugin_systemvolume">Głośność systemowa</string>
<string name="pref_plugin_systemvolume_desc">Sterowanie głośnością systemu zdalnego urządzenia</string>
@@ -250,15 +277,19 @@
<string name="settings_rename">Nazwa urządzenia</string>
<string name="settings_dark_mode">Ciemny wygląd</string>
<string name="settings_more_settings_title">Więcej ustawień</string>
<string name="settings_more_settings_text">Wstępne ustawienia urządzenia można znaleźć w \'Ustawieniach wtyczki\' z poziomu urządzenia.</string>
<string name="settings_more_settings_text">Ustawienia nadawane urządzeniu można znaleźć w \'Ustawienia wtyczek\' w danym urządzeniu.</string>
<string name="setting_persistent_notification">Pokaż nieznikające powiadomienie</string>
<string name="setting_persistent_notification_oreo">Nieznikające powiadomienie</string>
<string name="setting_persistent_notification_description">Stuknij, aby włączyć/wyłączyć ustawienia powiadomienia</string>
<string name="setting_persistent_notification_description">Stuknij, aby je ustawić w ustawieniach powiadamiania</string>
<string name="extra_options">Opcje dodatkowe</string>
<string name="privacy_options">Opcje prywatności</string>
<string name="set_privacy_options">Ustaw swoje opcje prywatności</string>
<string name="new_notification">Nowe powiadomienie</string>
<string name="block_contents">Blokuj treści w powiadomieniach</string>
<string name="block_images">Blokuj obrazy w powiadomieniach</string>
<string name="notification_channel_receivenotification">Powiadomienie z innych urządzeń</string>
<string name="notification_channel_receivenotification">Powiadomienia z innych urządzeń</string>
<string name="take_picture">Uruchom aparat</string>
<string name="plugin_photo_desc">Uruchom aplikację aparatu, aby ułatwić robienie i przesyłanie zdjęć</string>
<string name="no_app_for_opening">Nie znaleziono aplikacji do otwarcia tego pliku</string>
<string name="remote_keyboard_service">Zdalna klawiatura KDE Connect</string>
<string name="presenter_pointer">Wskaźnik</string>
</resources>

View File

@@ -8,14 +8,14 @@
<string name="pref_plugin_battery">Relatório da bateria</string>
<string name="pref_plugin_battery_desc">Informação periódica do status da bateria</string>
<string name="pref_plugin_sftp">Exposição do sistema de arquivos</string>
<string name="pref_plugin_sftp_desc">Permite navegar no sistema de arquivos deste telefone remotamente</string>
<string name="pref_plugin_clipboard">Sincronização da área de transferência</string>
<string name="pref_plugin_sftp_desc">Permite navegar remotamente pelo sistema de arquivos deste telefone</string>
<string name="pref_plugin_clipboard">Sincronizar área de transferência</string>
<string name="pref_plugin_clipboard_desc">Compartilha o conteúdo da área de transferência</string>
<string name="pref_plugin_mousepad">Introdução de dados remota</string>
<string name="pref_plugin_mousepad_desc">Use seu telefone ou tablet como mouse e teclado</string>
<string name="pref_plugin_presenter">Apresentação de slides remota</string>
<string name="pref_plugin_presenter_desc">Use o seu dispositivo para mudar de slides em uma apresentação</string>
<string name="pref_plugin_remotekeyboard">Receber pressionamento de teclas remotamente</string>
<string name="pref_plugin_presenter_desc">Use o seu dispositivo para mudar os slides de uma apresentação</string>
<string name="pref_plugin_remotekeyboard">Receber pressionamento de teclas remoto</string>
<string name="pref_plugin_remotekeyboard_desc">Recebe os eventos de pressionamento de teclas dos dispositivos remotos</string>
<string name="pref_plugin_mpris">Controle multimídia</string>
<string name="pref_plugin_mpris_desc">Fornece um controle remoto de seu reprodutor de mídia</string>
@@ -25,13 +25,12 @@
<string name="pref_plugin_contacts_desc">Permite a sincronização do livro de endereços do dispositivo</string>
<string name="pref_plugin_ping">Ping</string>
<string name="pref_plugin_ping_desc">Envia e recebe pings</string>
<string name="pref_plugin_notifications">Sincronização de notificações</string>
<string name="pref_plugin_notifications">Sincronizar notificações</string>
<string name="pref_plugin_notifications_desc">Acesse suas notificações a partir de outros dispositivos</string>
<string name="pref_plugin_receive_notifications">Receber notificações</string>
<string name="pref_plugin_receive_notifications_desc">Recebe as notificações de outros dispositivos e as mostra no Android</string>
<string name="pref_plugin_sharereceiver">Compartilhar e receber</string>
<string name="pref_plugin_sharereceiver_desc">Compartilha arquivos e URLs entre os dispositivos</string>
<string name="plugin_not_available">Esta funcionalidade não está disponível na sua versão do Android</string>
<string name="device_list_empty">Sem dispositivos</string>
<string name="ok">OK</string>
<string name="cancel">Cancelar</string>
@@ -47,19 +46,19 @@
<string name="remotekeyboard_multiple_connections">Existe mais que uma conexão a teclados remotos. Selecione o dispositivo a configurar</string>
<string name="open_mousepad">Introdução de dados remota</string>
<string name="mousepad_info">Mova um dedo pela tela para mover o ponteiro do mouse. Dê um toque para clicar e use dois/três dedos para os botões da direita e do meio. Use dois dedos para rolar a tela. Use uma pressão longa para arrastar e soltar.</string>
<string name="mousepad_double_tap_settings_title">Definir a ação do toque com dois dedos</string>
<string name="mousepad_triple_tap_settings_title">Definir a ação do toque com três dedos</string>
<string name="mousepad_sensitivity_settings_title">Definir a sensibilidade do touchpad</string>
<string name="mousepad_acceleration_profile_settings_title">Definir a aceleração do ponteiro</string>
<string name="mousepad_double_tap_settings_title">Definir ação do toque com dois dedos</string>
<string name="mousepad_triple_tap_settings_title">Definir ação do toque com três dedos</string>
<string name="mousepad_sensitivity_settings_title">Definir sensibilidade do touchpad</string>
<string name="mousepad_acceleration_profile_settings_title">Definir aceleração do ponteiro</string>
<string name="mousepad_scroll_direction_title">Direção de rolagem inversa</string>
<string-array name="mousepad_tap_entries">
<item>Botão direito</item>
<item>Botão do meio</item>
<item>Nada</item>
<item>Nenhuma</item>
</string-array>
<string-array name="mousepad_sensitivity_entries">
<item>Mais lento</item>
<item>Ainda mais lento</item>
<item>Acima do mais lento</item>
<item>Padrão</item>
<item>Acima do padrão</item>
<item>Mais rápido</item>
@@ -77,25 +76,20 @@
<string name="category_remembered_devices">Dispositivos lembrados</string>
<string name="device_menu_plugins">Configuração dos plugins</string>
<string name="device_menu_unpair">Cancelar emparelhamento</string>
<string name="device_not_reachable">O dispositivo pareado está inacessível</string>
<string name="pair_new_device">Emparelhar novo dispositivo</string>
<string name="unknown_device">Dispositivo desconhecido</string>
<string name="error_not_reachable">Dispositivo inacessível</string>
<string name="error_already_requested">O emparelhamento já foi solicitado</string>
<string name="error_already_paired">Dispositivo já emparelhado</string>
<string name="error_could_not_send_package">Não foi possível enviar o pacote</string>
<string name="error_timed_out">Tempo limite expirou</string>
<string name="error_canceled_by_user">Cancelado pelo usuário</string>
<string name="error_canceled_by_other_peer">Cancelado pelo outro dispositivo</string>
<string name="error_invalid_key">Chave inválida recebida</string>
<string name="encryption_info_title">Informação da criptografia</string>
<string name="encryption_info_title">Informação de criptografia</string>
<string name="encryption_info_msg_no_ssl">O outro dispositivo não usa uma versão recente do KDE Connect. Será utilizado o método antigo de criptografia.</string>
<string name="my_device_fingerprint">Impressão digital SHA1 do certificado do seu dispositivo:</string>
<string name="remote_device_fingerprint">Impressão digital SHA1 do certificado do dispositivo remoto:</string>
<string name="my_device_fingerprint">Código SHA1 do certificado do seu dispositivo:</string>
<string name="remote_device_fingerprint">Código SHA1 do certificado do dispositivo remoto:</string>
<string name="pair_requested">Solicitação de emparelhamento</string>
<string name="pairing_request_from">Emparelhamento solicitado por %1s</string>
<string name="received_url_title">Link recebido de %1s</string>
<string name="received_url_text">Toque para abrir o \'%1s\'</string>
<plurals name="incoming_file_title">
<item quantity="one">Recebendo %1$d arquivo de %2$s</item>
<item quantity="other">Recebendo %1$d arquivos de %2$s</item>
@@ -131,7 +125,6 @@
<string name="received_file_text">Toque para abrir o \'%1s\'</string>
<string name="cannot_create_file">Não foi possível criar o arquivo %s</string>
<string name="tap_to_answer">Toque para responder</string>
<string name="reconnect">Reconectar</string>
<string name="right_click">Enviar um Botão Direito</string>
<string name="middle_click">Enviar um Botão do Meio</string>
<string name="show_keyboard">Mostrar teclado</string>
@@ -139,8 +132,6 @@
<string name="request_pairing">Solicitar emparelhamento</string>
<string name="pairing_accept">Aceitar</string>
<string name="pairing_reject">Rejeitar</string>
<string name="device">Dispositivo</string>
<string name="pair_device">Emparelhar dispositivo</string>
<string name="settings">Configurações</string>
<string name="mpris_play">Reproduzir</string>
<string name="mpris_pause">Pausar</string>
@@ -149,7 +140,6 @@
<string name="mpris_ff">Avançar rapidamente</string>
<string name="mpris_next">Próximo</string>
<string name="mpris_volume">Volume</string>
<string name="mpris_settings">Configurações de multimídia</string>
<string name="mpris_time_settings_title">Botões para avançar/voltar</string>
<string name="mpris_time_settings_summary">Ajuste o tempo para avançar ou retroceder quando pressionar</string>
<string-array name="mpris_time_entries">
@@ -162,22 +152,14 @@
<string name="mpris_notification_settings_title">Mostrar a notificação do controle multimídia</string>
<string name="mpris_notification_settings_summary">Permite controlar os seus reprodutores de mídias sem abrir o KDE Connect</string>
<string name="share_to">Compartilhar com...</string>
<string name="protocol_version_older">Este dispositivo usa uma versão antiga do protocolo</string>
<string name="protocol_version_newer">Este dispositivo usa uma versão mais recente do protocolo</string>
<string name="general_settings">Configurações gerais</string>
<string name="plugin_settings">Configurações</string>
<string name="plugin_settings_with_name">Configurações do %s</string>
<string name="device_name">Nome do dispositivo</string>
<string name="device_name_preference_summary">%s</string>
<string name="plugin_settings_with_name">Configurações de %s</string>
<string name="invalid_device_name">Nome do dispositivo inválido</string>
<string name="shareplugin_text_saved">Texto recebido e salvo na área de transferência</string>
<string name="custom_devices_settings">Lista de dispositivos personalizada</string>
<string name="pair_device_action">Emparelhar um novo dispositivo</string>
<string name="unpair_device_action">Desemparelhar %s</string>
<string name="custom_device_list">Adicionar dispositivos pelo IP</string>
<string name="delete_custom_device">Excluir %s?</string>
<string name="custom_device_deleted">Dispositivo personalizado excluído</string>
<string name="custom_device_list_help">Se seu dispositivo não for detectado automaticamente você pode adicionar o endereço de IP ou nome de máquina dele clicando no botão de ação flutuante</string>
<string name="custom_device_list_help">Se o seu dispositivo não for detectado automaticamente você pode adicionar o endereço IP ou nome de máquina dele clicando no botão de ação flutuante</string>
<string name="custom_device_fab_hint">Adicionar um dispositivo</string>
<string name="undo">Desfazer</string>
<string name="share_notification_preference">Notificações sonoras</string>
@@ -190,48 +172,42 @@
<string name="share_received_file">Compartilhar \"%s\"</string>
<string name="title_activity_notification_filter">Filtro de notificações</string>
<string name="filter_apps_info">As notificações dos aplicativos selecionados serão sincronizadas.</string>
<string name="sftp_internal_storage">Armazenamento interno</string>
<string name="sftp_sdcard_num">Cartão SD %d</string>
<string name="sftp_sdcard">Cartão SD</string>
<string name="sftp_readonly">(somente leitura)</string>
<string name="sftp_camera">Imagens da câmera</string>
<string name="add_device_dialog_title">Adicionar dispositivo</string>
<string name="add_device_hint">Nome da máquina ou endereço IP</string>
<string name="add_device_hint">Nome de máquina ou endereço IP</string>
<string name="sftp_preference_detected_sdcards">Cartões SD detectados</string>
<string name="sftp_preference_edit_sdcard_title">Editar cartão SD</string>
<string name="sftp_preference_configured_storage_locations">Localizações de armazenamento configuradas</string>
<string name="sftp_preference_add_storage_location_title">Adicionar localização de armazenamento</string>
<string name="sftp_preference_edit_storage_location">Editar localização de armazenamento</string>
<string name="sftp_preference_configured_storage_locations">Locais de armazenamento configurados</string>
<string name="sftp_preference_add_storage_location_title">Adicionar local de armazenamento</string>
<string name="sftp_preference_edit_storage_location">Editar local de armazenamento</string>
<string name="sftp_preference_add_camera_shortcut">Adicionar atalho para pasta da câmera</string>
<string name="sftp_preference_add_camera_shortcut_summary_on">Adiciona um atalho para a pasta da câmera</string>
<string name="sftp_preference_add_camera_shortcut_summary_off">Não adiciona um atalho para a pasta da câmera</string>
<string name="sftp_storage_preference_storage_location">Localização do armazenamento</string>
<string name="sftp_storage_preference_storage_location_already_configured">Esta localização já foi configurada</string>
<string name="sftp_storage_preference_storage_location">Local de armazenamento</string>
<string name="sftp_storage_preference_storage_location_already_configured">Este local já foi configurado</string>
<string name="sftp_storage_preference_click_to_select">clique para selecionar</string>
<string name="sftp_storage_preference_display_name">Nome de exibição</string>
<string name="sftp_storage_preference_display_name_already_used">Este nome de exibição já está em uso</string>
<string name="sftp_storage_preference_display_name_cannot_be_empty">O nome de exibição não pode esta vazio</string>
<string name="sftp_action_mode_menu_delete">Excluir</string>
<string name="sftp_no_sdcard_detected">Nenhum cartão SD detectado</string>
<string name="sftp_no_storage_locations_configured">Nenhuma localização de armazenamento configurada</string>
<string name="sftp_saf_permission_explanation">Para acessar arquivos remotamente você precisa configurar localizações de armazenamento</string>
<string name="add_host">Adicionar máquina/IP</string>
<string name="add_host_hint">Nome da máquina ou IP</string>
<string name="sftp_no_storage_locations_configured">Nenhum local de armazenamento configurado</string>
<string name="sftp_saf_permission_explanation">Para acessar arquivos remotamente você precisa configurar locais de armazenamento</string>
<string name="no_players_connected">Nenhum reprodutor encontrado</string>
<string name="mpris_player_on_device">%1$s em %2$s</string>
<string name="send_files">Enviar arquivos</string>
<string name="pairing_title">Dispositivos do KDE Connect</string>
<string name="pairing_description">Outros dispositivos executando o KDE Connect na mesma rede devem aparecer aqui.</string>
<string name="device_paired">Dispositivo emparelhado</string>
<string name="device_rename_title">Renomear dispositivo</string>
<string name="device_rename_confirm">Renomear</string>
<string name="refresh">Atualizar</string>
<string name="unreachable_description">Este dispositivo emparelhado não está acessível. Certifique-se de que está conectado à mesma rede que você.</string>
<string name="on_data_message">Parece que você está conectado com dados móveis. O KDE Connect só funciona em redes locais.</string>
<string name="no_wifi">Você não está conectado a nenhuma rede Wi-Fi, então não conseguirá ver nenhum dispositivo. Clique aqui para ativar o Wi-Fi.</string>
<string name="no_file_browser">Não há gerenciadores de arquivos instalados.</string>
<string name="pref_plugin_telepathy">Enviar SMS</string>
<string name="pref_plugin_telepathy_desc">Enviar mensagens de texto do seu Desktop</string>
<string name="plugin_not_supported">Este plugin não é suportado pelo dispositivo</string>
<string name="pref_plugin_telepathy_desc">Envia mensagens de texto do seu Desktop</string>
<string name="findmyphone_title">Encontrar meu telefone</string>
<string name="findmyphone_title_tablet">Encontrar meu tablet</string>
<string name="findmyphone_title_tv">Encontrar minha TV</string>
@@ -239,7 +215,6 @@
<string name="findmyphone_found">Encontrado</string>
<string name="open">Abrir</string>
<string name="close">Fechar</string>
<string name="no_permissions_storage">Você precisa conceder permissões para acessar o armazenamento</string>
<string name="plugins_need_permission">Alguns plugins precisam de permissões para funcionar (toque para mais informações):</string>
<string name="permission_explanation">Este plugin precisa de permissões para funcionar</string>
<string name="optional_permission_explanation">Você precisa conceder permissões extras para ativar todas as funções</string>
@@ -251,7 +226,7 @@
<string name="contacts_permission_explanation">Para compartilhar o seu livro de endereços com o ambiente de trabalho é necessário conceder permissão para os contatos</string>
<string name="select_ringtone">Selecionar um toque de chamada</string>
<string name="telephony_pref_blocked_title">Números bloqueados</string>
<string name="telephony_pref_blocked_dialog_desc">Não mostrar as chamadas e SMS desses números. Indique um número por linha</string>
<string name="telephony_pref_blocked_dialog_desc">Não mostrar as chamadas e SMS destes números. Indique um número por linha.</string>
<string name="mpris_coverart_description">Capa da mídia atual</string>
<string name="device_icon_description">Ícone do dispositivo</string>
<string name="settings_icon_description">Ícone de configurações</string>
@@ -263,8 +238,7 @@
<string name="addcommand_explanation2">Você pode adicionar novos comandos nas Configurações do Sistema KDE Connect</string>
<string name="add_command_description">Você pode adicionar comandos no ambiente de trabalho</string>
<string name="pref_plugin_mprisreceiver">Controle do reprodutor de mídia</string>
<string name="pref_plugin_mprisreceiver_desc">Controle os reprodutores de mídias dos seus celulares a partir de outro dispositivo</string>
<string name="dark_theme">Tema escuro</string>
<string name="pref_plugin_mprisreceiver_desc">Controle os reprodutores de mídias do seu celular a partir de outro dispositivo</string>
<string name="notification_channel_default">Outras notificações</string>
<string name="notification_channel_persistent">Indicador persistente</string>
<string name="notification_channel_media_control">Controle multimídia</string>
@@ -282,7 +256,7 @@
<string name="pref_plugin_systemvolume">Volume do sistema</string>
<string name="pref_plugin_systemvolume_desc">Controle o volume do sistema a partir do dispositivo remoto</string>
<string name="mute">Sem áudio</string>
<string name="all">Tudo</string>
<string name="all">Todos</string>
<string name="devices">Dispositivos</string>
<string name="settings_rename">Nome do dispositivo</string>
<string name="settings_dark_mode">Tema escuro</string>
@@ -294,11 +268,12 @@
<string name="extra_options">Opções extras</string>
<string name="privacy_options">Opções de privacidade</string>
<string name="set_privacy_options">Defina as suas opções de privacidade</string>
<string name="new_notification">Nova notificação</string>
<string name="block_contents">Bloquear o conteúdo das notificações</string>
<string name="block_images">Bloquear as imagens das notificações</string>
<string name="notification_channel_receivenotification">Notificações dos outros dispositivos</string>
<string name="take_picture">Iniciar câmera</string>
<string name="plugin_photo_desc">Iniciar o aplicativo da câmera para facilitar a captura e transferência de fotos</string>
<string name="no_app_for_opening">Não foi encontrado nenhum aplicativo adequado para abrir este arquivo</string>
<string name="remote_keyboard_service">Teclado Remoto do KDE Connect</string>
<string name="presenter_pointer">Ponteiro</string>
</resources>

View File

@@ -31,7 +31,6 @@
<string name="pref_plugin_receive_notifications_desc">Receber as notificações de outros dispositivos e mostrá-las no Android</string>
<string name="pref_plugin_sharereceiver">Partilhar e receber</string>
<string name="pref_plugin_sharereceiver_desc">Partilhar ficheiros e URL\'s entre dispositivos</string>
<string name="plugin_not_available">Esta funcionalidade não está disponível na sua versão do Android</string>
<string name="device_list_empty">Sem dispositivos</string>
<string name="ok">OK</string>
<string name="cancel">Cancelar</string>
@@ -77,25 +76,20 @@
<string name="category_remembered_devices">Dispositivos recordados</string>
<string name="device_menu_plugins">Configuração do \'plugin\'</string>
<string name="device_menu_unpair">Desemparelhar</string>
<string name="device_not_reachable">O dispositivo emparelhado está inacessível</string>
<string name="pair_new_device">Emparelhar um novo dispositivo</string>
<string name="unknown_device">Dispositivo desconhecido</string>
<string name="error_not_reachable">Dispositivo inacessível</string>
<string name="error_already_requested">O emparelhamento já foi pedido</string>
<string name="error_already_paired">O dispositivo já foi emparelhado</string>
<string name="error_could_not_send_package">Não foi possível enviar o pacote</string>
<string name="error_timed_out">Expirou o tempo-limite</string>
<string name="error_canceled_by_user">Cancelado pelo utilizador</string>
<string name="error_canceled_by_other_peer">Cancelado pela outra máquina</string>
<string name="error_invalid_key">Chave inválida recebida</string>
<string name="encryption_info_title">Dados de Encriptação</string>
<string name="encryption_info_msg_no_ssl">O outro dispositivo não usa uma versão recente do KDE Connect; será usado o método antigo de encriptação.</string>
<string name="my_device_fingerprint">A impressão digital SHA1 do certificado do seu dispositivo é:</string>
<string name="remote_device_fingerprint">A impressão digital SHA1 do certificado do dispositivo remoto é:</string>
<string name="pair_requested">Emparelhamento pedido</string>
<string name="pairing_request_from">Pedido de emparelhamento de %1s</string>
<string name="received_url_title">Ligação recebida de %1s</string>
<string name="received_url_text">Toque para abrir o \'%1s\'</string>
<plurals name="incoming_file_title">
<item quantity="one">A receber %1$d ficheiro de %2$s</item>
<item quantity="other">A receber %1$d ficheiros de %2$s</item>
@@ -131,7 +125,6 @@
<string name="received_file_text">Toque para abrir o \'%1s\'</string>
<string name="cannot_create_file">Não é possível criar o ficheiro %s</string>
<string name="tap_to_answer">Toque para responder</string>
<string name="reconnect">Ligar de Novo</string>
<string name="right_click">Enviar um Botão Direito</string>
<string name="middle_click">Enviar um Botão do Meio</string>
<string name="show_keyboard">Mostrar o Teclado</string>
@@ -139,8 +132,6 @@
<string name="request_pairing">Pedir o emparelhamento</string>
<string name="pairing_accept">Aceitar</string>
<string name="pairing_reject">Rejeitar</string>
<string name="device">Dispositivo</string>
<string name="pair_device">Emparelhar o dispositivo</string>
<string name="settings">Configuração</string>
<string name="mpris_play">Tocar</string>
<string name="mpris_pause">Pausa</string>
@@ -149,7 +140,6 @@
<string name="mpris_ff">Avançar</string>
<string name="mpris_next">Seguinte</string>
<string name="mpris_volume">Volume</string>
<string name="mpris_settings">Configuração Multimédia</string>
<string name="mpris_time_settings_title">Botões para avançar/recuar</string>
<string name="mpris_time_settings_summary">Ajusta o tempo para o avanço/recuo quando pressionar</string>
<string-array name="mpris_time_entries">
@@ -162,20 +152,12 @@
<string name="mpris_notification_settings_title">Mostrar a notificação do controlo multimédia</string>
<string name="mpris_notification_settings_summary">Permite controlar os seus leitores multimédia sem abrir o KDE Connect</string>
<string name="share_to">Partilhar Com...</string>
<string name="protocol_version_older">Este dispositivo usa uma versão antiga do protocolo</string>
<string name="protocol_version_newer">Este dispositivo usa uma versão mais recente do protocolo</string>
<string name="general_settings">Configuração Geral</string>
<string name="plugin_settings">Configuração</string>
<string name="plugin_settings_with_name">Configuração do %s</string>
<string name="device_name">Nome do dispositivo</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Nome do dispositivo inválido</string>
<string name="shareplugin_text_saved">Texto recebido e guardado na área de transferência</string>
<string name="custom_devices_settings">Lista de dispositivos personalizada</string>
<string name="pair_device_action">Emparelhar um novo dispositivo</string>
<string name="unpair_device_action">Desemparelhar o %s</string>
<string name="custom_device_list">Adicionar dispositivos pelo IP</string>
<string name="delete_custom_device">Apagar o %s?</string>
<string name="custom_device_deleted">Dispositivo personalizado removido</string>
<string name="custom_device_list_help">Se o seu dispositivo não for detectado automaticamente, poderá adicionar o seu endereço IP ou nome da máquina, carregando no botão da Acção Flutuante</string>
<string name="custom_device_fab_hint">Adicionar um dispositivo</string>
@@ -190,7 +172,6 @@
<string name="share_received_file">Partilhar o \"%s\"</string>
<string name="title_activity_notification_filter">Filtro de notificações</string>
<string name="filter_apps_info">As notificações serão sincronizadas para as aplicações seleccionadas.</string>
<string name="sftp_internal_storage">Armazenamento interno</string>
<string name="sftp_sdcard_num">Cartão SD %d</string>
<string name="sftp_sdcard">Cartão SD</string>
<string name="sftp_readonly">(apenas para leitura)</string>
@@ -215,23 +196,18 @@
<string name="sftp_no_sdcard_detected">Nenhum cartão SD detectado</string>
<string name="sftp_no_storage_locations_configured">Não estão configurados locais de armazenamento</string>
<string name="sftp_saf_permission_explanation">Para aceder a ficheiros remotos, tem de configurar os locais de armazenamento</string>
<string name="add_host">Adicionar uma máquina/IP</string>
<string name="add_host_hint">Nome ou IP da máquina</string>
<string name="no_players_connected">Não foram encontrados leitores</string>
<string name="mpris_player_on_device">%1$s em %2$s</string>
<string name="send_files">Enviar os ficheiros</string>
<string name="pairing_title">Dispositivos do KDE Connect</string>
<string name="pairing_description">Os outros dispositivos a executar o KDE Connect na mesma rede que você deverão aparecer aqui.</string>
<string name="device_paired">Dispositivo emparelhado</string>
<string name="device_rename_title">Mudar o nome do dispositivo</string>
<string name="device_rename_confirm">Mudar o Nome</string>
<string name="refresh">Actualizar</string>
<string name="unreachable_description">Este dispositivo emparelhado não está acessível. Certifique-se que está ligado à mesma rede que você.</string>
<string name="on_data_message">Parece que está com uma ligação de dados móveis. O KDE Connect só se liga em redes locais.</string>
<string name="no_wifi">Não está ligado a nenhuma rede Wi-Fi, pelo que poderá não conseguir ver nenhuns dispositivos. Carregue aqui para activar o Wi-Fi.</string>
<string name="no_file_browser">Não existem gestores de ficheiros instalados.</string>
<string name="pref_plugin_telepathy">Enviar um SMS</string>
<string name="pref_plugin_telepathy_desc">Enviar mensagens de texto a partir do seu ambiente de trabalho</string>
<string name="plugin_not_supported">Este \'plugin\' não é suportado pelo dispositivo</string>
<string name="findmyphone_title">Descobrir o meu telefone</string>
<string name="findmyphone_title_tablet">Descobrir o meu \'tablet\'</string>
<string name="findmyphone_title_tv">Descobrir a minha TV</string>
@@ -239,7 +215,6 @@
<string name="findmyphone_found">Encontrado</string>
<string name="open">Abrir</string>
<string name="close">Fechar</string>
<string name="no_permissions_storage">Precisa de dar permissões de acesso ao armazenamento</string>
<string name="plugins_need_permission">Alguns \'plugins\' precisam de permissões para funcionar (toque para mais informações):</string>
<string name="permission_explanation">Este \'plugin\' precisa de permissões para funcionar</string>
<string name="optional_permission_explanation">Precisa de dar permissões extra para activar todas as funcionalidades</string>
@@ -264,7 +239,6 @@
<string name="add_command_description">Poderá adicionar comandos no ambiente de trabalho</string>
<string name="pref_plugin_mprisreceiver">Controlo de Leitores Multimédia</string>
<string name="pref_plugin_mprisreceiver_desc">Controle os leitores multimédia dos seus telemóveis a partir de outro dispositivo</string>
<string name="dark_theme">Tema escuro</string>
<string name="notification_channel_default">Outras notificações</string>
<string name="notification_channel_persistent">Indicador persistente</string>
<string name="notification_channel_media_control">Comando multimédia</string>
@@ -294,11 +268,12 @@
<string name="extra_options">Opções extra</string>
<string name="privacy_options">Opções de privacidade</string>
<string name="set_privacy_options">Defina as suas opções de privacidade</string>
<string name="new_notification">Nova notificação</string>
<string name="block_contents">Bloquear o conteúdo das notificações</string>
<string name="block_images">Bloquear as imagens das notificações</string>
<string name="notification_channel_receivenotification">Notificações dos outros dispositivos</string>
<string name="take_picture">Lançar a câmara</string>
<string name="plugin_photo_desc">Lança a aplicação da câmara para facilitar a tirada de fotografias e sua transferência</string>
<string name="no_app_for_opening">Não existe nenhuma aplicação adequada para abrir este ficheiro</string>
<string name="remote_keyboard_service">Teclado Remoto do KDE Connect</string>
<string name="presenter_pointer">Cursor</string>
</resources>

View File

@@ -10,7 +10,6 @@
<string name="pref_plugin_ping_desc">Trimite și primește ping-uri</string>
<string name="pref_plugin_notifications">Sincronizare notificări</string>
<string name="pref_plugin_notifications_desc">Accesați-vă notificările de pe alte dispozitive</string>
<string name="plugin_not_available">Această caracteristică nu este disponibilă în versiunea dumneavoastră de Android</string>
<string name="device_list_empty">Niciun dispozitiv</string>
<string name="ok">Bine</string>
<string name="cancel">Renunță</string>
@@ -42,23 +41,18 @@
<string name="device_menu_unpair">Dezasociază</string>
<string name="unknown_device">Dispozitiv necunoscut</string>
<string name="error_not_reachable">Dispozitivul nu e accesibil</string>
<string name="error_already_requested">Asocierea a fost cerută deja</string>
<string name="error_already_paired">Dispozitiv asociat deja</string>
<string name="error_could_not_send_package">Pachetul nu a putut fi trimis</string>
<string name="error_timed_out">A expirat</string>
<string name="error_canceled_by_user">Anulat de către utilizator</string>
<string name="error_canceled_by_other_peer">Anulat de către partener</string>
<string name="error_invalid_key">Cheie nevalidă recepționată</string>
<string name="pair_requested">Asociere cerută</string>
<string name="pairing_request_from">Cerere de asociere de la %1s</string>
<string name="tap_to_answer">Atingeți pentru a răspunde</string>
<string name="reconnect">Reconectează</string>
<string name="device_not_paired">Dispozitiv neasociat</string>
<string name="request_pairing">Cere asocierea</string>
<string name="pairing_accept">Acceptă</string>
<string name="pairing_reject">Respinge</string>
<string name="device">Dispozitiv</string>
<string name="pair_device">Asociază dispozitiv</string>
<string name="mpris_play">Redă</string>
<string name="mpris_previous">Precedent</string>
<string name="mpris_rew">Derulează</string>
@@ -72,10 +66,6 @@
<item>1 minute</item>
<item>2 minutes</item>
</string-array>
<string name="protocol_version_older">Acest dispozitiv folosește o versiune veche a protocolului</string>
<string name="protocol_version_newer">Acest dispozitiv folosește o versiune mai nouă a protocolului</string>
<string name="general_settings">Configurări generale</string>
<string name="device_name">Denumire dispozitiv</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Denumire nevalidă a dispozitivului</string>
</resources>

View File

@@ -13,6 +13,7 @@
<string name="pref_plugin_clipboard_desc">Использование общего буфера обмена</string>
<string name="pref_plugin_mousepad">Удалённый ввод</string>
<string name="pref_plugin_mousepad_desc">Использование телефона или планшета в качестве сенсорной панели и клавиатуры</string>
<string name="pref_plugin_presenter">Пульт управления слайд-шоу</string>
<string name="pref_plugin_presenter_desc">Использование телефона для смены слайдов презентации</string>
<string name="pref_plugin_remotekeyboard">Получение удалённых нажатий клавиш</string>
<string name="pref_plugin_remotekeyboard_desc">Получение нажатий клавиш с удалённых устройств</string>
@@ -21,6 +22,7 @@
<string name="pref_plugin_runcommand">Запуск команд</string>
<string name="pref_plugin_runcommand_desc">Удалённый запуск команд с телефона или планшета</string>
<string name="pref_plugin_contacts">Синхронизация контактов</string>
<string name="pref_plugin_contacts_desc">Синхронизация адресной книги</string>
<string name="pref_plugin_ping">Пинг</string>
<string name="pref_plugin_ping_desc">Отправка и получение тестовых сигналов</string>
<string name="pref_plugin_notifications">Синхронизация уведомлений</string>
@@ -29,12 +31,13 @@
<string name="pref_plugin_receive_notifications_desc">Получение уведомлений с другого устройства и показ их на Android</string>
<string name="pref_plugin_sharereceiver">Отправка и приём данных</string>
<string name="pref_plugin_sharereceiver_desc">Пересылка файлов и адресов URL между устройствами</string>
<string name="plugin_not_available">Эта функциональность недоступна в вашей версии Android</string>
<string name="device_list_empty">Нет устройств</string>
<string name="ok">ОК</string>
<string name="cancel">Отмена</string>
<string name="open_settings">Настроить</string>
<string name="no_permissions">Нужно разрешить доступ к уведомлениям</string>
<string name="no_permission_mprisreceiver">Чтобы управлять мультимедийными проигрывателями, необходимо разрешить доступ к уведомлениям</string>
<string name="no_permissions_remotekeyboard">Чтобы получать нажатия клавиш, необходимо включить удалённую клавиатуру KDE Connect.</string>
<string name="send_ping">Отправить тестовый сигнал</string>
<string name="open_mpris_controls">Управление воспроизведением</string>
<string name="remotekeyboard_editing_only_title">Обрабатывать удалённые нажатия только при редактировании</string>
@@ -42,9 +45,11 @@
<string name="remotekeyboard_connected">Соединение с удалённой клавиатурой активно</string>
<string name="remotekeyboard_multiple_connections">Подключено более одной удалённой клавиатуры, выберите устройство для настройки</string>
<string name="open_mousepad">Удалённый ввод</string>
<string name="mousepad_info">Перемещайте палец по экрану для перемещения курсора мыши. Коснитесь для нажатия, используйте касание двумя/тремя пальцами для правой и средней кнопок. Для выполнения прокрутки используйте два пальца, для перетаскивания — долгое нажатие.</string>
<string name="mousepad_double_tap_settings_title">Действие при нажатии двумя пальцами</string>
<string name="mousepad_triple_tap_settings_title">Действие при нажатии тремя пальцами</string>
<string name="mousepad_sensitivity_settings_title">Чувствительность сенсорной панели</string>
<string name="mousepad_acceleration_profile_settings_title">Настройка ускорения курсора</string>
<string name="mousepad_scroll_direction_title">Инвертировать направление прокрутки</string>
<string-array name="mousepad_tap_entries">
<item>Нажатие правой кнопки</item>
@@ -59,42 +64,61 @@
<item>Самая высокая</item>
</string-array>
<string-array name="mousepad_acceleration_profile_entries">
<item>No Acceleration</item>
<item>Weakest</item>
<item>Weaker</item>
<item>Medium</item>
<item>Stronger</item>
<item>Strongest</item>
<item>Отключить ускорение</item>
<item>Минимальное</item>
<item>Меньше среднего</item>
<item>Среднее</item>
<item>Выше среднего</item>
<item>Высокое</item>
</string-array>
<string name="category_connected_devices">Подключённые устройства</string>
<string name="category_not_paired_devices">Доступные устройства</string>
<string name="category_remembered_devices">Известные устройства</string>
<string name="device_menu_plugins">Настройка модулей</string>
<string name="device_menu_unpair">Снять сопряжение</string>
<string name="device_not_reachable">Сопряжённое устройство недоступно</string>
<string name="pair_new_device">Подключить новое устройство</string>
<string name="unknown_device">Неизвестное устройство</string>
<string name="error_not_reachable">Устройство недоступно</string>
<string name="error_already_requested">Запрос на сопряжение уже был сделан</string>
<string name="error_already_paired">Устройство уже сопряжено</string>
<string name="error_could_not_send_package">Не удалось отправить пакет</string>
<string name="error_timed_out">Истекло время ожидания</string>
<string name="error_canceled_by_user">Отменено пользователем</string>
<string name="error_canceled_by_other_peer">Отменено другим участником</string>
<string name="error_invalid_key">Получен недопустимый ключ</string>
<string name="encryption_info_title">Информация о шифровании</string>
<string name="encryption_info_msg_no_ssl">На другом устройстве используется старая версия KDE Connect, используется старый метод шифрования.</string>
<string name="my_device_fingerprint">Отпечаток SHA-1 сертификата вашего устройства:</string>
<string name="remote_device_fingerprint">Отпечаток SHA-1 сертификата удалённого устройства:</string>
<string name="pair_requested">Запрошено сопряжение</string>
<string name="pairing_request_from">Запрос на сопряжение от %1s</string>
<string name="received_url_title">Получена ссылка от %1s</string>
<string name="received_url_text">Нажмите, чтобы открыть «%1s»</string>
<plurals name="incoming_file_title">
<item quantity="one">Получение %1$d файла с %2$s</item>
<item quantity="few">Получение %1$d файлов с %2$s</item>
<item quantity="many">Получение %1$d файлов с %2$s</item>
<item quantity="other">Получение %1$d файла с %2$s</item>
</plurals>
<plurals name="incoming_files_text">
<item quantity="one">(Файл %2$d из %3$d): %1$s</item>
<item quantity="few">(Файл %2$d из %3$d): %1$s</item>
<item quantity="many">(Файл %2$d из %3$d): %1$s</item>
<item quantity="other">Файл: %1$s</item>
</plurals>
<plurals name="outgoing_file_title">
<item quantity="one">Передача %1$d файла на %2$s</item>
<item quantity="few">Передача %1$d файлов на %2$s</item>
<item quantity="many">Передача %1$d файлов на %2$s</item>
<item quantity="other">Передача %1$d файла на %2$s</item>
</plurals>
<plurals name="outgoing_files_text">
<item quantity="one">(Файл %2$d из %3$d): %1$s</item>
<item quantity="few">(Файл %2$d из %3$d): %1$s</item>
<item quantity="many">(Файл %2$d из %3$d): %1$s</item>
<item quantity="other">Файл: %1$s</item>
</plurals>
<plurals name="received_files_title">
<item quantity="one">Получен %2$d файл с %1$s</item>
<item quantity="few">Получены %2$d файла с %1$s</item>
<item quantity="many">Получены %2$d файлов с %1$s</item>
<item quantity="other">Получен файл с %1$s</item>
<item quantity="one">С %1$s получен %2$d файл</item>
<item quantity="few">С %1$s получены %2$d файла</item>
<item quantity="many">С %1$s получено %2$d файлов</item>
<item quantity="other">С %1$s получен файл</item>
</plurals>
<plurals name="received_files_fail_title">
<item quantity="one">Не удалось получить %2$d из %3$d файла с %1$s</item>
@@ -102,9 +126,21 @@
<item quantity="many">Не удалось получить %2$d из %3$d файлов с %1$s</item>
<item quantity="other">Не удалось получить файл с %1$s</item>
</plurals>
<plurals name="sent_files_title">
<item quantity="one">На %1$s передан %2$d файл</item>
<item quantity="few">На %1$s переданы %2$d файла</item>
<item quantity="many">На %1$s переданы %2$d файлов</item>
<item quantity="other">На %1$s передан %2$d файл</item>
</plurals>
<plurals name="send_files_fail_title">
<item quantity="one">Не удалось передать %2$d из %3$d файлов на %1$s</item>
<item quantity="few">Не удалось передать %2$d из %3$d файлов на %1$s</item>
<item quantity="many">Не удалось передать %2$d из %3$d файлов на %1$s</item>
<item quantity="other">Не удалось передать файл на %1$s</item>
</plurals>
<string name="received_file_text">Нажмите, чтобы открыть «%1s»</string>
<string name="cannot_create_file">Не удалось создать файл «%s»</string>
<string name="tap_to_answer">Нажмите, чтобы ответить</string>
<string name="reconnect">Подключить заново</string>
<string name="right_click">Нажатие правой кнопки</string>
<string name="middle_click">Нажатие средней кнопки</string>
<string name="show_keyboard">Показать клавиатуру</string>
@@ -112,17 +148,16 @@
<string name="request_pairing">Запросить сопряжение</string>
<string name="pairing_accept">Принять</string>
<string name="pairing_reject">Отклонить</string>
<string name="device">Устройство</string>
<string name="pair_device">Сопрячь устройство</string>
<string name="settings">Настройка</string>
<string name="mpris_play">Воспроизведение</string>
<string name="mpris_pause">Приостановить</string>
<string name="mpris_previous">Предыдущая</string>
<string name="mpris_rew">Назад</string>
<string name="mpris_ff">Вперёд</string>
<string name="mpris_next">Следующая</string>
<string name="mpris_volume">Громкость</string>
<string name="mpris_settings">Настройка мультимедиа</string>
<string name="mpris_time_settings_title">Кнопки вперёд/назад</string>
<string name="mpris_time_settings_summary">Настройка шага перемотки при нажатии кнопок вперёд или назад</string>
<string-array name="mpris_time_entries">
<item>10 секунд</item>
<item>20 секунд</item>
@@ -130,67 +165,129 @@
<item>1 минута</item>
<item>2 минуты</item>
</string-array>
<string name="protocol_version_older">Это устройство использует старую версию протокола</string>
<string name="mpris_notification_settings_title">Управление проигрывателем из области уведомлений</string>
<string name="mpris_notification_settings_summary">Управление воспроизведением при закрытом KDE Connect</string>
<string name="share_to">Отправить на...</string>
<string name="protocol_version_newer">Это устройство использует более новую версию протокола</string>
<string name="general_settings">Общие параметры</string>
<string name="plugin_settings">Настройка</string>
<string name="plugin_settings_with_name">Настройка %s</string>
<string name="device_name">Имя устройства</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Недопустимое имя устройства</string>
<string name="shareplugin_text_saved">Получен текст, он сохранен в буфер обмена</string>
<string name="custom_devices_settings">Ручной список устройств</string>
<string name="pair_device_action">Сопрячь с новым устройством</string>
<string name="unpair_device_action">Снять сопряжение с %s</string>
<string name="custom_devices_settings">Устройства, заданные вручную</string>
<string name="custom_device_list">Добавить устройства по IP</string>
<string name="custom_device_deleted">Заданное вручную устройство удалено</string>
<string name="custom_device_list_help">Если устройство не обнаружено автоматически, возможно добавить его вручную по IP-адресу или по имени хоста.</string>
<string name="custom_device_fab_hint">Добавление устройства</string>
<string name="undo">Отменить</string>
<string name="share_notification_preference">Звуковые уведомления</string>
<string name="share_notification_preference_summary">Использовать вибрацию и звуковой сигнал при получении файла</string>
<string name="share_destination_customize">Задать целевой каталог</string>
<string name="share_destination_customize_summary_disabled">Полученные файлы появятся в каталоге Загрузки</string>
<string name="share_destination_customize_summary_enabled">Файлы будут сохранены в указанном ниже каталоге</string>
<string name="share_destination_folder_preference">Целевой каталог</string>
<string name="share">Отправить</string>
<string name="share_received_file">Поделиться «%s» с помощью:</string>
<string name="title_activity_notification_filter">Фильтр уведомлений</string>
<string name="filter_apps_info">Уведомления будут синхронизированы для выбранных приложений.</string>
<string name="sftp_internal_storage">Встроенная память</string>
<string name="sftp_sdcard_num">SD-карта %d</string>
<string name="sftp_sdcard">SD-карта</string>
<string name="sftp_readonly">(только чтение)</string>
<string name="sftp_camera">Фотографии с камеры</string>
<string name="add_host">Добавить хост/IP-адрес</string>
<string name="add_device_dialog_title">Добавление устройства</string>
<string name="add_device_hint">Имя хоста или IP-адрес</string>
<string name="sftp_preference_detected_sdcards">Обнаруженные SD-карты</string>
<string name="sftp_preference_edit_sdcard_title">Изменить SD-карте</string>
<string name="sftp_preference_configured_storage_locations">Настроенные общие папки</string>
<string name="sftp_preference_add_storage_location_title">Добавить общую папку</string>
<string name="sftp_preference_edit_storage_location">Изменение общей папки</string>
<string name="sftp_preference_add_camera_shortcut">Ссылка на папку камеры</string>
<string name="sftp_preference_add_camera_shortcut_summary_on">Добавить ссылку на папку камеру</string>
<string name="sftp_preference_add_camera_shortcut_summary_off">Не добавлять ссылку на папку камеру</string>
<string name="sftp_storage_preference_storage_location">Расположение на устройстве</string>
<string name="sftp_storage_preference_storage_location_already_configured">Это расположение уже было добавлено</string>
<string name="sftp_storage_preference_click_to_select">нажмите для выбора</string>
<string name="sftp_storage_preference_display_name">Отображаемое имя</string>
<string name="sftp_storage_preference_display_name_already_used">Отображаемое имя уже используется</string>
<string name="sftp_storage_preference_display_name_cannot_be_empty">Отображаемое имя не может быть пустым</string>
<string name="sftp_action_mode_menu_delete">Удалить</string>
<string name="sftp_no_sdcard_detected">SD-карт не обнаружено</string>
<string name="sftp_no_storage_locations_configured">Нет настроенных общих папок</string>
<string name="sftp_saf_permission_explanation">Чтобы разрешить удалённый доступ к файлам, необходимо настроить список общих папок.</string>
<string name="no_players_connected">Медиапроигрывателей не найдено</string>
<string name="mpris_player_on_device">%1$s на %2$s</string>
<string name="send_files">Отправить файлы</string>
<string name="pairing_title">Устройства с KDE Connect</string>
<string name="pairing_description">Здесь появятся другие устройства в этой же сети, на которых запущен KDE Connect.</string>
<string name="device_paired">Устройство сопряжено</string>
<string name="device_rename_title">Переименование устройства</string>
<string name="device_rename_confirm">Переименовать</string>
<string name="refresh">Обновить</string>
<string name="unreachable_description">Это сопряжённое устройство недоступно. Проверьте, что оно подключено к той же локальной сети.</string>
<string name="on_data_message">Похоже, вы подключены к мобильной сети. KDE Connect работает только в локальных сетях.</string>
<string name="no_file_browser">Не удалось открыть диалог выбора файла.</string>
<string name="pref_plugin_telepathy">Отправка SMS</string>
<string name="pref_plugin_telepathy_desc">Отправка SMS-сообщений с вашего компьютера</string>
<string name="plugin_not_supported">Этот модуль не поддерживается устройством</string>
<string name="findmyphone_title">Поиск телефона</string>
<string name="findmyphone_title_tablet">Поиск планшета</string>
<string name="findmyphone_title_tv">Поиск телевизора</string>
<string name="findmyphone_description">Подача звукового сигнала на устройстве, чтобы вы могли его найти</string>
<string name="findmyphone_found">Найден</string>
<string name="open">Открыть</string>
<string name="close">Закрыть</string>
<string name="no_permissions_storage">Необходимо предоставить разрешения на доступ к хранилищу</string>
<string name="plugins_need_permission">Некоторым модулям нужны разрешения для работы (нажмите для просмотра подробностей):</string>
<string name="permission_explanation">Этому модулю нужны разрешения для работы</string>
<string name="optional_permission_explanation">Необходимо предоставить дополнительные разрешения для включения всех функций</string>
<string name="plugins_need_optional_permission">Некоторые функции модулей отключены из-за отсутствия необходимых разрешений (нажмите для просмотра подробностей):</string>
<string name="share_optional_permission_explanation">Чтобы обмениваться файлами между телефоном и компьютером, необходимо предоставить доступ к встроенной памяти телефона</string>
<string name="telepathy_permission_explanation">Чтобы читать и писать SMS с компьютера, вам необходимо дать разрешение на доступ к SMS</string>
<string name="telephony_permission_explanation">Чтобы видеть телефонные звонки на компьютере, необходимо дать разрешение на доступ к списку звонков и состоянию телефона</string>
<string name="telephony_optional_permission_explanation">Чтобы видеть имя контакта вместо номера телефона, необходимо предоставить доступ к контактам</string>
<string name="dark_theme">Тёмное оформление</string>
<string name="contacts_permission_explanation">Чтобы открыть доступ к адресной книге, вам необходимо дать разрешение на доступ к контактам</string>
<string name="select_ringtone">Выбор мелодии</string>
<string name="telephony_pref_blocked_title">Заблокированные номера</string>
<string name="telephony_pref_blocked_dialog_desc">Номера, звонки и СМС с которых не будут показаны. Каждый номер с новой строки.</string>
<string name="mpris_coverart_description">Обложка воспроизводимого файла</string>
<string name="device_icon_description">Значок устройства</string>
<string name="settings_icon_description">Значок настройки</string>
<string name="presenter_fullscreen">На весь экран</string>
<string name="presenter_exit">Закончить слайд-шоу</string>
<string name="presenter_lock_tip">Вы можете заблокировать устройство и использовать кнопки управления громкостью для перехода к предыдущему/следующему слайду.</string>
<string name="add_command">Добавить команду</string>
<string name="addcommand_explanation">Нет настроенных команд.</string>
<string name="addcommand_explanation2">Вы можете добавить новые команды в «Параметрах системы» в разделе «KDE Connect».</string>
<string name="add_command_description">Команды возможно добавлять с ПК</string>
<string name="pref_plugin_mprisreceiver">Управление мультимедиа</string>
<string name="notification_channel_default">Прочие уведомления</string>
<string name="notification_channel_persistent">Постоянный индикатор</string>
<string name="notification_channel_media_control">Управление воспроизведением</string>
<string name="notification_channel_filetransfer">Передача файлов</string>
<string name="mpris_stop">Остановить воспроизведение</string>
<string name="copy_url_to_clipboard">Копировать URL в буфер обмена</string>
<string name="clipboard_toast">Скопировано в буфер обмена</string>
<string name="runcommand_notreachable">Устройство недоступно</string>
<string name="runcommand_notpaired">Устройство не сопряжено</string>
<string name="runcommand_nosuchdevice">Нет такого устройства</string>
<string name="runcommand_noruncommandplugin">На устройстве не задействован подключаемый модуль запуска команд</string>
<string name="pref_plugin_findremotedevice">Найти устройство</string>
<string name="pref_plugin_findremotedevice_desc">Позвонить на устройство</string>
<string name="ring">Звонок</string>
<string name="pref_plugin_systemvolume">Системная громкость</string>
<string name="pref_plugin_systemvolume_desc">Управление системной громкостью удалённого устройства</string>
<string name="mute">Выключить звук</string>
<string name="all">Все</string>
<string name="devices">Устройства</string>
<string name="settings_rename">Имя устройства</string>
<string name="settings_dark_mode">Тёмное оформление</string>
<string name="settings_more_settings_title">Дополнительные параметры</string>
<string name="settings_more_settings_text">Для настройка параметров, применимых к сопряжённому устройству, служит пункт меню «Настройка модулей» на странице устройства.</string>
<string name="setting_persistent_notification">Показывать постоянное уведомление</string>
<string name="setting_persistent_notification_oreo">Постоянное уведомление</string>
<string name="setting_persistent_notification_description">Нажмите для включения или отключения в настройках уведомлений</string>
<string name="extra_options">Дополнительные параметры</string>
<string name="privacy_options">Параметры конфиденциальности</string>
<string name="set_privacy_options">Настройка параметров конфиденциальности</string>
<string name="block_contents">Скрывать текст уведомлений</string>
<string name="block_images">Скрывать изображения в уведомлениях</string>
<string name="notification_channel_receivenotification">Уведомления с других устройств</string>
<string name="take_picture">Сделать снимок</string>
<string name="plugin_photo_desc">Создание и передача снимков</string>
<string name="no_app_for_opening">Для этого файла нет приложений, способных его открыть</string>
<string name="remote_keyboard_service">Удалённая клавиатура KDE Connect</string>
<string name="presenter_pointer">Указатель</string>
</resources>

View File

@@ -13,6 +13,7 @@
<string name="pref_plugin_clipboard_desc">Zdieľať obsah schránky</string>
<string name="pref_plugin_mousepad">Vzdialený vstup</string>
<string name="pref_plugin_mousepad_desc">Použiť váš telefón alebo tablet ako touchpad a klávesnicu</string>
<string name="pref_plugin_presenter">Diaľkový ovládač prezentácie</string>
<string name="pref_plugin_presenter_desc">Používajte vaše zariadenie na posúvanie stránok prezentácie</string>
<string name="pref_plugin_remotekeyboard">Prijímať vzdialené stlačenia klávesov</string>
<string name="pref_plugin_remotekeyboard_desc">Prjímať udalosti stlačenia kláves z diaľkových zariadení</string>
@@ -30,13 +31,13 @@
<string name="pref_plugin_receive_notifications_desc">Prístup k pripomienkam z iných zariadení a zobrazenie ich na Androide</string>
<string name="pref_plugin_sharereceiver">Zdieľať a prijať</string>
<string name="pref_plugin_sharereceiver_desc">Zdieľať súbory a medzi zariadeniami</string>
<string name="plugin_not_available">Táto funkcia nie je dostupná vo vašej verzii Androidu</string>
<string name="device_list_empty">Žiadne zariadenia</string>
<string name="ok">OK</string>
<string name="cancel">Zrušiť</string>
<string name="open_settings">Otvoriť nastavenia</string>
<string name="no_permissions">Musíte povoliť oprávnenia na prístup k pripomienkam</string>
<string name="no_permission_mprisreceiver">Aby ste mohli ovládať prehrávače médií musíte udeliť oprávnenie pristupovať k oznámeniam.</string>
<string name="no_permissions_remotekeyboard">Ak chcete prijímať stlačenia klávesov, musíte aktivovať KDE Connect Vzdialená Klávesnica</string>
<string name="send_ping">Poslať ping</string>
<string name="open_mpris_controls">Multimediálny ovládač</string>
<string name="remotekeyboard_editing_only_title">Spracovať vzdialené klávesy iba počas upravovania</string>
@@ -75,25 +76,20 @@
<string name="category_remembered_devices">Zapamätané zariadenia</string>
<string name="device_menu_plugins">Nastavenia pluginu</string>
<string name="device_menu_unpair">Odpárovať</string>
<string name="device_not_reachable">Spárované zariadenie nedostupné</string>
<string name="pair_new_device">Spárovať nové zariadenie</string>
<string name="unknown_device">Neznáme zariadenie</string>
<string name="error_not_reachable">Zariadenie nedostupné</string>
<string name="error_already_requested">Spárovanie už vyžiadané</string>
<string name="error_already_paired">Zariadenie už spárované</string>
<string name="error_could_not_send_package">Nemôžem poslať balík</string>
<string name="error_timed_out">Čas vypršal</string>
<string name="error_canceled_by_user">Zrušené používateľom</string>
<string name="error_canceled_by_other_peer">Zrušené iným klientom</string>
<string name="error_invalid_key">Získaný nesprávny kľúč</string>
<string name="encryption_info_title">Informácia o šifrovaní</string>
<string name="encryption_info_msg_no_ssl">Ďalšie zariadenie nepoužíva aktuálnu verziu KDE Connect, používam klasickú metódu šifrovania.</string>
<string name="my_device_fingerprint">Odtlačok SHA1 vášho certifikátu zariadenia je:</string>
<string name="remote_device_fingerprint">Odtlačok SHA1 vzdialeného certifikátu zariadenia je:</string>
<string name="pair_requested">Spárovanie vyžiadané</string>
<string name="pairing_request_from">Požiadavka na spárovanie od %1s</string>
<string name="received_url_title">Prijatý odkaz od %1s</string>
<string name="received_url_text">Ťuknite na otvorenie \'%1s\'</string>
<plurals name="incoming_file_title">
<item quantity="one">Prijímam %1$d súbor z %2$s</item>
<item quantity="few">Prijímam %1$d súbory z %2$s</item>
@@ -106,6 +102,18 @@
<item quantity="many">(Súbor %2$d z %3$d) : %1$s</item>
<item quantity="other"/>
</plurals>
<plurals name="outgoing_file_title">
<item quantity="one">Posielam %1$d súbor do %2$s</item>
<item quantity="few">Posielam %1$d súbory do %2$s</item>
<item quantity="many">Posielam %1$d súborov do %2$s</item>
<item quantity="other"/>
</plurals>
<plurals name="outgoing_files_text">
<item quantity="one">Súbor: %1$s</item>
<item quantity="few">(Súbor %2$d z %3$d) : %1$s</item>
<item quantity="many">(Súbor %2$d z %3$d) : %1$s</item>
<item quantity="other"/>
</plurals>
<plurals name="received_files_title">
<item quantity="one">Prijatý súbor od %1$s</item>
<item quantity="few">Prijaté %2$d súbory od %1$s</item>
@@ -118,10 +126,21 @@
<item quantity="many">Zlyhalo prijatie %2$d z %3$d súborov od %1$s</item>
<item quantity="other"/>
</plurals>
<plurals name="sent_files_title">
<item quantity="one">Poslať súbor do %1$s</item>
<item quantity="few">Poslať %2$d súbory do %1$s</item>
<item quantity="many">Poslať %2$d súborov do %1$s</item>
<item quantity="other"/>
</plurals>
<plurals name="send_files_fail_title">
<item quantity="one">Zlyhalo odoslanie súboru do %1$s</item>
<item quantity="few">Zlyhalo odoslanie %2$d z %3$d súborov do %1$s</item>
<item quantity="many">Zlyhalo odoslanie %2$d z %3$d súborov do %1$s</item>
<item quantity="other"/>
</plurals>
<string name="received_file_text">Ťuknite na otvorenie \'%1s\'</string>
<string name="cannot_create_file">Nomožno vytvoriť súbor %s</string>
<string name="tap_to_answer">Tapnite na odpoveď</string>
<string name="reconnect">Znovu pripojiť</string>
<string name="right_click">Poslať kliknutie pravým</string>
<string name="middle_click">Poslať kliknutie stredným</string>
<string name="show_keyboard">Zobraziť klávesnicu</string>
@@ -129,8 +148,6 @@
<string name="request_pairing">Požiadavka na spárovanie</string>
<string name="pairing_accept">Prijať</string>
<string name="pairing_reject">Odmietnuť</string>
<string name="device">Zariadenie</string>
<string name="pair_device">Spárovať zariadenie</string>
<string name="settings">Nastavenia</string>
<string name="mpris_play">Prehrať</string>
<string name="mpris_pause">Pozastaviť</string>
@@ -139,7 +156,6 @@
<string name="mpris_ff">Pretočiť dopredu</string>
<string name="mpris_next">Nasledovné</string>
<string name="mpris_volume">Hlasitosť</string>
<string name="mpris_settings">Multimediálne nastavenia</string>
<string name="mpris_time_settings_title">Tlačidlá dopredu/pretočiť</string>
<string name="mpris_time_settings_summary">Prispôsobiť čas na pretáčanie dopredu alebo dozadu pri stlačení</string>
<string-array name="mpris_time_entries">
@@ -152,20 +168,16 @@
<string name="mpris_notification_settings_title">Zobraziť oznámenie ovládania médií</string>
<string name="mpris_notification_settings_summary">Povoliť ovládanie vaších prehrávačov médií bez otvárania KDE Connect</string>
<string name="share_to">Zdieľať do...</string>
<string name="protocol_version_older">Toto zariadenie používa starú verziu protokolu</string>
<string name="protocol_version_newer">Toto zariadenie používa novšiu verziu protokolu</string>
<string name="general_settings">Všeobecné nastavenia</string>
<string name="plugin_settings">Nastavenia</string>
<string name="plugin_settings_with_name">%s nastavenia</string>
<string name="device_name">Názov zariadenia</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Neplatný názov zariadenia</string>
<string name="shareplugin_text_saved">Prijatý text, uložený do schránky</string>
<string name="custom_devices_settings">Zoznam vlastných zariadení</string>
<string name="pair_device_action">Spárovať nové zariadenie</string>
<string name="unpair_device_action">Odpárovať %s</string>
<string name="custom_device_list">Pridať zariadenia podľa IP</string>
<string name="delete_custom_device">Vymazať %s?</string>
<string name="custom_device_deleted">Odstránené vlastné zariadenie</string>
<string name="custom_device_list_help">Ak vaše zariadenie nie je automaticky zistené, môžete pridať jeho IP adresu alebo názov hostiteľa kliknutím na plávajúce tlačidlo</string>
<string name="custom_device_fab_hint">Pridať zariadenie</string>
<string name="undo">Vrátiť</string>
<string name="share_notification_preference">Hlučné pripomienky</string>
<string name="share_notification_preference_summary">Vibrovať a prehrať zvuk pri prijatí súboru</string>
<string name="share_destination_customize">Prispôsobiť cieľový priečinok</string>
@@ -176,30 +188,42 @@
<string name="share_received_file">Zdiaľať \"%s\"</string>
<string name="title_activity_notification_filter">Filter upozornení</string>
<string name="filter_apps_info">Upozornenia budú synchronizované pre vybrané aplikácie.</string>
<string name="sftp_internal_storage">Interné úložisko</string>
<string name="sftp_sdcard_num">SD karta %d</string>
<string name="sftp_sdcard">SD karta</string>
<string name="sftp_readonly">(iba na čítanie)</string>
<string name="sftp_camera">Obrázky fotoaparátu</string>
<string name="add_device_dialog_title">Pridať zariadenie</string>
<string name="add_device_hint">Hostiteľ alebo IP adresa</string>
<string name="sftp_preference_detected_sdcards">Rozpoznané SD karty</string>
<string name="sftp_preference_edit_sdcard_title">Upraviť SD kartu</string>
<string name="sftp_preference_configured_storage_locations">Nastavené umiestnenia úložiska</string>
<string name="sftp_preference_add_storage_location_title">Pridať umiestnenie úložiska</string>
<string name="sftp_preference_edit_storage_location">Upraviť umiestnenie úložiska</string>
<string name="sftp_preference_add_camera_shortcut">Pridať skratku na priečinok s fotkami</string>
<string name="sftp_preference_add_camera_shortcut_summary_on">Pridať skratku na priečinok s fotkami</string>
<string name="sftp_preference_add_camera_shortcut_summary_off">Nepridávať skratku na priečinok s fotkami</string>
<string name="sftp_storage_preference_storage_location">umiestnenie úložiska</string>
<string name="sftp_storage_preference_storage_location_already_configured">toto umiestnenie už bolo nastavené</string>
<string name="sftp_storage_preference_click_to_select">kliknite na výber</string>
<string name="sftp_storage_preference_display_name">Zobraziť meno</string>
<string name="add_host">Pridať hostiteľa/IP</string>
<string name="add_host_hint">Názov hostiteľa alebo IP</string>
<string name="sftp_storage_preference_display_name_already_used">Tento zobrazovaný názov už je použitý</string>
<string name="sftp_storage_preference_display_name_cannot_be_empty">Zobrazovaný názov nemôže byť prázdny</string>
<string name="sftp_action_mode_menu_delete">Vymazať</string>
<string name="sftp_no_sdcard_detected">Nebola rozpoznaná žiadna SD karta</string>
<string name="sftp_no_storage_locations_configured">Žiadne umiestnenia úložiska nastavené</string>
<string name="sftp_saf_permission_explanation">Na vzdialený prístup k súborom musíte nastaviť umiestnenia úložiska</string>
<string name="no_players_connected">Nenašli sa žiadne prehrávače</string>
<string name="mpris_player_on_device">%1$s na %2$s</string>
<string name="send_files">Odoslať súbory</string>
<string name="pairing_title">KDE Connect zariadenia</string>
<string name="pairing_description">Iné zariadenie so spusteným KDE Connect v rovnakej sieti by sa tu mali objaviť.</string>
<string name="device_paired">Zariadenie spárované</string>
<string name="device_rename_title">Premenovať zariadenie</string>
<string name="device_rename_confirm">Premenovať</string>
<string name="refresh">Obnoviť</string>
<string name="unreachable_description">Toto spárované zariadenie nie je dosiahnuteľné. Prosím, uistite sa, že je pripojené do rovnakej siete.</string>
<string name="on_data_message">Vyzerá to tak že ste na mobilnom dátovom pripojení. KDE Connect funguje iba na lokálnych sieťach.</string>
<string name="no_wifi">Nie ste pripojení k sieti Wi-Fi, takže pravdepodobne nebudete môcť vidieť žiadne zariadenia. Kliknutím sem povolíte pripojenie Wi-Fi.</string>
<string name="no_file_browser">Nie sú nainštalované žiadne prehliadače.</string>
<string name="pref_plugin_telepathy">Poslať SMS</string>
<string name="pref_plugin_telepathy_desc">Posielať textové správy z vášho počítača</string>
<string name="plugin_not_supported">Tento plugin nie je podporovaný zariadením</string>
<string name="findmyphone_title">Nájsť môj telefón</string>
<string name="findmyphone_title_tablet">Nájsť môj tablet</string>
<string name="findmyphone_title_tv">Nájsť môj TV</string>
@@ -207,13 +231,13 @@
<string name="findmyphone_found">Nájdené</string>
<string name="open">Otvoriť</string>
<string name="close">Zavrieť</string>
<string name="no_permissions_storage">Musíte povoliť oprávnenia na prístup k úložisku</string>
<string name="plugins_need_permission">Niektoré Pluginy potrebujú oprávnenia aby fungovali (ťuknite pre viac info):</string>
<string name="permission_explanation">Tento plugin potrebuje oprávnenia aby fungoval</string>
<string name="optional_permission_explanation">Musíte povoliť oprávnenia na povolenie všetkých funkcií</string>
<string name="plugins_need_optional_permission">Niektoré pluginy majú zakázané funkcie pre nedostatok opránení (ťuknite pre viac info):</string>
<string name="share_optional_permission_explanation">Na zdieľanie súborov medzi vašim telefónom a počítačom potrebujete dať prístup k úložisku telefónu</string>
<string name="telepathy_permission_explanation">Na čítanie a písanie SMS z vašeho počítača, potrebujete dať oprávnienie na SMS</string>
<string name="telephony_permission_explanation">Aby ste videli telefónne hovory z počítača, potrebujete dať oprávnenie na zoznamy hovorov a stav telefónu</string>
<string name="telephony_optional_permission_explanation">Aby ste videli meno kontaktu namiesto čísla, potrebujete dať oprávnenie na telefónne kontakty</string>
<string name="contacts_permission_explanation">Na zdieľanie kontaktov s počítačom, potrebujete dať oprávnenie na kontakty</string>
<string name="select_ringtone">Nastaviť tón zvonenia</string>
@@ -224,13 +248,12 @@
<string name="settings_icon_description">Ikona Nastavení</string>
<string name="presenter_fullscreen">Celá obrazovka</string>
<string name="presenter_exit">Ukončiť prezentáciu</string>
<string name="presenter_lock_tip">Môžete zamknúť vaše zariadenie a používať tlačidlá hlasitosti na prechod medzi snímkami</string>
<string name="add_command">Pridať príkaz</string>
<string name="addcommand_explanation">Nie sú registrované žiadne príkazy</string>
<string name="addcommand_explanation2">Môžete pridať nové príkazy v KDE Connect systémových nastaveniach</string>
<string name="add_command_description">Môžete pridať príkazy na počítači</string>
<string name="pref_plugin_mprisreceiver">Multimediálny ovládač</string>
<string name="pref_plugin_mprisreceiver_desc">Ovládajte mediálne prehrávače vášho telefónu z iného zariadenia</string>
<string name="dark_theme">Tmavá téma</string>
<string name="notification_channel_default">Ostatné upozornenia</string>
<string name="notification_channel_persistent">Trvalý indikátor</string>
<string name="notification_channel_media_control">Multimediálny ovládač</string>
@@ -260,8 +283,12 @@
<string name="extra_options">Ďalšie možnosti</string>
<string name="privacy_options">Možnosti súkromia</string>
<string name="set_privacy_options">Nastavte vaše súkromie</string>
<string name="new_notification">Nové oznámenie</string>
<string name="block_contents">Blokovať obsah oznámení</string>
<string name="block_images">Blokovať obrázky v oznámeniach</string>
<string name="notification_channel_receivenotification">Oznámenia iných zariadení</string>
<string name="take_picture">Spustiť fotoaparát</string>
<string name="plugin_photo_desc">Spustiť aplikáciu fotoaparátu na uľahčenie snímania a prenosu obrázkov</string>
<string name="no_app_for_opening">Nenašla sa vhodná aplikácia na otvorenie tohto súboru</string>
<string name="remote_keyboard_service">KDE Connect Vzdialená Klávesnica</string>
<string name="presenter_pointer">Ukazovateľ</string>
</resources>

View File

@@ -31,7 +31,6 @@
<string name="pref_plugin_receive_notifications_desc">Ta emot underrättelser från andra apparater och visa dem på Android</string>
<string name="pref_plugin_sharereceiver">Dela och ta emot</string>
<string name="pref_plugin_sharereceiver_desc">Dela filer och webbadresser mellan apparater</string>
<string name="plugin_not_available">Funktionen är inte tillgänglig i Android-versionen</string>
<string name="device_list_empty">Inga apparater</string>
<string name="ok">Ok</string>
<string name="cancel">Avbryt</string>
@@ -77,25 +76,20 @@
<string name="category_remembered_devices">Ihågkomna apparater</string>
<string name="device_menu_plugins">Inställningar av insticksprogram</string>
<string name="device_menu_unpair">Ta bort ihopparning</string>
<string name="device_not_reachable">Ihopparad apparat kan inte nås</string>
<string name="pair_new_device">Para ihop ny apparat</string>
<string name="unknown_device">Okänd apparat</string>
<string name="error_not_reachable">Apparaten kan inte nås</string>
<string name="error_already_requested">Ihopparning redan begärd</string>
<string name="error_already_paired">Apparat redan ihopparad</string>
<string name="error_could_not_send_package">Kunde inte skicka paket</string>
<string name="error_timed_out">Tidsgräns överskriden</string>
<string name="error_canceled_by_user">Avbruten av användaren</string>
<string name="error_canceled_by_other_peer">Avbruten av motparten</string>
<string name="error_invalid_key">Ogiltig nyckel mottagen</string>
<string name="encryption_info_title">Krypteringsinformation</string>
<string name="encryption_info_msg_no_ssl">Den andra apparaten använder inte en aktuell version av KDE-anslut. Använder den föråldrade krypteringsmetoden.</string>
<string name="my_device_fingerprint">SHA1-fingeravtryck för din apparats certifikat är:</string>
<string name="remote_device_fingerprint">SHA1-fingeravtryck för den andra apparatens certifikat är:</string>
<string name="pair_requested">Ihopparning begärd</string>
<string name="pairing_request_from">Begäran om ihopparning från %1s</string>
<string name="received_url_title">Tog emot länk från %1s</string>
<string name="received_url_text">Rör för att öppna \'%1s\'</string>
<plurals name="incoming_file_title">
<item quantity="one">Tar emot %1$d fil från %2$s</item>
<item quantity="other">Tar emot %1$d filer från %2$s</item>
@@ -131,7 +125,6 @@
<string name="received_file_text">Rör för att öppna \'%1s\'</string>
<string name="cannot_create_file">Kan inte skapa filen %s</string>
<string name="tap_to_answer">Rör för att svara</string>
<string name="reconnect">Anslut igen</string>
<string name="right_click">Skicka högerklick</string>
<string name="middle_click">Skicka mittenklick</string>
<string name="show_keyboard">Visa tangentbord</string>
@@ -139,8 +132,6 @@
<string name="request_pairing">Begära ihopparning</string>
<string name="pairing_accept">Acceptera</string>
<string name="pairing_reject">Avslå</string>
<string name="device">Apparat</string>
<string name="pair_device">Para ihop apparat</string>
<string name="settings">Inställningar</string>
<string name="mpris_play">Spela</string>
<string name="mpris_pause">Paus</string>
@@ -149,7 +140,6 @@
<string name="mpris_ff">Snabbspola framåt</string>
<string name="mpris_next">Nästa</string>
<string name="mpris_volume">Volym</string>
<string name="mpris_settings">Multimediainställningar</string>
<string name="mpris_time_settings_title">Framåt- och bakåt-knappar</string>
<string name="mpris_time_settings_summary">Justera tiden för att snabbspola framåt eller tillbaka om nertryckt</string>
<string-array name="mpris_time_entries">
@@ -162,20 +152,12 @@
<string name="mpris_notification_settings_title">Visa underrättelser om mediastyrning</string>
<string name="mpris_notification_settings_summary">Tillåt att styra mediaspelare utan att KDE-anslut öppnas</string>
<string name="share_to">Dela med...</string>
<string name="protocol_version_older">Apparaten använder en gammal protokollversion</string>
<string name="protocol_version_newer">Apparaten använder en nyare protokollversion</string>
<string name="general_settings">Allmänna inställningar</string>
<string name="plugin_settings">Inställningar</string>
<string name="plugin_settings_with_name">Inställningar av %s</string>
<string name="device_name">Apparatnamn</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Ogiltigt apparatnamn</string>
<string name="shareplugin_text_saved">Tog emot text, spara på klippbordet</string>
<string name="custom_devices_settings">Egen apparatlista</string>
<string name="pair_device_action">Para ihop med ny apparat</string>
<string name="unpair_device_action">Ta bort ihopparning %s</string>
<string name="custom_device_list">Lägg till apparater enligt IP-adress</string>
<string name="delete_custom_device">Ta bort %s?</string>
<string name="custom_device_deleted">Egen apparat borttagen</string>
<string name="custom_device_list_help">Om apparaten inte detekteras automatiskt kan dess IP-adress eller värddatornamn läggas till genom att klicka på den lösa åtgärdsknappen.</string>
<string name="custom_device_fab_hint">Lägg till en apparat</string>
@@ -190,7 +172,6 @@
<string name="share_received_file">Dela \"%s\"</string>
<string name="title_activity_notification_filter">Underrättelsefilter</string>
<string name="filter_apps_info">Underrättelser synkroniseras för markerade applikationer.</string>
<string name="sftp_internal_storage">Intern lagring</string>
<string name="sftp_sdcard_num">SD-kort %d</string>
<string name="sftp_sdcard">SD-kort</string>
<string name="sftp_readonly">(skrivskyddat)</string>
@@ -215,23 +196,18 @@
<string name="sftp_no_sdcard_detected">Inga SD-kort detekterades</string>
<string name="sftp_no_storage_locations_configured">Inga lagringsplatser inställda</string>
<string name="sftp_saf_permission_explanation">För att komma åt filer från en annan apparat måste lagringsplatser ställas in</string>
<string name="add_host">Lägg till värddator/IP-adress</string>
<string name="add_host_hint">Värddatornamn eller IP</string>
<string name="no_players_connected">Inga spelare hittades</string>
<string name="mpris_player_on_device">%1$s på %2$s</string>
<string name="send_files">Skicka filer</string>
<string name="pairing_title">KDE-anslut apparater</string>
<string name="pairing_description">Andra apparater som kör KDE-anslut i samma nätverk ska synas här.</string>
<string name="device_paired">Apparat ihopparad</string>
<string name="device_rename_title">Byt namn på apparat</string>
<string name="device_rename_confirm">Byt namn</string>
<string name="refresh">Uppdatera</string>
<string name="unreachable_description">Den här ihopparade apparaten kan inte nås. Försäkra dig om att den är ansluten till samma nätverk.</string>
<string name="on_data_message">Det verkar som om du använder en mobil dataanslutning. KDE-anslut fungerar bara på lokala nätverk.</string>
<string name="no_wifi">Du är inte ansluten till ett WIFI-nätverk, så du kanske inte kan se alla apparater. Klicka här för att aktivera WIFI.</string>
<string name="no_file_browser">Det finns inga filbläddrare installerade.</string>
<string name="pref_plugin_telepathy">Skicka SMS</string>
<string name="pref_plugin_telepathy_desc">Skicka textmeddelanden från skrivbordet</string>
<string name="plugin_not_supported">Insticksprogrammet stöds inte av apparaten</string>
<string name="findmyphone_title">Hitta min telefon</string>
<string name="findmyphone_title_tablet">Hitta min surfplatta</string>
<string name="findmyphone_title_tv">Hitta min tv</string>
@@ -239,7 +215,6 @@
<string name="findmyphone_found">Hittade den</string>
<string name="open">Öppna</string>
<string name="close">Stäng</string>
<string name="no_permissions_storage">Du måste ge rättighet att komma åt lagringen</string>
<string name="plugins_need_permission">Vissa insticksprogram kräver rättigheter för att fungera (rör för mer information):</string>
<string name="permission_explanation">Insticksprogrammet behöver rättigheter för att fungera</string>
<string name="optional_permission_explanation">Du måste ge extra rättigheter för att aktivera alla funktioner</string>
@@ -264,7 +239,6 @@
<string name="add_command_description">Du kan lägga till kommandon på skrivbordet</string>
<string name="pref_plugin_mprisreceiver">Styrning av mediaspelare</string>
<string name="pref_plugin_mprisreceiver_desc">Styr telefonens mediaspelare från en annan apparat</string>
<string name="dark_theme">Mörkt tema</string>
<string name="notification_channel_default">Andra underrättelser</string>
<string name="notification_channel_persistent">Permanent indikering</string>
<string name="notification_channel_media_control">Kontroll av media</string>
@@ -294,11 +268,12 @@
<string name="extra_options">Extra alternativ</string>
<string name="privacy_options">Integritetsalternativ</string>
<string name="set_privacy_options">Ställ in integritetsalternativ</string>
<string name="new_notification">Ny underrättelse</string>
<string name="block_contents">Blockera underrättelsernas innehåll</string>
<string name="block_images">Blockera bilder i underrättelser</string>
<string name="notification_channel_receivenotification">Underrättelser från andra apparater</string>
<string name="take_picture">Starta kamera</string>
<string name="plugin_photo_desc">Starta kameraprogrammet för att förenkla att ta och överföra bilder</string>
<string name="no_app_for_opening">Inget lämpligt program hittades för att öppna filen</string>
<string name="remote_keyboard_service">KDE-anslut fjärrtangentbord</string>
<string name="presenter_pointer">Pekare</string>
</resources>

View File

@@ -31,7 +31,6 @@
<string name="pref_plugin_receive_notifications_desc">Bildirimleri diğer aygıtlardan al ve Android üzerinde göster</string>
<string name="pref_plugin_sharereceiver">Paylaş ve al</string>
<string name="pref_plugin_sharereceiver_desc">Dosyaları ve URL\'leri aygıtlar arasında paylaş</string>
<string name="plugin_not_available">Bu özellik, sahip olduğunuz Android sürümünde kullanılabilir değil</string>
<string name="device_list_empty">Aygıt yok</string>
<string name="ok">Tamam</string>
<string name="cancel">İptal</string>
@@ -77,25 +76,20 @@
<string name="category_remembered_devices">Hatırlanan aygıtlar</string>
<string name="device_menu_plugins">Eklenti ayarları</string>
<string name="device_menu_unpair">Ayır</string>
<string name="device_not_reachable">Eşleşmiş aygıt ulaşılabilir değil</string>
<string name="pair_new_device">Yeni bir aygıt eşleştir</string>
<string name="unknown_device">Bİlinmeyen aygıt</string>
<string name="error_not_reachable">Aygıt ulaşılabilir değil</string>
<string name="error_already_requested">Eşleşme zaten talep edilmiş</string>
<string name="error_already_paired">Aygıt zaten eşleşmiş</string>
<string name="error_could_not_send_package">Paket gönderilemedi</string>
<string name="error_timed_out">Zaman aşımı</string>
<string name="error_canceled_by_user">Kullanıcı tarafından iptal edildi</string>
<string name="error_canceled_by_other_peer">Diğer eş tarafından iptal edildi</string>
<string name="error_invalid_key">Geçersiz anahtar alındı</string>
<string name="encryption_info_title">Şifreleme Bilgisi</string>
<string name="encryption_info_msg_no_ssl">Diğer aygıt, KDE Connect\'in son sürümünü kullanmıyor, eski şifreleme yöntemini kullanıyor.</string>
<string name="my_device_fingerprint">Aygıt sertifikanızın SHA1 parmak izi:</string>
<string name="remote_device_fingerprint">Uzak aygıt sertifikanızın SHA1 parmak izi:</string>
<string name="pair_requested">Eşleşme talep edildi</string>
<string name="pairing_request_from">%1s için eşleşme talebi</string>
<string name="received_url_title">%1s üzerinden bağlantı alındı</string>
<string name="received_url_text">\'%1s\' açmak için dokunun</string>
<plurals name="incoming_file_title">
<item quantity="one">%2$s içinden %1$d dosya alınıyor</item>
<item quantity="other">%2$s içinden %1$d dosyalar alınıyor</item>
@@ -131,7 +125,6 @@
<string name="received_file_text">\'%1s\' açmak için dokunun</string>
<string name="cannot_create_file">Dosya oluşturulamıyor %s</string>
<string name="tap_to_answer">Cevap için dokunun</string>
<string name="reconnect">Yeniden Bağlan</string>
<string name="right_click">Sağ Tık Gönder</string>
<string name="middle_click">Orta Tık Gönder</string>
<string name="show_keyboard">Klavyeyi Göster</string>
@@ -139,8 +132,6 @@
<string name="request_pairing">Eşleşme isteği</string>
<string name="pairing_accept">Onayla</string>
<string name="pairing_reject">Reddet</string>
<string name="device">Aygıt</string>
<string name="pair_device">Aygıt eşleştir</string>
<string name="settings">Ayarlar</string>
<string name="mpris_play">Oynat</string>
<string name="mpris_pause">Duraklat</string>
@@ -149,7 +140,6 @@
<string name="mpris_ff">Hızlı İleri Sar</string>
<string name="mpris_next">Sonraki</string>
<string name="mpris_volume">Ses</string>
<string name="mpris_settings">Çoklu Ortam Ayarları</string>
<string name="mpris_time_settings_title">İleri/geri düğmeleri</string>
<string name="mpris_time_settings_summary">Basıldığında hızlı ileri/geri sarma süresini ayarlayın</string>
<string-array name="mpris_time_entries">
@@ -162,20 +152,12 @@
<string name="mpris_notification_settings_title">Medya kontrol bildirimini göster</string>
<string name="mpris_notification_settings_summary">KDE Connect\'i açmadan medya oynatıcılarınızı kontrol etmenize izin verin</string>
<string name="share_to">Paylaş…</string>
<string name="protocol_version_older">Bu aygıt, eski bir protokol sürümü kullanıyor</string>
<string name="protocol_version_newer">Bu aygıt, daha yeni bir protokol sürümü kullanıyor</string>
<string name="general_settings">Genel Ayarlar</string>
<string name="plugin_settings">Ayarlar</string>
<string name="plugin_settings_with_name">%s ayarları</string>
<string name="device_name">Aygıt adı</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Geçersiz aygıt adı</string>
<string name="shareplugin_text_saved">Gelen ileti, panoya kaydet</string>
<string name="custom_devices_settings">Özel aygıt listesi</string>
<string name="pair_device_action">Yeni bir aygıt eşleştir</string>
<string name="unpair_device_action">Ayır %s</string>
<string name="custom_device_list">IP\'ye göre aygıtları ekle</string>
<string name="delete_custom_device">Sil %s?</string>
<string name="custom_device_deleted">Özel aygıt silindi</string>
<string name="custom_device_list_help">Cihazınız otomatik olarak algılanmazsa, İşlem Düğmesine tıklayarak IP adresini veya ana bilgisayar adını ekleyebilirsiniz</string>
<string name="custom_device_fab_hint">Aygıt ekle</string>
@@ -190,7 +172,6 @@
<string name="share_received_file">Paylaş \"%s\"</string>
<string name="title_activity_notification_filter">Bildirim süzgeci</string>
<string name="filter_apps_info">Bildirimler, seçili uygulamalar için eşitlenecektir.</string>
<string name="sftp_internal_storage">Harici depolama</string>
<string name="sftp_sdcard_num">SD kart %d</string>
<string name="sftp_sdcard">SD kart</string>
<string name="sftp_readonly">(salt okunur)</string>
@@ -215,23 +196,17 @@
<string name="sftp_no_sdcard_detected">SD kart algılanmadı</string>
<string name="sftp_no_storage_locations_configured">Yapılandırılmış depolama yeri yok</string>
<string name="sftp_saf_permission_explanation">Dosyalara uzaktan erişmek için depolama konumlarını yapılandırmanız gerekir</string>
<string name="add_host">Makine/IP ekle</string>
<string name="add_host_hint">Makine adı yada IP</string>
<string name="no_players_connected">Onatıcı bulunamadı</string>
<string name="mpris_player_on_device">%2$s üzerindeki %1$s</string>
<string name="send_files">Dosyaları gönder</string>
<string name="pairing_title">KDE Connect Aygıtları</string>
<string name="pairing_description">KDE Connect\'te çalışan, aynı ağdaki diğer aygıtlar burada gözükmelidir.</string>
<string name="device_paired">Aygıt eşleştirildi</string>
<string name="device_rename_title">Aygıtı yeniden adlandır</string>
<string name="device_rename_confirm">Yeniden adlandır</string>
<string name="refresh">Tazele</string>
<string name="unreachable_description">Eşleştirilmiş aygıt ulaşılabilir değil. Aynı ağa bağlı olduğundan emin olun.</string>
<string name="on_data_message">Mobil veri bağlantısında olduğunuz gözüküyor. KDE Connect sadece yerel ağlarda çalışır.</string>
<string name="no_file_browser">Yüklü bir dosya tarayıcısı yok.</string>
<string name="pref_plugin_telepathy">SMS Gönder</string>
<string name="pref_plugin_telepathy_desc">Masaüstünden metin iletisi gönder</string>
<string name="plugin_not_supported">Eklenti, aygıt tarafından desteklenmiyor</string>
<string name="findmyphone_title">Telefonumu bul</string>
<string name="findmyphone_title_tablet">Tabletimi bul</string>
<string name="findmyphone_title_tv">TV\'mi bul</string>
@@ -239,7 +214,6 @@
<string name="findmyphone_found">Bulundu</string>
<string name="open"></string>
<string name="close">Kapat</string>
<string name="no_permissions_storage">Depolamaya erişim için izne ihtiyacınız var</string>
<string name="plugins_need_permission">Bazı Eklentiler çalışmak için izne ihtiyaç duyar (daha fazla bilgi için dokunun):</string>
<string name="permission_explanation">Bu eklenti, çalışmak için izne ihtiyaç duyuyor</string>
<string name="optional_permission_explanation">Tüm işlevleri etkinleştirmek için daha fazla yetkiye ihtiyacınız var</string>
@@ -263,8 +237,6 @@
<string name="addcommand_explanation2">KDE Connect Sistem Ayarlarında yeni komutlar ekleyebilirsiniz</string>
<string name="add_command_description">Masaüstüne komut ekleyebilirsiniz</string>
<string name="pref_plugin_mprisreceiver">Medya Oynatıcı Kontrolü</string>
<string name="pref_plugin_mprisreceiver_desc">Telefonunuzun medya oynatıcılarını başka bir cihazdan kontrol edin</string>
<string name="dark_theme">Karanlık tema</string>
<string name="notification_channel_default">Diğer bildirimler</string>
<string name="notification_channel_persistent">Kalıcı gösterge</string>
<string name="notification_channel_media_control">Medya kontrolü</string>
@@ -294,7 +266,6 @@
<string name="extra_options">Ek seçenekler</string>
<string name="privacy_options">Gizlilik seçenekleri</string>
<string name="set_privacy_options">Gizlilik seçeneklerinizi ayarlayın</string>
<string name="new_notification">Yeni bildirim</string>
<string name="block_contents">Bildirimlerin içeriğini engelle</string>
<string name="block_images">Bildirimlerde görüntüleri engelle</string>
<string name="notification_channel_receivenotification">Diğer aygıtlardan gelen bildirimler</string>

View File

@@ -31,7 +31,6 @@
<string name="pref_plugin_receive_notifications_desc">Отримання сповіщень з іншого пристрою і показ їх у Android</string>
<string name="pref_plugin_sharereceiver">Надання і отримання</string>
<string name="pref_plugin_sharereceiver_desc">Спільне використання файлів і адрес між пристроями</string>
<string name="plugin_not_available">Ця можливість є недоступною для вашої версії для Android</string>
<string name="device_list_empty">Немає пристроїв</string>
<string name="ok">Гаразд</string>
<string name="cancel">Скасувати</string>
@@ -77,25 +76,20 @@
<string name="category_remembered_devices">Відомі пристрої</string>
<string name="device_menu_plugins">Параметри додатків</string>
<string name="device_menu_unpair">Скасувати пов’язування</string>
<string name="device_not_reachable">Немає доступу до пов’язаного пристрою</string>
<string name="pair_new_device">Пов’язати новий пристрій</string>
<string name="unknown_device">Невідомий пристрій</string>
<string name="error_not_reachable">Немає доступу до пристрою</string>
<string name="error_already_requested">Запит щодо пов’язування вже надіслано</string>
<string name="error_already_paired">Пристрій вже пов’язано</string>
<string name="error_could_not_send_package">Не вдалося надіслати пакунок</string>
<string name="error_timed_out">Час очікування вичерпано</string>
<string name="error_canceled_by_user">Скасовано користувачем</string>
<string name="error_canceled_by_other_peer">Скасовано з іншого вузла пов’язування</string>
<string name="error_invalid_key">Отримано некоректний ключ</string>
<string name="encryption_info_title">Дані щодо шифрування</string>
<string name="encryption_info_msg_no_ssl">На сторонньому пристрої не використовується нова версія KDE Connect, у якій використовується застарілий спосіб шифрування.</string>
<string name="my_device_fingerprint">Відбиток SHA1 сертифіката пристрою:</string>
<string name="remote_device_fingerprint">Відбиток SHA1 сертифіката віддаленого пристрою:</string>
<string name="pair_requested">Запит щодо пов’язування</string>
<string name="pairing_request_from">Запит щодо пов’язування від %1s</string>
<string name="received_url_title">Отримано посилання від %1s</string>
<string name="received_url_text">Натисніть, щоб відкрити «%1s»</string>
<plurals name="incoming_file_title">
<item quantity="one">Отримуємо %1$d файл з %2$s</item>
<item quantity="few">Отримуємо %1$d файли з %2$s</item>
@@ -147,7 +141,6 @@
<string name="received_file_text">Натисніть, щоб відкрити «%1s»</string>
<string name="cannot_create_file">Не вдалося створити файл %s</string>
<string name="tap_to_answer">Натисніть, щоб відповісти</string>
<string name="reconnect">З\'єднати знову</string>
<string name="right_click">Надіслати клацання правою кнопкою</string>
<string name="middle_click">Надіслати клацання лівою кнопкою</string>
<string name="show_keyboard">Показати клавіатуру</string>
@@ -155,8 +148,6 @@
<string name="request_pairing">Надіслати запит щодо пов’язування</string>
<string name="pairing_accept">Прийняти</string>
<string name="pairing_reject">Відмовити</string>
<string name="device">Пристрій</string>
<string name="pair_device">Пов’язати пристрій</string>
<string name="settings">Параметри</string>
<string name="mpris_play">Пуск</string>
<string name="mpris_pause">Пауза</string>
@@ -165,7 +156,6 @@
<string name="mpris_ff">Повний вперед</string>
<string name="mpris_next">Далі</string>
<string name="mpris_volume">Гучність</string>
<string name="mpris_settings">Мультимедійні параметри</string>
<string name="mpris_time_settings_title">Кнопки «Вперед/Назад»</string>
<string name="mpris_time_settings_summary">Скоригувати час швидкого гортання вперед або назад при натисканні</string>
<string-array name="mpris_time_entries">
@@ -178,20 +168,12 @@
<string name="mpris_notification_settings_title">Показувати сповіщення щодо керування відтворенням</string>
<string name="mpris_notification_settings_summary">Уможливлює керування відтворенням мультимедійних даних без відкриття KDE Connect</string>
<string name="share_to">Використовувати спільно з…</string>
<string name="protocol_version_older">На цьому пристрої використовується стара версія протоколу</string>
<string name="protocol_version_newer">На цьому пристрої використовується новіша версія протоколу</string>
<string name="general_settings">Загальні параметри</string>
<string name="plugin_settings">Параметри</string>
<string name="plugin_settings_with_name">Параметри %s</string>
<string name="device_name">Назва пристрою</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Некоректна назва пристрою</string>
<string name="shareplugin_text_saved">Отримано текст, збережено до буфера обміну даними</string>
<string name="custom_devices_settings">Список нетипових пристроїв</string>
<string name="pair_device_action">Пов’язати новий пристрій</string>
<string name="unpair_device_action">Розірвати прив’язку %s</string>
<string name="custom_device_list">Додати пристрої за IP</string>
<string name="delete_custom_device">Вилучити %s?</string>
<string name="custom_device_deleted">Нетиповий пристрій вилучено</string>
<string name="custom_device_list_help">Якщо ваш пристрій не було виявлено автоматично, ви можете додати його IP-адресу або назву вузла, натиснувши рухому кнопку дій.</string>
<string name="custom_device_fab_hint">Додати пристрій</string>
@@ -206,7 +188,6 @@
<string name="share_received_file">Оприлюднити «%s»</string>
<string name="title_activity_notification_filter">Фільтр сповіщень</string>
<string name="filter_apps_info">Сповіщення буде синхронізовано для позначених програм.</string>
<string name="sftp_internal_storage">Вбудоване сховище даних</string>
<string name="sftp_sdcard_num">Картка SD %d</string>
<string name="sftp_sdcard">Картка SD</string>
<string name="sftp_readonly">(лише читання)</string>
@@ -231,23 +212,18 @@
<string name="sftp_no_sdcard_detected">Не виявлено карток SD</string>
<string name="sftp_no_storage_locations_configured">Не налаштовано розташувань сховищ</string>
<string name="sftp_saf_permission_explanation">Щоб отримувати віддалений доступ до файлів, вам слід налаштувати розташування сховищ</string>
<string name="add_host">Додати вузол/IP</string>
<string name="add_host_hint">Назва або IP-адреса вузла</string>
<string name="no_players_connected">Не знайдено програвачів</string>
<string name="mpris_player_on_device">%1$s на %2$s</string>
<string name="send_files">Надіслати файли</string>
<string name="pairing_title">Пристрої KDE Connect</string>
<string name="pairing_description">Тут має бути показано інші пристрої у вашій мережі, де запущено KDE Connect.</string>
<string name="device_paired">Пристрій пов’язано</string>
<string name="device_rename_title">Перейменувати пристрій</string>
<string name="device_rename_confirm">Перейменувати</string>
<string name="refresh">Оновити</string>
<string name="unreachable_description">Цей пов’язаний пристрій недоступний. Переконайтеся, що його з’єднано з вашою мережею.</string>
<string name="on_data_message">Здається, мережа працює у режимі мобільного з’єднання. KDE Connect може працювати лише у локальних мережах.</string>
<string name="no_wifi">Ваш комп\'ютер не з\'єднано із мережею Wi-Fi, отже перегляд пристроїв у мережі неможливий. Натисніть тут, щоб увімкнути Wi-Fi.</string>
<string name="no_file_browser">Програм для навігації файловою системою не встановлено.</string>
<string name="pref_plugin_telepathy">Надіслати SMS</string>
<string name="pref_plugin_telepathy_desc">Надсилати текстові повідомлення з вашої робочої станції</string>
<string name="plugin_not_supported">Підтримки цього додатка не передбачено на пристрої</string>
<string name="findmyphone_title">Знайти телефон</string>
<string name="findmyphone_title_tablet">Знайти планшет</string>
<string name="findmyphone_title_tv">Знайти мій телевізор</string>
@@ -255,7 +231,6 @@
<string name="findmyphone_found">Знайдено</string>
<string name="open">Відкрити</string>
<string name="close">Закрити</string>
<string name="no_permissions_storage">Для доступу до сховища даних вам слід надати програмі права доступу</string>
<string name="plugins_need_permission">Для роботи деяких додатків потрібні додаткові права доступу (натисніть, щоб дізнатися більше):</string>
<string name="permission_explanation">Для роботи цього додатка потрібні додаткові права доступу</string>
<string name="optional_permission_explanation">Щоб уможливити використання усіх функцій, вам слід надати програмі додаткові права доступу</string>
@@ -280,7 +255,6 @@
<string name="add_command_description">Ви можете додавати команди на комп\'ютері</string>
<string name="pref_plugin_mprisreceiver">Керування відтворенням</string>
<string name="pref_plugin_mprisreceiver_desc">Керування вашими програвачами на телефоні з іншого пристрою</string>
<string name="dark_theme">Темна тема</string>
<string name="notification_channel_default">Інші сповіщення</string>
<string name="notification_channel_persistent">Постійний індикатор</string>
<string name="notification_channel_media_control">Керування відтворенням</string>
@@ -310,11 +284,12 @@
<string name="extra_options">Додаткові параметри</string>
<string name="privacy_options">Параметри конфіденційності</string>
<string name="set_privacy_options">Вкажіть ваші параметри конфіденційності</string>
<string name="new_notification">Нове сповіщення</string>
<string name="block_contents">Блокувати вміст сповіщень</string>
<string name="block_images">Блокувати зображення у сповіщеннях</string>
<string name="notification_channel_receivenotification">Сповіщення з інших пристроїв</string>
<string name="take_picture">Запустити камеру</string>
<string name="plugin_photo_desc">Запустити додаток камери для спрощення знімання та передавання фотографій</string>
<string name="no_app_for_opening">Не знайдено відповідної програми для відкриття цього файла</string>
<string name="remote_keyboard_service">Віддалена клавіатура KDE Connect</string>
<string name="presenter_pointer">Указка</string>
</resources>

View File

@@ -7,6 +7,7 @@
<style name="KdeConnectTheme.Dark.NoActionBar" parent="KdeConnectThemeBase.Dark.NoActionBar">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:colorEdgeEffect">@color/darkGrey</item>
<item name="android:navigationBarColor">@android:color/black</item>
</style>
</resources>

View File

@@ -31,13 +31,13 @@
<string name="pref_plugin_receive_notifications_desc">从其他设备接收通知并显示在 Android 上</string>
<string name="pref_plugin_sharereceiver">分享和接收</string>
<string name="pref_plugin_sharereceiver_desc">在设备间共享文件和 URL</string>
<string name="plugin_not_available">该特性不适用于您的Android版本</string>
<string name="device_list_empty">无设备</string>
<string name="ok">确认</string>
<string name="cancel">取消</string>
<string name="open_settings">开启设置</string>
<string name="no_permissions">您需要授予权限以便访问通知</string>
<string name="no_permission_mprisreceiver">为了能够控制您的媒体播放器,您需要授予访问通知消息的权限</string>
<string name="no_permissions_remotekeyboard">要接收按键,您需要激活 KDE Connect 远程键盘</string>
<string name="send_ping">发送ping</string>
<string name="open_mpris_controls">多媒体控制</string>
<string name="remotekeyboard_editing_only_title">只有在编辑时才接受远程按键</string>
@@ -76,41 +76,47 @@
<string name="category_remembered_devices">已记住设备</string>
<string name="device_menu_plugins">插件设置</string>
<string name="device_menu_unpair">取消配对</string>
<string name="device_not_reachable">配对设备不可及</string>
<string name="pair_new_device">配对新设备</string>
<string name="unknown_device">未知设备</string>
<string name="error_not_reachable">设备不可及</string>
<string name="error_already_requested">已在请求配对</string>
<string name="error_already_paired">设备已配对</string>
<string name="error_could_not_send_package">数据包无法发送</string>
<string name="error_timed_out">超时</string>
<string name="error_canceled_by_user">已被用户取消</string>
<string name="error_canceled_by_other_peer">已被另一方取消</string>
<string name="error_invalid_key">收到无效密钥</string>
<string name="encryption_info_title">加密信息</string>
<string name="encryption_info_msg_no_ssl">另一设备没有使用最新的 KDE Connect使用旧版加密方法。</string>
<string name="my_device_fingerprint">您的设备证书的 SHA1 指纹是:</string>
<string name="remote_device_fingerprint">远程设备证书的 SHA1 指纹是:</string>
<string name="pair_requested">已请求配对</string>
<string name="pairing_request_from">来自%1s的配对请求</string>
<string name="received_url_title">已从%1s接收链接</string>
<string name="received_url_text">点击以打开“%1s”</string>
<plurals name="incoming_file_title">
<item quantity="other">正在从 %2$s 接收 %1$d 个文件</item>
</plurals>
<plurals name="incoming_files_text">
<item quantity="other">(%3$d 个文件中的第 %2$d 个)%1$s</item>
</plurals>
<plurals name="outgoing_file_title">
<item quantity="other">正在发送 %1$d 个文件给 %2$s</item>
</plurals>
<plurals name="outgoing_files_text">
<item quantity="other">(%3$d 个文件中的 %2$d 个)%1$s</item>
</plurals>
<plurals name="received_files_title">
<item quantity="other">已从 %1$s 接收了 %2$d 个文件</item>
</plurals>
<plurals name="received_files_fail_title">
<item quantity="other">从 %1$s 接收的 %3$d 个文件中的 %2$d 个失败</item>
</plurals>
<plurals name="sent_files_title">
<item quantity="other">已发送 %2$d 给文件给 %1$s</item>
</plurals>
<plurals name="send_files_fail_title">
<item quantity="other">发送给 %1$s 的 %3$d 个文件中的 %2$d 个失败</item>
</plurals>
<string name="received_file_text">点击以打开“%1s”</string>
<string name="cannot_create_file">无法创建文件 %s</string>
<string name="tap_to_answer">点击以应答</string>
<string name="reconnect">重新连接</string>
<string name="right_click">发送右键点击</string>
<string name="middle_click">发送中键点击</string>
<string name="show_keyboard">显示键盘</string>
@@ -118,8 +124,6 @@
<string name="request_pairing">请求配对</string>
<string name="pairing_accept">接受</string>
<string name="pairing_reject">拒绝</string>
<string name="device">设备</string>
<string name="pair_device">进行配对</string>
<string name="settings">设置</string>
<string name="mpris_play">播放</string>
<string name="mpris_pause">Pause</string>
@@ -128,7 +132,6 @@
<string name="mpris_ff">快进</string>
<string name="mpris_next">下一个</string>
<string name="mpris_volume">音量</string>
<string name="mpris_settings">多媒体设置</string>
<string name="mpris_time_settings_title">快进/后退按钮</string>
<string name="mpris_time_settings_summary">当按下时调整快进或后退的时间</string>
<string-array name="mpris_time_entries">
@@ -141,20 +144,16 @@
<string name="mpris_notification_settings_title">显示媒体控制通知部件</string>
<string name="mpris_notification_settings_summary">允许在不用打开 KDE 连接的情况下控制媒体播放器</string>
<string name="share_to">分享到...</string>
<string name="protocol_version_older">该设备使用旧版本的协议</string>
<string name="protocol_version_newer">该设备使用较新版本的协议</string>
<string name="general_settings">常规设置</string>
<string name="plugin_settings">设置</string>
<string name="plugin_settings_with_name">%s设置</string>
<string name="device_name">设备名</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">设备名无效</string>
<string name="shareplugin_text_saved">已收到文本,存至剪贴板</string>
<string name="custom_devices_settings">自定义设备列表</string>
<string name="pair_device_action">配对新设备</string>
<string name="unpair_device_action">取消配对 %s</string>
<string name="custom_device_list">通过IP增加设备</string>
<string name="delete_custom_device">删除 %s 吗?</string>
<string name="custom_device_deleted">自定义设备已删除</string>
<string name="custom_device_list_help">如果您的设备未被自动检测到,您点击浮动动作按钮可以添加它的 IP 地址或主机名。</string>
<string name="custom_device_fab_hint">添加设备</string>
<string name="undo">撤销</string>
<string name="share_notification_preference">出声通知</string>
<string name="share_notification_preference_summary">当收到文件时震动并播放声音</string>
<string name="share_destination_customize">配置目标目录</string>
@@ -165,26 +164,42 @@
<string name="share_received_file">分享 \"%s\"</string>
<string name="title_activity_notification_filter">通知过滤器</string>
<string name="filter_apps_info">所选软件的通知将会被同步。</string>
<string name="sftp_internal_storage">内部存储</string>
<string name="sftp_sdcard_num">SD卡%d</string>
<string name="sftp_sdcard">SD卡</string>
<string name="sftp_readonly">(只读)</string>
<string name="sftp_camera">相机照片</string>
<string name="add_device_dialog_title">添加设备</string>
<string name="add_device_hint">主机名或 IP 地址</string>
<string name="sftp_preference_detected_sdcards">检测到 SD 卡</string>
<string name="sftp_preference_edit_sdcard_title">编辑 SD 卡</string>
<string name="sftp_preference_configured_storage_locations">已配置存储位置</string>
<string name="sftp_preference_add_storage_location_title">添加存储位置</string>
<string name="sftp_preference_edit_storage_location">编辑存储位置</string>
<string name="sftp_preference_add_camera_shortcut">添加相机文件夹快捷方式</string>
<string name="sftp_preference_add_camera_shortcut_summary_on">添加到相机文件夹的快捷方式</string>
<string name="sftp_preference_add_camera_shortcut_summary_off">不要添加到相机文件夹的快捷方式</string>
<string name="sftp_storage_preference_storage_location">存储位置</string>
<string name="sftp_storage_preference_storage_location_already_configured">位置已被配置</string>
<string name="sftp_storage_preference_click_to_select">点击选择</string>
<string name="sftp_storage_preference_display_name">显示名</string>
<string name="sftp_storage_preference_display_name_already_used">此显示名已被使用</string>
<string name="sftp_storage_preference_display_name_cannot_be_empty">显示名不能为空</string>
<string name="sftp_action_mode_menu_delete">删除</string>
<string name="sftp_no_sdcard_detected">没有检测到 SD 卡</string>
<string name="sftp_no_storage_locations_configured">未配置存储位置</string>
<string name="sftp_saf_permission_explanation">要远程访问文件,您需要配置存储位置</string>
<string name="no_players_connected">未找到播放器</string>
<string name="mpris_player_on_device">%2$s上的%1$s</string>
<string name="send_files">发送文件</string>
<string name="pairing_title">KDE Connect 设备</string>
<string name="pairing_description">其他在同一网络运行 KDE Connect 的设备会在此处显示。</string>
<string name="device_paired">已配对设备</string>
<string name="device_rename_title">重命名设备</string>
<string name="device_rename_confirm">重命名</string>
<string name="refresh">刷新</string>
<string name="unreachable_description">此配对设备不可达。请确认它已经连接到与您相同的网络。</string>
<string name="on_data_message">似乎你正在使用蜂窝数据网络。KDE Connect 只能在局域网中使用</string>
<string name="no_wifi">您未连接到 Wi-Fi 网络,所以您可能无法看到任何设备。点击此处启用 Wi-Fi</string>
<string name="no_file_browser">未安装文件浏览器</string>
<string name="pref_plugin_telepathy">发送短消息</string>
<string name="pref_plugin_telepathy_desc">从桌面发送短消息</string>
<string name="plugin_not_supported">设备不支持此插件</string>
<string name="findmyphone_title">找到我的手机</string>
<string name="findmyphone_title_tablet">找到我的平板电脑</string>
<string name="findmyphone_title_tv">查找我的电视</string>
@@ -192,13 +207,13 @@
<string name="findmyphone_found">找到</string>
<string name="open">打开</string>
<string name="close">关闭</string>
<string name="no_permissions_storage">您需要授予权限以访问存储</string>
<string name="plugins_need_permission">某些插件需要权限才能工作 (点击以获取更多信息)</string>
<string name="permission_explanation">这个插件需要权限才能工作</string>
<string name="optional_permission_explanation">您需要授予额外权限以启用全部功能</string>
<string name="plugins_need_optional_permission">因缺少权限,某些插件的一些功能已禁用(点击以查看更多信息):</string>
<string name="share_optional_permission_explanation">您需要给予访问手机存储的权限才能在手机和桌面计算机之间分享文件</string>
<string name="telepathy_permission_explanation">从计算机桌面读取、写入短消息需要向应用程序授予 SMS 权限</string>
<string name="telephony_permission_explanation">要桌面上查看手机通话记录,您需要授予访问通话记录和手机状态的权限</string>
<string name="telephony_optional_permission_explanation">要查看联系人姓名而非电话号码,您需要授予访问手机通讯录的权限</string>
<string name="contacts_permission_explanation">要与桌面共享通讯薄,您需要给予联系人权限</string>
<string name="select_ringtone">选择铃声</string>
@@ -215,8 +230,7 @@
<string name="addcommand_explanation2">您可以在 KDE Connect 系统设置中添加新命令</string>
<string name="add_command_description">您可以在桌面添加新命令</string>
<string name="pref_plugin_mprisreceiver">控制媒体播放器</string>
<string name="pref_plugin_mprisreceiver_desc">从其他设备控制您手机的媒体播放器</string>
<string name="dark_theme">暗色主题</string>
<string name="pref_plugin_mprisreceiver_desc">从其他设备控制您手机的播放器</string>
<string name="notification_channel_default">其他通知</string>
<string name="notification_channel_persistent">持久性通知</string>
<string name="notification_channel_media_control">媒体控制</string>
@@ -241,11 +255,17 @@
<string name="settings_more_settings_title">更多设置</string>
<string name="settings_more_settings_text">每个设备的独立设置可以在设备页内的“插件设置”下找到。</string>
<string name="setting_persistent_notification">启用常驻通知栏</string>
<string name="setting_persistent_notification_oreo">持久通知</string>
<string name="setting_persistent_notification_description">点击在通知设置中启用/禁用</string>
<string name="extra_options">附加选项</string>
<string name="privacy_options">隐私选项</string>
<string name="set_privacy_options">设置您的隐私选项</string>
<string name="new_notification">新通知</string>
<string name="block_contents">阻止通知内容</string>
<string name="block_images">阻止通知图像</string>
<string name="notification_channel_receivenotification">来自其他设备的通知</string>
<string name="take_picture">启动相机</string>
<string name="plugin_photo_desc">启动相机应用程序以方便拍摄和转移图片</string>
<string name="no_app_for_opening">没有找到合适的应用程序打开此文件</string>
<string name="remote_keyboard_service">KDE Connect 远程键盘</string>
<string name="presenter_pointer">指针</string>
</resources>

View File

@@ -9,8 +9,8 @@
<string name="pref_plugin_battery_desc">定期回報電池狀態</string>
<string name="pref_plugin_sftp">顯示檔案系統</string>
<string name="pref_plugin_sftp_desc">同意讓遠端可以瀏覽檔案系統</string>
<string name="pref_plugin_clipboard">同步剪貼</string>
<string name="pref_plugin_clipboard_desc">分享剪貼的內容</string>
<string name="pref_plugin_clipboard">同步剪貼簿</string>
<string name="pref_plugin_clipboard_desc">分享剪貼簿的內容</string>
<string name="pref_plugin_mousepad">遠端輸入</string>
<string name="pref_plugin_mousepad_desc">使用您的智慧型手機或者平板來模擬觸碰板與鍵盤</string>
<string name="pref_plugin_presenter">遠端投影片</string>
@@ -20,41 +20,40 @@
<string name="pref_plugin_mpris">多媒體控制</string>
<string name="pref_plugin_mpris_desc">成為您多媒體播放器的遙控器</string>
<string name="pref_plugin_runcommand">執行指令</string>
<string name="pref_plugin_runcommand_desc">從您的智慧型手機或者平板當中觸發遠端設備上的命令</string>
<string name="pref_plugin_runcommand_desc">從您的智慧型手機或者平板當中觸發遠端裝置上的命令</string>
<string name="pref_plugin_contacts">同步聯絡人工具</string>
<string name="pref_plugin_contacts_desc">允許同步裝置的通訊錄</string>
<string name="pref_plugin_ping">Ping回應封包</string>
<string name="pref_plugin_ping_desc">傳送與接收Ping回應封包</string>
<string name="pref_plugin_ping">Ping 回應封包</string>
<string name="pref_plugin_ping_desc">傳送與接收 Ping 回應封包</string>
<string name="pref_plugin_notifications">同步通知</string>
<string name="pref_plugin_notifications_desc">存取其他設備上的通知</string>
<string name="pref_plugin_notifications_desc">存取其他裝置上的通知</string>
<string name="pref_plugin_receive_notifications">接收通知</string>
<string name="pref_plugin_receive_notifications_desc">在Android上顯示從其他裝置收到的通知</string>
<string name="pref_plugin_receive_notifications_desc"> Android 上顯示從其他裝置收到的通知</string>
<string name="pref_plugin_sharereceiver">分享與接收</string>
<string name="pref_plugin_sharereceiver_desc">在兩個設備當中互相分享URL網址與檔案</string>
<string name="plugin_not_available">這個功能無法在您的Android版本上執行。</string>
<string name="pref_plugin_sharereceiver_desc">在兩個裝置當中互相分享URL網址與檔案</string>
<string name="device_list_empty">沒有裝置</string>
<string name="ok">OK</string>
<string name="ok">確認</string>
<string name="cancel">取消</string>
<string name="open_settings">開啟設定</string>
<string name="no_permissions">您需要授予存取通知的權限</string>
<string name="no_permission_mprisreceiver">為了要能控制您的媒體播放器,您需要提供「通知」的權限</string>
<string name="no_permissions_remotekeyboard">若要接收鍵盤按鍵事件,您需要啟用 KDE 連線遠端鍵盤功能</string>
<string name="send_ping">傳送Ping回應封包</string>
<string name="send_ping">傳送 Ping 回應封包</string>
<string name="open_mpris_controls">多媒體控制</string>
<string name="remotekeyboard_editing_only_title">當編輯時只處理遠端按鍵</string>
<string name="remotekeyboard_not_connected">這裡沒有建立在 kdeconnect 之上的使用中遠端鍵盤連線。</string>
<string name="remotekeyboard_connected">遠端鍵盤連線為啟用狀態</string>
<string name="remotekeyboard_multiple_connections">這裡有兩個以上的遠端鍵盤連結,選擇一個裝置以設定。</string>
<string name="open_mousepad">遠端輸入</string>
<string name="mousepad_info">在您的智慧型手機的螢幕上移動手指頭,用來控制電腦螢幕的標。點擊表示滑鼠的左鍵,使用兩隻/三隻手指頭點擊來表示滑鼠的右鍵/中鍵。使用兩隻手指頭捲動。長按則表示要拖拉。</string>
<string name="mousepad_double_tap_settings_title">設定兩隻手指頭點擊的動作</string>
<string name="mousepad_triple_tap_settings_title">設定三隻手指頭點擊的動作</string>
<string name="mousepad_info">在您的智慧型手機的螢幕上移動手指頭,用來控制電腦螢幕的標。按一下表示滑鼠的左鍵,使用兩隻/三隻手指頭按一下來表示滑鼠的右鍵/中鍵。使用兩隻手指頭捲動。長按則表示要拖拉。</string>
<string name="mousepad_double_tap_settings_title">設定兩隻手指頭按一下的動作</string>
<string name="mousepad_triple_tap_settings_title">設定三隻手指頭按一下的動作</string>
<string name="mousepad_sensitivity_settings_title">設定觸碰板的靈敏度</string>
<string name="mousepad_acceleration_profile_settings_title">設定指針加速度</string>
<string name="mousepad_scroll_direction_title">滾動方向相反</string>
<string-array name="mousepad_tap_entries">
<item>右鍵點擊</item>
<item>中鍵點擊</item>
<item>右鍵按一下</item>
<item>中鍵按一下</item>
<item></item>
</string-array>
<string-array name="mousepad_sensitivity_entries">
@@ -72,30 +71,25 @@
<item>安全</item>
<item>最安全</item>
</string-array>
<string name="category_connected_devices">已連接的設備</string>
<string name="category_not_paired_devices">可連接的設備</string>
<string name="category_remembered_devices">已記住的設備</string>
<string name="device_menu_plugins">擴展插件設定</string>
<string name="category_connected_devices">已連結的裝置</string>
<string name="category_not_paired_devices">可連結的裝置</string>
<string name="category_remembered_devices">已記住的裝置</string>
<string name="device_menu_plugins">外掛程式設定</string>
<string name="device_menu_unpair">取消配對</string>
<string name="device_not_reachable">配對的設備無法連接</string>
<string name="pair_new_device">配對新設備</string>
<string name="unknown_device">不明的設備</string>
<string name="error_not_reachable">設備無法連接</string>
<string name="error_already_requested">已請求配對</string>
<string name="pair_new_device">配對新裝置</string>
<string name="unknown_device">不明的裝置</string>
<string name="error_not_reachable">裝置無法連結</string>
<string name="error_already_paired">裝置已經配對</string>
<string name="error_could_not_send_package">無法傳送封包</string>
<string name="error_timed_out">逾時</string>
<string name="error_canceled_by_user">使用者中斷</string>
<string name="error_canceled_by_other_peer">被其他同等功能應用中斷</string>
<string name="error_invalid_key">接收的密鑰無效</string>
<string name="encryption_info_title">加密資訊</string>
<string name="encryption_info_msg_no_ssl">其他的設備沒有使用新版本的KDE連線使用傳統的加密模式。</string>
<string name="my_device_fingerprint">設備上的SHA1指紋辨識認證是:</string>
<string name="remote_device_fingerprint">您遠端設備上的SHA1指紋辨識認證是:</string>
<string name="encryption_info_msg_no_ssl">其他的裝置沒有使用新版本的KDE連線使用傳統的加密模式。</string>
<string name="my_device_fingerprint">裝置憑證的 SHA1 指紋是:</string>
<string name="remote_device_fingerprint">您遠端裝置憑證的 SHA1 指紋是:</string>
<string name="pair_requested">已請求配對</string>
<string name="pairing_request_from"> %1s 的配對請求</string>
<string name="received_url_title">已從 %1s 連線接收</string>
<string name="received_url_text">點擊開啟 \'%1s\'</string>
<string name="pairing_request_from">來自 %1s 的配對請求</string>
<plurals name="incoming_file_title">
<item quantity="other">正在從 %2$s 接收 %1$d 個檔案</item>
</plurals>
@@ -120,19 +114,16 @@
<plurals name="send_files_fail_title">
<item quantity="other">無法將第 %2$d (共 %3$d) 個檔案傳送至 %1$s</item>
</plurals>
<string name="received_file_text">點擊開啟 \'%1s\'</string>
<string name="received_file_text">按一下開啟 \'%1s\'</string>
<string name="cannot_create_file">無法建立 %s 檔案</string>
<string name="tap_to_answer">點擊即可應答</string>
<string name="reconnect">重新連線</string>
<string name="right_click">傳送右鍵點擊</string>
<string name="middle_click">傳送中鍵點擊</string>
<string name="tap_to_answer">按一下即可回應</string>
<string name="right_click">傳送右鍵按一下</string>
<string name="middle_click">傳送中鍵按一下</string>
<string name="show_keyboard">顯示鍵盤</string>
<string name="device_not_paired">裝置未配對</string>
<string name="request_pairing">請求配對</string>
<string name="pairing_accept">同意</string>
<string name="pairing_reject"></string>
<string name="device">裝置</string>
<string name="pair_device">配對裝置</string>
<string name="pairing_accept">接受</string>
<string name="pairing_reject"></string>
<string name="settings">設定</string>
<string name="mpris_play">播放</string>
<string name="mpris_pause">暫停</string>
@@ -141,35 +132,26 @@
<string name="mpris_ff">快轉</string>
<string name="mpris_next">下一首</string>
<string name="mpris_volume">音量</string>
<string name="mpris_settings">多媒體設定</string>
<string name="mpris_time_settings_title">往前/往後按鍵</string>
<string name="mpris_time_settings_summary">調整按下時往前 / 往後的時間</string>
<string-array name="mpris_time_entries">
<item>10秒鐘</item>
<item>20秒鐘</item>
<item>30秒鐘</item>
<item>1分鐘</item>
<item>2分鐘</item>
<item>10 秒鐘</item>
<item>20 秒鐘</item>
<item>30 秒鐘</item>
<item>1 分鐘</item>
<item>2 分鐘</item>
</string-array>
<string name="mpris_notification_settings_title">顯示媒體控制項通知</string>
<string name="mpris_notification_settings_summary">允許控制您的媒體播放器而不需要開啟 KDE 連線</string>
<string name="share_to">分享給…</string>
<string name="protocol_version_older">這個裝置使用舊版本的通訊協定</string>
<string name="protocol_version_newer">此設備使用較新的通訊協定</string>
<string name="general_settings">通用設定</string>
<string name="plugin_settings">設定</string>
<string name="protocol_version_newer">裝置使用較新的通訊協定</string>
<string name="plugin_settings_with_name">%s 設定</string>
<string name="device_name">設備名稱</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">無效的設備名稱</string>
<string name="invalid_device_name">無效的裝置名稱</string>
<string name="shareplugin_text_saved">已接收文字,並且儲存到剪貼簿</string>
<string name="custom_devices_settings">定義設備列表</string>
<string name="pair_device_action">配對新設備</string>
<string name="unpair_device_action">未配對 %s</string>
<string name="custom_device_list">以IP來新增設備</string>
<string name="delete_custom_device">刪除 %s</string>
<string name="custom_devices_settings">訂裝置列表</string>
<string name="custom_device_list">以 IP 新增裝置</string>
<string name="custom_device_deleted">已刪除自訂裝置</string>
<string name="custom_device_list_help">若未自動偵測到您的裝置您可透過點選「浮動動作按鈕」來新增該裝置的IP 位址或主機名稱</string>
<string name="custom_device_list_help">若未自動偵測到您的裝置,您可透過點選「浮動動作按鈕」來新增該裝置的 IP 位址或主機名稱</string>
<string name="custom_device_fab_hint">新增裝置</string>
<string name="undo">復原</string>
<string name="share_notification_preference">通知方式</string>
@@ -181,14 +163,13 @@
<string name="share">分享</string>
<string name="share_received_file">分享「%s」</string>
<string name="title_activity_notification_filter">通知過濾器</string>
<string name="filter_apps_info">將會以您選擇的App應用程式啟用同步通知</string>
<string name="sftp_internal_storage">內部儲存空間</string>
<string name="sftp_sdcard_num">SD卡 %d</string>
<string name="sftp_sdcard">SD卡</string>
<string name="filter_apps_info">將會同步選取 App 的通知</string>
<string name="sftp_sdcard_num">SD 卡 %d</string>
<string name="sftp_sdcard">SD </string>
<string name="sftp_readonly">(唯讀)</string>
<string name="sftp_camera">相機圖片</string>
<string name="add_device_dialog_title">新增裝置</string>
<string name="add_device_hint">主機名稱 或 IP 位址</string>
<string name="add_device_hint">主機名稱或 IP 位址</string>
<string name="sftp_preference_detected_sdcards">已偵測到 SD 卡</string>
<string name="sftp_preference_edit_sdcard_title">編輯 SD 卡</string>
<string name="sftp_preference_configured_storage_locations">已設定儲存空間位置</string>
@@ -207,35 +188,29 @@
<string name="sftp_no_sdcard_detected">未偵測到 SD 卡</string>
<string name="sftp_no_storage_locations_configured">未設定儲存空間位置</string>
<string name="sftp_saf_permission_explanation">若要遠端存取檔案,您需先設定儲存空間位置</string>
<string name="add_host">增加 host/IP</string>
<string name="add_host_hint">主機名稱或 IP</string>
<string name="no_players_connected">沒有發現播放器</string>
<string name="mpris_player_on_device">%1$s on %2$s</string>
<string name="send_files">傳送檔案</string>
<string name="pairing_title">KDE連線裝置</string>
<string name="pairing_title">KDE 連線裝置</string>
<string name="pairing_description">在您相同網域當中有其他有執行KDE連線的裝置會出現在這裡。</string>
<string name="device_paired">裝置已配對</string>
<string name="device_rename_title">改裝置名稱</string>
<string name="device_rename_confirm">更改名稱</string>
<string name="refresh">刷新</string>
<string name="unreachable_description">此配對的裝置無法連接。 請確保它連接到與您相同的網域</string>
<string name="on_data_message">看起來你現在正使用行動數據連線。KDE 連線只在區域網路上運作。</string>
<string name="device_rename_title">重新命名裝置</string>
<string name="device_rename_confirm">更名稱</string>
<string name="refresh">重新整理</string>
<string name="unreachable_description">無法連結此配對裝置。請確保它連結到與您相同的網域。</string>
<string name="no_wifi">您尚未連線至 Wi-Fi 網路,因此您可能無法看到任何裝置。按一下這裡啟用 Wi-Fi</string>
<string name="no_file_browser">沒有安裝此檔案的瀏覽程式</string>
<string name="pref_plugin_telepathy">傳送簡訊</string>
<string name="pref_plugin_telepathy_desc">傳送文字簡訊到您的電腦桌面</string>
<string name="plugin_not_supported">這個擴充插件並不支援您的手機</string>
<string name="findmyphone_title">找尋我的手機</string>
<string name="findmyphone_title_tablet">找尋我的平板</string>
<string name="findmyphone_title">尋找我的手機</string>
<string name="findmyphone_title_tablet">尋找我的平板</string>
<string name="findmyphone_title_tv">尋找我的電視</string>
<string name="findmyphone_description">讓這個裝置發出聲響讓您能找到它</string>
<string name="findmyphone_found">找到</string>
<string name="open">開啟</string>
<string name="close">關閉</string>
<string name="no_permissions_storage">您需要授予儲存權限</string>
<string name="plugins_need_permission">部份的附加元件需要權限才能運作(點擊以取得更多資訊)</string>
<string name="permission_explanation">這附加元件需要權限以運作</string>
<string name="plugins_need_permission">部份的外掛程式需要權限才能運作(按一下以取得更多資訊)</string>
<string name="permission_explanation">這外掛程式需要權限以運作</string>
<string name="optional_permission_explanation">你需要授予延伸的權限以啟用所有的功能</string>
<string name="plugins_need_optional_permission">部份的附加元件因為缺乏權限,而導致功能被停用。(點擊以了解更多資訊):</string>
<string name="plugins_need_optional_permission">部份的外掛程式因為缺乏權限,而導致功能被停用。(按一下以了解更多資訊):</string>
<string name="share_optional_permission_explanation">為了要在您的手機與電腦之間分享檔案,你需要同意存取手機的儲存空間。</string>
<string name="telepathy_permission_explanation">為了要在您的個人電腦上讀取與撰寫簡訊,你需要提供簡訊的權限。</string>
<string name="telephony_permission_explanation">為了要在桌面上檢視手機通話,您需要提供手機通話記錄及手機狀態的權限。</string>
@@ -251,14 +226,13 @@
<string name="presenter_exit">離開簡報模式</string>
<string name="presenter_lock_tip">您能鎖定裝置並使用音量鍵前往上 / 下一張投影片</string>
<string name="add_command">增加一行指令</string>
<string name="addcommand_explanation">沒有指令被註冊</string>
<string name="addcommand_explanation">沒有註冊的指令</string>
<string name="addcommand_explanation2">您現在可以在 KDE 連線系統設定增加新的指令</string>
<string name="add_command_description">您可以在電腦上增加指令</string>
<string name="pref_plugin_mprisreceiver">控制媒體播放器</string>
<string name="pref_plugin_mprisreceiver_desc">從另外一個裝置操控您手機的媒體播放器</string>
<string name="dark_theme">暗色主題</string>
<string name="notification_channel_default">其他通知</string>
<string name="notification_channel_persistent">一致指標</string>
<string name="notification_channel_persistent">一致化指示器</string>
<string name="notification_channel_media_control">多媒體控制</string>
<string name="notification_channel_filetransfer">檔案傳輸</string>
<string name="mpris_stop">停止目前播放器</string>
@@ -282,15 +256,16 @@
<string name="settings_more_settings_text">各裝置設定可在裝置內的「外掛程式設定」底下找到。</string>
<string name="setting_persistent_notification">顯示一致設定</string>
<string name="setting_persistent_notification_oreo">一致化通知</string>
<string name="setting_persistent_notification_description">點觸以在「通知設定」啟用或停用</string>
<string name="setting_persistent_notification_description">按一下以在「通知設定」啟用或停用</string>
<string name="extra_options">延伸選項</string>
<string name="privacy_options">隱私權選項</string>
<string name="set_privacy_options">設定隱私權選項</string>
<string name="new_notification">新通知</string>
<string name="block_contents">擋住通知內容</string>
<string name="block_images">擋住通知中的圖片</string>
<string name="block_contents">阻擋通知內容</string>
<string name="block_images">阻擋通知中的圖片</string>
<string name="notification_channel_receivenotification">其他裝置上的通知</string>
<string name="take_picture">啟動相機</string>
<string name="plugin_photo_desc">開啟相機應用程式以輕鬆拍攝並傳輸相片</string>
<string name="no_app_for_opening">找不到適合用來開啟此檔案的應用程式</string>
<string name="remote_keyboard_service">KDE 連線遠端鍵盤</string>
<string name="presenter_pointer">指標裝置</string>
</resources>

View File

@@ -1,6 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- # Dear potential translators:
Thank you for your interest in KDE Connect! We do not actually handle our own translations.
All translations for all KDE apps are handled by the [localization team](https://l10n.kde.org).
We really appreciate your translations, but make sure to submit them by working with the proper team!
-->
<string name="kde_connect">KDE Connect</string>
<string name="foreground_notification_no_devices">Not connected to any device</string>
<string name="foreground_notification_devices">Connected to: %s</string>
@@ -32,7 +37,6 @@
<string name="pref_plugin_receive_notifications_desc">Receive notifications from the other device and display them on Android</string>
<string name="pref_plugin_sharereceiver">Share and receive</string>
<string name="pref_plugin_sharereceiver_desc">Share files and URLs between devices</string>
<string name="plugin_not_available">This feature is not available in your Android version</string>
<string name="device_list_empty">No devices</string>
<string name="ok">OK</string>
<string name="cancel">Cancel</string>
@@ -108,25 +112,20 @@
<string name="category_remembered_devices">Remembered devices</string>
<string name="device_menu_plugins">Plugin settings</string>
<string name="device_menu_unpair">Unpair</string>
<string name="device_not_reachable">Paired device not reachable</string>
<string name="pair_new_device">Pair new device</string>
<string name="unknown_device">Unknown device</string>
<string name="error_not_reachable">Device not reachable</string>
<string name="error_already_requested">Pairing already requested</string>
<string name="error_already_paired">Device already paired</string>
<string name="error_could_not_send_package">Could not send package</string>
<string name="error_timed_out">Timed out</string>
<string name="error_canceled_by_user">Canceled by user</string>
<string name="error_canceled_by_other_peer">Canceled by other peer</string>
<string name="error_invalid_key">Invalid key received</string>
<string name="encryption_info_title">Encryption Info</string>
<string name="encryption_info_msg_no_ssl">The other device doesn\'t use a recent version of KDE Connect, using the legacy encryption method.</string>
<string name="my_device_fingerprint">SHA1 fingerprint of your device certificate is:</string>
<string name="remote_device_fingerprint">SHA1 fingerprint of remote device certificate is:</string>
<string name="pair_requested">Pair requested</string>
<string name="pairing_request_from">Pairing request from %1s</string>
<string name="received_url_title">Received link from %1s</string>
<string name="received_url_text">Tap to open \'%1s\'</string>
<plurals name="incoming_file_title">Receiving file from %1s>
<item quantity="one">Receiving %1$d file from %2$s</item>
<item quantity="other">Receiving %1$d files from %2$s</item>
@@ -162,7 +161,6 @@
<string name="received_file_text">Tap to open \'%1s\'</string>
<string name="cannot_create_file">Cannot create file %s</string>
<string name="tap_to_answer">Tap to answer</string>
<string name="reconnect">Reconnect</string>
<string name="right_click">Send Right Click</string>
<string name="middle_click">Send Middle Click</string>
<string name="show_keyboard">Show Keyboard</string>
@@ -170,8 +168,6 @@
<string name="request_pairing">Request pairing</string>
<string name="pairing_accept">Accept</string>
<string name="pairing_reject">Reject</string>
<string name="device">Device</string>
<string name="pair_device">Pair device</string>
<string name="settings">Settings</string>
<string name="mpris_play">Play</string>
<string name="mpris_pause">Pause</string>
@@ -180,7 +176,6 @@
<string name="mpris_ff">Fast-forward</string>
<string name="mpris_next">Next</string>
<string name="mpris_volume">Volume</string>
<string name="mpris_settings">Multimedia Settings</string>
<string name="mpris_time_settings_title">Forward/rewind buttons</string>
<string name="mpris_time_settings_summary">Adjust the time to fast forward/rewind when pressed</string>
<string name="mpris_time_key" translatable="false">mpris_interval_time</string>
@@ -203,20 +198,12 @@
<string name="mpris_notification_settings_summary">Allow controlling your media players without opening KDE Connect</string>
<string name="mpris_notification_key" translatable="false">mpris_notification_enabled</string>
<string name="share_to">Share To…</string>
<string name="protocol_version_older">This device uses an old protocol version</string>
<string name="protocol_version_newer">This device uses a newer protocol version</string>
<string name="general_settings">General Settings</string>
<string name="plugin_settings">Settings</string>
<string name="plugin_settings_with_name">%s settings</string>
<string name="device_name">Device name</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Invalid device name</string>
<string name="shareplugin_text_saved">Received text, saved to clipboard</string>
<string name="custom_devices_settings">Custom device list</string>
<string name="pair_device_action">Pair a new device</string>
<string name="unpair_device_action">Unpair %s</string>
<string name="custom_device_list">Add devices by IP</string>
<string name="delete_custom_device">Delete %s?</string>
<string name="custom_device_deleted">Custom device deleted</string>
<string name="custom_device_list_help">If your device is not automatically detected you can add its IP address or hostname by clicking on the Floating Action Button</string>
<string name="custom_device_fab_hint">Add a device</string>
@@ -231,7 +218,6 @@
<string name="share_received_file">Share \"%s\"</string>
<string name="title_activity_notification_filter">Notification filter</string>
<string name="filter_apps_info">Notifications will be synchronized for the selected apps.</string>
<string name="sftp_internal_storage">Internal storage</string>
<string name="sftp_sdcard_num">SD card %d</string>
<string name="sftp_sdcard">SD card</string>
<string name="sftp_readonly">(read only)</string>
@@ -261,34 +247,28 @@
<string name="sftp_no_sdcard_detected">No SD card detected</string>
<string name="sftp_no_storage_locations_configured">No storage locations configured</string>
<string name="sftp_saf_permission_explanation">To access files remotely you have to configure storage locations</string>
<string name="add_host">Add host/IP</string>
<string name="add_host_hint">Hostname or IP</string>
<string name="no_players_connected">No players found</string>
<string name="mpris_player_on_device">%1$s on %2$s</string>
<string name="send_files">Send files</string>
<string name="pairing_title">KDE Connect Devices</string>
<string name="pairing_description">Other devices running KDE Connect in your same network should appear here.</string>
<string name="device_paired">Device paired</string>
<string name="device_rename_title">Rename device</string>
<string name="device_rename_confirm">Rename</string>
<string name="refresh">Refresh</string>
<string name="unreachable_description">This paired device is not reachable. Make sure it is connected to your same network.</string>
<string name="on_data_message">It looks like you are on a mobile data connection. KDE Connect only works on local networks.</string>
<string name="no_wifi">You\'re not connected to a Wi-Fi network, so you may not be able to see any devices. Click here to enable Wi-Fi.</string>
<string name="no_file_browser">There are no file browsers installed.</string>
<string name="pref_plugin_telepathy">Send SMS</string>
<string name="pref_plugin_telepathy_desc">Send text messages from your desktop</string>
<string name="plugin_not_supported">This plugin is not supported by the device</string>
<string name="findmyphone_title">Find my phone</string>
<string name="findmyphone_title_tablet">Find my tablet</string>
<string name="findmyphone_title_tv">Find my TV</string>
<string name="findmyphone_description">Rings this device so you can find it</string>
<string name="findmyphone_found">Found</string>
<string name="findmyphone_found">Found it</string>
<string name="open">Open</string>
<string name="close">Close</string>
<string name="no_permissions_storage">You need to grant permissions to access the storage</string>
<string name="plugins_need_permission">Some Plugins need permissions to work (tap for more info):</string>
<string name="permission_explanation">This plugin needs permissions to work</string>
<string name="optional_permission_explanation">You need to grant extra permissions to enable all functions</string>
@@ -314,14 +294,13 @@
<string name="addcommand_explanation2">You can add new commands in the KDE Connect System Settings</string>
<string name="add_command_description">You can add commands on the desktop</string>
<string name="pref_plugin_mprisreceiver">Media Player Control</string>
<string name="pref_plugin_mprisreceiver_desc">Control your phones media players from another device</string>
<string name="dark_theme">Dark theme</string>
<string name="pref_plugin_mprisreceiver_desc">Control your phone\'s media players from another device</string>
<string name="notification_channel_default">Other notifications</string>
<string name="notification_channel_persistent">Persistent indicator</string>
<string name="notification_channel_media_control">Media control</string>
<string name="notification_channel_filetransfer">File transfer</string>
<string name="notification_channel_high_priority">High priority</string>
<string name="mpris_stop">Stop the current player</string>
<string name="copy_url_to_clipboard">Copy URL to clipboard</string>
@@ -352,7 +331,6 @@
<string name="extra_options">Extra options</string>
<string name="privacy_options">Privacy options</string>
<string name="set_privacy_options">Set your privacy options</string>
<string name="new_notification">New notification</string>
<string name="block_contents">Block contents of notifications</string>
<string name="block_images">Block images in notifications</string>
<string name="notification_channel_receivenotification">Notifications from other devices</string>
@@ -361,4 +339,7 @@
<string name="findmyphone_preference_key_ringtone" translatable="false">findmyphone_ringtone</string>
<string name="no_app_for_opening">No suitable app found to open this file</string>
<string name="remote_keyboard_service">KDE Connect Remote Keyboard</string>
<string name="presenter_pointer">Pointer</string>
</resources>

View File

@@ -28,6 +28,8 @@ import org.kde.kdeconnect.NetworkPacket;
import java.security.PrivateKey;
import java.util.ArrayList;
import androidx.annotation.WorkerThread;
public abstract class BaseLink {
@@ -88,5 +90,6 @@ public abstract class BaseLink {
}
//TO OVERRIDE, should be sync
@WorkerThread
public abstract boolean sendPacket(NetworkPacket np, Device.SendPacketStatusCallback callback);
}

View File

@@ -21,6 +21,7 @@
package org.kde.kdeconnect.Backends.BluetoothBackend;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothServerSocket;
import android.bluetooth.BluetoothSocket;
import android.content.Context;
@@ -42,8 +43,13 @@ import java.io.Reader;
import java.nio.charset.Charset;
import java.util.UUID;
import androidx.annotation.WorkerThread;
public class BluetoothLink extends BaseLink {
private final BluetoothSocket socket;
private final ConnectionMultiplexer connection;
private final InputStream input;
private final OutputStream output;
private final BluetoothDevice remoteAddress;
private final BluetoothLinkProvider linkProvider;
private boolean continueAccepting = true;
@@ -53,7 +59,7 @@ public class BluetoothLink extends BaseLink {
public void run() {
StringBuilder sb = new StringBuilder();
try {
Reader reader = new InputStreamReader(socket.getInputStream(), "UTF-8");
Reader reader = new InputStreamReader(input, "UTF-8");
char[] buf = new char[512];
while (continueAccepting) {
while (sb.indexOf("\n") == -1 && continueAccepting) {
@@ -61,7 +67,12 @@ public class BluetoothLink extends BaseLink {
if ((charsRead = reader.read(buf)) > 0) {
sb.append(buf, 0, charsRead);
}
if (charsRead < 0) {
disconnect();
return;
}
}
if (!continueAccepting) break;
int endIndex = sb.indexOf("\n");
if (endIndex != -1) {
@@ -71,7 +82,7 @@ public class BluetoothLink extends BaseLink {
}
}
} catch (IOException e) {
Log.e("BluetoothLink/receiving", "Connection to " + socket.getRemoteDevice().getAddress() + " likely broken.", e);
Log.e("BluetoothLink/receiving", "Connection to " + remoteAddress.getAddress() + " likely broken.", e);
disconnect();
}
}
@@ -86,19 +97,11 @@ public class BluetoothLink extends BaseLink {
}
if (np.hasPayloadTransferInfo()) {
BluetoothSocket transferSocket = null;
try {
UUID transferUuid = UUID.fromString(np.getPayloadTransferInfo().getString("uuid"));
transferSocket = socket.getRemoteDevice().createRfcommSocketToServiceRecord(transferUuid);
transferSocket.connect();
np.setPayload(new NetworkPacket.Payload(transferSocket.getInputStream(), np.getPayloadSize()));
InputStream payloadInputStream = connection.getChannelInputStream(transferUuid);
np.setPayload(new NetworkPacket.Payload(payloadInputStream, np.getPayloadSize()));
} catch (Exception e) {
if (transferSocket != null) {
try {
transferSocket.close();
} catch (IOException ignored) {
}
}
Log.e("BluetoothLink/receiving", "Unable to get payload", e);
}
}
@@ -107,9 +110,12 @@ public class BluetoothLink extends BaseLink {
}
});
public BluetoothLink(Context context, BluetoothSocket socket, String deviceId, BluetoothLinkProvider linkProvider) {
public BluetoothLink(Context context, ConnectionMultiplexer connection, InputStream input, OutputStream output, BluetoothDevice remoteAddress, String deviceId, BluetoothLinkProvider linkProvider) {
super(context, deviceId, linkProvider);
this.socket = socket;
this.connection = connection;
this.input = input;
this.output = output;
this.remoteAddress = remoteAddress;
this.linkProvider = linkProvider;
}
@@ -128,25 +134,25 @@ public class BluetoothLink extends BaseLink {
}
public void disconnect() {
if (socket == null) {
if (connection == null) {
return;
}
continueAccepting = false;
try {
socket.close();
connection.close();
} catch (IOException ignored) {
}
linkProvider.disconnectedLink(this, getDeviceId(), socket);
linkProvider.disconnectedLink(this, getDeviceId(), remoteAddress);
}
private void sendMessage(NetworkPacket np) throws JSONException, IOException {
byte[] message = np.serialize().getBytes(Charset.forName("UTF-8"));
OutputStream socket = this.socket.getOutputStream();
Log.i("BluetoothLink", "Beginning to send message");
socket.write(message);
output.write(message);
Log.i("BluetoothLink", "Finished sending message");
}
@WorkerThread
@Override
public boolean sendPacket(NetworkPacket np, final Device.SendPacketStatusCallback callback) {
@@ -157,11 +163,9 @@ public class BluetoothLink extends BaseLink {
}*/
try {
BluetoothServerSocket serverSocket = null;
UUID transferUuid = null;
if (np.hasPayload()) {
UUID transferUuid = UUID.randomUUID();
serverSocket = BluetoothAdapter.getDefaultAdapter()
.listenUsingRfcommWithServiceRecord("KDE Connect Transfer", transferUuid);
transferUuid = connection.newChannel();
JSONObject payloadTransferInfo = new JSONObject();
payloadTransferInfo.put("uuid", transferUuid.toString());
np.setPayloadTransferInfo(payloadTransferInfo);
@@ -169,28 +173,22 @@ public class BluetoothLink extends BaseLink {
sendMessage(np);
if (serverSocket != null) {
try (BluetoothSocket transferSocket = serverSocket.accept()) {
serverSocket.close();
if (transferUuid != null) {
try (OutputStream payloadStream = connection.getChannelOutputStream(transferUuid)) {
int BUFFER_LENGTH = 1024;
byte[] buffer = new byte[BUFFER_LENGTH];
int idealBufferLength = 4096;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
&& transferSocket.getMaxReceivePacketSize() > 0) {
idealBufferLength = transferSocket.getMaxReceivePacketSize();
}
byte[] buffer = new byte[idealBufferLength];
int bytesRead;
long progress = 0;
InputStream stream = np.getPayload().getInputStream();
while ((bytesRead = stream.read(buffer)) != -1) {
progress += bytesRead;
transferSocket.getOutputStream().write(buffer, 0, bytesRead);
payloadStream.write(buffer, 0, bytesRead);
if (np.getPayloadSize() > 0) {
callback.onProgressChanged((int) (100 * progress / np.getPayloadSize()));
}
}
transferSocket.getOutputStream().flush();
stream.close();
payloadStream.flush();
} catch (Exception e) {
callback.onFailure(e);
return false;

View File

@@ -38,6 +38,7 @@ import org.kde.kdeconnect.Device;
import org.kde.kdeconnect.NetworkPacket;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
@@ -132,8 +133,8 @@ public class BluetoothLinkProvider extends BaseLinkProvider {
return "BluetoothLinkProvider";
}
public void disconnectedLink(BluetoothLink link, String deviceId, BluetoothSocket socket) {
sockets.remove(socket.getRemoteDevice());
public void disconnectedLink(BluetoothLink link, String deviceId, BluetoothDevice remoteAddress) {
sockets.remove(remoteAddress);
visibleComputers.remove(deviceId);
connectionLost(link);
}
@@ -164,57 +165,75 @@ public class BluetoothLinkProvider extends BaseLinkProvider {
return;
}
if (continueProcessing) {
while (continueProcessing) {
try {
BluetoothSocket socket = serverSocket.accept();
connect(socket);
} catch (Exception ignored) {
} catch (Exception e) {
Log.e("BTLinkProvider/Server", "Bluetooth error", e);
}
}
}
private void connect(BluetoothSocket socket) throws Exception {
//socket.connect();
OutputStream outputStream = socket.getOutputStream();
if (sockets.containsKey(socket.getRemoteDevice())) {
Log.i("BTLinkProvider/Server", "Received duplicate connection from " + socket.getRemoteDevice().getAddress());
socket.close();
return;
} else {
sockets.put(socket.getRemoteDevice(), socket);
synchronized (sockets) {
if (sockets.containsKey(socket.getRemoteDevice())) {
Log.i("BTLinkProvider/Server", "Received duplicate connection from " + socket.getRemoteDevice().getAddress());
socket.close();
return;
} else {
sockets.put(socket.getRemoteDevice(), socket);
}
}
Log.i("BTLinkProvider/Server", "Received connection from " + socket.getRemoteDevice().getAddress());
ConnectionMultiplexer connection = null;
try {
Log.i("BTLinkProvider/Server", "Received connection from " + socket.getRemoteDevice().getAddress());
NetworkPacket np = NetworkPacket.createIdentityPacket(context);
byte[] message = np.serialize().getBytes("UTF-8");
outputStream.write(message);
//Delay to let bluetooth initialize stuff correctly
Thread.sleep(500);
Log.i("BTLinkProvider/Server", "Sent identity package");
connection = new ConnectionMultiplexer(socket);
OutputStream outputStream = connection.getDefaultOutputStream();
InputStream inputStream = connection.getDefaultInputStream();
// Listen for the response
StringBuilder sb = new StringBuilder();
Reader reader = new InputStreamReader(socket.getInputStream(), "UTF-8");
int charsRead;
char[] buf = new char[512];
while (sb.lastIndexOf("\n") == -1 && (charsRead = reader.read(buf)) != -1) {
sb.append(buf, 0, charsRead);
NetworkPacket np = NetworkPacket.createIdentityPacket(context);
byte[] message = np.serialize().getBytes("UTF-8");
outputStream.write(message);
outputStream.flush();
Log.i("BTLinkProvider/Server", "Sent identity package");
// Listen for the response
StringBuilder sb = new StringBuilder();
Reader reader = new InputStreamReader(inputStream, "UTF-8");
int charsRead;
char[] buf = new char[512];
while (sb.lastIndexOf("\n") == -1 && (charsRead = reader.read(buf)) != -1) {
sb.append(buf, 0, charsRead);
}
String response = sb.toString();
final NetworkPacket identityPacket = NetworkPacket.unserialize(response);
if (!identityPacket.getType().equals(NetworkPacket.PACKET_TYPE_IDENTITY)) {
Log.e("BTLinkProvider/Server", "2 Expecting an identity package");
return;
}
Log.i("BTLinkProvider/Server", "Received identity package");
BluetoothLink link = new BluetoothLink(context, connection,
inputStream, outputStream, socket.getRemoteDevice(),
identityPacket.getString("deviceId"), BluetoothLinkProvider.this);
addLink(identityPacket, link);
} catch (Exception e) {
synchronized (sockets) {
sockets.remove(socket.getRemoteDevice());
if (connection != null) connection.close();
}
throw e;
}
String response = sb.toString();
final NetworkPacket identityPacket = NetworkPacket.unserialize(response);
if (!identityPacket.getType().equals(NetworkPacket.PACKET_TYPE_IDENTITY)) {
Log.e("BTLinkProvider/Server", "2 Expecting an identity package");
return;
}
Log.i("BTLinkProvider/Server", "Received identity package");
BluetoothLink link = new BluetoothLink(context, socket,
identityPacket.getString("deviceId"), BluetoothLinkProvider.this);
addLink(identityPacket, link);
}
}
@@ -234,7 +253,7 @@ public class BluetoothLinkProvider extends BaseLinkProvider {
context.registerReceiver(this, filter);
}
while (continueProcessing) {
if (continueProcessing) {
connectToDevices();
try {
Thread.sleep(15000);
@@ -328,9 +347,15 @@ public class BluetoothLinkProvider extends BaseLinkProvider {
Log.i("BTLinkProvider/Client", "Connected to " + device.getAddress());
try {
//Delay to let bluetooth initialize stuff correctly
Thread.sleep(500);
ConnectionMultiplexer connection = new ConnectionMultiplexer(socket);
OutputStream outputStream = connection.getDefaultOutputStream();
InputStream inputStream = connection.getDefaultInputStream();
int character;
StringBuilder sb = new StringBuilder();
while (sb.lastIndexOf("\n") == -1 && (character = socket.getInputStream().read()) != -1) {
while (sb.lastIndexOf("\n") == -1 && (character = inputStream.read()) != -1) {
sb.append((char) character);
}
@@ -348,7 +373,7 @@ public class BluetoothLinkProvider extends BaseLinkProvider {
String myId = NetworkPacket.createIdentityPacket(context).getString("deviceId");
if (identityPacket.getString("deviceId").equals(myId)) {
// Probably won't happen, but just to be safe
socket.close();
connection.close();
return;
}
@@ -358,8 +383,8 @@ public class BluetoothLinkProvider extends BaseLinkProvider {
Log.i("BTLinkProvider/Client", "Identity package received, creating link");
final BluetoothLink link = new BluetoothLink(context, socket,
identityPacket.getString("deviceId"), BluetoothLinkProvider.this);
final BluetoothLink link = new BluetoothLink(context, connection, inputStream, outputStream,
socket.getRemoteDevice(), identityPacket.getString("deviceId"), BluetoothLinkProvider.this);
NetworkPacket np2 = NetworkPacket.createIdentityPacket(context);
link.sendPacket(np2, new Device.SendPacketStatusCallback() {

View File

@@ -0,0 +1,544 @@
package org.kde.kdeconnect.Backends.BluetoothBackend;
import android.bluetooth.BluetoothSocket;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public final class ConnectionMultiplexer implements Closeable {
private static final UUID DEFAULT_CHANNEL = UUID.fromString("a0d0aaf4-1072-4d81-aa35-902a954b1266");
private static final int BUFFER_SIZE = 4096;
private static final class ChannelInputStream extends InputStream implements Closeable {
Channel channel;
ChannelInputStream(Channel channel) {
this.channel = channel;
}
@Override
public int available() {
return channel.available();
}
@Override
public void close() throws IOException {
channel.close();
}
@Override
public int read() {
byte[] b = new byte[1];
if (read(b, 0, 1) == -1) {
return -1;
} else {
return b[0];
}
}
@Override
public int read(byte[] b, int off, int len) {
return channel.read(b, off, len);
}
@Override
public int read(byte[] b) {
return read(b, 0, b.length);
}
}
private static final class ChannelOutputStream extends OutputStream implements Closeable {
Channel channel;
ChannelOutputStream(Channel channel) {
this.channel = channel;
}
@Override
public void close() throws IOException {
channel.close();
}
@Override
public void flush() throws IOException {
channel.flush();
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
channel.write(b, off, len);
}
@Override
public void write(int b) throws IOException {
byte[] data = new byte[1];
data[0] = (byte) b;
write(data, 0, 1);
}
@Override
public void write(byte[] b) throws IOException {
write(b, 0, b.length);
}
}
private static final class Channel implements Closeable {
ConnectionMultiplexer multiplexer;
UUID id;
ByteBuffer read_buffer = ByteBuffer.allocate(BUFFER_SIZE);
final Object lock = new Object();
boolean open = true;
int requestedReadAmount = 0; //Number of times we requested some bytes from the channel
int freeWriteAmount = 0; //Number of times we can safely send bytes over the channel
Channel(ConnectionMultiplexer multiplexer, UUID id) {
this.multiplexer = multiplexer;
this.id = id;
}
int available() {
synchronized (lock) {
return read_buffer.position();
}
}
public int read(byte[] b, int off, int len) {
if (len == 0) return 0;
while (true) {
boolean makeRequest;
synchronized (lock) {
if (read_buffer.position() >= len) {
read_buffer.flip();
read_buffer.get(b, off, len);
read_buffer.compact();
//TODO: non-blocking (opportunistic) read request
return len;
} else if (read_buffer.position() > 0) {
int numread = read_buffer.position();
read_buffer.flip();
read_buffer.get(b, off, numread);
read_buffer.compact();
//TODO: non-blocking (opportunistic) read request
return numread;
}
if (!open) return -1;
makeRequest = requestedReadAmount < BUFFER_SIZE;
}
if (makeRequest) {
multiplexer.readRequest(id);
}
synchronized (lock) {
if (!open) return -1;
if (read_buffer.position() > 0) continue;
try {
lock.wait();
} catch (Exception ignored) {}
}
}
}
@Override
public void close() throws IOException {
flush();
synchronized (lock) {
open = false;
read_buffer.clear();
lock.notifyAll();
}
multiplexer.closeChannel(id);
}
void doClose() {
synchronized (lock) {
open = false;
lock.notifyAll();
}
}
public void write(byte[] data, int off, int len) throws IOException {
while (len > 0) {
synchronized (lock) {
while (true) {
if (!open) throw new IOException("Connection closed!");
if (freeWriteAmount == 0) {
try {
lock.wait();
} catch (Exception ignored) {}
} else {
break;
}
}
}
int num_written = multiplexer.writeRequest(id, data, off, len);
off += num_written;
len -= num_written;
}
}
void flush() throws IOException {
multiplexer.flush();
}
}
private BluetoothSocket socket;
private Map<UUID, Channel> channels = new HashMap<>();
private final Object lock = new Object();
private boolean open = true;
private boolean receivedProtocolVersion = false;
private static final byte MESSAGE_PROTOCOL_VERSION = 0; //Negotiate the protocol version
private static final byte MESSAGE_OPEN_CHANNEL = 1; //Open a new channel
private static final byte MESSAGE_CLOSE_CHANNEL = 2; //Close a channel
private static final byte MESSAGE_READ = 3; //Request some bytes from a channel
private static final byte MESSAGE_WRITE = 4; //Write some bytes to a channel
public ConnectionMultiplexer(BluetoothSocket socket) throws IOException {
this.socket = socket;
channels.put(DEFAULT_CHANNEL, new Channel(this, DEFAULT_CHANNEL));
sendProtocolVersion();
new ListenThread(socket).start();
}
private void sendProtocolVersion() throws IOException {
byte[] data = new byte[23];
ByteBuffer message = ByteBuffer.wrap(data).order(ByteOrder.BIG_ENDIAN);
message.put(MESSAGE_PROTOCOL_VERSION);
message.putShort((short) 4);
message.position(19);
message.putShort((short) 1);
message.putShort((short) 1);
socket.getOutputStream().write(data);
}
private void handleException(IOException e) {
synchronized (lock) {
open = false;
for (Channel channel : channels.values()) {
channel.doClose();
}
channels.clear();
if (socket.isConnected()) {
try {
socket.close();
} catch (IOException ignored) {
}
}
}
}
private void closeChannel(UUID id) {
synchronized (lock) {
if (channels.containsKey(id)) {
channels.remove(id);
byte[] data = new byte[19];
ByteBuffer message = ByteBuffer.wrap(data);
message.order(ByteOrder.BIG_ENDIAN);
message.put(MESSAGE_CLOSE_CHANNEL);
message.putShort((short) 0);
message.putLong(id.getMostSignificantBits());
message.putLong(id.getLeastSignificantBits());
try {
socket.getOutputStream().write(data);
} catch (IOException e) {
handleException(e);
}
}
}
}
private void readRequest(UUID id) {
synchronized (lock) {
Channel channel = channels.get(id);
if (channel == null) return;
byte[] data = new byte[21];
synchronized (channel.lock) {
if (!channel.open) return;
if (channel.read_buffer.position() + channel.requestedReadAmount >= BUFFER_SIZE) return;
int amount = BUFFER_SIZE - channel.read_buffer.position() - channel.requestedReadAmount;
ByteBuffer message = ByteBuffer.wrap(data).order(ByteOrder.BIG_ENDIAN);
message.put(MESSAGE_READ);
message.putShort((short) 2);
message.putLong(id.getMostSignificantBits());
message.putLong(id.getLeastSignificantBits());
message.putShort((short) amount);
channel.requestedReadAmount += amount;
try {
socket.getOutputStream().write(data);
} catch (IOException e) {
handleException(e);
}
channel.lock.notifyAll();
}
}
}
private int writeRequest(UUID id, byte[] write_data, int off, int write_len) throws IOException {
synchronized (lock) {
Channel channel = channels.get(id);
if (channel == null) return 0;
byte[] data = new byte[19 + BUFFER_SIZE];
int length;
synchronized (channel.lock) {
if (!channel.open) return 0;
if (channel.freeWriteAmount == 0) return 0;
length = channel.freeWriteAmount;
if (write_len < length) {
length = write_len;
}
ByteBuffer message = ByteBuffer.wrap(data).order(ByteOrder.BIG_ENDIAN);
message.put(MESSAGE_WRITE);
//Convert length to signed short
short lengthShort;
if (length >= 0x10000) {
throw new IOException("Invalid buffer size, too large!");
} else if (length >= 0x8000) {
lengthShort = (short) (-0x10000 + length);
} else {
lengthShort = (short) length;
}
message.putShort(lengthShort);
message.putLong(id.getMostSignificantBits());
message.putLong(id.getLeastSignificantBits());
message.put(write_data, off, length);
channel.freeWriteAmount -= length;
channel.lock.notifyAll();
}
try {
socket.getOutputStream().write(data, 0, 19 + length);
} catch (IOException e) {
handleException(e);
}
return length;
}
}
private void flush() throws IOException {
synchronized (lock) {
if (!open) return;
socket.getOutputStream().flush();
}
}
@Override
public void close() throws IOException {
if (socket == null) {
return;
}
socket.close();
socket = null;
for (Channel channel : channels.values()) {
channel.doClose();
}
channels.clear();
}
public UUID newChannel() throws IOException {
UUID id = UUID.randomUUID();
synchronized (lock) {
byte[] data = new byte[19];
ByteBuffer message = ByteBuffer.wrap(data);
message.order(ByteOrder.BIG_ENDIAN);
message.put(MESSAGE_OPEN_CHANNEL);
message.putShort((short) 0);
message.putLong(id.getMostSignificantBits());
message.putLong(id.getLeastSignificantBits());
try {
socket.getOutputStream().write(data);
} catch (IOException e) {
handleException(e);
throw e;
}
channels.put(id, new Channel(this, id));
}
return id;
}
public InputStream getDefaultInputStream() throws IOException {
return getChannelInputStream(DEFAULT_CHANNEL);
}
public OutputStream getDefaultOutputStream() throws IOException {
return getChannelOutputStream(DEFAULT_CHANNEL);
}
public InputStream getChannelInputStream(UUID id) throws IOException {
synchronized (lock) {
Channel channel = channels.get(id);
if (channel == null) throw new IOException("Invalid channel!");
return new ChannelInputStream(channel);
}
}
public OutputStream getChannelOutputStream(UUID id) throws IOException {
synchronized (lock) {
Channel channel = channels.get(id);
if (channel == null) throw new IOException("Invalid channel!");
return new ChannelOutputStream(channel);
}
}
private final class ListenThread extends Thread {
InputStream input;
OutputStream output;
ListenThread(BluetoothSocket socket) throws IOException {
input = socket.getInputStream();
output = socket.getOutputStream();
}
private void read_buffer(byte[] buffer, int len) throws IOException {
int num_read = 0;
while (num_read < len) {
int count = input.read(buffer, num_read, len - num_read);
if (count == -1) {
throw new IOException("Couldn't read enough bytes!");
}
num_read += count;
}
}
private void read_message() throws IOException {
byte[] data = new byte[BUFFER_SIZE];
read_buffer(data, 19);
ByteBuffer message = ByteBuffer.wrap(data, 0, 19).order(ByteOrder.BIG_ENDIAN);
byte type = message.get();
int length = message.getShort();
//signed short -> unsigned short (as int) conversion
if (length < 0) length += 0x10000;
long channel_id_msb = message.getLong();
long channel_id_lsb = message.getLong();
UUID channel_id = new UUID(channel_id_msb, channel_id_lsb);
if (!receivedProtocolVersion && type != MESSAGE_PROTOCOL_VERSION) {
throw new IOException("Did not receive protocol version message!");
}
if (type == MESSAGE_OPEN_CHANNEL) {
synchronized (lock) {
channels.put(channel_id, new Channel(ConnectionMultiplexer.this, channel_id));
}
} else if (type == MESSAGE_CLOSE_CHANNEL) {
synchronized (lock) {
Channel channel = channels.get(channel_id);
if (channel == null) return;
channels.remove(channel_id);
channel.doClose();
}
} else if (type == MESSAGE_READ) {
if (length != 2) {
throw new IOException("Message length is invalid for 'MESSAGE_READ'!");
}
read_buffer(data, 2);
int amount = ByteBuffer.wrap(data, 0, 2).order(ByteOrder.BIG_ENDIAN).getShort();
//signed short -> unsigned short (as int) conversion
if (amount < 0) amount += 0x10000;
synchronized (lock) {
Channel channel = channels.get(channel_id);
if (channel == null) return;
synchronized (channel.lock) {
channel.freeWriteAmount += amount;
channel.lock.notifyAll();
}
}
} else if (type == MESSAGE_WRITE) {
if (length > BUFFER_SIZE) {
throw new IOException("Message length is bigger than read size!");
}
read_buffer(data, length);
synchronized (lock) {
Channel channel = channels.get(channel_id);
if (channel == null) return;
synchronized (channel.lock) {
if (channel.requestedReadAmount < length) {
throw new IOException("No outstanding read requests of this length!");
}
channel.requestedReadAmount -= length;
if (channel.read_buffer.position() + length > BUFFER_SIZE) {
throw new IOException("Shouldn't be getting more data when the buffer is too full!");
}
channel.read_buffer.put(data, 0, length);
channel.lock.notifyAll();
}
}
} else if (type == MESSAGE_PROTOCOL_VERSION) {
//Allow more than 4 bytes data, for future extensibility
if (length < 4) {
throw new IOException("Message length is invalid for 'MESSAGE_PROTOCOL_VERSION'!");
}
//We might need a larger buffer to read this
if (length > data.length) {
data = new byte[1 << 16];
}
read_buffer(data, length);
//Check remote endpoint protocol version
int minimum_version = ByteBuffer.wrap(data, 0, 2).order(ByteOrder.BIG_ENDIAN).getShort();
//signed short -> unsigned short (as int) conversion
if (minimum_version < 0) minimum_version += 0x10000;
int maximum_version = ByteBuffer.wrap(data, 2, 2).order(ByteOrder.BIG_ENDIAN).getShort();
//signed short -> unsigned short (as int) conversion
if (maximum_version < 0) maximum_version += 0x10000;
if (minimum_version > 1 || maximum_version < 1) {
throw new IOException("Unsupported protocol version " + minimum_version + " - " + maximum_version + "!");
}
//We now support receiving other messages
receivedProtocolVersion = true;
} else {
throw new IOException("Invalid message type " + (int) type);
}
}
@Override
public void run() {
while (true) {
synchronized (lock) {
if (!open) return;
}
try {
read_message();
} catch (IOException e) {
handleException(e);
return;
}
}
}
}
}

View File

@@ -44,6 +44,8 @@ import java.nio.channels.NotYetConnectedException;
import javax.net.ssl.SSLSocket;
import androidx.annotation.WorkerThread;
public class LanLink extends BaseLink {
public interface LinkDisconnectedCallback {
@@ -137,6 +139,7 @@ public class LanLink extends BaseLink {
}
//Blocking, do not call from main thread
@WorkerThread
@Override
public boolean sendPacket(NetworkPacket np, final Device.SendPacketStatusCallback callback) {
if (socket == null) {

View File

@@ -31,7 +31,6 @@ import org.kde.kdeconnect.Backends.BaseLinkProvider;
import org.kde.kdeconnect.BackgroundService;
import org.kde.kdeconnect.Device;
import org.kde.kdeconnect.Helpers.DeviceHelper;
import org.kde.kdeconnect.Helpers.NetworkHelper;
import org.kde.kdeconnect.Helpers.SecurityHelpers.SslHelper;
import org.kde.kdeconnect.Helpers.StringsHelper;
import org.kde.kdeconnect.NetworkPacket;
@@ -77,6 +76,9 @@ public class LanLinkProvider extends BaseLinkProvider implements LanLink.LinkDis
private ServerSocket tcpServer;
private DatagramSocket udpServer;
private long lastBroadcast = 0;
private final static long delayBetweenBroadcasts = 500;
private boolean listening = false;
// To prevent infinte loop between Android < IceCream because both device can only broadcast identity package but cannot connect via TCP
@@ -356,11 +358,11 @@ public class LanLinkProvider extends BaseLinkProvider implements LanLink.LinkDis
}
private void broadcastUdpPacket() {
if (NetworkHelper.isOnMobileNetwork(context)) {
Log.w("LanLinkProvider", "On 3G network, not sending broadcast.");
if (System.currentTimeMillis() < lastBroadcast + delayBetweenBroadcasts) {
Log.i("LanLinkProvider", "broadcastUdpPacket: relax cowboy");
return;
}
lastBroadcast = System.currentTimeMillis();
new Thread(() -> {
ArrayList<String> iplist = CustomDevicesActivity

View File

@@ -28,6 +28,8 @@ import org.kde.kdeconnect.Backends.BasePairingHandler;
import org.kde.kdeconnect.Device;
import org.kde.kdeconnect.NetworkPacket;
import androidx.annotation.WorkerThread;
public class LoopbackLink extends BaseLink {
public LoopbackLink(Context context, BaseLinkProvider linkProvider) {
@@ -44,6 +46,7 @@ public class LoopbackLink extends BaseLink {
return new LoopbackPairingHandler(device, callback);
}
@WorkerThread
@Override
public boolean sendPacket(NetworkPacket in, Device.SendPacketStatusCallback callback) {
packageReceived(in);

View File

@@ -100,24 +100,9 @@ public class BackgroundService extends Service {
}
}
public static void addGuiInUseCounter(Context activity) {
addGuiInUseCounter(activity, false);
}
public static void addGuiInUseCounter(final Context activity, final boolean forceNetworkRefresh) {
BackgroundService.RunCommand(activity, service -> {
boolean refreshed = service.acquireDiscoveryMode(activity);
if (!refreshed && forceNetworkRefresh) {
service.onNetworkChange();
}
});
}
public static void removeGuiInUseCounter(final Context activity) {
BackgroundService.RunCommand(activity, service -> {
//If no user interface is open, close the connections open to other devices
service.releaseDiscoveryMode(activity);
});
private boolean isInDiscoveryMode() {
//return !discoveryModeAcquisitions.isEmpty();
return true; // Keep it always on for now
}
private final Device.PairingCallback devicePairingCallback = new Device.PairingCallback() {
@@ -209,7 +194,7 @@ public class BackgroundService extends Service {
device = new Device(BackgroundService.this, identityPacket, link);
if (device.isPaired() || device.isPairRequested() || device.isPairRequestedByPeer()
|| link.linkShouldBeKeptAlive()
|| !discoveryModeAcquisitions.isEmpty()) {
|| isInDiscoveryMode()) {
devices.put(deviceId, device);
device.addPairingCallback(devicePairingCallback);
} else {

View File

@@ -49,6 +49,7 @@ import java.security.spec.PKCS8EncodedKeySpec;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -56,6 +57,8 @@ import java.util.Vector;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import androidx.annotation.AnyThread;
import androidx.annotation.WorkerThread;
import androidx.core.app.NotificationCompat;
import androidx.core.content.ContextCompat;
@@ -76,6 +79,7 @@ public class Device implements BaseLink.PacketReceiver {
private final Map<String, BasePairingHandler> pairingHandlers = new HashMap<>();
private final CopyOnWriteArrayList<BaseLink> links = new CopyOnWriteArrayList<>();
private DevicePacketQueue packetQueue;
private List<String> supportedPlugins = new ArrayList<>();
private final ConcurrentHashMap<String, Plugin> plugins = new ConcurrentHashMap<>();
@@ -86,6 +90,11 @@ public class Device implements BaseLink.PacketReceiver {
private final SharedPreferences settings;
private final CopyOnWriteArrayList<PluginsChangedListener> pluginsChangedListeners = new CopyOnWriteArrayList<>();
private Set<String> incomingCapabilities = new HashSet<>();
public boolean supportsPacketType(String type) {
return incomingCapabilities.contains(type);
}
public interface PluginsChangedListener {
void onPluginsChanged(Device device);
@@ -401,14 +410,11 @@ public class Device implements BaseLink.PacketReceiver {
.build();
NotificationHelper.notifyCompat(notificationManager, notificationId, noti);
BackgroundService.addGuiInUseCounter(context);
}
public void hidePairingNotification() {
final NotificationManager notificationManager = (NotificationManager) getContext().getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(notificationId);
BackgroundService.removeGuiInUseCounter(context);
}
//
@@ -420,6 +426,9 @@ public class Device implements BaseLink.PacketReceiver {
}
public void addLink(NetworkPacket identityPacket, BaseLink link) {
if (links.isEmpty()) {
packetQueue = new DevicePacketQueue(this);
}
//FilesHelper.LogOpenFileCount();
links.add(link);
link.addPacketReceiver(this);
@@ -492,12 +501,14 @@ public class Device implements BaseLink.PacketReceiver {
Set<String> outgoingCapabilities = identityPacket.getStringSet("outgoingCapabilities", null);
Set<String> incomingCapabilities = identityPacket.getStringSet("incomingCapabilities", null);
if (incomingCapabilities != null && outgoingCapabilities != null) {
supportedPlugins = new Vector<>(PluginFactory.pluginsForCapabilities(incomingCapabilities, outgoingCapabilities));
} else {
supportedPlugins = new Vector<>(PluginFactory.getAvailablePlugins());
}
this.incomingCapabilities = incomingCapabilities;
reloadPluginsFromSettings();
@@ -523,6 +534,10 @@ public class Device implements BaseLink.PacketReceiver {
Log.i("KDE/Device", "removeLink: " + link.getLinkProvider().getName() + " -> " + getName() + " active links: " + links.size());
if (links.isEmpty()) {
reloadPluginsFromSettings();
if (packetQueue != null) {
packetQueue.disconnected();
packetQueue = null;
}
}
}
@@ -610,19 +625,64 @@ public class Device implements BaseLink.PacketReceiver {
}
};
@AnyThread
public void sendPacket(NetworkPacket np) {
sendPacket(np, defaultCallback);
sendPacket(np, -1, defaultCallback);
}
@AnyThread
public void sendPacket(NetworkPacket np, int replaceID) {
sendPacket(np, replaceID, defaultCallback);
}
@WorkerThread
public boolean sendPacketBlocking(NetworkPacket np) {
return sendPacketBlocking(np, defaultCallback);
}
//Async
@AnyThread
public void sendPacket(final NetworkPacket np, final SendPacketStatusCallback callback) {
new Thread(() -> sendPacketBlocking(np, callback)).start();
sendPacket(np, -1, callback);
}
/**
* Send a packet to the device asynchronously
* @param np The packet
* @param replaceID If positive, replaces all unsent packages with the same replaceID
* @param callback A callback for success/failure
*/
@AnyThread
public void sendPacket(final NetworkPacket np, int replaceID, final SendPacketStatusCallback callback) {
if (packetQueue == null) {
callback.onFailure(new Exception("Device disconnected!"));
} else {
packetQueue.addPacket(np, replaceID, callback);
}
}
/**
* Check if we still have an unsent packet in the queue with the given ID.
* If so, remove it from the queue and return it
* @param replaceID The replace ID (must be positive)
* @return The found packet, or null
*/
public NetworkPacket getAndRemoveUnsentPacket(int replaceID) {
if (packetQueue == null) {
return null;
} else {
return packetQueue.getAndRemoveUnsentPacket(replaceID);
}
}
/**
* Send {@code np} over one of this device's connected {@link #links}.
*
* @param np the packet to send
* @param callback a callback that can receive realtime updates
* @return true if the packet was sent ok, false otherwise
* @see BaseLink#sendPacket(NetworkPacket, SendPacketStatusCallback)
*/
@WorkerThread
public boolean sendPacketBlocking(final NetworkPacket np, final SendPacketStatusCallback callback) {
/*

View File

@@ -0,0 +1,121 @@
package org.kde.kdeconnect;
import java.util.ArrayDeque;
import java.util.Iterator;
/**
* Keeps a queue of packets to send to a device, to prevent either blocking or using lots of threads
*/
class DevicePacketQueue {
/**
* Holds the packet and related stuff to keep in the queue
*/
private static final class Item {
NetworkPacket packet;
/**
* Replacement ID: if positive, it can be replaced by later packets with the same ID
*/
int replaceID;
Device.SendPacketStatusCallback callback;
Item(NetworkPacket packet, int replaceID, Device.SendPacketStatusCallback callback) {
this.packet = packet;
this.callback = callback;
this.replaceID = replaceID;
}
}
private final ArrayDeque<Item> items = new ArrayDeque<>();
private Device mDevice;
private final Object lock = new Object();
private boolean exit = false;
DevicePacketQueue(Device device) {
mDevice = device;
new Thread(new SendingThread()).start();
}
/**
* Send a packet (at some point in the future)
* @param packet The packet
* @param replaceID If positive, it will replace all older packets still in the queue
* @param callback The callback after sending the packet
*/
void addPacket(NetworkPacket packet, int replaceID, Device.SendPacketStatusCallback callback) {
synchronized (lock) {
if (exit) {
callback.onFailure(new Exception("Device disconnected!"));
} else {
if (replaceID >= 0) {
Iterator<Item> iter = items.iterator();
while (iter.hasNext()) {
Item item = iter.next();
if (item.replaceID == replaceID) {
//Replace contents with new contents
item.packet = packet;
item.callback = callback;
//There can only be one in the queue, so we're done now
return;
}
}
}
items.addLast(new Item(packet, replaceID, callback));
lock.notify();
}
}
}
/**
* Check if we still have an unsent packet in the queue with the given ID.
* If so, remove it from the queue and return it
* @param replaceID The replace ID (must be positive)
* @return The found packet, or null
*/
NetworkPacket getAndRemoveUnsentPacket(int replaceID) {
synchronized (lock) {
Iterator<Item> iter = items.iterator();
while (iter.hasNext()) {
Item item = iter.next();
if (item.replaceID == replaceID) {
iter.remove();
return item.packet;
}
}
}
return null;
}
void disconnected() {
synchronized (lock) {
exit = true;
lock.notifyAll();
}
}
private final class SendingThread implements Runnable {
@Override
public void run() {
while (true) {
Item item;
synchronized (lock) {
while (items.isEmpty() && !exit) {
try {
lock.wait();
} catch (InterruptedException ignored) {
}
}
if (exit) break;
item = items.removeFirst();
}
mDevice.sendPacketBlocking(item.packet, item.callback);
}
while (!items.isEmpty()) {
Item item = items.removeFirst();
item.callback.onFailure(new Exception("Device disconnected!"));
}
}
}
}

View File

@@ -32,6 +32,10 @@ import android.util.Base64;
import android.util.Base64OutputStream;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -46,12 +50,9 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.collection.LongSparseArray;
public class ContactsHelper {
static final String LOG_TAG = "ContactsHelper";
/**
* Lookup the name and photoID of a contact given a phone number
@@ -103,7 +104,7 @@ public class ContactsHelper {
}
return encodedPhoto.toString();
} catch (Exception ex) {
Log.e("ContactsHelper", ex.toString());
Log.e(LOG_TAG, ex.toString());
return "";
}
}
@@ -140,11 +141,13 @@ public class ContactsHelper {
} else {
// Something went wrong with this contact
// If you are experiencing this, please open a bug report indicating how you got here
Log.e("ContactsHelper", "Got a contact which does not have a LOOKUP_KEY");
Log.e(LOG_TAG, "Got a contact which does not have a LOOKUP_KEY");
continue;
}
toReturn.add(contactID);
if (!toReturn.contains(contactID)) {
toReturn.add(contactID);
}
} while (contactsCursor.moveToNext());
}
}
@@ -153,59 +156,7 @@ public class ContactsHelper {
}
/**
* Get VCards using the batch database query which requires Android API 21
*
* @param context android.content.Context running the request
* @param IDs collection of raw contact IDs to look up
* @param lookupKeys
* @return Mapping of raw contact IDs to corresponding VCard
*/
@SuppressWarnings("ALL") // Since this method is busted anyway
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
@Deprecated
protected static Map<Long, VCardBuilder> getVCardsFast(Context context, Collection<Long> IDs, Map<Long, String> lookupKeys) {
LongSparseArray<VCardBuilder> toReturn = new LongSparseArray<>();
StringBuilder keys = new StringBuilder();
List<Long> orderedIDs = new ArrayList<>(IDs);
for (Long ID : orderedIDs) {
String key = lookupKeys.get(ID);
keys.append(key);
keys.append(':');
}
// Remove trailing ':'
keys.deleteCharAt(keys.length() - 1);
Uri vcardURI = Uri.withAppendedPath(
ContactsContract.Contacts.CONTENT_MULTI_VCARD_URI,
Uri.encode(keys.toString()));
;
StringBuilder vcardJumble = new StringBuilder();
try (InputStream input = context.getContentResolver().openInputStream(vcardURI)) {
BufferedReader bufferedInput = new BufferedReader(new InputStreamReader(input));
String line;
while ((line = bufferedInput.readLine()) != null) {
vcardJumble.append(line).append('\n');
}
} catch (IOException e) {
// If you are experiencing this, please open a bug report indicating how you got here
Log.e("Contacts", "Exception while fetching vcards", e);
}
// At this point we are screwed:
// There is no way to figure out, given the lookup we just made, which VCard belonges
// to which ID. They appear to be in the same order as the request was made, but this
// is (provably) unreliable. I am leaving this code in case it is useful, but unless
// Android improves their API there is nothing we can do with it
return null;
}
/**
* Get VCards using serial database lookups. This is tragically slow, but the faster method using
* Get VCards using serial database lookups. This is tragically slow, so call only when needed.
*
* There is a faster API specified using ContactsContract.Contacts.CONTENT_MULTI_VCARD_URI,
* but there does not seem to be a way to figure out which ID resulted in which VCard using that API
@@ -261,97 +212,110 @@ public class ContactsHelper {
}
/**
* Return a mapping of contact IDs to a map of the requested data from the Contacts database
* <p>
* If for some reason there is no row associated with the contact ID in the database,
* there will not be a corresponding field in the returned map
* Get the last-modified timestamp for every contact in the database
*
* @param context android.content.Context running the request
* @param IDs collection of contact uIDs to look up
* @param contactsProjection List of column names to extract, defined in ContactsContract.Contacts
* @param context android.content.Context running the request
* @return Mapping of contact uID to last-modified timestamp
*/
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2) // Need API 18 for contact timestamps
public static Map<uID, Long> getAllContactTimestamps(Context context) {
String[] projection = { uID.COLUMN, ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP };
Map<uID, Map<String, String>> databaseValues = accessContactsDatabase(context, projection, null, null, null);
Map<uID, Long> timestamps = new HashMap<>();
for (uID contactID : databaseValues.keySet()) {
Map<String, String> data = databaseValues.get(contactID);
timestamps.put(
contactID,
Long.parseLong(data.get(ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP))
);
}
return timestamps;
}
/**
* Get the last-modified timestamp for the specified contact
*
* @param context android.content.Context running the request
* @param contactID Contact uID to read
* @throws ContactNotFoundException If the given ID for some reason does not match a contact
* @return Last-modified timestamp of the contact
*/
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2) // Need API 18 for contact timestamps
public static Long getContactTimestamp(Context context, uID contactID) throws ContactNotFoundException {
String[] projection = { uID.COLUMN, ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP };
String selection = uID.COLUMN + " = ?";
String[] selectionArgs = { contactID.toString() };
Map<uID, Map<String, String>> databaseValue = accessContactsDatabase(context, projection, selection, selectionArgs, null);
if (databaseValue.size() == 0) {
throw new ContactNotFoundException("Querying for contact with id " + contactID + " returned no results.");
}
if (databaseValue.size() != 1) {
Log.w(LOG_TAG, "Received an improper number of return values from the database in getContactTimestamp: " + databaseValue.size());
}
Long timestamp = Long.parseLong(databaseValue.get(contactID).get(ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP));
return timestamp;
}
/**
* Return a mapping of contact IDs to a map of the requested data from the Contacts database.
*
* @param context android.content.Context running the request
* @param projection List of column names to extract, defined in ContactsContract.Contacts. Must contain uID.COLUMN
* @param selection Parameterizable filter to use with the ContentResolver query. May be null.
* @param selectionArgs Parameters for selection. May be null.
* @param sortOrder Sort order to request from the ContentResolver query. May be null.
* @return mapping of contact uIDs to desired values, which are a mapping of column names to the data contained there
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB) // Needed for Cursor.getType(..)
public static Map<uID, Map<String, Object>> getColumnsFromContactsForIDs(Context context, Collection<uID> IDs, String[] contactsProjection) {
HashMap<uID, Map<String, Object>> toReturn = new HashMap<>();
if (IDs.isEmpty()) {
return toReturn;
}
private static Map<uID, Map<String, String>> accessContactsDatabase(
@NonNull Context context,
@NonNull String[] projection,
@Nullable String selection,
@Nullable String[] selectionArgs,
@Nullable String sortOrder
) {
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;
// Regardless of whether it was requested, we need to look up the uID column
Set<String> lookupProjection = new HashSet<>(Arrays.asList(contactsProjection));
lookupProjection.add(uID.COLUMN);
// We need a selection which looks like "<column> IN(?,?,...?)" with one ? per ID
StringBuilder contactsSelection = new StringBuilder(uID.COLUMN);
contactsSelection.append(" IN(");
for (int i = 0; i < IDs.size(); i++) {
contactsSelection.append("?,");
}
// Remove trailing comma
contactsSelection.deleteCharAt(contactsSelection.length() - 1);
contactsSelection.append(")");
// We need selection arguments as simply a String representation of each ID
List<String> contactsArgs = new ArrayList<>();
for (uID ID : IDs) {
contactsArgs.add(ID.toString());
}
HashMap<uID, Map<String, String>> toReturn = new HashMap<>();
try (Cursor contactsCursor = context.getContentResolver().query(
contactsUri,
lookupProjection.toArray(new String[0]),
contactsSelection.toString(),
contactsArgs.toArray(new String[0]),
null
projection,
selection,
selectionArgs,
sortOrder
)) {
if (contactsCursor != null && contactsCursor.moveToFirst()) {
do {
Map<String, Object> requestedData = new HashMap<>();
Map<String, String> requestedData = new HashMap<>();
int lookupKeyIdx = contactsCursor.getColumnIndexOrThrow(uID.COLUMN);
String lookupKey = contactsCursor.getString(lookupKeyIdx);
int uIDIndex = contactsCursor.getColumnIndexOrThrow(uID.COLUMN);
uID uID = new uID(contactsCursor.getString(uIDIndex));
// For each column, collect the data from that column
for (String column : contactsProjection) {
for (String column : projection) {
int index = contactsCursor.getColumnIndex(column);
// Since we might be getting various kinds of data, Object is the best we can do
Object data;
int type;
String data;
if (index == -1) {
// This contact didn't have the requested column? Something is very wrong.
// If you are experiencing this, please open a bug report indicating how you got here
Log.e("ContactsHelper", "Got a contact which does not have a requested column");
Log.e(LOG_TAG, "Got a contact which does not have a requested column");
continue;
}
type = contactsCursor.getType(index);
switch (type) {
case Cursor.FIELD_TYPE_INTEGER:
data = contactsCursor.getInt(index);
break;
case Cursor.FIELD_TYPE_FLOAT:
data = contactsCursor.getFloat(index);
break;
case Cursor.FIELD_TYPE_STRING:
data = contactsCursor.getString(index);
break;
case Cursor.FIELD_TYPE_BLOB:
data = contactsCursor.getBlob(index);
break;
default:
Log.e("ContactsHelper", "Got an undefined type of column " + column);
continue;
}
data = contactsCursor.getString(index);
requestedData.put(column, data);
}
toReturn.put(new uID(lookupKey), requestedData);
toReturn.put(uID, requestedData);
} while (contactsCursor.moveToNext());
}
}
@@ -441,4 +405,17 @@ public class ContactsHelper {
return contactLookupKey.equals(other);
}
}
/**
* Exception to indicate that a specified contact was not found
*/
public static class ContactNotFoundException extends Exception {
public ContactNotFoundException(uID contactID) {
super("Unable to find contact with ID " + contactID);
}
public ContactNotFoundException(String message) {
super(message);
}
}
}

View File

@@ -24,486 +24,19 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.util.Log;
import org.kde.kdeconnect.Device;
import com.jaredrummler.android.device.DeviceName;
import java.util.HashMap;
import org.kde.kdeconnect.Device;
public class DeviceHelper {
public static final String KEY_DEVICE_NAME_PREFERENCE = "device_name_preference";
//from https://github.com/meetup/android-device-names
//Converted to java using:
//cat android_models.properties | awk -F'=' '{sub(/ *$/, "", $1)} sub(/^ */, "", $2) { if ($2 != "") print "humanReadableNames.put(\""$1"\",\"" $2 "\");"}' | sed -e 's/\\ /_/g'
private final static HashMap<String, String> humanReadableNames = new HashMap<>();
static {
humanReadableNames.put("5860E", "Coolpad Quattro 4G");
humanReadableNames.put("831C", "HTC One M8");
humanReadableNames.put("9920", "Star Alps S9920");
humanReadableNames.put("A0001", "OnePlus One");
humanReadableNames.put("A1-810", "Acer Iconia A1-810");
humanReadableNames.put("ADR6300", "HTC Droid Incredible");
humanReadableNames.put("ADR6330VW", "HTC Rhyme");
humanReadableNames.put("ADR6350", "HTC Droid Incredible 2");
humanReadableNames.put("ADR6400L", "HTC Thunderbolt");
humanReadableNames.put("ADR6410LVW", "HTC Droid Incredible 4G");
humanReadableNames.put("ADR6425LVW", "HTC Rezound 4G");
humanReadableNames.put("ALCATEL_ONE_TOUCH_5035X", "Alcatel One Touch X Pop");
humanReadableNames.put("ALCATEL_ONE_TOUCH_7041X", "Alcatel One Touch Pop C7");
humanReadableNames.put("ASUS_T00J", "Asus ZenFone 5");
humanReadableNames.put("ASUS_Transformer_Pad_TF300T", "Asus Transformer Pad");
humanReadableNames.put("ASUS_Transformer_Pad_TF700T", "Asus Transformer Pad");
humanReadableNames.put("Aquaris_E4.5", "bq Aquaris E4.5");
humanReadableNames.put("C1905", "Sony Xperia M");
humanReadableNames.put("C2105", "Sony Xperia L");
humanReadableNames.put("C5155", "Kyocera Rise");
humanReadableNames.put("C5170", "Kyocera Hydro");
humanReadableNames.put("C5302", "Xperia SP");
humanReadableNames.put("C5303", "Sony Xperia SP");
humanReadableNames.put("C5306", "Xperia SP");
humanReadableNames.put("C6603", "Sony Xperia Z");
humanReadableNames.put("C6606", "Sony Xperia Z");
humanReadableNames.put("C6833", "Sony Xperia Z Ultra");
humanReadableNames.put("C6903", "Sony Xperia Z1");
humanReadableNames.put("C6916", "Sony Xperia Z1S");
humanReadableNames.put("CM990", "Huawei Evolution III");
humanReadableNames.put("CUBOT_ONE", "Cubot One");
humanReadableNames.put("D2005", "Sony Xperia E1");
humanReadableNames.put("D2302", "Xperia M2");
humanReadableNames.put("D2303", "Sony Xperia M2");
humanReadableNames.put("D2305", "Xperia M2");
humanReadableNames.put("D2306", "Xperia M2");
humanReadableNames.put("D2316", "Xperia M2");
humanReadableNames.put("D5503", "Sony Xperia Z1");
humanReadableNames.put("D5803", "Sony Xperia Z3 Compact");
humanReadableNames.put("D5833", "Xperia Z3 Compact");
humanReadableNames.put("D6503", "Sony Xperia Z2");
humanReadableNames.put("D6603", "Sony Xperia Z3");
humanReadableNames.put("D6653", "Sony Xperia Z3");
humanReadableNames.put("DROID2", "Motorola Droid 2");
humanReadableNames.put("DROID2_GLOBAL", "Motorola Droid 2 Global");
humanReadableNames.put("DROID3", "Motorola Droid 3");
humanReadableNames.put("DROID4", "Motorola Droid 4");
humanReadableNames.put("DROIDX", "Motorola Droid X");
humanReadableNames.put("DROID_BIONIC", "Motorola Droid Bionic");
humanReadableNames.put("DROID_Pro", "Motorola Droid Pro");
humanReadableNames.put("DROID_RAZR", "Motorola Droid Razr");
humanReadableNames.put("DROID_RAZR_HD", "Motorola Droid Razr HD");
humanReadableNames.put("DROID_X2", "Motorola Droid X2");
humanReadableNames.put("Desire_HD", "HTC Desire HD");
humanReadableNames.put("Droid", "Motorola Droid");
humanReadableNames.put("EVO", "HTC Evo");
humanReadableNames.put("GT-I8160", "Samsung Galaxy Ace 2");
humanReadableNames.put("GT-I8190", "Samsung Galaxy S III Mini");
humanReadableNames.put("GT-I8190L", "Samsung Galaxy S3 Mini");
humanReadableNames.put("GT-I8190N", "Samsung Galaxy S III Mini");
humanReadableNames.put("GT-I8260", "Samsung Galaxy Core");
humanReadableNames.put("GT-I8262", "Samsung Galaxy Core");
humanReadableNames.put("GT-I8550L", "Samsung Galaxy Win");
humanReadableNames.put("GT-I9000", "Samsung Galaxy S");
humanReadableNames.put("GT-I9001", "Samsung Galaxy S Plus");
humanReadableNames.put("GT-I9060", "Samsung Galaxy Grand Neo");
humanReadableNames.put("GT-I9063T", "Samsung Galaxy Grand Neo Duos");
humanReadableNames.put("GT-I9070", "Samsung Galaxy S Advance");
humanReadableNames.put("GT-I9082", "Samsung Galaxy Grand");
humanReadableNames.put("GT-I9100", "Samsung Galaxy S II");
humanReadableNames.put("GT-I9100M", "Samsung Galaxy S II");
humanReadableNames.put("GT-I9100P", "Samsung Galaxy S II");
humanReadableNames.put("GT-I9100T", "Samsung Galaxy S II");
humanReadableNames.put("GT-I9105P", "Samsung Galaxy S2 Plus");
humanReadableNames.put("GT-I9190", "Samsung Galaxy S4 Mini");
humanReadableNames.put("GT-I9192", "Samsung Galaxy S4 Mini Duos");
humanReadableNames.put("GT-I9195", "Samsung Galaxy S4 Mini");
humanReadableNames.put("GT-I9197", "Galaxy S4 Mini");
humanReadableNames.put("GT-I9198", "Galaxy S4 Mini");
humanReadableNames.put("GT-I9210", "Galaxy S2");
humanReadableNames.put("GT-I9295", "Samsung Galaxy S4 Active");
humanReadableNames.put("GT-I9300", "Samsung Galaxy S III");
humanReadableNames.put("GT-I9300T", "Samsung Galaxy S III");
humanReadableNames.put("GT-I9305", "Samsung Galaxy S III");
humanReadableNames.put("GT-I9305T", "Samsung Galaxy S III");
humanReadableNames.put("GT-I9500", "Samsung Galaxy S4");
humanReadableNames.put("GT-I9505", "Samsung Galaxy S4");
humanReadableNames.put("GT-I9506", "Samsung Galaxy S4");
humanReadableNames.put("GT-I9507", "Samsung Galaxy S4");
humanReadableNames.put("GT-N5110", "Samsung Galaxy Note 8.0");
humanReadableNames.put("GT-N7000", "Samsung Galaxy Note");
humanReadableNames.put("GT-N7100", "Samsung Galaxy Note II");
humanReadableNames.put("GT-N7105", "Samsung Galaxy Note II");
humanReadableNames.put("GT-N7105T", "Samsung Galaxy Note II");
humanReadableNames.put("GT-N8000", "Samsung Galaxy Note 10.1");
humanReadableNames.put("GT-N8010", "Samsung Galaxy Note 10.1");
humanReadableNames.put("GT-N8013", "Samsung Galaxy Note 10.1");
humanReadableNames.put("GT-P3100", "Samsung Galaxy Tab 2");
humanReadableNames.put("GT-P3110", "Samsung Galaxy Tab 2");
humanReadableNames.put("GT-P3113", "Samsung Galaxy Tab 2 7.0");
humanReadableNames.put("GT-P5110", "Samsung Galaxy Tab 2");
humanReadableNames.put("GT-P5113", "Samsnung Galaxy Tab 2 10.1");
humanReadableNames.put("GT-P5210", "Samsung Galaxy Tab 3 10.1");
humanReadableNames.put("GT-P7510", "Samsung Galaxy Tab 10.1");
humanReadableNames.put("GT-S5301L", "Samsung Galaxy Pocket Plus");
humanReadableNames.put("GT-S5360", "Samsung Galaxy Y");
humanReadableNames.put("GT-S5570", "Samsung Galaxy Mini");
humanReadableNames.put("GT-S5830", "Samsung Galaxy Ace");
humanReadableNames.put("GT-S5830i", "Samsung Galaxy Ace");
humanReadableNames.put("GT-S6310", "Samsung Galaxy Young");
humanReadableNames.put("GT-S6310N", "Samsung Galaxy Young");
humanReadableNames.put("GT-S6810P", "Samsung Galaxy Fame");
humanReadableNames.put("GT-S7560M", "Samsung Galaxy Ace II X");
humanReadableNames.put("GT-S7562", "Samsung Galaxy S Duos");
humanReadableNames.put("GT-S7580", "Samsung Galaxy Trend Plus");
humanReadableNames.put("Galaxy_Nexus", "Samsung Galaxy Nexus");
humanReadableNames.put("HM_1SW", "Xiaomi Redmi");
humanReadableNames.put("HTC6435LVW", "HTC Droid DNA");
humanReadableNames.put("HTC6500LVW", "HTC One");
humanReadableNames.put("HTC6525LVW", "HTC One M8");
humanReadableNames.put("HTCEVODesign4G", "HTC Evo Design 4G");
humanReadableNames.put("HTCEVOV4G", "HTC Evo V 4G");
humanReadableNames.put("HTCONE", "HTC One");
humanReadableNames.put("HTC_Desire_500", "HTC Desire 500");
humanReadableNames.put("HTC_Desire_HD_A9191", "HTC Desire HD");
humanReadableNames.put("HTC_One_mini", "HTC One mini");
humanReadableNames.put("HTC_PH39100", "HTC Vivid 4G");
humanReadableNames.put("HTC_PN071", "HTC One");
humanReadableNames.put("HTC_Sensation_Z710e", "HTC Sensation");
humanReadableNames.put("HTC_Sensation_4G", "HTC Sensation");
humanReadableNames.put("HTC_VLE_U", "HTC One S");
humanReadableNames.put("HUAWEI_G510-0251", "Huawei Ascend G510");
humanReadableNames.put("HUAWEI_P6-U06", "Huawei Ascend P6");
humanReadableNames.put("HUAWEI_Y300-0100", "Huawei Ascend Y300");
humanReadableNames.put("ISW11SC", "Galaxy S2");
humanReadableNames.put("KFJWA", "Kindle Fire HD 8.9");
humanReadableNames.put("KFJWI", "Kindle Fire HD 8.9");
humanReadableNames.put("KFOT", "Kindle Fire");
humanReadableNames.put("KFTT", "Kindle Fire HD 7");
humanReadableNames.put("L-01F", "G2");
humanReadableNames.put("LG-C800", "LG myTouch Q");
humanReadableNames.put("LG-D415", "LG Optimus L90");
humanReadableNames.put("LG-D620", "LG G2 Mini");
humanReadableNames.put("LG-D686", "LG G Pro Lite Dual");
humanReadableNames.put("LG-D800", "LG G2");
humanReadableNames.put("LG-D801", "LG G2");
humanReadableNames.put("LG-D802", "LG G2");
humanReadableNames.put("LG-D803", "G2");
humanReadableNames.put("LG-D805", "G2");
humanReadableNames.put("LG-D850", "LG G3");
humanReadableNames.put("LG-D851", "LG G3");
humanReadableNames.put("LG-D852", "G3");
humanReadableNames.put("LG-D855", "LG G3");
humanReadableNames.put("LG-E411g", "LG Optimus L1 II");
humanReadableNames.put("LG-E425g", "LG Optimus L3 II");
humanReadableNames.put("LG-E440g", "LG Optimus L4 II");
humanReadableNames.put("LG-E460", "LG Optimus L5 II");
humanReadableNames.put("LG-E610", "LG Optimus L5");
humanReadableNames.put("LG-E612g", "LG Optimus L5 Dual");
humanReadableNames.put("LG-E739", "LG MyTouch e739");
humanReadableNames.put("LG-E970", "LG Optimus G");
humanReadableNames.put("LG-E971", "Optimus G");
humanReadableNames.put("LG-E980", "LG Optimus G Pro");
humanReadableNames.put("LG-H815", "G4");
humanReadableNames.put("LG-LG730", "LG Venice");
humanReadableNames.put("LG-LS720", "LG Optimus F3");
humanReadableNames.put("LG-LS840", "LG Viper");
humanReadableNames.put("LG-LS970", "LG Optimus G");
humanReadableNames.put("LG-LS980", "LG G2");
humanReadableNames.put("LG-MS770", "LG Motion 4G");
humanReadableNames.put("LG-MS910", "LG Esteem");
humanReadableNames.put("LG-P509", "LG Optimus T");
humanReadableNames.put("LG-P760", "LG Optimus L9");
humanReadableNames.put("LG-P768", "LG Optimus L9");
humanReadableNames.put("LG-P769", "LG Optimus L9");
humanReadableNames.put("LG-P999", "LG G2X P999");
humanReadableNames.put("LG-VM696", "LG Optimus Elite");
humanReadableNames.put("LGL34C", "LG Optimus Fuel");
humanReadableNames.put("LGL55C", "LG LGL55C");
humanReadableNames.put("LGLS740", "LG Volt");
humanReadableNames.put("LGLS990", "LG G3");
humanReadableNames.put("LGMS323", "LG Optimus L70");
humanReadableNames.put("LGMS500", "LG Optimus F6");
humanReadableNames.put("LGMS769", "LG Optimus L9");
humanReadableNames.put("LS670", "LG Optimus S");
humanReadableNames.put("LT22i", "Sony Xperia P");
humanReadableNames.put("LT25i", "Sony Xperia V");
humanReadableNames.put("LT26i", "Sony Xperia S");
humanReadableNames.put("LT30p", "Sony Xperia T");
humanReadableNames.put("MB855", "Motorola Photon 4G");
humanReadableNames.put("MB860", "Motorola Atrix 4G");
humanReadableNames.put("MB865", "Motorola Atrix 2");
humanReadableNames.put("MB886", "Motorola Atrix HD");
humanReadableNames.put("ME173X", "Asus MeMO Pad HD 7");
humanReadableNames.put("MI_3W", "Xiaomi Mi 3");
humanReadableNames.put("MOTWX435KT", "Motorola Triumph");
humanReadableNames.put("N3", "Star NO.1 N3");
humanReadableNames.put("N860", "ZTE Warp N860");
humanReadableNames.put("NEXUS_4", "Nexus 4");
humanReadableNames.put("NEXUS_5", "Nexus 5");
humanReadableNames.put("NEXUS_5X", "Nexus 5X");
humanReadableNames.put("LG-D820", "Nexus 5");
humanReadableNames.put("LG-D821", "Nexus 5");
humanReadableNames.put("NEXUS_6", "Nexus 6");
humanReadableNames.put("NEXUS_6P", "Nexus 6P");
humanReadableNames.put("Nexus_10", "Google Nexus 10");
humanReadableNames.put("Nexus_4", "Google Nexus 4");
humanReadableNames.put("Nexus_7", "Asus Nexus 7");
humanReadableNames.put("Nexus_S", "Samsung Nexus S");
humanReadableNames.put("Nexus_S_4G", "Samsung Nexus S 4G");
humanReadableNames.put("Orange_Daytona", "Huawei Ascend G510");
humanReadableNames.put("PC36100", "HTC Evo 4G");
humanReadableNames.put("PG06100", "HTC EVO Shift 4G");
humanReadableNames.put("PG86100", "HTC Evo 3D");
humanReadableNames.put("PH44100", "HTC Evo Design 4G");
humanReadableNames.put("PantechP9070", "Pantech Burst");
humanReadableNames.put("QMV7A", "Verizon Ellipsis 7");
humanReadableNames.put("SAMSUNG-SGH-I317", "Samsung Galaxy Note II");
humanReadableNames.put("SAMSUNG-SGH-I337", "Samsung Galaxy S4");
humanReadableNames.put("SAMSUNG-SGH-I527", "Samsung Galaxy Mega");
humanReadableNames.put("SAMSUNG-SGH-I537", "Samsung Galaxy S4 Active");
humanReadableNames.put("SAMSUNG-SGH-I717", "Samsung Galaxy Note");
humanReadableNames.put("SAMSUNG-SGH-I727", "Samsung Skyrocket");
humanReadableNames.put("SAMSUNG-SGH-I747", "Samsung Galaxy S III");
humanReadableNames.put("SAMSUNG-SGH-I777", "Samsung Galaxy S II");
humanReadableNames.put("SAMSUNG-SGH-I897", "Samsung Captivate");
humanReadableNames.put("SAMSUNG-SGH-I927", "Samsung Captivate Glide");
humanReadableNames.put("SAMSUNG-SGH-I997", "Samsung Infuse 4G");
humanReadableNames.put("SAMSUNG-SM-G730A", "Samsung Galaxy S3 Mini");
humanReadableNames.put("SAMSUNG-SM-G870A", "Samsung Galaxy S5 Active");
humanReadableNames.put("SAMSUNG-SM-G900A", "Samsung Galaxy S5");
humanReadableNames.put("SAMSUNG-SM-G920A", "Samsung Galaxy S6");
humanReadableNames.put("SAMSUNG-SM-N900A", "Samsung Galaxy Note 3");
humanReadableNames.put("SAMSUNG-SM-N910A", "Samsung Galaxy Note 4");
humanReadableNames.put("SC-02C", "Galaxy S2");
humanReadableNames.put("SC-03E", "Galaxy S3");
humanReadableNames.put("SC-04E", "Galaxy S4");
humanReadableNames.put("SC-06D", "Galaxy S3");
humanReadableNames.put("SCH-I200", "Samsung Galaxy Stellar");
humanReadableNames.put("SCH-I337", "Galaxy S4");
humanReadableNames.put("SCH-I405", "Samsung Stratosphere");
humanReadableNames.put("SCH-I415", "Samsung Galaxy Stratosphere II");
humanReadableNames.put("SCH-I435", "Samsung Galaxy S4 Mini");
humanReadableNames.put("SCH-I500", "Samsung Fascinate");
humanReadableNames.put("SCH-I510", "Samsung Droid Charge");
humanReadableNames.put("SCH-I535", "Samsung Galaxy S III");
humanReadableNames.put("SCH-I545", "Samsung Galaxy S4");
humanReadableNames.put("SCH-I605", "Samsung Galaxy Note II");
humanReadableNames.put("SCH-I800", "Samsung Galaxy Tab 7.0");
humanReadableNames.put("SCH-I939", "Galaxy S3");
humanReadableNames.put("SCH-I959", "Galaxy S4");
humanReadableNames.put("SCH-J021", "Galaxy S3");
humanReadableNames.put("SCH-R530C", "Samsung Galaxy S3");
humanReadableNames.put("SCH-R530M", "Samsung Galaxy S III");
humanReadableNames.put("SCH-R530U", "Samsung Galaxy S III");
humanReadableNames.put("SCH-R720", "Samsung Admire");
humanReadableNames.put("SCH-R760", "Galaxy S2");
humanReadableNames.put("SCH-R970", "Samsung Galaxy S4");
humanReadableNames.put("SCH-S720C", "Samsung Proclaim");
humanReadableNames.put("SCH-S738C", "Samsung Galaxy Centura");
humanReadableNames.put("SCH-S968C", "Samsung Galaxy S III");
humanReadableNames.put("SCL21", "Galaxy S3");
humanReadableNames.put("SGH-I257M", "Samsung Galaxy S4 Mini");
humanReadableNames.put("SGH-I317M", "Samsung Galaxy Note II");
humanReadableNames.put("SGH-I337M", "Samsung Galaxy S4");
humanReadableNames.put("SGH-I727R", "Samsung Galaxy S II");
humanReadableNames.put("SGH-I747M", "Samsung Galaxy S III");
humanReadableNames.put("SGH-I757M", "Galaxy S2");
humanReadableNames.put("SGH-I777M", "Galaxy S2");
humanReadableNames.put("SGH-M919", "Samsung Galaxy S4");
humanReadableNames.put("SGH-M919N", "Samsung Galaxy S4");
humanReadableNames.put("SGH-N035", "Galaxy S3");
humanReadableNames.put("SGH-N045", "Galaxy S4");
humanReadableNames.put("SGH-N064", "Galaxy S3");
humanReadableNames.put("SGH-T399", "Samsung Galaxy Light");
humanReadableNames.put("SGH-T399N", "Samsung Galaxy Light");
humanReadableNames.put("SGH-T599N", "Samsung Galaxy Exhibit");
humanReadableNames.put("SGH-T679", "Samsung Exhibit II");
humanReadableNames.put("SGH-T769", "Samsung Galaxy S Blaze");
humanReadableNames.put("SGH-T889", "Samsung Galaxy Note II");
humanReadableNames.put("SGH-T959", "Samsung Galaxy S Vibrant");
humanReadableNames.put("SGH-T959V", "Samsung Galaxy S 4G");
humanReadableNames.put("SGH-T989", "Samsung Galaxy S II");
humanReadableNames.put("SGH-T989D", "Samsung Galaxy S II");
humanReadableNames.put("SGH-T999", "Samsung Galaxy S III");
humanReadableNames.put("SGH-T999L", "Samsung Galaxy S III");
humanReadableNames.put("SGH-T999V", "Samsung Galaxy S III");
humanReadableNames.put("SGP312", "Sony Xperia Tablet Z");
humanReadableNames.put("SHV-E210K", "Samsung Galaxy S3");
humanReadableNames.put("SHV-E210S", "Samsung Galaxy S III");
humanReadableNames.put("SHV-E250K", "Samsung Galaxy Note 2");
humanReadableNames.put("SHV-E250S", "Samsung Galaxy Note II");
humanReadableNames.put("SHV-E300", "Galaxy S4");
humanReadableNames.put("SHW-M250", "Galaxy S2");
humanReadableNames.put("SM-G3815", "Samsung Galaxy Express II");
humanReadableNames.put("SM-G386T", "Samsung Galaxy Avant");
humanReadableNames.put("SM-G386T1", "Samsung Galaxy Avant");
humanReadableNames.put("SM-G388F", "Samsung Galaxy Xcover 3");
humanReadableNames.put("SM-G7102", "Samsung Galaxy Grand II");
humanReadableNames.put("SM-G800F", "Samsung Galaxy S5 Mini");
humanReadableNames.put("SM-G860P", "Samsung Galaxy S5 Sport");
humanReadableNames.put("SM-G900F", "Samsung Galaxy S5");
humanReadableNames.put("SM-G900H", "Samsung Galaxy S5");
humanReadableNames.put("SM-G900I", "Samsung Galaxy S5");
humanReadableNames.put("SM-G900P", "Samsung Galaxy S5");
humanReadableNames.put("SM-G900R4", "Galaxy S5");
humanReadableNames.put("SM-G900RZWAUSC", "Galaxy S5");
humanReadableNames.put("SM-G900T", "Samsung Galaxy S5");
humanReadableNames.put("SM-G900V", "Samsung Galaxy S5");
humanReadableNames.put("SM-G900W8", "Samsung Galaxy S5");
humanReadableNames.put("SM-G9200", "Galaxy S6");
humanReadableNames.put("SM-G920F", "Galaxy S6");
humanReadableNames.put("SM-G920I", "Galaxy S6");
humanReadableNames.put("SM-G920P", "Samsung Galaxy S6");
humanReadableNames.put("SM-G920R", "Galaxy S6");
humanReadableNames.put("SM-G920T", "Samsung Galaxy S6");
humanReadableNames.put("SM-G920V", "Samsung Galaxy S6");
humanReadableNames.put("SM-G920W8", "Galaxy S6");
humanReadableNames.put("SM-G9250", "Galaxy S6 Edge");
humanReadableNames.put("SM-G925A", "Galaxy S6 Edge");
humanReadableNames.put("SM-G925F", "Galaxy S6 Edge");
humanReadableNames.put("SM-G925P", "Galaxy S6 Edge");
humanReadableNames.put("SM-G925R", "Galaxy S6 Edge");
humanReadableNames.put("SM-G925T", "Galaxy S6 Edge");
humanReadableNames.put("SM-G925V", "Galaxy S6 Edge");
humanReadableNames.put("SM-G925W8", "Galaxy S6 Edge");
humanReadableNames.put("SM-G9500", "Samsung Galaxy S8");
humanReadableNames.put("SM-G950F", "Samsung Galaxy S8");
humanReadableNames.put("SM-G950T", "Samsung Galaxy S8");
humanReadableNames.put("SM-G950S", "Samsung Galaxy S8");
humanReadableNames.put("SM-G950K", "Samsung Galaxy S8");
humanReadableNames.put("SM-G950L", "Samsung Galaxy S8");
humanReadableNames.put("SM-G950P", "Samsung Galaxy S8");
humanReadableNames.put("SM-G950A", "Samsung Galaxy S8");
humanReadableNames.put("SM-G9509", "Samsung Galaxy S8");
humanReadableNames.put("SM-G9508", "Samsung Galaxy S8");
humanReadableNames.put("SM-G950R4", "Samsung Galaxy S8");
humanReadableNames.put("SM-G950V", "Samsung Galaxy S8");
humanReadableNames.put("SM-G950FD", "Samsung Galaxy S8");
humanReadableNames.put("SM-G950W8", "Samsung Galaxy S8");
humanReadableNames.put("SM-G9550", "Samsung Galaxy S8 Plus");
humanReadableNames.put("SM-G955F", "Samsung Galaxy S8 Plus");
humanReadableNames.put("SM-G955T", "Samsung Galaxy S8 Plus");
humanReadableNames.put("SM-G955S", "Samsung Galaxy S8 Plus");
humanReadableNames.put("SM-G955K", "Samsung Galaxy S8 Plus");
humanReadableNames.put("SM-G955L", "Samsung Galaxy S8 Plus");
humanReadableNames.put("SM-G955P", "Samsung Galaxy S8 Plus");
humanReadableNames.put("SM-G955A", "Samsung Galaxy S8 Plus");
humanReadableNames.put("SM-G9559", "Samsung Galaxy S8 Plus");
humanReadableNames.put("SM-G9558", "Samsung Galaxy S8 Plus");
humanReadableNames.put("SM-G955R4", "Samsung Galaxy S8 Plus");
humanReadableNames.put("SM-G955V", "Samsung Galaxy S8 Plus");
humanReadableNames.put("SM-G955FD", "Samsung Galaxy S8 Plus");
humanReadableNames.put("SM-G955W8", "Samsung Galaxy S8 Plus");
humanReadableNames.put("SM-N7505", "Samsung Galaxy Note 3 Neo");
humanReadableNames.put("SM-N900", "Samsung Galaxy Note 3");
humanReadableNames.put("SM-N9005", "Samsung Galaxy Note 3");
humanReadableNames.put("SM-N9006", "Samsung Galaxy Note 3");
humanReadableNames.put("SM-N900P", "Samsung Galaxy Note 3");
humanReadableNames.put("SM-N900T", "Samsung Galaxy Note 3");
humanReadableNames.put("SM-N900V", "Samsung Galaxy Note 3");
humanReadableNames.put("SM-N900W8", "Samsung Galaxy Note 3");
humanReadableNames.put("SM-N910C", "Samsung Galaxy Note 4");
humanReadableNames.put("SM-N910F", "Samsung Galaxy Note 4");
humanReadableNames.put("SM-N910G", "Samsung Galaxy Note 4");
humanReadableNames.put("SM-N910P", "Samsung Galaxy Note 4");
humanReadableNames.put("SM-N910T", "Samsung Galaxy Note 4");
humanReadableNames.put("SM-N910V", "Samsung Galaxy Note 4");
humanReadableNames.put("SM-N910W8", "Samsung Galaxy Note 4");
humanReadableNames.put("SM-P600", "Samsung Galaxy Note 10.1");
humanReadableNames.put("SM-T210R", "Samsung Galaxy Tab 3 7.0");
humanReadableNames.put("SM-T217S", "Samsung Galaxy Tab 3 7.0");
humanReadableNames.put("SM-T230NU", "Samsung Galaxy Tab 4");
humanReadableNames.put("SM-T310", "Samsung Galaxy Tab 3 8.0");
humanReadableNames.put("SM-T530NU", "Samsung Galaxy Tab 4 10.1");
humanReadableNames.put("SM-T800", "Samsung Galaxy Tab S 10.5");
humanReadableNames.put("SPH-D600", "Samsung Conquer 4G");
humanReadableNames.put("SPH-D700", "Samsung Epic 4G");
humanReadableNames.put("SPH-D710", "Samsung Epic");
humanReadableNames.put("SPH-D710BST", "Samsung Galaxy S II");
humanReadableNames.put("SPH-D710VMUB", "Samsung Galaxy S II");
humanReadableNames.put("SPH-L300", "Samsung Galaxy Victory");
humanReadableNames.put("SPH-L520", "Samsung Galaxy S4 Mini");
humanReadableNames.put("SPH-L710", "Samsung Galaxy S III");
humanReadableNames.put("SPH-L710T", "Samsung Galaxy S III");
humanReadableNames.put("SPH-L720", "Samsung Galaxy S4");
humanReadableNames.put("SPH-L720T", "Samsung Galaxy S4");
humanReadableNames.put("SPH-L900", "Samsung Galaxy Note II");
humanReadableNames.put("SPH-M820-BST", "Samsung Galaxy Prevail");
humanReadableNames.put("SPH-M830", "Samsung Galaxy Rush");
humanReadableNames.put("SPH-M840", "Samsung Galaxy Prevail 2");
humanReadableNames.put("SPH-M930BST", "Samsung Transform Ultra");
humanReadableNames.put("ST21i", "Sony Xperia Tipo");
humanReadableNames.put("ST25i", "Sony Xperia U");
humanReadableNames.put("ST26i", "Sony Xperia J");
humanReadableNames.put("Transformer_Prime_TF201", "Asus Transformer Prime");
humanReadableNames.put("Transformer_TF101", "Asus Transformer");
humanReadableNames.put("VM670", "LG Optimus V");
humanReadableNames.put("VS840_4G", "LG Lucid 4G");
humanReadableNames.put("VS870_4G", "LG Lucid 2");
humanReadableNames.put("VS910_4G", "LG Revolution 4G");
humanReadableNames.put("VS920_4G", "LG Spectrum 4G");
humanReadableNames.put("VS930_4G", "LG Spectrum 2");
humanReadableNames.put("VS980_4G", "LG G2");
humanReadableNames.put("VS985_4G", "LG G3 4G");
humanReadableNames.put("XT1022", "Motorola Moto E");
humanReadableNames.put("XT1028", "Motorola Moto G");
humanReadableNames.put("XT1030", "Motorola Droid Mini");
humanReadableNames.put("XT1031", "Motorola Moto G");
humanReadableNames.put("XT1032", "Motorola Moto G");
humanReadableNames.put("XT1033", "Motorola Moto G");
humanReadableNames.put("XT1034", "Motorola Moto G");
humanReadableNames.put("XT1039", "Motorola Moto G");
humanReadableNames.put("XT1045", "Motorola Moto G");
humanReadableNames.put("XT1049", "Motorola Moto X");
humanReadableNames.put("XT1053", "Motorola Moto X");
humanReadableNames.put("XT1056", "Motorola Moto X");
humanReadableNames.put("XT1058", "Motorola Moto X");
humanReadableNames.put("XT1060", "Motorola Moto X");
humanReadableNames.put("XT1068", "Motorola Moto G");
humanReadableNames.put("XT1080", "Motorola Droid Ultra");
humanReadableNames.put("XT1095", "Motorola Moto X");
humanReadableNames.put("XT1096", "Motorola Moto X");
humanReadableNames.put("XT1097", "Motorola Moto X");
humanReadableNames.put("XT1254", "Motorola Droid Turbo");
humanReadableNames.put("XT897", "Motorola Photo Q");
humanReadableNames.put("XT907", "Motorola Droid Razr M");
humanReadableNames.put("Xoom", "Motorola Xoom");
humanReadableNames.put("Z970", "ZTE ZMax");
humanReadableNames.put("bq_Aquaris_5", "bq Aquaris 5");
humanReadableNames.put("bq_Aquaris_5_HD", "bq Aquaris 5 HD");
humanReadableNames.put("google_sdk", "Android Emulator");
humanReadableNames.put("myTouch_4G_Slide", "HTC myTouch 4G Slide");
}
private static String getAndroidDeviceName() {
String deviceName = null;
try {
String internalName = Build.MODEL.replace(' ', '_');
String dictName = humanReadableNames.get(internalName);
if (dictName != null) {
deviceName = dictName;
} else {
Log.w("getAndroidDeviceName", "Not found human readable name for device '" + internalName + "'");
if (Build.BRAND.equalsIgnoreCase("samsung")) {
deviceName = "Samsung " + Build.MODEL;
} else {
deviceName = Build.BRAND;
}
}
} catch (Exception e) {
//Some phones might not define BRAND or MODEL, ignore exceptions
Log.e("Exception", e.getMessage(), e);
}
if (deviceName == null || deviceName.isEmpty()) {
return "Android"; //Could not find a name
} else {
return deviceName;
}
}
private static boolean fetchingName = false;
private static boolean isTablet() {
Configuration config = Resources.getSystem().getConfiguration();
@@ -529,16 +62,34 @@ public class DeviceHelper {
//It returns getAndroidDeviceName() if no user-defined name has been set with setDeviceName().
public static String getDeviceName(Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
// Could use prefrences.contains but would need to check for empty String anyway.
// Could use preferences.contains but would need to check for empty String anyway.
String deviceName = preferences.getString(KEY_DEVICE_NAME_PREFERENCE, "");
if (deviceName.isEmpty()) {
deviceName = DeviceHelper.getAndroidDeviceName();
Log.i("MainSettingsActivity", "New device name: " + deviceName);
preferences.edit().putString(KEY_DEVICE_NAME_PREFERENCE, deviceName).apply();
if (!fetchingName) {
fetchingName = true;
DeviceHelper.backgroundFetchDeviceName(context); //Starts a background thread that will eventually update the shared pref
}
return DeviceName.getDeviceName(); //Temp name while we fetch it from the internet
}
return deviceName;
}
private static void backgroundFetchDeviceName(final Context context) {
DeviceName.with(context).request((info, error) -> {
fetchingName = false;
if (error != null) {
Log.e("DeviceHelper", "Error fetching device name");
error.printStackTrace();
}
if (info != null) {
String deviceName = info.getName();
Log.i("DeviceHelper", "Got device name: " + deviceName);
// Update the shared preference. Places that display the name should be listening to this change and update it
setDeviceName(context, deviceName);
}
});
}
public static void setDeviceName(Context context, String name) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
preferences.edit().putString(KEY_DEVICE_NAME_PREFERENCE, name).apply();

View File

@@ -1,56 +0,0 @@
package org.kde.kdeconnect.Helpers;
import android.content.Context;
public class NetworkHelper {
public static boolean isOnMobileNetwork(Context context) {
return false;
/*
if (context == null) {
return false;
}
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) {
return false; //No good way to know it
}
try {
boolean mobile = false;
final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
Network[] networks = connMgr.getAllNetworks();
for (Network network : networks) {
NetworkInfo info = connMgr.getNetworkInfo(network);
if (info == null) {
continue;
}
if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
mobile = info.isConnected();
continue;
}
//Log.e(info.getTypeName(),""+info.isAvailable());
if (info.isAvailable())
return false; //We are connected to at least one non-mobile network
}
if (mobile) { //We suspect we are on a mobile net
try (LineNumberReader is = new LineNumberReader(new FileReader("/proc/net/arp"))) {
//Check the number of network neighbours, on data it should be 0
is.skip(Long.MAX_VALUE);
//Log.e("NetworkHelper", "procnetarp has " + is.getLineNumber() + " lines");
if (is.getLineNumber() > 1) { //The first line are the headers
return false; //I have neighbours, so this doesn't look like a mobile network
}
} catch (Exception e) {
Log.e("NetworkHelper", "Exception reading procnetarp", e);
}
}
return mobile;
} catch (Exception e) {
Log.e("isOnMobileNetwork", "Something went wrong, but this is non-critical.", e);
}
return false;
*/
}
}

View File

@@ -18,6 +18,7 @@ public class NotificationHelper {
public final static String MEDIA_CONTROL = "media_control";
public final static String FILETRANSFER = "filetransfer";
public final static String RECEIVENOTIFICATION = "receive";
public final static String HIGHPRIORITY = "highpriority";
}
public static void notifyCompat(NotificationManager notificationManager, int notificationId, Notification notification) {
@@ -80,6 +81,8 @@ public class NotificationHelper {
NotificationManager.IMPORTANCE_DEFAULT)
);
NotificationChannel highPriority = new NotificationChannel(Channels.HIGHPRIORITY, context.getString(R.string.notification_channel_high_priority), NotificationManager.IMPORTANCE_HIGH);
manager.createNotificationChannel(highPriority);
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2018 Simon Redman <simon@ergotech.com>
* Copyright 2019 Simon Redman <simon@ergotech.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -30,8 +30,10 @@ import android.net.Uri;
import android.os.Build;
import android.os.Looper;
import android.provider.Telephony;
import android.telephony.PhoneNumberUtils;
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@@ -41,6 +43,7 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -104,6 +107,16 @@ public class SMSHelper {
* Get the base address for all message conversations
*/
private static Uri getConversationUri() {
// Special case for Samsung
// For some reason, Samsung devices do not support the regular SmsMms column.
// However, according to https://stackoverflow.com/a/13640868/3723163, we can work around it this way.
// By my understanding, "simple=true" means we can't support multi-target messages.
// Go complain to Samsung about their annoying OS changes!
if ("Samsung".equalsIgnoreCase(Build.MANUFACTURER)) {
Log.i("SMSHelper", "This appears to be a Samsung device. This may cause some features to not work properly.");
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
return Telephony.MmsSms.CONTENT_CONVERSATIONS_URI;
} else {
@@ -173,6 +186,41 @@ public class SMSHelper {
}
}
/**
* Checks if device supports `Telephony.Sms.SUBSCRIPTION_ID` column in database with URI `uri`
*
* @param uri Uri indicating the messages database to check
* @param context android.content.Context running the request.
*/
private static boolean getSubscriptionIdSupport(@NonNull Uri uri, @NonNull Context context) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) {
return false;
}
// Some (Xiaomi) devices running >= Android Lollipop (SDK 22+) don't support
// `Telephony.Sms.SUBSCRIPTION_ID`, so additional check is needed.
// It may be possible to use "sim_id" instead of "sub_id" on these devices
// https://stackoverflow.com/a/38152331/6509200
try (Cursor availableColumnsCursor = context.getContentResolver().query(
uri,
new String[] {Telephony.Sms.SUBSCRIPTION_ID},
null,
null,
null)
) {
if (availableColumnsCursor != null) {
return true; // if we got the cursor, the query shouldn't fail
}
return false;
} catch (SQLiteException e) {
// With uri content://mms-sms/conversations this query throws an exception if sub_id is not supported
String errMessage = e.getMessage();
if (errMessage != null && errMessage.contains(Telephony.Sms.SUBSCRIPTION_ID)) {
return false;
}
return true;
}
}
/**
* Gets messages which match the selection
*
@@ -194,11 +242,18 @@ public class SMSHelper {
) {
List<Message> toReturn = new ArrayList<>();
// Get all the active phone numbers so we can filter the user out of the list of targets
// of any MMSes
List<String> userPhoneNumbers = TelephonyHelper.getAllPhoneNumbers(context);
Set<String> allColumns = new HashSet<>();
allColumns.addAll(Arrays.asList(Message.smsColumns));
allColumns.addAll(Arrays.asList(Message.mmsColumns));
if (getSubscriptionIdSupport(uri, context)) {
allColumns.addAll(Arrays.asList(Message.multiSIMColumns));
}
if (uri != getConversationUri()) {
if (!uri.equals(getConversationUri())) {
// See https://issuetracker.google.com/issues/134592631
allColumns.add(getTransportTypeDiscriminatorColumn());
}
@@ -249,19 +304,32 @@ public class SMSHelper {
messageInfo.put(colName, body);
}
Message message;
if (transportType == TransportType.SMS) {
parseSMS(context, messageInfo);
message = parseSMS(context, messageInfo);
} else if (transportType == TransportType.MMS) {
parseMMS(context, messageInfo);
message = parseMMS(context, messageInfo, userPhoneNumbers);
} else {
// As we can see, all possible transportTypes are covered, but the compiler
// requires this line anyway
throw new UnsupportedOperationException("Unknown TransportType encountered");
}
Message message = new Message(messageInfo);
toReturn.add(message);
} while ((numberToGet == null || toReturn.size() != numberToGet) && myCursor.moveToNext());
}
} catch (SQLiteException e) {
throw new MessageAccessException(fetchColumns, uri, e);
String[] unfilteredColumns = {};
try (Cursor unfilteredColumnsCursor = context.getContentResolver().query(uri, null, null, null, null)) {
if (unfilteredColumnsCursor != null) {
unfilteredColumns = unfilteredColumnsCursor.getColumnNames();
}
}
if (unfilteredColumns.length == 0) {
throw new MessageAccessException(uri, e);
} else {
throw new MessageAccessException(unfilteredColumns, uri, e);
}
}
return toReturn;
}
@@ -314,37 +382,65 @@ public class SMSHelper {
return toReturn;
}
private static void addEventFlag(
@NonNull Map<String, String> messageInfo,
@NonNull int eventFlag
private static int addEventFlag(
int oldEvent,
int eventFlag
) {
int oldEvent = 0; //Default value
String oldEventString = messageInfo.get(Message.EVENT);
if (oldEventString != null) {
oldEvent = Integer.parseInt(oldEventString);
}
messageInfo.put(Message.EVENT, Integer.toString(oldEvent | eventFlag));
return oldEvent | eventFlag;
}
/**
* Do any parsing of an SMS message which still needs to be done
* Parse all parts of an SMS into a Message
*/
private static void parseSMS(
private static @NonNull Message parseSMS(
@NonNull Context context,
@NonNull Map<String, String> messageInfo
) {
addEventFlag(messageInfo, Message.EVENT_TEXT_MESSAGE);
int event = Message.EVENT_UNKNOWN;
event = addEventFlag(event, Message.EVENT_TEXT_MESSAGE);
@NonNull List<Address> address = Collections.singletonList(new Address(messageInfo.get(Telephony.Sms.ADDRESS)));
@NonNull String body = messageInfo.get(Message.BODY);
long date = Long.parseLong(messageInfo.get(Message.DATE));
int type = Integer.parseInt(messageInfo.get(Message.TYPE));
int read = Integer.parseInt(messageInfo.get(Message.READ));
@NonNull ThreadID threadID = new ThreadID(Long.parseLong(messageInfo.get(Message.THREAD_ID)));
long uID = Long.parseLong(messageInfo.get(Message.U_ID));
int subscriptionID = messageInfo.get(Message.SUBSCRIPTION_ID) != null ?
Integer.parseInt(messageInfo.get(Message.SUBSCRIPTION_ID)) : 0;
return new Message(
address,
body,
date,
type,
read,
threadID,
uID,
event,
subscriptionID
);
}
/**
* Parse all parts of the MMS message into the messageInfo format
* Parse all parts of the MMS message into a message
* Original implementation from https://stackoverflow.com/a/6446831/3723163
*/
private static void parseMMS(
private static @NonNull Message parseMMS(
@NonNull Context context,
@NonNull Map<String, String> messageInfo
@NonNull Map<String, String> messageInfo,
@NonNull List<String> userPhoneNumbers
) {
addEventFlag(messageInfo, Message.EVENT_UNKNOWN);
int event = Message.EVENT_UNKNOWN;
@NonNull String body = "";
long date;
int type;
int read = Integer.parseInt(messageInfo.get(Message.READ));
@NonNull ThreadID threadID = new ThreadID(Long.parseLong(messageInfo.get(Message.THREAD_ID)));
long uID = Long.parseLong(messageInfo.get(Message.U_ID));
int subscriptionID = messageInfo.get(Message.SUBSCRIPTION_ID) != null ?
Integer.parseInt(messageInfo.get(Message.SUBSCRIPTION_ID)) : 0;
String[] columns = {
Telephony.Mms.Part._ID, // The content ID of this part
@@ -378,15 +474,13 @@ public class SMSHelper {
String contentType = cursor.getString(contentTypeColumn);
String data = cursor.getString(dataColumn);
if ("text/plain".equals(contentType)) {
String body;
if (data != null) {
// data != null means the data is on disk. Go get it.
body = getMmsText(context, partID);
} else {
body = cursor.getString(textColumn);
}
messageInfo.put(Message.BODY, body);
addEventFlag(messageInfo, Message.EVENT_TEXT_MESSAGE);
event = addEventFlag(event, Message.EVENT_TEXT_MESSAGE);
} //TODO: Parse more content types (photos and other attachments) here
} while (cursor.moveToNext());
@@ -396,57 +490,59 @@ public class SMSHelper {
// Determine whether the message was in- our out- bound
long messageBox = Long.parseLong(messageInfo.get(Telephony.Mms.MESSAGE_BOX));
if (messageBox == Telephony.Mms.MESSAGE_BOX_INBOX) {
messageInfo.put(Message.TYPE, Integer.toString(Telephony.Sms.MESSAGE_TYPE_INBOX));
type = Telephony.Sms.MESSAGE_TYPE_INBOX;
} else if (messageBox == Telephony.Mms.MESSAGE_BOX_SENT) {
messageInfo.put(Message.TYPE, Integer.toString(Telephony.Sms.MESSAGE_TYPE_SENT));
type = Telephony.Sms.MESSAGE_TYPE_SENT;
} else {
// As an undocumented feature, it looks like the values of Mms.MESSAGE_BOX_*
// are the same as Sms.MESSAGE_TYPE_* of the same type. So by default let's just use
// the value we've got.
// This includes things like drafts, which are a far-distant plan to support
messageInfo.put(Message.TYPE, messageInfo.get(Telephony.Mms.MESSAGE_BOX));
type = Integer.parseInt(messageInfo.get(Telephony.Mms.MESSAGE_BOX));
}
// Get address(es) of the message
List<String> addresses = getMmsAddresses(context, Long.parseLong(mmsID));
List<Address> addresses = getMmsAddresses(context, Long.parseLong(mmsID), userPhoneNumbers);
// It looks like addresses[0] is always the sender of the message and
// following addresses are recipient(s)
// This usually means the addresses list is at least 2 long, but there are cases (special
// telco service messages) where it is not (only 1 long in that case, just the "sender")
// The address field which will get written to the message.
// Remember that this is always the address of the other side of the conversation
String address = "";
if (addresses.size() > 2) {
// TODO: Collect addresses for multi-target MMS
if (addresses.size() >= 2) {
// TODO: Handle addresses for multi-target MMS
// Probably we will need to figure out the user's address at this point and strip it out of the list
addEventFlag(messageInfo, Message.EVENT_MULTI_TARGET);
} else {
if (messageBox == Telephony.Mms.MESSAGE_BOX_INBOX) {
address = addresses.get(0);
} else if (messageBox == Telephony.Mms.MESSAGE_BOX_SENT) {
address = addresses.get(1);
} else {
Log.w("SMSHelper", "Unknown message type " + messageBox + " while parsing addresses.");
// Not much smart to do here. Just leave as default.
}
event = addEventFlag(event, Message.EVENT_MULTI_TARGET);
}
messageInfo.put(Message.ADDRESS, address);
// Canonicalize the date field
// SMS uses epoch milliseconds, MMS uses epoch seconds. Standardize on milliseconds.
long rawDate = Long.parseLong(messageInfo.get(Message.DATE));
messageInfo.put(Message.DATE, Long.toString(rawDate * 1000));
date = rawDate * 1000;
return new Message(
addresses,
body,
date,
type,
read,
threadID,
uID,
event,
subscriptionID
);
}
/**
* Get the address(es) of an MMS message
* Original implementation from https://stackoverflow.com/a/6446831/3723163
*
* @param messageID ID of this message in the MMS database for looking up the remaining info
* @param userPhoneNumbers List of phone numbers which should be removed from the list of addresses
*/
private static @NonNull List<String> getMmsAddresses(
private static @NonNull List<Address> getMmsAddresses(
@NonNull Context context,
@NonNull Long messageID
@NonNull Long messageID,
@NonNull List<String> userPhoneNumbers
) {
Uri uri = ContentUris.appendId(getMMSUri().buildUpon(), messageID).appendPath("addr").build();
@@ -459,7 +555,7 @@ public class SMSHelper {
String selection = Telephony.Mms.Addr.MSG_ID + " = ?";
String[] selectionArgs = {messageID.toString()};
List<String> addresses = new ArrayList<>();
List<Address> addresses = new ArrayList<>();
try (Cursor addrCursor = context.getContentResolver().query(
uri,
@@ -473,11 +569,32 @@ public class SMSHelper {
do {
String address = addrCursor.getString(addressIndex);
addresses.add(address);
addresses.add(new Address(address));
} while (addrCursor.moveToNext());
}
}
return addresses;
// Prune the user's phone numbers from the list of addresses
List<Address> prunedAddresses = new ArrayList<>(addresses);
prunedAddresses.removeAll(userPhoneNumbers);
if (prunedAddresses.size() == 0) {
// If it turns out that we have pruned away everything, prune away nothing
// (The user is allowed to talk to themself)
// Remove duplicate entries, since the user knows if a conversation says "Me" on it,
// it is the conversation with themself. (We don't need to say "Me, Me")
// This leaves the multi-sim case alone, so the returned address list might say
// "Me1, Me2"
prunedAddresses = new ArrayList<>(addresses.size()); // The old one was empty too, but just to be clear...
for (Address address : addresses) {
if (!prunedAddresses.contains(address)) {
prunedAddresses.add(address);
}
}
}
return prunedAddresses;
}
/**
@@ -549,6 +666,46 @@ public class SMSHelper {
}
}
public static class Address {
final String address;
/**
* Address object field names
*/
public static final String ADDRESS = "address";
public Address(String address) {
this.address = address;
}
public JSONObject toJson() throws JSONException {
JSONObject json = new JSONObject();
json.put(Address.ADDRESS, this.address);
return json;
}
@Override
public String toString() {
return address;
}
@Override
public boolean equals(Object other){
if (other == null) {
return false;
}
if (other.getClass().isAssignableFrom(Address.class)) {
return PhoneNumberUtils.compare(this.address, ((Address)other).address);
}
if (other.getClass().isAssignableFrom(String.class)) {
return PhoneNumberUtils.compare(this.address, (String)other);
}
return false;
}
}
/**
* Indicate that some error has occurred while reading a message.
* More useful for logging than catching and handling
@@ -577,21 +734,21 @@ public class SMSHelper {
*/
public static class Message {
final String address;
final String body;
public final List<Address> addresses;
public final String body;
public final long date;
final int type;
final int read;
final ThreadID threadID; // ThreadID is *int* for SMS messages but *long* for MMS
final long uID;
final int event;
final int subscriptionID;
public final int type;
public final int read;
public final ThreadID threadID;
public final long uID;
public final int event;
public final int subscriptionID;
/**
* Named constants which are used to construct a Message
* See: https://developer.android.com/reference/android/provider/Telephony.TextBasedSmsColumns.html for full documentation
*/
static final String ADDRESS = Telephony.Sms.ADDRESS; // Contact information (phone number or otherwise) of the remote
static final String ADDRESSES = "addresses"; // Contact information (phone number or otherwise) of the remote
static final String BODY = Telephony.Sms.BODY; // Body of the message
static final String DATE = Telephony.Sms.DATE; // Date (Unix epoch millis) associated with the message
static final String TYPE = Telephony.Sms.TYPE; // Compare with Telephony.TextBasedSmsColumns.MESSAGE_TYPE_*
@@ -615,54 +772,77 @@ public class SMSHelper {
* Define the columns which are to be extracted from the Android SMS database
*/
static final String[] smsColumns = new String[]{
Message.ADDRESS,
Message.BODY,
Message.DATE,
Message.TYPE,
Message.READ,
Message.THREAD_ID,
Telephony.Sms.ADDRESS,
Telephony.Sms.BODY,
Telephony.Sms.DATE,
Telephony.Sms.TYPE,
Telephony.Sms.READ,
Telephony.Sms.THREAD_ID,
Message.U_ID,
Message.SUBSCRIPTION_ID,
};
static final String[] mmsColumns = new String[]{
Message.U_ID,
Message.THREAD_ID,
Message.DATE,
Message.READ,
Telephony.Mms.THREAD_ID,
Telephony.Mms.DATE,
Telephony.Mms.READ,
Telephony.Mms.TEXT_ONLY,
Telephony.Mms.MESSAGE_BOX, // Compare with Telephony.BaseMmsColumns.MESSAGE_BOX_*
};
Message(final HashMap<String, String> messageInfo) {
address = messageInfo.get(Message.ADDRESS);
body = messageInfo.get(Message.BODY);
date = Long.parseLong(messageInfo.get(Message.DATE));
if (messageInfo.get(Message.TYPE) == null)
/**
* These columns are for determining what SIM card the message belongs to, and therefore
* are only defined on Android versions with multi-sim capabilities
*/
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
static final String[] multiSIMColumns = new String[]{
Telephony.Sms.SUBSCRIPTION_ID,
};
Message(
@NonNull List<Address> addresses,
@NonNull String body,
long date,
@NonNull Integer type,
int read,
@NonNull ThreadID threadID,
long uID,
int event,
int subscriptionID
) {
this.addresses = addresses;
this.body = body;
this.date = date;
if (type == null)
{
// To be honest, I have no idea why this happens. The docs say the TYPE field is mandatory.
Log.w("SMSHelper", "Encountered undefined message type");
type = -1;
this.type = -1;
// Proceed anyway, maybe this is not an important problem.
} else {
type = Integer.parseInt(messageInfo.get(Message.TYPE));
this.type = type;
}
read = Integer.parseInt(messageInfo.get(Message.READ));
threadID = new ThreadID(Long.parseLong(messageInfo.get(Message.THREAD_ID)));
uID = Integer.parseInt(messageInfo.get(Message.U_ID));
subscriptionID = Integer.parseInt(messageInfo.get(Message.SUBSCRIPTION_ID));
event = Integer.parseInt(messageInfo.get(Message.EVENT));
this.read = read;
this.threadID = threadID;
this.uID = uID;
this.subscriptionID = subscriptionID;
this.event = event;
}
public JSONObject toJSONObject() throws JSONException {
JSONObject json = new JSONObject();
json.put(Message.ADDRESS, address);
JSONArray jsonAddresses = new JSONArray();
for (Address address : this.addresses) {
jsonAddresses.put(address.toJson());
}
json.put(Message.ADDRESSES, jsonAddresses);
json.put(Message.BODY, body);
json.put(Message.DATE, date);
json.put(Message.TYPE, type);
json.put(Message.READ, read);
json.put(Message.THREAD_ID, threadID);
json.put(Message.THREAD_ID, threadID.threadID);
json.put(Message.U_ID, uID);
json.put(Message.SUBSCRIPTION_ID, subscriptionID);
json.put(Message.EVENT, event);

View File

@@ -22,6 +22,8 @@ package org.kde.kdeconnect.Helpers.SecurityHelpers;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.preference.PreferenceManager;
import android.util.Base64;
@@ -57,6 +59,7 @@ import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Formatter;
import java.util.Locale;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
@@ -115,6 +118,10 @@ public class SslHelper {
if (needsToGenerateCertificate) {
Log.i("KDE/SslHelper", "Generating a certificate");
try {
//Fix for https://issuetracker.google.com/issues/37095309
Locale initialLocale = Locale.getDefault();
setLocale(Locale.ENGLISH, context);
X500NameBuilder nameBuilder = new X500NameBuilder(BCStyle.INSTANCE);
nameBuilder.addRDN(BCStyle.CN, deviceId);
nameBuilder.addRDN(BCStyle.OU, "KDE Connect");
@@ -138,12 +145,22 @@ public class SslHelper {
SharedPreferences.Editor edit = settings.edit();
edit.putString("certificate", Base64.encodeToString(certificate.getEncoded(), 0));
edit.apply();
setLocale(initialLocale, context);
} catch (Exception e) {
Log.e("KDE/initialiseCert", "Exception", e);
}
}
}
private static void setLocale(Locale locale, Context context) {
Locale.setDefault(locale);
Resources resources = context.getResources();
Configuration config = resources.getConfiguration();
config.locale = locale;
resources.updateConfiguration(config, resources.getDisplayMetrics());
}
public static boolean isCertificateStored(Context context, String deviceId) {
SharedPreferences devicePreferences = context.getSharedPreferences(deviceId, Context.MODE_PRIVATE);
String cert = devicePreferences.getString("certificate", "");

View File

@@ -0,0 +1,141 @@
/*
* Copyright 2019 Simon Redman <simon@ergotech.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kde.kdeconnect.Helpers;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Build;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class TelephonyHelper {
public static final String LOGGING_TAG = "TelephonyHelper";
/**
* Get all subscriptionIDs of the device
* As far as I can tell, this is essentially a way of identifying particular SIM cards
*/
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
public static List<Integer> getActiveSubscriptionIDs(
@NonNull Context context)
throws SecurityException {
SubscriptionManager subscriptionManager = (SubscriptionManager) context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
if (subscriptionManager == null) {
// I don't know why or when this happens...
Log.w(LOGGING_TAG, "Could not get SubscriptionManager");
return Collections.emptyList();
}
List<SubscriptionInfo> subscriptionInfos = subscriptionManager.getActiveSubscriptionInfoList();
List<Integer> subscriptionIDs = new ArrayList<>(subscriptionInfos.size());
for (SubscriptionInfo info : subscriptionInfos) {
subscriptionIDs.add(info.getSubscriptionId());
}
return subscriptionIDs;
}
/**
* Try to get the phone number currently active on the phone
*
* Make sure that you have the READ_PHONE_STATE permission!
*
* Note that entries of the returned list might return null if the phone number is not known by the device
*/
public static @NonNull List<String> getAllPhoneNumbers(
@NonNull Context context)
throws SecurityException {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) {
// Single-sim case
// From https://stackoverflow.com/a/25131061/3723163
// Android added support for multi-sim devices in Lollypop v5.1 (api 22)
// See: https://developer.android.com/about/versions/android-5.1.html#multisim
// There were vendor-specific implmentations before then, but those are very difficult to support
// S/O Reference: https://stackoverflow.com/a/28571835/3723163
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (telephonyManager == null) {
// I don't know why or when this happens...
Log.w(LOGGING_TAG, "Could not get TelephonyManager");
return Collections.emptyList();
}
String phoneNumber = getPhoneNumber(telephonyManager);
return Collections.singletonList(phoneNumber);
} else {
// Potentially multi-sim case
SubscriptionManager subscriptionManager = (SubscriptionManager)context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
if (subscriptionManager == null) {
// I don't know why or when this happens...
Log.w(LOGGING_TAG, "Could not get SubscriptionManager");
return Collections.emptyList();
}
List<SubscriptionInfo> subscriptionInfos = subscriptionManager.getActiveSubscriptionInfoList();
List<String> phoneNumbers = new ArrayList<>(subscriptionInfos.size());
for (SubscriptionInfo info : subscriptionInfos) {
phoneNumbers.add(info.getNumber());
}
return phoneNumbers;
}
}
/**
* Try to get the phone number to which the TelephonyManager is pinned
*/
public static @Nullable String getPhoneNumber(
@NonNull TelephonyManager telephonyManager)
throws SecurityException {
@SuppressLint("HardwareIds")
String maybeNumber = telephonyManager.getLine1Number();
if (maybeNumber == null) {
Log.d(LOGGING_TAG, "Got 'null' instead of a phone number");
return null;
}
// Sometimes we will get some garbage like "Unknown" or "?????" or a variety of other things
// Per https://stackoverflow.com/a/25131061/3723163, the only real solution to this is to
// query the user for the proper phone number
// As a quick possible check, I say if a "number" is not at least 25% digits, it is not actually
// a number
int digitCount = 0;
for (char digit : "0123456789".toCharArray()) {
// https://stackoverflow.com/a/8910767/3723163
// The number of occurrences of a particular character can be counted by looking at the
// total length of the string and subtracting the length of the string without the
// target digit
int count = maybeNumber.length() - maybeNumber.replace("" + digit, "").length();
digitCount += count;
}
if (maybeNumber.length() > digitCount*4) {
Log.d(LOGGING_TAG, "Discarding " + maybeNumber + " because it does not contain a high enough digit ratio to be a real phone number");
return null;
} else {
return maybeNumber;
}
}
}

View File

@@ -0,0 +1,41 @@
package org.kde.kdeconnect;
import android.app.Application;
import androidx.annotation.NonNull;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ProcessLifecycleOwner;
public class MyApplication extends Application {
private static class LifecycleObserver implements DefaultLifecycleObserver {
private boolean inForeground = false;
@Override
public void onStart(@NonNull LifecycleOwner owner) {
inForeground = true;
}
@Override
public void onStop(@NonNull LifecycleOwner owner) {
inForeground = false;
}
boolean isInForeground() {
return inForeground;
}
}
private static final LifecycleObserver foregroundTracker = new LifecycleObserver();
@Override
public void onCreate() {
super.onCreate();
ProcessLifecycleOwner.get().getLifecycle().addObserver(foregroundTracker);
}
public static boolean isInForeground() {
return foregroundTracker.isInForeground();
}
}

View File

@@ -45,6 +45,9 @@ public class NetworkPacket {
public final static String PACKET_TYPE_IDENTITY = "kdeconnect.identity";
public final static String PACKET_TYPE_PAIR = "kdeconnect.pair";
public final static int PACKET_REPLACEID_MOUSEMOVE = 0;
public final static int PACKET_REPLACEID_PRESENTERPOINTER = 1;
public static Set<String> protocolPacketTypes = new HashSet<String>() {{
add(PACKET_TYPE_IDENTITY);
add(PACKET_TYPE_PAIR);
@@ -105,6 +108,13 @@ public class NetworkPacket {
return mBody.optInt(key, defaultValue);
}
public void set(String key, int value) {
try {
mBody.put(key, value);
} catch (Exception ignored) {
}
}
public long getLong(String key) {
return mBody.optLong(key, -1);
}
@@ -113,7 +123,7 @@ public class NetworkPacket {
return mBody.optLong(key, defaultValue);
}
public void set(String key, int value) {
public void set(String key, long value) {
try {
mBody.put(key, value);
} catch (Exception ignored) {

View File

@@ -41,6 +41,7 @@ public class ClipboardListener {
private final Context context;
private String currentContent;
private long updateTimestamp;
private ClipboardManager cm = null;
private ClipboardManager.OnPrimaryClipChangedListener listener;
@@ -76,7 +77,7 @@ public class ClipboardListener {
if (content.equals(currentContent)) {
return;
}
updateTimestamp = System.currentTimeMillis();
currentContent = content;
for (ClipboardObserver observer : observers) {
@@ -91,8 +92,17 @@ public class ClipboardListener {
});
}
public String getCurrentContent() {
return currentContent;
}
public long getUpdateTimestamp() {
return updateTimestamp;
}
@SuppressWarnings("deprecation")
public void setText(String text) {
updateTimestamp = System.currentTimeMillis();
currentContent = text;
cm.setText(text);
}

View File

@@ -28,8 +28,31 @@ import org.kde.kdeconnect_tp.R;
@PluginFactory.LoadablePlugin
public class ClipboardPlugin extends Plugin {
/**
* Packet containing just clipboard contents, sent when a device updates its clipboard.
* <p>
* The body should look like so:
* {
* "content": "password"
* }
*/
private final static String PACKET_TYPE_CLIPBOARD = "kdeconnect.clipboard";
/**
* Packet containing clipboard contents and a timestamp that the contents were last updated, sent
* on first connection
* <p>
* The timestamp is milliseconds since epoch. It can be 0, which indicates that the clipboard
* update time is currently unknown.
* <p>
* The body should look like so:
* {
* "timestamp": 542904563213,
* "content": "password"
* }
*/
private final static String PACKET_TYPE_CLIPBOARD_CONNECT = "kdeconnect.clipboard.connect";
@Override
public String getDisplayName() {
return context.getResources().getString(R.string.pref_plugin_clipboard);
@@ -43,19 +66,44 @@ public class ClipboardPlugin extends Plugin {
@Override
public boolean onPacketReceived(NetworkPacket np) {
String content = np.getString("content");
ClipboardListener.instance(context).setText(content);
return true;
switch (np.getType()) {
case (PACKET_TYPE_CLIPBOARD):
ClipboardListener.instance(context).setText(content);
return true;
case(PACKET_TYPE_CLIPBOARD_CONNECT):
long packetTime = np.getLong("timestamp");
// If the packetTime is 0, it means the timestamp is unknown (so do nothing).
if (packetTime == 0 || packetTime < ClipboardListener.instance(context).getUpdateTimestamp()) {
return false;
}
ClipboardListener.instance(context).setText(content);
return true;
}
throw new UnsupportedOperationException("Unknown packet type: " + np.getType());
}
private final ClipboardListener.ClipboardObserver observer = content -> {
private final ClipboardListener.ClipboardObserver observer = this::propagateClipboard;
private void propagateClipboard(String content) {
NetworkPacket np = new NetworkPacket(ClipboardPlugin.PACKET_TYPE_CLIPBOARD);
np.set("content", content);
device.sendPacket(np);
};
}
private void sendConnectPacket() {
String content = ClipboardListener.instance(context).getCurrentContent();
NetworkPacket np = new NetworkPacket(ClipboardPlugin.PACKET_TYPE_CLIPBOARD_CONNECT);
long timestamp = ClipboardListener.instance(context).getUpdateTimestamp();
np.set("timestamp", timestamp);
np.set("content", content);
device.sendPacket(np);
}
@Override
public boolean onCreate() {
ClipboardListener.instance(context).registerObserver(observer);
sendConnectPacket();
return true;
}
@@ -66,12 +114,12 @@ public class ClipboardPlugin extends Plugin {
@Override
public String[] getSupportedPacketTypes() {
return new String[]{PACKET_TYPE_CLIPBOARD};
return new String[]{PACKET_TYPE_CLIPBOARD, PACKET_TYPE_CLIPBOARD_CONNECT};
}
@Override
public String[] getOutgoingPacketTypes() {
return new String[]{PACKET_TYPE_CLIPBOARD};
return new String[]{PACKET_TYPE_CLIPBOARD, PACKET_TYPE_CLIPBOARD_CONNECT};
}

View File

@@ -26,12 +26,12 @@ package org.kde.kdeconnect.Plugins.ContactsPlugin;
import android.Manifest;
import android.annotation.TargetApi;
import android.os.Build;
import android.provider.ContactsContract;
import android.util.Log;
import org.kde.kdeconnect.Helpers.ContactsHelper;
import org.kde.kdeconnect.Helpers.ContactsHelper.VCardBuilder;
import org.kde.kdeconnect.Helpers.ContactsHelper.uID;
import org.kde.kdeconnect.Helpers.ContactsHelper.ContactNotFoundException;
import org.kde.kdeconnect.NetworkPacket;
import org.kde.kdeconnect.Plugins.Plugin;
import org.kde.kdeconnect.Plugins.PluginFactory;
@@ -141,9 +141,10 @@ public class ContactsPlugin extends Plugin {
*
* @param vcard vcard to apply metadata to
* @param uID uID to which the vcard corresponds
* @throws ContactNotFoundException If the given ID for some reason does not match a contact
* @return The same VCard as was passed in, but now with KDE Connect-specific fields
*/
private VCardBuilder addVCardMetadata(VCardBuilder vcard, uID uID) {
private VCardBuilder addVCardMetadata(VCardBuilder vcard, uID uID) throws ContactNotFoundException {
// Append the device ID line
// Unclear if the deviceID forms a valid name per the vcard spec. Worry about that later..
vcard.appendLine("X-KDECONNECT-ID-DEV-" + device.getDeviceId(),
@@ -151,16 +152,9 @@ public class ContactsPlugin extends Plugin {
// Build the timestamp line
// Maybe one day this should be changed into the vcard-standard REV key
List<uID> uIDs = new ArrayList<>();
uIDs.add(uID);
final String[] contactsProjection = new String[]{
ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP
};
Map<uID, Map<String, Object>> timestamp = ContactsHelper.getColumnsFromContactsForIDs(context, uIDs, contactsProjection);
Long timestamp = ContactsHelper.getContactTimestamp(context, uID);
vcard.appendLine("X-KDECONNECT-TIMESTAMP",
timestamp.get(uID).get(ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP).toString());
timestamp.toString());
return vcard;
}
@@ -178,26 +172,19 @@ public class ContactsPlugin extends Plugin {
private boolean handleRequestAllUIDsTimestamps(@SuppressWarnings("unused") NetworkPacket np) {
NetworkPacket reply = new NetworkPacket(PACKET_TYPE_CONTACTS_RESPONSE_UIDS_TIMESTAMPS);
List<uID> uIDs = ContactsHelper.getAllContactContactIDs(context);
Map<uID, Long> uIDsToTimestamps = ContactsHelper.getAllContactTimestamps(context);
List<String> uIDsAsStrings = new ArrayList<>(uIDs.size());
int contactCount = uIDsToTimestamps.size();
for (uID uID : uIDs) {
uIDsAsStrings.add(uID.toString());
List<String> uIDs = new ArrayList<>(contactCount);
for (uID contactID : uIDsToTimestamps.keySet()) {
Long timestamp = uIDsToTimestamps.get(contactID);
reply.set(contactID.toString(), timestamp);
uIDs.add(contactID.toString());
}
final String[] contactsProjection = new String[]{
ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP
};
reply.set("uids", uIDsAsStrings);
// Add last-modified timestamps
Map<uID, Map<String, Object>> uIDsToTimestamps = ContactsHelper.getColumnsFromContactsForIDs(context, uIDs, contactsProjection);
for (uID ID : uIDsToTimestamps.keySet()) {
Map<String, Object> data = uIDsToTimestamps.get(ID);
reply.set(ID.toString(), (Integer) data.get(ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP));
}
reply.set("uids", uIDs);
device.sendPacket(reply);
@@ -230,12 +217,17 @@ public class ContactsPlugin extends Plugin {
for (uID uID : uIDsToVCards.keySet()) {
VCardBuilder vcard = uIDsToVCards.get(uID);
vcard = this.addVCardMetadata(vcard, uID);
try {
vcard = this.addVCardMetadata(vcard, uID);
// Store this as a valid uID
uIDsAsStrings.add(uID.toString());
// Add the uid -> vcard pairing to the packet
reply.set(uID.toString(), vcard.toString());
// Store this as a valid uID
uIDsAsStrings.add(uID.toString());
// Add the uid -> vcard pairing to the packet
reply.set(uID.toString(), vcard.toString());
} catch (ContactsHelper.ContactNotFoundException e) {
e.printStackTrace();
}
}
// Add the valid uIDs to the packet

View File

@@ -19,47 +19,37 @@
*/
package org.kde.kdeconnect.Plugins.FindMyPhonePlugin;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import androidx.appcompat.app.AppCompatActivity;
import org.kde.kdeconnect.BackgroundService;
import org.kde.kdeconnect.UserInterface.ThemeUtil;
import org.kde.kdeconnect_tp.R;
public class FindMyPhoneActivity extends Activity {
public class FindMyPhoneActivity extends AppCompatActivity {
static final String EXTRA_DEVICE_ID = "deviceId";
private MediaPlayer mediaPlayer;
private int previousVolume;
private AudioManager audioManager;
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (mediaPlayer != null) {
// If this activity was already open and we received the ring packet again, just finish it
finish();
}
// otherwise the activity will become active again
}
private String deviceId;
private FindMyPhonePlugin plugin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ThemeUtil.setUserPreferredTheme(this);
setContentView(R.layout.activity_find_my_phone);
audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
if (!getIntent().hasExtra(EXTRA_DEVICE_ID)) {
Log.e("FindMyPhoneActivity", "You must include the deviceId for which this activity is started as an intent EXTRA");
finish();
}
deviceId = getIntent().getStringExtra(EXTRA_DEVICE_ID);
plugin = BackgroundService.getInstance().getDevice(deviceId).getPlugin(FindMyPhonePlugin.class);
Window window = this.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
@@ -72,42 +62,19 @@ public class FindMyPhoneActivity extends Activity {
@Override
protected void onStart() {
super.onStart();
try {
// Make sure we are heard even when the phone is silent, restore original volume later
previousVolume = audioManager.getStreamVolume(AudioManager.STREAM_ALARM);
audioManager.setStreamVolume(AudioManager.STREAM_ALARM, audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM), 0);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
Uri ringtone;
String ringtoneString = prefs.getString(getString(R.string.findmyphone_preference_key_ringtone), "");
if (ringtoneString.isEmpty()) {
ringtone = Settings.System.DEFAULT_RINGTONE_URI;
} else {
ringtone = Uri.parse(ringtoneString);
}
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(this, ringtone);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
mediaPlayer.setLooping(true);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (Exception e) {
Log.e("FindMyPhoneActivity", "Exception", e);
}
/*
For whatever reason when Android launches this activity as a SystemAlertWindow it calls:
onCreate(), onStart(), onResume(), onStop(), onStart(), onResume().
When using BackgroundService.RunWithPlugin we get into concurrency problems and sometimes no sound will be played
*/
plugin.startPlaying();
plugin.hideNotification();
}
@Override
protected void onStop() {
super.onStop();
if (mediaPlayer != null) {
mediaPlayer.stop();
}
audioManager.setStreamVolume(AudioManager.STREAM_ALARM, previousVolume, 0);
plugin.stopPlaying();
}
}

View File

@@ -21,20 +21,46 @@
package org.kde.kdeconnect.Plugins.FindMyPhonePlugin;
import android.app.Activity;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Build;
import android.os.PowerManager;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.util.Log;
import androidx.core.app.NotificationCompat;
import org.kde.kdeconnect.Helpers.DeviceHelper;
import org.kde.kdeconnect.Helpers.NotificationHelper;
import org.kde.kdeconnect.MyApplication;
import org.kde.kdeconnect.NetworkPacket;
import org.kde.kdeconnect.Plugins.Plugin;
import org.kde.kdeconnect.Plugins.PluginFactory;
import org.kde.kdeconnect.UserInterface.PluginSettingsFragment;
import org.kde.kdeconnect_tp.R;
import java.io.IOException;
import static android.content.Context.POWER_SERVICE;
@PluginFactory.LoadablePlugin
public class FindMyPhonePlugin extends Plugin {
public final static String PACKET_TYPE_FINDMYPHONE_REQUEST = "kdeconnect.findmyphone.request";
private NotificationManager notificationManager;
private int notificationId;
private AudioManager audioManager;
private MediaPlayer mediaPlayer;
private int previousVolume;
private PowerManager powerManager;
@Override
public String getDisplayName() {
switch (DeviceHelper.getDeviceType(context)) {
@@ -55,13 +81,122 @@ public class FindMyPhonePlugin extends Plugin {
}
@Override
public boolean onPacketReceived(NetworkPacket np) {
public boolean onCreate() {
notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationId = (int) System.currentTimeMillis();
audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
powerManager = (PowerManager) context.getSystemService(POWER_SERVICE);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
Uri ringtone;
String ringtoneString = prefs.getString(context.getString(R.string.findmyphone_preference_key_ringtone), "");
if (ringtoneString.isEmpty()) {
ringtone = Settings.System.DEFAULT_RINGTONE_URI;
} else {
ringtone = Uri.parse(ringtoneString);
}
try {
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(context, ringtone);
//TODO: Deprecated use setAudioAttributes for API > 21
mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
mediaPlayer.setLooping(true);
mediaPlayer.prepare();
} catch (Exception e) {
Log.e("FindMyPhoneActivity", "Exception", e);
return false;
}
Intent intent = new Intent(context, FindMyPhoneActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
return true;
}
@Override
public void onDestroy() {
stopPlaying();
audioManager = null;
mediaPlayer.release();
mediaPlayer = null;
}
@Override
public boolean onPacketReceived(NetworkPacket np) {
if (Build.VERSION.SDK_INT < 29 || MyApplication.isInForeground()) {
Intent intent = new Intent(context, FindMyPhoneActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(FindMyPhoneActivity.EXTRA_DEVICE_ID, device.getDeviceId());
context.startActivity(intent);
} else {
if (powerManager.isInteractive()) {
startPlaying();
showBroadcastNotification();
} else {
showActivityNotification();
}
}
return true;
}
private void showBroadcastNotification() {
Intent intent = new Intent(context, FindMyPhoneReceiver.class);
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
intent.setAction(FindMyPhoneReceiver.ACTION_FOUND_IT);
intent.putExtra(FindMyPhoneReceiver.EXTRA_DEVICE_ID, device.getDeviceId());
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
createNotification(pendingIntent);
}
private void showActivityNotification() {
Intent intent = new Intent(context, FindMyPhoneActivity.class);
intent.putExtra(FindMyPhoneActivity.EXTRA_DEVICE_ID, device.getDeviceId());
PendingIntent pi = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
createNotification(pi);
}
private void createNotification(PendingIntent pendingIntent) {
NotificationCompat.Builder notification = new NotificationCompat.Builder(context, NotificationHelper.Channels.HIGHPRIORITY);
notification
.setSmallIcon(R.drawable.ic_notification)
.setOngoing(false)
.setFullScreenIntent(pendingIntent, true)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setAutoCancel(true)
.setContentTitle(context.getString(R.string.findmyphone_found));
notification.setGroup("BackgroundService");
notificationManager.notify(notificationId, notification.build());
}
void startPlaying() {
if (!mediaPlayer.isPlaying()) {
// Make sure we are heard even when the phone is silent, restore original volume later
previousVolume = audioManager.getStreamVolume(AudioManager.STREAM_ALARM);
audioManager.setStreamVolume(AudioManager.STREAM_ALARM, audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM), 0);
mediaPlayer.start();
}
}
void hideNotification() {
notificationManager.cancel(notificationId);
}
void stopPlaying() {
audioManager.setStreamVolume(AudioManager.STREAM_ALARM, previousVolume, 0);
mediaPlayer.stop();
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
boolean isPlaying() {
return mediaPlayer.isPlaying();
}
@Override

View File

@@ -0,0 +1,35 @@
package org.kde.kdeconnect.Plugins.FindMyPhonePlugin;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import org.kde.kdeconnect.BackgroundService;
public class FindMyPhoneReceiver extends BroadcastReceiver {
final static String ACTION_FOUND_IT = "org.kde.kdeconnect.Plugins.FindMyPhonePlugin.foundIt";
final static String EXTRA_DEVICE_ID = "deviceId";
@Override
public void onReceive(Context context, Intent intent) {
switch (intent.getAction()) {
case ACTION_FOUND_IT:
foundIt(context, intent);
break;
default:
Log.d("ShareBroadcastReceiver", "Unhandled Action received: " + intent.getAction());
}
}
private void foundIt(Context context, Intent intent) {
if (!intent.hasExtra(EXTRA_DEVICE_ID)) {
Log.e("FindMyPhoneReceiver", "foundIt() - deviceId extra is not present, ignoring");
return;
}
String deviceId = intent.getStringExtra(EXTRA_DEVICE_ID);
BackgroundService.RunWithPlugin(context, deviceId, FindMyPhonePlugin.class, FindMyPhonePlugin::stopPlaying);
}
}

View File

@@ -373,17 +373,5 @@ public class MousePadActivity extends AppCompatActivity implements GestureDetect
imm.toggleSoftInputFromWindow(keyListenerView.getWindowToken(), 0, 0);
}
@Override
protected void onStart() {
super.onStart();
BackgroundService.addGuiInUseCounter(this);
}
@Override
protected void onStop() {
super.onStop();
BackgroundService.removeGuiInUseCounter(this);
}
}

View File

@@ -24,6 +24,7 @@ import android.app.Activity;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import org.kde.kdeconnect.Device;
import org.kde.kdeconnect.NetworkPacket;
import org.kde.kdeconnect.Plugins.Plugin;
import org.kde.kdeconnect.Plugins.PluginFactory;
@@ -96,12 +97,18 @@ public class MousePadPlugin extends Plugin {
}
public void sendMouseDelta(float dx, float dy) {
NetworkPacket np = new NetworkPacket(PACKET_TYPE_MOUSEPAD_REQUEST);
NetworkPacket np = device.getAndRemoveUnsentPacket(NetworkPacket.PACKET_REPLACEID_MOUSEMOVE);
if (np == null) {
np = new NetworkPacket(PACKET_TYPE_MOUSEPAD_REQUEST);
} else {
dx += np.getInt("dx");
dy += np.getInt("dx");
}
np.set("dx", dx);
np.set("dy", dy);
device.sendPacket(np);
device.sendPacket(np, NetworkPacket.PACKET_REPLACEID_MOUSEMOVE);
}
public void sendSingleClick() {

View File

@@ -445,16 +445,4 @@ public class MprisActivity extends AppCompatActivity {
nowPlayingText.setSelected(true);
}
@Override
protected void onStart() {
super.onStart();
BackgroundService.addGuiInUseCounter(this);
}
@Override
protected void onStop() {
super.onStop();
BackgroundService.removeGuiInUseCounter(this);
}
}

View File

@@ -116,6 +116,11 @@ public class MprisMediaSession implements SharedPreferences.OnSharedPreferenceCh
public void onStop() {
notificationPlayer.stop();
}
@Override
public void onSeekTo(long pos) {
notificationPlayer.setPosition((int) pos);
}
};
/**
@@ -425,6 +430,13 @@ public class MprisMediaSession implements SharedPreferences.OnSharedPreferenceCh
playbackActions |= PlaybackStateCompat.ACTION_SKIP_TO_NEXT;
++numActions;
}
// Documentation says that this was added in Lollipop (21) but it seems to cause crashes on < Pie (28)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
if (notificationPlayer.isSeekAllowed()) {
playbackActions |= PlaybackStateCompat.ACTION_SEEK_TO;
++numActions;
}
}
playbackState.setActions(playbackActions);
mediaSession.setPlaybackState(playbackState.build());

View File

@@ -30,7 +30,7 @@ import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
class MprisReceiverCallback extends MediaController.Callback {
private static final String TAG = "MprisReceiver";
@@ -43,7 +43,6 @@ class MprisReceiverCallback extends MediaController.Callback {
this.plugin = plugin;
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void onPlaybackStateChanged(PlaybackState state) {
plugin.sendMetadata(player);
@@ -54,4 +53,9 @@ class MprisReceiverCallback extends MediaController.Callback {
plugin.sendMetadata(player);
}
@Override
public void onAudioInfoChanged(MediaController.PlaybackInfo info) {
//Note: not called by all media players
plugin.sendMetadata(player);
}
}

View File

@@ -147,9 +147,18 @@ class MprisReceiverPlayer {
}
int getVolume() {
if (controller.getPlaybackInfo() == null)
return 0;
return 100 * controller.getPlaybackInfo().getCurrentVolume() / controller.getPlaybackInfo().getMaxVolume();
MediaController.PlaybackInfo info = controller.getPlaybackInfo();
if (info == null) return 0;
return 100 * info.getCurrentVolume() / info.getMaxVolume();
}
void setVolume(int volume) {
MediaController.PlaybackInfo info = controller.getPlaybackInfo();
if (info == null) return;
//Use rounding for the volume, since most devices don't have a very large range
double unroundedVolume = info.getMaxVolume() * volume / 100.0 + 0.5;
controller.setVolumeTo((int) unroundedVolume, 0);
}
long getPosition() {

View File

@@ -134,6 +134,13 @@ public class MprisReceiverPlugin extends Plugin {
player.setPosition(position);
}
if (np.has("setVolume")) {
int volume = np.getInt("setVolume", 100);
player.setVolume(volume);
//Setting volume doesn't seem to always trigger the callback
sendMetadata(player);
}
if (np.has("action")) {
String action = np.getString("action");

View File

@@ -199,7 +199,7 @@ public class NotificationFilterActivity extends AppCompatActivity {
compoundButton.isChecked()));
ad.cancel();
myBuilder.create().show();
myBuilder.show();
break;
}
});
@@ -218,18 +218,6 @@ public class NotificationFilterActivity extends AppCompatActivity {
}
@Override
protected void onStart() {
super.onStart();
BackgroundService.addGuiInUseCounter(this);
}
@Override
protected void onStop() {
super.onStop();
BackgroundService.removeGuiInUseCounter(this);
}
private Drawable resizeIcon(Drawable icon, int maxSize) {
Resources res = getResources();

View File

@@ -39,9 +39,11 @@ import android.os.Parcelable;
import android.provider.Settings;
import android.service.notification.StatusBarNotification;
import android.text.SpannableString;
import android.text.TextUtils;
import android.util.Log;
import android.util.Pair;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.core.app.NotificationCompat;
@@ -65,6 +67,7 @@ import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
@@ -136,10 +139,6 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
service.addListener(NotificationsPlugin.this);
serviceReady = service.isConnected();
if (serviceReady) {
sendCurrentNotifications(service);
}
});
return true;
@@ -154,7 +153,6 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
@Override
public void onListenerConnected(NotificationReceiver service) {
serviceReady = true;
sendCurrentNotifications(service);
}
@Override
@@ -186,7 +184,8 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
if ((notification.flags & Notification.FLAG_FOREGROUND_SERVICE) != 0
|| (notification.flags & Notification.FLAG_ONGOING_EVENT) != 0
|| (notification.flags & Notification.FLAG_LOCAL_ONLY) != 0
|| (notification.flags & NotificationCompat.FLAG_GROUP_SUMMARY) != 0) //The notification that groups other notifications
|| (notification.flags & NotificationCompat.FLAG_GROUP_SUMMARY) != 0 //The notification that groups other notifications
)
{
//This is not a notification we want!
return;
@@ -239,6 +238,7 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
np.set("actions", extractActions(notification, key));
np.set("id", key);
np.set("silent", (notification.flags & NotificationCompat.FLAG_ONLY_ALERT_ONCE) != 0);
np.set("isClearable", statusBarNotification.isClearable());
np.set("appName", appName == null ? packageName : appName);
np.set("time", Long.toString(statusBarNotification.getPostTime()));
@@ -253,33 +253,38 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
Pair<String, String> conversation = extractConversation(notification);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (conversation.first != null) {
np.set("title", conversation.first);
} else {
np.set("title", notification.extras.getString(Notification.EXTRA_TITLE));
}
np.set("text", extractText(notification, conversation));
if (conversation.first != null) {
np.set("title", conversation.first);
} else {
np.set("title", extractStringFromExtra(getExtras(notification), NotificationCompat.EXTRA_TITLE));
}
np.set("text", extractText(notification, conversation));
}
device.sendPacket(np);
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
private String extractText(Notification notification, Pair<String, String> conversation) {
if (conversation.second != null) {
return conversation.second;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && notification.extras.containsKey(Notification.EXTRA_BIG_TEXT)) {
return extractStringFromExtra(notification.extras, Notification.EXTRA_BIG_TEXT);
Bundle extras = getExtras(notification);
if (extras.containsKey(NotificationCompat.EXTRA_BIG_TEXT)) {
return extractStringFromExtra(extras, NotificationCompat.EXTRA_BIG_TEXT);
}
return notification.extras.getString(Notification.EXTRA_TEXT);
return extractStringFromExtra(extras, NotificationCompat.EXTRA_TEXT);
}
@NonNull
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
private static Bundle getExtras(Notification notification) {
// NotificationCompat.getExtras() is expected to return non-null values for JELLY_BEAN+
return Objects.requireNonNull(NotificationCompat.getExtras(notification));
}
private void attachIcon(NetworkPacket np, Bitmap appIcon) {
@@ -359,25 +364,19 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
String title = notification.extras.getString(Notification.EXTRA_CONVERSATION_TITLE);
boolean isGroupConversation = false;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
if (notification.extras.containsKey(Notification.EXTRA_IS_GROUP_CONVERSATION)) {
isGroupConversation = notification.extras.getBoolean(Notification.EXTRA_IS_GROUP_CONVERSATION);
}
}
boolean isGroupConversation = notification.extras.getBoolean(NotificationCompat.EXTRA_IS_GROUP_CONVERSATION);
StringBuilder messagesBuilder = new StringBuilder();
for (Parcelable p : ms) {
Bundle m = (Bundle) p;
if (isGroupConversation) {
if (isGroupConversation && m.containsKey("sender")) {
messagesBuilder.append(m.get("sender"));
messagesBuilder.append(": ");
}
messagesBuilder.append(m.getString("text"));
messagesBuilder.append(extractStringFromExtra(m, "text"));
messagesBuilder.append("\n");
}
@@ -491,22 +490,20 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
private String getTickerText(Notification notification) {
String ticker = "";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
try {
Bundle extras = notification.extras;
String extraTitle = extractStringFromExtra(extras, Notification.EXTRA_TITLE);
String extraText = extractStringFromExtra(extras, Notification.EXTRA_TEXT);
try {
Bundle extras = getExtras(notification);
String extraTitle = extractStringFromExtra(extras, NotificationCompat.EXTRA_TITLE);
String extraText = extractStringFromExtra(extras, NotificationCompat.EXTRA_TEXT);
if (extraTitle != null && extraText != null && !extraText.isEmpty()) {
ticker = extraTitle + ": " + extraText;
} else if (extraTitle != null) {
ticker = extraTitle;
} else if (extraText != null) {
ticker = extraText;
}
} catch (Exception e) {
Log.e(TAG, "problem parsing notification extras for " + notification.tickerText, e);
if (extraTitle != null && !TextUtils.isEmpty(extraText)) {
ticker = extraTitle + ": " + extraText;
} else if (extraTitle != null) {
ticker = extraTitle;
} else if (extraText != null) {
ticker = extraText;
}
} catch (Exception e) {
Log.e(TAG, "problem parsing notification extras for " + notification.tickerText, e);
}
if (ticker.isEmpty()) {
@@ -594,7 +591,7 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
//For compat with API<21, because lollipop changed the way to cancel notifications
private static void cancelNotificationCompat(NotificationReceiver service, String compatKey) {
if (Build.VERSION.SDK_INT >= 21) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
service.cancelNotification(compatKey);
} else {
int first = compatKey.indexOf(':');
@@ -623,7 +620,7 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
String tag = statusBarNotification.getTag();
if (tag != null && tag.startsWith("kdeconnectId:"))
result = Integer.toString(statusBarNotification.getId());
else if (Build.VERSION.SDK_INT >= 21) {
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
result = statusBarNotification.getKey();
} else {
String packageName = statusBarNotification.getPackageName();

View File

@@ -64,6 +64,8 @@ public class PhotoActivity extends AppCompatActivity {
if (resultCode == -1) {
plugin.sendPhoto(photoURI);
} else {
plugin.sendCancel();
}
finish();
}

View File

@@ -88,4 +88,10 @@ public class PhotoPlugin extends Plugin {
public Drawable getIcon() {
return ContextCompat.getDrawable(context, R.drawable.ic_camera);
}
void sendCancel() {
NetworkPacket np = new NetworkPacket(PACKET_TYPE_PHOTO);
np.set("cancel", true);
device.sendPacket(np);
}
}

View File

@@ -21,6 +21,10 @@
package org.kde.kdeconnect.Plugins.PresenterPlugin;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Build;
import android.os.Bundle;
import android.os.PowerManager;
@@ -29,6 +33,8 @@ import android.support.v4.media.session.PlaybackStateCompat;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import org.kde.kdeconnect.BackgroundService;
import org.kde.kdeconnect.UserInterface.ThemeUtil;
@@ -37,12 +43,53 @@ import org.kde.kdeconnect_tp.R;
import androidx.appcompat.app.AppCompatActivity;
import androidx.media.VolumeProviderCompat;
public class PresenterActivity extends AppCompatActivity {
public class PresenterActivity extends AppCompatActivity implements SensorEventListener {
private MediaSessionCompat mMediaSession;
private PresenterPlugin plugin;
private SensorManager sensorManager;
static final float SENSITIVITY = 0.03f; //TODO: Make configurable?
public void gyroscopeEvent(SensorEvent event) {
float xPos = -event.values[2] * SENSITIVITY;
float yPos = -event.values[0] * SENSITIVITY;
plugin.sendPointer(xPos, yPos);
}
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_GYROSCOPE) {
gyroscopeEvent(event);
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
//Ignored
}
void enablePointer() {
if (sensorManager != null) {
return; //Already enabled
}
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
findViewById(R.id.pointer_button).setVisibility(View.VISIBLE);
findViewById(R.id.pointer_button).setOnTouchListener((v, event) -> {
if(event.getAction() == MotionEvent.ACTION_DOWN){
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE), SensorManager.SENSOR_DELAY_GAME);
v.performClick(); // The linter complains if this is not called
}
else if (event.getAction() == MotionEvent.ACTION_UP) {
sensorManager.unregisterListener(this);
plugin.stopPointer();
}
return true;
});
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -56,6 +103,9 @@ public class PresenterActivity extends AppCompatActivity {
this.plugin = plugin;
findViewById(R.id.next_button).setOnClickListener(v -> plugin.sendNext());
findViewById(R.id.previous_button).setOnClickListener(v -> plugin.sendPrevious());
if (plugin.isPointerSupported()) {
enablePointer();
}
}));
}
@Override
@@ -82,18 +132,21 @@ public class PresenterActivity extends AppCompatActivity {
@Override
protected void onStart() {
super.onStart();
BackgroundService.addGuiInUseCounter(this);
if (mMediaSession != null) {
mMediaSession.setActive(true);
return;
}
createMediaSession(); //Mediasession will keep
createMediaSession();
}
@Override
protected void onStop() {
super.onStop();
BackgroundService.removeGuiInUseCounter(this);
if (sensorManager != null) {
// Make sure we don't leave the listener on
sensorManager.unregisterListener(this);
}
if (mMediaSession != null) {
PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE);

View File

@@ -24,6 +24,9 @@ package org.kde.kdeconnect.Plugins.PresenterPlugin;
import android.app.Activity;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.net.Network;
import android.os.Handler;
import android.os.Message;
import android.view.KeyEvent;
import org.kde.kdeconnect.NetworkPacket;
@@ -38,8 +41,13 @@ import static org.kde.kdeconnect.Plugins.MousePadPlugin.KeyListenerView.SpecialK
@PluginFactory.LoadablePlugin
public class PresenterPlugin extends Plugin {
private final static String PACKET_TYPE_PRESENTER = "kdeconnect.presenter";
private final static String PACKET_TYPE_MOUSEPAD_REQUEST = "kdeconnect.mousepad.request";
public boolean isPointerSupported() {
return device.supportsPacketType(PACKET_TYPE_PRESENTER);
}
@Override
public String getDisplayName() {
return context.getString(R.string.pref_plugin_presenter);
@@ -73,13 +81,11 @@ public class PresenterPlugin extends Plugin {
}
@Override
public String[] getSupportedPacketTypes() {
return new String[0];
}
public String[] getSupportedPacketTypes() { return new String[0]; }
@Override
public String[] getOutgoingPacketTypes() {
return new String[]{PACKET_TYPE_MOUSEPAD_REQUEST};
return new String[]{PACKET_TYPE_MOUSEPAD_REQUEST, PACKET_TYPE_PRESENTER};
}
@Override
@@ -111,4 +117,23 @@ public class PresenterPlugin extends Plugin {
device.sendPacket(np);
}
public void sendPointer(float xDelta, float yDelta) {
NetworkPacket np = device.getAndRemoveUnsentPacket(NetworkPacket.PACKET_REPLACEID_PRESENTERPOINTER);
if (np == null) {
np = new NetworkPacket(PACKET_TYPE_PRESENTER);
} else {
xDelta += np.getInt("dx");
yDelta += np.getInt("dy");
}
np.set("dx", xDelta);
np.set("dy", yDelta);
device.sendPacket(np, NetworkPacket.PACKET_REPLACEID_PRESENTERPOINTER);
}
public void stopPointer() {
device.getAndRemoveUnsentPacket(NetworkPacket.PACKET_REPLACEID_PRESENTERPOINTER);
NetworkPacket np = new NetworkPacket(PACKET_TYPE_PRESENTER);
np.set("stop", true);
device.sendPacket(np);
}
}

View File

@@ -107,7 +107,11 @@ public class RunCommandActivity extends AppCompatActivity {
deviceId = getIntent().getStringExtra("deviceId");
boolean canAddCommands = BackgroundService.getInstance().getDevice(deviceId).getPlugin(RunCommandPlugin.class).canAddCommand();
boolean canAddCommands = false;
try {
canAddCommands = BackgroundService.getInstance().getDevice(deviceId).getPlugin(RunCommandPlugin.class).canAddCommand();
} catch (Exception ignore) {
}
FloatingActionButton addCommandButton = findViewById(R.id.add_command_button);
if (canAddCommands) {
@@ -118,14 +122,12 @@ public class RunCommandActivity extends AppCompatActivity {
addCommandButton.setOnClickListener(v -> BackgroundService.RunWithPlugin(RunCommandActivity.this, deviceId, RunCommandPlugin.class, plugin -> {
plugin.sendSetupPacket();
AlertDialog dialog = new AlertDialog.Builder(RunCommandActivity.this)
new AlertDialog.Builder(RunCommandActivity.this)
.setTitle(R.string.add_command)
.setMessage(R.string.add_command_description)
.setPositiveButton(R.string.ok, null)
.create();
dialog.show();
.show();
}));
updateView();
}

View File

@@ -75,23 +75,47 @@ public class SMSPlugin extends Plugin {
* The body should contain the key "messages" mapping to an array of messages
* <p>
* For example:
* { "messages" : [
* {
* "version": 2 // This is the second version of this packet type and
* // version 1 packets (which did not carry this flag)
* // are incompatible with the new format
* "messages" : [
* { "event" : 1, // 32-bit field containing a bitwise-or of event flags
* // See constants declared in SMSHelper.Message for defined
* // values and explanations
* "body" : "Hello", // Text message body
* "address" : "2021234567", // Sending or receiving address of the message
* "addresses": <List<Address>> // List of Address objects, one for each participant of the conversation
* // The user's Address is excluded so:
* // If this is a single-target messsage, there will only be one
* // Address (the other party)
* // If this is an incoming multi-target message, the first Address is the
* // sender and all other addresses are other parties to the conversation
* // If this is an outgoing multi-target message, the sender is implicit
* // (the user's phone number) and all Addresses are recipients
* "date" : "1518846484880", // Timestamp of the message
* "type" : "2", // Compare with Android's
* // Telephony.TextBasedSmsColumns.MESSAGE_TYPE_*
* "thread_id" : "132" // Thread to which the message belongs
* "thread_id" : 132 // Thread to which the message belongs
* "read" : true // Boolean representing whether a message is read or unread
* },
* { ... },
* ...
* ]
*
* The following optional fields of a message object may be defined
* "sub_id": <int> // Android's subscriber ID, which is basically used to determine which SIM card the message
* // belongs to. This is mostly useful when attempting to reply to an SMS with the correct
* // SIM card using PACKET_TYPE_SMS_REQUEST.
* // If this value is not defined or if it does not match a valid subscriber_id known by
* // Android, we will use whatever subscriber ID Android gives us as the default
*
* An Address object looks like:
* {
* "address": <String> // Address (phone number, email address, etc.) of this object
* }
*/
private final static String PACKET_TYPE_SMS_MESSAGE = "kdeconnect.sms.messages";
private final static int SMS_MESSAGE_PACKET_VERSION = 2; // We *send* packets of this version
/**
* Packet sent to request a message be sent
@@ -163,18 +187,15 @@ public class SMSPlugin extends Plugin {
private final Lock mostRecentTimestampLock = new ReentrantLock();
private class MessageContentObserver extends ContentObserver {
final SMSPlugin mPlugin;
/**
* Create a ContentObserver to watch the Messages database. onChange is called for
* every subscribed change
*
* @param parent Plugin which owns this observer
* @param handler Handler object used to make the callback
*/
MessageContentObserver(SMSPlugin parent, Handler handler) {
MessageContentObserver(Handler handler) {
super(handler);
mPlugin = parent;
}
/**
@@ -185,29 +206,28 @@ public class SMSPlugin extends Plugin {
*/
@Override
public void onChange(boolean selfChange) {
if (mPlugin.mostRecentTimestamp == 0) {
// Lock so no one uses the mostRecentTimestamp between the moment we read it and the
// moment we update it. This is because reading the Messages DB can take long.
mostRecentTimestampLock.lock();
if (mostRecentTimestamp == 0) {
// Since the timestamp has not been initialized, we know that nobody else
// has requested a message. That being the case, there is most likely
// nobody listening for message updates, so just drop them
mostRecentTimestampLock.unlock();
return;
}
mostRecentTimestampLock.lock();
// Grab the mostRecentTimestamp into the local stack because reading the Messages
// database could potentially be a long operation
long mostRecentTimestamp = mPlugin.mostRecentTimestamp;
mostRecentTimestampLock.unlock();
SMSHelper.Message message = SMSHelper.getNewestMessage(mPlugin.context);
SMSHelper.Message message = SMSHelper.getNewestMessage(context);
if (message.date <= mostRecentTimestamp) {
// Our onChange often gets called many times for a single message. Don't make unnecessary
// noise
if (message == null || message.date <= mostRecentTimestamp) {
// onChange can trigger many times for a single message. Don't make unnecessary noise
mostRecentTimestampLock.unlock();
return;
}
// Update the most recent counter
mostRecentTimestampLock.lock();
mPlugin.mostRecentTimestamp = message.date;
mostRecentTimestamp = message.date;
mostRecentTimestampLock.unlock();
// Send the alert about the update
@@ -281,9 +301,13 @@ public class SMSPlugin extends Plugin {
context.registerReceiver(receiver, filter);
Looper helperLooper = SMSHelper.MessageLooper.getLooper();
ContentObserver messageObserver = new MessageContentObserver(this, new Handler(helperLooper));
ContentObserver messageObserver = new MessageContentObserver(new Handler(helperLooper));
SMSHelper.registerObserver(messageObserver, context);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
Log.w("SMSPlugin", "This is a very old version of Android. The SMS Plugin might not function as intended.");
}
return true;
}
@@ -350,12 +374,12 @@ public class SMSPlugin extends Plugin {
body.put(json);
} catch (JSONException e) {
Log.e("Conversations", "Error serializing message");
Log.e("Conversations", "Error serializing message", e);
}
}
reply.set("messages", body);
reply.set("event", "batch_messages");
reply.set("version", SMS_MESSAGE_PACKET_VERSION);
return reply;
}
@@ -430,14 +454,23 @@ public class SMSPlugin extends Plugin {
return new String[]{
Manifest.permission.SEND_SMS,
Manifest.permission.READ_SMS,
// READ_PHONE_STATE should be optional, since we can just query the user, but that
// requires a GUI implementation for querying the user!
Manifest.permission.READ_PHONE_STATE,
};
}
/**
* I suspect we can actually go lower than this, but it might get unstable
* With versions older than KITKAT, lots of the content providers used in SMSHelper become
* un-documented. Most manufacturers *did* do things the same way as was done in mainline
* Android at that time, but some did not. If the manufacturer followed the default route,
* everything will be fine. If not, the plugin will crash. But, since we have a global catch-all
* in Device.onPacketReceived, it will not crash catastrophically.
* The onCreated method of this SMSPlugin complains if a version older than KitKat is loaded,
* but it still allowed in the optimistic hope that things will "just work"
*/
@Override
public int getMinSdk() {
return Build.VERSION_CODES.KITKAT;
return Build.VERSION_CODES.FROYO;
}
}

View File

@@ -197,7 +197,7 @@ public class SftpSettingsFragment
for (int i = 0, count = preferenceCategory.getPreferenceCount(); i < count; i++) {
StoragePreference preference = (StoragePreference) preferenceCategory.getPreference(i);
preference.setSelectable(true);
preference.setInSelectionMode(true);
preference.checkbox.setChecked(selectedItems.get(i, false));
}
}
@@ -403,6 +403,11 @@ public class SftpSettingsFragment
}
private void handleChangedStorageInfoList() {
if (actionMode != null) {
actionMode.finish(); // In case we are in selection mode, finish it
}
saveStorageInfoList();
preferenceCategory.removeAll();
@@ -443,7 +448,7 @@ public class SftpSettingsFragment
if (actionMode != null) {
for (int i = 0, count = preferenceCategory.getPreferenceCount(); i < count; i++) {
StoragePreference preference = (StoragePreference) preferenceCategory.getPreference(i);
preference.setSelectable(true);
preference.setInSelectionMode(true);
if (storagePreference.equals(preference)) {
preference.checkbox.setChecked(true);
}
@@ -485,7 +490,6 @@ public class SftpSettingsFragment
}
}
actionMode.finish(); //This must be called before handleChangedStorageInfoList()
handleChangedStorageInfoList();
return true;
default:
@@ -499,7 +503,7 @@ public class SftpSettingsFragment
for (int i = 0, count = preferenceCategory.getPreferenceCount(); i < count; i++) {
StoragePreference preference = (StoragePreference) preferenceCategory.getPreference(i);
preference.setSelectable(false);
preference.setInSelectionMode(false);
preference.checkbox.setChecked(false);
}
}

View File

@@ -43,6 +43,14 @@ public class StoragePreference extends DialogPreference {
private OnLongClickListener onLongClickListener;
@BindView(R.id.checkbox) CheckBox checkbox;
public boolean inSelectionMode;
public void setInSelectionMode(boolean inSelectionMode) {
if (this.inSelectionMode != inSelectionMode) {
this.inSelectionMode = inSelectionMode;
notifyChanged();
}
}
public StoragePreference(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -50,7 +58,7 @@ public class StoragePreference extends DialogPreference {
setDialogLayoutResource(R.layout.fragment_storage_preference_dialog);
setWidgetLayoutResource(R.layout.preference_checkbox);
setPersistent(false);
setSelectable(false);
inSelectionMode = false;
}
public StoragePreference(Context context) {
@@ -109,7 +117,7 @@ public class StoragePreference extends DialogPreference {
ButterKnife.bind(this, holder.itemView);
checkbox.setVisibility(isSelectable() ? View.VISIBLE : View.INVISIBLE);
checkbox.setVisibility(inSelectionMode ? View.VISIBLE : View.INVISIBLE);
holder.itemView.setOnLongClickListener(v -> {
if (onLongClickListener != null) {
@@ -122,7 +130,7 @@ public class StoragePreference extends DialogPreference {
@Override
protected void onClick() {
if (isSelectable()) {
if (inSelectionMode) {
checkbox.setChecked(!checkbox.isChecked());
} else {
super.onClick();

View File

@@ -43,9 +43,27 @@ import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import androidx.annotation.GuardedBy;
import androidx.core.content.FileProvider;
import androidx.documentfile.provider.DocumentFile;
/**
* A type of {@link BackgroundJob} that reads Files from another device.
*
* <p>
* We receive the requests as {@link NetworkPacket}s.
* </p>
* <p>
* Each packet should have a 'filename' property and a payload. If the payload is missing,
* we'll just create an empty file. You can add new packets anytime via
* {@link #addNetworkPacket(NetworkPacket)}.
* </p>
* <p>
* The I/O-part of this file reading is handled by {@link #receiveFile(InputStream, OutputStream)}.
* </p>
*
* @see CompositeUploadFileJob
*/
public class CompositeReceiveFileJob extends BackgroundJob<Device, Void> {
private final ReceiveNotification receiveNotification;
private NetworkPacket currentNetworkPacket;
@@ -56,8 +74,11 @@ public class CompositeReceiveFileJob extends BackgroundJob<Device, Void> {
private long prevProgressPercentage;
private final Object lock; //Use to protect concurrent access to the variables below
@GuardedBy("lock")
private final List<NetworkPacket> networkPacketList;
@GuardedBy("lock")
private int totalNumFiles;
@GuardedBy("lock")
private long totalPayloadSize;
private boolean isRunning;
@@ -128,7 +149,7 @@ public class CompositeReceiveFileJob extends BackgroundJob<Device, Void> {
setProgress((int)prevProgressPercentage);
fileDocument = getDocumentFileFor(currentFileName, currentNetworkPacket.getBoolean("open"));
fileDocument = getDocumentFileFor(currentFileName, currentNetworkPacket.getBoolean("open", false));
if (currentNetworkPacket.hasPayload()) {
outputStream = new BufferedOutputStream(getDevice().getContext().getContentResolver().openOutputStream(fileDocument.getUri()));

View File

@@ -31,8 +31,28 @@ import org.kde.kdeconnect_tp.R;
import java.util.ArrayList;
import java.util.List;
import androidx.annotation.GuardedBy;
import androidx.annotation.NonNull;
/**
* A type of {@link BackgroundJob} that sends Files to another device.
*
* <p>
* We represent the individual upload requests as {@link NetworkPacket}s.
* </p>
* <p>
* Each packet should have a 'filename' property and a payload. If the payload is
* missing, we'll just send an empty file. You can add new packets anytime via
* {@link #addNetworkPacket(NetworkPacket)}.
* </p>
* <p>
* The I/O-part of this file sending is handled by
* {@link Device#sendPacketBlocking(NetworkPacket, Device.SendPacketStatusCallback)}.
* </p>
*
* @see CompositeReceiveFileJob
* @see SendPacketStatusCallback
*/
public class CompositeUploadFileJob extends BackgroundJob<Device, Void> {
private boolean isRunning;
private Handler handler;
@@ -44,10 +64,13 @@ public class CompositeUploadFileJob extends BackgroundJob<Device, Void> {
private UploadNotification uploadNotification;
private final Object lock; //Use to protect concurrent access to the variables below
@GuardedBy("lock")
private final List<NetworkPacket> networkPacketList;
private NetworkPacket currentNetworkPacket;
private final Device.SendPacketStatusCallback sendPacketStatusCallback;
@GuardedBy("lock")
private int totalNumFiles;
@GuardedBy("lock")
private long totalPayloadSize;
CompositeUploadFileJob(@NonNull Device device, @NonNull Callback<Void> callback) {
@@ -169,6 +192,9 @@ public class CompositeUploadFileJob extends BackgroundJob<Device, Void> {
}
}
/**
* Use this to send metadata ahead of all the other {@link #networkPacketList packets}.
*/
private void sendUpdatePacket() {
NetworkPacket np = new NetworkPacket(SharePlugin.PACKET_TYPE_SHARE_REQUEST_UPDATE);

View File

@@ -153,7 +153,6 @@ public class ShareActivity extends AppCompatActivity {
});
} else {
BackgroundService.addGuiInUseCounter(this);
BackgroundService.RunCommand(this, service -> {
service.onNetworkChange();
service.addDeviceListChangedCallback("ShareActivity", this::updateComputerList);
@@ -166,7 +165,6 @@ public class ShareActivity extends AppCompatActivity {
@Override
protected void onStop() {
BackgroundService.RunCommand(this, service -> service.removeDeviceListChangedCallback("ShareActivity"));
BackgroundService.removeGuiInUseCounter(this);
super.onStop();
}

View File

@@ -49,6 +49,13 @@ import androidx.annotation.NonNull;
import androidx.annotation.WorkerThread;
import androidx.core.content.ContextCompat;
/**
* A Plugin for sharing and receiving files and uris.
* <p>
* All of the associated I/O work is scheduled on background
* threads by {@link BackgroundJobHandler}.
* </p>
*/
@PluginFactory.LoadablePlugin
public class SharePlugin extends Plugin {
final static String ACTION_CANCEL_SHARE = "org.kde.kdeconnect.Plugins.SharePlugin.CancelShare";
@@ -178,9 +185,9 @@ public class SharePlugin extends Plugin {
CompositeReceiveFileJob job;
boolean hasNumberOfFiles = np.has(KEY_NUMBER_OF_FILES);
boolean hasOpen = np.has("open");
boolean isOpen = np.getBoolean("open", false);
if (hasNumberOfFiles && !hasOpen && receiveFileJob != null) {
if (hasNumberOfFiles && !isOpen && receiveFileJob != null) {
job = receiveFileJob;
} else {
job = new CompositeReceiveFileJob(device, receiveFileJobCallback);
@@ -194,7 +201,7 @@ public class SharePlugin extends Plugin {
job.addNetworkPacket(np);
if (job != receiveFileJob) {
if (hasNumberOfFiles && !hasOpen) {
if (hasNumberOfFiles && !isOpen) {
receiveFileJob = job;
}
backgroundJobHandler.runJob(job);

View File

@@ -123,10 +123,9 @@ public class TelephonyPlugin extends Plugin {
return;
String number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
final int finalIntState = intState;
if (finalIntState != lastState) {
callBroadcastReceived(finalIntState, number);
if (intState != lastState) {
lastState = intState;
callBroadcastReceived(intState, number);
}
}
}
@@ -213,7 +212,7 @@ public class TelephonyPlugin extends Plugin {
}
//Emit a missed call notification if needed
if (lastState == TelephonyManager.CALL_STATE_RINGING) {
if ("ringing".equals(lastPacket.getString("event", null))) {
np.set("event", "missedCall");
np.set("phoneNumber", lastPacket.getString("phoneNumber", null));
np.set("contactName", lastPacket.getString("contactName", null));
@@ -224,7 +223,6 @@ public class TelephonyPlugin extends Plugin {
}
lastPacket = np;
lastState = state;
}
private void unmuteRinger() {

View File

@@ -127,18 +127,5 @@ public abstract class AppCompatPreferenceActivity extends PreferenceActivity {
return mDelegate;
}
@Override
protected void onStart() {
super.onStart();
BackgroundService.addGuiInUseCounter(this);
}
@Override
protected void onStop() {
super.onStop();
BackgroundService.removeGuiInUseCounter(this);
getDelegate().onStop();
}
}

View File

@@ -167,18 +167,6 @@ public class CustomDevicesActivity extends AppCompatActivity implements CustomDe
return deserializeIpList(deviceListPrefs);
}
@Override
protected void onStart() {
super.onStart();
BackgroundService.addGuiInUseCounter(this);
}
@Override
protected void onStop() {
super.onStop();
BackgroundService.removeGuiInUseCounter(this);
}
@Override
public void onCustomDeviceClicked(String customDevice) {
editingDeviceAtPosition = customDeviceList.indexOf(customDevice);

View File

@@ -41,20 +41,17 @@ import androidx.fragment.app.Fragment;
import org.kde.kdeconnect.BackgroundService;
import org.kde.kdeconnect.Device;
import org.kde.kdeconnect.Helpers.NetworkHelper;
import org.kde.kdeconnect.Helpers.SecurityHelpers.SslHelper;
import org.kde.kdeconnect.Plugins.Plugin;
import org.kde.kdeconnect.UserInterface.List.PluginListHeaderItem;
import org.kde.kdeconnect.UserInterface.List.FailedPluginListItem;
import org.kde.kdeconnect.UserInterface.List.ListAdapter;
import org.kde.kdeconnect.UserInterface.List.PluginItem;
import org.kde.kdeconnect.UserInterface.List.SmallEntryItem;
import org.kde.kdeconnect_tp.R;
import java.util.ArrayList;
import java.util.Collection;
import java.util.ConcurrentModificationException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import butterknife.BindView;
@@ -90,7 +87,6 @@ public class DeviceFragment extends Fragment {
@BindView(R.id.pair_request_buttons) View pairRequestButtons;
@BindView(R.id.error_message_container) View errorMessageContainer;
@BindView(R.id.not_reachable_message) TextView notReachableMessage;
@BindView(R.id.on_data_message) TextView onDataMessage;
@BindView(R.id.buttons_list) ListView buttonsList;
private Unbinder unbinder;
@@ -249,7 +245,7 @@ public class DeviceFragment extends Fragment {
builder.setMessage(context.getResources().getString(R.string.my_device_fingerprint) + "\n" + SslHelper.getCertificateHash(SslHelper.certificate) + "\n\n"
+ context.getResources().getString(R.string.remote_device_fingerprint) + "\n" + SslHelper.getCertificateHash(device.certificate));
}
builder.create().show();
builder.show();
return true;
});
}
@@ -310,12 +306,10 @@ public class DeviceFragment extends Fragment {
boolean paired = device.isPaired();
boolean reachable = device.isReachable();
boolean onData = NetworkHelper.isOnMobileNetwork(DeviceFragment.this.getContext());
pairingButtons.setVisibility(paired ? View.GONE : View.VISIBLE);
errorMessageContainer.setVisibility((paired && !reachable) ? View.VISIBLE : View.GONE);
notReachableMessage.setVisibility((paired && !reachable && !onData) ? View.VISIBLE : View.GONE);
onDataMessage.setVisibility((paired && !reachable && onData) ? View.VISIBLE : View.GONE);
notReachableMessage.setVisibility((paired && !reachable) ? View.VISIBLE : View.GONE);
try {
pluginListItems = new ArrayList<>();

Some files were not shown because too many files have changed in this diff Show More