Compare commits

...
94 Commits
Author SHA1 Message Date
Markus Fisch 180339269f Advance version number to 1.61.2 2023-11-22 19:16:16 +01:00
v72807647andGitHub 49af17cba8 Fix quick setting tile failed to launch on Android 14
SDK 34 deprecates startActivityAndCollapse(Intent), making it
throws an UnsupportedOperationException on Android 14 devices
instead of launching the app.

Added new function call for API 34, tested with Android 14 and
Android 9 devices.
2023-11-22 09:24:30 +01:00
Markus Fisch a03a187d2d Escape apostrophes in french translation
Apostrophe characters need to be escaped in XML.
2023-11-20 10:55:29 +01:00
solokotandGitHub 84806e70d7 Update Russian translation 2023-11-20 10:09:02 +01:00
NathanandGitHub 058de5a141 Update french locale 2023-11-18 12:28:07 +01:00
Kryštof ČernýandGitHub d330fbd195 Update CZ translation 2023-11-16 13:45:59 +01:00
Markus Fisch f5bc6f664f Fix Xiaomi MIUI lockscreen barcode shortcut 2023-11-15 22:07:50 +01:00
Markus Fisch 464279807c Advance version number to 1.61.1 2023-11-14 23:10:09 +01:00
Markus Fisch f7e5ef473a Add menu item to share scanned contents as a file
Because when sharing plain text via Bluetooth, Android explicitly
converts anything to HTML, which is not always what we want.

Details here:
https://stackoverflow.com/q/29907030

This feature is also useful to share binary contents more easily.
2023-11-13 20:26:31 +01:00
Markus Fisch ff733ef59e Fix opening recreated barcodes with binary content
Use the raw bytes not only for the recreated image but also
when opening the barcode in BarcodeFragment.
2023-11-10 21:16:05 +01:00
Markus Fisch 35b110a472 Fix key of general format restriction preference
Makes this setting have an effect again.

I somehow forgot to update the keys in the XMLs as well.
2023-11-08 20:41:32 +01:00
Markus Fisch 58eabf4754 Update to SDK 34 2023-11-01 18:12:57 +01:00
Markus Fisch 1f273a48a5 Catch IAE when parsing a WIFI configuration
Because some arguments may be out of range.

For example, SSIDs cannot be longer than 32 characters in some
versions of Android.

See: https://github.com/markusfisch/BinaryEye/issues/402
2023-10-29 13:53:58 +01:00
solokotandGitHub 785a64725d Update Russian translation 2023-10-24 08:56:32 +02:00
Markus Fisch 7a42e1de73 Recreate binary barcodes too
Since this is easily possible now.
2023-10-23 21:11:01 +02:00
7heMechandGitHub 9856ab7b6b Add Bulgarian translation and Brave search engine 2023-10-20 14:14:36 +02:00
Markus Fisch 746ff143d8 Advance version number to 1.61.0 2023-10-13 23:49:38 +02:00
Markus Fisch b0d4d94973 Add test for a VCARD with an explicit TYPE
And make the other tests fail if null was returned.
2023-10-13 21:11:22 +02:00
Markus Fisch c604ad5ef2 Fix type regex for VCARDs
The previous regex captured just the first letter of the type argument
because it was modified to be not greedy.
2023-10-13 21:08:01 +02:00
Markus Fisch 91c2b324ac Refactor pick_file to pick_image_file
And use `pick_file` to pick any file, not just an image.
2023-10-12 22:23:27 +02:00
Markus Fisch df59fd7446 Update Kotlin and coroutines library version 2023-10-12 22:15:19 +02:00
Markus Fisch 449fd1f26c Limit read binary data for encoding
And use just the first 4096 bytes, which is way too optimistic
as there is no barcode format available that can save that much
data.

This is just to avoid an OutOfMemoryError. Maybe it's better to
just show an error message for files that are too big?
2023-10-13 13:16:24 +02:00
Markus Fisch 72d839c6e2 Support encoding binary data from a file
So binary data can finally be re-encoded too.
2023-10-13 12:48:13 +02:00
Markus Fisch ab8c993a81 Add padding for spinners on encode fragment
Enlarges the touch area and makes the spinners easier to use.
2023-10-13 11:47:36 +02:00
Markus Fisch 5f5bd913d6 Move content EditText to the top
As this is probably the most important input field.
2023-10-13 11:47:36 +02:00
Markus Fisch 92fe4dd55f Reformat code with Android Studio
And apply the latest style changes.
2023-10-12 20:32:01 +02:00
Markus Fisch dab95176f0 Remember last selected margin for generation
More convenient.

Maybe we should store these settings for each barcode format.
2023-10-12 20:29:23 +02:00
Markus Fisch 650503ba70 Update camera library to latest version 2023-10-08 20:17:58 +02:00
solokotandGitHub 61078f214e Update Russian translation 2023-10-02 13:33:45 +02:00
Markus Fisch a4b639edfe Add margin parameter for encoding barcodes 2023-09-20 13:46:34 +02:00
Markus Fisch f37878dbb8 Replace toUpperCase() with uppercase()
Because toUpperCase(Locale) is deprecated.
2023-09-19 22:19:35 +02:00
Markus Fisch 10fde7c3d6 Add intent for MIUI fingerprint shortcut
So it's possible to start BinaryEye from the MIUI of Xiaomi devices.
2023-09-19 14:46:34 +02:00
Markus Fisch a098fcb48c Always save and use rawBytes from ZXingCpp
If available.

Because the text member may already be UTF-8 encoded, and this
cannot simply be converted back into a byte array for the hex dump.

So for ContentType.GS1, ContentType.ISO15434 and ContentType.TEXT
there could be inconsistencies between the displayed content and the
hex dump, because the latter was generated from the (already encoded)
content.
2023-09-15 19:08:29 +02:00
m_s_andMarkus Fisch f162977640 Update Brazilian Portuguese translation 2023-09-03 20:18:50 +02:00
Oleg KoretskyandGitHub 66cab58d7b Fix missing Copy button for binary QRs 2023-08-31 13:54:29 +02:00
John VenessandGitHub e99e2d7dcc Update English strings 2023-08-20 11:23:53 +02:00
Sergiy StuparandGitHub 9045a27a5d Update Ukrainian translation 2023-08-14 12:00:14 +02:00
Markus Fisch 9e1208c72b Update ZXing C++ wrapper 2023-08-13 19:09:32 +02:00
Markus Fisch 90410f232a Update Kotlin version 2023-08-13 18:09:29 +02:00
ddarfantasyandGitHub 6769fa7e37 Update zh-CN translation 2023-08-13 17:50:26 +02:00
Markus Fisch 72444f5081 Update ZXing C++ wrapper 2023-07-06 12:40:12 +02:00
Markus Fisch 9a3ca4ffa3 Update ZXing C++ wrapper 2023-05-20 14:24:34 +02:00
Markus Fisch f572923720 Add changelog for latest version for f-droid 2023-05-19 18:57:15 +02:00
Markus Fisch 4971f58f44 Advance version number to 1.60.3 2023-05-19 18:55:49 +02:00
m_s_andMarkus Fisch 0bf24080a8 Update Brazilian Portuguese translation 2023-05-19 18:49:51 +02:00
Markus Fisch 04a21f71ef Update Kotlin version 2023-05-11 20:37:39 +02:00
Unknownman820andGitHub e22a215863 Update Chinese translation 2023-05-04 12:10:51 +02:00
Markus Fisch 881829e7b2 Fix saving custom language
This preference needs to be committed so it is written to disk
immediately.

Otherwise the app will restart before this preference is presisted.
2023-05-03 20:48:40 +02:00
Kryštof ČernýandGitHub 2ad261f3b6 Update Czech localisation 2023-05-01 19:25:05 +02:00
Kryštof ČernýandGitHub e0fdda78b3 Fix library name in en-US/full_description.txt 2023-05-01 19:24:42 +02:00
solokotandGitHub 9c3710c56d Update Russian translation 2023-04-28 12:11:22 +02:00
bovirusandGitHub ddcab46d47 Update Italian language 2023-04-25 21:20:15 +02:00
Markus Fisch 076da26075 Advance version number to 1.60.2 2023-04-25 19:28:27 +02:00
Markus Fisch dbc37714f9 Remember checkbox state for unescaping input 2023-04-24 23:22:00 +02:00
Markus Fisch 50e57eaf25 Expand escape sequences in encoding input
So escape sequences can be used when encoding a barcode.
2023-04-24 23:14:58 +02:00
Markus Fisch 340f7f9d1d Remove lateinit for BT members
And use safe calls (?.) instead of catching the NullPointerException.

If something can be null, we should use the appropriate type for it
to make things explicit.
2023-04-19 21:13:05 +02:00
Unknownman820andGitHub a42bd793bb Update Taiwan translation 2023-04-04 08:56:49 +02:00
KamaleiZestriandGitHub 6e531f5395 Fix crash when not connected to a Bluetooth server 2023-03-29 12:06:20 +02:00
Markus Fisch 79b3fddcf8 Set BT results from return values
So the result variables can be immutable.

And use simpler terms for their names to make this easier to
read and understand.
2023-03-28 21:28:22 +02:00
Markus Fisch 09f3c8f193 Use "when" instead of "if/else"
More Kotlin idiomatic.

Also use full words instead of abbreviations for clarity.
2023-03-28 21:26:37 +02:00
Markus Fisch 5f82f216fd Advance version number to 1.60.1 2023-03-27 22:11:43 +02:00
Markus Fisch 8424e3ea31 Add Bluetooth permissions to PRIVACY
And explain why these are required.
2023-03-27 22:05:31 +02:00
Markus Fisch 15ce34aa92 Add legacy Bluetooth permissions for SDK < 12
According to the docs, BLUETOOTH and BLUETOOTH_ADMIN are required
for Android versions below SDK 31.

See:
https://developer.android.com/guide/topics/connectivity/bluetooth/permissions
2023-03-27 22:02:09 +02:00
Markus Fisch 8dfc1e37c0 Assign sendScanBluetooth properly
getBoolean() returns the current value.
2023-03-27 21:41:42 +02:00
Markus Fisch a0d3b7ba87 Catch SecurityExc when BT permission is missing
Make sure not to crash the app because the bluetooth permission is
missing. The app should gracefully handle this situation. It's
perfectly okay when the app doesn't have the permission to use
bluetooth. This is really a very niche use-case.
2023-03-27 19:04:39 +02:00
Markus Fisch a234dc3a9a Only ask for BT permission on activation
Doesn't make sense to ask for permssion when we deactivate bluetooth.

Also simplify this code a bit.
2023-03-27 19:04:39 +02:00
Markus Fisch a00f70e25b Check bluetooth permission before using API
Without this check, the app will crash as soon as the PreferencesFragment
is initialized when the user didn't already grant Bluetooth permission.

Always make sure to check the permissions.
2023-03-27 21:17:30 +02:00
Markus Fisch ef555c0153 Disable bluetooth sending by default
This is a pretty niche use-case and so it should be disabled by
default. Especially because it requires runtime permissions.
2023-03-27 21:14:37 +02:00
Markus Fisch 9fffb53f73 Remove stray character from Italian translation 2023-03-16 23:05:13 +01:00
bovirusandGitHub b82c6200c0 Update italian language 2023-03-16 23:03:16 +01:00
solokotandGitHub 5bb347c392 Update Russian translation 2023-03-16 18:34:30 +01:00
bovirusandGitHub f8033614fa Update italian language 2023-03-16 00:23:21 +01:00
Markus Fisch 46cc2fb1a1 Make showResult an extension of Activity
And remove all the "activity." prefixes.
2023-03-15 20:57:10 +01:00
Markus Fisch f2ac1e77bb Update gradle wrapper 2023-03-15 20:53:18 +01:00
Markus Fisch 89c84880c6 Update Kotlin version 2023-03-15 20:52:58 +01:00
Markus Fisch 352fe07850 Remove useless class wrapping for BluetoothSender
Since all members and properties are static so it's more idiomatic
to make them simple top-level functions.
2023-03-15 20:51:38 +01:00
Markus Fisch 00abe33314 Add new string resources to translations
Otherwise lint will fail.
2023-03-15 20:37:30 +01:00
Markus Fisch 142df25d7e Only check BLUETOOTH_CONNECT on Android S+
This symbol doesn't exist before Android S.
2023-03-15 20:31:01 +01:00
Markus Fisch 021d775835 Clean up new additions
Fix indent, apply auto format, remove commented out code, etc.
2023-03-15 20:29:44 +01:00
KamaleiZestriandGitHub 06df0c4d64 Support sending scans via bluetooth
Makes it possible to send scanned codes to a bluetooth device.

Should work with any bluetooth receiver that shares it's UUID
of "8a8478c9-2ca8-404b-a0de-101f34ab71ae".
2023-03-15 12:09:06 +01:00
Markus Fisch 32c70af812 Remove plural for one for Korean translation
Because lint tells me it's not required for Korean.
2023-03-01 21:42:10 +01:00
Markus Fisch 7cc1777e7a Add barcode_info plurals for polish translation
With the default strings, silly enough.

Otherwise Lint will throw an error (!) because these plurals
are missing.

Now, I doubt I will ever meet the person who thought it would
be wise to throw an error if a plurals tag is missing in a
translation, but I sure hope this person will learn to make
better decisions some day.
2023-03-01 21:36:45 +01:00
Anthony RyanandGitHub 23e0564594 Losslessly compress PNG images
Using Efficient-Compression-Tool we can reduce the size by 254.17KB (15.8405%)
without changing visual appearance.
2023-03-01 21:29:50 +01:00
Markus Fisch 0447384bea Update tools and gradle wrapper 2023-03-01 12:09:59 +01:00
Markus Fisch b4d66e28e2 Fix resolving EC level letter for recreation
While ZXing C++ reports the QR Code error correction level with four
letters (following the spec), it expects the level for encoding as an
integer in a range from 0 to 8.
2023-02-28 21:09:52 +01:00
Markus Fisch ee1c56d99f Update ZXing C++ wrapper 2023-02-23 20:03:04 +01:00
Markus Fisch 33ef78443e Advance version number to 1.59.0 2023-02-22 18:37:57 +01:00
Markus Fisch 9f1e34b06d Add setting error correction for AZTEC/PDF417 too
Because ZXing C++ supports setting an error correction level for
these formats too.
2023-02-20 20:04:01 +01:00
Markus Fisch 24766f55d4 Fix setting error correction level for QR Codes
ZXing C++ expects the error correction level to be in a range from
0 to 8, so the four possible values for QR codes need to be translated
into this range.
2023-02-19 18:59:11 +01:00
Markus Fisch 0ae7d080e3 Add missing changelogs for F-Droid 2023-02-09 22:22:05 +01:00
Markus Fisch 7d8c6016db Optimize monochrome launcher icon with avocado 2023-02-09 22:19:37 +01:00
KamaleiZestriandGitHub 3d923035e3 Follow beep settings for error beeps too 2023-02-06 10:18:52 +01:00
Markus Fisch a489f3aa22 Remove finishing string resource
And show the more generic `camera_error` message instead.

This message makes no sense anymore now that the app isn't
finished.
2023-02-05 20:30:55 +01:00
Markus Fisch 7dfd7a1303 Remove finishing activity if camera is unavailable
While the camera is the main feature of the camera acitvity,
there are other features that are still useful even if the
camera is not available.

So it's better not automatically finish the camera activity
but let the user decide.
2023-02-05 18:03:32 +01:00
146 changed files with 2031 additions and 571 deletions
+50
View File
@@ -1,5 +1,55 @@
# Change Log
## 1.61.2
* Fix quick settings tile for Android 14
* Fix Xiaomi MIUI lockscreen barcode shortcut
* Update French translation
* Update Czech translation
* Update Russian translation
## 1.61.1
* Share scanned contents as a file
* Recreate binary barcodes too
* Add Bulgarian translation and Brave search engine
* Update Russian translation
* Fix general format restriction from preferences
## 1.61.0
* Support encoding binary data
* Add margin parameter for encoding
* Add copying binary data as hex dump
* Fix parsing TYPE argument in VCARDs
* Update Russian translation
* Update Brazilian Portuguese translation
* Update Ukrainian translation
* Update Chinese translation
## 1.60.3
* Fix saving custom language
* Update Brazilian Portuguese translation
* Update Chinese translation
* Update Czech localisation
* Update Russian translation
* Update Italian language
## 1.60.2
* Expand escape sequences in encoding input
* Update Taiwan translation
## 1.60.1
* Support sending scans via bluetooth
* Fix resolving error correction level for recreation
* Improve asset image compression
* Update ZXing C++
* Update Italian translation
* Update Russian translation
## 1.59.0
* Add setting error correction for AZTEC/PDF417
* Fix setting error correction level for QR Codes
* Make error beeps follow beep settings too
* Don't close the app when cameras is unavailable
## 1.58.2
* Fix parsing WiFi network suggestions
+5
View File
@@ -33,6 +33,11 @@ testurl:
-c android.intent.category.BROWSABLE \
-d 'http://markusfisch.de/BinaryEye?ret=http%3A%2F%2Fmarkusfisch.de%2F%3Fresult%3D{RESULT}'
testxiaomi:
adb shell am start -a android.intent.action.VIEW \
-c android.intent.category.BROWSABLE \
-d 'market://details?id=com.xiaomi.scanner'
install:
adb $(TARGET) install -r app/build/outputs/apk/debug/app-debug.apk
+10
View File
@@ -17,6 +17,13 @@ which requires `ACCESS_FINE_LOCATION`.
On Android Q an better, this permission is not requested nor required.
### [BLUETOOTH][BLUETOOTH], [BLUETOOTH_ADMIN][BLUETOOTH_ADMIN] and [BLUETOOTH_CONNECT][BLUETOOTH_CONNECT]
Required to optionally forward scans to a Bluetooth device.
[BLUETOOTH][BLUETOOTH] and [BLUETOOTH_ADMIN][BLUETOOTH_ADMIN] are required
before Android S. [BLUETOOTH_CONNECT][BLUETOOTH_CONNECT] from Android S on.
### [CAMERA][CAMERA]
Required to read a barcode from the camera image.
@@ -54,6 +61,9 @@ From Android R, `ACCESS_WIFI_STATE` is required for
which is used to remove individual network suggestions.
[ACCESS_FINE_LOCATION]: https://developer.android.com/reference/android/Manifest.permission#ACCESS_FINE_LOCATION
[BLUETOOTH]: https://developer.android.com/reference/android/Manifest.permission#BLUETOOTH
[BLUETOOTH_ADMIN]: https://developer.android.com/reference/android/Manifest.permission#BLUETOOTH_ADMIN
[BLUETOOTH_CONNECT]: https://developer.android.com/reference/android/Manifest.permission#BLUETOOTH_CONNECT
[CAMERA]: https://developer.android.com/reference/android/Manifest.permission#CAMERA
[INTERNET]: https://developer.android.com/reference/android/Manifest.permission#INTERNET
[VIBRATE]: https://developer.android.com/reference/android/Manifest.permission#VIBRATE
+5 -6
View File
@@ -4,13 +4,12 @@ apply plugin: 'kotlin-android'
android {
namespace 'de.markusfisch.android.binaryeye'
compileSdkVersion sdk_version
defaultConfig {
minSdkVersion 9
targetSdkVersion sdk_version
versionCode 115
versionName '1.58.2'
versionCode 123
versionName '1.61.2'
}
signingConfigs {
@@ -59,12 +58,12 @@ dependencies {
testImplementation 'junit:junit:4.13.2'
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4"
implementation "com.android.support:appcompat-v7:$support_version"
implementation "com.android.support:design:$support_version"
implementation "com.android.support:preference-v7:$support_version"
implementation "com.android.support:preference-v14:$support_version"
implementation 'com.github.markusfisch:CameraView:1.9.1'
implementation 'com.github.markusfisch:CameraView:1.9.2'
implementation 'com.github.markusfisch:ScalingImageView:1.4.1'
implementation 'com.github.markusfisch:zxing-cpp:v2.0.0.0'
implementation 'com.github.markusfisch:zxing-cpp:v2.1.0.2'
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

+12
View File
@@ -6,6 +6,11 @@
android:xlargeScreens="true"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
android:maxSdkVersion="28"/>
<uses-permission android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30"/>
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.VIBRATE"/>
@@ -63,6 +68,13 @@
<action android:name="com.google.zxing.client.android.SCAN"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:host="details" android:scheme="market"
android:pathSuffix="id=com.xiaomi.scanner"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
@@ -1,6 +1,6 @@
package de.markusfisch.android.binaryeye.actions.vtype
import java.util.*
import java.util.Locale
object VTypeParser {
private const val BACKSLASH_R_LEGACY =
@@ -39,6 +39,6 @@ data class VTypeProperty(
} ?: this.info.firstOrNull()
companion object {
private val typeRegex = """^(?:TYPE=)(.+?)[:;]?.*$""".toRegex(RegexOption.IGNORE_CASE)
private val typeRegex = """^TYPE=([A-Z_]+)[:;]?.*$""".toRegex(RegexOption.IGNORE_CASE)
}
}
@@ -8,7 +8,7 @@ import android.provider.ContactsContract
import de.markusfisch.android.binaryeye.R
import de.markusfisch.android.binaryeye.actions.IntentAction
import de.markusfisch.android.binaryeye.actions.vtype.VTypeParser
import java.util.*
import java.util.Locale
object VCardAction : IntentAction() {
override val iconResId: Int
@@ -45,10 +45,13 @@ object VCardAction : IntentAction() {
val (extraPhoneType, extraPhone) = when (index) {
0 -> ContactsContract.Intents.Insert.PHONE_TYPE to
ContactsContract.Intents.Insert.PHONE
1 -> ContactsContract.Intents.Insert.SECONDARY_PHONE_TYPE to
ContactsContract.Intents.Insert.SECONDARY_PHONE
2 -> ContactsContract.Intents.Insert.TERTIARY_PHONE_TYPE to
ContactsContract.Intents.Insert.TERTIARY_PHONE_TYPE
else -> return@forEachIndexed
}
phoneProperty.firstTypeOrFirstInfo?.also {
@@ -65,10 +68,13 @@ object VCardAction : IntentAction() {
val (extraMailType, extraMail) = when (index) {
0 -> ContactsContract.Intents.Insert.EMAIL_TYPE to
ContactsContract.Intents.Insert.EMAIL
1 -> ContactsContract.Intents.Insert.SECONDARY_EMAIL_TYPE to
ContactsContract.Intents.Insert.SECONDARY_EMAIL
2 -> ContactsContract.Intents.Insert.TERTIARY_EMAIL_TYPE to
ContactsContract.Intents.Insert.TERTIARY_EMAIL
else -> return@forEachIndexed
}
mailProperty.firstTypeOrFirstInfo?.also {
@@ -184,7 +190,7 @@ object VCardAction : IntentAction() {
}
private val String.addressType: Int?
get() = when (this.toUpperCase(Locale.US)) {
get() = when (this.uppercase()) {
"HOME" -> ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME
"WORK" -> ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK
"OTHER" -> ContactsContract.CommonDataKinds.StructuredPostal.TYPE_OTHER
@@ -22,10 +22,9 @@ object WifiAction : IAction {
context: Context,
data: ByteArray
) = withContext(Dispatchers.IO) {
val wifiConfig = WifiConnector.parse(
String(data)
) ?: return@withContext
val message = WifiConnector.addNetwork(context, wifiConfig)
val message = WifiConnector.parse(String(data))?.let {
WifiConnector.addNetwork(context, it)
} ?: R.string.wifi_config_failed
withContext(Dispatchers.Main) {
context.toast(message)
}
@@ -44,14 +44,21 @@ object WifiConnector {
passwordBlock?.apply {
invoke(parsedData.password)
}
return if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) {
// WifiConfiguration is deprecated in Android Q but
// because it's only possible in R to query network
// suggestions, we still use the deprecated API on Q.
@Suppress("DEPRECATION")
WifiConfiguration().apply(parsedData)
} else {
WifiNetworkSuggestion.Builder().apply(parsedData)
return try {
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) {
// WifiConfiguration is deprecated in Android Q but
// because it's only possible in R to query network
// suggestions, we still use the deprecated API on Q.
@Suppress("DEPRECATION")
WifiConfiguration().apply(parsedData)
} else {
WifiNetworkSuggestion.Builder().apply(parsedData)
}
} catch (e: IllegalArgumentException) {
// Some arguments may be out of range, e.g. SSIDs cannot
// be longer than 32 characters in some versions of Android.
// See: https://github.com/markusfisch/BinaryEye/issues/402
null
}
}
@@ -169,6 +176,7 @@ object WifiConnector {
"WPA", "WPA2" -> {
data.password?.let { setWpa2Passphrase(it) }
}
"WPA2-EAP" -> {
setWpa2EnterpriseConfig(WifiEnterpriseConfig().apply {
identity = data.identity
@@ -178,9 +186,11 @@ object WifiConnector {
data.phase2Method?.let { phase2Method = it }
})
}
"WPA3" -> {
data.password?.let { setWpa3Passphrase(it) }
}
"WPA3-EAP" -> {
setWpa3EnterpriseConfig(WifiEnterpriseConfig().apply {
identity = data.identity
@@ -240,6 +250,7 @@ object WifiConnector {
allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40)
allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104)
}
"WPA" -> {
passwordWithQuotes?.let {
preSharedKey = it
@@ -256,6 +267,7 @@ object WifiConnector {
allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP)
allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP)
}
"WPA2-EAP" -> requireSdk(Build.VERSION_CODES.JELLY_BEAN_MR2) {
passwordWithQuotes?.let {
preSharedKey = it
@@ -314,7 +326,7 @@ private fun String.trimAndTerminate(): String {
// for special chars.
private val escapedRegex = """\\([\\;,":])""".toRegex()
private val String.unescape: String
get() = this.replace(escapedRegex) { escaped ->
get() = replace(escapedRegex) { escaped ->
escaped.groupValues[1]
}
@@ -21,6 +21,7 @@ import android.widget.SeekBar
import de.markusfisch.android.binaryeye.R
import de.markusfisch.android.binaryeye.adapter.prettifyFormatName
import de.markusfisch.android.binaryeye.app.*
import de.markusfisch.android.binaryeye.bluetooth.sendBluetoothAsync
import de.markusfisch.android.binaryeye.content.copyToClipboard
import de.markusfisch.android.binaryeye.content.execShareIntent
import de.markusfisch.android.binaryeye.content.openUrl
@@ -43,9 +44,7 @@ import de.markusfisch.android.cameraview.widget.CameraView
import de.markusfisch.android.zxingcpp.ZxingCpp
import de.markusfisch.android.zxingcpp.ZxingCpp.Binarizer
import de.markusfisch.android.zxingcpp.ZxingCpp.DecodeHints
import de.markusfisch.android.zxingcpp.ZxingCpp.Format
import de.markusfisch.android.zxingcpp.ZxingCpp.Result
import java.nio.charset.Charset
import kotlin.math.max
import kotlin.math.min
import kotlin.math.roundToInt
@@ -80,8 +79,7 @@ class CameraActivity : AppCompatActivity() {
PERMISSION_CAMERA -> if (grantResults.isNotEmpty() &&
grantResults[0] != PackageManager.PERMISSION_GRANTED
) {
toast(R.string.no_camera_no_fun)
finish()
toast(R.string.camera_error)
}
}
}
@@ -177,6 +175,7 @@ class CameraActivity : AppCompatActivity() {
intent?.action == "com.google.zxing.client.android.SCAN" -> {
returnResult = true
}
intent?.dataString?.isReturnUrl() == true -> {
finishAfterShowingResult = true
returnUrlTemplate = intent.data?.getQueryParameter("ret")
@@ -245,44 +244,52 @@ class CameraActivity : AppCompatActivity() {
createBarcode()
true
}
R.id.history -> {
startActivity(MainActivity.getHistoryIntent(this))
true
}
R.id.pick_file -> {
startActivityForResult(
Intent.createChooser(
Intent(Intent.ACTION_GET_CONTENT).apply {
type = "image/*"
},
getString(R.string.pick_file)
getString(R.string.pick_image_file)
),
PICK_FILE_RESULT_CODE
)
true
}
R.id.switch_camera -> {
switchCamera()
true
}
R.id.bulk_mode -> {
bulkMode = bulkMode xor true
item.isChecked = bulkMode
ignoreNext = null
true
}
R.id.restrict_format -> {
showRestrictionDialog()
true
}
R.id.preferences -> {
startActivity(MainActivity.getPreferencesIntent(this))
true
}
R.id.info -> {
openReadme()
true
}
else -> super.onOptionsItemSelected(item)
}
}
@@ -351,6 +358,7 @@ class CameraActivity : AppCompatActivity() {
progress = zoomBar.progress
return true
}
MotionEvent.ACTION_MOVE -> {
if (prefs.zoomBySwiping) {
v ?: return false
@@ -364,6 +372,7 @@ class CameraActivity : AppCompatActivity() {
return true
}
}
MotionEvent.ACTION_UP -> {
// Stop calling focusTo() as soon as it returns false
// to avoid throwing and catching future exceptions.
@@ -411,7 +420,6 @@ class CameraActivity : AppCompatActivity() {
override fun onCameraError() {
this@CameraActivity.toast(R.string.camera_error)
finish()
}
override fun onCameraReady(camera: Camera) {
@@ -428,7 +436,8 @@ class CameraActivity : AppCompatActivity() {
tryHarder = prefs.tryHarder,
tryRotate = prefs.autoRotate,
tryInvert = true,
tryDownscale = true
tryDownscale = true,
maxNumberOfSymbols = 1
)
var useLocalAverage = false
camera.setPreviewCallback { frameData, _ ->
@@ -451,7 +460,8 @@ class CameraActivity : AppCompatActivity() {
}
formats = formatsToRead.joinToString()
}
)?.let { result ->
)?.let { results ->
val result = results.first()
if (result.text != ignoreNext) {
postResult(result)
decoding = false
@@ -589,15 +599,13 @@ class CameraActivity : AppCompatActivity() {
setResult(Activity.RESULT_OK, getReturnIntent(result))
finish()
}
returnUri != null -> execShareIntent(
Intent(Intent.ACTION_VIEW, returnUri)
)
else -> {
showResult(
this@CameraActivity,
result,
bulkMode
)
showResult(result, bulkMode)
// If this app was invoked via a deep link but without
// a return URI, we probably don't want to return to
// the camera screen after scanning, but to the caller.
@@ -630,13 +638,12 @@ class CameraActivity : AppCompatActivity() {
}
}
fun showResult(
activity: Activity,
fun Activity.showResult(
result: Result,
bulkMode: Boolean = false,
) {
if (prefs.copyImmediately) {
activity.copyToClipboard(result.text)
copyToClipboard(result.text)
}
val scan = result.toScan()
if (prefs.useHistory) {
@@ -644,7 +651,7 @@ fun showResult(
}
if (prefs.sendScanActive && prefs.sendScanUrl.isNotEmpty()) {
if (prefs.sendScanType == "4") {
activity.openUrl(
openUrl(
prefs.sendScanUrl + scan.content.urlEncode()
)
return
@@ -654,18 +661,42 @@ fun showResult(
prefs.sendScanType
) { code, body ->
if (code == null || code < 200 || code > 299) {
activity.errorFeedback()
errorFeedback()
}
if (body != null && body.isNotEmpty()) {
activity.toast(body)
toast(body)
} else if (code == null || code > 299) {
activity.toast(R.string.background_request_failed)
toast(R.string.background_request_failed)
}
}
}
if (prefs.sendScanBluetooth &&
prefs.sendScanBluetoothHost.isNotEmpty() &&
hasBluetoothPermission()
) {
scan.sendBluetoothAsync(
prefs.sendScanBluetoothHost
) { connected, sent ->
toast(
when {
!connected -> {
errorFeedback()
R.string.bluetooth_connect_fail
}
!sent -> {
errorFeedback()
R.string.bluetooth_send_fail
}
else -> R.string.bluetooth_send_success
}
)
}
}
if (!bulkMode) {
activity.startActivity(
MainActivity.getDecodeIntent(activity, scan)
startActivity(
MainActivity.getDecodeIntent(this, scan)
)
}
}
@@ -9,7 +9,12 @@ import android.support.v4.app.Fragment
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.Toolbar
import de.markusfisch.android.binaryeye.R
import de.markusfisch.android.binaryeye.app.*
import de.markusfisch.android.binaryeye.app.PERMISSION_LOCATION
import de.markusfisch.android.binaryeye.app.PERMISSION_WRITE
import de.markusfisch.android.binaryeye.app.applyLocale
import de.markusfisch.android.binaryeye.app.permissionGrantedCallback
import de.markusfisch.android.binaryeye.app.prefs
import de.markusfisch.android.binaryeye.app.setFragment
import de.markusfisch.android.binaryeye.database.Scan
import de.markusfisch.android.binaryeye.fragment.DecodeFragment
import de.markusfisch.android.binaryeye.fragment.EncodeFragment
@@ -83,9 +88,11 @@ class MainActivity : AppCompatActivity() {
intent.hasExtra(ENCODE) -> EncodeFragment.newInstance(
intent.getStringExtra(ENCODE)
)
intent.hasExtra(DECODED) -> DecodeFragment.newInstance(
intent.getParcelableExtra(DECODED)!!
)
else -> PreferencesFragment()
}
}
@@ -21,7 +21,11 @@ import de.markusfisch.android.binaryeye.graphics.fixTransparency
import de.markusfisch.android.binaryeye.graphics.loadImageUri
import de.markusfisch.android.binaryeye.graphics.mapPosition
import de.markusfisch.android.binaryeye.media.releaseToneGenerators
import de.markusfisch.android.binaryeye.view.*
import de.markusfisch.android.binaryeye.view.colorSystemAndToolBars
import de.markusfisch.android.binaryeye.view.initSystemBars
import de.markusfisch.android.binaryeye.view.recordToolbarHeight
import de.markusfisch.android.binaryeye.view.scanFeedback
import de.markusfisch.android.binaryeye.view.setPaddingFromWindowInsets
import de.markusfisch.android.binaryeye.widget.CropImageView
import de.markusfisch.android.binaryeye.widget.DetectorView
import de.markusfisch.android.binaryeye.widget.toast
@@ -29,7 +33,11 @@ import de.markusfisch.android.zxingcpp.ZxingCpp
import de.markusfisch.android.zxingcpp.ZxingCpp.Binarizer
import de.markusfisch.android.zxingcpp.ZxingCpp.DecodeHints
import de.markusfisch.android.zxingcpp.ZxingCpp.Result
import kotlinx.coroutines.*
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import kotlin.math.max
import kotlin.math.min
import kotlin.math.roundToInt
@@ -43,6 +51,7 @@ class PickActivity : AppCompatActivity() {
tryRotate = true,
tryInvert = true,
tryDownscale = true,
maxNumberOfSymbols = 1,
formats = prefs.barcodeFormats.joinToString()
)
@@ -145,7 +154,7 @@ class PickActivity : AppCompatActivity() {
)
}
scope.launch {
cropped.decode()?.let {
cropped.decode()?.first()?.let {
withContext(Dispatchers.Main) {
if (isFinishing) {
return@withContext
@@ -204,12 +213,14 @@ class PickActivity : AppCompatActivity() {
rotateClockwise()
true
}
R.id.toggle_free -> {
prefs.freeRotation = prefs.freeRotation xor true
cropImageView.freeRotation = prefs.freeRotation
freeRotationItem.updateFreeRotationIcon()
true
}
else -> super.onOptionsItemSelected(item)
}
}
@@ -243,7 +254,7 @@ class PickActivity : AppCompatActivity() {
private fun showResult() {
val r = result
if (r != null) {
showResult(this, r)
showResult(r)
finish()
} else {
applicationContext.toast(R.string.no_barcode_found)
@@ -13,7 +13,7 @@ import de.markusfisch.android.binaryeye.database.Database
import java.text.DateFormat
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
import java.util.Locale
class ScansAdapter(context: Context, cursor: Cursor) :
CursorAdapter(context, cursor, false) {
@@ -99,9 +99,11 @@ class ScansAdapter(context: Context, cursor: Cursor) :
icon = R.drawable.ic_label
name
}
content?.isEmpty() == true -> context.getString(
content.isNullOrEmpty() -> context.getString(
R.string.binary_data
)
else -> content
}
contentView.setCompoundDrawablesWithIntrinsicBounds(
@@ -3,6 +3,7 @@ package de.markusfisch.android.binaryeye.app
import android.Manifest
import android.app.Activity
import android.content.pm.PackageManager
import android.os.Build
import android.support.v4.app.ActivityCompat
import android.support.v4.content.ContextCompat
@@ -32,6 +33,18 @@ fun Activity.hasLocationPermission(callback: () -> Any): Boolean {
)
}
const val PERMISSION_BLUETOOTH = 4
fun Activity.hasBluetoothPermission() = if (
Build.VERSION.SDK_INT >= Build.VERSION_CODES.S
) {
hasPermission(
Manifest.permission.BLUETOOTH_CONNECT,
PERMISSION_BLUETOOTH
)
} else {
false
}
private fun Activity.hasPermission(
permission: String,
requestCode: Int
@@ -0,0 +1,116 @@
package de.markusfisch.android.binaryeye.bluetooth
import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothDevice
import android.bluetooth.BluetoothSocket
import android.support.v7.preference.ListPreference
import de.markusfisch.android.binaryeye.database.Scan
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.io.IOException
import java.io.OutputStreamWriter
import java.util.UUID
fun Scan.sendBluetoothAsync(
host: String,
callback: (Boolean, Boolean) -> Unit
) {
CoroutineScope(Dispatchers.IO).launch(Dispatchers.IO) {
val connected = if (isConnected) {
true
} else {
connect(host)
}
val sent = if (connected) {
send(content)
} else {
false
}
withContext(Dispatchers.Main) {
callback(connected, sent)
}
}
}
fun setBluetoothHosts(listPref: ListPreference) {
val devices = try {
BluetoothAdapter.getDefaultAdapter().bondedDevices
} catch (e: SecurityException) {
// Do nothing, either the user has denied Bluetooth access
// or the permission was removed by the system. We're catching
// the exception to keep the app from crashing.
null
} ?: return
listPref.entries = devices.map {
it.name
}.toTypedArray()
listPref.entryValues = devices.map {
it.address
}.toTypedArray()
listPref.callChangeListener(listPref.value)
}
private var socket: BluetoothSocket? = null
private var writer: OutputStreamWriter? = null
private val blue = BluetoothAdapter.getDefaultAdapter()
private val uuid = UUID.fromString(
"8a8478c9-2ca8-404b-a0de-101f34ab71ae"
)
private var isConnected = false
private fun connect(deviceName: String): Boolean = try {
val device = findByName(deviceName) ?: throw RuntimeException(
"Bluetooth device not found"
)
socket = device.createRfcommSocketToServiceRecord(uuid)
socket?.connect()
writer = socket?.outputStream?.writer()
isConnected = true
true
} catch (e: Exception) {
close()
false
}
private fun send(message: String): Boolean = try {
writer?.apply {
write(message)
write("\n")
flush()
}
true
} catch (e: Exception) {
close()
false
}
private fun close() {
try {
writer?.close()
} catch (e: IOException) {
// Catch exception if writer wasn't initialized.
}
try {
socket?.close()
} catch (e: IOException) {
// Nothing we can do about this but keep
// the app from crashing.
}
writer = null
socket = null
isConnected = false
}
private fun findByName(findableName: String): BluetoothDevice? {
val deviceList = blue.bondedDevices
for (device in deviceList) {
if (device.address == findableName) {
return device
}
}
return null
}
@@ -10,6 +10,8 @@ import de.markusfisch.android.binaryeye.BuildConfig
import de.markusfisch.android.binaryeye.R
import de.markusfisch.android.binaryeye.widget.toast
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
fun Context.execShareIntent(intent: Intent): Boolean = if (
!startIntent(intent)
@@ -59,6 +61,39 @@ fun Context.shareText(text: String, mimeType: String = "text/plain") {
})
}
private const val SHARE_AS_TEXT_FILE_NAME = "barcode_content"
fun Context.wipeShareFile() {
File(externalCacheDir, SHARE_AS_TEXT_FILE_NAME).delete()
}
fun <T> Context.shareAsFile(content: T) {
val (bytes, mimeType) = when (content) {
is ByteArray -> Pair(
content,
"text/plain"
)
is String -> Pair(
content.toByteArray(),
"application/octet-stream"
)
else -> throw IllegalArgumentException(
"Unsupported content text for shareAsFile()"
)
}
val file = File(externalCacheDir, SHARE_AS_TEXT_FILE_NAME)
try {
FileOutputStream(file).use {
it.write(bytes)
}
} catch (e: IOException) {
toast(R.string.error_saving_file)
return
}
shareFile(file, mimeType)
}
fun Context.shareFile(file: File, mimeType: String) {
getUriForFile(file)?.let {
shareUri(it, mimeType)
@@ -117,12 +117,9 @@ class Database {
null,
ContentValues().apply {
put(SCANS_DATETIME, scan.dateTime)
val isRaw = scan.raw != null
if (isRaw) {
put(SCANS_CONTENT, "")
put(SCANS_CONTENT, scan.content)
if (scan.raw != null) {
put(SCANS_RAW, scan.raw)
} else {
put(SCANS_CONTENT, scan.content)
}
put(SCANS_FORMAT, scan.format)
scan.errorCorrectionLevel?.let {
@@ -139,7 +136,7 @@ class Database {
if (prefs.ignoreConsecutiveDuplicates) {
val id = getIdOfLastScan(
get(SCANS_CONTENT) as String,
if (isRaw) get(SCANS_RAW) as ByteArray else null,
get(SCANS_RAW) as ByteArray?,
scan.format
)
if (id > 0L) {
@@ -123,23 +123,15 @@ data class Scan(
}
fun Result.toScan(): Scan {
val content: String
val raw: ByteArray?
when (contentType) {
ContentType.GS1,
ContentType.ISO15434,
ContentType.TEXT -> {
content = text
raw = null
}
else -> {
content = ""
raw = rawBytes
}
}
return Scan(
content,
raw,
when (contentType) {
ContentType.GS1,
ContentType.ISO15434,
ContentType.TEXT -> text
else -> ""
},
rawBytes,
format,
ecLevel,
version,
@@ -159,7 +151,7 @@ data class Recreation(
val size: Int,
val margin: Int
) {
fun encode(content: String): Bitmap? = try {
fun <T> encode(content: T): Bitmap? = try {
ZxingCpp.encodeAsBitmap(
content, format, size, size, margin, ecLevel
)
@@ -171,22 +163,18 @@ data class Recreation(
fun Scan.toRecreation(
size: Int = 128,
margin: Int = -1
) = if (content.isEmpty()) {
null
} else {
Recreation(
Format.valueOf(format),
when (errorCorrectionLevel) {
"L" -> 0
"M" -> 1
"Q" -> 2
"H" -> 3
else -> -1
},
size,
margin
)
}
) = Recreation(
Format.valueOf(format),
when (errorCorrectionLevel) {
"L" -> 0
"M" -> 4
"Q" -> 6
"H" -> 8
else -> -1
},
size,
margin
)
private fun getDateTime(
time: Long = System.currentTimeMillis()
@@ -41,7 +41,7 @@ class BarcodeFragment : Fragment() {
private val parentJob = Job()
private val scope = CoroutineScope(Dispatchers.IO + parentJob)
private lateinit var barcode: Barcode
private lateinit var barcode: Barcode<*>
override fun onCreate(state: Bundle?) {
super.onCreate(state)
@@ -71,7 +71,7 @@ class BarcodeFragment : Fragment() {
bitmap = barcode.bitmap()
} catch (e: Exception) {
var message = e.message
if (message == null || message.isEmpty()) {
if (message.isNullOrEmpty()) {
message = getString(R.string.error_encoding_barcode)
}
message?.let {
@@ -110,7 +110,7 @@ class BarcodeFragment : Fragment() {
}
private fun Bundle.toBarcode() = Barcode(
getString(CONTENT) ?: throw IllegalArgumentException(
getString(CONTENT_TEXT) ?: getByteArray(CONTENT_RAW) ?: throw IllegalArgumentException(
"content cannot be null"
),
Format.valueOf(
@@ -119,6 +119,7 @@ class BarcodeFragment : Fragment() {
)
),
getInt(SIZE),
getInt(MARGIN),
getInt(EC_LEVEL),
Colors.values()[getInt(COLORS)]
)
@@ -141,12 +142,14 @@ class BarcodeFragment : Fragment() {
}
true
}
R.id.export_to_file -> {
context.pickFileType(R.string.export_as) {
askForFileNameAndSave(it)
}
true
}
else -> super.onOptionsItemSelected(item)
}
}
@@ -190,12 +193,14 @@ class BarcodeFragment : Fragment() {
) {
barcode.bitmap().saveAsPng(it)
}
FileType.SVG -> saveAs(
addSuffixIfNotGiven(fileName, ".svg"),
MIME_SVG
) { outputStream ->
outputStream.write(barcode.svg().toByteArray())
}
FileType.TXT -> saveAs(
addSuffixIfNotGiven(fileName, ".txt"),
MIME_TXT
@@ -256,26 +261,44 @@ class BarcodeFragment : Fragment() {
}
companion object {
private const val CONTENT = "content"
private const val CONTENT_TEXT = "content_text"
private const val CONTENT_RAW = "content_raw"
private const val FORMAT = "format"
private const val SIZE = "size"
private const val MARGIN = "margin"
private const val EC_LEVEL = "ec_level"
private const val COLORS = "colors"
private const val MIME_PNG = "image/png"
private const val MIME_SVG = "image/svg+xmg"
private const val MIME_TXT = "text/plain"
fun newInstance(
content: String,
fun <T> newInstance(
content: T,
format: Format,
size: Int,
margin: Int,
ecLevel: Int = -1,
colors: Int = 0
): Fragment {
val args = Bundle()
args.putString(CONTENT, content)
when (content) {
is String -> {
args.putString(CONTENT_TEXT, content)
}
is ByteArray -> {
args.putByteArray(CONTENT_RAW, content)
}
else -> {
throw IllegalArgumentException(
"content must be a String of a ByteArray"
)
}
}
args.putString(FORMAT, format.name)
args.putInt(SIZE, size)
args.putInt(MARGIN, margin)
args.putInt(EC_LEVEL, ecLevel)
args.putInt(COLORS, colors)
val fragment = BarcodeFragment()
@@ -285,17 +308,18 @@ class BarcodeFragment : Fragment() {
}
}
private data class Barcode(
val content: String,
private data class Barcode<T>(
val content: T,
val format: Format,
val size: Int,
val margin: Int,
val ecLevel: Int,
val colors: Colors
) {
private var _bitmap: Bitmap? = null
fun bitmap(): Bitmap {
val b = _bitmap ?: ZxingCpp.encodeAsBitmap(
content, format, size, size, -1, ecLevel,
content, format, size, size, margin, ecLevel,
setColor = colors.foregroundColor(),
unsetColor = colors.backgroundColor()
)
@@ -306,7 +330,7 @@ private data class Barcode(
private var _svg: String? = null
fun svg(): String {
val s = _svg ?: ZxingCpp.encodeAsSvg(
content, format, -1, ecLevel
content, format, margin, ecLevel
)
_svg = s
return s
@@ -315,7 +339,7 @@ private data class Barcode(
private var _text: String? = null
fun text(): String {
val t = _text ?: ZxingCpp.encodeAsText(
content, format, -1, ecLevel,
content, format, margin, ecLevel,
inverted = colors == Colors.BLACK_ON_WHITE
)
_text = t
@@ -332,6 +356,7 @@ private enum class Colors {
fun foregroundColor(): Int = when (this) {
BLACK_ON_WHITE,
BLACK_ON_TRANSPARENT -> COLOR_BLACK
WHITE_ON_BLACK,
WHITE_ON_TRANSPARENT -> COLOR_WHITE
}
@@ -19,8 +19,10 @@ import de.markusfisch.android.binaryeye.activity.MainActivity
import de.markusfisch.android.binaryeye.adapter.prettifyFormatName
import de.markusfisch.android.binaryeye.app.*
import de.markusfisch.android.binaryeye.content.copyToClipboard
import de.markusfisch.android.binaryeye.content.shareAsFile
import de.markusfisch.android.binaryeye.content.shareText
import de.markusfisch.android.binaryeye.content.toHexString
import de.markusfisch.android.binaryeye.content.wipeShareFile
import de.markusfisch.android.binaryeye.database.Recreation
import de.markusfisch.android.binaryeye.database.Scan
import de.markusfisch.android.binaryeye.database.toRecreation
@@ -86,7 +88,7 @@ class DecodeFragment : Fragment() {
} ?: throw IllegalArgumentException("DecodeFragment needs a Scan")
val originalContent = scan.content
isBinary = scan.raw != null
isBinary = scan.content.isEmpty()
originalBytes = scan.raw ?: originalContent.toByteArray()
format = scan.format
id = scan.id
@@ -124,6 +126,7 @@ class DecodeFragment : Fragment() {
override fun onDestroy() {
super.onDestroy()
parentJob.cancel()
activity?.wipeShareFile()
}
private fun initContentAndFab(originalContent: String) {
@@ -204,11 +207,12 @@ class DecodeFragment : Fragment() {
}
recreationView.showIf(prefs.showRecreation) { v ->
val r = recreation ?: return@showIf
v.setImageBitmap(r.encode(text))
val content = if (isBinary) bytes else text
v.setImageBitmap(r.encode(content))
v.setOnClickListener {
fragmentManager?.addFragment(
BarcodeFragment.newInstance(
text,
content,
r.format,
r.size,
r.ecLevel
@@ -299,10 +303,6 @@ class DecodeFragment : Fragment() {
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.fragment_decode, menu)
if (isBinary) {
menu.findItem(R.id.copy_to_clipboard).isVisible = false
menu.findItem(R.id.create).isVisible = false
}
if (id > 0L) {
menu.findItem(R.id.remove).isVisible = true
}
@@ -318,11 +318,13 @@ class DecodeFragment : Fragment() {
maybeBackOrFinish()
true
}
R.id.copy_to_clipboard -> {
copyToClipboard(textOrHex())
maybeBackOrFinish()
true
}
R.id.share -> {
context?.apply {
shareText(textOrHex())
@@ -330,17 +332,31 @@ class DecodeFragment : Fragment() {
}
true
}
R.id.share_file -> {
context?.apply {
shareAsFile(if (isBinary) originalBytes else content)
maybeBackOrFinish()
}
true
}
R.id.create -> {
fragmentManager?.addFragment(
EncodeFragment.newInstance(content, format)
EncodeFragment.newInstance(
if (isBinary) originalBytes else content,
format
)
)
true
}
R.id.remove -> {
db.removeScan(id)
backOrFinish()
true
}
else -> super.onOptionsItemSelected(item)
}
}
@@ -1,20 +1,36 @@
package de.markusfisch.android.binaryeye.fragment
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.*
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.CheckBox
import android.widget.EditText
import android.widget.SeekBar
import android.widget.Spinner
import android.widget.TextView
import de.markusfisch.android.binaryeye.R
import de.markusfisch.android.binaryeye.adapter.prettifyFormatName
import de.markusfisch.android.binaryeye.app.addFragment
import de.markusfisch.android.binaryeye.app.prefs
import de.markusfisch.android.binaryeye.text.unescape
import de.markusfisch.android.binaryeye.view.hideSoftKeyboard
import de.markusfisch.android.binaryeye.view.setPaddingFromWindowInsets
import de.markusfisch.android.binaryeye.widget.toast
import de.markusfisch.android.zxingcpp.ZxingCpp.Format
import java.io.InputStream
import kotlin.math.max
import kotlin.math.min
class EncodeFragment : Fragment() {
private lateinit var formatView: Spinner
@@ -24,9 +40,13 @@ class EncodeFragment : Fragment() {
private lateinit var colorsSpinner: Spinner
private lateinit var sizeView: TextView
private lateinit var sizeBarView: SeekBar
private lateinit var marginLayout: View
private lateinit var marginView: TextView
private lateinit var marginBarView: SeekBar
private lateinit var contentView: EditText
private lateinit var unescapeCheckBox: CheckBox
private val writers = arrayListOf(
private val formats = arrayListOf(
Format.AZTEC,
Format.CODABAR,
Format.CODE_39,
@@ -40,6 +60,37 @@ class EncodeFragment : Fragment() {
Format.UPC_A
)
private var minMargin = 0
private var bytes: ByteArray? = null
override fun onActivityResult(
requestCode: Int,
resultCode: Int,
resultData: Intent?
) {
when (requestCode) {
PICK_FILE_RESULT_CODE -> {
if (resultCode == Activity.RESULT_OK &&
resultData != null &&
resultData.data != null
) {
val ac = activity ?: return
ac.hideSoftKeyboard(contentView)
val uri = resultData.data ?: return
bytes = ac.contentResolver?.openInputStream(uri)?.use {
it.readBytesMax(4096)
} ?: return
setEncodeByteArray()
}
}
}
}
override fun onCreate(state: Bundle?) {
super.onCreate(state)
setHasOptionsMenu(true)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
@@ -58,7 +109,7 @@ class EncodeFragment : Fragment() {
val formatAdapter = ArrayAdapter(
ac,
android.R.layout.simple_spinner_item,
writers.map { prettifyFormatName(it.name) }
formats.map { prettifyFormatName(it.name) }
)
formatAdapter.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item
@@ -71,16 +122,35 @@ class EncodeFragment : Fragment() {
position: Int,
id: Long
) {
val ecVisibility = if (
writers[position] == Format.QR_CODE
) View.VISIBLE else View.GONE
ecLabel.visibility = ecVisibility
ecSpinner.visibility = ecVisibility
val colorsVisibility = if (
writers[position].canBeInverted()
) View.VISIBLE else View.GONE
colorsLabel.visibility = colorsVisibility
colorsSpinner.visibility = colorsVisibility
val format = formats[position]
val arrayId = when (format) {
Format.AZTEC -> R.array.aztec_error_correction_levels
Format.QR_CODE -> R.array.qr_error_correction_levels
Format.PDF_417 -> R.array.pdf417_error_correction_levels
else -> 0
}
if (arrayId > 0) {
ecSpinner.setEntries(arrayId)
val idx = format.unpackEcLevel(
prefs.indexOfLastSelectedEcLevel
)
if (idx < ecSpinner.adapter.count) {
ecSpinner.setSelection(idx)
}
true
} else {
false
}.setVisibilityFor(ecLabel, ecSpinner)
format.canBeInverted().setVisibilityFor(
colorsLabel, colorsSpinner
)
when (format) {
Format.AZTEC -> setMarginBar(4, 4)
Format.DATA_MATRIX -> setMarginBar(1, 1)
Format.QR_CODE -> setMarginBar(4, 4)
Format.PDF_417 -> setMarginBar(0, 30)
else -> false
}.setVisibilityFor(marginLayout)
}
override fun onNothingSelected(parentView: AdapterView<*>?) {}
@@ -88,6 +158,22 @@ class EncodeFragment : Fragment() {
ecLabel = view.findViewById(R.id.error_correction_label)
ecSpinner = view.findViewById(R.id.error_correction_level)
ecSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(
parentView: AdapterView<*>?,
selectedItemView: View?,
position: Int,
id: Long
) {
val format = formats[formatView.selectedItemPosition]
prefs.indexOfLastSelectedEcLevel = format.packEcLevel(
prefs.indexOfLastSelectedEcLevel,
position
)
}
override fun onNothingSelected(parentView: AdapterView<*>?) {}
}
colorsLabel = view.findViewById(R.id.colors_label)
colorsSpinner = view.findViewById(R.id.colors)
@@ -96,17 +182,28 @@ class EncodeFragment : Fragment() {
sizeBarView = view.findViewById(R.id.size_bar)
initSizeBar()
marginLayout = view.findViewById(R.id.margin)
marginView = view.findViewById(R.id.margin_display)
marginBarView = view.findViewById(R.id.margin_bar)
initMarginBar()
contentView = view.findViewById(R.id.content)
unescapeCheckBox = view.findViewById(R.id.unescape)
unescapeCheckBox.isChecked = prefs.expandEscapeSequences
val args = arguments
args?.getString(CONTENT)?.let {
args?.getString(CONTENT_TEXT)?.let {
contentView.setText(it)
}
args?.getByteArray(CONTENT_RAW)?.let {
bytes = it
setEncodeByteArray()
}
val barcodeFormat = args?.getString(FORMAT)
if (barcodeFormat != null) {
formatView.setSelection(
writers.indexOf(barcodeFormat.toFormat())
formats.indexOf(barcodeFormat.toFormat())
)
} else if (state == null) {
formatView.post {
@@ -124,26 +221,72 @@ class EncodeFragment : Fragment() {
return view
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.fragment_encode, menu)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.pick_file -> {
startActivityForResult(
Intent.createChooser(
Intent(Intent.ACTION_GET_CONTENT).apply {
type = "*/*"
},
getString(R.string.pick_file)
),
PICK_FILE_RESULT_CODE
)
true
}
else -> super.onOptionsItemSelected(item)
}
}
override fun onPause() {
super.onPause()
prefs.indexOfLastSelectedFormat = formatView.selectedItemPosition
prefs.expandEscapeSequences = unescapeCheckBox.isChecked
prefs.lastMargin = marginBarView.progress
}
private fun Context.encode() {
val content = contentView.text.toString()
if (content.isEmpty()) {
toast(R.string.error_no_content)
return
}
hideSoftKeyboard(contentView)
val writer = writers[formatView.selectedItemPosition]
val content = if (bytes != null) {
bytes
} else {
var text = contentView.text.toString()
if (unescapeCheckBox.isChecked) {
try {
text = text.unescape()
} catch (e: IllegalArgumentException) {
toast(e.message ?: "Invalid escape sequence")
return
}
}
if (text.isEmpty()) {
toast(R.string.error_no_content)
return
}
text
}
val format = formats[formatView.selectedItemPosition]
fragmentManager?.addFragment(
BarcodeFragment.newInstance(
content,
writer,
format,
getSize(sizeBarView.progress),
ecSpinner.selectedItemPosition,
if (writer.canBeInverted()) {
when (format) {
Format.AZTEC,
Format.DATA_MATRIX,
Format.QR_CODE,
Format.PDF_417 -> marginBarView.progress
else -> -1
},
format.getErrorCorrectionLevel(ecSpinner.selectedItemPosition),
if (format.canBeInverted()) {
colorsSpinner.selectedItemPosition
} else 0
)
@@ -170,21 +313,77 @@ class EncodeFragment : Fragment() {
private fun updateSize(power: Int) {
val size = getSize(power)
sizeView.text = getString(R.string.width_by_height, size, size)
sizeView.text = getString(R.string.size_width_by_height, size, size)
}
private fun getSize(power: Int) = 128 * (power + 1)
private fun initMarginBar() {
updateMargin(marginBarView.progress)
marginBarView.setOnSeekBarChangeListener(
object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(
seekBar: SeekBar,
progressValue: Int,
fromUser: Boolean
) {
if (progressValue >= minMargin) {
updateMargin(progressValue)
}
}
override fun onStartTrackingTouch(seekBar: SeekBar) {}
override fun onStopTrackingTouch(seekBar: SeekBar) {}
})
}
private fun updateMargin(margin: Int) {
marginView.text = getString(R.string.margin_size, margin)
}
private fun setMarginBar(minimum: Int, value: Int): Boolean {
minMargin = minimum
marginBarView.apply {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
min = minimum
}
progress = max(
minimum, if (prefs.lastMargin > -1) {
prefs.lastMargin
} else {
value
}
)
}
return true
}
private fun setEncodeByteArray() {
contentView.text = null
contentView.hint = getString(R.string.binary_data)
contentView.isEnabled = false
unescapeCheckBox.isEnabled = false
}
companion object {
private const val CONTENT = "content"
private const val CONTENT_TEXT = "content_text"
private const val CONTENT_RAW = "content_raw"
private const val FORMAT = "format"
private const val PICK_FILE_RESULT_CODE = 1
fun newInstance(
content: String? = null,
fun <T> newInstance(
content: T? = null,
format: String? = null
): Fragment {
val args = Bundle()
content?.let { args.putString(CONTENT, content) }
content?.let {
when (content) {
is String -> args.putString(CONTENT_TEXT, content)
is ByteArray -> args.putByteArray(CONTENT_RAW, content)
else -> throw IllegalArgumentException(
"content must be a String or a ByteArray"
)
}
}
format?.let { args.putString(FORMAT, it) }
val fragment = EncodeFragment()
fragment.arguments = args
@@ -193,10 +392,33 @@ class EncodeFragment : Fragment() {
}
}
private fun Boolean.setVisibilityFor(vararg views: View) {
val visibility = if (this) View.VISIBLE else View.GONE
for (view in views) {
view.visibility = visibility
}
}
private fun Format.packEcLevel(packed: Int, level: Int): Int {
val s = ecLevelShift()
return (level shl s) or (packed and (15 shl s).inv())
}
private fun Format.unpackEcLevel(packed: Int) =
(packed shr ecLevelShift()) and 15
private fun Format.ecLevelShift() = when (this) {
Format.AZTEC -> 0
Format.QR_CODE -> 4
Format.PDF_417 -> 8
else -> throw IllegalArgumentException("$this does not have error levels")
}
private fun Format.canBeInverted() = when (this) {
Format.AZTEC,
Format.DATA_MATRIX,
Format.QR_CODE -> true
else -> false
}
@@ -205,3 +427,38 @@ private fun String.toFormat(default: Format = Format.QR_CODE): Format = try {
} catch (_: IllegalArgumentException) {
default
}
private fun Format.getErrorCorrectionLevel(position: Int) = when (this) {
Format.AZTEC -> position
Format.QR_CODE -> (position + 1) * 2
Format.PDF_417 -> position
else -> 0
}.coerceIn(0, 8)
private fun Spinner.setEntries(resId: Int) = ArrayAdapter.createFromResource(
this.context,
resId,
android.R.layout.simple_spinner_item
).also { aa ->
aa.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item
)
adapter = aa
}
private fun getSize(power: Int) = 128 * (power + 1)
private fun InputStream.readBytesMax(max: Int): ByteArray {
var offset = 0
var remaining = min(available(), max)
val result = ByteArray(remaining)
while (remaining > 0) {
val read = read(result, offset, remaining)
if (read < 0) {
break
}
remaining -= read
offset += read
}
return result
}
@@ -79,6 +79,7 @@ class HistoryFragment : Fragment() {
closeActionMode()
true
}
R.id.edit_scan -> {
scansAdapter?.forSelection { id, position ->
ac.askForName(
@@ -90,6 +91,7 @@ class HistoryFragment : Fragment() {
closeActionMode()
true
}
R.id.remove_scan -> {
scansAdapter?.getSelectedIds()?.let {
if (it.isNotEmpty()) {
@@ -99,6 +101,7 @@ class HistoryFragment : Fragment() {
closeActionMode()
true
}
else -> false
}
}
@@ -221,10 +224,12 @@ class HistoryFragment : Fragment() {
context.askToRemoveScans()
true
}
R.id.export_history -> {
askToExportToFile()
true
}
else -> super.onOptionsItemSelected(item)
}
}
@@ -18,7 +18,9 @@ import android.support.v7.preference.PreferenceGroup
import de.markusfisch.android.binaryeye.R
import de.markusfisch.android.binaryeye.activity.SplashActivity
import de.markusfisch.android.binaryeye.app.addFragment
import de.markusfisch.android.binaryeye.app.hasBluetoothPermission
import de.markusfisch.android.binaryeye.app.prefs
import de.markusfisch.android.binaryeye.bluetooth.setBluetoothHosts
import de.markusfisch.android.binaryeye.media.beepConfirm
import de.markusfisch.android.binaryeye.preference.UrlPreference
import de.markusfisch.android.binaryeye.view.setPaddingFromWindowInsets
@@ -28,9 +30,10 @@ import de.markusfisch.android.binaryeye.widget.toast
class PreferencesFragment : PreferenceFragmentCompat() {
private val changeListener = object : OnSharedPreferenceChangeListener {
override fun onSharedPreferenceChanged(
sharedPreferences: SharedPreferences,
key: String
sharedPreferences: SharedPreferences?,
key: String?
) {
key ?: return
val preference = findPreference(key) ?: return
prefs.update()
when (preference.key) {
@@ -39,6 +42,16 @@ class PreferencesFragment : PreferenceFragmentCompat() {
beepConfirm()
setSummary(preference)
}
"send_scan_bluetooth" -> {
if (prefs.sendScanBluetooth &&
activity?.hasBluetoothPermission() == false
) {
prefs.sendScanBluetooth = false
}
setSummary(preference)
}
else -> setSummary(preference)
}
}
@@ -46,9 +59,20 @@ class PreferencesFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(state: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.preferences)
setBluetoothResources()
wireClearNetworkPreferences()
}
private fun setBluetoothResources() {
if (prefs.sendScanBluetooth &&
activity?.hasBluetoothPermission() == true
) {
setBluetoothHosts(
findPreference("send_scan_bluetooth_host") as ListPreference
)
}
}
private fun wireClearNetworkPreferences() {
findPreference("clear_network_suggestions").apply {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) {
@@ -122,6 +146,12 @@ class PreferencesFragment : PreferenceFragmentCompat() {
setTargetFragment(this@PreferencesFragment, 0)
show(fm, null)
}
} else if (preference.key == "send_scan_bluetooth_host") {
val ac = activity ?: return
if (ac.hasBluetoothPermission()) {
setBluetoothHosts(preference as ListPreference)
}
super.onDisplayPreferenceDialog(preference)
} else {
super.onDisplayPreferenceDialog(preference)
}
@@ -139,9 +169,11 @@ class PreferencesFragment : PreferenceFragmentCompat() {
is UrlPreference -> {
preference.setSummary(preference.getUrl())
}
is ListPreference -> {
preference.setSummary(preference.entry)
}
is MultiSelectListPreference -> {
preference.setSummary(
preference.values.joinToString(", ") {
@@ -149,6 +181,7 @@ class PreferencesFragment : PreferenceFragmentCompat() {
}
)
}
is PreferenceGroup -> {
setSummaries(preference)
}
@@ -54,6 +54,7 @@ fun Matrix.setFrameToView(
uprightWidth = frameMetrics.height
uprightHeight = frameMetrics.width
}
else -> {
uprightWidth = frameMetrics.width
uprightHeight = frameMetrics.height
@@ -33,6 +33,7 @@ private fun Scan.send(url: String, type: String): Response {
"1" -> request(
url + "?" + asUrlArguments()
)
"2" -> request(url) { con ->
con.requestMethod = "POST"
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded")
@@ -41,6 +42,7 @@ private fun Scan.send(url: String, type: String): Response {
close()
}
}
"3" -> request(url) { con ->
con.requestMethod = "POST"
con.setRequestProperty("Content-Type", "application/json")
@@ -49,6 +51,7 @@ private fun Scan.send(url: String, type: String): Response {
close()
}
}
else -> request(
url + content.urlEncode()
)
@@ -165,9 +165,21 @@ class Preferences {
apply(SEND_SCAN_TYPE, value)
field = value
}
var sendScanBluetooth = false
set(value) {
apply(SEND_SCAN_BLUETOOTH, value)
field = value
}
var sendScanBluetoothHost: String = ""
set(value) {
apply(SEND_SCAN_BLUETOOTH_HOST, value)
field = value
}
var customLocale: String = ""
set(value) {
apply(CUSTOM_LOCALE, value)
// Make sure this setting is written immediately because
// the app is about to restart.
commit(CUSTOM_LOCALE, value)
field = value
}
var indexOfLastSelectedFormat: Int = 0
@@ -175,11 +187,26 @@ class Preferences {
apply(INDEX_OF_LAST_SELECTED_FORMAT, value)
field = value
}
var indexOfLastSelectedEcLevel: Int = 0
set(value) {
apply(INDEX_OF_LAST_SELECTED_EC_LEVEL, value)
field = value
}
var lastMargin: Int = -1
set(value) {
apply(LAST_MARGIN, value)
field = value
}
var freeRotation = true
set(value) {
apply(FREE_ROTATION, value)
field = value
}
var expandEscapeSequences = true
set(value) {
apply(EXPAND_ESCAPE_SEQUENCES, value)
field = value
}
fun init(context: Context) {
preferences = PreferenceManager.getDefaultSharedPreferences(context)
@@ -255,6 +282,16 @@ class Preferences {
preferences.getString(SEND_SCAN_TYPE, sendScanType)?.also {
sendScanType = it
}
sendScanBluetooth = preferences.getBoolean(
SEND_SCAN_BLUETOOTH,
sendScanBluetooth
)
preferences.getString(
SEND_SCAN_BLUETOOTH_HOST,
sendScanBluetoothHost
)?.also {
sendScanBluetoothHost = it
}
preferences.getString(CUSTOM_LOCALE, customLocale)?.also {
customLocale = it
}
@@ -262,7 +299,19 @@ class Preferences {
INDEX_OF_LAST_SELECTED_FORMAT,
indexOfLastSelectedFormat
)
indexOfLastSelectedEcLevel = preferences.getInt(
INDEX_OF_LAST_SELECTED_EC_LEVEL,
indexOfLastSelectedEcLevel
)
lastMargin = preferences.getInt(
LAST_MARGIN,
lastMargin
)
freeRotation = preferences.getBoolean(FREE_ROTATION, freeRotation)
expandEscapeSequences = preferences.getBoolean(
EXPAND_ESCAPE_SEQUENCES,
expandEscapeSequences
)
}
fun beepTone() = when (beepToneName) {
@@ -292,6 +341,10 @@ class Preferences {
preferences.edit().putInt(label, value).apply()
}
private fun commit(label: String, value: String) {
preferences.edit().putString(label, value).commit()
}
@RequiresApi(Build.VERSION_CODES.HONEYCOMB)
private fun apply(label: String, value: Set<String>) {
preferences.edit().putStringSet(label, value).apply()
@@ -325,8 +378,13 @@ class Preferences {
private const val SEND_SCAN_ACTIVE = "send_scan_active"
private const val SEND_SCAN_URL = "send_scan_url"
private const val SEND_SCAN_TYPE = "send_scan_type"
private const val SEND_SCAN_BLUETOOTH = "send_scan_bluetooth"
private const val SEND_SCAN_BLUETOOTH_HOST = "send_scan_bluetooth_host"
private const val CUSTOM_LOCALE = "custom_locale"
private const val INDEX_OF_LAST_SELECTED_FORMAT = "index_of_last_selected_format"
private const val INDEX_OF_LAST_SELECTED_EC_LEVEL = "index_of_last_selected_ec_level"
private const val LAST_MARGIN = "last_margin"
private const val FREE_ROTATION = "free_rotation"
private const val EXPAND_ESCAPE_SEQUENCES = "expand_escape_sequences"
}
}
@@ -1,5 +1,6 @@
package de.markusfisch.android.binaryeye.service
import android.app.PendingIntent
import android.content.Intent
import android.os.Build
import android.service.quicksettings.TileService
@@ -12,6 +13,17 @@ class ScanTileService : TileService() {
super.onClick()
val intent = Intent(applicationContext, CameraActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivityAndCollapse(intent)
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
@Suppress("DEPRECATION")
startActivityAndCollapse(intent)
} else {
val pendingIntent = PendingIntent.getActivity(
this,
0,
intent,
PendingIntent.FLAG_IMMUTABLE
)
startActivityAndCollapse(pendingIntent)
}
}
}
@@ -0,0 +1,76 @@
package de.markusfisch.android.binaryeye.text
/**
* Copyright (c) 2000, Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// This code is based on Google's own implementation:
// http://www.java2s.com/example/android-utility-method/string-escape/javascriptunescape-string-s-dc359.html
fun String.unescape(): String {
val len = length
var i = 0
fun String.expand() = when (val ec = get(i++)) {
'n' -> '\n'
'r' -> '\r'
't' -> '\t'
'b' -> '\b'
'\\', '\"', '\'', '<', '>', '|' -> ec
'0', '1', '2', '3', '4', '5', '6', '7' -> {
val limit = if (ec < '4') 3 else 2
var l = 1
--i // Back to index of first digit.
while (l < limit &&
i + l < len &&
get(i + l) in '0'..'7'
) {
++l
}
val from = i
i += l
substring(from, i).toInt(8).toChar()
}
'x', 'u' -> {
val l = if (ec == 'u') 4 else 2
val hexCode = try {
substring(i, i + l)
} catch (_: IndexOutOfBoundsException) {
throw IllegalArgumentException(
"Invalid unicode sequence [${substring(i)}] at index $i"
)
}
val unicodeValue = try {
hexCode.toInt(16)
} catch (_: NumberFormatException) {
throw IllegalArgumentException(
"Invalid unicode sequence [$hexCode] at index $i"
)
}
i += l
unicodeValue.toChar()
}
else -> throw IllegalArgumentException(
"Unknown escape code [$ec] at index $i"
)
}
val sb = StringBuilder()
while (i < len) {
val ch = get(i++)
sb.append(if (ch == '\\' && i < len) expand() else ch)
}
return sb.toString()
}
@@ -22,7 +22,7 @@ fun Context.errorFeedback() {
if (prefs.vibrate) {
getVibrator().error()
}
if (!isSilent()) {
if (prefs.beep && !isSilent()) {
beepError()
}
}
@@ -32,6 +32,7 @@ private fun Context.isSilent(): Boolean {
return when (am.ringerMode) {
AudioManager.RINGER_MODE_SILENT,
AudioManager.RINGER_MODE_VIBRATE -> true
else -> false
}
}
@@ -162,6 +162,7 @@ class DetectorView : View {
false
}
}
MotionEvent.ACTION_MOVE -> {
if (handleGrabbed) {
handlePos.set(x, y)
@@ -176,6 +177,7 @@ class DetectorView : View {
false
}
}
MotionEvent.ACTION_CANCEL -> {
if (handleGrabbed) {
snap(x, y)
@@ -183,6 +185,7 @@ class DetectorView : View {
}
false
}
MotionEvent.ACTION_UP -> {
if (handleGrabbed) {
if (!handleActive) {
@@ -199,6 +202,7 @@ class DetectorView : View {
}
false
}
else -> super.onTouchEvent(event)
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 731 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 899 B

After

Width:  |  Height:  |  Size: 583 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 755 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 899 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 698 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 16 KiB

@@ -1,20 +1,4 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="90dp"
android:height="90dp"
android:viewportWidth="90"
android:viewportHeight="90">
<path
android:fillColor="#FF000000"
android:pathData="M58.262,45C58.262,52.324 52.324,58.262 45,58.262C37.676,58.262 31.738,52.324 31.738,45C31.738,37.676 37.676,31.738 45,31.738C52.324,31.738 58.262,37.676 58.262,45ZM45,27C35.059,27 27,35.059 27,45C27,54.941 35.059,63 45,63C54.941,63 63,54.941 63,45C63,35.059 54.941,27 45,27Z"
android:strokeLineJoin="miter"
android:strokeWidth="4"
android:strokeColor="#00000000"
android:strokeLineCap="butt"/>
<path
android:pathData="M54.41,45C54.41,47.303 53.583,49.412 52.209,51.048L52.209,38.952C53.583,40.588 54.41,42.697 54.41,45ZM45,54.41C44.73,54.41 44.463,54.398 44.199,54.376L44.199,35.624C44.463,35.602 44.73,35.59 45,35.59C45.27,35.59 45.537,35.602 45.801,35.624L45.801,54.376C45.537,54.398 45.27,54.41 45,54.41ZM35.59,45C35.59,42.697 36.417,40.588 37.791,38.952L37.791,51.048C36.417,49.412 35.59,47.303 35.59,45ZM49.005,53.517C48.494,53.758 47.959,53.954 47.403,54.1L47.403,35.9C47.959,36.046 48.494,36.242 49.005,36.483L49.005,53.517ZM42.597,54.1C41.424,53.791 40.34,53.261 39.393,52.558L39.393,37.442C40.34,36.739 41.424,36.209 42.597,35.9L42.597,54.1Z"
android:strokeLineJoin="miter"
android:strokeWidth="4"
android:fillColor="#000000"
android:strokeColor="#00000000"
android:strokeLineCap="butt"/>
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="90dp" android:height="90dp" android:viewportWidth="90" android:viewportHeight="90">
<path android:fillColor="#FF000000" android:pathData="M58.262 45c0 7.324-5.938 13.262-13.262 13.262-7.324 0-13.262-5.938-13.262-13.262 0-7.324 5.938-13.262 13.262-13.262 7.324 0 13.262 5.938 13.262 13.262zM45 27c-9.941 0-18 8.059-18 18s8.059 18 18 18 18-8.059 18-18-8.059-18-18-18z" android:strokeWidth="4"/>
<path android:pathData="M54.41 45c0 2.303-0.827 4.412-2.201 6.048V38.952c1.374 1.636 2.201 3.745 2.201 6.048zM45 54.41c-0.27 0-0.537-0.012-0.801-0.034V35.624C44.463 35.602 44.73 35.59 45 35.59s0.537 0.012 0.801 0.034v18.752C45.537 54.398 45.27 54.41 45 54.41zM35.59 45c0-2.303 0.827-4.412 2.201-6.048v12.096C36.417 49.412 35.59 47.303 35.59 45zm13.415 8.517c-0.511 0.241-1.046 0.437-1.602 0.583V35.9c0.556 0.146 1.091 0.342 1.602 0.583v17.034zM42.597 54.1c-1.173-0.309-2.257-0.839-3.204-1.542V37.442c0.947-0.703 2.031-1.233 3.204-1.542v18.2z" android:strokeWidth="4" android:fillColor="#000000"/>
</vector>
+49 -31
View File
@@ -17,11 +17,32 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="@string/format"/>
<Spinner
android:id="@+id/format"
android:text="@string/content"/>
<EditText
tools:targetApi="o"
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="start|top"
android:typeface="monospace"
android:imeOptions="flagNoExtractUi"
android:inputType="textMultiLine"
android:hint="@string/input_content_here"
android:importantForAutofill="no"/>
<CheckBox
android:id="@+id/unescape"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:text="@string/unescape"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="@string/format"/>
<Spinner
style="@style/Spinner"
android:id="@+id/format"
android:layout_marginBottom="16dp"/>
<TextView
android:id="@+id/error_correction_label"
@@ -30,11 +51,9 @@
android:layout_marginBottom="8dp"
android:text="@string/error_correction_level"/>
<Spinner
style="@style/Spinner"
android:id="@+id/error_correction_level"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:entries="@array/error_correction_levels"/>
android:layout_marginBottom="16dp"/>
<TextView
android:id="@+id/colors_label"
android:layout_width="match_parent"
@@ -42,47 +61,46 @@
android:layout_marginBottom="8dp"
android:text="@string/colors"/>
<Spinner
style="@style/Spinner"
android:id="@+id/colors"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:entries="@array/colors"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="@string/size"/>
<TextView
android:id="@+id/size_display"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:gravity="center"/>
android:layout_marginBottom="8dp"/>
<SeekBar
style="@style/Widget.AppCompat.SeekBar.Discrete"
android:id="@+id/size_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:progress="4"
android:max="7"/>
<TextView
<LinearLayout
android:id="@+id/margin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="@string/content"/>
<EditText
tools:targetApi="o"
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:gravity="start|top"
android:typeface="monospace"
android:imeOptions="flagNoExtractUi"
android:inputType="textMultiLine"
android:hint="@string/input_content_here"
android:importantForAutofill="no"/>
android:orientation="vertical"
android:visibility="gone">
<TextView
android:id="@+id/margin_display"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"/>
<SeekBar
style="@style/Widget.AppCompat.SeekBar.Discrete"
android:id="@+id/margin_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:max="32"/>
</LinearLayout>
</LinearLayout>
</de.markusfisch.android.binaryeye.widget.ConfinedScrollView>
<android.support.design.widget.CoordinatorLayout
+1 -1
View File
@@ -13,7 +13,7 @@
material:showAsAction="ifRoom"/>
<item
android:id="@+id/pick_file"
android:title="@string/pick_file"
android:title="@string/pick_image_file"
android:icon="@drawable/ic_action_pick_file"
material:showAsAction="ifRoom"/>
<item
@@ -23,6 +23,11 @@
android:title="@string/share"
android:icon="@drawable/ic_action_share"
material:showAsAction="ifRoom"/>
<item
android:id="@+id/share_file"
android:title="@string/share_file"
android:icon="@drawable/ic_action_share"
material:showAsAction="ifRoom"/>
<item
android:id="@+id/create"
android:title="@string/compose_barcode"
@@ -0,0 +1,9 @@
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:material="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/pick_file"
android:title="@string/pick_file"
android:icon="@drawable/ic_action_pick_file"
material:showAsAction="ifRoom"/>
</menu>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

+197
View File
@@ -0,0 +1,197 @@
<resources>
<string name="camera_error">Няма достъп до камерата, моля, опитайте отново</string>
<string name="scan_code">Сканирайте код</string>
<string name="compose_barcode">Създаване на баркод</string>
<string name="decode_barcode">Декодиране на баркод</string>
<string name="content">Съдържание</string>
<string name="binary_data">(бинарни данни)</string>
<plurals name="barcode_info">
<item quantity="one">%2$d символ, %1$s</item>
<item quantity="other">%2$d символа, %1$s</item>
</plurals>
<string name="error_correction_level">Ниво на коригиране на грешки</string>
<string name="error_correction_level_l" formatted="false">Ниско (~7&#37; корекция)</string>
<string name="error_correction_level_m" formatted="false">Средно (~15&#37; корекция)</string>
<string name="error_correction_level_q" formatted="false">Четвъртично (~25&#37; корекция)</string>
<string name="error_correction_level_h" formatted="false">Високо (~30&#37; корекция)</string>
<string name="colors">Преден и заден план</string>
<string name="colors_black_on_white">Черно на бяло</string>
<string name="colors_white_on_black">Бяло на черно</string>
<string name="colors_black_on_transparent">Черно на прозрачно</string>
<string name="colors_white_on_transparent">Бяло на прозрачно</string>
<string name="sequence_size">Размер на последователността</string>
<string name="sequence_index">Индекс на последователността</string>
<string name="sequence_id">ID на последователността</string>
<string name="gtin_issue_number">Номер на изданието</string>
<string name="gtin_country">Възможна страна на производство</string>
<string name="gtin_price">Предположена цена</string>
<string name="gtin_add_on">UPC EAN разширение</string>
<string name="barcode_version_number">Версия</string>
<string name="qr_version_and_modules">%1$s (%2$d модули)</string>
<string name="toggle_flash">Превключване на светкавицата</string>
<string name="error_flash">Грешка при превключването на светкавицата</string>
<string name="share">Сподели</string>
<string name="share_file">Share as file</string>
<string name="share_as">Сподели като?</string>
<string name="copy_to_clipboard">Копиране в клипборда</string>
<string name="copied_to_clipboard">Копирано в клипборда</string>
<string name="copy_password">Копиране на паролата в клипборда</string>
<string name="copied_password_to_clipboard">Паролата е копирана в клипборда</string>
<string name="open_url">Отворете URL(Линк)</string>
<string name="cannot_resolve_action">Няма приложение което може да отвори това</string>
<string name="pick_search_engine">Изберете търсачка</string>
<string name="format">Формат</string>
<string name="size_width_by_height">Размер в пиксели: %1$d×%2$d</string>
<string name="margin_size">Марж в пиксели: %1$d</string>
<string name="input_content_here">Въведете съдържание тук</string>
<string name="unescape">Разширете последователности за извеждане</string>
<string name="encode">КОДИРАНЕ</string>
<string name="error_no_content">Липсва съдържание</string>
<string name="error_encoding_barcode">Баркодът не може да бъде генериран</string>
<string name="view_barcode">Вижте баркода</string>
<string name="info">Информация</string>
<string name="switch_camera">Превключване на камерата</string>
<string name="bulk_mode">Сканирайте непрекъснато</string>
<string name="bulk_mode_summary">Винаги започвай непрекъснато сканиране.</string>
<string name="bulk_mode_delay">Забавяне между непрекъснатите сканирания</string>
<string name="restrict_format">Ограничаване на формат</string>
<string name="remove_restriction">Премахване на ограничението</string>
<string name="scan_format">Сканиране %s</string>
<string name="quarter_second">Червърт секунда</string>
<string name="half_second">Половин секунда</string>
<string name="a_second">Една секунда</string>
<string name="two_seconds">Две секунди</string>
<string name="five_seconds">Пет секунди</string>
<string name="history">История</string>
<string name="preferences">Настройки</string>
<string name="scan_category">Сканиране</string>
<string name="content_category">Съдържание</string>
<string name="locale_category">Език</string>
<string name="custom_locale">Персонализиран език</string>
<string name="follow_system_settings">Следване на системните настройки</string>
<string name="show_crop_handle">Показване на ограничителя за изрязване</string>
<string name="show_crop_handle_summary">Ограничете сканирането до персонализирана област.</string>
<string name="barcode_formats">Баркодови формати</string>
<string name="zoom_by_swiping">Плъзване нагоре/надолу, за да увеличите</string>
<string name="zoom_by_swiping_summary">Плъзнете нагоре или надолу в екрана на камерата, за да контролирате приближаването на камерата.</string>
<string name="auto_rotate">Разпознаване на вертикални 1D баркодове</string>
<string name="auto_rotate_summary">Автоматично завъртете рамката на камерата, за разпознаване на вертикални 1D баркодове. В зависимост от устройството това може да повлияе на скоростта.</string>
<string name="try_harder">Оптимизиране на четеца за точност</string>
<string name="try_harder_summary">Активирайте тази опция за много трудни за четене кодове. Ще повлияе на скоростта.</string>
<string name="show_toast_in_bulk_mode">Показване на данни в непрекъснат режим</string>
<string name="show_toast_in_bulk_mode_summary">Кратко показване на сканираните данни при непрекъснато сканиране.</string>
<string name="vibrate">Вибриране при сканиране</string>
<string name="vibrate_summary">Активирайте това, ако искате устройството ви да вибрира при разпознаване на код.</string>
<string name="beep">Звуков сигнал при сканиране</string>
<string name="beep_summary">Активирайте това, ако искате вашето устройство да издава звуков сигнал при разпознаване на код.</string>
<string name="beep_tone">Звуков сигнал</string>
<string name="tone_cdma_confirm">CDMA потвърждение</string>
<string name="tone_sup_confirm">Потвърждение на надзорния разговор</string>
<string name="tone_sup_radio_ack">Потвърждение на контролния радиопът на повикване</string>
<string name="tone_prop_ack">Положително признание</string>
<string name="tone_prop_beep">Общ звуков сигнал</string>
<string name="tone_prop_beep2">Общ двоен звуков сигнал</string>
<string name="use_history">Хронология на сканирането</string>
<string name="use_history_summary">Запазва разпознатите кодове на вашето устройство.</string>
<string name="ignore_consecutive_duplicates">Игнориране на дубликатите</string>
<string name="ignore_consecutive_duplicates_summary">Не запазва последователни дубликати в хронологията на сканирането.</string>
<string name="open_immediately">Отваряй внезапно</string>
<string name="open_immediately_summary">Пропуска проверката и внезапно отваря съдържанието. Може да отвори вредно съдържание, ако е активирано.</string>
<string name="copy_immediately">Поставяй в клипборда</string>
<string name="copy_immediately_summary">Автоматично копира сканираното съдържание в клипборда. Моля, имайте предвид, че други приложения може да подслушват вашия клипборд във фонов режим.</string>
<string name="show_meta_data">Показване на метаданни</string>
<string name="show_meta_data_summary">Показване на допълнителни данни за сканирания баркод.</string>
<string name="show_hex_dump">Показване на шестнадесетичен дъмп</string>
<string name="show_hex_dump_summary">Показване на шестнадесетичен дъмп на сканираното съдържание.</string>
<string name="show_recreation">Показване на пресъздаден баркод</string>
<string name="show_recreation_summary">Създай и покажи баркод отново от прочетеното съдържание, ако е възможно.</string>
<string name="close_automatically">Върщане се след Копиране/Споделяне</string>
<string name="close_automatically_summary">Автоматично връщане към екрана за сканиране след копиране или споделяне на прочетеното съдържание.</string>
<string name="default_search_engine">Отворяй неизвестни данни в</string>
<string name="always_ask">Винаги питай</string>
<string name="open_with_url">Отворяне на неизвестни данни с URL</string>
<string name="clear_network_suggestions">Премахнете мрежовите предложения</string>
<string name="clear_network_suggestions_summary">Премахване на мрежовите предложения, които преди са били добавени с това приложение.</string>
<string name="really_remove_all_networks">Наистина ли искате да премахнете всички мрежи?</string>
<string name="clear_network_suggestions_success">Предложенията за интернет мрежи са изчистени</string>
<string name="clear_network_suggestions_nothing_to_remove">Нищо за премахване</string>
<string name="send_category">Препращане</string>
<string name="send_scan_active">Препращане на сканиранията</string>
<string name="send_scan_active_summary">Включване на препращането на сканиранията към даден URL адрес.</string>
<string name="send_scan_url">URL(Линк) за препращане</string>
<string name="send_scan_type">Тип заявка</string>
<string name="send_type_get_add_content">GET и просто добавяне на съдържанието</string>
<string name="send_type_get_query_string">GET с пълен низ на заявка</string>
<string name="send_type_post_form">POST application/x-www-form-urlencoded</string>
<string name="send_type_post_json">POST application/json</string>
<string name="send_type_external_browser">Отваряне във външен браузър</string>
<string name="test_url">Тествайте URL(Линка)</string>
<string name="send_scan_bluetooth">Препращане на сканиранията с Bluetooth</string>
<string name="send_scan_bluetooth_summary">Активиране на препращане на сканирания към даден Bluetooth хост.</string>
<string name="send_scan_bluetooth_host">Хост</string>
<string name="no_bluetooth_hosts_paired">Няма сдвоени хостове</string>
<string name="bluetooth_connect_fail">Неуспешно свързване с Bluetooth устройство.</string>
<string name="bluetooth_send_fail">Неуспешно изпращане до Bluetooth устройство.</string>
<string name="bluetooth_send_success">Успешно Bluetooth изпращане.</string>
<string name="really_remove_scan">Наистина ли искате да премахнете това сканиране?</string>
<string name="really_remove_all_scans">Наистина ли искате да премахнете всички сканирания?</string>
<string name="really_remove_selected_scans">Наистина ли искате да премахнете избраните сканирания?</string>
<string name="clear_history">Изчистване на историята</string>
<string name="copy_scan">Сопиране на сканирането</string>
<string name="edit_scan">Редактиране на етикет</string>
<string name="remove_scan">Премахване на сканиране</string>
<string name="enter_name">Въведете име, за да опишете сканирането</string>
<string name="enter_name_hint">Име на сканирането</string>
<string name="no_barcode_found">Няма намерен баркод</string>
<string name="pick_list_separator">Как бъдат разделени елементите от списъка?</string>
<string name="separator_line_break">Нова линия</string>
<string name="separator_ruler">Лента</string>
<string name="save_as_file_name">Запазване в папка за изтегляния?</string>
<string name="file_name">Име на файл</string>
<string name="error_saving_file">Неуспешно запазване на Файлът</string>
<string name="error_file_exists">Файлът вече съществува</string>
<string name="connect_to_wifi">Свържи се към Wi-Fi</string>
<string name="wifi_config_failed">Неуспешно конфигуриране на Wi-Fi</string>
<string name="wifi_added">Wi-Fi успешно добавен</string>
<string name="sms_send">Изпрати SMS</string>
<string name="sms_error">Неуспешно изпращане на SMS</string>
<string name="tel_dial">Набери номер</string>
<string name="tel_error">Неуспешно набиране на номера</string>
<string name="mail_send">Изпрати писмо</string>
<string name="mail_error">Неуспешно изпращане на имейл</string>
<string name="vcard_add">Добавяне към контактите</string>
<string name="vcard_failed">Неуспешно добавяне към контактите</string>
<string name="vevent_add">Добавяне към календара</string>
<string name="vevent_failed">Неуспешно добавяне към календара</string>
<string name="otpauth_add">Добави 2FA</string>
<string name="search_web">Търси в мрежата</string>
<string name="search_scan">Търсещо сканиране</string>
<string name="export_to_file">Извеждане в файл</string>
<string name="export_as">Извеждане като?</string>
<string name="export_csv_comma">CSV файл със запетаи</string>
<string name="export_csv_semicolon">CSV файл с точки и запетаи</string>
<string name="export_json">JSON файл</string>
<string name="export_database">SQLite база данни</string>
<string name="saved_in_downloads">Запазено в изтеглянията</string>
<string name="rotate_image_cw">Завъртете изображението по часовниковата стрелка</string>
<string name="toggle_free_rotation">Превключване на свободното въртене</string>
<string name="pick_file">Изберете файл</string>
<string name="pick_image_file">Изберете снимка</string>
<string name="pick_code_to_scan">Изберете код за сканиране</string>
<string name="shortcut_decode">Сканирай баркод</string>
<string name="shortcut_encode">Създай баркод</string>
<string name="shortcut_preferences">Настройки</string>
<string name="background_request_failed">Неуспешна заявка в фонов режим</string>
<string name="entry_type">Тип</string>
<string name="wifi_network">Wi-Fi мрежа</string>
<string name="wifi_ssid">Име</string>
<string name="wifi_type">Тип удостоверяване</string>
<string name="wifi_password">Парола</string>
<string name="wifi_hidden">Скрита интернет мрежа</string>
<string name="wifi_eap">EAP метод</string>
<string name="wifi_anonymous_identity">Анонимна идентичност</string>
<string name="wifi_identity">Идентичност</string>
<string name="wifi_phase2">Фаза 2 метод</string>
<string name="network_suggestions">Предложения за интернет мрежа</string>
<string name="remove_suggestion">Премахване на предложението</string>
</resources>
+13 -4
View File
@@ -1,5 +1,4 @@
<resources>
<string name="no_camera_no_fun">এই অ্যাপ ক্যামেরা অনুমতি ছাড়া কোনো কাজের না। বিদায়।</string>
<string name="camera_error">ক্যামেরা পাওয়া যাচ্ছে না, পরে চেষ্টা করো</string>
<string name="scan_code">সংকেতের পাঠোদ্ধার</string>
<string name="compose_barcode">বারকোড বানাও</string>
@@ -32,6 +31,7 @@
<string name="toggle_flash">আলো</string>
<string name="error_flash">Error toggling flash</string>
<string name="share">ভাগ করো</string>
<string name="share_file">Share as file</string>
<string name="share_as">ভাগ করার মাধ্যম</string>
<string name="copy_to_clipboard">ক্লিপবোর্ডে অনুলিপি</string>
<string name="copied_to_clipboard">ক্লিপবোর্ডে অনুলিপিত</string>
@@ -41,9 +41,10 @@
<string name="cannot_resolve_action">খোলার মতো অ্যাপ নেই</string>
<string name="pick_search_engine">একটা সার্চ ইঞ্জিন নাও</string>
<string name="format">ধরণ</string>
<string name="size">পিক্সেলে আকা</string>
<string name="width_by_height">%1$d×%2$d</string>
<string name="size_width_by_height">পিক্সেলে আকা:%1$d×%2$d</string>
<string name="margin_size">Margin in pixels: %1$d</string>
<string name="input_content_here">এখানে তথ্য দাও</string>
<string name="unescape">Expand escape sequences</string>
<string name="encode">সংকেতকরণ</string>
<string name="error_no_content">তথ্য নেই</string>
<string name="error_encoding_barcode">বারকোড বানানো যায়নি</string>
@@ -125,6 +126,13 @@
<string name="send_type_post_json">POST application/json</string>
<string name="send_type_external_browser">Open in external browser</string>
<string name="test_url">পরীক্ষার জন্য ইউআরএল</string>
<string name="send_scan_bluetooth">Forward scans with Bluetooth</string>
<string name="send_scan_bluetooth_summary">Enable to forwards scans to a given Bluetooth host.</string>
<string name="send_scan_bluetooth_host">Host</string>
<string name="no_bluetooth_hosts_paired">No Hosts Paired</string>
<string name="bluetooth_connect_fail">Could not connect to bluetooth device.</string>
<string name="bluetooth_send_fail">Could not send to bluetooth device.</string>
<string name="bluetooth_send_success">Successful bluetooth send.</string>
<string name="really_remove_scan">আসলেই এটা মুছবে?</string>
<string name="really_remove_all_scans">আসলেই সব মুছবে?</string>
<string name="really_remove_selected_scans">আসলেই নির্বাচিত সব মুছবে?</string>
@@ -167,7 +175,8 @@
<string name="saved_in_downloads">ডাউনলোডে সংরক্ষিত</string>
<string name="rotate_image_cw">ছবি ঘড়ির দিকে ঘুরাও</string>
<string name="toggle_free_rotation">Toggle free rotation</string>
<string name="pick_file">ছবি নাও</string>
<string name="pick_file">Pick a file</string>
<string name="pick_image_file">ছবি নাও</string>
<string name="pick_code_to_scan">খুঁজার জন্য কোড নাও</string>
<string name="shortcut_decode">বারকোড খুজো</string>
<string name="shortcut_encode">বারকোড বানাও</string>
+42 -33
View File
@@ -1,5 +1,4 @@
<resources>
<string name="no_camera_no_fun">Bez oprávnění k fotoaparátu tato aplikace nemá smysl. Na viděnou.</string>
<string name="camera_error">Nepodařilo se otevřít fotoaparát, prosím zkuste to znovu</string>
<string name="scan_code">Naskenovat kód</string>
<string name="compose_barcode">Vytvořit čárový kód</string>
@@ -17,23 +16,24 @@
<string name="error_correction_level_m" formatted="false">Střední (~15&#37; korekce)</string>
<string name="error_correction_level_q" formatted="false">Čtvrtinový (~25&#37; korekce)</string>
<string name="error_correction_level_h" formatted="false">Vysoký (~30&#37; korekce)</string>
<string name="colors">Fore and background</string>
<string name="colors_black_on_white">Black on white</string>
<string name="colors_white_on_black">White on black</string>
<string name="colors_black_on_transparent">Black on transparent</string>
<string name="colors_white_on_transparent">White on transparent</string>
<string name="sequence_size">Sequence size</string>
<string name="sequence_index">Sequence index</string>
<string name="sequence_id">Sequence ID</string>
<string name="colors">Popředí a pozadí</string>
<string name="colors_black_on_white">Černá na bílé</string>
<string name="colors_white_on_black">Bílá na černé</string>
<string name="colors_black_on_transparent">Černá na průhledné</string>
<string name="colors_white_on_transparent">Bílá na průhledné</string>
<string name="sequence_size">Velikost sekvence</string>
<string name="sequence_index">Index sekvence</string>
<string name="sequence_id">ID sekvence</string>
<string name="gtin_issue_number">Číslo edice</string>
<string name="gtin_country">Možná země původu</string>
<string name="gtin_price">Doporučená cena</string>
<string name="gtin_add_on">rozšíření UPC EAN</string>
<string name="barcode_version_number">Version</string>
<string name="qr_version_and_modules">%1$s (%2$d modules)</string>
<string name="toggle_flash">Zap/vyp blesk</string>
<string name="barcode_version_number">Verze</string>
<string name="qr_version_and_modules">%1$s (%2$d modulů)</string>
<string name="toggle_flash">Přepnout blesk</string>
<string name="error_flash">Zapnutí/vypnutí blesku selhalo</string>
<string name="share">Sdílet</string>
<string name="share_file">Sdílet jako soubor</string>
<string name="share_as">Sdílet jako</string>
<string name="copy_to_clipboard">Zkopírovat do schránky</string>
<string name="copied_to_clipboard">Zkopírováno do schránky</string>
@@ -43,14 +43,15 @@
<string name="cannot_resolve_action">Nemáte aplikaci, která by toto uměla otevřít</string>
<string name="pick_search_engine">Zvolte vyhledávač</string>
<string name="format">Formát</string>
<string name="size">Velikost v pixelech</string>
<string name="width_by_height">%1$d×%2$d</string>
<string name="size_width_by_height">Velikost v pixelech: %1$d×%2$d</string>
<string name="margin_size">Okraje v pixelech: %1$d</string>
<string name="input_content_here">Sem vložte obsah</string>
<string name="unescape">Rozšířit escape sekvence</string>
<string name="encode">ZAKÓDOVAT</string>
<string name="error_no_content">Chybí obsah</string>
<string name="error_encoding_barcode">Nepodařilo se vygenerovat čárový kód</string>
<string name="view_barcode">Zobrazit čárový kód</string>
<string name="info">Info</string>
<string name="info">Informace</string>
<string name="switch_camera">Přepnout kameru</string>
<string name="bulk_mode">Skenovat nepřetržitě</string>
<string name="bulk_mode_summary">Vždy začít v módu nepřetržitého skenování.</string>
@@ -83,15 +84,15 @@
<string name="show_toast_in_bulk_mode_summary">Krátce zobrazit data v módu nepřetržitého skenování.</string>
<string name="vibrate">Zavibrovat při detekování</string>
<string name="vibrate_summary">Zařízení zavibruje, když rozpozná čárový kód.</string>
<string name="beep">Beep on detection</string>
<string name="beep_summary">Enable this if you want your device to beep when a code is recognized.</string>
<string name="beep_tone">Beep tone</string>
<string name="tone_cdma_confirm">CDMA confirm</string>
<string name="beep">Pípnout při rozpoznání</string>
<string name="beep_summary">Povolte, pokud chcete pípnutí při rozpoznání kódu.</string>
<string name="beep_tone">Tón pípnutí</string>
<string name="tone_cdma_confirm">Potvrzení CDMA</string>
<string name="tone_sup_confirm">Call supervisory confirm</string>
<string name="tone_sup_radio_ack">Call supervisory radio path acknowledgment</string>
<string name="tone_prop_ack">Positive acknowledgment</string>
<string name="tone_prop_beep">General beep</string>
<string name="tone_prop_beep2">General double beep</string>
<string name="tone_prop_ack">Kladné potvrzení příjmu</string>
<string name="tone_prop_beep">Obecné pípnutí</string>
<string name="tone_prop_beep2">Dvojité obecné pípnutí</string>
<string name="use_history">Ukládat historii skenování</string>
<string name="use_history_summary">Rozpoznané kódy se uloží do zařízení.</string>
<string name="ignore_consecutive_duplicates">Ignorovat duplikáty</string>
@@ -104,8 +105,8 @@
<string name="show_meta_data_summary">Zobrazí další data o naskenovaném čárovém kódu.</string>
<string name="show_hex_dump">Zobrazit hex dump</string>
<string name="show_hex_dump_summary">Zobrazí hex dump naskenovaného obsahu.</string>
<string name="show_recreation">Show recreated barcode</string>
<string name="show_recreation_summary">Recreate and show barcode from read content if possible.</string>
<string name="show_recreation">Zobrazit zrekonstruovaný kód</string>
<string name="show_recreation_summary">Zrekonstruovat a zobrazit čárový kód z přečteného obrazu, pokud je to možné.</string>
<string name="close_automatically">Vrátit se po zkopírování/sdílení</string>
<string name="close_automatically_summary">Po zkopírovaní či sdílení se automaticky vrátí na skenovací obrazovku.</string>
<string name="default_search_engine">Nerozpoznaná data otevřít v</string>
@@ -115,18 +116,25 @@
<string name="clear_network_suggestions_summary">Smazat všechny sítě, které byly navrženy touto aplikací.</string>
<string name="really_remove_all_networks">Opravdu smazat všechny sítě?</string>
<string name="clear_network_suggestions_success">Navrhované sítě smazány</string>
<string name="clear_network_suggestions_nothing_to_remove">Nic k smazání</string>
<string name="clear_network_suggestions_nothing_to_remove">Nic ke smazání</string>
<string name="send_category">Předávání</string>
<string name="send_scan_active">Předávat skeny</string>
<string name="send_scan_active_summary">Zapnout předávání skenů na danou URL</string>
<string name="send_scan_url">Posílat každý sken na URL</string>
<string name="send_scan_type">Typ requestu pro každý sken</string>
<string name="send_scan_type">Typ požadavku pro každý sken</string>
<string name="send_type_get_add_content">GET a simply add content</string>
<string name="send_type_get_query_string">GET with complete query string</string>
<string name="send_type_post_form">POST application/x-www-form-urlencoded</string>
<string name="send_type_post_json">POST application/json</string>
<string name="send_type_external_browser">Otevřít v prohlížeči</string>
<string name="test_url">Otestovat URL</string>
<string name="send_scan_bluetooth">Přesměrovat skeny přes Bluetooth</string>
<string name="send_scan_bluetooth_summary">Skeny se přesměrují na daného hostitele Bluetooth.</string>
<string name="send_scan_bluetooth_host">Hostitel</string>
<string name="no_bluetooth_hosts_paired">Není spárován žádný hostitel</string>
<string name="bluetooth_connect_fail">Nelze se připojit k zařízení Bluetooth.</string>
<string name="bluetooth_send_fail">Nelze odesílat na zařízení Bluetooth.</string>
<string name="bluetooth_send_success">Odesílání přes Bluetooth se zdařilo.</string>
<string name="really_remove_scan">Opravdu odstranit sken?</string>
<string name="really_remove_all_scans">Opravdu odstranit všechny skeny?</string>
<string name="really_remove_selected_scans">Opravdu odstranit zvolené skeny?</string>
@@ -144,9 +152,9 @@
<string name="file_name">Název souboru</string>
<string name="error_saving_file">Soubor se nepodařilo uložit</string>
<string name="error_file_exists">Soubor již existuje</string>
<string name="connect_to_wifi">Připojit k WiFi</string>
<string name="wifi_config_failed">Nepodařilo se nastavit WiFi</string>
<string name="wifi_added">WiFi přidána</string>
<string name="connect_to_wifi">Připojit k Wi-Fi</string>
<string name="wifi_config_failed">Nepodařilo se nastavit Wi-Fi</string>
<string name="wifi_added">Wi-Fi přidána</string>
<string name="sms_send">Poslat SMS</string>
<string name="sms_error">Nepodařilo se poslat SMS</string>
<string name="tel_dial">Vytočit číslo</string>
@@ -168,8 +176,9 @@
<string name="export_database">SQLite databáze</string>
<string name="saved_in_downloads">Uloženo do složky Stahování</string>
<string name="rotate_image_cw">Otočit obrázek po směru hodinových ručiček</string>
<string name="toggle_free_rotation">Toggle free rotation</string>
<string name="pick_file">Vybrat obrázek</string>
<string name="toggle_free_rotation">Přepnout zámek natočení</string>
<string name="pick_file">Vybrat soubor</string>
<string name="pick_image_file">Vybrat obrázek</string>
<string name="pick_code_to_scan">Vyberte kód k naskenování</string>
<string name="shortcut_decode">Skenovat čárový kód</string>
<string name="shortcut_encode">Vytvořit čárový kód</string>
@@ -185,6 +194,6 @@
<string name="wifi_anonymous_identity">Anonymní identita</string>
<string name="wifi_identity">Identita</string>
<string name="wifi_phase2">Ověření Phase 2</string>
<string name="network_suggestions">Network suggestions</string>
<string name="remove_suggestion">Remove suggestion</string>
<string name="network_suggestions">Návrhy sítí</string>
<string name="remove_suggestion">Odebrat návrh</string>
</resources>
+13 -4
View File
@@ -1,5 +1,4 @@
<resources>
<string name="no_camera_no_fun">Denne app giver ingen mening uden adgang til kameraet. Farvel.</string>
<string name="camera_error">Kan ikke få adgang til kamera, prøv igen</string>
<string name="scan_code">Scan kode</string>
<string name="compose_barcode">Opret stregkode</string>
@@ -32,6 +31,7 @@
<string name="toggle_flash">Slå blitz til/fra</string>
<string name="error_flash">Der opstod en fejl ved at slå blitz til/fra</string>
<string name="share">Del</string>
<string name="share_file">Share as file</string>
<string name="share_as">Del som?</string>
<string name="copy_to_clipboard">Kopier til udklipsholder</string>
<string name="copied_to_clipboard">Kopieret til udklipsholder</string>
@@ -41,9 +41,10 @@
<string name="cannot_resolve_action">Inge applikation kan åbne det</string>
<string name="pick_search_engine">Vælg en søgemaskine</string>
<string name="format">Format</string>
<string name="size">Størrelse i pixels</string>
<string name="width_by_height">%1$d×%2$d</string>
<string name="size_width_by_height">Størrelse i pixels: %1$d×%2$d</string>
<string name="margin_size">Margin in pixels: %1$d</string>
<string name="input_content_here">Indtast indhold her</string>
<string name="unescape">Expand escape sequences</string>
<string name="encode">INDKOD</string>
<string name="error_no_content">Manglende indhold</string>
<string name="error_encoding_barcode">Stregkode kan ikke genereres</string>
@@ -125,6 +126,13 @@
<string name="send_type_post_json">POST application/json</string>
<string name="send_type_external_browser">Åbn i ekstern browser</string>
<string name="test_url">Test URL</string>
<string name="send_scan_bluetooth">Forward scans with Bluetooth</string>
<string name="send_scan_bluetooth_summary">Enable to forwards scans to a given Bluetooth host.</string>
<string name="send_scan_bluetooth_host">Host</string>
<string name="no_bluetooth_hosts_paired">No Hosts Paired</string>
<string name="bluetooth_connect_fail">Could not connect to bluetooth device.</string>
<string name="bluetooth_send_fail">Could not send to bluetooth device.</string>
<string name="bluetooth_send_success">Successful bluetooth send.</string>
<string name="really_remove_scan">Vil du virkelig fjerne scanningen?</string>
<string name="really_remove_all_scans">Vil du virkelig fjerne alle scanninger?</string>
<string name="really_remove_selected_scans">Vil du virkelig fjerne valgte scanninger?</string>
@@ -167,7 +175,8 @@
<string name="saved_in_downloads">Gemt i downloads</string>
<string name="rotate_image_cw">Roter billedet med uret</string>
<string name="toggle_free_rotation">Slå fri rotation til/fra</string>
<string name="pick_file">Vælg billedfil</string>
<string name="pick_file">Pick a file</string>
<string name="pick_image_file">Vælg billedfil</string>
<string name="pick_code_to_scan">Vælg kode til at scanne</string>
<string name="shortcut_decode">Scan en stregkode</string>
<string name="shortcut_encode">Opret en stregkode</string>
+13 -4
View File
@@ -1,5 +1,4 @@
<resources>
<string name="no_camera_no_fun">Diese App kann ohne Kamerazugriff nicht funktionieren. Tschüss!</string>
<string name="camera_error">Auf die Kamera kann nicht zugegriffen werden, bitte versuche es nochmal</string>
<string name="scan_code">Code scannen</string>
<string name="compose_barcode">Barcode erstellen</string>
@@ -32,6 +31,7 @@
<string name="toggle_flash">Licht an/ausschalten</string>
<string name="error_flash">Fehler beim ein/ausschalten des Lichts</string>
<string name="share">Teilen</string>
<string name="share_file">Als Datei teilen</string>
<string name="share_as">Teilen als?</string>
<string name="copy_to_clipboard">In die Zwischenablage kopieren</string>
<string name="copied_to_clipboard">Inhalt wurde in die Zwischenablage kopiert</string>
@@ -41,9 +41,10 @@
<string name="cannot_resolve_action">Keine App kann das öffnen</string>
<string name="pick_search_engine">Suchmaschine auswählen</string>
<string name="format">Format</string>
<string name="size">Größe in Pixel</string>
<string name="width_by_height">%1$d×%2$d</string>
<string name="size_width_by_height">Größe in Pixel: %1$d×%2$d</string>
<string name="margin_size">Randgröße in Pixel: %1$d</string>
<string name="input_content_here">Gib den Inhalt hier ein</string>
<string name="unescape">Escape-Sequenzen interpretieren</string>
<string name="encode">KODIEREN</string>
<string name="error_no_content">Fehlender Inhalt</string>
<string name="error_encoding_barcode">Barcode kann nicht generiert werden</string>
@@ -125,6 +126,13 @@
<string name="send_type_post_json">POST application/json</string>
<string name="send_type_external_browser">In externem Browser öffnen</string>
<string name="test_url">Test URL</string>
<string name="send_scan_bluetooth">Scans per Bluetooth weiterleiten</string>
<string name="send_scan_bluetooth_summary">Aktivieren Sie diese Option, um Scans an das angegebene Bluetooth-Gerät weiterzuleiten.</string>
<string name="send_scan_bluetooth_host">Gerät</string>
<string name="no_bluetooth_hosts_paired">Keine Geräte verbunden</string>
<string name="bluetooth_connect_fail">Es kann leider keine Verbindung zum Bluetooth-Gerät hergestellt werden</string>
<string name="bluetooth_send_fail">Senden zum Bluetooth-Gerät fehlgeschlagen</string>
<string name="bluetooth_send_success">Erfolgreich zum Bluetooth-Gerät gesendet</string>
<string name="really_remove_scan">Code wirklich entfernen?</string>
<string name="really_remove_all_scans">Alle Codes entfernen?</string>
<string name="really_remove_selected_scans">Alle ausgewählten Codes entfernen?</string>
@@ -167,7 +175,8 @@
<string name="saved_in_downloads">In den Downloads gespeichert</string>
<string name="rotate_image_cw">Bild im Uhrzeigersinn rotieren</string>
<string name="toggle_free_rotation">Freie Rotation ein/ausschalten</string>
<string name="pick_file">Bilddatei auswählen</string>
<string name="pick_file">Datei auswählen</string>
<string name="pick_image_file">Bilddatei auswählen</string>
<string name="pick_code_to_scan">Code im Bild auswählen</string>
<string name="shortcut_decode">Barcode lesen</string>
<string name="shortcut_encode">Barcode erstellen</string>
+13 -4
View File
@@ -1,5 +1,4 @@
<resources>
<string name="no_camera_no_fun">No tiene sentido usar esta aplicación sin acceso a la cámara. Adiós.</string>
<string name="camera_error">No se puede acceder a la cámara, por favor, inténtelo de nuevo</string>
<string name="scan_code">Escanear código de barras</string>
<string name="compose_barcode">Componer código de barras</string>
@@ -32,6 +31,7 @@
<string name="toggle_flash">Activar el flash</string>
<string name="error_flash">Error toggling flash</string>
<string name="share">Compartir</string>
<string name="share_file">Share as file</string>
<string name="share_as">¿Compartir como?</string>
<string name="copy_to_clipboard">Copiar al portapapeles</string>
<string name="copied_to_clipboard">Copiado al portapapeles</string>
@@ -41,9 +41,10 @@
<string name="cannot_resolve_action">Ninguna aplicación puede abrir eso</string>
<string name="pick_search_engine">Elija un motor de búsqueda</string>
<string name="format">Formato</string>
<string name="size">Tamaño en píxeles</string>
<string name="width_by_height">%1$d×%2$d</string>
<string name="size_width_by_height">Tamaño en píxeles: %1$d×%2$d</string>
<string name="margin_size">Margin in pixels: %1$d</string>
<string name="input_content_here">Introduzca el contenido aquí</string>
<string name="unescape">Expand escape sequences</string>
<string name="encode">CODIFICAR</string>
<string name="error_no_content">Contenido no disponible</string>
<string name="error_encoding_barcode">No se pudo generar el código de barras</string>
@@ -125,6 +126,13 @@
<string name="send_type_post_json">POST application/json</string>
<string name="send_type_external_browser">Abrir en el navegador</string>
<string name="test_url">URL de prueba</string>
<string name="send_scan_bluetooth">Forward scans with Bluetooth</string>
<string name="send_scan_bluetooth_summary">Enable to forwards scans to a given Bluetooth host.</string>
<string name="send_scan_bluetooth_host">Host</string>
<string name="no_bluetooth_hosts_paired">No Hosts Paired</string>
<string name="bluetooth_connect_fail">Could not connect to bluetooth device.</string>
<string name="bluetooth_send_fail">Could not send to bluetooth device.</string>
<string name="bluetooth_send_success">Successful bluetooth send.</string>
<string name="really_remove_scan">¿Realmente desea borrar el escaneo seleccionado?</string>
<string name="really_remove_all_scans">¿Realmente desea borrar todo lo escaneado?</string>
<string name="really_remove_selected_scans">¿Realmente desea borrar los escaneos seleccionados?</string>
@@ -167,7 +175,8 @@
<string name="saved_in_downloads">Guardado en Descargas</string>
<string name="rotate_image_cw">Rotar la imagen en sentido horario</string>
<string name="toggle_free_rotation">Toggle free rotation</string>
<string name="pick_file">Seleccionar imagen</string>
<string name="pick_file">Pick a file</string>
<string name="pick_image_file">Seleccionar imagen</string>
<string name="pick_code_to_scan">Seleccione el código a escanear</string>
<string name="shortcut_decode">Escanear un código</string>
<string name="shortcut_encode">Crear un código</string>
+13 -4
View File
@@ -1,5 +1,4 @@
<resources>
<string name="no_camera_no_fun">این برنامه بدون دسترسی به دوربین هیچ کارایی ندارد. خدانگهدار.</string>
<string name="camera_error">نمی‌توان به دوربین دسترسی داشت، لطفاً دوباره تلاش کنید</string>
<string name="scan_code">پویش کد</string>
<string name="compose_barcode">ایجاد بارکد</string>
@@ -32,6 +31,7 @@
<string name="toggle_flash">روشن/خاموش کردن چراغ</string>
<string name="error_flash">خطا هنگام روشن/خاموش کردن چراغ</string>
<string name="share">هم‌رسانی</string>
<string name="share_file">Share as file</string>
<string name="share_as">هم‌رسانی به عنوان؟</string>
<string name="copy_to_clipboard">رونوشت به تخه‌گیره</string>
<string name="copied_to_clipboard">به تخته‌گیره رونوشت شد</string>
@@ -41,9 +41,10 @@
<string name="cannot_resolve_action">هیچ برنامه‌ای نمی‌تواند آن را بگشاید</string>
<string name="pick_search_engine">یک موتور جست‌وجو برگزینید</string>
<string name="format">قالب</string>
<string name="size">اندازه به پیکسل</string>
<string name="width_by_height">%1$d×%2$d</string>
<string name="size_width_by_height">اندازه به پیکسل: %1$d×%2$d</string>
<string name="margin_size">Margin in pixels: %1$d</string>
<string name="input_content_here">محتویات ورودی را اینجا بنویسید</string>
<string name="unescape">Expand escape sequences</string>
<string name="encode">رمزگذاری</string>
<string name="error_no_content">محتویاتی نیست</string>
<string name="error_encoding_barcode">بارکد نمی‌تواند ایجاد شود</string>
@@ -125,6 +126,13 @@
<string name="send_type_post_json">POST application/json</string>
<string name="send_type_external_browser">گشودن در مرورگر خارجی</string>
<string name="test_url">آزمودن نشانی</string>
<string name="send_scan_bluetooth">Forward scans with Bluetooth</string>
<string name="send_scan_bluetooth_summary">Enable to forwards scans to a given Bluetooth host.</string>
<string name="send_scan_bluetooth_host">Host</string>
<string name="no_bluetooth_hosts_paired">No Hosts Paired</string>
<string name="bluetooth_connect_fail">Could not connect to bluetooth device.</string>
<string name="bluetooth_send_fail">Could not send to bluetooth device.</string>
<string name="bluetooth_send_success">Successful bluetooth send.</string>
<string name="really_remove_scan">برای برداشتن پویش مطمئنید؟</string>
<string name="really_remove_all_scans">برای برداشتن همهٔ پویش‌ها مطمئنید؟</string>
<string name="really_remove_selected_scans">برای برداشتن پویش‌های برگزیده شده مطمئنید؟</string>
@@ -167,7 +175,8 @@
<string name="saved_in_downloads">در بارگیری‌ها ذخیره شد</string>
<string name="rotate_image_cw">تصویر را در جهت ساعتگرد بچرخانید</string>
<string name="toggle_free_rotation">Toggle free rotation</string>
<string name="pick_file">پروندهٔ تصویری را برگزینید</string>
<string name="pick_file">Pick a file</string>
<string name="pick_image_file">پروندهٔ تصویری را برگزینید</string>
<string name="pick_code_to_scan">کدی را برای پویش برگزینید</string>
<string name="shortcut_decode">پویش یک بارکد</string>
<string name="shortcut_encode">ایجاد یک بارکد</string>
+61 -52
View File
@@ -1,7 +1,6 @@
<resources>
<string name="no_camera_no_fun">Cette application ne peut pas fonctionner sans accès à la caméra. Au revoir.</string>
<string name="camera_error">Impossible d\'accéder à la caméra, veuillez réessayer</string>
<string name="scan_code">Scanner le code</string>
<string name="scan_code">Scanner un code</string>
<string name="compose_barcode">Créer un code-barres</string>
<string name="decode_barcode">Décoder le code-barres</string>
<string name="content">Contenu</string>
@@ -30,29 +29,31 @@
<string name="gtin_add_on">Extension UPC EAN</string>
<string name="barcode_version_number">Version</string>
<string name="qr_version_and_modules">%1$s (%2$d modules)</string>
<string name="toggle_flash">Activer le flash</string>
<string name="error_flash">Erreur de basculement du flash</string>
<string name="toggle_flash">Activer/Désactiver le flash</string>
<string name="error_flash">Erreur de changement d\'état du flash</string>
<string name="share">Partager</string>
<string name="share_as">Partager comme ?</string>
<string name="share_file">Partager en tant que fichier</string>
<string name="share_as">Partager en tant que ?</string>
<string name="copy_to_clipboard">Copier dans le presse-papiers</string>
<string name="copied_to_clipboard">Copié dans le presse-papiers</string>
<string name="copy_password">Copier le mot de passe dans le presse-papiers</string>
<string name="copied_password_to_clipboard">Mot de passe copié dans le presse-papiers</string>
<string name="open_url">Ouvrir l\'url</string>
<string name="open_url">Ouvrir l\'URL</string>
<string name="cannot_resolve_action">Aucune application ne peut ouvrir cela</string>
<string name="pick_search_engine">Choisir un moteur de recherche</string>
<string name="format">Format</string>
<string name="size">Taille en pixels</string>
<string name="width_by_height">%1$d×%2$d</string>
<string name="input_content_here">Votre contenu ici</string>
<string name="size_width_by_height">Taille en pixels : %1$d×%2$d</string>
<string name="margin_size">Marge en pixels : %1$d</string>
<string name="input_content_here">Insérer le contenu ici</string>
<string name="unescape">Étendre les caractères d\'échappement</string>
<string name="encode">ENCODER</string>
<string name="error_no_content">Contenu manquant</string>
<string name="error_encoding_barcode">Le code-barres ne peut pas être généré</string>
<string name="view_barcode">Voir le code barre</string>
<string name="info">Info</string>
<string name="switch_camera">Changer de camera</string>
<string name="bulk_mode">Scan continu</string>
<string name="bulk_mode_summary">Démarre toujours en scan continu.</string>
<string name="view_barcode">Voir le code-barres</string>
<string name="info">Informations</string>
<string name="switch_camera">Changer de caméra</string>
<string name="bulk_mode">Scanner en continu</string>
<string name="bulk_mode_summary">Toujours démarrer avec le scan en continu.</string>
<string name="bulk_mode_delay">Délai entre les scans continus</string>
<string name="restrict_format">Restreindre le format</string>
<string name="remove_restriction">Supprimer la restriction</string>
@@ -69,22 +70,22 @@
<string name="locale_category">Langue</string>
<string name="custom_locale">Langue personnalisée</string>
<string name="follow_system_settings">Suivre les réglages du système</string>
<string name="show_crop_handle">Afficher le bouton de rognage</string>
<string name="show_crop_handle_summary">Restreint le scan à une région personnalisée.</string>
<string name="show_crop_handle">Afficher le contrôle du cadrage</string>
<string name="show_crop_handle_summary">Restreindre le scan à une zone personnalisée.</string>
<string name="barcode_formats">Formats de codes-barres</string>
<string name="zoom_by_swiping">Balayage haut/bas pour zoomer</string>
<string name="zoom_by_swiping_summary">Balayez vers le haut ou vers le bas dans l’écran de la caméra pour contrôler le zoom de la caméra.</string>
<string name="zoom_by_swiping_summary">Balayer vers le haut ou vers le bas de l’écran pour contrôler le niveau de zoom de la caméra.</string>
<string name="auto_rotate">Reconnaître les codes-barres 1D verticaux</string>
<string name="auto_rotate_summary">Tourne automatiquement le cadre de la caméra pour reconnaître les codes-barres 1D verticaux. En fonction de l\'appareil, cela peut affecter les performances.</string>
<string name="auto_rotate_summary">Tourner automatiquement le cadre de la caméra pour reconnaître les codes-barres 1D verticaux. En fonction de l\'appareil, cela peut affecter les performances.</string>
<string name="try_harder">Optimiser la précision du lecteur</string>
<string name="try_harder_summary">Activez cette option pour les codes très difficiles à lire. Affectera les performances.</string>
<string name="try_harder_summary">Activer cette option pour les codes très difficiles à lire. Les performances seront affectées.</string>
<string name="show_toast_in_bulk_mode">Afficher les données en mode continu</string>
<string name="show_toast_in_bulk_mode_summary">Afficher brièvement les données lors d\'un scan en continu.</string>
<string name="vibrate">Vibrer à la détection</string>
<string name="vibrate_summary">Fait vibrer l\'appareil lorsqu\'un code est reconnu.</string>
<string name="beep">Beep on detection</string>
<string name="beep_summary">Enable this if you want your device to beep when a code is recognized.</string>
<string name="beep_tone">Beep tone</string>
<string name="vibrate_summary">Faire vibrer l\'appareil lorsqu\'un code est détecté.</string>
<string name="beep">Biper à la détection</string>
<string name="beep_summary">Émettre un son lorsqu\'un code est détecté.</string>
<string name="beep_tone">Tonalité du signal sonore</string>
<string name="tone_cdma_confirm">CDMA confirm</string>
<string name="tone_sup_confirm">Call supervisory confirm</string>
<string name="tone_sup_radio_ack">Call supervisory radio path acknowledgment</string>
@@ -92,32 +93,32 @@
<string name="tone_prop_beep">General beep</string>
<string name="tone_prop_beep2">General double beep</string>
<string name="use_history">Sauvegarder l\'historique des scans</string>
<string name="use_history_summary">Sauvegarde les codes reconnus sur votre appareil.</string>
<string name="use_history_summary">Sauvegarder les codes reconnus sur votre appareil.</string>
<string name="ignore_consecutive_duplicates">Ignorer les doublons</string>
<string name="ignore_consecutive_duplicates_summary">Ne sauvegarde pas les doublons dans l\'historique des scans.</string>
<string name="ignore_consecutive_duplicates_summary">Ne pas sauvegarder les doublons dans l\'historique des scans.</string>
<string name="open_immediately">Ouvrir immédiatement</string>
<string name="open_immediately_summary">Saute l\'inspection et ouvre le contenu immédiatement. Si activé, cela peut ouvrir un contenu nocif.</string>
<string name="copy_immediately">Mettre dans le presse-papiers</string>
<string name="copy_immediately_summary">Copie automatiquement les contenus scannés dans le presse-papiers. Veuillez noter que les autres applications peuvent fouiner dans votre presse-papiers en arrière-plan.</string>
<string name="show_meta_data">Afficher les méta-données</string>
<string name="show_meta_data_summary">Affiche les données supplémentaires sur le code-barres scanné.</string>
<string name="show_hex_dump">Afficher le dump hexa</string>
<string name="show_hex_dump_summary">Affiche le dump hexadécimal du contenu scanné.</string>
<string name="open_immediately_summary">Ignorer l\'inspection et ouvrir le contenu immédiatement. Si cette option est activée, cela peut ouvrir un contenu nocif.</string>
<string name="copy_immediately">Copier dans le presse-papiers</string>
<string name="copy_immediately_summary">Copier automatiquement les contenus scannés dans le presse-papiers. Veuillez noter que d\'autres applications peuvent lire dans votre presse-papiers en arrière-plan.</string>
<string name="show_meta_data">Afficher les métadonnées</string>
<string name="show_meta_data_summary">Afficher des informations supplémentaires sur le code-barres scanné.</string>
<string name="show_hex_dump">Afficher le dump hexadécimal</string>
<string name="show_hex_dump_summary">Afficher le dump hexadécimal du contenu scanné.</string>
<string name="show_recreation">Afficher le code-barres recréé</string>
<string name="show_recreation_summary">Recrée et affiche, si possible, le code-barres à partir du contenu lu.</string>
<string name="show_recreation_summary">Recréer et afficher, si possible, le code-barres à partir du contenu scanné.</string>
<string name="close_automatically">Revenir après une copie/partage</string>
<string name="close_automatically_summary">Revient automatiquement sur l\'écran de scan après avoir copié ou partagé le contenu lu.</string>
<string name="close_automatically_summary">Revenir automatiquement sur l\'écran de scan après avoir copié ou partagé le contenu scanné.</string>
<string name="default_search_engine">Ouvrir les données inconnues dans</string>
<string name="always_ask">Toujours demander</string>
<string name="open_with_url">Ouvrir des données inconnues avec lURL</string>
<string name="open_with_url">Ouvrir les données inconnues avec lURL</string>
<string name="clear_network_suggestions">Supprimer les suggestions de réseau</string>
<string name="clear_network_suggestions_summary">Supprime toutes les suggestions de réseau précédemment fournies par cette application.</string>
<string name="really_remove_all_networks">Supprimer vraiment tous les réseaux ?</string>
<string name="clear_network_suggestions_success">Suggestions de réseau supprimées</string>
<string name="clear_network_suggestions_summary">Supprimer toutes les suggestions de réseau précédemment fournies par cette application.</string>
<string name="really_remove_all_networks">Vraiment supprimer tous les réseaux ?</string>
<string name="clear_network_suggestions_success">Suggestion(s) de réseau(x) supprimée(s)</string>
<string name="clear_network_suggestions_nothing_to_remove">Rien à supprimer</string>
<string name="send_category">Transfert</string>
<string name="send_scan_active">Transférer les scans</string>
<string name="send_scan_active_summary">Transfère les scans vers une URL donnée.</string>
<string name="send_scan_active_summary">Transférer les scans vers une URL donnée.</string>
<string name="send_scan_url">URL de transfert</string>
<string name="send_scan_type">Type de requête</string>
<string name="send_type_get_add_content">GET et ajouter simplement le contenu</string>
@@ -126,12 +127,19 @@
<string name="send_type_post_json">POST application/json</string>
<string name="send_type_external_browser">Ouvrir dans un navigateur externe</string>
<string name="test_url">Tester l\'URL</string>
<string name="send_scan_bluetooth">Partager les scans par Bluetooth</string>
<string name="send_scan_bluetooth_summary">Partager les scans à un hôte Bluetooth donné.</string>
<string name="send_scan_bluetooth_host">Hôte</string>
<string name="no_bluetooth_hosts_paired">Aucun hôte appairé</string>
<string name="bluetooth_connect_fail">Impossible de se connecter à l\'appareil Bluetooth.</string>
<string name="bluetooth_send_fail">Impossible d\'envoyer à l\'appareil Bluetooth.</string>
<string name="bluetooth_send_success">Envoi Bluetooth réussi.</string>
<string name="really_remove_scan">Supprimer le scan ?</string>
<string name="really_remove_all_scans">Supprimer tous les scans ?</string>
<string name="really_remove_selected_scans">Supprimer les scans sélectionnés ?</string>
<string name="clear_history">Effacer l\'historique</string>
<string name="clear_history">Supprimer l\'historique</string>
<string name="copy_scan">Copier le scan</string>
<string name="edit_scan">Éditer l\'étiquette</string>
<string name="edit_scan">Modifier l\'étiquette</string>
<string name="remove_scan">Supprimer le scan</string>
<string name="enter_name">Saisir un nom décrivant le scan</string>
<string name="enter_name_hint">Nom du scan</string>
@@ -143,9 +151,9 @@
<string name="file_name">Nom du fichier</string>
<string name="error_saving_file">Impossible de sauvegarder le fichier</string>
<string name="error_file_exists">Fichier déjà existant</string>
<string name="connect_to_wifi">Connecter au WiFi</string>
<string name="wifi_config_failed">Impossible de configurer le WiFi</string>
<string name="wifi_added">WiFi ajouté</string>
<string name="connect_to_wifi">Connecter au Wi-Fi</string>
<string name="wifi_config_failed">Impossible de configurer le Wi-Fi</string>
<string name="wifi_added">Wi-Fi ajouté</string>
<string name="sms_send">Envoyer SMS</string>
<string name="sms_error">Impossible d\'envoyer le SMS</string>
<string name="tel_dial">Numéro de téléphone</string>
@@ -156,20 +164,21 @@
<string name="vcard_failed">Impossible d\'ajouter aux contacts</string>
<string name="vevent_add">Ajouter à l\'agenda</string>
<string name="vevent_failed">Impossible d\'ajouter à l\'agenda</string>
<string name="otpauth_add">Ajouter 2FA</string>
<string name="otpauth_add">Ajouter l\'authentification à deux facteurs</string>
<string name="search_web">Rechercher sur internet</string>
<string name="search_scan">Rechercher un scan</string>
<string name="export_to_file">Exporter comme fichier</string>
<string name="export_as">Exporter comme ?</string>
<string name="export_to_file">Exporter en tant que fichier</string>
<string name="export_as">Exporter en tant que ?</string>
<string name="export_csv_comma">CSV avec virgules</string>
<string name="export_csv_semicolon">CSV avec points-virgules</string>
<string name="export_json">Exporter comme JSON</string>
<string name="export_json">Exporter en tant que JSON</string>
<string name="export_database">Exporter la base de données SQLite</string>
<string name="saved_in_downloads">Sauvegardé dans les Téléchargements</string>
<string name="rotate_image_cw">Tourner l\'image dans le sens horaire</string>
<string name="toggle_free_rotation">Activer la rotation libre</string>
<string name="pick_file">Choisir un fichier image</string>
<string name="pick_code_to_scan">Choisissez le code à scanner</string>
<string name="pick_file">Choisir un fichier</string>
<string name="pick_image_file">Choisir un fichier image</string>
<string name="pick_code_to_scan">Choisir le code à scanner</string>
<string name="shortcut_decode">Scanner un code-barres</string>
<string name="shortcut_encode">Créer un code-barres</string>
<string name="shortcut_preferences">Réglages</string>
@@ -184,6 +193,6 @@
<string name="wifi_anonymous_identity">Identité anonyme</string>
<string name="wifi_identity">Identité</string>
<string name="wifi_phase2">Méthode de la phase 2</string>
<string name="network_suggestions">Network suggestions</string>
<string name="remove_suggestion">Remove suggestion</string>
<string name="network_suggestions">Suggestions de réseaux</string>
<string name="remove_suggestion">Supprimer les suggestions</string>
</resources>
+13 -4
View File
@@ -1,5 +1,4 @@
<resources>
<string name="no_camera_no_fun">Ennek az alkalmazásnak nincs semmi értelme kamera-hozzáférés nélkül. Viszlát!</string>
<string name="camera_error">Nem lehet hozzáférni a kamerához, próbálja meg újra</string>
<string name="scan_code">Kód beolvasása</string>
<string name="compose_barcode">Vonalkód létrehozása</string>
@@ -32,6 +31,7 @@
<string name="toggle_flash">Vaku be- vagy kikapcsolása</string>
<string name="error_flash">Hiba a vaku be- vagy kikapcsolásakor</string>
<string name="share">Megosztás</string>
<string name="share_file">Share as file</string>
<string name="share_as">Megosztja másként?</string>
<string name="copy_to_clipboard">Másolás a vágólapra</string>
<string name="copied_to_clipboard">Vágólapra helyezés</string>
@@ -41,9 +41,10 @@
<string name="cannot_resolve_action">Nincs alkalmazás, amely meg tudná nyitni azt</string>
<string name="pick_search_engine">Válasszon keresőmotort</string>
<string name="format">Formátum</string>
<string name="size">Méret képpontban</string>
<string name="width_by_height">%1$d×%2$d</string>
<string name="size_width_by_height">Méret képpontban: %1$d×%2$d</string>
<string name="margin_size">Margin in pixels: %1$d</string>
<string name="input_content_here">Itt adja meg a tartalmat</string>
<string name="unescape">Expand escape sequences</string>
<string name="encode">KÓDOLÁS</string>
<string name="error_no_content">Hiányzó tartalom</string>
<string name="error_encoding_barcode">A vonalkódot nem lehet előállítani</string>
@@ -125,6 +126,13 @@
<string name="send_type_post_json">POST application/json</string>
<string name="send_type_external_browser">Megnyitás külső böngészőben</string>
<string name="test_url">Teszt URL</string>
<string name="send_scan_bluetooth">Forward scans with Bluetooth</string>
<string name="send_scan_bluetooth_summary">Enable to forwards scans to a given Bluetooth host.</string>
<string name="send_scan_bluetooth_host">Host</string>
<string name="no_bluetooth_hosts_paired">No Hosts Paired</string>
<string name="bluetooth_connect_fail">Could not connect to bluetooth device.</string>
<string name="bluetooth_send_fail">Could not send to bluetooth device.</string>
<string name="bluetooth_send_success">Successful bluetooth send.</string>
<string name="really_remove_scan">Valóban eltávolítja a beolvasást?</string>
<string name="really_remove_all_scans">Valóban eltávolítja az összes beolvasását?</string>
<string name="really_remove_selected_scans">Valóban eltávolítja a kijelölt beolvasásokat?</string>
@@ -167,7 +175,8 @@
<string name="saved_in_downloads">Elmentve a letöltésekbe</string>
<string name="rotate_image_cw">Kép forgatása jobbra</string>
<string name="toggle_free_rotation">Toggle free rotation</string>
<string name="pick_file">Képfájl kiválasztása</string>
<string name="pick_file">Pick a file</string>
<string name="pick_image_file">Képfájl kiválasztása</string>
<string name="pick_code_to_scan">Kód kiválasztása a beolvasáshoz</string>
<string name="shortcut_decode">Vonalkód beolvasása</string>
<string name="shortcut_encode">Vonalkód létrehozása</string>
+13 -4
View File
@@ -1,5 +1,4 @@
<resources>
<string name="no_camera_no_fun">Aplikasi tidak akan bisa bekerja tanpa akses kamera. Selamat tinggal.</string>
<string name="camera_error">Tidak bisa mengakses kamera, silakan coba lagi</string>
<string name="scan_code">Pindai kode</string>
<string name="compose_barcode">Buat barcode</string>
@@ -31,6 +30,7 @@
<string name="toggle_flash">Nyala/matikan blitz</string>
<string name="error_flash">Galat nyala/matikan blitz</string>
<string name="share">Bagikan</string>
<string name="share_file">Share as file</string>
<string name="share_as">Bagikan sebagai?</string>
<string name="copy_to_clipboard">Salin ke clipboard</string>
<string name="copied_to_clipboard">Disalin ke clipboard</string>
@@ -40,9 +40,10 @@
<string name="cannot_resolve_action">Tidak ada aplikasi yang bisa membukanya</string>
<string name="pick_search_engine">Pilih mesin pencari</string>
<string name="format">Format</string>
<string name="size">Ukuran dalam piksel</string>
<string name="width_by_height">%1$d×%2$d</string>
<string name="size_width_by_height">Ukuran dalam piksel: %1$d×%2$d</string>
<string name="margin_size">Margin in pixels: %1$d</string>
<string name="input_content_here">Masukkan konten di sini</string>
<string name="unescape">Expand escape sequences</string>
<string name="encode">ENKODE</string>
<string name="error_no_content">Tidak ada konten</string>
<string name="error_encoding_barcode">Barcode tidak bisa dibuat</string>
@@ -124,6 +125,13 @@
<string name="send_type_post_json">POST application/json</string>
<string name="send_type_external_browser">Buka di peramban eksternal</string>
<string name="test_url">URL Tes</string>
<string name="send_scan_bluetooth">Forward scans with Bluetooth</string>
<string name="send_scan_bluetooth_summary">Enable to forwards scans to a given Bluetooth host.</string>
<string name="send_scan_bluetooth_host">Host</string>
<string name="no_bluetooth_hosts_paired">No Hosts Paired</string>
<string name="bluetooth_connect_fail">Could not connect to bluetooth device.</string>
<string name="bluetooth_send_fail">Could not send to bluetooth device.</string>
<string name="bluetooth_send_success">Successful bluetooth send.</string>
<string name="really_remove_scan">Yakin menghapus pindaian?</string>
<string name="really_remove_all_scans">Yakin menghapus semua pindaian?</string>
<string name="really_remove_selected_scans">Yakin menghapus pindaian yang dipilih?</string>
@@ -166,7 +174,8 @@
<string name="saved_in_downloads">Simpan di dalam unduhan</string>
<string name="rotate_image_cw">Putar gambar searah jarum jam</string>
<string name="toggle_free_rotation">Nyala/matikan rotasi bebas</string>
<string name="pick_file">Pilih berkas gambar</string>
<string name="pick_file">Pick a file</string>
<string name="pick_image_file">Pilih berkas gambar</string>
<string name="pick_code_to_scan">Pilih kode untuk dipindai</string>
<string name="shortcut_decode">Pindai barcode</string>
<string name="shortcut_encode">Buat barcode</string>
+20 -11
View File
@@ -1,5 +1,4 @@
<resources>
<string name="no_camera_no_fun">Quest\'app non ha alcun senso senza l\'accesso alla fotocamera. Ciao.</string>
<string name="camera_error">Impossibile accedere alla fotocamera. Riprova</string>
<string name="scan_code">Scansiona codice</string>
<string name="compose_barcode">Crea codice a barre</string>
@@ -11,10 +10,10 @@
<item quantity="other">%2$d caratteri, %1$s</item>
</plurals>
<string name="error_correction_level">Livello correzione errori</string>
<string name="error_correction_level_l" formatted="false">Basso (correzione del ~7&#37;)</string>
<string name="error_correction_level_m" formatted="false">Medio (correzione del ~15&#37;)</string>
<string name="error_correction_level_q" formatted="false">Quartile (correzione del ~25&#37;)</string>
<string name="error_correction_level_h" formatted="false">Alto (correzione del ~30&#37;)</string>
<string name="error_correction_level_l" formatted="false">Basso (correzione ~7&#37;)</string>
<string name="error_correction_level_m" formatted="false">Medio (correzione ~15&#37;)</string>
<string name="error_correction_level_q" formatted="false">Quartile (correzione ~25&#37;)</string>
<string name="error_correction_level_h" formatted="false">Alto (correzione ~30&#37;)</string>
<string name="colors">Colore primo piano/sfondo</string>
<string name="colors_black_on_white">Nero su bianco</string>
<string name="colors_white_on_black">Bianco su nero</string>
@@ -32,6 +31,7 @@
<string name="toggle_flash">Attiva/disattiva flash</string>
<string name="error_flash">Errore durante l\'attivazione/disattivazione del flash</string>
<string name="share">Condividi</string>
<string name="share_file">Share as file</string>
<string name="share_as">Condividi come?</string>
<string name="copy_to_clipboard">Copia negli Appunti</string>
<string name="copied_to_clipboard">Copiato negli Appunti</string>
@@ -41,9 +41,10 @@
<string name="cannot_resolve_action">Nessuna app può aprirlo</string>
<string name="pick_search_engine">Scegli motore di ricerca</string>
<string name="format">Formato</string>
<string name="size">Dimensioni (pixel)</string>
<string name="width_by_height">%1$d×%2$d</string>
<string name="size_width_by_height">Dimensioni (pixel): %1$d×%2$d</string>
<string name="margin_size">Margin in pixels: %1$d</string>
<string name="input_content_here">Inserisci qui il contenuto</string>
<string name="unescape">Espandi sequenze escape</string>
<string name="encode">CODIFICA</string>
<string name="error_no_content">Contenuto mancante</string>
<string name="error_encoding_barcode">Il codice a barre non può essere generato</string>
@@ -78,7 +79,7 @@
<string name="try_harder">Ottimizza il lettore per accuratezza</string>
<string name="try_harder_summary">Attiva questa opzione per codici molto difficili da leggere. Riduce le prestazioni.</string>
<string name="show_toast_in_bulk_mode">Visualizza i dati in modalità continua</string>
<string name="show_toast_in_bulk_mode_summary">Durante la scansione continua vsualizza brevemente i dati scansionati.</string>
<string name="show_toast_in_bulk_mode_summary">Durante la scansione continua visualizza brevemente i dati scansionati.</string>
<string name="vibrate">Vibra quando rilevato</string>
<string name="vibrate_summary">Attivalo se vuoi che il dispositivo vibri quando viene riconosciuto un codice.</string>
<string name="beep">Beep al rilevamento</string>
@@ -125,6 +126,13 @@
<string name="send_type_post_json">POST application/json</string>
<string name="send_type_external_browser">Apri nel browser esterno</string>
<string name="test_url">Prova URL</string>
<string name="send_scan_bluetooth">Inoltra scansioni con Bluetooth</string>
<string name="send_scan_bluetooth_summary">Abilita per inoltrare le scansioni ad un determinato host Bluetooth.</string>
<string name="send_scan_bluetooth_host">Host</string>
<string name="no_bluetooth_hosts_paired">Nessun host accoppiato</string>
<string name="bluetooth_connect_fail">Impossibile connettersi al dispositivo Bluetooth.</string>
<string name="bluetooth_send_fail">Impossibile inviare al dispositivo Bluetooth.</string>
<string name="bluetooth_send_success">Invio via Bluetooth riuscito.</string>
<string name="really_remove_scan">Vuoi rimuovere la scansione?</string>
<string name="really_remove_all_scans">Vuoi rimuovere tutte le scansioni?</string>
<string name="really_remove_selected_scans">Vuoi rimuovere le scansioni selezionate?</string>
@@ -167,7 +175,8 @@
<string name="saved_in_downloads">Salvato nei download</string>
<string name="rotate_image_cw">Ruota immagine in senso orario</string>
<string name="toggle_free_rotation">Abilita/disabilita rotazione libera</string>
<string name="pick_file">Scegli file immagine</string>
<string name="pick_file">Pick a file</string>
<string name="pick_image_file">Scegli file immagine</string>
<string name="pick_code_to_scan">Scegli codice da scansionare</string>
<string name="shortcut_decode">Scansiona un codice a barre</string>
<string name="shortcut_encode">Crea un codice a barre</string>
@@ -183,6 +192,6 @@
<string name="wifi_anonymous_identity">Identità anonima</string>
<string name="wifi_identity">Identità</string>
<string name="wifi_phase2">Metodo fase 2</string>
<string name="network_suggestions">Suggerimenti di rete</string>
<string name="remove_suggestion">Cancella suggerimento</string>
<string name="network_suggestions">Suggerimenti rete</string>
<string name="remove_suggestion">Elimina suggerimento</string>
</resources>
+13 -4
View File
@@ -1,5 +1,4 @@
<resources>
<string name="no_camera_no_fun">このアプリはカメラへのアクセス許可なしでは動作しません。終了します。</string>
<string name="camera_error">カメラに接続できませんでした。再試行してください。</string>
<string name="scan_code">バーコードをスキャン</string>
<string name="compose_barcode">バーコードを作成</string>
@@ -31,6 +30,7 @@
<string name="toggle_flash">フラッシュの切り替え</string>
<string name="error_flash">フラッシュの切り替えエラー</string>
<string name="share">共有</string>
<string name="share_file">Share as file</string>
<string name="share_as">画像形式を選択</string>
<string name="copy_to_clipboard">クリップボードにコピー</string>
<string name="copied_to_clipboard">クリップボードにコピーされました</string>
@@ -40,9 +40,10 @@
<string name="cannot_resolve_action">開くためのアプリがありません!</string>
<string name="pick_search_engine">検索エンジンを選択</string>
<string name="format">フォーマット</string>
<string name="size">大きさ(ピクセル)</string>
<string name="width_by_height">%1$d×%2$d</string>
<string name="size_width_by_height">大きさ(ピクセル): %1$d×%2$d</string>
<string name="margin_size">Margin in pixels: %1$d</string>
<string name="input_content_here">ここに内容を入力</string>
<string name="unescape">Expand escape sequences</string>
<string name="encode">エンコード</string>
<string name="error_no_content">内容が指定されていません</string>
<string name="error_encoding_barcode">バーコードを作成できませんでした</string>
@@ -124,6 +125,13 @@
<string name="send_type_post_json">POST application/json</string>
<string name="send_type_external_browser">外部ブラウザで開く</string>
<string name="test_url">URLをテスト</string>
<string name="send_scan_bluetooth">Forward scans with Bluetooth</string>
<string name="send_scan_bluetooth_summary">Enable to forwards scans to a given Bluetooth host.</string>
<string name="send_scan_bluetooth_host">Host</string>
<string name="no_bluetooth_hosts_paired">No Hosts Paired</string>
<string name="bluetooth_connect_fail">Could not connect to bluetooth device.</string>
<string name="bluetooth_send_fail">Could not send to bluetooth device.</string>
<string name="bluetooth_send_success">Successful bluetooth send.</string>
<string name="really_remove_scan">このスキャン履歴を削除しても宜しいですか?</string>
<string name="really_remove_all_scans">全てのスキャン履歴を削除しても宜しいですか?</string>
<string name="really_remove_selected_scans">選択されたスキャン履歴を削除しても宜しいですか?</string>
@@ -166,7 +174,8 @@
<string name="saved_in_downloads">ダウンロードフォルダに保存されました</string>
<string name="rotate_image_cw">時計回りに回転</string>
<string name="toggle_free_rotation">Toggle free rotation</string>
<string name="pick_file">画像を選択して読み込み</string>
<string name="pick_file">Pick a file</string>
<string name="pick_image_file">画像を選択して読み込み</string>
<string name="pick_code_to_scan">スキャンするバーコードを選択</string>
<string name="shortcut_decode">バーコードをスキャン</string>
<string name="shortcut_encode">バーコードを作成</string>
+13 -4
View File
@@ -1,5 +1,4 @@
<resources>
<string name="no_camera_no_fun">ამ აპლიკაციის გამოყენება შეუძლებელია კამერაზე ნებართვის მინიჭების გარეშე</string>
<string name="camera_error">კამერაზე წვდომის მოპოვება ვერ ხერხდება, გთხოვთ, კიდევ სცადეთ</string>
<string name="scan_code">შტრიხ-კოდის სკანირება</string>
<string name="compose_barcode">შტრიხ-კოდის შექმნა</string>
@@ -32,6 +31,7 @@
<string name="toggle_flash">განათების ჩართვა</string>
<string name="error_flash">Error toggling flash</string>
<string name="share">გაზიარება</string>
<string name="share_file">Share as file</string>
<string name="share_as">Share as?</string>
<string name="copy_to_clipboard">გაცვლის ბუფერში კოპირება</string>
<string name="copied_to_clipboard">კოპირებულია გაცვლის ბუფერში</string>
@@ -41,9 +41,10 @@
<string name="cannot_resolve_action">ამ მოქმედებისთვის აპლიკაცია ნაპოვნი არაა</string>
<string name="pick_search_engine">აირჩიეთ საძიებო სისტემა</string>
<string name="format">ფორმატი</string>
<string name="size">ზომა პიქსელებში</string>
<string name="width_by_height">%1$d×%2$d</string>
<string name="size_width_by_height">ზომა პიქსელებში: %1$d×%2$d</string>
<string name="margin_size">Margin in pixels: %1$d</string>
<string name="input_content_here">შეიყვანეთ ტექსტი აქ</string>
<string name="unescape">Expand escape sequences</string>
<string name="encode">შექმნა"</string>
<string name="error_no_content">მონაცემები არაა</string>
<string name="error_encoding_barcode">შტრიხ-კოდის შექმნა შეუძლებელია</string>
@@ -125,6 +126,13 @@
<string name="send_type_post_json">POST application/json</string>
<string name="send_type_external_browser">Open in external browser</string>
<string name="test_url">Test URL</string>
<string name="send_scan_bluetooth">Forward scans with Bluetooth</string>
<string name="send_scan_bluetooth_summary">Enable to forwards scans to a given Bluetooth host.</string>
<string name="send_scan_bluetooth_host">Host</string>
<string name="no_bluetooth_hosts_paired">No Hosts Paired</string>
<string name="bluetooth_connect_fail">Could not connect to bluetooth device.</string>
<string name="bluetooth_send_fail">Could not send to bluetooth device.</string>
<string name="bluetooth_send_success">Successful bluetooth send.</string>
<string name="really_remove_scan">ნამდვილად გსურთ სკანირების წაშლა?</string>
<string name="really_remove_all_scans">ნამდვილად გსურთ ყველაფრის წაშლა?</string>
<string name="really_remove_selected_scans">ნამდვილად გსურთ შერჩეული შტრიხ-კოდების წაშლა?</string>
@@ -167,7 +175,8 @@
<string name="saved_in_downloads">შენახულია გადმოწერებში</string>
<string name="rotate_image_cw">გამოსახულების შემობრუნება საათის ისრის მიხედვით</string>
<string name="toggle_free_rotation">Toggle free rotation</string>
<string name="pick_file">აირჩიეთ ფაილი გამოსახულებით</string>
<string name="pick_file">Pick a file</string>
<string name="pick_image_file">აირჩიეთ ფაილი გამოსახულებით</string>
<string name="pick_code_to_scan">აირჩიეთ შტრიხ-კოდი სკანირებისთვის</string>
<string name="shortcut_decode">შტრიხ-კოდის სკანირება</string>
<string name="shortcut_encode">შტრიხ-კოდის შექმნა</string>
+13 -5
View File
@@ -1,5 +1,4 @@
<resources>
<string name="no_camera_no_fun">This app does not make any sense without camera access. Good bye.</string>
<string name="camera_error">카메라를 접근할 수 없습니다. 다시 시도하세요</string>
<string name="scan_code">Scan code</string>
<string name="compose_barcode">Compose barcode</string>
@@ -7,7 +6,6 @@
<string name="content">Content</string>
<string name="binary_data">(binary data)</string>
<plurals name="barcode_info">
<item quantity="one">%2$d character, %1$s</item>
<item quantity="other">%2$d characters, %1$s</item>
</plurals>
<string name="error_correction_level">Error correction level</string>
@@ -32,6 +30,7 @@
<string name="toggle_flash">Toggle flash</string>
<string name="error_flash">Error toggling flash</string>
<string name="share">Share</string>
<string name="share_file">Share as file</string>
<string name="share_as">Share as?</string>
<string name="copy_to_clipboard">Copy to clipboard</string>
<string name="copied_to_clipboard">Copied to clipboard</string>
@@ -41,9 +40,10 @@
<string name="cannot_resolve_action">No application can open that</string>
<string name="pick_search_engine">Pick a search engine</string>
<string name="format">Format</string>
<string name="size">Size in pixels</string>
<string name="width_by_height">%1$d×%2$d</string>
<string name="size_width_by_height">Size in pixels: %1$d×%2$d</string>
<string name="margin_size">Margin in pixels: %1$d</string>
<string name="input_content_here">Input content here</string>
<string name="unescape">Expand escape sequences</string>
<string name="encode">ENCODE</string>
<string name="error_no_content">Missing content</string>
<string name="error_encoding_barcode">Barcode cannot be generated</string>
@@ -125,6 +125,13 @@
<string name="send_type_post_json">POST application/json</string>
<string name="send_type_external_browser">Open in external browser</string>
<string name="test_url">Test URL</string>
<string name="send_scan_bluetooth">Forward scans with Bluetooth</string>
<string name="send_scan_bluetooth_summary">Enable to forwards scans to a given Bluetooth host.</string>
<string name="send_scan_bluetooth_host">Host</string>
<string name="no_bluetooth_hosts_paired">No Hosts Paired</string>
<string name="bluetooth_connect_fail">Could not connect to bluetooth device.</string>
<string name="bluetooth_send_fail">Could not send to bluetooth device.</string>
<string name="bluetooth_send_success">Successful bluetooth send.</string>
<string name="really_remove_scan">Really remove scan?</string>
<string name="really_remove_all_scans">Really remove all scans?</string>
<string name="really_remove_selected_scans">Really remove selected scans?</string>
@@ -167,7 +174,8 @@
<string name="saved_in_downloads">Saved in downloads</string>
<string name="rotate_image_cw">Rotate image clockwise</string>
<string name="toggle_free_rotation">Toggle free rotation</string>
<string name="pick_file">Pick image file</string>
<string name="pick_file">Pick a file</string>
<string name="pick_image_file">Pick image file</string>
<string name="pick_code_to_scan">Pick code to scan</string>
<string name="shortcut_decode">Scan a barcode</string>
<string name="shortcut_encode">Create a barcode</string>
+13 -4
View File
@@ -1,5 +1,4 @@
<resources>
<string name="no_camera_no_fun">Deze app kan niet werken zonder cameratoegang. Tot ziens.</string>
<string name="camera_error">Geen toegang tot camera, probeer opnieuw.</string>
<string name="scan_code">Scan een code</string>
<string name="compose_barcode">Barcode scannen</string>
@@ -32,6 +31,7 @@
<string name="toggle_flash">Zaklamp aan/uit</string>
<string name="error_flash">Error toggling flash</string>
<string name="share">Delen</string>
<string name="share_file">Share as file</string>
<string name="share_as">Delen als?</string>
<string name="copy_to_clipboard">Naar klembord kopiëren</string>
<string name="copied_to_clipboard">Naar klembord gekopieerd</string>
@@ -41,9 +41,10 @@
<string name="cannot_resolve_action">Geen enkele toepassing kan dat openen</string>
<string name="pick_search_engine">Zoekmachine kiezen</string>
<string name="format">Format</string>
<string name="size">Afmeting in pixels</string>
<string name="width_by_height">%1$d×%2$d</string>
<string name="size_width_by_height">Afmeting in pixels: %1$d×%2$d</string>
<string name="margin_size">Margin in pixels: %1$d</string>
<string name="input_content_here">Voer hier de inhoud in</string>
<string name="unescape">Expand escape sequences</string>
<string name="encode">Coderen</string>
<string name="error_no_content">Inhoud ontbreekt</string>
<string name="error_encoding_barcode">Kan geen barcode aanmaken</string>
@@ -125,6 +126,13 @@
<string name="send_type_post_json">POST toepassing/json</string>
<string name="send_type_external_browser">Open in external browser</string>
<string name="test_url">Test URL</string>
<string name="send_scan_bluetooth">Forward scans with Bluetooth</string>
<string name="send_scan_bluetooth_summary">Enable to forwards scans to a given Bluetooth host.</string>
<string name="send_scan_bluetooth_host">Host</string>
<string name="no_bluetooth_hosts_paired">No Hosts Paired</string>
<string name="bluetooth_connect_fail">Could not connect to bluetooth device.</string>
<string name="bluetooth_send_fail">Could not send to bluetooth device.</string>
<string name="bluetooth_send_success">Successful bluetooth send.</string>
<string name="really_remove_scan">Scan echt verwijderen?</string>
<string name="really_remove_all_scans">Alle scans echt verwijderen?</string>
<string name="really_remove_selected_scans">Geselecteerde scans verwijderen?</string>
@@ -167,7 +175,8 @@
<string name="saved_in_downloads">Opgeslagen in downloads</string>
<string name="rotate_image_cw">Afbeelding rechtsom draaien</string>
<string name="toggle_free_rotation">Toggle free rotation</string>
<string name="pick_file">Beeldbestand kiezen</string>
<string name="pick_file">Pick a file</string>
<string name="pick_image_file">Beeldbestand kiezen</string>
<string name="pick_code_to_scan">Kies code om te scannen</string>
<string name="shortcut_decode">Een barcode scannen</string>
<string name="shortcut_encode">Een barcode aanmaken</string>
+19 -4
View File
@@ -8,6 +8,7 @@
<string name="vevent_add">Dodaj do kalendarza</string>
<string name="shortcut_preferences">Ustawienia</string>
<string name="share">Udostępnij</string>
<string name="share_file">Share as file</string>
<string name="share_as">Udostępnij jako?</string>
<string name="error_saving_file">Nie można zapisać pliku</string>
<string name="clear_history">Wyczyść historię</string>
@@ -18,7 +19,8 @@
<string name="file_name">Nazwa pliku</string>
<string name="export_json">Eksportuj jako JSON</string>
<string name="pick_search_engine">Wybierz wyszukiwarkę</string>
<string name="pick_file">Wybierz plik obrazu</string>
<string name="pick_file">Pick a file</string>
<string name="pick_image_file">Wybierz plik obrazu</string>
<string name="pick_code_to_scan">Wybierz kod do zeskanowania</string>
<string name="sms_send">Wyślij SMS</string>
<string name="mail_send">Wyślij e-mail</string>
@@ -43,7 +45,6 @@
<string name="shortcut_encode">Stwórz kod kreskowy</string>
<string name="error_file_exists">Plik już istnieje</string>
<string name="no_barcode_found">Nie znaleziono kodu kreskowego</string>
<string name="no_camera_no_fun">Ta aplikacja nie ma żadnego sensu bez dostępu do kamery. Do widzenia.</string>
<string name="tel_dial">Wybierz numer</string>
<string name="connect_to_wifi">Połącz z Wi-Fi</string>
<string name="vcard_failed">Nie można dodać do kontaktów</string>
@@ -58,12 +59,17 @@
<string name="copy_scan">Skopiuj skan</string>
<string name="vevent_failed">Nie można dodać do kalendarza</string>
<string name="wifi_config_failed">Nie można skonfigurować Wi-Fi</string>
<string name="size">Rozmiar w pikselach</string>
<string name="export_as">Eksportuj jako?</string>
<string name="really_remove_all_scans">Czy naprawdę usunąć wszystkie skany?</string>
<string name="really_remove_scan">Czy naprawdę usunąć skan?</string>
<string name="really_remove_selected_scans">Czy naprawdę usunąć wybrane skany?</string>
<string name="binary_data">(dane binarne)</string>
<plurals name="barcode_info">
<item quantity="one">%2$d character, %1$s</item>
<item quantity="few">%2$d characters, %1$s</item>
<item quantity="many">%2$d characters, %1$s</item>
<item quantity="other">%2$d characters, %1$s</item>
</plurals>
<string name="show_hex_dump">Pokazuj zrzut szesnastkowy</string>
<string name="show_hex_dump_summary">Pokaż zeskanowaną zawartośc w postaci szesnastkowej</string>
<string name="show_recreation">Show recreated barcode</string>
@@ -139,6 +145,13 @@
<string name="send_type_post_json">POST application/json</string>
<string name="send_type_external_browser">Otwórz w zewnętrznej przeglądarce</string>
<string name="test_url">Testuj URL</string>
<string name="send_scan_bluetooth">Forward scans with Bluetooth</string>
<string name="send_scan_bluetooth_summary">Enable to forwards scans to a given Bluetooth host.</string>
<string name="send_scan_bluetooth_host">Host</string>
<string name="no_bluetooth_hosts_paired">No Hosts Paired</string>
<string name="bluetooth_connect_fail">Could not connect to bluetooth device.</string>
<string name="bluetooth_send_fail">Could not send to bluetooth device.</string>
<string name="bluetooth_send_success">Successful bluetooth send.</string>
<string name="copy_password">Skopiuj hasło do schowka</string>
<string name="copied_password_to_clipboard">Hasło skopiowane do schowka</string>
<string name="gtin_price">Sugerowana cena</string>
@@ -160,8 +173,10 @@
<string name="show_toast_in_bulk_mode">Pokaż dane w trybie ciągłym</string>
<string name="show_toast_in_bulk_mode_summary">Zwięźle pokazuje zeskanowane dane podczas skanowania ciągłego.</string>
<string name="cannot_resolve_action">Żadna aplikacja nie może tego otworzyć</string>
<string name="width_by_height">%1$d×%2$d</string>
<string name="size_width_by_height">Rozmiar w pikselach: %1$d×%2$d</string>
<string name="margin_size">Margin in pixels: %1$d</string>
<string name="input_content_here">Wprowadź zawartość tutaj</string>
<string name="unescape">Expand escape sequences</string>
<string name="pick_list_separator">Jak oddzielić elementy listy?</string>
<string name="enter_name">Wprowadź nazwę opisującą skan</string>
<string name="auto_rotate">Rozpoznawaj kody kreskowe 1D pionowo</string>
+53 -44
View File
@@ -1,5 +1,4 @@
<resources>
<string name="no_camera_no_fun">Infelizmente você não poderá usar este app sem conceder acesso à câmera.</string>
<string name="camera_error">Não foi possível acessar a câmera, por favor tente novamente</string>
<string name="scan_code">Aponte ao código</string>
<string name="compose_barcode">Criar código</string>
@@ -10,7 +9,7 @@
<item quantity="one">%2$d caractere, %1$s</item>
<item quantity="other">%2$d caracteres, %1$s</item>
</plurals>
<string name="error_correction_level">Nível de correção de erros</string>
<string name="error_correction_level">Nível de correção de erro</string>
<string name="error_correction_level_l" formatted="false">Baixo (~7&#37; correção)</string>
<string name="error_correction_level_m" formatted="false">Médio (~15&#37; correção)</string>
<string name="error_correction_level_q" formatted="false">Quartil (~25&#37; correção)</string>
@@ -28,22 +27,24 @@
<string name="gtin_price">Preço sugerido</string>
<string name="gtin_add_on">Extensão UPC EAN</string>
<string name="barcode_version_number">Versão</string>
<string name="qr_version_and_modules">%1$s (%2$d modules)</string>
<string name="qr_version_and_modules">%1$s (%2$d módulos)</string>
<string name="toggle_flash">Ligar lanterna</string>
<string name="error_flash">Falha ao ligar a lanterna</string>
<string name="share">Compartilhe</string>
<string name="share_file">Share as file</string>
<string name="share_as">Compartilhar em qual formato?</string>
<string name="copy_to_clipboard">Copiar ao clipboard</string>
<string name="copied_to_clipboard">Copiado ao clipboard</string>
<string name="copy_password">Copiar senha ao clipboard</string>
<string name="copy_password">Copiar a senha ao clipboard</string>
<string name="copied_password_to_clipboard">Senha copiada ao clipboard</string>
<string name="open_url">Abrir a URL</string>
<string name="cannot_resolve_action">Nenhum app consegue abrir isto</string>
<string name="cannot_resolve_action">Nenhum app pode abrir isto</string>
<string name="pick_search_engine">Escolha site de busca</string>
<string name="format">Formato</string>
<string name="size">Tamanho em píxeis</string>
<string name="width_by_height">%1$d×%2$d</string>
<string name="size_width_by_height">Tamanho em píxeis: %1$d×%2$d</string>
<string name="margin_size">Margin in pixels: %1$d</string>
<string name="input_content_here">Digite algum conteúdo aqui</string>
<string name="unescape">Expandir sequências de escape</string>
<string name="encode">CODIFICAR</string>
<string name="error_no_content">Digite algum conteúdo acima</string>
<string name="error_encoding_barcode">Não foi possível gerar este código</string>
@@ -51,18 +52,18 @@
<string name="info">Detalhes</string>
<string name="switch_camera">Alterar câmera</string>
<string name="bulk_mode">Digitalização contínua</string>
<string name="bulk_mode_summary">Sempre executar em modo contínuo.</string>
<string name="bulk_mode_summary">Sempre iniciar em modo contínuo.</string>
<string name="bulk_mode_delay">Adiar durante digitalização contínua</string>
<string name="restrict_format">Limitar formato</string>
<string name="remove_restriction">Remover limitação</string>
<string name="scan_format">Escanear %s</string>
<string name="scan_format">Digitalizar %s</string>
<string name="quarter_second">Um quarto de segundo</string>
<string name="half_second">Meio segundo</string>
<string name="a_second">1 segundo</string>
<string name="two_seconds">2 segundos</string>
<string name="five_seconds">5 segundos</string>
<string name="history">Histórico</string>
<string name="preferences">Preferências</string>
<string name="preferences">Configurações</string>
<string name="scan_category">Digitalização</string>
<string name="content_category">Conteúdo</string>
<string name="locale_category">Idioma</string>
@@ -82,42 +83,42 @@
<string name="vibrate">Vibrar ao reconhecer</string>
<string name="vibrate_summary">Ative esta opção se quiser que seu dispositivo vibre ao reconhecer um código.</string>
<string name="beep">Bipar ao reconhecer</string>
<string name="beep_summary">Ative esta opção se quiser ouvir um bip ao reconhecer um código.</string>
<string name="beep_tone">Sinal sonoro</string>
<string name="tone_cdma_confirm">Confirmação do CDMA</string>
<string name="tone_sup_confirm">Solicitar confirmação de controle</string>
<string name="tone_sup_radio_ack">Solicitar confirmação do caminho de rádio</string>
<string name="beep_summary">Ative esta opção se quiser ouvir um bipe ao reconhecer um código.</string>
<string name="beep_tone">Tipo do bipe</string>
<string name="tone_cdma_confirm">Confirmação CDMA</string>
<string name="tone_sup_confirm">Confirmação de controle</string>
<string name="tone_sup_radio_ack">Reconhecimento de caminho de rádio</string>
<string name="tone_prop_ack">Reconhecimento positivo</string>
<string name="tone_prop_beep">Bip geral</string>
<string name="tone_prop_beep2">Bip duplo geral</string>
<string name="tone_prop_beep">Bipe comum</string>
<string name="tone_prop_beep2">Bipe duplo comum</string>
<string name="use_history">Ativar histórico de digitalizações</string>
<string name="use_history_summary">Salve códigos reconhecidos no seu dispositivo.</string>
<string name="use_history_summary">Salve códigos reconhecidos no dispositivo.</string>
<string name="ignore_consecutive_duplicates">Ignorar duplicações</string>
<string name="ignore_consecutive_duplicates_summary">Não salvar duplicações consecutivas no histórico de digitalizações.</string>
<string name="open_immediately">Abrir imediatamente</string>
<string name="open_immediately_summary">Pular a inspeção e abrir um conteúdo no mesmo instante. Quando ativado, pode abrir conteúdo perigoso.</string>
<string name="copy_immediately">Copiar ao clipboard</string>
<string name="copy_immediately_summary">Copiar automaticamente um conteúdo digitalizado ao clipboard. Tem cuidado porque outros apps podem examinar seu clipboard em segundo plano.</string>
<string name="copy_immediately_summary">Copiar automaticamente ao clipboard um conteúdo digitalizado. Tem cuidado porque outros apps podem examinar seu clipboard em segundo plano.</string>
<string name="show_meta_data">Mostrar metadados</string>
<string name="show_meta_data_summary">Mostrar dados adicionais de código digitalizado.</string>
<string name="show_hex_dump">Mostrar impressão hexadecimal</string>
<string name="show_hex_dump_summary">Mostrar impressão hexadecimal de conteúdo digitalizado.</string>
<string name="show_recreation">Mostrar código recriado</string>
<string name="show_recreation_summary">Se possível, recriar e mostrar código de conteúdo lido.</string>
<string name="show_recreation">Mostrar código recuperado</string>
<string name="show_recreation_summary">Se possível, recupere e mostre código do conteúdo lido.</string>
<string name="close_automatically">Voltar após copiar/compartilhar</string>
<string name="close_automatically_summary">Voltar automaticamente à tela de digitalização após copiar ou compartilhar um código examinado.</string>
<string name="default_search_engine">Abrir dados desconhecidos em</string>
<string name="always_ask">Sempre perguntar</string>
<string name="open_with_url">Abrir dados desconhecidos via URL</string>
<string name="clear_network_suggestions">Remover sugestões da rede</string>
<string name="clear_network_suggestions_summary">Remover todas as sugestões da rede que foram anteriormente fornecidas pelo app.</string>
<string name="really_remove_all_networks">Deseja remover todas as redes?</string>
<string name="clear_network_suggestions_success">Sugestões da rede foram removidas</string>
<string name="clear_network_suggestions_nothing_to_remove">Nada para remover</string>
<string name="clear_network_suggestions">Excluir sugestões de redes</string>
<string name="clear_network_suggestions_summary">Excluir todas as sugestões de redes que foram anteriormente adicionadas ao app.</string>
<string name="really_remove_all_networks">Deseja excluir todas as redes?</string>
<string name="clear_network_suggestions_success">Sugestões de redes foram excluidas</string>
<string name="clear_network_suggestions_nothing_to_remove">Nada para excluir</string>
<string name="send_category">Encaminhamento</string>
<string name="send_scan_active">Encaminhar conteúdo digitalizado</string>
<string name="send_scan_active_summary">Ative para encaminhar conteúdo digitalizado à URL definida</string>
<string name="send_scan_url">URL à qual encaminhar</string>
<string name="send_scan_url">Defina a URL para qual encaminhar</string>
<string name="send_scan_type">Tipo de solicitação</string>
<string name="send_type_get_add_content">GET e somente adicionar um conteúdo</string>
<string name="send_type_get_query_string">GET com sequência completa de consulta</string>
@@ -125,25 +126,32 @@
<string name="send_type_post_json">POST application/json</string>
<string name="send_type_external_browser">Abrir em navegador externo</string>
<string name="test_url">Testar a URL</string>
<string name="really_remove_scan">Deseja remover esta digitalização?</string>
<string name="really_remove_all_scans">Deseja remover todas as digitalizações?</string>
<string name="really_remove_selected_scans">Deseja remover digitalizações selecionados?</string>
<string name="clear_history">Limpar histórico</string>
<string name="send_scan_bluetooth">Encaminhar para Bluetooth</string>
<string name="send_scan_bluetooth_summary">Ativar isto para encaminhar digitalizações ao determinado host de Bluetooth.</string>
<string name="send_scan_bluetooth_host">Host</string>
<string name="no_bluetooth_hosts_paired">Não emparelhado com host</string>
<string name="bluetooth_connect_fail">Não foi possível conectar com dispositivo Bluetooth.</string>
<string name="bluetooth_send_fail">Não foi possível encaminhar para dispositivo Bluetooth.</string>
<string name="bluetooth_send_success">Envio ao Bluetooth concluído com sucesso.</string>
<string name="really_remove_scan">Deseja excluir esta digitalização?</string>
<string name="really_remove_all_scans">Deseja excluir todas as digitalizações?</string>
<string name="really_remove_selected_scans">Deseja excluir as digitalizações selecionadas?</string>
<string name="clear_history">Apagar histórico</string>
<string name="copy_scan">Copiar digitalização</string>
<string name="edit_scan">Editar identificação</string>
<string name="remove_scan">Remover digitalização</string>
<string name="enter_name">Digite nome para identificar esta digitalização</string>
<string name="enter_name_hint">Nome da digitalização</string>
<string name="remove_scan">Excluir digitalização</string>
<string name="enter_name">Digite um nome para identificar esta digitalização</string>
<string name="enter_name_hint">Nome de digitalização</string>
<string name="no_barcode_found">Nenhum código encontrado</string>
<string name="pick_list_separator">Como separar itens da lista?</string>
<string name="separator_line_break">Quebra de linha</string>
<string name="separator_ruler">Régua</string>
<string name="save_as_file_name">Salvar para Downloads?</string>
<string name="separator_ruler">Hífen</string>
<string name="save_as_file_name">Salvar na pasta de Downloads?</string>
<string name="file_name">Nome do arquivo</string>
<string name="error_saving_file">Não foi possível salvar este arquivo</string>
<string name="error_file_exists">Arquivo já existe</string>
<string name="connect_to_wifi">Conectar a WiFi</string>
<string name="wifi_config_failed">Não foi possível configurar WiFi</string>
<string name="wifi_config_failed">Não foi possível configurar a WiFi</string>
<string name="wifi_added">WiFi adicionado</string>
<string name="sms_send">Envie SMS</string>
<string name="sms_error">Não foi possível enviar SMS</string>
@@ -157,24 +165,25 @@
<string name="vevent_failed">Não foi possível adicionar ao calendário</string>
<string name="otpauth_add">Adicionar 2FA</string>
<string name="search_web">Buscar na internet</string>
<string name="search_scan">Buscar em digitalizações feitas</string>
<string name="search_scan">Buscar nas digitalizações salvas</string>
<string name="export_to_file">Exportar para arquivo</string>
<string name="export_as">Exportar em qual formato?</string>
<string name="export_csv_comma">Arquivo CSV com vírgulas</string>
<string name="export_csv_semicolon">Arquivo CSV com ponto-e-vírgula</string>
<string name="export_csv_semicolon">Arquivo CSV com ponto e vírgula</string>
<string name="export_json">Arquivo JSON</string>
<string name="export_database">Base de dados SQLite</string>
<string name="saved_in_downloads">Salvo em Downloads</string>
<string name="rotate_image_cw">Girar a imagem no sentido horário</string>
<string name="toggle_free_rotation">Ativar rotação livre</string>
<string name="pick_file">Escolha imagem</string>
<string name="pick_file">Pick a file</string>
<string name="pick_image_file">Escolha imagem</string>
<string name="pick_code_to_scan">Escolha código para digitalizar</string>
<string name="shortcut_decode">Escaneie código</string>
<string name="shortcut_decode">Digitalizar código</string>
<string name="shortcut_encode">Criar código</string>
<string name="shortcut_preferences">Configurações</string>
<string name="background_request_failed">A solicitação em segundo plano falhou</string>
<string name="entry_type">Tipo</string>
<string name="wifi_network">Rede Wi-Fi</string>
<string name="wifi_network">Rede de Wi-Fi</string>
<string name="wifi_ssid">Nome</string>
<string name="wifi_type">Tipo de autenticação</string>
<string name="wifi_password">Senha</string>
@@ -183,6 +192,6 @@
<string name="wifi_anonymous_identity">Identidade anônima</string>
<string name="wifi_identity">Identidade</string>
<string name="wifi_phase2">Método Phase 2</string>
<string name="network_suggestions">Network suggestions</string>
<string name="remove_suggestion">Remove suggestion</string>
<string name="network_suggestions">Sugestões de redes</string>
<string name="remove_suggestion">Apagar sugestão</string>
</resources>
+14 -5
View File
@@ -1,5 +1,4 @@
<resources>
<string name="no_camera_no_fun">Это приложение не имеет никакого смысла без доступа к камере</string>
<string name="camera_error">Невозможно получить доступ к камере, попробуйте ещё раз</string>
<string name="scan_code">Сканировать штрих-код</string>
<string name="compose_barcode">Создать штрих-код</string>
@@ -34,6 +33,7 @@
<string name="toggle_flash">Включить вспышку</string>
<string name="error_flash">Ошибка при переключении вспышки</string>
<string name="share">Поделиться</string>
<string name="share_file">Поделиться файлом</string>
<string name="share_as">Поделиться как?</string>
<string name="copy_to_clipboard">Скопировать в буфер обмена</string>
<string name="copied_to_clipboard">Скопировано в буфер обмена</string>
@@ -43,9 +43,10 @@
<string name="cannot_resolve_action">Не найдено приложение для этого действия</string>
<string name="pick_search_engine">Выберите поисковую систему</string>
<string name="format">Формат</string>
<string name="size">Размер в пикселях</string>
<string name="width_by_height">%1$d×%2$d</string>
<string name="size_width_by_height">Размер в пикселях: %1$d×%2$d</string>
<string name="margin_size">Отступ в пикселях: %1$d</string>
<string name="input_content_here">Введите текст здесь</string>
<string name="unescape">Раскрывать управляющие последовательности</string>
<string name="encode">Создать</string>
<string name="error_no_content">Нет данных</string>
<string name="error_encoding_barcode">Штрих-код не может быть создан</string>
@@ -127,6 +128,13 @@
<string name="send_type_post_json">POST-приложение/json</string>
<string name="send_type_external_browser">Открыть во внешнем браузере</string>
<string name="test_url">Проверка URL</string>
<string name="send_scan_bluetooth">Отправлять сканирования по bluetooth</string>
<string name="send_scan_bluetooth_summary">Пересылать сканированные данные на указанный узел bluetooth.</string>
<string name="send_scan_bluetooth_host">Узел</string>
<string name="no_bluetooth_hosts_paired">Нет сопряжённых узлов</string>
<string name="bluetooth_connect_fail">Невозможно подключиться к bluetooth-устройству.</string>
<string name="bluetooth_send_fail">Невозможно отправить на bluetooth-устройство.</string>
<string name="bluetooth_send_success">Успешно отправлено по bluetooth.</string>
<string name="really_remove_scan">Удалить сканирование?</string>
<string name="really_remove_all_scans">Удалить все сканирования?</string>
<string name="really_remove_selected_scans">Удалить выбранные штрих-коды?</string>
@@ -169,7 +177,8 @@
<string name="saved_in_downloads">Сохранено в загрузках</string>
<string name="rotate_image_cw">Повернуть изображение по часовой стрелке</string>
<string name="toggle_free_rotation">Переключить свободный поворот</string>
<string name="pick_file">Открыть файл с изображением</string>
<string name="pick_file">Открыть файл</string>
<string name="pick_image_file">Открыть файл с изображением</string>
<string name="pick_code_to_scan">Выберите штрих-код для сканирования</string>
<string name="shortcut_decode">Сканировать штрих-код</string>
<string name="shortcut_encode">Создать штрих-код</string>
@@ -182,7 +191,7 @@
<string name="wifi_password">Пароль</string>
<string name="wifi_hidden">Скрытая сеть</string>
<string name="wifi_eap">Тип EAP</string>
<string name="wifi_anonymous_identity">Аноним</string>
<string name="wifi_anonymous_identity">Анонимно</string>
<string name="wifi_identity">Пользователь</string>
<string name="wifi_phase2">Двухэтапный метод</string>
<string name="network_suggestions">Сетевые предложения</string>
+13 -4
View File
@@ -1,5 +1,4 @@
<resources>
<string name="no_camera_no_fun">Bu uygulama kamera izni olmadan anlamsızdır. Güle güle.</string>
<string name="camera_error">Kameraya erişilemiyor, lütfen yeniden deneyin</string>
<string name="scan_code">Kod tara</string>
<string name="compose_barcode">Barkod yarat</string>
@@ -32,6 +31,7 @@
<string name="toggle_flash">Flaşı aç</string>
<string name="error_flash">Flaş açılırken hata oluştu</string>
<string name="share">Paylaş</string>
<string name="share_file">Share as file</string>
<string name="share_as">Şöyle paylaş:</string>
<string name="copy_to_clipboard">Panoya kopyala</string>
<string name="copied_to_clipboard">Panoya kopyalandı</string>
@@ -41,9 +41,10 @@
<string name="cannot_resolve_action">Bunu açacak uygulama yok</string>
<string name="pick_search_engine">Arama motoru seç</string>
<string name="format">Biçim</string>
<string name="size">Piksel türünde boyut</string>
<string name="width_by_height">%1$d×%2$d</string>
<string name="size_width_by_height">Piksel türünde boyut: %1$d×%2$d</string>
<string name="margin_size">Margin in pixels: %1$d</string>
<string name="input_content_here">İçeriği buraya gir</string>
<string name="unescape">Expand escape sequences</string>
<string name="encode">KODLA</string>
<string name="error_no_content">İçerik eksik</string>
<string name="error_encoding_barcode">Barkod yaratılamadı</string>
@@ -125,6 +126,13 @@
<string name="send_type_post_json">POST application/json</string>
<string name="send_type_external_browser">Harici tarayıcıda aç</string>
<string name="test_url">URL\'yi sına</string>
<string name="send_scan_bluetooth">Forward scans with Bluetooth</string>
<string name="send_scan_bluetooth_summary">Enable to forwards scans to a given Bluetooth host.</string>
<string name="send_scan_bluetooth_host">Host</string>
<string name="no_bluetooth_hosts_paired">No Hosts Paired</string>
<string name="bluetooth_connect_fail">Could not connect to bluetooth device.</string>
<string name="bluetooth_send_fail">Could not send to bluetooth device.</string>
<string name="bluetooth_send_success">Successful bluetooth send.</string>
<string name="really_remove_scan">Tarama gerçekten silinsin mi?</string>
<string name="really_remove_all_scans">Tüm taramalar gerçekten silinsin mi?</string>
<string name="really_remove_selected_scans">Seçili taramalar gerçekten silinsin mi?</string>
@@ -167,7 +175,8 @@
<string name="saved_in_downloads">İndirilenlere kaydedildi</string>
<string name="rotate_image_cw">Görüntüyü saat yönünde döndür</string>
<string name="toggle_free_rotation">Serbest dönüşü değiştir</string>
<string name="pick_file">Görüntü dosyası seç</string>
<string name="pick_file">Pick a file</string>
<string name="pick_image_file">Görüntü dosyası seç</string>
<string name="pick_code_to_scan">Taranacak kod seç</string>
<string name="shortcut_decode">Barkod tara</string>
<string name="shortcut_encode">Barkod yarat</string>
+42 -33
View File
@@ -1,5 +1,4 @@
<resources>
<string name="no_camera_no_fun">Ця програма немає сенсу без доступу до камери. До побачення.</string>
<string name="camera_error">Неможливо отримати доступ до камери, будь ласка, спробуйте ще раз</string>
<string name="scan_code">Сканування коду</string>
<string name="compose_barcode">Створити штрих-код</string>
@@ -16,23 +15,24 @@
<string name="error_correction_level_m" formatted="false">Середній (~15&#37; виправлення)</string>
<string name="error_correction_level_q" formatted="false">Квартиль (~25&#37; виправлення)</string>
<string name="error_correction_level_h" formatted="false">Високий (~30&#37; виправлення)</string>
<string name="colors">Fore and background</string>
<string name="colors_black_on_white">Black on white</string>
<string name="colors_white_on_black">White on black</string>
<string name="colors_black_on_transparent">Black on transparent</string>
<string name="colors_white_on_transparent">White on transparent</string>
<string name="sequence_size">Sequence size</string>
<string name="sequence_index">Sequence index</string>
<string name="sequence_id">Sequence ID</string>
<string name="colors">Кольори</string>
<string name="colors_black_on_white">Чорний на білому</string>
<string name="colors_white_on_black">Білий на чорному</string>
<string name="colors_black_on_transparent">Чорний на прозорому</string>
<string name="colors_white_on_transparent">Білий на прозорому</string>
<string name="sequence_size">Розмір послідовності</string>
<string name="sequence_index">Індекс послідовності</string>
<string name="sequence_id">ID послідовності</string>
<string name="gtin_issue_number">Номер випуску</string>
<string name="gtin_country">Можлива країна-виробник</string>
<string name="gtin_price">Рекомендована ціна</string>
<string name="gtin_add_on">Розширення UPC EAN</string>
<string name="barcode_version_number">Version</string>
<string name="qr_version_and_modules">%1$s (%2$d modules)</string>
<string name="barcode_version_number">Версія</string>
<string name="qr_version_and_modules">%1$s (%2$d модулі)</string>
<string name="toggle_flash">Увімкнути спалах</string>
<string name="error_flash">Error toggling flash</string>
<string name="error_flash">Помилка під час увімкнення спалаху</string>
<string name="share">Поділитися</string>
<string name="share_file">Share as file</string>
<string name="share_as">Поділитися як?</string>
<string name="copy_to_clipboard">Копіювати у буфер обміну</string>
<string name="copied_to_clipboard">Скопійовано у буфер обміну</string>
@@ -42,9 +42,10 @@
<string name="cannot_resolve_action">Жодey додаток не може цього відкрити</string>
<string name="pick_search_engine">Вибрати пошукову систему</string>
<string name="format">Формат</string>
<string name="size">Розмір у пікселях</string>
<string name="width_by_height">%1$d×%2$d</string>
<string name="size_width_by_height">Розмір у пікселях: %1$d×%2$d</string>
<string name="margin_size">Margin in pixels: %1$d</string>
<string name="input_content_here">Введіть вміст сюди</string>
<string name="unescape">Розгорнути спеціальні послідовності</string>
<string name="encode">КОДУВАТИ</string>
<string name="error_no_content">Відсутній вміст</string>
<string name="error_encoding_barcode">Неможливо створити штрих-код</string>
@@ -54,9 +55,9 @@
<string name="bulk_mode">Сканувати безперервно</string>
<string name="bulk_mode_summary">Завжди починати безперервне сканування.</string>
<string name="bulk_mode_delay">Затримка між безперервним скануванням</string>
<string name="restrict_format">Restrict format</string>
<string name="remove_restriction">Remove restriction</string>
<string name="scan_format">Scan %s</string>
<string name="restrict_format">Обмежити формат</string>
<string name="remove_restriction">Скасувати обмеження</string>
<string name="scan_format">Сканувати %s</string>
<string name="quarter_second">Чверть секунди</string>
<string name="half_second">Півсекунди</string>
<string name="a_second">Одна секунда</string>
@@ -82,15 +83,15 @@
<string name="show_toast_in_bulk_mode_summary">Коротко показати відскановані дані під час безперервного сканування.</string>
<string name="vibrate">Вібрувати при виявленні</string>
<string name="vibrate_summary">Увімкніть це, якщо хочете, щоб пристрій вібрував, коли код розпізнано.</string>
<string name="beep">Beep on detection</string>
<string name="beep">Звук при виявленні</string>
<string name="beep_summary">Enable this if you want your device to beep when a code is recognized.</string>
<string name="beep_tone">Beep tone</string>
<string name="tone_cdma_confirm">CDMA confirm</string>
<string name="tone_sup_confirm">Call supervisory confirm</string>
<string name="tone_sup_radio_ack">Call supervisory radio path acknowledgment</string>
<string name="tone_prop_ack">Positive acknowledgment</string>
<string name="tone_prop_beep">General beep</string>
<string name="tone_prop_beep2">General double beep</string>
<string name="beep_tone">Тон звуку</string>
<string name="tone_cdma_confirm">Підтвердження CDMA</string>
<string name="tone_sup_confirm">Підтвердження диспетчерського виклику</string>
<string name="tone_sup_radio_ack">Підтвердження прийому по радіоканалу</string>
<string name="tone_prop_ack">Позитивне підтвердження</string>
<string name="tone_prop_beep">Звичайний сигнал</string>
<string name="tone_prop_beep2">Звичайний подвійний сигнал</string>
<string name="use_history">Зберігати історію сканування</string>
<string name="use_history_summary">Збережіть розпізнані коди на своєму пристрої.</string>
<string name="ignore_consecutive_duplicates">Ігнорувати дублікати</string>
@@ -103,8 +104,8 @@
<string name="show_meta_data_summary">Показувати додаткові дані про відскановані штрих-коди.</string>
<string name="show_hex_dump">Показувати шістнадцятковий дамп</string>
<string name="show_hex_dump_summary">Показувати шістнадцятковий дамп відсканованого вмісту.</string>
<string name="show_recreation">Show recreated barcode</string>
<string name="show_recreation_summary">Recreate and show barcode from read content if possible.</string>
<string name="show_recreation">Показати відновлений штрих-код</string>
<string name="show_recreation_summary">Відтворити і показати штрих-код із прочитаного вмісту, якщо це можливо.</string>
<string name="close_automatically">Повернутися після копіювання/поширення</string>
<string name="close_automatically_summary">Автоматично повернутися на екран сканування після копіювання або поширення прочитаного вмісту.</string>
<string name="default_search_engine">Відкривати невідомі дані в</string>
@@ -116,8 +117,8 @@
<string name="clear_network_suggestions_success">Мережеві пропозиції очищено</string>
<string name="clear_network_suggestions_nothing_to_remove">Нічого видаляти</string>
<string name="send_category">Пересилання</string>
<string name="send_scan_active">Forward scans</string>
<string name="send_scan_active_summary">Enable to forward scans to a the given URL</string>
<string name="send_scan_active">Пересилати сканування</string>
<string name="send_scan_active_summary">Пересилати скановані дані на вказану URL</string>
<string name="send_scan_url">Надсилати кожне сканування на URL</string>
<string name="send_scan_type">Тип запиту для кожного сканування</string>
<string name="send_type_get_add_content">GET і просто додати контент</string>
@@ -126,6 +127,13 @@
<string name="send_type_post_json">POST application/json</string>
<string name="send_type_external_browser">Відкрити у зовнішньому браузері</string>
<string name="test_url">Перевірити URL</string>
<string name="send_scan_bluetooth">Пересилати сканування через Bluetooth</string>
<string name="send_scan_bluetooth_summary">Пересилати скановані дані на вказаний хост Bluetooth</string>
<string name="send_scan_bluetooth_host">Хост</string>
<string name="no_bluetooth_hosts_paired">Немає сполучених хостів</string>
<string name="bluetooth_connect_fail">Неможливо підключитися до пристрою Bluetooth.</string>
<string name="bluetooth_send_fail">Неможливо надіслати на пристрій Bluetooth.</string>
<string name="bluetooth_send_success">Успішно надіслано через Bluetooth.</string>
<string name="really_remove_scan">Дійсно видалити сканування?</string>
<string name="really_remove_all_scans">Дійсно видалити всі сканування?</string>
<string name="really_remove_selected_scans">Дійсно видалити вибрані сканування?</string>
@@ -167,8 +175,9 @@
<string name="export_database">Експортувати базу даних SQLite</string>
<string name="saved_in_downloads">Збережено в Завантаженнях</string>
<string name="rotate_image_cw">Повернути зображення за годинниковою стрілкою</string>
<string name="toggle_free_rotation">Toggle free rotation</string>
<string name="pick_file">Вибрати файл зображення</string>
<string name="toggle_free_rotation">Увімкнути вільне обертання</string>
<string name="pick_file">Pick a file</string>
<string name="pick_image_file">Вибрати файл зображення</string>
<string name="pick_code_to_scan">Вибрати код для сканування</string>
<string name="shortcut_decode">Сканувати штрих-код</string>
<string name="shortcut_encode">Створити штрих-код</string>
@@ -184,6 +193,6 @@
<string name="wifi_anonymous_identity">Анонімна особа</string>
<string name="wifi_identity">Користувач</string>
<string name="wifi_phase2">Phase 2 метод</string>
<string name="network_suggestions">Network suggestions</string>
<string name="remove_suggestion">Remove suggestion</string>
<string name="network_suggestions">Мережеві пропозиції</string>
<string name="remove_suggestion">Видалити пропозицію</string>
</resources>
+13 -4
View File
@@ -1,5 +1,4 @@
<resources>
<string name="no_camera_no_fun">Ứng dụng này không hoạt động nếu không có camera. Tạm biệt.</string>
<string name="camera_error">Không thể mở camera, hãy thử lại</string>
<string name="scan_code">Quét mã</string>
<string name="compose_barcode">Tạo mã vạch</string>
@@ -31,6 +30,7 @@
<string name="toggle_flash">Bật/tắt đèn</string>
<string name="error_flash">Error toggling flash</string>
<string name="share">Chia sẻ</string>
<string name="share_file">Share as file</string>
<string name="share_as">Chia sẻ dưới định dạng?</string>
<string name="copy_to_clipboard">Sao chép</string>
<string name="copied_to_clipboard">Đã sao chép</string>
@@ -40,9 +40,10 @@
<string name="cannot_resolve_action">Không có ứng dụng nào mở được nội dung này</string>
<string name="pick_search_engine">Chọn một trình tìm kiếm</string>
<string name="format">Định dạng</string>
<string name="size">Kích cỡ theo pixel</string>
<string name="width_by_height">%1$d×%2$d</string>
<string name="size_width_by_height">Kích cỡ theo pixel: %1$d×%2$d</string>
<string name="margin_size">Margin in pixels: %1$d</string>
<string name="input_content_here">Nhập nội dung vào đây</string>
<string name="unescape">Expand escape sequences</string>
<string name="encode">MÃ HOÁ</string>
<string name="error_no_content">Thiếu nội dung</string>
<string name="error_encoding_barcode">Không thể tạo ra mã vạch</string>
@@ -124,6 +125,13 @@
<string name="send_type_post_json">POST application/json</string>
<string name="send_type_external_browser">Open in external browser</string>
<string name="test_url">URL thử</string>
<string name="send_scan_bluetooth">Forward scans with Bluetooth</string>
<string name="send_scan_bluetooth_summary">Enable to forwards scans to a given Bluetooth host.</string>
<string name="send_scan_bluetooth_host">Host</string>
<string name="no_bluetooth_hosts_paired">No Hosts Paired</string>
<string name="bluetooth_connect_fail">Could not connect to bluetooth device.</string>
<string name="bluetooth_send_fail">Could not send to bluetooth device.</string>
<string name="bluetooth_send_success">Successful bluetooth send.</string>
<string name="really_remove_scan">Thật sự xoá lần quét này?</string>
<string name="really_remove_all_scans">Thật sự xoá tất cả các lần quét?</string>
<string name="really_remove_selected_scans">Thật sự xoá các lần quét được chọn?</string>
@@ -166,7 +174,8 @@
<string name="saved_in_downloads">Lưu vào Downloads</string>
<string name="rotate_image_cw">Quay ảnh theo chiều kim đồng hồ</string>
<string name="toggle_free_rotation">Toggle free rotation</string>
<string name="pick_file">Chọn tệp ảnh</string>
<string name="pick_file">Pick a file</string>
<string name="pick_image_file">Chọn tệp ảnh</string>
<string name="pick_code_to_scan">Chọn mã để quét</string>
<string name="shortcut_decode">Quét mã vạch</string>
<string name="shortcut_encode">Tạo mã vạch</string>
+17 -8
View File
@@ -1,5 +1,4 @@
<resources>
<string name="no_camera_no_fun">没有相机权限的话,该应用没有任何意义。再见!</string>
<string name="camera_error">无法访问相机,请重试。</string>
<string name="scan_code">扫码</string>
<string name="compose_barcode">生成条码</string>
@@ -31,6 +30,7 @@
<string name="toggle_flash">开关闪光灯</string>
<string name="error_flash">开关闪光灯出错</string>
<string name="share">分享</string>
<string name="share_file">Share as file</string>
<string name="share_as">以何种方式分享?</string>
<string name="copy_to_clipboard">复制到剪贴板</string>
<string name="copied_to_clipboard">已复制到剪贴板</string>
@@ -40,9 +40,10 @@
<string name="cannot_resolve_action">没有应用可以打开它</string>
<string name="pick_search_engine">选择一个搜索引擎</string>
<string name="format">编码格式</string>
<string name="size">图片尺寸</string>
<string name="width_by_height">%1$d×%2$d</string>
<string name="size_width_by_height">图片尺寸: %1$d×%2$d</string>
<string name="margin_size">Margin in pixels: %1$d</string>
<string name="input_content_here">在这里输入内容</string>
<string name="unescape">展开转义字符</string>
<string name="encode">编码</string>
<string name="error_no_content">缺少内容</string>
<string name="error_encoding_barcode">无法生成条码</string>
@@ -93,7 +94,7 @@
<string name="use_history_summary">在本地保存扫描历史</string>
<string name="ignore_consecutive_duplicates">不保存重复历史</string>
<string name="ignore_consecutive_duplicates_summary">在扫描历史中不保存重复项</string>
<string name="open_immediately">不查内容立即打开</string>
<string name="open_immediately">查内容立即打开链接</string>
<string name="open_immediately_summary">可能会打开有害内容</string>
<string name="copy_immediately">自动复制扫描结果到剪贴板</string>
<string name="copy_immediately_summary">注意其他 APP 可能会在后台监控剪贴板</string>
@@ -114,9 +115,9 @@
<string name="clear_network_suggestions_success">网络建议已清除</string>
<string name="clear_network_suggestions_nothing_to_remove">无内容可清除</string>
<string name="send_category">转发</string>
<string name="send_scan_active">转发扫描</string>
<string name="send_scan_active_summary">启用以转发扫描到给定的 URL</string>
<string name="send_scan_url">转发 URL</string>
<string name="send_scan_active">转发扫描结果</string>
<string name="send_scan_active_summary">启用以转发扫描结果至指定的 URL</string>
<string name="send_scan_url">转发 URL</string>
<string name="send_scan_type">请求类型</string>
<string name="send_type_get_add_content">GET 简单附加数据</string>
<string name="send_type_get_query_string">GET 完整查询数据</string>
@@ -124,6 +125,13 @@
<string name="send_type_post_json">POST application/json</string>
<string name="send_type_external_browser">在外部浏览器中打开</string>
<string name="test_url">测试 URL</string>
<string name="send_scan_bluetooth">使用蓝牙转发扫描结果</string>
<string name="send_scan_bluetooth_summary">启用以转发扫描结果至指定的蓝牙服务设备</string>
<string name="send_scan_bluetooth_host">蓝牙服务器</string>
<string name="no_bluetooth_hosts_paired">没有已配对的服务器</string>
<string name="bluetooth_connect_fail">无法连接蓝牙设备。</string>
<string name="bluetooth_send_fail">无法将结果发送至蓝牙设备</string>
<string name="bluetooth_send_success">已通过蓝牙发送</string>
<string name="really_remove_scan">确定删除记录?</string>
<string name="really_remove_all_scans">确定删除全部记录?</string>
<string name="really_remove_selected_scans">确定删除所选记录?</string>
@@ -166,7 +174,8 @@
<string name="saved_in_downloads">已保存到下载目录</string>
<string name="rotate_image_cw">顺时针旋转图片</string>
<string name="toggle_free_rotation">切换自由旋转</string>
<string name="pick_file">选择图片文件</string>
<string name="pick_file">Pick a file</string>
<string name="pick_image_file">选择图片文件</string>
<string name="pick_code_to_scan">选择扫描编码</string>
<string name="shortcut_decode">扫描条码</string>
<string name="shortcut_encode">创建条码</string>
@@ -0,0 +1,25 @@
<resources>
<string-array name="locale_names">
<item>@string/follow_system_settings</item>
<item>英文</item>
<item>德文</item>
<item>西班牙</item>
<item>法文</item>
<item>匈牙利</item>
<item>印尼</item>
<item>義大利</item>
<item>喬治亞</item>
<item>荷蘭</item>
<item>波斯</item>
<item>波蘭</item>
<item>巴西 (葡萄牙)</item>
<item>俄羅斯</item>
<item>土耳其</item>
<item>烏克蘭</item>
<item>中文</item>
<item>繁體中文</item>
<item>簡體中文</item>
<item>日文</item>
<item>捷克</item>
</string-array>
</resources>

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